@adobe/alloy 2.29.0-beta.5 → 2.30.0-beta.0

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.
Files changed (177) hide show
  1. package/libEs5/components/ActivityCollector/utils/dom/findClickableElement.js +4 -0
  2. package/libEs5/components/Advertising/handlers/clickThroughHandler.js +2 -1
  3. package/libEs5/components/Advertising/handlers/onBeforeSendEventHandler.js +8 -3
  4. package/libEs5/components/Advertising/handlers/viewThroughHandler.js +2 -1
  5. package/libEs5/components/Advertising/identities/collectID5Id.js +1 -1
  6. package/libEs5/components/Advertising/identities/collectRampId.js +1 -1
  7. package/libEs5/components/Consent/createConsentRequestPayload.js +14 -3
  8. package/libEs5/components/Consent/types.js +18 -0
  9. package/libEs5/components/Personalization/dom-actions/action.js +7 -4
  10. package/libEs5/components/Personalization/dom-actions/initDomActionsModules.js +10 -10
  11. package/libEs5/components/PushNotifications/helpers/constants.js +19 -0
  12. package/libEs5/components/PushNotifications/helpers/getPushSubscriptionDetails.js +116 -0
  13. package/libEs5/components/PushNotifications/helpers/readFromIndexedDb.js +41 -0
  14. package/libEs5/components/PushNotifications/helpers/saveToIndexedDb.js +50 -0
  15. package/libEs5/components/PushNotifications/helpers/serviceWorkerNotificationClickListener.js +85 -0
  16. package/libEs5/components/PushNotifications/helpers/serviceWorkerPushListener.js +70 -0
  17. package/libEs5/components/PushNotifications/index.js +129 -0
  18. package/libEs5/components/PushNotifications/request/createSendPushSubscriptionPayload.js +62 -0
  19. package/libEs5/components/PushNotifications/request/createSendPushSubscriptionRequest.js +35 -0
  20. package/libEs5/components/PushNotifications/request/makeSendPushSubscriptionRequest.js +93 -0
  21. package/libEs5/components/PushNotifications/request/makeSendServiceWorkerTrackingData.js +146 -0
  22. package/libEs5/components/PushNotifications/serviceWorker.js +91 -0
  23. package/libEs5/components/PushNotifications/types.js +95 -0
  24. package/libEs5/constants/libraryVersion.js +1 -1
  25. package/libEs5/core/componentCreators.js +8 -1
  26. package/libEs5/core/consent/createConsent.js +10 -0
  27. package/libEs5/core/consent/createConsentStateMachine.js +36 -0
  28. package/libEs5/core/consent/types.js +24 -0
  29. package/libEs5/core/edgeNetwork/injectSendEdgeNetworkRequest.js +20 -0
  30. package/libEs5/core/edgeNetwork/types.js +10 -0
  31. package/libEs5/core/identity/createIdentity.js +36 -0
  32. package/libEs5/core/identity/types.js +15 -0
  33. package/libEs5/core/injectCreateResponse.js +9 -7
  34. package/libEs5/core/types.js +101 -11
  35. package/libEs5/utils/bytes.js +12 -1
  36. package/libEs5/utils/createLoggingCookieJar.js +14 -1
  37. package/libEs5/utils/createMerger.js +5 -4
  38. package/libEs5/utils/index.js +19 -0
  39. package/libEs5/utils/indexedDb.js +73 -0
  40. package/libEs5/utils/injectStorage.js +19 -0
  41. package/libEs5/utils/request/createDataCollectionRequestPayload.js +16 -8
  42. package/libEs5/utils/request/createRequest.js +28 -1
  43. package/libEs5/utils/request/createRequestPayload.js +15 -2
  44. package/libEs5/utils/request/types.js +52 -0
  45. package/libEs5/utils/types.js +39 -0
  46. package/libEs6/components/ActivityCollector/utils/dom/findClickableElement.js +4 -0
  47. package/libEs6/components/Advertising/handlers/clickThroughHandler.js +2 -1
  48. package/libEs6/components/Advertising/handlers/onBeforeSendEventHandler.js +8 -3
  49. package/libEs6/components/Advertising/handlers/viewThroughHandler.js +2 -1
  50. package/libEs6/components/Advertising/identities/collectID5Id.js +1 -1
  51. package/libEs6/components/Advertising/identities/collectRampId.js +1 -1
  52. package/libEs6/components/Consent/createConsentRequestPayload.js +16 -3
  53. package/libEs6/components/Consent/types.js +15 -0
  54. package/libEs6/components/Personalization/dom-actions/action.js +7 -4
  55. package/libEs6/components/Personalization/dom-actions/initDomActionsModules.js +10 -10
  56. package/libEs6/components/PushNotifications/helpers/constants.js +16 -0
  57. package/libEs6/components/PushNotifications/helpers/getPushSubscriptionDetails.js +114 -0
  58. package/libEs6/components/PushNotifications/helpers/readFromIndexedDb.js +40 -0
  59. package/libEs6/components/PushNotifications/helpers/saveToIndexedDb.js +48 -0
  60. package/libEs6/components/PushNotifications/helpers/serviceWorkerNotificationClickListener.js +82 -0
  61. package/libEs6/components/PushNotifications/helpers/serviceWorkerPushListener.js +69 -0
  62. package/libEs6/components/PushNotifications/index.js +126 -0
  63. package/libEs6/components/PushNotifications/request/createSendPushSubscriptionPayload.js +61 -0
  64. package/libEs6/components/PushNotifications/request/createSendPushSubscriptionRequest.js +34 -0
  65. package/libEs6/components/PushNotifications/request/makeSendPushSubscriptionRequest.js +89 -0
  66. package/libEs6/components/PushNotifications/request/makeSendServiceWorkerTrackingData.js +146 -0
  67. package/libEs6/components/PushNotifications/serviceWorker.js +90 -0
  68. package/libEs6/components/PushNotifications/types.js +92 -0
  69. package/libEs6/constants/libraryVersion.js +1 -1
  70. package/libEs6/core/componentCreators.js +2 -1
  71. package/libEs6/core/consent/createConsent.js +12 -0
  72. package/libEs6/core/consent/createConsentStateMachine.js +36 -0
  73. package/libEs6/core/consent/types.js +21 -0
  74. package/libEs6/core/edgeNetwork/injectSendEdgeNetworkRequest.js +20 -0
  75. package/libEs6/core/edgeNetwork/types.js +7 -0
  76. package/libEs6/core/identity/createIdentity.js +38 -0
  77. package/libEs6/core/identity/types.js +12 -0
  78. package/libEs6/core/injectCreateResponse.js +11 -7
  79. package/libEs6/core/types.js +101 -11
  80. package/libEs6/utils/bytes.js +12 -1
  81. package/libEs6/utils/createLoggingCookieJar.js +15 -1
  82. package/libEs6/utils/createMerger.js +5 -4
  83. package/libEs6/utils/index.js +1 -0
  84. package/libEs6/utils/indexedDb.js +67 -0
  85. package/libEs6/utils/injectStorage.js +20 -0
  86. package/libEs6/utils/request/createDataCollectionRequestPayload.js +19 -8
  87. package/libEs6/utils/request/createRequest.js +29 -1
  88. package/libEs6/utils/request/createRequestPayload.js +15 -2
  89. package/libEs6/utils/request/types.js +49 -0
  90. package/libEs6/utils/types.js +36 -0
  91. package/package.json +45 -52
  92. package/scripts/alloyBuilder.js +130 -4
  93. package/types/components/ActivityCollector/utils/dom/findClickableElement.d.ts.map +1 -1
  94. package/types/components/Advertising/handlers/onBeforeSendEventHandler.d.ts.map +1 -1
  95. package/types/components/Advertising/handlers/viewThroughHandler.d.ts.map +1 -1
  96. package/types/components/Consent/createConsentRequest.d.ts +1 -11
  97. package/types/components/Consent/createConsentRequest.d.ts.map +1 -1
  98. package/types/components/Consent/createConsentRequestPayload.d.ts +2 -9
  99. package/types/components/Consent/createConsentRequestPayload.d.ts.map +1 -1
  100. package/types/components/Consent/types.d.ts +28 -0
  101. package/types/components/Consent/types.d.ts.map +1 -0
  102. package/types/components/Identity/getIdentity/createIdentityRequest.d.ts +1 -11
  103. package/types/components/Identity/getIdentity/createIdentityRequest.d.ts.map +1 -1
  104. package/types/components/Identity/getIdentity/createIdentityRequestPayload.d.ts +1 -9
  105. package/types/components/Identity/getIdentity/createIdentityRequestPayload.d.ts.map +1 -1
  106. package/types/components/Personalization/dom-actions/action.d.ts +1 -1
  107. package/types/components/Personalization/dom-actions/action.d.ts.map +1 -1
  108. package/types/components/PushNotifications/helpers/constants.d.ts +5 -0
  109. package/types/components/PushNotifications/helpers/constants.d.ts.map +1 -0
  110. package/types/components/PushNotifications/helpers/getPushSubscriptionDetails.d.ts +30 -0
  111. package/types/components/PushNotifications/helpers/getPushSubscriptionDetails.d.ts.map +1 -0
  112. package/types/components/PushNotifications/helpers/readFromIndexedDb.d.ts +4 -0
  113. package/types/components/PushNotifications/helpers/readFromIndexedDb.d.ts.map +1 -0
  114. package/types/components/PushNotifications/helpers/saveToIndexedDb.d.ts +9 -0
  115. package/types/components/PushNotifications/helpers/saveToIndexedDb.d.ts.map +1 -0
  116. package/types/components/PushNotifications/helpers/serviceWorkerNotificationClickListener.d.ts +9 -0
  117. package/types/components/PushNotifications/helpers/serviceWorkerNotificationClickListener.d.ts.map +1 -0
  118. package/types/components/PushNotifications/helpers/serviceWorkerPushListener.d.ts +8 -0
  119. package/types/components/PushNotifications/helpers/serviceWorkerPushListener.d.ts.map +1 -0
  120. package/types/components/PushNotifications/index.d.ts +51 -0
  121. package/types/components/PushNotifications/index.d.ts.map +1 -0
  122. package/types/components/PushNotifications/request/createSendPushSubscriptionPayload.d.ts +10 -0
  123. package/types/components/PushNotifications/request/createSendPushSubscriptionPayload.d.ts.map +1 -0
  124. package/types/components/PushNotifications/request/createSendPushSubscriptionRequest.d.ts +7 -0
  125. package/types/components/PushNotifications/request/createSendPushSubscriptionRequest.d.ts.map +1 -0
  126. package/types/components/PushNotifications/request/makeSendPushSubscriptionRequest.d.ts +21 -0
  127. package/types/components/PushNotifications/request/makeSendPushSubscriptionRequest.d.ts.map +1 -0
  128. package/types/components/PushNotifications/request/makeSendServiceWorkerTrackingData.d.ts +11 -0
  129. package/types/components/PushNotifications/request/makeSendServiceWorkerTrackingData.d.ts.map +1 -0
  130. package/types/components/PushNotifications/serviceWorker.d.ts +2 -0
  131. package/types/components/PushNotifications/serviceWorker.d.ts.map +1 -0
  132. package/types/components/PushNotifications/types.d.ts +190 -0
  133. package/types/components/PushNotifications/types.d.ts.map +1 -0
  134. package/types/components/StreamingMedia/createMediaRequest.d.ts +1 -11
  135. package/types/components/StreamingMedia/createMediaRequest.d.ts.map +1 -1
  136. package/types/core/componentCreators.d.ts +1 -0
  137. package/types/core/consent/createConsent.d.ts +4 -10
  138. package/types/core/consent/createConsent.d.ts.map +1 -1
  139. package/types/core/consent/createConsentStateMachine.d.ts +4 -12
  140. package/types/core/consent/createConsentStateMachine.d.ts.map +1 -1
  141. package/types/core/consent/types.d.ts +42 -0
  142. package/types/core/consent/types.d.ts.map +1 -0
  143. package/types/core/edgeNetwork/injectSendEdgeNetworkRequest.d.ts +15 -13
  144. package/types/core/edgeNetwork/injectSendEdgeNetworkRequest.d.ts.map +1 -1
  145. package/types/core/edgeNetwork/types.d.ts +12 -0
  146. package/types/core/edgeNetwork/types.d.ts.map +1 -0
  147. package/types/core/identity/createIdentity.d.ts +9 -9
  148. package/types/core/identity/createIdentity.d.ts.map +1 -1
  149. package/types/core/identity/types.d.ts +23 -0
  150. package/types/core/identity/types.d.ts.map +1 -0
  151. package/types/core/injectCreateResponse.d.ts +3 -27
  152. package/types/core/injectCreateResponse.d.ts.map +1 -1
  153. package/types/core/types.d.ts +209 -22
  154. package/types/core/types.d.ts.map +1 -1
  155. package/types/utils/bytes.d.ts +3 -1
  156. package/types/utils/bytes.d.ts.map +1 -1
  157. package/types/utils/createLoggingCookieJar.d.ts +5 -3
  158. package/types/utils/createLoggingCookieJar.d.ts.map +1 -1
  159. package/types/utils/createMerger.d.ts +1 -1
  160. package/types/utils/createMerger.d.ts.map +1 -1
  161. package/types/utils/index.d.ts +1 -0
  162. package/types/utils/indexedDb.d.ts +4 -0
  163. package/types/utils/indexedDb.d.ts.map +1 -0
  164. package/types/utils/injectStorage.d.ts +2 -40
  165. package/types/utils/injectStorage.d.ts.map +1 -1
  166. package/types/utils/request/createDataCollectionRequest.d.ts +1 -11
  167. package/types/utils/request/createDataCollectionRequest.d.ts.map +1 -1
  168. package/types/utils/request/createDataCollectionRequestPayload.d.ts +2 -9
  169. package/types/utils/request/createDataCollectionRequestPayload.d.ts.map +1 -1
  170. package/types/utils/request/createRequest.d.ts +13 -11
  171. package/types/utils/request/createRequest.d.ts.map +1 -1
  172. package/types/utils/request/createRequestPayload.d.ts +7 -9
  173. package/types/utils/request/createRequestPayload.d.ts.map +1 -1
  174. package/types/utils/request/types.d.ts +91 -0
  175. package/types/utils/request/types.d.ts.map +1 -0
  176. package/types/utils/types.d.ts +91 -0
  177. package/types/utils/types.d.ts.map +1 -0
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ exports.default = void 0;
4
+ var _index = require("../../utils/validation/index.js");
5
+ var _index2 = require("../../utils/index.js");
6
+ var _makeSendPushSubscriptionRequest = require("./request/makeSendPushSubscriptionRequest.js");
7
+ var _saveToIndexedDb = require("./helpers/saveToIndexedDb.js");
8
+ /*
9
+ Copyright 2025 Adobe. All rights reserved.
10
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
11
+ you may not use this file except in compliance with the License. You may obtain a copy
12
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
13
+
14
+ Unless required by applicable law or agreed to in writing, software distributed under
15
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
16
+ OF ANY KIND, either express or implied. See the License for the specific language
17
+ governing permissions and limitations under the License.
18
+ */
19
+
20
+ /** @import { StorageCreator } from '../../utils/types.js' */
21
+ /** @import { EventManager, Logger } from '../../core/types.js' */
22
+ /** @import { IdentityManager } from '../../core/identity/types.js' */
23
+ /** @import { ConsentManager } from '../../core/consent/types.js' */
24
+ /** @import { EdgeRequestExecutor } from '../../core/edgeNetwork/types.js' */
25
+
26
+ const isComponentConfigured = ({
27
+ orgId,
28
+ pushNotifications: {
29
+ vapidPublicKey,
30
+ appId,
31
+ trackingDatasetId
32
+ } = {
33
+ vapidPublicKey: undefined,
34
+ appId: undefined,
35
+ trackingDatasetId: undefined
36
+ }
37
+ }) => orgId && vapidPublicKey && appId && trackingDatasetId;
38
+
39
+ /**
40
+ * @function
41
+ *
42
+ * @param {Object} options
43
+ * @param {{ orgId: string, datastreamId: string, edgeDomain: string, edgeBasePath: string, pushNotifications: { vapidPublicKey: string, appId: string, trackingDatasetId: string }}} options.config
44
+ * @param {StorageCreator} options.createNamespacedStorage
45
+ * @param {EventManager} options.eventManager
46
+ * @param {Logger} options.logger
47
+ * @param {ConsentManager} options.consent
48
+ * @param {IdentityManager} options.identity
49
+ * @param {function(): string} options.getBrowser
50
+ * @param {EdgeRequestExecutor} options.sendEdgeNetworkRequest
51
+ * @returns {{ lifecycle: object, commands: { sendPushSubscription: object } }}
52
+ */
53
+ const createPushNotifications = ({
54
+ createNamespacedStorage,
55
+ eventManager,
56
+ config,
57
+ logger,
58
+ consent,
59
+ identity,
60
+ getBrowser,
61
+ sendEdgeNetworkRequest
62
+ }) => {
63
+ return {
64
+ lifecycle: {
65
+ async onComponentsRegistered() {
66
+ if (isComponentConfigured(config)) {
67
+ const {
68
+ datastreamId,
69
+ edgeDomain,
70
+ edgeBasePath,
71
+ pushNotifications: {
72
+ trackingDatasetId
73
+ }
74
+ } = config;
75
+ await (0, _saveToIndexedDb.default)({
76
+ datastreamId,
77
+ edgeDomain,
78
+ edgeBasePath,
79
+ datasetId: trackingDatasetId,
80
+ browser: getBrowser()
81
+ }, logger);
82
+ }
83
+ }
84
+ },
85
+ commands: {
86
+ sendPushSubscription: {
87
+ run: async () => {
88
+ if (!isComponentConfigured(config)) {
89
+ throw new Error("Push notifications module is not configured.");
90
+ }
91
+ const {
92
+ orgId,
93
+ pushNotifications: {
94
+ vapidPublicKey,
95
+ appId
96
+ } = {
97
+ vapidPublicKey: undefined,
98
+ appId: undefined
99
+ }
100
+ } = config || {};
101
+ const storage = createNamespacedStorage((0, _index2.sanitizeOrgIdForCookieName)(orgId) + ".pushNotifications.");
102
+ return (0, _makeSendPushSubscriptionRequest.default)({
103
+ config: {
104
+ vapidPublicKey,
105
+ appId
106
+ },
107
+ storage: storage.persistent,
108
+ logger,
109
+ sendEdgeNetworkRequest,
110
+ consent,
111
+ eventManager,
112
+ identity,
113
+ window
114
+ });
115
+ },
116
+ optionsValidator: (0, _index.objectOf)({}).noUnknownFields()
117
+ }
118
+ }
119
+ };
120
+ };
121
+ createPushNotifications.namespace = "Push Notifications";
122
+ createPushNotifications.configValidators = (0, _index.objectOf)({
123
+ pushNotifications: (0, _index.objectOf)({
124
+ vapidPublicKey: (0, _index.string)().required(),
125
+ appId: (0, _index.string)().required(),
126
+ trackingDatasetId: (0, _index.string)().required()
127
+ }).noUnknownFields()
128
+ });
129
+ var _default = exports.default = createPushNotifications;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ exports.default = void 0;
4
+ var _createDataCollectionRequestPayload = require("../../../utils/request/createDataCollectionRequestPayload.js");
5
+ /*
6
+ Copyright 2025 Adobe. All rights reserved.
7
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License. You may obtain a copy
9
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software distributed under
12
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
13
+ OF ANY KIND, either express or implied. See the License for the specific language
14
+ governing permissions and limitations under the License.
15
+ */
16
+ /** @import { EventManager } from "../../../core/types.js" */
17
+ /** @import { DataCollectionRequestPayload } from "../../../utils/request/types.js" */
18
+ /**
19
+ * Creates a data collection request payload for sending push subscription details to Adobe Experience Platform.
20
+ *
21
+ * This function constructs an event containing push notification subscription information,
22
+ * including the subscription details, platform information, and identity data. The event
23
+ * is then packaged into a data collection request payload for transmission to the edge network.
24
+ *
25
+ * @async
26
+ * @function
27
+ *
28
+ * @param {Object} options
29
+ * @param {string} options.ecid
30
+ * @param {EventManager} options.eventManager
31
+ * @param {string} options.serializedPushSubscriptionDetails
32
+ * @param {string} options.appId
33
+ *
34
+ * @returns {Promise<DataCollectionRequestPayload>}
35
+ */
36
+ var _default = async ({
37
+ ecid,
38
+ eventManager,
39
+ serializedPushSubscriptionDetails,
40
+ appId
41
+ }) => {
42
+ const event = eventManager.createEvent();
43
+ event.setUserData({
44
+ pushNotificationDetails: [{
45
+ appID: appId,
46
+ token: serializedPushSubscriptionDetails,
47
+ platform: "web",
48
+ denylisted: false,
49
+ identity: {
50
+ namespace: {
51
+ code: "ECID"
52
+ },
53
+ id: ecid
54
+ }
55
+ }]
56
+ });
57
+ event.finalize();
58
+ const payload = (0, _createDataCollectionRequestPayload.default)();
59
+ payload.addEvent(event);
60
+ return payload;
61
+ };
62
+ exports.default = _default;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ exports.default = void 0;
4
+ var _index = require("../../../utils/request/index.js");
5
+ /*
6
+ Copyright 2023 Adobe. All rights reserved.
7
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License. You may obtain a copy
9
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software distributed under
12
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
13
+ OF ANY KIND, either express or implied. See the License for the specific language
14
+ governing permissions and limitations under the License.
15
+ */
16
+ /** @import { DataCollectionRequestPayload, Request } from '../../../utils/request/types.js' */
17
+ /**
18
+ * @function
19
+ *
20
+ * @param {{ payload: DataCollectionRequestPayload }} options
21
+ *
22
+ * @returns {Request}
23
+ */
24
+ var _default = ({
25
+ payload
26
+ }) => (0, _index.createRequest)({
27
+ payload,
28
+ getAction() {
29
+ return "interact";
30
+ },
31
+ getUseSendBeacon() {
32
+ return false;
33
+ }
34
+ });
35
+ exports.default = _default;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ exports.default = void 0;
4
+ var _index = require("../../../utils/index.js");
5
+ var _getPushSubscriptionDetails = require("../helpers/getPushSubscriptionDetails.js");
6
+ var _createSendPushSubscriptionRequest = require("./createSendPushSubscriptionRequest.js");
7
+ var _createSendPushSubscriptionPayload = require("./createSendPushSubscriptionPayload.js");
8
+ var _saveToIndexedDb = require("../helpers/saveToIndexedDb.js");
9
+ /*
10
+ Copyright 2025 Adobe. All rights reserved.
11
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
12
+ you may not use this file except in compliance with the License. You may obtain a copy
13
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
14
+
15
+ Unless required by applicable law or agreed to in writing, software distributed under
16
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
17
+ OF ANY KIND, either express or implied. See the License for the specific language
18
+ governing permissions and limitations under the License.
19
+ */
20
+
21
+ /** @import { Storage } from '../../../utils/types.js' */
22
+ /** @import { EventManager, Logger } from '../../../core/types.js' */
23
+ /** @import { IdentityManager } from '../../../core/identity/types.js' */
24
+ /** @import { ConsentManager } from '../../../core/consent/types.js' */
25
+ /** @import { EdgeRequestExecutor } from '../../../core/edgeNetwork/types.js' */
26
+
27
+ const SUBSCRIPTION_DETAILS = "subscriptionDetails";
28
+
29
+ /**
30
+ * Retrieves and returns push subscription details with sorted object keys.
31
+ *
32
+ * This function gets the push subscription details using the provided VAPID public key
33
+ * and returns the details with all object keys sorted recursively for consistent output.
34
+ *
35
+ * @async
36
+ * @function
37
+ *
38
+ * @param {Object} options
39
+ * @param {{vapidPublicKey: string, appId: string}} options.config
40
+ * @param {Storage} options.storage
41
+ * @param {Logger} options.logger
42
+ * @param {EventManager} options.eventManager
43
+ * @param {IdentityManager} options.identity
44
+ * @param {EdgeRequestExecutor} options.sendEdgeNetworkRequest
45
+ * @param {ConsentManager} options.consent
46
+ * @param {Window} options.window
47
+ *
48
+ * @returns {Promise<void>}
49
+ */
50
+ var _default = async ({
51
+ config: {
52
+ vapidPublicKey,
53
+ appId
54
+ },
55
+ storage,
56
+ logger,
57
+ sendEdgeNetworkRequest,
58
+ consent,
59
+ eventManager,
60
+ identity,
61
+ window
62
+ }) => {
63
+ await identity.awaitIdentity();
64
+ const ecid = identity.getEcidFromCookie();
65
+ const pushSubscriptionDetails = await (0, _getPushSubscriptionDetails.default)({
66
+ vapidPublicKey,
67
+ window
68
+ });
69
+ const serializedPushSubscriptionDetails = JSON.stringify((0, _index.sortObjectKeysRecursively)(pushSubscriptionDetails));
70
+ const cacheValue = "" + ecid + serializedPushSubscriptionDetails;
71
+ if (cacheValue === storage.getItem(SUBSCRIPTION_DETAILS)) {
72
+ logger.info("Subscription details have not changed. Not sending to the server.");
73
+ return;
74
+ }
75
+ storage.setItem(SUBSCRIPTION_DETAILS, cacheValue);
76
+ const payload = await (0, _createSendPushSubscriptionPayload.default)({
77
+ eventManager,
78
+ ecid,
79
+ serializedPushSubscriptionDetails,
80
+ appId
81
+ });
82
+ const request = (0, _createSendPushSubscriptionRequest.default)({
83
+ payload
84
+ });
85
+ await consent.awaitConsent();
86
+ await sendEdgeNetworkRequest({
87
+ request
88
+ });
89
+ await (0, _saveToIndexedDb.default)({
90
+ ecid
91
+ }, logger);
92
+ };
93
+ exports.default = _default;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+
3
+ exports.default = void 0;
4
+ var _readFromIndexedDb = require("../helpers/readFromIndexedDb.js");
5
+ var _uuid = require("../../../utils/uuid.js");
6
+ /*
7
+ Copyright 2025 Adobe. All rights reserved.
8
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
9
+ you may not use this file except in compliance with the License. You may obtain a copy
10
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software distributed under
13
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
14
+ OF ANY KIND, either express or implied. See the License for the specific language
15
+ governing permissions and limitations under the License.
16
+ */
17
+ /* eslint-disable no-underscore-dangle */
18
+ /** @import { ServiceWorkerLogger } from '../types.js' */
19
+ /** @import { TrackingDataPayload } from '../types.js' */
20
+ /**
21
+ * @async
22
+ * @function
23
+ * @param {Object} options
24
+ * @param {Object} options.xdm
25
+ * @param {string} [options.actionLabel]
26
+ * @param {number} [options.applicationLaunches=0]
27
+ * @param {Object} utils
28
+ * @param {ServiceWorkerLogger} utils.logger
29
+ * @param {(url: string, options: object) => Promise<Response>} utils.fetch
30
+ *
31
+ * @returns {Promise<boolean>}
32
+ * @throws {Error}
33
+ */
34
+ var _default = async ({
35
+ xdm,
36
+ actionLabel,
37
+ applicationLaunches = 0
38
+ }, {
39
+ logger,
40
+ fetch
41
+ }) => {
42
+ const configData = await (0, _readFromIndexedDb.default)(logger);
43
+ const {
44
+ browser,
45
+ ecid,
46
+ edgeDomain,
47
+ edgeBasePath,
48
+ datastreamId,
49
+ datasetId
50
+ } = configData || {};
51
+ let customActionData = {};
52
+ if (actionLabel) {
53
+ customActionData = {
54
+ customAction: {
55
+ actionID: actionLabel
56
+ }
57
+ };
58
+ }
59
+ const requiredFields = [{
60
+ name: "browser",
61
+ errorField: "Browser"
62
+ }, {
63
+ name: "ecid",
64
+ errorField: "ECID"
65
+ }, {
66
+ name: "edgeDomain",
67
+ errorField: "Edge domain"
68
+ }, {
69
+ name: "edgeBasePath",
70
+ errorField: "Edge base path"
71
+ }, {
72
+ name: "datastreamId",
73
+ errorField: "Datastream ID"
74
+ }, {
75
+ name: "datasetId",
76
+ errorField: "Dataset ID"
77
+ }];
78
+ try {
79
+ for (const field of requiredFields) {
80
+ if (!configData[field.name]) {
81
+ throw new Error("Cannot send tracking call. " + field.errorField + " is missing.");
82
+ }
83
+ }
84
+ const url = "https://" + edgeDomain + "/" + edgeBasePath + "/v1/interact?configId=" + datastreamId;
85
+
86
+ /** @type {TrackingDataPayload} */
87
+ const payload = {
88
+ events: [{
89
+ xdm: {
90
+ identityMap: {
91
+ ECID: [{
92
+ id: ecid
93
+ }]
94
+ },
95
+ timestamp: new Date().toISOString(),
96
+ pushNotificationTracking: {
97
+ ...customActionData,
98
+ pushProviderMessageID: (0, _uuid.default)(),
99
+ pushProvider: browser.toLowerCase()
100
+ },
101
+ application: {
102
+ launches: {
103
+ value: applicationLaunches
104
+ }
105
+ },
106
+ eventType: actionLabel ? "pushTracking.customAction" : "pushTracking.applicationOpened",
107
+ _experience: {
108
+ ...xdm._experience,
109
+ customerJourneyManagement: {
110
+ ...xdm._experience.customerJourneyManagement,
111
+ pushChannelContext: {
112
+ platform: "web"
113
+ },
114
+ messageProfile: {
115
+ channel: {
116
+ _id: "https://ns.adobe.com/xdm/channels/push"
117
+ }
118
+ }
119
+ }
120
+ }
121
+ },
122
+ meta: {
123
+ collect: {
124
+ datasetId
125
+ }
126
+ }
127
+ }]
128
+ };
129
+ const response = await fetch(url, {
130
+ method: "POST",
131
+ headers: {
132
+ "content-type": "text/plain; charset=UTF-8"
133
+ },
134
+ body: JSON.stringify(payload)
135
+ });
136
+ if (!response.ok) {
137
+ logger.error("Tracking call failed: ", response.status, response.statusText);
138
+ return false;
139
+ }
140
+ return true;
141
+ } catch (error) {
142
+ logger.error("Error sending tracking call:", error);
143
+ return false;
144
+ }
145
+ };
146
+ exports.default = _default;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ var _serviceWorkerNotificationClickListener = require("./helpers/serviceWorkerNotificationClickListener.js");
4
+ var _serviceWorkerPushListener = require("./helpers/serviceWorkerPushListener.js");
5
+ var _makeSendServiceWorkerTrackingData = require("./request/makeSendServiceWorkerTrackingData.js");
6
+ /*
7
+ Copyright 2025 Adobe. All rights reserved.
8
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
9
+ you may not use this file except in compliance with the License. You may obtain a copy
10
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software distributed under
13
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
14
+ OF ANY KIND, either express or implied. See the License for the specific language
15
+ governing permissions and limitations under the License.
16
+ */
17
+
18
+ /** @import { ServiceWorkerLogger } from './types.js' */
19
+
20
+ /* eslint-disable no-console */
21
+ /* eslint-disable no-underscore-dangle */
22
+
23
+ // @ts-check
24
+ /// <reference lib="webworker" />
25
+
26
+ /** @type {ServiceWorkerGlobalScope} */
27
+ // @ts-ignore
28
+ const sw = self;
29
+
30
+ /**
31
+ * @type {ServiceWorkerLogger}
32
+ */
33
+ const logger = {
34
+ namespace: "[alloy][pushNotificationWorker]",
35
+ info: (...args) => console.log(logger.namespace, ...args),
36
+ error: (...args) => console.error(logger.namespace, ...args)
37
+ };
38
+
39
+ /**
40
+ * @listens install
41
+ */
42
+ sw.addEventListener("install", () => {
43
+ sw.skipWaiting();
44
+ });
45
+
46
+ /**
47
+ * @listens activate
48
+ * @param {ExtendableEvent} event
49
+ */
50
+ sw.addEventListener("activate", event => {
51
+ event.waitUntil(sw.clients.claim());
52
+ });
53
+
54
+ /**
55
+ * @listens push
56
+ * @param {PushEvent} event
57
+ * @returns {Promise<void>}
58
+ */
59
+ sw.addEventListener("push", event => (0, _serviceWorkerPushListener.default)({
60
+ event,
61
+ logger,
62
+ sw
63
+ }));
64
+
65
+ /**
66
+ * @listens notificationclick
67
+ * @param {NotificationEvent} event
68
+ */
69
+ sw.addEventListener("notificationclick", event => (0, _serviceWorkerNotificationClickListener.default)({
70
+ event,
71
+ sw,
72
+ logger,
73
+ fetch
74
+ }));
75
+
76
+ /**
77
+ * @listens notificationclose
78
+ * @param {NotificationEvent} event
79
+ */
80
+ sw.addEventListener("notificationclose", event => {
81
+ const data = event.notification.data;
82
+ (0, _makeSendServiceWorkerTrackingData.default)({
83
+ xdm: data._xdm.mixins,
84
+ actionLabel: "Dismiss"
85
+ }, {
86
+ logger,
87
+ fetch
88
+ }).catch(error => {
89
+ logger.error("Failed to send tracking call:", error);
90
+ });
91
+ });
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ exports.Types = void 0;
4
+ /** @import { Identity } from '../../utils/request/types.js' */
5
+
6
+ /**
7
+ * @typedef {Object} PushSubscription
8
+ * @property {string} endpoint - The push service endpoint URL
9
+ * @property {Object} keys - The subscription keys object
10
+ * @property {string|null} keys.p256dh - The P-256 ECDH public key as an ArrayBuffer, or null if not available
11
+ * @property {string|null} keys.auth - The authentication secret as an ArrayBuffer, or null if not available
12
+ */
13
+
14
+ /**
15
+ * @typedef {Object} CustomerJourneyManagement
16
+ * @property {Object} messageExecution
17
+ * @property {string} messageExecution.messageExecutionID
18
+ * @property {string} messageExecution.messageID
19
+ * @property {string} messageExecution.messageType
20
+ * @property {string} messageExecution.campaignID
21
+ * @property {string} messageExecution.campaignVersionID
22
+ * @property {string} messageExecution.batchInstanceID
23
+ * @property {Object} [pushChannelContext]
24
+ * @property {"web"} [pushChannelContext.platform]
25
+ * @property {Object} [messageProfile]
26
+ * @property {Object} [messageProfile.channel]
27
+ * @property {string} [messageProfile.channel._id]
28
+ */
29
+
30
+ /**
31
+ * @typedef {Object} Decisioning
32
+ * @property {Object[]} propositions
33
+ * @property {Object} propositions[].scopeDetails
34
+ * @property {string} propositions[].scopeDetails.correlationID
35
+ */
36
+
37
+ /**
38
+ * @typedef {Object} XdmTrackingContext
39
+ * @property {Object} _experience
40
+ * @property {CustomerJourneyManagement} _experience.customerJourneyManagement
41
+ * @property {Decisioning} _experience.decisioning
42
+ */
43
+
44
+ /**
45
+ * @typedef {Object} PushNotificationData
46
+ * @property {Object} web
47
+ * @property {string} web.title
48
+ * @property {string} web.body
49
+ * @property {string|null} web.media
50
+ * @property {Object} web.interaction
51
+ * @property {string} web.interaction.type
52
+ * @property {string|null} web.interaction.uri
53
+ * @property {Object} web.actions
54
+ * @property {Object[]} web.actions.buttons
55
+ * @property {string} web.actions.buttons[].label
56
+ * @property {string} web.actions.buttons[].type
57
+ * @property {string} web.actions.buttons[].uri
58
+ * @property {string} web.priority
59
+ * @property {Object} web._xdm
60
+ * @property {XdmTrackingContext} web._xdm.mixins
61
+ */
62
+
63
+ /**
64
+ * @typedef {Object} TrackingDataPayload
65
+ * @property {Object[]} events
66
+ * @property {Object} events[].xdm
67
+ * @property {Object} events[].xdm.identityMap
68
+ * @property {Object[]} events[].xdm.identityMap.ECID
69
+ * @property {string} events[].xdm.identityMap.ECID[].id
70
+ * @property {string} events[].xdm.timestamp
71
+ * @property {Object} events[].xdm.pushNotificationTracking
72
+ * @property {string} events[].xdm.pushNotificationTracking.pushProviderMessageID
73
+ * @property {string} events[].xdm.pushNotificationTracking.pushProvider
74
+ * @property {Object} [events[].xdm.pushNotificationTracking.customAction]
75
+ * @property {string} [events[].xdm.pushNotificationTracking.customAction.actionID]
76
+ * @property {Object} events[].xdm.application
77
+ * @property {Object} events[].xdm.application.launches
78
+ * @property {number} events[].xdm.application.launches.value
79
+ * @property {string} events[].xdm.eventType
80
+ * @property {Object} events[].xdm._experience
81
+ * @property {CustomerJourneyManagement} events[].xdm._experience.customerJourneyManagement
82
+ * @property {Decisioning} events[].xdm._experience.decisioning
83
+ * @property {Object} events[].meta
84
+ * @property {Object} events[].meta.collect
85
+ * @property {string} events[].meta.collect.datasetId
86
+ */
87
+
88
+ /**
89
+ * @typedef {Object} ServiceWorkerLogger
90
+ * @property {string} namespace
91
+ * @property {(...args: any[]) => void} info
92
+ * @property {(...args: any[]) => void} error
93
+ */
94
+
95
+ const Types = exports.Types = {};
@@ -14,4 +14,4 @@ governing permissions and limitations under the License.
14
14
  */
15
15
  // The __VERSION__ keyword will be replace at alloy build time with the package.json version.
16
16
  // see babel-plugin-version
17
- var _default = exports.default = "2.29.0-beta.5";
17
+ var _default = exports.default = "2.30.0-beta.0";
@@ -42,6 +42,12 @@ Object.defineProperty(exports, "personalization", {
42
42
  return _index6.default;
43
43
  }
44
44
  });
45
+ Object.defineProperty(exports, "pushNotifications", {
46
+ enumerable: true,
47
+ get: function () {
48
+ return _index0.default;
49
+ }
50
+ });
45
51
  Object.defineProperty(exports, "rulesEngine", {
46
52
  enumerable: true,
47
53
  get: function () {
@@ -62,4 +68,5 @@ var _index5 = require("../components/MediaAnalyticsBridge/index.js");
62
68
  var _index6 = require("../components/Personalization/index.js");
63
69
  var _index7 = require("../components/RulesEngine/index.js");
64
70
  var _index8 = require("../components/StreamingMedia/index.js");
65
- var _index9 = require("../components/Advertising/index.js");
71
+ var _index9 = require("../components/Advertising/index.js");
72
+ var _index0 = require("../components/PushNotifications/index.js");