UNPKG

@aws-amplify/core

Version:

Core category of aws-amplify

103 lines (101 loc) • 4.75 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Amplify = exports.AmplifyClass = void 0; // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 const Hub_1 = require("../Hub"); const utils_1 = require("../utils"); const libraryUtils_1 = require("../libraryUtils"); const contextBrand_1 = require("../context/contextBrand"); const contextToken_1 = require("../context/contextToken"); const globalContext_1 = require("../context/globalContext"); const Auth_1 = require("./Auth"); class AmplifyClass { constructor() { this.isConfigured = false; this.resourcesConfig = {}; this.libraryOptions = {}; this.Auth = new Auth_1.AuthClass(); } /** * Configures Amplify for use with your back-end resources. * * @remarks * This API does not perform any merging of either `resourcesConfig` or `libraryOptions`. The most recently * provided values will be used after configuration. * * @remarks * `configure` can be used to specify additional library options where available for supported categories. * * @param resourceConfig - Back-end resource configuration. Typically provided via the `aws-exports.js` file. * @param libraryOptions - Additional options for customizing the behavior of the library. */ configure(resourcesConfig, libraryOptions) { const resolvedResourceConfig = (0, libraryUtils_1.parseAmplifyConfig)(resourcesConfig); this.resourcesConfig = resolvedResourceConfig; if (libraryOptions) { this.libraryOptions = libraryOptions; } // Make resource config immutable this.resourcesConfig = (0, utils_1.deepFreeze)(this.resourcesConfig); this.Auth.configure(this.resourcesConfig.Auth, this.libraryOptions.Auth); // Warn if Pinpoint is configured if (this.resourcesConfig.Analytics?.Pinpoint || this.resourcesConfig.Notifications?.InAppMessaging?.Pinpoint || this.resourcesConfig.Notifications?.PushNotification?.Pinpoint) { // eslint-disable-next-line no-console console.warn('AWS will end support for Amazon Pinpoint on October 30, 2026. ' + 'The guidance is to use AWS End User Messaging for push notifications and SMS, ' + 'Amazon Simple Email Service for sending emails, Amazon Connect for campaigns, journeys, endpoints, and engagement analytics. ' + 'Pinpoint recommends Amazon Kinesis for event collection and mobile analytics.'); } // Publish a branded AmplifyContext so that context-based APIs // (fetchAuthSession, clearCredentials) can resolve the global context. // Must be set BEFORE Hub.dispatch so listeners can call getGlobalContext(). const ctx = { resourcesConfig: this.resourcesConfig, libraryOptions: this.libraryOptions, // Unique, frozen per-context identity handle (see AmplifyContextToken): // each configure() publishes a NEW global context with a fresh token. // Attached before the brand/freeze below so the frozen context carries it. token: (0, contextToken_1.createAmplifyContextToken)(), fetchAuthSession: (options) => this.Auth.fetchAuthSession(options ?? {}), clearCredentials: () => this.Auth.clearCredentials(), getTokens: options => this.Auth.getTokens(options), }; Object.defineProperty(ctx, contextBrand_1.AMPLIFY_CONTEXT_BRAND, { value: true, enumerable: false, configurable: false, writable: false, }); Object.freeze(ctx); (0, globalContext_1.setGlobalContext)(ctx); Hub_1.Hub.dispatch('core', { event: 'configure', data: this.resourcesConfig, }, 'Configure', Hub_1.AMPLIFY_SYMBOL); this.isConfigured = true; } /** * Provides access to the current back-end resource configuration for the Library. * * @returns Returns the immutable back-end resource configuration. */ getConfig() { if (!this.isConfigured) { // eslint-disable-next-line no-console console.warn(`Amplify has not been configured. Please call Amplify.configure() before using this service.`); } return this.resourcesConfig; } } exports.AmplifyClass = AmplifyClass; /** * The `Amplify` utility is used to configure the library. * * @remarks * `Amplify` orchestrates cross-category communication within the library. */ exports.Amplify = new AmplifyClass(); //# sourceMappingURL=Amplify.js.map