react-onesignal 2.0.4 → 3.0.0-beta.2

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/index.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  const ONESIGNAL_SDK_ID = 'onesignal-sdk';
2
- const ONE_SIGNAL_SCRIPT_SRC = 'https://cdn.onesignal.com/sdks/OneSignalSDK.js';
3
- const reactOneSignalFunctionQueue = [];
2
+ const ONE_SIGNAL_SCRIPT_SRC = "https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js";
4
3
 
5
4
  // true if the script is successfully loaded from CDN.
6
5
  let isOneSignalInitialized = false;
@@ -9,94 +8,119 @@ let isOneSignalInitialized = false;
9
8
  // OneSignal#init.
10
9
  let isOneSignalScriptFailed = false;
11
10
 
12
- const doesOneSignalExist = () => {
13
- if (window["OneSignal"]) {
14
- return true;
11
+ window.OneSignalDeferred = window.OneSignalDeferred || [];
12
+
13
+ addSDKScript();
14
+
15
+ declare global {
16
+ interface Window {
17
+ OneSignalDeferred?: OneSignalDeferredLoadedCallback[];
18
+ OneSignal?: IOneSignalOneSignal;
19
+ safari?: {
20
+ pushNotification: any;
21
+ };
15
22
  }
16
- return false;
17
23
  }
18
24
 
19
- const handleOnLoad = (resolve: () => void, options: IInitObject) => {
20
- isOneSignalInitialized = true;
25
+ /* H E L P E R S */
21
26
 
22
- // OneSignal is assumed to be loaded correctly because this method
23
- // is called after the script is successfully loaded by CDN, but
24
- // just in case.
25
- window["OneSignal"] = window["OneSignal"] || []
27
+ function handleOnError() {
28
+ isOneSignalScriptFailed = true;
29
+ }
26
30
 
27
- window["OneSignal"].push(() => {
28
- window["OneSignal"].init(options);
29
- });
31
+ function addSDKScript() {
32
+ const script = document.createElement('script');
33
+ script.id = ONESIGNAL_SDK_ID;
34
+ script.defer = true;
35
+ script.src = ONE_SIGNAL_SCRIPT_SRC;
30
36
 
31
- window["OneSignal"].push(() => {
32
- processQueuedOneSignalFunctions();
33
- resolve();
34
- });
37
+ // Always resolve whether or not the script is successfully initialized.
38
+ // This is important for users who may block cdn.onesignal.com w/ adblock.
39
+ script.onerror = () => {
40
+ handleOnError();
41
+ }
42
+
43
+ document.head.appendChild(script);
35
44
  }
36
45
 
37
- const handleOnError = (resolve: () => void) => {
38
- isOneSignalScriptFailed = true;
39
- // Ensure that any unresolved functions are cleared from the queue,
40
- // even in the event of a CDN load failure.
41
- processQueuedOneSignalFunctions();
42
- resolve();
46
+ /**
47
+ * The following code is copied directly from the native SDK source file BrowserSupportsPush.ts
48
+ * S T A R T
49
+ */
50
+
51
+ // Checks if the browser supports push notifications by checking if specific
52
+ // classes and properties on them exist
53
+ function isPushNotificationsSupported() {
54
+ return supportsVapidPush() || supportsSafariPush();
55
+ }
56
+
57
+ function isMacOSSafariInIframe(): boolean {
58
+ // Fallback detection for Safari on macOS in an iframe context
59
+ return window.top !== window && // isContextIframe
60
+ navigator.vendor === "Apple Computer, Inc." && // isSafari
61
+ navigator.platform === "MacIntel"; // isMacOS
43
62
  }
44
63
 
45
- const processQueuedOneSignalFunctions = () => {
46
- reactOneSignalFunctionQueue.forEach(element => {
47
- const { name, args, promiseResolver } = element;
64
+ function supportsSafariPush(): boolean {
65
+ return (window.safari && typeof window.safari.pushNotification !== "undefined") ||
66
+ isMacOSSafariInIframe();
67
+ }
48
68
 
49
- if (!!promiseResolver) {
50
- OneSignalReact[name](...args).then(result => {
51
- promiseResolver(result);
52
- });
53
- } else {
54
- OneSignalReact[name](...args);
55
- }
56
- });
69
+ // Does the browser support the standard Push API
70
+ function supportsVapidPush(): boolean {
71
+ return typeof PushSubscriptionOptions !== "undefined" &&
72
+ PushSubscriptionOptions.prototype.hasOwnProperty("applicationServerKey");
73
+ }
74
+ /* E N D */
75
+
76
+ /**
77
+ * This is a SPECIAL FUNCTION
78
+ * It is a hardcoded implementation copied from the upstream/native WebSDK since we want to return a boolean immediately
79
+ * Natively, this is done via the shimloading mechanism (i.e. if the SDK loads, push is supported)
80
+ * @PublicApi
81
+ */
82
+ const isPushSupported = (): boolean => {
83
+ return isPushNotificationsSupported();
57
84
  }
58
85
 
59
- const init = (options: IInitObject) => new Promise<void>(resolve => {
86
+ /**
87
+ * @PublicApi
88
+ */
89
+ const init = (options: IInitObject): Promise<void> => {
60
90
  if (isOneSignalInitialized) {
61
- resolve();
62
- return;
91
+ return Promise.reject(`OneSignal is already initialized.`);
63
92
  }
64
93
 
65
94
  if (!options || !options.appId) {
66
95
  throw new Error('You need to provide your OneSignal appId.');
67
96
  }
68
- if (!document) {
69
- resolve();
70
- return;
71
- }
72
-
73
- const script = document.createElement('script');
74
- script.id = ONESIGNAL_SDK_ID;
75
- script.src = ONE_SIGNAL_SCRIPT_SRC;
76
- script.async = true;
77
97
 
78
- script.onload = () => {
79
- handleOnLoad(resolve, options);
80
- };
81
-
82
- // Always resolve whether or not the script is successfully initialized.
83
- // This is important for users who may block cdn.onesignal.com w/ adblock.
84
- script.onerror = () => {
85
- handleOnError(resolve);
98
+ if (!document) {
99
+ return Promise.reject(`Document is not defined.`);
86
100
  }
87
101
 
88
- document.head.appendChild(script);
89
- });
102
+ return new Promise<void>((resolve) => {
103
+ window.OneSignalDeferred?.push((OneSignal) => {
104
+ OneSignal.init(options).then(() => {
105
+ isOneSignalInitialized = true;
106
+ resolve();
107
+ });
108
+ });
109
+ });
110
+ };
90
111
 
91
112
  type Action<T> = (item: T) => void;
92
113
  interface AutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; slidedownPromptOptions?: IOneSignalAutoPromptOptions; }
93
- interface RegisterOptions { modalPrompt?: boolean; httpPermissionRequest?: boolean; slidedown?: boolean; autoAccept?: boolean }
94
- interface SetSMSOptions { identifierAuthHash?: string; }
95
- interface SetEmailOptions { identifierAuthHash?: string; emailAuthHash?: string; }
96
- interface TagsObject<T> { [key: string]: T; }
97
114
  interface IOneSignalAutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; isInUpdateMode?: boolean; categoryOptions?: IOneSignalCategories; }
98
115
  interface IOneSignalCategories { positiveUpdateButton: string; negativeUpdateButton: string; savingButtonText: string; errorButtonText: string; updateMessage: string; tags: IOneSignalTagCategory[]; }
99
116
  interface IOneSignalTagCategory { tag: string; label: string; checked?: boolean; }
117
+ type PushSubscriptionNamespaceProperties = { id: string | null | undefined; token: string | null | undefined; optedIn: boolean; };
118
+ type SubscriptionChangeEvent = { previous: PushSubscriptionNamespaceProperties; current: PushSubscriptionNamespaceProperties; };
119
+ type NotificationEventName = 'click' | 'willDisplay' | 'dismiss' | 'permissionChange' | 'permissionPromptDisplay';
120
+ interface NotificationButtonData { action?: string; title?: string; icon?: string; url?: string; }
121
+ interface StructuredNotification { id: string; content: string; heading?: string; url?: string; data?: object; rr?: string; icon?: string; image?: string; tag?: string; badge?: string; vibrate?: string; buttons?: NotificationButtonData[]; }
122
+ type SlidedownEventName = 'slidedownShown';
123
+ type OneSignalDeferredLoadedCallback = (onesignal: IOneSignalOneSignal) => void;
100
124
 
101
125
  interface IInitObject {
102
126
  appId: string;
@@ -119,1052 +143,530 @@ interface IInitObject {
119
143
  [key: string]: any;
120
144
  }
121
145
 
122
- interface IOneSignal {
123
- init(options: IInitObject): Promise<void>
124
- on(event: string, listener: (eventData?: any) => void): void
125
- off(event: string, listener: (eventData?: any) => void): void
126
- once(event: string, listener: (eventData?: any) => void): void
127
- isPushNotificationsEnabled(callback?: Action<boolean>): Promise<boolean>
128
- showHttpPrompt(options?: AutoPromptOptions): Promise<void>
129
- registerForPushNotifications(options?: RegisterOptions): Promise<void>
130
- setDefaultNotificationUrl(url: string): Promise<void>
131
- setDefaultTitle(title: string): Promise<void>
132
- getTags(callback?: Action<any>): Promise<void>
133
- sendTag(key: string, value: any, callback?: Action<Object>): Promise<Object | null>
134
- sendTags(tags: TagsObject<any>, callback?: Action<Object>): Promise<Object | null>
135
- deleteTag(tag: string): Promise<Array<string>>
136
- deleteTags(tags: Array<string>, callback?: Action<Array<string>>): Promise<Array<string>>
137
- addListenerForNotificationOpened(callback?: Action<Notification>): Promise<void>
138
- setSubscription(newSubscription: boolean): Promise<void>
139
- showHttpPermissionRequest(options?: AutoPromptOptions): Promise<any>
140
- showNativePrompt(): Promise<void>
141
- showSlidedownPrompt(options?: AutoPromptOptions): Promise<void>
142
- showCategorySlidedown(options?: AutoPromptOptions): Promise<void>
143
- showSmsSlidedown(options?: AutoPromptOptions): Promise<void>
144
- showEmailSlidedown(options?: AutoPromptOptions): Promise<void>
145
- showSmsAndEmailSlidedown(options?: AutoPromptOptions): Promise<void>
146
- getNotificationPermission(onComplete?: Action<NotificationPermission>): Promise<NotificationPermission>
147
- getUserId(callback?: Action<string | undefined | null>): Promise<string | undefined | null>
148
- getSubscription(callback?: Action<boolean>): Promise<boolean>
149
- setEmail(email: string, options?: SetEmailOptions): Promise<string|null>
150
- setSMSNumber(smsNumber: string, options?: SetSMSOptions): Promise<string | null>
151
- logoutEmail(): Promise<void>
152
- logoutSMS(): Promise<void>
153
- setExternalUserId(externalUserId: string | undefined | null, authHash?: string): Promise<void>
154
- removeExternalUserId(): Promise<void>
155
- getExternalUserId(): Promise<string | undefined | null>
156
- provideUserConsent(consent: boolean): Promise<void>
157
- getEmailId(callback?: Action<string | undefined>): Promise<string | null | undefined>
158
- getSMSId(callback?: Action<string | undefined>): Promise<string | null | undefined>
159
- sendOutcome(outcomeName: string, outcomeWeight?: number | undefined): Promise<void>
160
- [index: string]: Function;
146
+ interface IOneSignalOneSignal {
147
+ Slidedown: IOneSignalSlidedown;
148
+ Notifications: IOneSignalNotifications;
149
+ Session: IOneSignalSession;
150
+ User: IOneSignalUser;
151
+ Debug: IOneSignalDebug;
152
+ login(externalId: string, jwtToken?: string): Promise<void>;
153
+ logout(): Promise<void>;
154
+ init(options: IInitObject): Promise<void>;
155
+ setConsentGiven(consent: boolean): Promise<void>;
156
+ setConsentRequired(requiresConsent: boolean): Promise<void>;
157
+ }
158
+ interface IOneSignalNotifications {
159
+ setDefaultUrl(url: string): Promise<void>;
160
+ setDefaultTitle(title: string): Promise<void>;
161
+ isPushSupported(): boolean;
162
+ getPermissionStatus(onComplete: Action<NotificationPermission>): Promise<NotificationPermission>;
163
+ requestPermission(): Promise<void>;
164
+ addEventListener(event: NotificationEventName, listener: (obj: any) => void): void;
165
+ removeEventListener(event: NotificationEventName, listener: (obj: any) => void): void;
166
+ }
167
+ interface IOneSignalSlidedown {
168
+ promptPush(options?: AutoPromptOptions): Promise<void>;
169
+ promptPushCategories(options?: AutoPromptOptions): Promise<void>;
170
+ promptSms(options?: AutoPromptOptions): Promise<void>;
171
+ promptEmail(options?: AutoPromptOptions): Promise<void>;
172
+ promptSmsAndEmail(options?: AutoPromptOptions): Promise<void>;
173
+ addEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void;
174
+ removeEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void;
175
+ }
176
+ interface IOneSignalDebug {
177
+ setLogLevel(logLevel: string): void;
178
+ }
179
+ interface IOneSignalSession {
180
+ sendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void>;
181
+ sendUniqueOutcome(outcomeName: string): Promise<void>;
182
+ }
183
+ interface IOneSignalUser {
184
+ PushSubscription: IOneSignalPushSubscription;
185
+ addAlias(label: string, id: string): void;
186
+ addAliases(aliases: { [key: string]: string }): void;
187
+ removeAlias(label: string): void;
188
+ removeAliases(labels: string[]): void;
189
+ addEmail(email: string): void;
190
+ removeEmail(email: string): void;
191
+ addSms(smsNumber: string): void;
192
+ removeSms(smsNumber: string): void;
193
+ }
194
+ interface IOneSignalPushSubscription {
195
+ id: string | null | undefined;
196
+ token: string | null | undefined;
197
+ optedIn: boolean | undefined;
198
+ optIn(): Promise<void>;
199
+ optOut(): Promise<void>;
200
+ addEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void;
201
+ removeEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void;
161
202
  }
162
203
 
204
+ function oneSignalLogin(externalId: string, jwtToken?: string): Promise<void> {
205
+ return new Promise((resolve, reject) => {
206
+ if (isOneSignalScriptFailed) {
207
+ reject();
208
+ }
163
209
 
210
+ try {
211
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
212
+ OneSignal.login(externalId, jwtToken)
213
+ .then((value: any) => resolve(value))
214
+ .catch((error: any) => reject(error));
215
+ });
216
+ } catch (error) {
217
+ reject(error);
218
+ }
219
+ });
220
+ }
221
+
222
+ function oneSignalLogout(): Promise<void> {
223
+ return new Promise((resolve, reject) => {
224
+ if (isOneSignalScriptFailed) {
225
+ reject();
226
+ }
164
227
 
165
- function on(event: string, listener: (eventData?: any) => void): void {
166
- if (!doesOneSignalExist()) {
167
- reactOneSignalFunctionQueue.push({
168
- name: 'on',
169
- args: arguments,
228
+ try {
229
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
230
+ OneSignal.logout()
231
+ .then((value: any) => resolve(value))
232
+ .catch((error: any) => reject(error));
170
233
  });
171
- return;
234
+ } catch (error) {
235
+ reject(error);
172
236
  }
237
+ });
238
+ }
173
239
 
174
- window["OneSignal"].push(() => {
175
- window["OneSignal"].on(event, listener)
176
- });
177
- }
240
+ function oneSignalSetConsentGiven(consent: boolean): Promise<void> {
241
+ return new Promise((resolve, reject) => {
242
+ if (isOneSignalScriptFailed) {
243
+ reject();
244
+ }
178
245
 
179
- function off(event: string, listener: (eventData?: any) => void): void {
180
- if (!doesOneSignalExist()) {
181
- reactOneSignalFunctionQueue.push({
182
- name: 'off',
183
- args: arguments,
246
+ try {
247
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
248
+ OneSignal.setConsentGiven(consent)
249
+ .then((value: any) => resolve(value))
250
+ .catch((error: any) => reject(error));
184
251
  });
185
- return;
252
+ } catch (error) {
253
+ reject(error);
186
254
  }
255
+ });
256
+ }
187
257
 
188
- window["OneSignal"].push(() => {
189
- window["OneSignal"].off(event, listener)
190
- });
191
- }
258
+ function oneSignalSetConsentRequired(requiresConsent: boolean): Promise<void> {
259
+ return new Promise((resolve, reject) => {
260
+ if (isOneSignalScriptFailed) {
261
+ reject();
262
+ }
192
263
 
193
- function once(event: string, listener: (eventData?: any) => void): void {
194
- if (!doesOneSignalExist()) {
195
- reactOneSignalFunctionQueue.push({
196
- name: 'once',
197
- args: arguments,
264
+ try {
265
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
266
+ OneSignal.setConsentRequired(requiresConsent)
267
+ .then((value: any) => resolve(value))
268
+ .catch((error: any) => reject(error));
198
269
  });
199
- return;
270
+ } catch (error) {
271
+ reject(error);
200
272
  }
273
+ });
274
+ }
201
275
 
202
- window["OneSignal"].push(() => {
203
- window["OneSignal"].once(event, listener)
204
- });
205
- }
276
+ function slidedownPromptPush(options?: AutoPromptOptions): Promise<void> {
277
+ return new Promise((resolve, reject) => {
278
+ if (isOneSignalScriptFailed) {
279
+ reject();
280
+ }
206
281
 
207
- function isPushNotificationsEnabled(callback?: Action<boolean>): Promise<boolean> {
208
- return new Promise((resolve, reject) => {
209
- if (isOneSignalScriptFailed) {
210
- resolve();
211
- return;
212
- }
213
-
214
- if (!doesOneSignalExist()) {
215
- reactOneSignalFunctionQueue.push({
216
- name: 'isPushNotificationsEnabled',
217
- args: arguments,
218
- promiseResolver: resolve,
219
- });
220
- return;
221
- }
222
-
223
- try {
224
- window["OneSignal"].push(() => {
225
- window["OneSignal"].isPushNotificationsEnabled(callback)
226
- .then((value: any) => resolve(value))
227
- .catch((error: any) => reject(error));
228
- });
229
- } catch (error) {
230
- reject(error);
231
- }
232
- });
233
- }
282
+ try {
283
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
284
+ OneSignal.Slidedown.promptPush(options)
285
+ .then((value: any) => resolve(value))
286
+ .catch((error: any) => reject(error));
287
+ });
288
+ } catch (error) {
289
+ reject(error);
290
+ }
291
+ });
292
+ }
234
293
 
235
- function showHttpPrompt(options?: AutoPromptOptions): Promise<void> {
236
- return new Promise((resolve, reject) => {
237
- if (isOneSignalScriptFailed) {
238
- resolve();
239
- return;
240
- }
241
-
242
- if (!doesOneSignalExist()) {
243
- reactOneSignalFunctionQueue.push({
244
- name: 'showHttpPrompt',
245
- args: arguments,
246
- promiseResolver: resolve,
247
- });
248
- return;
249
- }
250
-
251
- try {
252
- window["OneSignal"].push(() => {
253
- window["OneSignal"].showHttpPrompt(options)
254
- .then((value: any) => resolve(value))
255
- .catch((error: any) => reject(error));
256
- });
257
- } catch (error) {
258
- reject(error);
259
- }
260
- });
261
- }
294
+ function slidedownPromptPushCategories(options?: AutoPromptOptions): Promise<void> {
295
+ return new Promise((resolve, reject) => {
296
+ if (isOneSignalScriptFailed) {
297
+ reject();
298
+ }
262
299
 
263
- function registerForPushNotifications(options?: RegisterOptions): Promise<void> {
264
- return new Promise((resolve, reject) => {
265
- if (isOneSignalScriptFailed) {
266
- resolve();
267
- return;
268
- }
269
-
270
- if (!doesOneSignalExist()) {
271
- reactOneSignalFunctionQueue.push({
272
- name: 'registerForPushNotifications',
273
- args: arguments,
274
- promiseResolver: resolve,
275
- });
276
- return;
277
- }
278
-
279
- try {
280
- window["OneSignal"].push(() => {
281
- window["OneSignal"].registerForPushNotifications(options)
282
- .then((value: any) => resolve(value))
283
- .catch((error: any) => reject(error));
284
- });
285
- } catch (error) {
286
- reject(error);
287
- }
288
- });
289
- }
300
+ try {
301
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
302
+ OneSignal.Slidedown.promptPushCategories(options)
303
+ .then((value: any) => resolve(value))
304
+ .catch((error: any) => reject(error));
305
+ });
306
+ } catch (error) {
307
+ reject(error);
308
+ }
309
+ });
310
+ }
290
311
 
291
- function setDefaultNotificationUrl(url: string): Promise<void> {
292
- return new Promise((resolve, reject) => {
293
- if (isOneSignalScriptFailed) {
294
- resolve();
295
- return;
296
- }
297
-
298
- if (!doesOneSignalExist()) {
299
- reactOneSignalFunctionQueue.push({
300
- name: 'setDefaultNotificationUrl',
301
- args: arguments,
302
- promiseResolver: resolve,
303
- });
304
- return;
305
- }
306
-
307
- try {
308
- window["OneSignal"].push(() => {
309
- window["OneSignal"].setDefaultNotificationUrl(url)
310
- .then((value: any) => resolve(value))
311
- .catch((error: any) => reject(error));
312
- });
313
- } catch (error) {
314
- reject(error);
315
- }
316
- });
317
- }
312
+ function slidedownPromptSms(options?: AutoPromptOptions): Promise<void> {
313
+ return new Promise((resolve, reject) => {
314
+ if (isOneSignalScriptFailed) {
315
+ reject();
316
+ }
318
317
 
319
- function setDefaultTitle(title: string): Promise<void> {
320
- return new Promise((resolve, reject) => {
321
- if (isOneSignalScriptFailed) {
322
- resolve();
323
- return;
324
- }
325
-
326
- if (!doesOneSignalExist()) {
327
- reactOneSignalFunctionQueue.push({
328
- name: 'setDefaultTitle',
329
- args: arguments,
330
- promiseResolver: resolve,
331
- });
332
- return;
333
- }
334
-
335
- try {
336
- window["OneSignal"].push(() => {
337
- window["OneSignal"].setDefaultTitle(title)
338
- .then((value: any) => resolve(value))
339
- .catch((error: any) => reject(error));
340
- });
341
- } catch (error) {
342
- reject(error);
343
- }
344
- });
345
- }
318
+ try {
319
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
320
+ OneSignal.Slidedown.promptSms(options)
321
+ .then((value: any) => resolve(value))
322
+ .catch((error: any) => reject(error));
323
+ });
324
+ } catch (error) {
325
+ reject(error);
326
+ }
327
+ });
328
+ }
346
329
 
347
- function getTags(callback?: Action<any>): Promise<void> {
348
- return new Promise((resolve, reject) => {
349
- if (isOneSignalScriptFailed) {
350
- resolve();
351
- return;
352
- }
353
-
354
- if (!doesOneSignalExist()) {
355
- reactOneSignalFunctionQueue.push({
356
- name: 'getTags',
357
- args: arguments,
358
- promiseResolver: resolve,
359
- });
360
- return;
361
- }
362
-
363
- try {
364
- window["OneSignal"].push(() => {
365
- window["OneSignal"].getTags(callback)
366
- .then((value: any) => resolve(value))
367
- .catch((error: any) => reject(error));
368
- });
369
- } catch (error) {
370
- reject(error);
371
- }
372
- });
373
- }
330
+ function slidedownPromptEmail(options?: AutoPromptOptions): Promise<void> {
331
+ return new Promise((resolve, reject) => {
332
+ if (isOneSignalScriptFailed) {
333
+ reject();
334
+ }
374
335
 
375
- function sendTag(key: string, value: any, callback?: Action<Object>): Promise<Object | null> {
376
- return new Promise((resolve, reject) => {
377
- if (isOneSignalScriptFailed) {
378
- resolve();
379
- return;
380
- }
381
-
382
- if (!doesOneSignalExist()) {
383
- reactOneSignalFunctionQueue.push({
384
- name: 'sendTag',
385
- args: arguments,
386
- promiseResolver: resolve,
387
- });
388
- return;
389
- }
390
-
391
- try {
392
- window["OneSignal"].push(() => {
393
- window["OneSignal"].sendTag(key, value, callback)
394
- .then((value: any) => resolve(value))
395
- .catch((error: any) => reject(error));
396
- });
397
- } catch (error) {
398
- reject(error);
399
- }
400
- });
401
- }
336
+ try {
337
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
338
+ OneSignal.Slidedown.promptEmail(options)
339
+ .then((value: any) => resolve(value))
340
+ .catch((error: any) => reject(error));
341
+ });
342
+ } catch (error) {
343
+ reject(error);
344
+ }
345
+ });
346
+ }
402
347
 
403
- function sendTags(tags: TagsObject<any>, callback?: Action<Object>): Promise<Object | null> {
404
- return new Promise((resolve, reject) => {
405
- if (isOneSignalScriptFailed) {
406
- resolve();
407
- return;
408
- }
409
-
410
- if (!doesOneSignalExist()) {
411
- reactOneSignalFunctionQueue.push({
412
- name: 'sendTags',
413
- args: arguments,
414
- promiseResolver: resolve,
415
- });
416
- return;
417
- }
418
-
419
- try {
420
- window["OneSignal"].push(() => {
421
- window["OneSignal"].sendTags(tags, callback)
422
- .then((value: any) => resolve(value))
423
- .catch((error: any) => reject(error));
424
- });
425
- } catch (error) {
426
- reject(error);
427
- }
428
- });
429
- }
348
+ function slidedownPromptSmsAndEmail(options?: AutoPromptOptions): Promise<void> {
349
+ return new Promise((resolve, reject) => {
350
+ if (isOneSignalScriptFailed) {
351
+ reject();
352
+ }
430
353
 
431
- function deleteTag(tag: string): Promise<Array<string>> {
432
- return new Promise((resolve, reject) => {
433
- if (isOneSignalScriptFailed) {
434
- resolve();
435
- return;
436
- }
437
-
438
- if (!doesOneSignalExist()) {
439
- reactOneSignalFunctionQueue.push({
440
- name: 'deleteTag',
441
- args: arguments,
442
- promiseResolver: resolve,
443
- });
444
- return;
445
- }
446
-
447
- try {
448
- window["OneSignal"].push(() => {
449
- window["OneSignal"].deleteTag(tag)
450
- .then((value: any) => resolve(value))
451
- .catch((error: any) => reject(error));
452
- });
453
- } catch (error) {
454
- reject(error);
455
- }
456
- });
457
- }
354
+ try {
355
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
356
+ OneSignal.Slidedown.promptSmsAndEmail(options)
357
+ .then((value: any) => resolve(value))
358
+ .catch((error: any) => reject(error));
359
+ });
360
+ } catch (error) {
361
+ reject(error);
362
+ }
363
+ });
364
+ }
458
365
 
459
- function deleteTags(tags: Array<string>, callback?: Action<Array<string>>): Promise<Array<string>> {
460
- return new Promise((resolve, reject) => {
461
- if (isOneSignalScriptFailed) {
462
- resolve();
463
- return;
464
- }
465
-
466
- if (!doesOneSignalExist()) {
467
- reactOneSignalFunctionQueue.push({
468
- name: 'deleteTags',
469
- args: arguments,
470
- promiseResolver: resolve,
471
- });
472
- return;
473
- }
474
-
475
- try {
476
- window["OneSignal"].push(() => {
477
- window["OneSignal"].deleteTags(tags, callback)
478
- .then((value: any) => resolve(value))
479
- .catch((error: any) => reject(error));
480
- });
481
- } catch (error) {
482
- reject(error);
483
- }
484
- });
485
- }
366
+ function slidedownAddEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void {
367
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
368
+ OneSignal.Slidedown.addEventListener(event, listener)
369
+ });
370
+ }
486
371
 
487
- function addListenerForNotificationOpened(callback?: Action<Notification>): Promise<void> {
488
- return new Promise((resolve, reject) => {
489
- if (isOneSignalScriptFailed) {
490
- resolve();
491
- return;
492
- }
493
-
494
- if (!doesOneSignalExist()) {
495
- reactOneSignalFunctionQueue.push({
496
- name: 'addListenerForNotificationOpened',
497
- args: arguments,
498
- promiseResolver: resolve,
499
- });
500
- return;
501
- }
502
-
503
- try {
504
- window["OneSignal"].push(() => {
505
- window["OneSignal"].addListenerForNotificationOpened(callback)
506
- .then((value: any) => resolve(value))
507
- .catch((error: any) => reject(error));
508
- });
509
- } catch (error) {
510
- reject(error);
511
- }
512
- });
513
- }
372
+ function slidedownRemoveEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void {
373
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
374
+ OneSignal.Slidedown.removeEventListener(event, listener)
375
+ });
376
+ }
514
377
 
515
- function setSubscription(newSubscription: boolean): Promise<void> {
516
- return new Promise((resolve, reject) => {
517
- if (isOneSignalScriptFailed) {
518
- resolve();
519
- return;
520
- }
521
-
522
- if (!doesOneSignalExist()) {
523
- reactOneSignalFunctionQueue.push({
524
- name: 'setSubscription',
525
- args: arguments,
526
- promiseResolver: resolve,
527
- });
528
- return;
529
- }
530
-
531
- try {
532
- window["OneSignal"].push(() => {
533
- window["OneSignal"].setSubscription(newSubscription)
534
- .then((value: any) => resolve(value))
535
- .catch((error: any) => reject(error));
536
- });
537
- } catch (error) {
538
- reject(error);
539
- }
540
- });
541
- }
378
+ function notificationsSetDefaultUrl(url: string): Promise<void> {
379
+ return new Promise((resolve, reject) => {
380
+ if (isOneSignalScriptFailed) {
381
+ reject();
382
+ }
542
383
 
543
- function showHttpPermissionRequest(options?: AutoPromptOptions): Promise<any> {
544
- return new Promise((resolve, reject) => {
545
- if (isOneSignalScriptFailed) {
546
- resolve();
547
- return;
548
- }
549
-
550
- if (!doesOneSignalExist()) {
551
- reactOneSignalFunctionQueue.push({
552
- name: 'showHttpPermissionRequest',
553
- args: arguments,
554
- promiseResolver: resolve,
555
- });
556
- return;
557
- }
558
-
559
- try {
560
- window["OneSignal"].push(() => {
561
- window["OneSignal"].showHttpPermissionRequest(options)
562
- .then((value: any) => resolve(value))
563
- .catch((error: any) => reject(error));
564
- });
565
- } catch (error) {
566
- reject(error);
567
- }
568
- });
569
- }
384
+ try {
385
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
386
+ OneSignal.Notifications.setDefaultUrl(url)
387
+ .then((value: any) => resolve(value))
388
+ .catch((error: any) => reject(error));
389
+ });
390
+ } catch (error) {
391
+ reject(error);
392
+ }
393
+ });
394
+ }
570
395
 
571
- function showNativePrompt(): Promise<void> {
572
- return new Promise((resolve, reject) => {
573
- if (isOneSignalScriptFailed) {
574
- resolve();
575
- return;
576
- }
577
-
578
- if (!doesOneSignalExist()) {
579
- reactOneSignalFunctionQueue.push({
580
- name: 'showNativePrompt',
581
- args: arguments,
582
- promiseResolver: resolve,
583
- });
584
- return;
585
- }
586
-
587
- try {
588
- window["OneSignal"].push(() => {
589
- window["OneSignal"].showNativePrompt()
590
- .then((value: any) => resolve(value))
591
- .catch((error: any) => reject(error));
592
- });
593
- } catch (error) {
594
- reject(error);
595
- }
596
- });
597
- }
396
+ function notificationsSetDefaultTitle(title: string): Promise<void> {
397
+ return new Promise((resolve, reject) => {
398
+ if (isOneSignalScriptFailed) {
399
+ reject();
400
+ }
598
401
 
599
- function showSlidedownPrompt(options?: AutoPromptOptions): Promise<void> {
600
- return new Promise((resolve, reject) => {
601
- if (isOneSignalScriptFailed) {
602
- resolve();
603
- return;
604
- }
605
-
606
- if (!doesOneSignalExist()) {
607
- reactOneSignalFunctionQueue.push({
608
- name: 'showSlidedownPrompt',
609
- args: arguments,
610
- promiseResolver: resolve,
611
- });
612
- return;
613
- }
614
-
615
- try {
616
- window["OneSignal"].push(() => {
617
- window["OneSignal"].showSlidedownPrompt(options)
618
- .then((value: any) => resolve(value))
619
- .catch((error: any) => reject(error));
620
- });
621
- } catch (error) {
622
- reject(error);
623
- }
624
- });
625
- }
402
+ try {
403
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
404
+ OneSignal.Notifications.setDefaultTitle(title)
405
+ .then((value: any) => resolve(value))
406
+ .catch((error: any) => reject(error));
407
+ });
408
+ } catch (error) {
409
+ reject(error);
410
+ }
411
+ });
412
+ }
626
413
 
627
- function showCategorySlidedown(options?: AutoPromptOptions): Promise<void> {
628
- return new Promise((resolve, reject) => {
629
- if (isOneSignalScriptFailed) {
630
- resolve();
631
- return;
632
- }
633
-
634
- if (!doesOneSignalExist()) {
635
- reactOneSignalFunctionQueue.push({
636
- name: 'showCategorySlidedown',
637
- args: arguments,
638
- promiseResolver: resolve,
639
- });
640
- return;
641
- }
642
-
643
- try {
644
- window["OneSignal"].push(() => {
645
- window["OneSignal"].showCategorySlidedown(options)
646
- .then((value: any) => resolve(value))
647
- .catch((error: any) => reject(error));
648
- });
649
- } catch (error) {
650
- reject(error);
651
- }
652
- });
653
- }
414
+ function notificationsGetPermissionStatus(onComplete: Action<NotificationPermission>): Promise<NotificationPermission> {
415
+ return new Promise((resolve, reject) => {
416
+ if (isOneSignalScriptFailed) {
417
+ reject();
418
+ }
654
419
 
655
- function showSmsSlidedown(options?: AutoPromptOptions): Promise<void> {
656
- return new Promise((resolve, reject) => {
657
- if (isOneSignalScriptFailed) {
658
- resolve();
659
- return;
660
- }
661
-
662
- if (!doesOneSignalExist()) {
663
- reactOneSignalFunctionQueue.push({
664
- name: 'showSmsSlidedown',
665
- args: arguments,
666
- promiseResolver: resolve,
667
- });
668
- return;
669
- }
670
-
671
- try {
672
- window["OneSignal"].push(() => {
673
- window["OneSignal"].showSmsSlidedown(options)
674
- .then((value: any) => resolve(value))
675
- .catch((error: any) => reject(error));
676
- });
677
- } catch (error) {
678
- reject(error);
679
- }
680
- });
681
- }
420
+ try {
421
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
422
+ OneSignal.Notifications.getPermissionStatus(onComplete)
423
+ .then((value: any) => resolve(value))
424
+ .catch((error: any) => reject(error));
425
+ });
426
+ } catch (error) {
427
+ reject(error);
428
+ }
429
+ });
430
+ }
682
431
 
683
- function showEmailSlidedown(options?: AutoPromptOptions): Promise<void> {
684
- return new Promise((resolve, reject) => {
685
- if (isOneSignalScriptFailed) {
686
- resolve();
687
- return;
688
- }
689
-
690
- if (!doesOneSignalExist()) {
691
- reactOneSignalFunctionQueue.push({
692
- name: 'showEmailSlidedown',
693
- args: arguments,
694
- promiseResolver: resolve,
695
- });
696
- return;
697
- }
698
-
699
- try {
700
- window["OneSignal"].push(() => {
701
- window["OneSignal"].showEmailSlidedown(options)
702
- .then((value: any) => resolve(value))
703
- .catch((error: any) => reject(error));
704
- });
705
- } catch (error) {
706
- reject(error);
707
- }
708
- });
709
- }
432
+ function notificationsRequestPermission(): Promise<void> {
433
+ return new Promise((resolve, reject) => {
434
+ if (isOneSignalScriptFailed) {
435
+ reject();
436
+ }
710
437
 
711
- function showSmsAndEmailSlidedown(options?: AutoPromptOptions): Promise<void> {
712
- return new Promise((resolve, reject) => {
713
- if (isOneSignalScriptFailed) {
714
- resolve();
715
- return;
716
- }
717
-
718
- if (!doesOneSignalExist()) {
719
- reactOneSignalFunctionQueue.push({
720
- name: 'showSmsAndEmailSlidedown',
721
- args: arguments,
722
- promiseResolver: resolve,
723
- });
724
- return;
725
- }
726
-
727
- try {
728
- window["OneSignal"].push(() => {
729
- window["OneSignal"].showSmsAndEmailSlidedown(options)
730
- .then((value: any) => resolve(value))
731
- .catch((error: any) => reject(error));
732
- });
733
- } catch (error) {
734
- reject(error);
735
- }
736
- });
737
- }
438
+ try {
439
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
440
+ OneSignal.Notifications.requestPermission()
441
+ .then((value: any) => resolve(value))
442
+ .catch((error: any) => reject(error));
443
+ });
444
+ } catch (error) {
445
+ reject(error);
446
+ }
447
+ });
448
+ }
738
449
 
739
- function getNotificationPermission(onComplete?: Action<NotificationPermission>): Promise<NotificationPermission> {
740
- return new Promise((resolve, reject) => {
741
- if (isOneSignalScriptFailed) {
742
- resolve();
743
- return;
744
- }
745
-
746
- if (!doesOneSignalExist()) {
747
- reactOneSignalFunctionQueue.push({
748
- name: 'getNotificationPermission',
749
- args: arguments,
750
- promiseResolver: resolve,
751
- });
752
- return;
753
- }
754
-
755
- try {
756
- window["OneSignal"].push(() => {
757
- window["OneSignal"].getNotificationPermission(onComplete)
758
- .then((value: any) => resolve(value))
759
- .catch((error: any) => reject(error));
760
- });
761
- } catch (error) {
762
- reject(error);
763
- }
764
- });
765
- }
450
+ function notificationsAddEventListener(event: 'click' | 'willDisplay' | 'dismiss', listener: (obj: StructuredNotification) => void): void;
451
+ function notificationsAddEventListener(event: 'permissionChange', listener: (obj: { to: NotificationPermission }) => void): void;
452
+ function notificationsAddEventListener(event: 'permissionPromptDisplay', listener: () => void): void;
766
453
 
767
- function getUserId(callback?: Action<string | undefined | null>): Promise<string | undefined | null> {
768
- return new Promise((resolve, reject) => {
769
- if (isOneSignalScriptFailed) {
770
- resolve();
771
- return;
772
- }
773
-
774
- if (!doesOneSignalExist()) {
775
- reactOneSignalFunctionQueue.push({
776
- name: 'getUserId',
777
- args: arguments,
778
- promiseResolver: resolve,
779
- });
780
- return;
781
- }
782
-
783
- try {
784
- window["OneSignal"].push(() => {
785
- window["OneSignal"].getUserId(callback)
786
- .then((value: any) => resolve(value))
787
- .catch((error: any) => reject(error));
788
- });
789
- } catch (error) {
790
- reject(error);
791
- }
792
- });
793
- }
454
+ function notificationsAddEventListener(event: NotificationEventName, listener: (obj: any) => void): void {
455
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
456
+ OneSignal.Notifications.addEventListener(event, listener)
457
+ });
458
+ }
794
459
 
795
- function getSubscription(callback?: Action<boolean>): Promise<boolean> {
796
- return new Promise((resolve, reject) => {
797
- if (isOneSignalScriptFailed) {
798
- resolve();
799
- return;
800
- }
801
-
802
- if (!doesOneSignalExist()) {
803
- reactOneSignalFunctionQueue.push({
804
- name: 'getSubscription',
805
- args: arguments,
806
- promiseResolver: resolve,
807
- });
808
- return;
809
- }
810
-
811
- try {
812
- window["OneSignal"].push(() => {
813
- window["OneSignal"].getSubscription(callback)
814
- .then((value: any) => resolve(value))
815
- .catch((error: any) => reject(error));
816
- });
817
- } catch (error) {
818
- reject(error);
819
- }
820
- });
821
- }
460
+ function notificationsRemoveEventListener(event: 'click' | 'willDisplay' | 'dismiss', listener: (obj: StructuredNotification) => void): void;
461
+ function notificationsRemoveEventListener(event: 'permissionChange', listener: (obj: { to: NotificationPermission }) => void): void;
462
+ function notificationsRemoveEventListener(event: 'permissionPromptDisplay', listener: () => void): void;
822
463
 
823
- function setEmail(email: string, options?: SetEmailOptions): Promise<string|null> {
824
- return new Promise((resolve, reject) => {
825
- if (isOneSignalScriptFailed) {
826
- resolve();
827
- return;
828
- }
829
-
830
- if (!doesOneSignalExist()) {
831
- reactOneSignalFunctionQueue.push({
832
- name: 'setEmail',
833
- args: arguments,
834
- promiseResolver: resolve,
835
- });
836
- return;
837
- }
838
-
839
- try {
840
- window["OneSignal"].push(() => {
841
- window["OneSignal"].setEmail(email, options)
842
- .then((value: any) => resolve(value))
843
- .catch((error: any) => reject(error));
844
- });
845
- } catch (error) {
846
- reject(error);
847
- }
848
- });
849
- }
464
+ function notificationsRemoveEventListener(event: NotificationEventName, listener: (obj: any) => void): void {
465
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
466
+ OneSignal.Notifications.removeEventListener(event, listener)
467
+ });
468
+ }
850
469
 
851
- function setSMSNumber(smsNumber: string, options?: SetSMSOptions): Promise<string | null> {
852
- return new Promise((resolve, reject) => {
853
- if (isOneSignalScriptFailed) {
854
- resolve();
855
- return;
856
- }
857
-
858
- if (!doesOneSignalExist()) {
859
- reactOneSignalFunctionQueue.push({
860
- name: 'setSMSNumber',
861
- args: arguments,
862
- promiseResolver: resolve,
863
- });
864
- return;
865
- }
866
-
867
- try {
868
- window["OneSignal"].push(() => {
869
- window["OneSignal"].setSMSNumber(smsNumber, options)
870
- .then((value: any) => resolve(value))
871
- .catch((error: any) => reject(error));
872
- });
873
- } catch (error) {
874
- reject(error);
875
- }
876
- });
877
- }
470
+ function sessionSendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void> {
471
+ return new Promise((resolve, reject) => {
472
+ if (isOneSignalScriptFailed) {
473
+ reject();
474
+ }
878
475
 
879
- function logoutEmail(): Promise<void> {
880
- return new Promise((resolve, reject) => {
881
- if (isOneSignalScriptFailed) {
882
- resolve();
883
- return;
884
- }
885
-
886
- if (!doesOneSignalExist()) {
887
- reactOneSignalFunctionQueue.push({
888
- name: 'logoutEmail',
889
- args: arguments,
890
- promiseResolver: resolve,
891
- });
892
- return;
893
- }
894
-
895
- try {
896
- window["OneSignal"].push(() => {
897
- window["OneSignal"].logoutEmail()
898
- .then((value: any) => resolve(value))
899
- .catch((error: any) => reject(error));
900
- });
901
- } catch (error) {
902
- reject(error);
903
- }
904
- });
905
- }
476
+ try {
477
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
478
+ OneSignal.Session.sendOutcome(outcomeName, outcomeWeight)
479
+ .then((value: any) => resolve(value))
480
+ .catch((error: any) => reject(error));
481
+ });
482
+ } catch (error) {
483
+ reject(error);
484
+ }
485
+ });
486
+ }
906
487
 
907
- function logoutSMS(): Promise<void> {
908
- return new Promise((resolve, reject) => {
909
- if (isOneSignalScriptFailed) {
910
- resolve();
911
- return;
912
- }
913
-
914
- if (!doesOneSignalExist()) {
915
- reactOneSignalFunctionQueue.push({
916
- name: 'logoutSMS',
917
- args: arguments,
918
- promiseResolver: resolve,
919
- });
920
- return;
921
- }
922
-
923
- try {
924
- window["OneSignal"].push(() => {
925
- window["OneSignal"].logoutSMS()
926
- .then((value: any) => resolve(value))
927
- .catch((error: any) => reject(error));
928
- });
929
- } catch (error) {
930
- reject(error);
931
- }
932
- });
933
- }
488
+ function sessionSendUniqueOutcome(outcomeName: string): Promise<void> {
489
+ return new Promise((resolve, reject) => {
490
+ if (isOneSignalScriptFailed) {
491
+ reject();
492
+ }
934
493
 
935
- function setExternalUserId(externalUserId: string | undefined | null, authHash?: string): Promise<void> {
936
- return new Promise((resolve, reject) => {
937
- if (isOneSignalScriptFailed) {
938
- resolve();
939
- return;
940
- }
941
-
942
- if (!doesOneSignalExist()) {
943
- reactOneSignalFunctionQueue.push({
944
- name: 'setExternalUserId',
945
- args: arguments,
946
- promiseResolver: resolve,
947
- });
948
- return;
949
- }
950
-
951
- try {
952
- window["OneSignal"].push(() => {
953
- window["OneSignal"].setExternalUserId(externalUserId, authHash)
954
- .then((value: any) => resolve(value))
955
- .catch((error: any) => reject(error));
956
- });
957
- } catch (error) {
958
- reject(error);
959
- }
960
- });
961
- }
494
+ try {
495
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
496
+ OneSignal.Session.sendUniqueOutcome(outcomeName)
497
+ .then((value: any) => resolve(value))
498
+ .catch((error: any) => reject(error));
499
+ });
500
+ } catch (error) {
501
+ reject(error);
502
+ }
503
+ });
504
+ }
962
505
 
963
- function removeExternalUserId(): Promise<void> {
964
- return new Promise((resolve, reject) => {
965
- if (isOneSignalScriptFailed) {
966
- resolve();
967
- return;
968
- }
969
-
970
- if (!doesOneSignalExist()) {
971
- reactOneSignalFunctionQueue.push({
972
- name: 'removeExternalUserId',
973
- args: arguments,
974
- promiseResolver: resolve,
975
- });
976
- return;
977
- }
978
-
979
- try {
980
- window["OneSignal"].push(() => {
981
- window["OneSignal"].removeExternalUserId()
982
- .then((value: any) => resolve(value))
983
- .catch((error: any) => reject(error));
984
- });
985
- } catch (error) {
986
- reject(error);
987
- }
988
- });
989
- }
506
+ function userAddAlias(label: string, id: string): void {
507
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
508
+ OneSignal.User.addAlias(label, id)
509
+ });
510
+ }
990
511
 
991
- function getExternalUserId(): Promise<string | undefined | null> {
992
- return new Promise((resolve, reject) => {
993
- if (isOneSignalScriptFailed) {
994
- resolve();
995
- return;
996
- }
997
-
998
- if (!doesOneSignalExist()) {
999
- reactOneSignalFunctionQueue.push({
1000
- name: 'getExternalUserId',
1001
- args: arguments,
1002
- promiseResolver: resolve,
1003
- });
1004
- return;
1005
- }
1006
-
1007
- try {
1008
- window["OneSignal"].push(() => {
1009
- window["OneSignal"].getExternalUserId()
1010
- .then((value: any) => resolve(value))
1011
- .catch((error: any) => reject(error));
1012
- });
1013
- } catch (error) {
1014
- reject(error);
1015
- }
1016
- });
1017
- }
512
+ function userAddAliases(aliases: { [key: string]: string }): void {
513
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
514
+ OneSignal.User.addAliases(aliases)
515
+ });
516
+ }
1018
517
 
1019
- function provideUserConsent(consent: boolean): Promise<void> {
1020
- return new Promise((resolve, reject) => {
1021
- if (isOneSignalScriptFailed) {
1022
- resolve();
1023
- return;
1024
- }
1025
-
1026
- if (!doesOneSignalExist()) {
1027
- reactOneSignalFunctionQueue.push({
1028
- name: 'provideUserConsent',
1029
- args: arguments,
1030
- promiseResolver: resolve,
1031
- });
1032
- return;
1033
- }
1034
-
1035
- try {
1036
- window["OneSignal"].push(() => {
1037
- window["OneSignal"].provideUserConsent(consent)
1038
- .then((value: any) => resolve(value))
1039
- .catch((error: any) => reject(error));
1040
- });
1041
- } catch (error) {
1042
- reject(error);
1043
- }
1044
- });
1045
- }
518
+ function userRemoveAlias(label: string): void {
519
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
520
+ OneSignal.User.removeAlias(label)
521
+ });
522
+ }
1046
523
 
1047
- function getEmailId(callback?: Action<string | undefined>): Promise<string | null | undefined> {
1048
- return new Promise((resolve, reject) => {
1049
- if (isOneSignalScriptFailed) {
1050
- resolve();
1051
- return;
1052
- }
1053
-
1054
- if (!doesOneSignalExist()) {
1055
- reactOneSignalFunctionQueue.push({
1056
- name: 'getEmailId',
1057
- args: arguments,
1058
- promiseResolver: resolve,
1059
- });
1060
- return;
1061
- }
1062
-
1063
- try {
1064
- window["OneSignal"].push(() => {
1065
- window["OneSignal"].getEmailId(callback)
1066
- .then((value: any) => resolve(value))
1067
- .catch((error: any) => reject(error));
1068
- });
1069
- } catch (error) {
1070
- reject(error);
1071
- }
1072
- });
1073
- }
524
+ function userRemoveAliases(labels: string[]): void {
525
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
526
+ OneSignal.User.removeAliases(labels)
527
+ });
528
+ }
1074
529
 
1075
- function getSMSId(callback?: Action<string | undefined>): Promise<string | null | undefined> {
1076
- return new Promise((resolve, reject) => {
1077
- if (isOneSignalScriptFailed) {
1078
- resolve();
1079
- return;
1080
- }
1081
-
1082
- if (!doesOneSignalExist()) {
1083
- reactOneSignalFunctionQueue.push({
1084
- name: 'getSMSId',
1085
- args: arguments,
1086
- promiseResolver: resolve,
1087
- });
1088
- return;
1089
- }
1090
-
1091
- try {
1092
- window["OneSignal"].push(() => {
1093
- window["OneSignal"].getSMSId(callback)
1094
- .then((value: any) => resolve(value))
1095
- .catch((error: any) => reject(error));
1096
- });
1097
- } catch (error) {
1098
- reject(error);
1099
- }
1100
- });
1101
- }
530
+ function userAddEmail(email: string): void {
531
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
532
+ OneSignal.User.addEmail(email)
533
+ });
534
+ }
1102
535
 
1103
- function sendOutcome(outcomeName: string, outcomeWeight?: number | undefined): Promise<void> {
1104
- return new Promise((resolve, reject) => {
1105
- if (isOneSignalScriptFailed) {
1106
- resolve();
1107
- return;
1108
- }
1109
-
1110
- if (!doesOneSignalExist()) {
1111
- reactOneSignalFunctionQueue.push({
1112
- name: 'sendOutcome',
1113
- args: arguments,
1114
- promiseResolver: resolve,
1115
- });
1116
- return;
1117
- }
1118
-
1119
- try {
1120
- window["OneSignal"].push(() => {
1121
- window["OneSignal"].sendOutcome(outcomeName, outcomeWeight)
1122
- .then((value: any) => resolve(value))
1123
- .catch((error: any) => reject(error));
1124
- });
1125
- } catch (error) {
1126
- reject(error);
1127
- }
1128
- });
1129
- }
536
+ function userRemoveEmail(email: string): void {
537
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
538
+ OneSignal.User.removeEmail(email)
539
+ });
540
+ }
541
+
542
+ function userAddSms(smsNumber: string): void {
543
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
544
+ OneSignal.User.addSms(smsNumber)
545
+ });
546
+ }
547
+
548
+ function userRemoveSms(smsNumber: string): void {
549
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
550
+ OneSignal.User.removeSms(smsNumber)
551
+ });
552
+ }
1130
553
 
1131
- const OneSignalReact: IOneSignal = {
554
+ function pushSubscriptionOptIn(): Promise<void> {
555
+ return new Promise((resolve, reject) => {
556
+ if (isOneSignalScriptFailed) {
557
+ reject();
558
+ }
559
+
560
+ try {
561
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
562
+ OneSignal.User.PushSubscription.optIn()
563
+ .then((value: any) => resolve(value))
564
+ .catch((error: any) => reject(error));
565
+ });
566
+ } catch (error) {
567
+ reject(error);
568
+ }
569
+ });
570
+ }
571
+
572
+ function pushSubscriptionOptOut(): Promise<void> {
573
+ return new Promise((resolve, reject) => {
574
+ if (isOneSignalScriptFailed) {
575
+ reject();
576
+ }
577
+
578
+ try {
579
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
580
+ OneSignal.User.PushSubscription.optOut()
581
+ .then((value: any) => resolve(value))
582
+ .catch((error: any) => reject(error));
583
+ });
584
+ } catch (error) {
585
+ reject(error);
586
+ }
587
+ });
588
+ }
589
+
590
+ function pushSubscriptionAddEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void {
591
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
592
+ OneSignal.User.PushSubscription.addEventListener(event, listener)
593
+ });
594
+ }
595
+
596
+ function pushSubscriptionRemoveEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void {
597
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
598
+ OneSignal.User.PushSubscription.removeEventListener(event, listener)
599
+ });
600
+ }
601
+
602
+ function debugSetLogLevel(logLevel: string): void {
603
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
604
+ OneSignal.Debug.setLogLevel(logLevel)
605
+ });
606
+ }
607
+ const PushSubscriptionNamespace: IOneSignalPushSubscription = {
608
+ get id(): string | null | undefined { return window.OneSignal?.User?.PushSubscription?.id },
609
+ get token(): string | null | undefined { return window.OneSignal?.User?.PushSubscription?.token },
610
+ get optedIn(): boolean | undefined { return window.OneSignal?.User?.PushSubscription?.optedIn },
611
+ optIn: pushSubscriptionOptIn,
612
+ optOut: pushSubscriptionOptOut,
613
+ addEventListener: pushSubscriptionAddEventListener,
614
+ removeEventListener: pushSubscriptionRemoveEventListener,
615
+ };
616
+
617
+ const UserNamespace: IOneSignalUser = {
618
+ addAlias: userAddAlias,
619
+ addAliases: userAddAliases,
620
+ removeAlias: userRemoveAlias,
621
+ removeAliases: userRemoveAliases,
622
+ addEmail: userAddEmail,
623
+ removeEmail: userRemoveEmail,
624
+ addSms: userAddSms,
625
+ removeSms: userRemoveSms,
626
+ PushSubscription: PushSubscriptionNamespace,
627
+ };
628
+
629
+ const SessionNamespace: IOneSignalSession = {
630
+ sendOutcome: sessionSendOutcome,
631
+ sendUniqueOutcome: sessionSendUniqueOutcome,
632
+ };
633
+
634
+ const DebugNamespace: IOneSignalDebug = {
635
+ setLogLevel: debugSetLogLevel,
636
+ };
637
+
638
+ const SlidedownNamespace: IOneSignalSlidedown = {
639
+ promptPush: slidedownPromptPush,
640
+ promptPushCategories: slidedownPromptPushCategories,
641
+ promptSms: slidedownPromptSms,
642
+ promptEmail: slidedownPromptEmail,
643
+ promptSmsAndEmail: slidedownPromptSmsAndEmail,
644
+ addEventListener: slidedownAddEventListener,
645
+ removeEventListener: slidedownRemoveEventListener,
646
+ };
647
+
648
+ const NotificationsNamespace: IOneSignalNotifications = {
649
+ setDefaultUrl: notificationsSetDefaultUrl,
650
+ setDefaultTitle: notificationsSetDefaultTitle,
651
+ isPushSupported,
652
+ getPermissionStatus: notificationsGetPermissionStatus,
653
+ requestPermission: notificationsRequestPermission,
654
+ addEventListener: notificationsAddEventListener,
655
+ removeEventListener: notificationsRemoveEventListener,
656
+ };
657
+
658
+ const OneSignalNamespace: IOneSignalOneSignal = {
659
+ login: oneSignalLogin,
660
+ logout: oneSignalLogout,
1132
661
  init,
1133
- on,
1134
- off,
1135
- once,
1136
- isPushNotificationsEnabled,
1137
- showHttpPrompt,
1138
- registerForPushNotifications,
1139
- setDefaultNotificationUrl,
1140
- setDefaultTitle,
1141
- getTags,
1142
- sendTag,
1143
- sendTags,
1144
- deleteTag,
1145
- deleteTags,
1146
- addListenerForNotificationOpened,
1147
- setSubscription,
1148
- showHttpPermissionRequest,
1149
- showNativePrompt,
1150
- showSlidedownPrompt,
1151
- showCategorySlidedown,
1152
- showSmsSlidedown,
1153
- showEmailSlidedown,
1154
- showSmsAndEmailSlidedown,
1155
- getNotificationPermission,
1156
- getUserId,
1157
- getSubscription,
1158
- setEmail,
1159
- setSMSNumber,
1160
- logoutEmail,
1161
- logoutSMS,
1162
- setExternalUserId,
1163
- removeExternalUserId,
1164
- getExternalUserId,
1165
- provideUserConsent,
1166
- getEmailId,
1167
- getSMSId,
1168
- sendOutcome,
662
+ setConsentGiven: oneSignalSetConsentGiven,
663
+ setConsentRequired: oneSignalSetConsentRequired,
664
+ Slidedown: SlidedownNamespace,
665
+ Notifications: NotificationsNamespace,
666
+ Session: SessionNamespace,
667
+ User: UserNamespace,
668
+ Debug: DebugNamespace,
1169
669
  };
1170
- export default OneSignalReact
670
+
671
+ const OneSignal = OneSignalNamespace;
672
+ export default OneSignal;