firebase-tools
Version:
Command-Line Interface for Firebase
113 lines (112 loc) • 4.74 kB
JavaScript
;
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);
}