UNPKG

@aws-amplify/amplify-category-notifications

Version:

amplify-cli notifications plugin

161 lines 9.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.constructResourceMeta = exports.constructPartialNotificationsAppMeta = exports.addPartialNotificationsAppMeta = exports.getDisabledChannelsFromAmplifyMeta = exports.getEnabledChannelsFromAppMeta = exports.isNotificationChannelEnabled = exports.checkMigratedFromMobileHubLegacy = exports.checkMigratedFromMobileHub = exports.removeNotificationsAppMeta = exports.getNotificationsAppMeta = exports.toggleNotificationsChannelAppMeta = void 0; const amplify_cli_core_1 = require("@aws-amplify/amplify-cli-core"); const plugin_client_api_analytics_1 = require("./plugin-client-api-analytics"); const notifications_backend_cfg_channel_api_1 = require("./notifications-backend-cfg-channel-api"); const pinpoint_helper_1 = require("./pinpoint-helper"); const toggleNotificationsChannelAppMeta = async (channelName, isEnabled, amplifyMeta, appName) => { const tmpAmplifyMeta = amplifyMeta; const notificationsAppMeta = await (0, exports.getNotificationsAppMeta)(tmpAmplifyMeta, appName); if (!notificationsAppMeta) { return tmpAmplifyMeta; } const channelOutput = notificationsAppMeta.output || {}; const channelValue = channelOutput[channelName] || {}; notificationsAppMeta.output = notificationsAppMeta.output || {}; notificationsAppMeta.output[channelName] = { ...channelValue, Enabled: isEnabled, ApplicationId: channelOutput.Id, Name: channelOutput.Name, }; if (!notificationsAppMeta.lastPushTimeStamp) { const analyticsLastPushTimeStamp = await (0, plugin_client_api_analytics_1.invokeGetLastPushTimeStamp)(tmpAmplifyMeta, notificationsAppMeta.ResourceName); if (analyticsLastPushTimeStamp) { notificationsAppMeta.lastPushTimeStamp = analyticsLastPushTimeStamp; notificationsAppMeta.lastPushDirHash = notificationsAppMeta.lastPushDirHash || oneAtATimeJenkinsHash(JSON.stringify(notificationsAppMeta)); } } tmpAmplifyMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS][notificationsAppMeta.ResourceName] = notificationsAppMeta; return tmpAmplifyMeta; }; exports.toggleNotificationsChannelAppMeta = toggleNotificationsChannelAppMeta; const oneAtATimeJenkinsHash = (keyString) => { let hash = 0; for (let charIndex = 0; charIndex < keyString.length; ++charIndex) { hash += keyString.charCodeAt(charIndex); hash += hash << 10; hash ^= hash >> 6; } hash += hash << 3; hash ^= hash >> 11; return (((hash + (hash << 15)) & 4294967295) >>> 0).toString(16); }; const getNotificationsAppMeta = async (amplifyMeta, appName) => { const notificationResourceList = await getNotificationsAppListMeta(amplifyMeta, appName); return notificationResourceList.length > 0 ? notificationResourceList[0] : undefined; }; exports.getNotificationsAppMeta = getNotificationsAppMeta; const removeNotificationsAppMeta = async (context) => { const amplifyMeta = context.exeInfo.amplifyMeta || amplify_cli_core_1.stateManager.getMeta(); if (amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS in amplifyMeta) { delete amplifyMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS]; } context.exeInfo.amplifyMeta = amplifyMeta; return context; }; exports.removeNotificationsAppMeta = removeNotificationsAppMeta; const checkMigratedFromMobileHub = async (amplifyMeta) => { const notificationAppMeta = await (0, exports.getNotificationsAppMeta)(amplifyMeta); return !!(notificationAppMeta === null || notificationAppMeta === void 0 ? void 0 : notificationAppMeta.mobileHubMigrated); }; exports.checkMigratedFromMobileHub = checkMigratedFromMobileHub; const checkMigratedFromMobileHubLegacy = async (amplifyMeta) => { const tmpMeta = amplifyMeta || (await amplify_cli_core_1.stateManager.getMeta()); const categoryMeta = tmpMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS]; if (categoryMeta) { const services = Object.keys(categoryMeta); for (const service of services) { const serviceMeta = categoryMeta[service]; if (serviceMeta.mobileHubMigrated === true) { return true; } } } return false; }; exports.checkMigratedFromMobileHubLegacy = checkMigratedFromMobileHubLegacy; const isNotificationChannelEnabled = (notificationsResourceMeta, channelName) => { var _a; return !!((_a = notificationsResourceMeta === null || notificationsResourceMeta === void 0 ? void 0 : notificationsResourceMeta.output[channelName]) === null || _a === void 0 ? void 0 : _a.Enabled); }; exports.isNotificationChannelEnabled = isNotificationChannelEnabled; const getEnabledChannelsFromAppMeta = async (amplifyMeta) => { const tmpAmplifyMeta = amplifyMeta || amplify_cli_core_1.stateManager.getMeta(); const availableChannels = (0, notifications_backend_cfg_channel_api_1.getAvailableChannels)(); const notificationsMeta = await (0, exports.getNotificationsAppMeta)(tmpAmplifyMeta); return notificationsMeta ? availableChannels.filter((channel) => (0, exports.isNotificationChannelEnabled)(notificationsMeta, channel)) : []; }; exports.getEnabledChannelsFromAppMeta = getEnabledChannelsFromAppMeta; const getDisabledChannelsFromAmplifyMeta = async (amplifyMeta) => { const disabledChannelList = []; const availableChannels = (0, notifications_backend_cfg_channel_api_1.getAvailableChannels)(); const enabledChannels = await (0, exports.getEnabledChannelsFromAppMeta)(amplifyMeta); availableChannels.forEach((channel) => { if (!enabledChannels.includes(channel)) { disabledChannelList.push(channel); } }); return disabledChannelList; }; exports.getDisabledChannelsFromAmplifyMeta = getDisabledChannelsFromAmplifyMeta; const addPartialNotificationsAppMeta = async (context, notificationResourceName) => { const updatedAmplifyMeta = await amplify_cli_core_1.stateManager.getMeta(); const applicationRegion = amplify_cli_core_1.stateManager.getCurrentRegion(); if (!applicationRegion) { throw new amplify_cli_core_1.AmplifyError('ConfigurationError', { message: `Invalid Region for project`, }); } const pinpointRegion = await (0, pinpoint_helper_1.mapServiceRegion)(context, applicationRegion); return (0, exports.constructPartialNotificationsAppMeta)(updatedAmplifyMeta, notificationResourceName, pinpointRegion); }; exports.addPartialNotificationsAppMeta = addPartialNotificationsAppMeta; const constructPartialNotificationsAppMeta = (amplifyMeta, resourceName, pinpointRegion) => { const envName = amplify_cli_core_1.stateManager.getCurrentEnvName(); const partialPinpointOutput = { Id: undefined, Region: pinpointRegion, Name: `${resourceName}-${envName}`, }; return (0, exports.constructResourceMeta)(amplifyMeta, resourceName, partialPinpointOutput); }; exports.constructPartialNotificationsAppMeta = constructPartialNotificationsAppMeta; const constructResourceMeta = (amplifyMeta, resourceName, pinpointOutput) => { if (!amplifyMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS] || Object.keys(amplifyMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS]).length === 0) { amplifyMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS] = { [resourceName]: { output: {} } }; } amplifyMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS][resourceName] = { ...amplifyMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS][resourceName], service: amplify_cli_core_1.AmplifySupportedService.PINPOINT, output: { ...amplifyMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS][resourceName].output, ...pinpointOutput, }, lastPushTimeStamp: new Date(), }; return amplifyMeta; }; exports.constructResourceMeta = constructResourceMeta; const getNotificationsAppListMeta = async (amplifyMeta, appName) => { const tmpMeta = amplifyMeta || (await amplify_cli_core_1.stateManager.getMeta()); const notificationsMeta = tmpMeta[amplify_cli_core_1.AmplifyCategories.NOTIFICATIONS]; const notificationsResourceList = []; if (notificationsMeta) { for (const resourceName of Object.keys(notificationsMeta)) { if (!appName || appName === resourceName) { const notificationsResourceMeta = notificationsMeta[resourceName]; notificationsResourceList.push({ Id: notificationsResourceMeta.output.Id, ResourceName: resourceName, Name: notificationsResourceMeta.output.Name, service: notificationsResourceMeta.service || amplify_cli_core_1.AmplifySupportedService.PINPOINT, Region: notificationsResourceMeta.output.Region, output: notificationsResourceMeta.output, ...notificationsResourceMeta, }); } } } return notificationsResourceList; }; //# sourceMappingURL=notifications-amplify-meta-api.js.map