12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.StorageCloudFunctions = void 0;
- const uuid = require("uuid");
- const registry_1 = require("../registry");
- const types_1 = require("../types");
- const emulatorLogger_1 = require("../emulatorLogger");
- const metadata_1 = require("./metadata");
- const STORAGE_V2_ACTION_MAP = {
- finalize: "finalized",
- metadataUpdate: "metadataUpdated",
- delete: "deleted",
- archive: "archived",
- };
- class StorageCloudFunctions {
- constructor(projectId) {
- this.projectId = projectId;
- this.logger = emulatorLogger_1.EmulatorLogger.forEmulator(types_1.Emulators.STORAGE);
- this.multicastPath = "";
- this.enabled = false;
- if (registry_1.EmulatorRegistry.isRunning(types_1.Emulators.FUNCTIONS)) {
- this.enabled = true;
- this.multicastPath = `/functions/projects/${projectId}/trigger_multicast`;
- this.client = registry_1.EmulatorRegistry.client(types_1.Emulators.FUNCTIONS);
- }
- }
- async dispatch(action, object) {
- if (!this.enabled) {
- return;
- }
- const errStatus = [];
- let err;
- try {
- const eventBody = this.createLegacyEventRequestBody(action, object);
- const eventRes = await this.client.post(this.multicastPath, eventBody);
- if (eventRes.status !== 200) {
- errStatus.push(eventRes.status);
- }
- const cloudEventBody = this.createCloudEventRequestBody(action, object);
- const cloudEventRes = await this.client.post(this.multicastPath, cloudEventBody, {
- headers: { "Content-Type": "application/cloudevents+json; charset=UTF-8" },
- });
- if (cloudEventRes.status !== 200) {
- errStatus.push(cloudEventRes.status);
- }
- }
- catch (e) {
- err = e;
- }
- if (err || errStatus.length > 0) {
- this.logger.logLabeled("WARN", "functions", `Firebase Storage function was not triggered due to emulation error. Please file a bug.`);
- }
- }
- createLegacyEventRequestBody(action, objectMetadataPayload) {
- const timestamp = new Date();
- return {
- eventId: `${timestamp.getTime()}`,
- timestamp: (0, metadata_1.toSerializedDate)(timestamp),
- eventType: `google.storage.object.${action}`,
- resource: {
- service: "storage.googleapis.com",
- name: `projects/_/buckets/${objectMetadataPayload.bucket}/objects/${objectMetadataPayload.name}`,
- type: "storage#object",
- },
- data: objectMetadataPayload,
- };
- }
- createCloudEventRequestBody(action, objectMetadataPayload) {
- const ceAction = STORAGE_V2_ACTION_MAP[action];
- if (!ceAction) {
- throw new Error("Action is not defined as a CloudEvents action");
- }
- const data = objectMetadataPayload;
- let time = new Date().toISOString();
- if (data.updated) {
- time = typeof data.updated === "string" ? data.updated : data.updated.toISOString();
- }
- return {
- specversion: "1",
- id: uuid.v4(),
- type: `google.cloud.storage.object.v1.${ceAction}`,
- source: `//storage.googleapis.com/projects/_/buckets/${objectMetadataPayload.bucket}/objects/${objectMetadataPayload.name}`,
- time,
- data,
- };
- }
- }
- exports.StorageCloudFunctions = StorageCloudFunctions;
|