@aws-amplify/amplify-category-notifications
Version:
amplify-cli notifications plugin
161 lines • 9.18 kB
JavaScript
;
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