UNPKG

firebase-tools

Version:
113 lines (112 loc) 4.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.client = exports.AI_LOGIC_TRIGGERS_TO_EVENTS = exports.AI_LOGIC_EVENTS_TO_TRIGGER = exports.AI_LOGIC_AFTER_GENERATE_CONTENT = exports.AI_LOGIC_BEFORE_GENERATE_CONTENT = exports.API_VERSION = void 0; exports.createTrigger = createTrigger; exports.getTrigger = getTrigger; exports.updateTrigger = updateTrigger; exports.deleteTrigger = deleteTrigger; exports.listTriggers = listTriggers; exports.upsertBlockingFunction = upsertBlockingFunction; exports.deleteBlockingFunction = deleteBlockingFunction; const apiv2_1 = require("../apiv2"); const api_1 = require("../api"); const error_1 = require("../error"); exports.API_VERSION = "v1beta"; exports.AI_LOGIC_BEFORE_GENERATE_CONTENT = "google.firebase.ailogic.v1.beforeGenerate"; exports.AI_LOGIC_AFTER_GENERATE_CONTENT = "google.firebase.ailogic.v1.afterGenerate"; exports.AI_LOGIC_EVENTS_TO_TRIGGER = { [exports.AI_LOGIC_BEFORE_GENERATE_CONTENT]: "before-generate-content", [exports.AI_LOGIC_AFTER_GENERATE_CONTENT]: "after-generate-content", }; exports.AI_LOGIC_TRIGGERS_TO_EVENTS = { "before-generate-content": exports.AI_LOGIC_BEFORE_GENERATE_CONTENT, "after-generate-content": exports.AI_LOGIC_AFTER_GENERATE_CONTENT, }; exports.client = new apiv2_1.Client({ urlPrefix: (0, api_1.aiLogicProxyOrigin)(), auth: true, apiVersion: exports.API_VERSION, }); async function createTrigger(projectId, location, triggerId, trigger, validateOnly = false) { const parent = `projects/${projectId}/locations/${location}`; const res = await exports.client.post(`${parent}/triggers`, trigger, { queryParams: { triggerId, validateOnly: validateOnly ? "true" : "false", }, }); return res.body; } async function getTrigger(projectId, location, triggerId) { const name = `projects/${projectId}/locations/${location}/triggers/${triggerId}`; const res = await exports.client.get(name); return res.body; } async function updateTrigger(projectId, location, triggerId, trigger, updateMask, allowMissing = false, validateOnly = false) { const name = `projects/${projectId}/locations/${location}/triggers/${triggerId}`; const queryParams = { allowMissing: allowMissing ? "true" : "false", validateOnly: validateOnly ? "true" : "false", }; if (updateMask && updateMask.length > 0) { queryParams.updateMask = updateMask.join(","); } const res = await exports.client.patch(name, trigger, { queryParams }); return res.body; } async function deleteTrigger(projectId, location, triggerId, allowMissing = true, validateOnly = false, etag) { const name = `projects/${projectId}/locations/${location}/triggers/${triggerId}`; const queryParams = { allowMissing: allowMissing ? "true" : "false", validateOnly: validateOnly ? "true" : "false", }; if (etag) { queryParams.etag = etag; } await exports.client.delete(name, { queryParams }); } async function listTriggers(projectId, location, filter) { const parent = `projects/${projectId}/locations/${location}`; let pageToken; const triggers = []; do { const queryParams = pageToken ? { pageToken } : {}; if (filter) { queryParams.filter = filter; } const res = await exports.client.get(`${parent}/triggers`, { queryParams }); if (res.body.triggers) { triggers.push(...res.body.triggers); } pageToken = res.body.nextPageToken; } while (pageToken); return triggers; } async function upsertBlockingFunction(endpoint) { const eventType = endpoint.blockingTrigger.eventType; const triggerId = exports.AI_LOGIC_EVENTS_TO_TRIGGER[eventType]; const location = endpoint.blockingTrigger.options?.regionalWebhook ? endpoint.region : "global"; const triggerBody = { cloudFunction: { id: endpoint.id, locationId: endpoint.region, }, }; try { return await createTrigger(endpoint.project, location, triggerId, triggerBody); } catch (err) { if ((0, error_1.getErrStatus)(err) === 409) { return await updateTrigger(endpoint.project, location, triggerId, triggerBody, [ "cloudFunction", ]); } throw err; } } async function deleteBlockingFunction(endpoint) { const eventType = endpoint.blockingTrigger.eventType; const triggerId = exports.AI_LOGIC_EVENTS_TO_TRIGGER[eventType]; const location = endpoint.blockingTrigger.options?.regionalWebhook ? endpoint.region : "global"; await deleteTrigger(endpoint.project, location, triggerId, true); }