@aws-amplify/notifications 2.0.28-unstable.f37faeb.0 → 2.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/inAppMessaging/providers/pinpoint/utils/helpers.js +35 -3
- package/dist/cjs/inAppMessaging/providers/pinpoint/utils/helpers.js.map +1 -1
- package/dist/esm/inAppMessaging/providers/pinpoint/utils/helpers.d.ts +2 -0
- package/dist/esm/inAppMessaging/providers/pinpoint/utils/helpers.mjs +35 -4
- package/dist/esm/inAppMessaging/providers/pinpoint/utils/helpers.mjs.map +1 -1
- package/dist/esm/inAppMessaging/types/message.d.ts +1 -0
- package/package.json +104 -104
- package/src/inAppMessaging/providers/pinpoint/utils/helpers.ts +53 -4
- package/src/inAppMessaging/types/message.ts +2 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
4
|
// SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.extractMetadata = exports.extractContent = exports.interpretLayout = exports.clearMemo = exports.isQuietTime = exports.isBeforeEndDate = exports.getComparator = exports.matchesMetrics = exports.matchesAttributes = exports.matchesEventType = exports.getStartOfDay = exports.recordAnalyticsEvent = exports.logger = void 0;
|
|
6
|
+
exports.mapOSPlatform = exports.extractMetadata = exports.extractContent = exports.interpretLayout = exports.clearMemo = exports.isQuietTime = exports.isBeforeEndDate = exports.getComparator = exports.matchesMetrics = exports.matchesAttributes = exports.matchesEventType = exports.getStartOfDay = exports.recordAnalyticsEvent = exports.logger = void 0;
|
|
7
7
|
const tslib_1 = require("tslib");
|
|
8
8
|
const core_1 = require("@aws-amplify/core");
|
|
9
9
|
const utils_1 = require("@aws-amplify/core/internals/utils");
|
|
@@ -187,10 +187,12 @@ const interpretLayout = (layout) => {
|
|
|
187
187
|
};
|
|
188
188
|
exports.interpretLayout = interpretLayout;
|
|
189
189
|
const extractContent = ({ InAppMessage: message, }) => {
|
|
190
|
+
const clientInfo = (0, utils_1.getClientInfo)();
|
|
191
|
+
const configPlatform = (0, exports.mapOSPlatform)(clientInfo?.platform);
|
|
190
192
|
return (message?.Content?.map(content => {
|
|
191
193
|
const { BackgroundColor, BodyConfig, HeaderConfig, ImageUrl, PrimaryBtn, SecondaryBtn, } = content;
|
|
192
|
-
const defaultPrimaryButton = PrimaryBtn
|
|
193
|
-
const defaultSecondaryButton = SecondaryBtn
|
|
194
|
+
const defaultPrimaryButton = getButtonConfig(configPlatform, PrimaryBtn);
|
|
195
|
+
const defaultSecondaryButton = getButtonConfig(configPlatform, SecondaryBtn);
|
|
194
196
|
const extractedContent = {};
|
|
195
197
|
if (BackgroundColor) {
|
|
196
198
|
extractedContent.container = {
|
|
@@ -261,4 +263,34 @@ const extractMetadata = ({ InAppMessage: inAppMessage, Priority, Schedule, Treat
|
|
|
261
263
|
treatmentId: TreatmentId,
|
|
262
264
|
});
|
|
263
265
|
exports.extractMetadata = extractMetadata;
|
|
266
|
+
const mapOSPlatform = (os) => {
|
|
267
|
+
if (!os)
|
|
268
|
+
return 'DefaultConfig';
|
|
269
|
+
// Check if running in a web browser
|
|
270
|
+
if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
|
|
271
|
+
return 'Web';
|
|
272
|
+
}
|
|
273
|
+
// Native environment checks
|
|
274
|
+
switch (os) {
|
|
275
|
+
case 'android':
|
|
276
|
+
return 'Android';
|
|
277
|
+
case 'ios':
|
|
278
|
+
return 'IOS';
|
|
279
|
+
default:
|
|
280
|
+
return 'DefaultConfig';
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
exports.mapOSPlatform = mapOSPlatform;
|
|
284
|
+
const getButtonConfig = (configPlatform, button) => {
|
|
285
|
+
if (!button?.DefaultConfig) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (!configPlatform || !button?.[configPlatform]) {
|
|
289
|
+
return button?.DefaultConfig;
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
...button.DefaultConfig,
|
|
293
|
+
...button[configPlatform],
|
|
294
|
+
};
|
|
295
|
+
};
|
|
264
296
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../../src/inAppMessaging/providers/pinpoint/utils/helpers.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extractMetadata = exports.extractContent = exports.interpretLayout = exports.clearMemo = exports.isQuietTime = exports.isBeforeEndDate = exports.getComparator = exports.matchesMetrics = exports.matchesAttributes = exports.matchesEventType = exports.getStartOfDay = exports.recordAnalyticsEvent = exports.logger = void 0;\nconst tslib_1 = require(\"tslib\");\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst isEmpty_js_1 = tslib_1.__importDefault(require(\"lodash/isEmpty.js\"));\nconst pinpoint_1 = require(\"@aws-amplify/core/internals/providers/pinpoint\");\nconst resolveConfig_1 = require(\"./resolveConfig\");\nconst resolveCredentials_1 = require(\"./resolveCredentials\");\nconst constants_1 = require(\"./constants\");\nconst userAgent_1 = require(\"./userAgent\");\nconst DELIVERY_TYPE = 'IN_APP_MESSAGE';\nlet eventNameMemo = {};\nlet eventAttributesMemo = {};\nlet eventMetricsMemo = {};\nexports.logger = new core_1.ConsoleLogger('InAppMessaging.Pinpoint.Utils');\nconst recordAnalyticsEvent = (event, message) => {\n const { appId, region } = (0, resolveConfig_1.resolveConfig)();\n const { id, metadata } = message;\n (0, resolveCredentials_1.resolveCredentials)()\n .then(({ credentials, identityId }) => {\n (0, pinpoint_1.record)({\n appId,\n category: constants_1.CATEGORY,\n credentials,\n event: {\n name: event,\n attributes: {\n // only include campaign_id field if we have one\n ...(id && { campaign_id: id }),\n delivery_type: DELIVERY_TYPE,\n treatment_id: metadata?.treatmentId,\n },\n },\n identityId,\n region,\n userAgentValue: (0, userAgent_1.getInAppMessagingUserAgentString)(utils_1.InAppMessagingAction.NotifyMessageInteraction),\n });\n })\n .catch(e => {\n // An error occured while fetching credentials or persisting the event to the buffer\n exports.logger.warn('Failed to record event.', e);\n });\n};\nexports.recordAnalyticsEvent = recordAnalyticsEvent;\nconst getStartOfDay = () => {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n return now.toISOString();\n};\nexports.getStartOfDay = getStartOfDay;\nconst matchesEventType = ({ CampaignId, Schedule }, { name: eventType }) => {\n const { EventType } = Schedule?.EventFilter?.Dimensions ?? {};\n const memoKey = `${CampaignId}:${eventType}`;\n if (!Object.prototype.hasOwnProperty.call(eventNameMemo, memoKey)) {\n eventNameMemo[memoKey] = !!EventType?.Values?.includes(eventType);\n }\n return eventNameMemo[memoKey];\n};\nexports.matchesEventType = matchesEventType;\nconst matchesAttributes = ({ CampaignId, Schedule }, { attributes = {} }) => {\n const { Attributes } = Schedule?.EventFilter?.Dimensions ?? {};\n if ((0, isEmpty_js_1.default)(Attributes)) {\n // if message does not have attributes defined it does not matter what attributes are on the event\n return true;\n }\n if ((0, isEmpty_js_1.default)(attributes)) {\n // if message does have attributes but the event does not then it always fails the check\n return false;\n }\n const memoKey = `${CampaignId}:${JSON.stringify(attributes)}`;\n if (!Object.prototype.hasOwnProperty.call(eventAttributesMemo, memoKey)) {\n eventAttributesMemo[memoKey] =\n !Attributes ||\n Object.entries(Attributes).every(([key, { Values }]) => Values?.includes(attributes[key]));\n }\n return eventAttributesMemo[memoKey];\n};\nexports.matchesAttributes = matchesAttributes;\nconst matchesMetrics = ({ CampaignId, Schedule }, { metrics = {} }) => {\n const { Metrics } = Schedule?.EventFilter?.Dimensions ?? {};\n if ((0, isEmpty_js_1.default)(Metrics)) {\n // if message does not have metrics defined it does not matter what metrics are on the event\n return true;\n }\n if ((0, isEmpty_js_1.default)(metrics)) {\n // if message does have metrics but the event does not then it always fails the check\n return false;\n }\n const memoKey = `${CampaignId}:${JSON.stringify(metrics)}`;\n if (!Object.prototype.hasOwnProperty.call(eventMetricsMemo, memoKey)) {\n eventMetricsMemo[memoKey] =\n !Metrics ||\n Object.entries(Metrics).every(([key, { ComparisonOperator, Value }]) => {\n const compare = (0, exports.getComparator)(ComparisonOperator);\n // if there is some unknown comparison operator, treat as a comparison failure\n return compare && !!Value ? compare(Value, metrics[key]) : false;\n });\n }\n return eventMetricsMemo[memoKey];\n};\nexports.matchesMetrics = matchesMetrics;\nconst getComparator = (operator) => {\n switch (operator) {\n case 'EQUAL':\n return (metricsVal, eventVal) => metricsVal === eventVal;\n case 'GREATER_THAN':\n return (metricsVal, eventVal) => metricsVal < eventVal;\n case 'GREATER_THAN_OR_EQUAL':\n return (metricsVal, eventVal) => metricsVal <= eventVal;\n case 'LESS_THAN':\n return (metricsVal, eventVal) => metricsVal > eventVal;\n case 'LESS_THAN_OR_EQUAL':\n return (metricsVal, eventVal) => metricsVal >= eventVal;\n default:\n return undefined;\n }\n};\nexports.getComparator = getComparator;\nconst isBeforeEndDate = ({ Schedule, }) => {\n if (!Schedule?.EndDate) {\n return true;\n }\n return new Date() < new Date(Schedule.EndDate);\n};\nexports.isBeforeEndDate = isBeforeEndDate;\nconst isQuietTime = (message) => {\n const { Schedule } = message;\n if (!Schedule?.QuietTime) {\n return false;\n }\n const pattern = /^[0-2]\\d:[0-5]\\d$/; // basic sanity check, not a fully featured HH:MM validation\n const { Start, End } = Schedule.QuietTime;\n if (!Start ||\n !End ||\n Start === End ||\n !pattern.test(Start) ||\n !pattern.test(End)) {\n return false;\n }\n const now = new Date();\n const start = new Date(now);\n const end = new Date(now);\n const [startHours, startMinutes] = Start.split(':');\n const [endHours, endMinutes] = End.split(':');\n start.setHours(Number.parseInt(startHours, 10), Number.parseInt(startMinutes, 10), 0, 0);\n end.setHours(Number.parseInt(endHours, 10), Number.parseInt(endMinutes, 10), 0, 0);\n // if quiet time includes midnight, bump the end time to the next day\n if (start > end) {\n end.setDate(end.getDate() + 1);\n }\n const isDuringQuietTime = now >= start && now <= end;\n if (isDuringQuietTime) {\n exports.logger.debug('message filtered due to quiet time', message);\n }\n return isDuringQuietTime;\n};\nexports.isQuietTime = isQuietTime;\nconst clearMemo = () => {\n eventNameMemo = {};\n eventAttributesMemo = {};\n eventMetricsMemo = {};\n};\nexports.clearMemo = clearMemo;\n// in the pinpoint console when a message is created with a Modal or Full Screen layout,\n// it is assigned a layout value of MOBILE_FEED or OVERLAYS respectively in the message payload.\n// In the future, Pinpoint will be updating the layout values in the aforementioned scenario\n// to MODAL and FULL_SCREEN.\n//\n// This utility acts as a safeguard to ensure that:\n// - 1. the usage of MOBILE_FEED and OVERLAYS as values for message layouts are not leaked\n// outside the Pinpoint provider\n// - 2. Amplify correctly handles the legacy layout values from Pinpoint after they are updated\nconst interpretLayout = (layout) => {\n if (layout === 'MOBILE_FEED') {\n return 'MODAL';\n }\n if (layout === 'OVERLAYS') {\n return 'FULL_SCREEN';\n }\n // cast as PinpointInAppMessage['InAppMessage']['Layout'] allows `string` as a value\n return layout;\n};\nexports.interpretLayout = interpretLayout;\nconst extractContent = ({ InAppMessage: message, }) => {\n return (message?.Content?.map(content => {\n const { BackgroundColor, BodyConfig, HeaderConfig, ImageUrl, PrimaryBtn, SecondaryBtn, } = content;\n const defaultPrimaryButton = PrimaryBtn?.DefaultConfig;\n const defaultSecondaryButton = SecondaryBtn?.DefaultConfig;\n const extractedContent = {};\n if (BackgroundColor) {\n extractedContent.container = {\n style: {\n backgroundColor: BackgroundColor,\n },\n };\n }\n if (HeaderConfig) {\n extractedContent.header = {\n // Default to empty string in rare cases we don't have a Header value\n content: HeaderConfig.Header ?? '',\n style: {\n color: HeaderConfig.TextColor,\n textAlign: HeaderConfig.Alignment?.toLowerCase(),\n },\n };\n }\n if (BodyConfig) {\n extractedContent.body = {\n // Default to empty string in rare cases we don't have a Body value\n content: BodyConfig.Body ?? '',\n style: {\n color: BodyConfig.TextColor,\n textAlign: BodyConfig.Alignment?.toLowerCase(),\n },\n };\n }\n if (ImageUrl) {\n extractedContent.image = {\n src: ImageUrl,\n };\n }\n if (defaultPrimaryButton) {\n extractedContent.primaryButton = {\n // Default to empty string in rare cases we don't have a Text value\n title: defaultPrimaryButton.Text ?? '',\n action: defaultPrimaryButton.ButtonAction,\n url: defaultPrimaryButton.Link,\n style: {\n backgroundColor: defaultPrimaryButton.BackgroundColor,\n borderRadius: defaultPrimaryButton.BorderRadius,\n color: defaultPrimaryButton.TextColor,\n },\n };\n }\n if (defaultSecondaryButton) {\n extractedContent.secondaryButton = {\n // Default to empty string in rare cases we don't have a Text value\n title: defaultSecondaryButton.Text ?? '',\n action: defaultSecondaryButton.ButtonAction,\n url: defaultSecondaryButton.Link,\n style: {\n backgroundColor: defaultSecondaryButton.BackgroundColor,\n borderRadius: defaultSecondaryButton.BorderRadius,\n color: defaultSecondaryButton.TextColor,\n },\n };\n }\n return extractedContent;\n }) ?? []);\n};\nexports.extractContent = extractContent;\nconst extractMetadata = ({ InAppMessage: inAppMessage, Priority, Schedule, TreatmentId, }) => ({\n customData: inAppMessage?.CustomConfig,\n endDate: Schedule?.EndDate,\n priority: Priority,\n treatmentId: TreatmentId,\n});\nexports.extractMetadata = extractMetadata;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../../src/inAppMessaging/providers/pinpoint/utils/helpers.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mapOSPlatform = exports.extractMetadata = exports.extractContent = exports.interpretLayout = exports.clearMemo = exports.isQuietTime = exports.isBeforeEndDate = exports.getComparator = exports.matchesMetrics = exports.matchesAttributes = exports.matchesEventType = exports.getStartOfDay = exports.recordAnalyticsEvent = exports.logger = void 0;\nconst tslib_1 = require(\"tslib\");\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst isEmpty_js_1 = tslib_1.__importDefault(require(\"lodash/isEmpty.js\"));\nconst pinpoint_1 = require(\"@aws-amplify/core/internals/providers/pinpoint\");\nconst resolveConfig_1 = require(\"./resolveConfig\");\nconst resolveCredentials_1 = require(\"./resolveCredentials\");\nconst constants_1 = require(\"./constants\");\nconst userAgent_1 = require(\"./userAgent\");\nconst DELIVERY_TYPE = 'IN_APP_MESSAGE';\nlet eventNameMemo = {};\nlet eventAttributesMemo = {};\nlet eventMetricsMemo = {};\nexports.logger = new core_1.ConsoleLogger('InAppMessaging.Pinpoint.Utils');\nconst recordAnalyticsEvent = (event, message) => {\n const { appId, region } = (0, resolveConfig_1.resolveConfig)();\n const { id, metadata } = message;\n (0, resolveCredentials_1.resolveCredentials)()\n .then(({ credentials, identityId }) => {\n (0, pinpoint_1.record)({\n appId,\n category: constants_1.CATEGORY,\n credentials,\n event: {\n name: event,\n attributes: {\n // only include campaign_id field if we have one\n ...(id && { campaign_id: id }),\n delivery_type: DELIVERY_TYPE,\n treatment_id: metadata?.treatmentId,\n },\n },\n identityId,\n region,\n userAgentValue: (0, userAgent_1.getInAppMessagingUserAgentString)(utils_1.InAppMessagingAction.NotifyMessageInteraction),\n });\n })\n .catch(e => {\n // An error occured while fetching credentials or persisting the event to the buffer\n exports.logger.warn('Failed to record event.', e);\n });\n};\nexports.recordAnalyticsEvent = recordAnalyticsEvent;\nconst getStartOfDay = () => {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n return now.toISOString();\n};\nexports.getStartOfDay = getStartOfDay;\nconst matchesEventType = ({ CampaignId, Schedule }, { name: eventType }) => {\n const { EventType } = Schedule?.EventFilter?.Dimensions ?? {};\n const memoKey = `${CampaignId}:${eventType}`;\n if (!Object.prototype.hasOwnProperty.call(eventNameMemo, memoKey)) {\n eventNameMemo[memoKey] = !!EventType?.Values?.includes(eventType);\n }\n return eventNameMemo[memoKey];\n};\nexports.matchesEventType = matchesEventType;\nconst matchesAttributes = ({ CampaignId, Schedule }, { attributes = {} }) => {\n const { Attributes } = Schedule?.EventFilter?.Dimensions ?? {};\n if ((0, isEmpty_js_1.default)(Attributes)) {\n // if message does not have attributes defined it does not matter what attributes are on the event\n return true;\n }\n if ((0, isEmpty_js_1.default)(attributes)) {\n // if message does have attributes but the event does not then it always fails the check\n return false;\n }\n const memoKey = `${CampaignId}:${JSON.stringify(attributes)}`;\n if (!Object.prototype.hasOwnProperty.call(eventAttributesMemo, memoKey)) {\n eventAttributesMemo[memoKey] =\n !Attributes ||\n Object.entries(Attributes).every(([key, { Values }]) => Values?.includes(attributes[key]));\n }\n return eventAttributesMemo[memoKey];\n};\nexports.matchesAttributes = matchesAttributes;\nconst matchesMetrics = ({ CampaignId, Schedule }, { metrics = {} }) => {\n const { Metrics } = Schedule?.EventFilter?.Dimensions ?? {};\n if ((0, isEmpty_js_1.default)(Metrics)) {\n // if message does not have metrics defined it does not matter what metrics are on the event\n return true;\n }\n if ((0, isEmpty_js_1.default)(metrics)) {\n // if message does have metrics but the event does not then it always fails the check\n return false;\n }\n const memoKey = `${CampaignId}:${JSON.stringify(metrics)}`;\n if (!Object.prototype.hasOwnProperty.call(eventMetricsMemo, memoKey)) {\n eventMetricsMemo[memoKey] =\n !Metrics ||\n Object.entries(Metrics).every(([key, { ComparisonOperator, Value }]) => {\n const compare = (0, exports.getComparator)(ComparisonOperator);\n // if there is some unknown comparison operator, treat as a comparison failure\n return compare && !!Value ? compare(Value, metrics[key]) : false;\n });\n }\n return eventMetricsMemo[memoKey];\n};\nexports.matchesMetrics = matchesMetrics;\nconst getComparator = (operator) => {\n switch (operator) {\n case 'EQUAL':\n return (metricsVal, eventVal) => metricsVal === eventVal;\n case 'GREATER_THAN':\n return (metricsVal, eventVal) => metricsVal < eventVal;\n case 'GREATER_THAN_OR_EQUAL':\n return (metricsVal, eventVal) => metricsVal <= eventVal;\n case 'LESS_THAN':\n return (metricsVal, eventVal) => metricsVal > eventVal;\n case 'LESS_THAN_OR_EQUAL':\n return (metricsVal, eventVal) => metricsVal >= eventVal;\n default:\n return undefined;\n }\n};\nexports.getComparator = getComparator;\nconst isBeforeEndDate = ({ Schedule, }) => {\n if (!Schedule?.EndDate) {\n return true;\n }\n return new Date() < new Date(Schedule.EndDate);\n};\nexports.isBeforeEndDate = isBeforeEndDate;\nconst isQuietTime = (message) => {\n const { Schedule } = message;\n if (!Schedule?.QuietTime) {\n return false;\n }\n const pattern = /^[0-2]\\d:[0-5]\\d$/; // basic sanity check, not a fully featured HH:MM validation\n const { Start, End } = Schedule.QuietTime;\n if (!Start ||\n !End ||\n Start === End ||\n !pattern.test(Start) ||\n !pattern.test(End)) {\n return false;\n }\n const now = new Date();\n const start = new Date(now);\n const end = new Date(now);\n const [startHours, startMinutes] = Start.split(':');\n const [endHours, endMinutes] = End.split(':');\n start.setHours(Number.parseInt(startHours, 10), Number.parseInt(startMinutes, 10), 0, 0);\n end.setHours(Number.parseInt(endHours, 10), Number.parseInt(endMinutes, 10), 0, 0);\n // if quiet time includes midnight, bump the end time to the next day\n if (start > end) {\n end.setDate(end.getDate() + 1);\n }\n const isDuringQuietTime = now >= start && now <= end;\n if (isDuringQuietTime) {\n exports.logger.debug('message filtered due to quiet time', message);\n }\n return isDuringQuietTime;\n};\nexports.isQuietTime = isQuietTime;\nconst clearMemo = () => {\n eventNameMemo = {};\n eventAttributesMemo = {};\n eventMetricsMemo = {};\n};\nexports.clearMemo = clearMemo;\n// in the pinpoint console when a message is created with a Modal or Full Screen layout,\n// it is assigned a layout value of MOBILE_FEED or OVERLAYS respectively in the message payload.\n// In the future, Pinpoint will be updating the layout values in the aforementioned scenario\n// to MODAL and FULL_SCREEN.\n//\n// This utility acts as a safeguard to ensure that:\n// - 1. the usage of MOBILE_FEED and OVERLAYS as values for message layouts are not leaked\n// outside the Pinpoint provider\n// - 2. Amplify correctly handles the legacy layout values from Pinpoint after they are updated\nconst interpretLayout = (layout) => {\n if (layout === 'MOBILE_FEED') {\n return 'MODAL';\n }\n if (layout === 'OVERLAYS') {\n return 'FULL_SCREEN';\n }\n // cast as PinpointInAppMessage['InAppMessage']['Layout'] allows `string` as a value\n return layout;\n};\nexports.interpretLayout = interpretLayout;\nconst extractContent = ({ InAppMessage: message, }) => {\n const clientInfo = (0, utils_1.getClientInfo)();\n const configPlatform = (0, exports.mapOSPlatform)(clientInfo?.platform);\n return (message?.Content?.map(content => {\n const { BackgroundColor, BodyConfig, HeaderConfig, ImageUrl, PrimaryBtn, SecondaryBtn, } = content;\n const defaultPrimaryButton = getButtonConfig(configPlatform, PrimaryBtn);\n const defaultSecondaryButton = getButtonConfig(configPlatform, SecondaryBtn);\n const extractedContent = {};\n if (BackgroundColor) {\n extractedContent.container = {\n style: {\n backgroundColor: BackgroundColor,\n },\n };\n }\n if (HeaderConfig) {\n extractedContent.header = {\n // Default to empty string in rare cases we don't have a Header value\n content: HeaderConfig.Header ?? '',\n style: {\n color: HeaderConfig.TextColor,\n textAlign: HeaderConfig.Alignment?.toLowerCase(),\n },\n };\n }\n if (BodyConfig) {\n extractedContent.body = {\n // Default to empty string in rare cases we don't have a Body value\n content: BodyConfig.Body ?? '',\n style: {\n color: BodyConfig.TextColor,\n textAlign: BodyConfig.Alignment?.toLowerCase(),\n },\n };\n }\n if (ImageUrl) {\n extractedContent.image = {\n src: ImageUrl,\n };\n }\n if (defaultPrimaryButton) {\n extractedContent.primaryButton = {\n // Default to empty string in rare cases we don't have a Text value\n title: defaultPrimaryButton.Text ?? '',\n action: defaultPrimaryButton.ButtonAction,\n url: defaultPrimaryButton.Link,\n style: {\n backgroundColor: defaultPrimaryButton.BackgroundColor,\n borderRadius: defaultPrimaryButton.BorderRadius,\n color: defaultPrimaryButton.TextColor,\n },\n };\n }\n if (defaultSecondaryButton) {\n extractedContent.secondaryButton = {\n // Default to empty string in rare cases we don't have a Text value\n title: defaultSecondaryButton.Text ?? '',\n action: defaultSecondaryButton.ButtonAction,\n url: defaultSecondaryButton.Link,\n style: {\n backgroundColor: defaultSecondaryButton.BackgroundColor,\n borderRadius: defaultSecondaryButton.BorderRadius,\n color: defaultSecondaryButton.TextColor,\n },\n };\n }\n return extractedContent;\n }) ?? []);\n};\nexports.extractContent = extractContent;\nconst extractMetadata = ({ InAppMessage: inAppMessage, Priority, Schedule, TreatmentId, }) => ({\n customData: inAppMessage?.CustomConfig,\n endDate: Schedule?.EndDate,\n priority: Priority,\n treatmentId: TreatmentId,\n});\nexports.extractMetadata = extractMetadata;\nconst mapOSPlatform = (os) => {\n if (!os)\n return 'DefaultConfig';\n // Check if running in a web browser\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'Web';\n }\n // Native environment checks\n switch (os) {\n case 'android':\n return 'Android';\n case 'ios':\n return 'IOS';\n default:\n return 'DefaultConfig';\n }\n};\nexports.mapOSPlatform = mapOSPlatform;\nconst getButtonConfig = (configPlatform, button) => {\n if (!button?.DefaultConfig) {\n return;\n }\n if (!configPlatform || !button?.[configPlatform]) {\n return button?.DefaultConfig;\n }\n return {\n ...button.DefaultConfig,\n ...button[configPlatform],\n };\n};\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAChW,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAAC;AAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,gDAAgD,CAAC,CAAC;AAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACnD,MAAM,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAC3C,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,IAAI,aAAa,GAAG,EAAE,CAAC;AACvB,IAAI,mBAAmB,GAAG,EAAE,CAAC;AAC7B,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAC1B,OAAO,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,+BAA+B,CAAC,CAAC;AAC3E,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK;AACjD,IAAI,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,aAAa,GAAG,CAAC;AACnE,IAAI,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;AACrC,IAAI,IAAI,oBAAoB,CAAC,kBAAkB,GAAG;AAClD,SAAS,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK;AAC/C,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE;AAC/B,YAAY,KAAK;AACjB,YAAY,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC1C,YAAY,WAAW;AACvB,YAAY,KAAK,EAAE;AACnB,gBAAgB,IAAI,EAAE,KAAK;AAC3B,gBAAgB,UAAU,EAAE;AAC5B;AACA,oBAAoB,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;AACjD,oBAAoB,aAAa,EAAE,aAAa;AAChD,oBAAoB,YAAY,EAAE,QAAQ,EAAE,WAAW;AACvD,iBAAiB;AACjB,aAAa;AACb,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB,YAAY,cAAc,EAAE,IAAI,WAAW,CAAC,gCAAgC,EAAE,OAAO,CAAC,oBAAoB,CAAC,wBAAwB,CAAC;AACpI,SAAS,CAAC,CAAC;AACX,KAAK,CAAC;AACN,SAAS,KAAK,CAAC,CAAC,IAAI;AACpB;AACA,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;AAC1D,KAAK,CAAC,CAAC;AACP,CAAC,CAAC;AACF,OAAO,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AACpD,MAAM,aAAa,GAAG,MAAM;AAC5B,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AAC3B,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,IAAI,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC,CAAC;AACF,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AACtC,MAAM,gBAAgB,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK;AAC5E,IAAI,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,UAAU,IAAI,EAAE,CAAC;AAClE,IAAI,MAAM,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACjD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;AACvE,QAAQ,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC1E,KAAK;AACL,IAAI,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC;AACF,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC5C,MAAM,iBAAiB,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,KAAK;AAC7E,IAAI,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,UAAU,IAAI,EAAE,CAAC;AACnE,IAAI,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;AAC/C;AACA,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;AAC/C;AACA,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAAE;AAC7E,QAAQ,mBAAmB,CAAC,OAAO,CAAC;AACpC,YAAY,CAAC,UAAU;AACvB,gBAAgB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3G,KAAK;AACL,IAAI,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC,CAAC;AACF,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC9C,MAAM,cAAc,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,KAAK;AACvE,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,UAAU,IAAI,EAAE,CAAC;AAChE,IAAI,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;AAC5C;AACA,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;AAC5C;AACA,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE;AAC1E,QAAQ,gBAAgB,CAAC,OAAO,CAAC;AACjC,YAAY,CAAC,OAAO;AACpB,gBAAgB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,KAAK;AACxF,oBAAoB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AACnF;AACA,oBAAoB,OAAO,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AACrF,iBAAiB,CAAC,CAAC;AACnB,KAAK;AACL,IAAI,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AACF,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;AACxC,MAAM,aAAa,GAAG,CAAC,QAAQ,KAAK;AACpC,IAAI,QAAQ,QAAQ;AACpB,QAAQ,KAAK,OAAO;AACpB,YAAY,OAAO,CAAC,UAAU,EAAE,QAAQ,KAAK,UAAU,KAAK,QAAQ,CAAC;AACrE,QAAQ,KAAK,cAAc;AAC3B,YAAY,OAAO,CAAC,UAAU,EAAE,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC;AACnE,QAAQ,KAAK,uBAAuB;AACpC,YAAY,OAAO,CAAC,UAAU,EAAE,QAAQ,KAAK,UAAU,IAAI,QAAQ,CAAC;AACpE,QAAQ,KAAK,WAAW;AACxB,YAAY,OAAO,CAAC,UAAU,EAAE,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC;AACnE,QAAQ,KAAK,oBAAoB;AACjC,YAAY,OAAO,CAAC,UAAU,EAAE,QAAQ,KAAK,UAAU,IAAI,QAAQ,CAAC;AACpE,QAAQ;AACR,YAAY,OAAO,SAAS,CAAC;AAC7B,KAAK;AACL,CAAC,CAAC;AACF,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AACtC,MAAM,eAAe,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK;AAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,OAAO,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC,CAAC;AACF,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;AAC1C,MAAM,WAAW,GAAG,CAAC,OAAO,KAAK;AACjC,IAAI,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;AACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC9B,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,mBAAmB,CAAC;AACxC,IAAI,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC9C,IAAI,IAAI,CAAC,KAAK;AACd,QAAQ,CAAC,GAAG;AACZ,QAAQ,KAAK,KAAK,GAAG;AACrB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC5B,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,IAAI,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxD,IAAI,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7F,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF;AACA,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE;AACrB,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AACvC,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC;AACzD,IAAI,IAAI,iBAAiB,EAAE;AAC3B,QAAQ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;AAC5E,KAAK;AACL,IAAI,OAAO,iBAAiB,CAAC;AAC7B,CAAC,CAAC;AACF,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;AAClC,MAAM,SAAS,GAAG,MAAM;AACxB,IAAI,aAAa,GAAG,EAAE,CAAC;AACvB,IAAI,mBAAmB,GAAG,EAAE,CAAC;AAC7B,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAC1B,CAAC,CAAC;AACF,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe,GAAG,CAAC,MAAM,KAAK;AACpC,IAAI,IAAI,MAAM,KAAK,aAAa,EAAE;AAClC,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,IAAI,MAAM,KAAK,UAAU,EAAE;AAC/B,QAAQ,OAAO,aAAa,CAAC;AAC7B,KAAK;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AACF,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;AAC1C,MAAM,cAAc,GAAG,CAAC,EAAE,YAAY,EAAE,OAAO,GAAG,KAAK;AACvD,IAAI,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,aAAa,GAAG,CAAC;AACpD,IAAI,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC5E,IAAI,QAAQ,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI;AAC7C,QAAQ,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,GAAG,GAAG,OAAO,CAAC;AAC3G,QAAQ,MAAM,oBAAoB,GAAG,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AACjF,QAAQ,MAAM,sBAAsB,GAAG,eAAe,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AACrF,QAAQ,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACpC,QAAQ,IAAI,eAAe,EAAE;AAC7B,YAAY,gBAAgB,CAAC,SAAS,GAAG;AACzC,gBAAgB,KAAK,EAAE;AACvB,oBAAoB,eAAe,EAAE,eAAe;AACpD,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,gBAAgB,CAAC,MAAM,GAAG;AACtC;AACA,gBAAgB,OAAO,EAAE,YAAY,CAAC,MAAM,IAAI,EAAE;AAClD,gBAAgB,KAAK,EAAE;AACvB,oBAAoB,KAAK,EAAE,YAAY,CAAC,SAAS;AACjD,oBAAoB,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE;AACpE,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,gBAAgB,CAAC,IAAI,GAAG;AACpC;AACA,gBAAgB,OAAO,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE;AAC9C,gBAAgB,KAAK,EAAE;AACvB,oBAAoB,KAAK,EAAE,UAAU,CAAC,SAAS;AAC/C,oBAAoB,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,WAAW,EAAE;AAClE,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,gBAAgB,CAAC,KAAK,GAAG;AACrC,gBAAgB,GAAG,EAAE,QAAQ;AAC7B,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,IAAI,oBAAoB,EAAE;AAClC,YAAY,gBAAgB,CAAC,aAAa,GAAG;AAC7C;AACA,gBAAgB,KAAK,EAAE,oBAAoB,CAAC,IAAI,IAAI,EAAE;AACtD,gBAAgB,MAAM,EAAE,oBAAoB,CAAC,YAAY;AACzD,gBAAgB,GAAG,EAAE,oBAAoB,CAAC,IAAI;AAC9C,gBAAgB,KAAK,EAAE;AACvB,oBAAoB,eAAe,EAAE,oBAAoB,CAAC,eAAe;AACzE,oBAAoB,YAAY,EAAE,oBAAoB,CAAC,YAAY;AACnE,oBAAoB,KAAK,EAAE,oBAAoB,CAAC,SAAS;AACzD,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,IAAI,sBAAsB,EAAE;AACpC,YAAY,gBAAgB,CAAC,eAAe,GAAG;AAC/C;AACA,gBAAgB,KAAK,EAAE,sBAAsB,CAAC,IAAI,IAAI,EAAE;AACxD,gBAAgB,MAAM,EAAE,sBAAsB,CAAC,YAAY;AAC3D,gBAAgB,GAAG,EAAE,sBAAsB,CAAC,IAAI;AAChD,gBAAgB,KAAK,EAAE;AACvB,oBAAoB,eAAe,EAAE,sBAAsB,CAAC,eAAe;AAC3E,oBAAoB,YAAY,EAAE,sBAAsB,CAAC,YAAY;AACrE,oBAAoB,KAAK,EAAE,sBAAsB,CAAC,SAAS;AAC3D,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,OAAO,gBAAgB,CAAC;AAChC,KAAK,CAAC,IAAI,EAAE,EAAE;AACd,CAAC,CAAC;AACF,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;AACxC,MAAM,eAAe,GAAG,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM;AAC/F,IAAI,UAAU,EAAE,YAAY,EAAE,YAAY;AAC1C,IAAI,OAAO,EAAE,QAAQ,EAAE,OAAO;AAC9B,IAAI,QAAQ,EAAE,QAAQ;AACtB,IAAI,WAAW,EAAE,WAAW;AAC5B,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;AAC1C,MAAM,aAAa,GAAG,CAAC,EAAE,KAAK;AAC9B,IAAI,IAAI,CAAC,EAAE;AACX,QAAQ,OAAO,eAAe,CAAC;AAC/B;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE;AACjF,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL;AACA,IAAI,QAAQ,EAAE;AACd,QAAQ,KAAK,SAAS;AACtB,YAAY,OAAO,SAAS,CAAC;AAC7B,QAAQ,KAAK,KAAK;AAClB,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ;AACR,YAAY,OAAO,eAAe,CAAC;AACnC,KAAK;AACL,CAAC,CAAC;AACF,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AACtC,MAAM,eAAe,GAAG,CAAC,cAAc,EAAE,MAAM,KAAK;AACpD,IAAI,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE;AAChC,QAAQ,OAAO;AACf,KAAK;AACL,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE;AACtD,QAAQ,OAAO,MAAM,EAAE,aAAa,CAAC;AACrC,KAAK;AACL,IAAI,OAAO;AACX,QAAQ,GAAG,MAAM,CAAC,aAAa;AAC/B,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACjC,KAAK,CAAC;AACN,CAAC;;"}
|
|
@@ -2,6 +2,7 @@ import { ConsoleLogger } from '@aws-amplify/core';
|
|
|
2
2
|
import type { InAppMessageCampaign as PinpointInAppMessage } from '@aws-amplify/core/internals/aws-clients/pinpoint';
|
|
3
3
|
import { InAppMessage, InAppMessageContent, InAppMessageLayout, InAppMessagingEvent } from '../../../types';
|
|
4
4
|
import { MetricsComparator, PinpointMessageEvent } from '../types';
|
|
5
|
+
import { ButtonConfigPlatform } from '../../../types/message';
|
|
5
6
|
export declare const logger: ConsoleLogger;
|
|
6
7
|
export declare const recordAnalyticsEvent: (event: PinpointMessageEvent, message: InAppMessage) => void;
|
|
7
8
|
export declare const getStartOfDay: () => string;
|
|
@@ -15,3 +16,4 @@ export declare const clearMemo: () => void;
|
|
|
15
16
|
export declare const interpretLayout: (layout: NonNullable<PinpointInAppMessage['InAppMessage']>['Layout']) => InAppMessageLayout;
|
|
16
17
|
export declare const extractContent: ({ InAppMessage: message, }: PinpointInAppMessage) => InAppMessageContent[];
|
|
17
18
|
export declare const extractMetadata: ({ InAppMessage: inAppMessage, Priority, Schedule, TreatmentId, }: PinpointInAppMessage) => InAppMessage['metadata'];
|
|
19
|
+
export declare const mapOSPlatform: (os?: string) => ButtonConfigPlatform;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConsoleLogger } from '@aws-amplify/core';
|
|
2
|
-
import { InAppMessagingAction } from '@aws-amplify/core/internals/utils';
|
|
2
|
+
import { InAppMessagingAction, getClientInfo } from '@aws-amplify/core/internals/utils';
|
|
3
3
|
import isEmpty from 'lodash/isEmpty.js';
|
|
4
4
|
import { record } from '@aws-amplify/core/internals/providers/pinpoint';
|
|
5
5
|
import { resolveConfig } from './resolveConfig.mjs';
|
|
@@ -173,10 +173,12 @@ const interpretLayout = (layout) => {
|
|
|
173
173
|
return layout;
|
|
174
174
|
};
|
|
175
175
|
const extractContent = ({ InAppMessage: message, }) => {
|
|
176
|
+
const clientInfo = getClientInfo();
|
|
177
|
+
const configPlatform = mapOSPlatform(clientInfo?.platform);
|
|
176
178
|
return (message?.Content?.map(content => {
|
|
177
179
|
const { BackgroundColor, BodyConfig, HeaderConfig, ImageUrl, PrimaryBtn, SecondaryBtn, } = content;
|
|
178
|
-
const defaultPrimaryButton = PrimaryBtn
|
|
179
|
-
const defaultSecondaryButton = SecondaryBtn
|
|
180
|
+
const defaultPrimaryButton = getButtonConfig(configPlatform, PrimaryBtn);
|
|
181
|
+
const defaultSecondaryButton = getButtonConfig(configPlatform, SecondaryBtn);
|
|
180
182
|
const extractedContent = {};
|
|
181
183
|
if (BackgroundColor) {
|
|
182
184
|
extractedContent.container = {
|
|
@@ -245,6 +247,35 @@ const extractMetadata = ({ InAppMessage: inAppMessage, Priority, Schedule, Treat
|
|
|
245
247
|
priority: Priority,
|
|
246
248
|
treatmentId: TreatmentId,
|
|
247
249
|
});
|
|
250
|
+
const mapOSPlatform = (os) => {
|
|
251
|
+
if (!os)
|
|
252
|
+
return 'DefaultConfig';
|
|
253
|
+
// Check if running in a web browser
|
|
254
|
+
if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
|
|
255
|
+
return 'Web';
|
|
256
|
+
}
|
|
257
|
+
// Native environment checks
|
|
258
|
+
switch (os) {
|
|
259
|
+
case 'android':
|
|
260
|
+
return 'Android';
|
|
261
|
+
case 'ios':
|
|
262
|
+
return 'IOS';
|
|
263
|
+
default:
|
|
264
|
+
return 'DefaultConfig';
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const getButtonConfig = (configPlatform, button) => {
|
|
268
|
+
if (!button?.DefaultConfig) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (!configPlatform || !button?.[configPlatform]) {
|
|
272
|
+
return button?.DefaultConfig;
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
...button.DefaultConfig,
|
|
276
|
+
...button[configPlatform],
|
|
277
|
+
};
|
|
278
|
+
};
|
|
248
279
|
|
|
249
|
-
export { clearMemo, extractContent, extractMetadata, getComparator, getStartOfDay, interpretLayout, isBeforeEndDate, isQuietTime, logger, matchesAttributes, matchesEventType, matchesMetrics, recordAnalyticsEvent };
|
|
280
|
+
export { clearMemo, extractContent, extractMetadata, getComparator, getStartOfDay, interpretLayout, isBeforeEndDate, isQuietTime, logger, mapOSPlatform, matchesAttributes, matchesEventType, matchesMetrics, recordAnalyticsEvent };
|
|
250
281
|
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.mjs","sources":["../../../../../../src/inAppMessaging/providers/pinpoint/utils/helpers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { ConsoleLogger } from '@aws-amplify/core';\nimport { InAppMessagingAction } from '@aws-amplify/core/internals/utils';\nimport isEmpty from 'lodash/isEmpty.js';\nimport { record as recordCore } from '@aws-amplify/core/internals/providers/pinpoint';\nimport { resolveConfig } from './resolveConfig';\nimport { resolveCredentials } from './resolveCredentials';\nimport { CATEGORY } from './constants';\nimport { getInAppMessagingUserAgentString } from './userAgent';\nconst DELIVERY_TYPE = 'IN_APP_MESSAGE';\nlet eventNameMemo = {};\nlet eventAttributesMemo = {};\nlet eventMetricsMemo = {};\nexport const logger = new ConsoleLogger('InAppMessaging.Pinpoint.Utils');\nexport const recordAnalyticsEvent = (event, message) => {\n const { appId, region } = resolveConfig();\n const { id, metadata } = message;\n resolveCredentials()\n .then(({ credentials, identityId }) => {\n recordCore({\n appId,\n category: CATEGORY,\n credentials,\n event: {\n name: event,\n attributes: {\n // only include campaign_id field if we have one\n ...(id && { campaign_id: id }),\n delivery_type: DELIVERY_TYPE,\n treatment_id: metadata?.treatmentId,\n },\n },\n identityId,\n region,\n userAgentValue: getInAppMessagingUserAgentString(InAppMessagingAction.NotifyMessageInteraction),\n });\n })\n .catch(e => {\n // An error occured while fetching credentials or persisting the event to the buffer\n logger.warn('Failed to record event.', e);\n });\n};\nexport const getStartOfDay = () => {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n return now.toISOString();\n};\nexport const matchesEventType = ({ CampaignId, Schedule }, { name: eventType }) => {\n const { EventType } = Schedule?.EventFilter?.Dimensions ?? {};\n const memoKey = `${CampaignId}:${eventType}`;\n if (!Object.prototype.hasOwnProperty.call(eventNameMemo, memoKey)) {\n eventNameMemo[memoKey] = !!EventType?.Values?.includes(eventType);\n }\n return eventNameMemo[memoKey];\n};\nexport const matchesAttributes = ({ CampaignId, Schedule }, { attributes = {} }) => {\n const { Attributes } = Schedule?.EventFilter?.Dimensions ?? {};\n if (isEmpty(Attributes)) {\n // if message does not have attributes defined it does not matter what attributes are on the event\n return true;\n }\n if (isEmpty(attributes)) {\n // if message does have attributes but the event does not then it always fails the check\n return false;\n }\n const memoKey = `${CampaignId}:${JSON.stringify(attributes)}`;\n if (!Object.prototype.hasOwnProperty.call(eventAttributesMemo, memoKey)) {\n eventAttributesMemo[memoKey] =\n !Attributes ||\n Object.entries(Attributes).every(([key, { Values }]) => Values?.includes(attributes[key]));\n }\n return eventAttributesMemo[memoKey];\n};\nexport const matchesMetrics = ({ CampaignId, Schedule }, { metrics = {} }) => {\n const { Metrics } = Schedule?.EventFilter?.Dimensions ?? {};\n if (isEmpty(Metrics)) {\n // if message does not have metrics defined it does not matter what metrics are on the event\n return true;\n }\n if (isEmpty(metrics)) {\n // if message does have metrics but the event does not then it always fails the check\n return false;\n }\n const memoKey = `${CampaignId}:${JSON.stringify(metrics)}`;\n if (!Object.prototype.hasOwnProperty.call(eventMetricsMemo, memoKey)) {\n eventMetricsMemo[memoKey] =\n !Metrics ||\n Object.entries(Metrics).every(([key, { ComparisonOperator, Value }]) => {\n const compare = getComparator(ComparisonOperator);\n // if there is some unknown comparison operator, treat as a comparison failure\n return compare && !!Value ? compare(Value, metrics[key]) : false;\n });\n }\n return eventMetricsMemo[memoKey];\n};\nexport const getComparator = (operator) => {\n switch (operator) {\n case 'EQUAL':\n return (metricsVal, eventVal) => metricsVal === eventVal;\n case 'GREATER_THAN':\n return (metricsVal, eventVal) => metricsVal < eventVal;\n case 'GREATER_THAN_OR_EQUAL':\n return (metricsVal, eventVal) => metricsVal <= eventVal;\n case 'LESS_THAN':\n return (metricsVal, eventVal) => metricsVal > eventVal;\n case 'LESS_THAN_OR_EQUAL':\n return (metricsVal, eventVal) => metricsVal >= eventVal;\n default:\n return undefined;\n }\n};\nexport const isBeforeEndDate = ({ Schedule, }) => {\n if (!Schedule?.EndDate) {\n return true;\n }\n return new Date() < new Date(Schedule.EndDate);\n};\nexport const isQuietTime = (message) => {\n const { Schedule } = message;\n if (!Schedule?.QuietTime) {\n return false;\n }\n const pattern = /^[0-2]\\d:[0-5]\\d$/; // basic sanity check, not a fully featured HH:MM validation\n const { Start, End } = Schedule.QuietTime;\n if (!Start ||\n !End ||\n Start === End ||\n !pattern.test(Start) ||\n !pattern.test(End)) {\n return false;\n }\n const now = new Date();\n const start = new Date(now);\n const end = new Date(now);\n const [startHours, startMinutes] = Start.split(':');\n const [endHours, endMinutes] = End.split(':');\n start.setHours(Number.parseInt(startHours, 10), Number.parseInt(startMinutes, 10), 0, 0);\n end.setHours(Number.parseInt(endHours, 10), Number.parseInt(endMinutes, 10), 0, 0);\n // if quiet time includes midnight, bump the end time to the next day\n if (start > end) {\n end.setDate(end.getDate() + 1);\n }\n const isDuringQuietTime = now >= start && now <= end;\n if (isDuringQuietTime) {\n logger.debug('message filtered due to quiet time', message);\n }\n return isDuringQuietTime;\n};\nexport const clearMemo = () => {\n eventNameMemo = {};\n eventAttributesMemo = {};\n eventMetricsMemo = {};\n};\n// in the pinpoint console when a message is created with a Modal or Full Screen layout,\n// it is assigned a layout value of MOBILE_FEED or OVERLAYS respectively in the message payload.\n// In the future, Pinpoint will be updating the layout values in the aforementioned scenario\n// to MODAL and FULL_SCREEN.\n//\n// This utility acts as a safeguard to ensure that:\n// - 1. the usage of MOBILE_FEED and OVERLAYS as values for message layouts are not leaked\n// outside the Pinpoint provider\n// - 2. Amplify correctly handles the legacy layout values from Pinpoint after they are updated\nexport const interpretLayout = (layout) => {\n if (layout === 'MOBILE_FEED') {\n return 'MODAL';\n }\n if (layout === 'OVERLAYS') {\n return 'FULL_SCREEN';\n }\n // cast as PinpointInAppMessage['InAppMessage']['Layout'] allows `string` as a value\n return layout;\n};\nexport const extractContent = ({ InAppMessage: message, }) => {\n return (message?.Content?.map(content => {\n const { BackgroundColor, BodyConfig, HeaderConfig, ImageUrl, PrimaryBtn, SecondaryBtn, } = content;\n const defaultPrimaryButton = PrimaryBtn?.DefaultConfig;\n const defaultSecondaryButton = SecondaryBtn?.DefaultConfig;\n const extractedContent = {};\n if (BackgroundColor) {\n extractedContent.container = {\n style: {\n backgroundColor: BackgroundColor,\n },\n };\n }\n if (HeaderConfig) {\n extractedContent.header = {\n // Default to empty string in rare cases we don't have a Header value\n content: HeaderConfig.Header ?? '',\n style: {\n color: HeaderConfig.TextColor,\n textAlign: HeaderConfig.Alignment?.toLowerCase(),\n },\n };\n }\n if (BodyConfig) {\n extractedContent.body = {\n // Default to empty string in rare cases we don't have a Body value\n content: BodyConfig.Body ?? '',\n style: {\n color: BodyConfig.TextColor,\n textAlign: BodyConfig.Alignment?.toLowerCase(),\n },\n };\n }\n if (ImageUrl) {\n extractedContent.image = {\n src: ImageUrl,\n };\n }\n if (defaultPrimaryButton) {\n extractedContent.primaryButton = {\n // Default to empty string in rare cases we don't have a Text value\n title: defaultPrimaryButton.Text ?? '',\n action: defaultPrimaryButton.ButtonAction,\n url: defaultPrimaryButton.Link,\n style: {\n backgroundColor: defaultPrimaryButton.BackgroundColor,\n borderRadius: defaultPrimaryButton.BorderRadius,\n color: defaultPrimaryButton.TextColor,\n },\n };\n }\n if (defaultSecondaryButton) {\n extractedContent.secondaryButton = {\n // Default to empty string in rare cases we don't have a Text value\n title: defaultSecondaryButton.Text ?? '',\n action: defaultSecondaryButton.ButtonAction,\n url: defaultSecondaryButton.Link,\n style: {\n backgroundColor: defaultSecondaryButton.BackgroundColor,\n borderRadius: defaultSecondaryButton.BorderRadius,\n color: defaultSecondaryButton.TextColor,\n },\n };\n }\n return extractedContent;\n }) ?? []);\n};\nexport const extractMetadata = ({ InAppMessage: inAppMessage, Priority, Schedule, TreatmentId, }) => ({\n customData: inAppMessage?.CustomConfig,\n endDate: Schedule?.EndDate,\n priority: Priority,\n treatmentId: TreatmentId,\n});\n"],"names":["recordCore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.mjs","sources":["../../../../../../src/inAppMessaging/providers/pinpoint/utils/helpers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { ConsoleLogger } from '@aws-amplify/core';\nimport { InAppMessagingAction, getClientInfo, } from '@aws-amplify/core/internals/utils';\nimport isEmpty from 'lodash/isEmpty.js';\nimport { record as recordCore } from '@aws-amplify/core/internals/providers/pinpoint';\nimport { resolveConfig } from './resolveConfig';\nimport { resolveCredentials } from './resolveCredentials';\nimport { CATEGORY } from './constants';\nimport { getInAppMessagingUserAgentString } from './userAgent';\nconst DELIVERY_TYPE = 'IN_APP_MESSAGE';\nlet eventNameMemo = {};\nlet eventAttributesMemo = {};\nlet eventMetricsMemo = {};\nexport const logger = new ConsoleLogger('InAppMessaging.Pinpoint.Utils');\nexport const recordAnalyticsEvent = (event, message) => {\n const { appId, region } = resolveConfig();\n const { id, metadata } = message;\n resolveCredentials()\n .then(({ credentials, identityId }) => {\n recordCore({\n appId,\n category: CATEGORY,\n credentials,\n event: {\n name: event,\n attributes: {\n // only include campaign_id field if we have one\n ...(id && { campaign_id: id }),\n delivery_type: DELIVERY_TYPE,\n treatment_id: metadata?.treatmentId,\n },\n },\n identityId,\n region,\n userAgentValue: getInAppMessagingUserAgentString(InAppMessagingAction.NotifyMessageInteraction),\n });\n })\n .catch(e => {\n // An error occured while fetching credentials or persisting the event to the buffer\n logger.warn('Failed to record event.', e);\n });\n};\nexport const getStartOfDay = () => {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n return now.toISOString();\n};\nexport const matchesEventType = ({ CampaignId, Schedule }, { name: eventType }) => {\n const { EventType } = Schedule?.EventFilter?.Dimensions ?? {};\n const memoKey = `${CampaignId}:${eventType}`;\n if (!Object.prototype.hasOwnProperty.call(eventNameMemo, memoKey)) {\n eventNameMemo[memoKey] = !!EventType?.Values?.includes(eventType);\n }\n return eventNameMemo[memoKey];\n};\nexport const matchesAttributes = ({ CampaignId, Schedule }, { attributes = {} }) => {\n const { Attributes } = Schedule?.EventFilter?.Dimensions ?? {};\n if (isEmpty(Attributes)) {\n // if message does not have attributes defined it does not matter what attributes are on the event\n return true;\n }\n if (isEmpty(attributes)) {\n // if message does have attributes but the event does not then it always fails the check\n return false;\n }\n const memoKey = `${CampaignId}:${JSON.stringify(attributes)}`;\n if (!Object.prototype.hasOwnProperty.call(eventAttributesMemo, memoKey)) {\n eventAttributesMemo[memoKey] =\n !Attributes ||\n Object.entries(Attributes).every(([key, { Values }]) => Values?.includes(attributes[key]));\n }\n return eventAttributesMemo[memoKey];\n};\nexport const matchesMetrics = ({ CampaignId, Schedule }, { metrics = {} }) => {\n const { Metrics } = Schedule?.EventFilter?.Dimensions ?? {};\n if (isEmpty(Metrics)) {\n // if message does not have metrics defined it does not matter what metrics are on the event\n return true;\n }\n if (isEmpty(metrics)) {\n // if message does have metrics but the event does not then it always fails the check\n return false;\n }\n const memoKey = `${CampaignId}:${JSON.stringify(metrics)}`;\n if (!Object.prototype.hasOwnProperty.call(eventMetricsMemo, memoKey)) {\n eventMetricsMemo[memoKey] =\n !Metrics ||\n Object.entries(Metrics).every(([key, { ComparisonOperator, Value }]) => {\n const compare = getComparator(ComparisonOperator);\n // if there is some unknown comparison operator, treat as a comparison failure\n return compare && !!Value ? compare(Value, metrics[key]) : false;\n });\n }\n return eventMetricsMemo[memoKey];\n};\nexport const getComparator = (operator) => {\n switch (operator) {\n case 'EQUAL':\n return (metricsVal, eventVal) => metricsVal === eventVal;\n case 'GREATER_THAN':\n return (metricsVal, eventVal) => metricsVal < eventVal;\n case 'GREATER_THAN_OR_EQUAL':\n return (metricsVal, eventVal) => metricsVal <= eventVal;\n case 'LESS_THAN':\n return (metricsVal, eventVal) => metricsVal > eventVal;\n case 'LESS_THAN_OR_EQUAL':\n return (metricsVal, eventVal) => metricsVal >= eventVal;\n default:\n return undefined;\n }\n};\nexport const isBeforeEndDate = ({ Schedule, }) => {\n if (!Schedule?.EndDate) {\n return true;\n }\n return new Date() < new Date(Schedule.EndDate);\n};\nexport const isQuietTime = (message) => {\n const { Schedule } = message;\n if (!Schedule?.QuietTime) {\n return false;\n }\n const pattern = /^[0-2]\\d:[0-5]\\d$/; // basic sanity check, not a fully featured HH:MM validation\n const { Start, End } = Schedule.QuietTime;\n if (!Start ||\n !End ||\n Start === End ||\n !pattern.test(Start) ||\n !pattern.test(End)) {\n return false;\n }\n const now = new Date();\n const start = new Date(now);\n const end = new Date(now);\n const [startHours, startMinutes] = Start.split(':');\n const [endHours, endMinutes] = End.split(':');\n start.setHours(Number.parseInt(startHours, 10), Number.parseInt(startMinutes, 10), 0, 0);\n end.setHours(Number.parseInt(endHours, 10), Number.parseInt(endMinutes, 10), 0, 0);\n // if quiet time includes midnight, bump the end time to the next day\n if (start > end) {\n end.setDate(end.getDate() + 1);\n }\n const isDuringQuietTime = now >= start && now <= end;\n if (isDuringQuietTime) {\n logger.debug('message filtered due to quiet time', message);\n }\n return isDuringQuietTime;\n};\nexport const clearMemo = () => {\n eventNameMemo = {};\n eventAttributesMemo = {};\n eventMetricsMemo = {};\n};\n// in the pinpoint console when a message is created with a Modal or Full Screen layout,\n// it is assigned a layout value of MOBILE_FEED or OVERLAYS respectively in the message payload.\n// In the future, Pinpoint will be updating the layout values in the aforementioned scenario\n// to MODAL and FULL_SCREEN.\n//\n// This utility acts as a safeguard to ensure that:\n// - 1. the usage of MOBILE_FEED and OVERLAYS as values for message layouts are not leaked\n// outside the Pinpoint provider\n// - 2. Amplify correctly handles the legacy layout values from Pinpoint after they are updated\nexport const interpretLayout = (layout) => {\n if (layout === 'MOBILE_FEED') {\n return 'MODAL';\n }\n if (layout === 'OVERLAYS') {\n return 'FULL_SCREEN';\n }\n // cast as PinpointInAppMessage['InAppMessage']['Layout'] allows `string` as a value\n return layout;\n};\nexport const extractContent = ({ InAppMessage: message, }) => {\n const clientInfo = getClientInfo();\n const configPlatform = mapOSPlatform(clientInfo?.platform);\n return (message?.Content?.map(content => {\n const { BackgroundColor, BodyConfig, HeaderConfig, ImageUrl, PrimaryBtn, SecondaryBtn, } = content;\n const defaultPrimaryButton = getButtonConfig(configPlatform, PrimaryBtn);\n const defaultSecondaryButton = getButtonConfig(configPlatform, SecondaryBtn);\n const extractedContent = {};\n if (BackgroundColor) {\n extractedContent.container = {\n style: {\n backgroundColor: BackgroundColor,\n },\n };\n }\n if (HeaderConfig) {\n extractedContent.header = {\n // Default to empty string in rare cases we don't have a Header value\n content: HeaderConfig.Header ?? '',\n style: {\n color: HeaderConfig.TextColor,\n textAlign: HeaderConfig.Alignment?.toLowerCase(),\n },\n };\n }\n if (BodyConfig) {\n extractedContent.body = {\n // Default to empty string in rare cases we don't have a Body value\n content: BodyConfig.Body ?? '',\n style: {\n color: BodyConfig.TextColor,\n textAlign: BodyConfig.Alignment?.toLowerCase(),\n },\n };\n }\n if (ImageUrl) {\n extractedContent.image = {\n src: ImageUrl,\n };\n }\n if (defaultPrimaryButton) {\n extractedContent.primaryButton = {\n // Default to empty string in rare cases we don't have a Text value\n title: defaultPrimaryButton.Text ?? '',\n action: defaultPrimaryButton.ButtonAction,\n url: defaultPrimaryButton.Link,\n style: {\n backgroundColor: defaultPrimaryButton.BackgroundColor,\n borderRadius: defaultPrimaryButton.BorderRadius,\n color: defaultPrimaryButton.TextColor,\n },\n };\n }\n if (defaultSecondaryButton) {\n extractedContent.secondaryButton = {\n // Default to empty string in rare cases we don't have a Text value\n title: defaultSecondaryButton.Text ?? '',\n action: defaultSecondaryButton.ButtonAction,\n url: defaultSecondaryButton.Link,\n style: {\n backgroundColor: defaultSecondaryButton.BackgroundColor,\n borderRadius: defaultSecondaryButton.BorderRadius,\n color: defaultSecondaryButton.TextColor,\n },\n };\n }\n return extractedContent;\n }) ?? []);\n};\nexport const extractMetadata = ({ InAppMessage: inAppMessage, Priority, Schedule, TreatmentId, }) => ({\n customData: inAppMessage?.CustomConfig,\n endDate: Schedule?.EndDate,\n priority: Priority,\n treatmentId: TreatmentId,\n});\nexport const mapOSPlatform = (os) => {\n if (!os)\n return 'DefaultConfig';\n // Check if running in a web browser\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n return 'Web';\n }\n // Native environment checks\n switch (os) {\n case 'android':\n return 'Android';\n case 'ios':\n return 'IOS';\n default:\n return 'DefaultConfig';\n }\n};\nconst getButtonConfig = (configPlatform, button) => {\n if (!button?.DefaultConfig) {\n return;\n }\n if (!configPlatform || !button?.[configPlatform]) {\n return button?.DefaultConfig;\n }\n return {\n ...button.DefaultConfig,\n ...button[configPlatform],\n };\n};\n"],"names":["recordCore"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type InAppMessageLayout = 'BOTTOM_BANNER' | 'CAROUSEL' | 'FULL_SCREEN' | 'MIDDLE_BANNER' | 'MODAL' | 'TOP_BANNER';
|
|
2
2
|
export type InAppMessageAction = 'CLOSE' | 'DEEP_LINK' | 'LINK';
|
|
3
3
|
export type InAppMessageTextAlign = 'center' | 'left' | 'right';
|
|
4
|
+
export type ButtonConfigPlatform = 'Android' | 'IOS' | 'Web' | 'DefaultConfig';
|
|
4
5
|
interface InAppMessageContainer {
|
|
5
6
|
style?: InAppMessageStyle;
|
|
6
7
|
}
|
package/package.json
CHANGED
|
@@ -1,106 +1,106 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
2
|
+
"name": "@aws-amplify/notifications",
|
|
3
|
+
"version": "2.0.28",
|
|
4
|
+
"description": "Notifications category of aws-amplify",
|
|
5
|
+
"main": "./dist/cjs/index.js",
|
|
6
|
+
"module": "./dist/esm/index.mjs",
|
|
7
|
+
"react-native": "./src/index.ts",
|
|
8
|
+
"typings": "./dist/esm/index.d.ts",
|
|
9
|
+
"sideEffects": false,
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"test": "npm run lint && jest -w 1 --coverage --logHeapUsage",
|
|
15
|
+
"test:watch": "tslint 'src/**/*.ts' && jest -w 1 --watch",
|
|
16
|
+
"build-with-test": "npm run clean && npm run build",
|
|
17
|
+
"build:umd": "webpack && webpack --config ./webpack.config.dev.js",
|
|
18
|
+
"build:esm-cjs": "rollup -c rollup.config.mjs",
|
|
19
|
+
"build:watch": "npm run build:esm-cjs -- --watch",
|
|
20
|
+
"build": "npm run clean && npm run build:esm-cjs && npm run build:umd",
|
|
21
|
+
"clean": "npm run clean:size && rimraf dist lib lib-esm",
|
|
22
|
+
"clean:size": "rimraf dual-publish-tmp tmp*",
|
|
23
|
+
"format": "echo \"Not implemented\"",
|
|
24
|
+
"lint": "eslint '**/*.{ts,tsx}' && npm run ts-coverage",
|
|
25
|
+
"lint:fix": "eslint '**/*.{ts,tsx}' --fix",
|
|
26
|
+
"ts-coverage": "typescript-coverage-report -p ./tsconfig.build.json -t 88.21"
|
|
27
|
+
},
|
|
28
|
+
"typesVersions": {
|
|
29
|
+
">=4.2": {
|
|
30
|
+
"in-app-messaging": [
|
|
31
|
+
"./dist/esm/inAppMessaging/index.d.ts"
|
|
32
|
+
],
|
|
33
|
+
"push-notifications": [
|
|
34
|
+
"./dist/esm/pushNotifications/providers/index.d.ts"
|
|
35
|
+
],
|
|
36
|
+
"in-app-messaging/pinpoint": [
|
|
37
|
+
"./dist/esm/inAppMessaging/providers/pinpoint/index.d.ts"
|
|
38
|
+
],
|
|
39
|
+
"push-notifications/pinpoint": [
|
|
40
|
+
"./dist/esm/pushNotifications/providers/pinpoint/index.d.ts"
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"exports": {
|
|
45
|
+
".": {
|
|
46
|
+
"import": "./dist/esm/index.mjs",
|
|
47
|
+
"require": "./dist/cjs/index.js",
|
|
48
|
+
"react-native": "./src/index.ts"
|
|
49
|
+
},
|
|
50
|
+
"./in-app-messaging": {
|
|
51
|
+
"types": "./dist/esm/inAppMessaging/index.d.ts",
|
|
52
|
+
"import": "./dist/esm/inAppMessaging/index.mjs",
|
|
53
|
+
"require": "./dist/cjs/inAppMessaging/index.js",
|
|
54
|
+
"react-native": "./src/inAppMessaging/index.ts"
|
|
55
|
+
},
|
|
56
|
+
"./push-notifications": {
|
|
57
|
+
"types": "./dist/esm/pushNotifications/index.d.ts",
|
|
58
|
+
"import": "./dist/esm/pushNotifications/index.mjs",
|
|
59
|
+
"require": "./dist/cjs/pushNotifications/index.js",
|
|
60
|
+
"react-native": "./src/pushNotifications/index.ts"
|
|
61
|
+
},
|
|
62
|
+
"./in-app-messaging/pinpoint": {
|
|
63
|
+
"types": "./dist/esm/inAppMessaging/providers/pinpoint/index.d.ts",
|
|
64
|
+
"import": "./dist/esm/inAppMessaging/providers/pinpoint/index.mjs",
|
|
65
|
+
"require": "./dist/cjs/inAppMessaging/providers/pinpoint/index.js",
|
|
66
|
+
"react-native": "./src/inAppMessaging/providers/pinpoint/index.ts"
|
|
67
|
+
},
|
|
68
|
+
"./push-notifications/pinpoint": {
|
|
69
|
+
"types": "./dist/esm/pushNotifications/providers/pinpoint/index.d.ts",
|
|
70
|
+
"import": "./dist/esm/pushNotifications/providers/pinpoint/index.mjs",
|
|
71
|
+
"require": "./dist/cjs/pushNotifications/providers/pinpoint/index.js",
|
|
72
|
+
"react-native": "./src/pushNotifications/providers/pinpoint/index.ts"
|
|
73
|
+
},
|
|
74
|
+
"./package.json": "./package.json"
|
|
75
|
+
},
|
|
76
|
+
"repository": {
|
|
77
|
+
"type": "git",
|
|
78
|
+
"url": "https://github.com/aws-amplify/amplify-js.git"
|
|
79
|
+
},
|
|
80
|
+
"author": "Amazon Web Services",
|
|
81
|
+
"license": "Apache-2.0",
|
|
82
|
+
"bugs": {
|
|
83
|
+
"url": "https://github.com/aws/aws-amplify/issues"
|
|
84
|
+
},
|
|
85
|
+
"homepage": "https://docs.amplify.aws/",
|
|
86
|
+
"files": [
|
|
87
|
+
"dist/cjs",
|
|
88
|
+
"dist/esm",
|
|
89
|
+
"src",
|
|
90
|
+
"in-app-messaging",
|
|
91
|
+
"push-notifications"
|
|
92
|
+
],
|
|
93
|
+
"dependencies": {
|
|
94
|
+
"lodash": "^4.17.21",
|
|
95
|
+
"tslib": "^2.5.0"
|
|
96
|
+
},
|
|
97
|
+
"peerDependencies": {
|
|
98
|
+
"@aws-amplify/core": "^6.0.0"
|
|
99
|
+
},
|
|
100
|
+
"devDependencies": {
|
|
101
|
+
"@aws-amplify/core": "6.0.28",
|
|
102
|
+
"@aws-amplify/react-native": "1.0.28",
|
|
103
|
+
"typescript": "5.0.2"
|
|
104
|
+
},
|
|
105
|
+
"gitHead": "672417ff6e9823f8b92c5d43585acf6ad9e43264"
|
|
106
106
|
}
|
|
@@ -2,8 +2,14 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { ConsoleLogger } from '@aws-amplify/core';
|
|
5
|
-
import {
|
|
6
|
-
|
|
5
|
+
import {
|
|
6
|
+
InAppMessagingAction,
|
|
7
|
+
getClientInfo,
|
|
8
|
+
} from '@aws-amplify/core/internals/utils';
|
|
9
|
+
import type {
|
|
10
|
+
InAppMessageButton,
|
|
11
|
+
InAppMessageCampaign as PinpointInAppMessage,
|
|
12
|
+
} from '@aws-amplify/core/internals/aws-clients/pinpoint';
|
|
7
13
|
import isEmpty from 'lodash/isEmpty.js';
|
|
8
14
|
import { record as recordCore } from '@aws-amplify/core/internals/providers/pinpoint';
|
|
9
15
|
|
|
@@ -16,6 +22,7 @@ import {
|
|
|
16
22
|
InAppMessagingEvent,
|
|
17
23
|
} from '../../../types';
|
|
18
24
|
import { MetricsComparator, PinpointMessageEvent } from '../types';
|
|
25
|
+
import { ButtonConfigPlatform } from '../../../types/message';
|
|
19
26
|
|
|
20
27
|
import { resolveConfig } from './resolveConfig';
|
|
21
28
|
import { resolveCredentials } from './resolveCredentials';
|
|
@@ -251,6 +258,9 @@ export const interpretLayout = (
|
|
|
251
258
|
export const extractContent = ({
|
|
252
259
|
InAppMessage: message,
|
|
253
260
|
}: PinpointInAppMessage): InAppMessageContent[] => {
|
|
261
|
+
const clientInfo = getClientInfo();
|
|
262
|
+
const configPlatform = mapOSPlatform(clientInfo?.platform);
|
|
263
|
+
|
|
254
264
|
return (
|
|
255
265
|
message?.Content?.map(content => {
|
|
256
266
|
const {
|
|
@@ -261,8 +271,13 @@ export const extractContent = ({
|
|
|
261
271
|
PrimaryBtn,
|
|
262
272
|
SecondaryBtn,
|
|
263
273
|
} = content;
|
|
264
|
-
|
|
265
|
-
const
|
|
274
|
+
|
|
275
|
+
const defaultPrimaryButton = getButtonConfig(configPlatform, PrimaryBtn);
|
|
276
|
+
const defaultSecondaryButton = getButtonConfig(
|
|
277
|
+
configPlatform,
|
|
278
|
+
SecondaryBtn,
|
|
279
|
+
);
|
|
280
|
+
|
|
266
281
|
const extractedContent: InAppMessageContent = {};
|
|
267
282
|
if (BackgroundColor) {
|
|
268
283
|
extractedContent.container = {
|
|
@@ -341,3 +356,37 @@ export const extractMetadata = ({
|
|
|
341
356
|
priority: Priority,
|
|
342
357
|
treatmentId: TreatmentId,
|
|
343
358
|
});
|
|
359
|
+
|
|
360
|
+
export const mapOSPlatform = (os?: string): ButtonConfigPlatform => {
|
|
361
|
+
if (!os) return 'DefaultConfig';
|
|
362
|
+
// Check if running in a web browser
|
|
363
|
+
if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
|
|
364
|
+
return 'Web';
|
|
365
|
+
}
|
|
366
|
+
// Native environment checks
|
|
367
|
+
switch (os) {
|
|
368
|
+
case 'android':
|
|
369
|
+
return 'Android';
|
|
370
|
+
case 'ios':
|
|
371
|
+
return 'IOS';
|
|
372
|
+
default:
|
|
373
|
+
return 'DefaultConfig';
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
const getButtonConfig = (
|
|
378
|
+
configPlatform: ButtonConfigPlatform,
|
|
379
|
+
button?: InAppMessageButton,
|
|
380
|
+
): InAppMessageButton['DefaultConfig'] | undefined => {
|
|
381
|
+
if (!button?.DefaultConfig) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
if (!configPlatform || !button?.[configPlatform]) {
|
|
385
|
+
return button?.DefaultConfig;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return {
|
|
389
|
+
...button.DefaultConfig,
|
|
390
|
+
...button[configPlatform],
|
|
391
|
+
};
|
|
392
|
+
};
|
|
@@ -13,6 +13,8 @@ export type InAppMessageAction = 'CLOSE' | 'DEEP_LINK' | 'LINK';
|
|
|
13
13
|
|
|
14
14
|
export type InAppMessageTextAlign = 'center' | 'left' | 'right';
|
|
15
15
|
|
|
16
|
+
export type ButtonConfigPlatform = 'Android' | 'IOS' | 'Web' | 'DefaultConfig';
|
|
17
|
+
|
|
16
18
|
interface InAppMessageContainer {
|
|
17
19
|
style?: InAppMessageStyle;
|
|
18
20
|
}
|