firebase-admin
Version:
Firebase admin SDK for Node.js
123 lines (122 loc) • 4.72 kB
JavaScript
/*! firebase-admin v13.2.0 */
;
/*!
* @license
* Copyright 2022 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Runtime = exports.Extensions = void 0;
const extensions_api_client_internal_1 = require("./extensions-api-client-internal");
const validator = require("../utils/validator");
/**
* The Firebase `Extensions` service interface.
*/
class Extensions {
/**
* @param app - The app for this `Extensions` service.
* @constructor
* @internal
*/
constructor(app) {
this.app = app;
this.client = new extensions_api_client_internal_1.ExtensionsApiClient(app);
}
/**
* The runtime() method returns a new Runtime, which provides methods to modify an extension instance's runtime data.
*
* @remarks
* This method will throw an error if called outside an Extensions environment.
*
* @returns A new {@link Runtime} object.
*/
runtime() {
return new Runtime(this.client);
}
}
exports.Extensions = Extensions;
/**
* Runtime provides methods to modify an extension instance's runtime data.
*/
class Runtime {
/**
* @param client - The API client for this `Runtime` service.
* @constructor
* @internal
*/
constructor(client) {
this.projectId = this.getProjectId();
if (!validator.isNonEmptyString(process.env['EXT_INSTANCE_ID'])) {
throw new extensions_api_client_internal_1.FirebaseExtensionsError('invalid-argument', 'Runtime is only available from within a running Extension instance.');
}
this.extensionInstanceId = process.env['EXT_INSTANCE_ID'];
if (!validator.isNonNullObject(client) || !('updateRuntimeData' in client)) {
throw new extensions_api_client_internal_1.FirebaseExtensionsError('invalid-argument', 'Must provide a valid ExtensionsApiClient instance to create a new Runtime.');
}
this.client = client;
}
/**
* Sets the processing state of an extension instance.
*
* @remarks
* Use this method to report the results of a lifecycle event handler.
*
* If the lifecycle event failed & the extension instance will no longer work
* correctly, use {@link Runtime.setFatalError} instead.
*
* To report the status of function calls other than lifecycle event handlers,
* use `console.log` or the Cloud Functions logger SDK.
*
* @param state - The state to set the instance to.
* @param detailMessage - A message explaining the results of the lifecycle function.
*/
async setProcessingState(state, detailMessage) {
await this.client.updateRuntimeData(this.projectId, this.extensionInstanceId, {
processingState: {
state,
detailMessage,
},
});
}
/**
* Reports a fatal error while running a lifecycle event handler.
*
* @remarks
* Call this method when a lifecycle event handler fails in a way that makes
* the Instance inoperable.
* If the lifecycle event failed but the instance will still work as expected,
* call `setProcessingState` with the "PROCESSING_WARNING" or
* "PROCESSING_FAILED" state instead.
*
* @param errorMessage - A message explaining what went wrong and how to fix it.
*/
async setFatalError(errorMessage) {
if (!validator.isNonEmptyString(errorMessage)) {
throw new extensions_api_client_internal_1.FirebaseExtensionsError('invalid-argument', 'errorMessage must not be empty');
}
await this.client.updateRuntimeData(this.projectId, this.extensionInstanceId, {
fatalError: {
errorMessage,
},
});
}
getProjectId() {
const projectId = process.env['PROJECT_ID'];
if (!validator.isNonEmptyString(projectId)) {
throw new extensions_api_client_internal_1.FirebaseExtensionsError('invalid-argument', 'PROJECT_ID must not be undefined in Extensions runtime environment');
}
return projectId;
}
}
exports.Runtime = Runtime;