in src/messaging/messaging.ts [877:946]
private validateMessagingOptions(options: MessagingOptions): MessagingOptions {
const optionsCopy: MessagingOptions = deepCopy(options);
// Validate the options object does not contain blacklisted properties
BLACKLISTED_OPTIONS_KEYS.forEach((blacklistedKey) => {
if (blacklistedKey in optionsCopy) {
throw new FirebaseMessagingError(
MessagingClientErrorCode.INVALID_OPTIONS,
`Messaging options contains the blacklisted "${blacklistedKey}" property.`,
);
}
});
// Convert whitelisted camelCase keys to underscore_case
utils.renameProperties(optionsCopy, CAMELCASE_OPTIONS_KEYS_MAP);
// Validate the options object contains valid values for whitelisted properties
if ('collapse_key' in optionsCopy && !validator.isNonEmptyString((optionsCopy as any).collapse_key)) {
const keyName = ('collapseKey' in options) ? 'collapseKey' : 'collapse_key';
throw new FirebaseMessagingError(
MessagingClientErrorCode.INVALID_OPTIONS,
`Messaging options contains an invalid value for the "${keyName}" property. Value must ` +
'be a non-empty string.',
);
} else if ('dry_run' in optionsCopy && !validator.isBoolean((optionsCopy as any).dry_run)) {
const keyName = ('dryRun' in options) ? 'dryRun' : 'dry_run';
throw new FirebaseMessagingError(
MessagingClientErrorCode.INVALID_OPTIONS,
`Messaging options contains an invalid value for the "${keyName}" property. Value must ` +
'be a boolean.',
);
} else if ('priority' in optionsCopy && !validator.isNonEmptyString(optionsCopy.priority)) {
throw new FirebaseMessagingError(
MessagingClientErrorCode.INVALID_OPTIONS,
'Messaging options contains an invalid value for the "priority" property. Value must ' +
'be a non-empty string.',
);
} else if ('restricted_package_name' in optionsCopy &&
!validator.isNonEmptyString((optionsCopy as any).restricted_package_name)) {
const keyName = ('restrictedPackageName' in options) ? 'restrictedPackageName' : 'restricted_package_name';
throw new FirebaseMessagingError(
MessagingClientErrorCode.INVALID_OPTIONS,
`Messaging options contains an invalid value for the "${keyName}" property. Value must ` +
'be a non-empty string.',
);
} else if ('time_to_live' in optionsCopy && !validator.isNumber((optionsCopy as any).time_to_live)) {
const keyName = ('timeToLive' in options) ? 'timeToLive' : 'time_to_live';
throw new FirebaseMessagingError(
MessagingClientErrorCode.INVALID_OPTIONS,
`Messaging options contains an invalid value for the "${keyName}" property. Value must ` +
'be a number.',
);
} else if ('content_available' in optionsCopy && !validator.isBoolean((optionsCopy as any).content_available)) {
const keyName = ('contentAvailable' in options) ? 'contentAvailable' : 'content_available';
throw new FirebaseMessagingError(
MessagingClientErrorCode.INVALID_OPTIONS,
`Messaging options contains an invalid value for the "${keyName}" property. Value must ` +
'be a boolean.',
);
} else if ('mutable_content' in optionsCopy && !validator.isBoolean((optionsCopy as any).mutable_content)) {
const keyName = ('mutableContent' in options) ? 'mutableContent' : 'mutable_content';
throw new FirebaseMessagingError(
MessagingClientErrorCode.INVALID_OPTIONS,
`Messaging options contains an invalid value for the "${keyName}" property. Value must ` +
'be a boolean.',
);
}
return optionsCopy;
}