react-onesignal 2.0.4 → 3.0.0-beta.1

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,118 @@ 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
+ safari?: {
19
+ pushNotification: any;
20
+ };
15
21
  }
16
- return false;
17
22
  }
18
23
 
19
- const handleOnLoad = (resolve: () => void, options: IInitObject) => {
20
- isOneSignalInitialized = true;
24
+ /* H E L P E R S */
21
25
 
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"] || []
26
+ function handleOnError() {
27
+ isOneSignalScriptFailed = true;
28
+ }
26
29
 
27
- window["OneSignal"].push(() => {
28
- window["OneSignal"].init(options);
29
- });
30
+ function addSDKScript() {
31
+ const script = document.createElement('script');
32
+ script.id = ONESIGNAL_SDK_ID;
33
+ script.defer = true;
34
+ script.src = ONE_SIGNAL_SCRIPT_SRC;
30
35
 
31
- window["OneSignal"].push(() => {
32
- processQueuedOneSignalFunctions();
33
- resolve();
34
- });
36
+ // Always resolve whether or not the script is successfully initialized.
37
+ // This is important for users who may block cdn.onesignal.com w/ adblock.
38
+ script.onerror = () => {
39
+ handleOnError();
40
+ }
41
+
42
+ document.head.appendChild(script);
35
43
  }
36
44
 
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();
45
+ /**
46
+ * The following code is copied directly from the native SDK source file BrowserSupportsPush.ts
47
+ * S T A R T
48
+ */
49
+
50
+ // Checks if the browser supports push notifications by checking if specific
51
+ // classes and properties on them exist
52
+ function isPushNotificationsSupported() {
53
+ return supportsVapidPush() || supportsSafariPush();
54
+ }
55
+
56
+ function isMacOSSafariInIframe(): boolean {
57
+ // Fallback detection for Safari on macOS in an iframe context
58
+ return window.top !== window && // isContextIframe
59
+ navigator.vendor === "Apple Computer, Inc." && // isSafari
60
+ navigator.platform === "MacIntel"; // isMacOS
43
61
  }
44
62
 
45
- const processQueuedOneSignalFunctions = () => {
46
- reactOneSignalFunctionQueue.forEach(element => {
47
- const { name, args, promiseResolver } = element;
63
+ function supportsSafariPush(): boolean {
64
+ return (window.safari && typeof window.safari.pushNotification !== "undefined") ||
65
+ isMacOSSafariInIframe();
66
+ }
48
67
 
49
- if (!!promiseResolver) {
50
- OneSignalReact[name](...args).then(result => {
51
- promiseResolver(result);
52
- });
53
- } else {
54
- OneSignalReact[name](...args);
55
- }
56
- });
68
+ // Does the browser support the standard Push API
69
+ function supportsVapidPush(): boolean {
70
+ return typeof PushSubscriptionOptions !== "undefined" &&
71
+ PushSubscriptionOptions.prototype.hasOwnProperty("applicationServerKey");
72
+ }
73
+ /* E N D */
74
+
75
+ /**
76
+ * This is a SPECIAL FUNCTION
77
+ * It is a hardcoded implementation copied from the upstream/native WebSDK since we want to return a boolean immediately
78
+ * Natively, this is done via the shimloading mechanism (i.e. if the SDK loads, push is supported)
79
+ * @PublicApi
80
+ */
81
+ const isPushSupported = (): boolean => {
82
+ return isPushNotificationsSupported();
57
83
  }
58
84
 
59
- const init = (options: IInitObject) => new Promise<void>(resolve => {
85
+ /**
86
+ * @PublicApi
87
+ */
88
+ const init = (options: IInitObject): Promise<void> => {
60
89
  if (isOneSignalInitialized) {
61
- resolve();
62
- return;
90
+ return Promise.reject(`OneSignal is already initialized.`);
63
91
  }
64
92
 
65
93
  if (!options || !options.appId) {
66
94
  throw new Error('You need to provide your OneSignal appId.');
67
95
  }
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
96
 
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);
97
+ if (!document) {
98
+ return Promise.reject(`Document is not defined.`);
86
99
  }
87
100
 
88
- document.head.appendChild(script);
89
- });
101
+ return new Promise<void>((resolve) => {
102
+ window['OneSignalDeferred'].push((OneSignal) => {
103
+ OneSignal.init(options).then(() => {
104
+ isOneSignalInitialized = true;
105
+ resolve();
106
+ });
107
+ });
108
+ });
109
+ };
90
110
 
91
111
  type Action<T> = (item: T) => void;
92
112
  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
113
  interface IOneSignalAutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; isInUpdateMode?: boolean; categoryOptions?: IOneSignalCategories; }
98
114
  interface IOneSignalCategories { positiveUpdateButton: string; negativeUpdateButton: string; savingButtonText: string; errorButtonText: string; updateMessage: string; tags: IOneSignalTagCategory[]; }
99
115
  interface IOneSignalTagCategory { tag: string; label: string; checked?: boolean; }
116
+ type PushSubscriptionNamespaceProperties = { id: string | null | undefined; token: string | null | undefined; optedIn: boolean; };
117
+ type SubscriptionChangeEvent = { previous: PushSubscriptionNamespaceProperties; current: PushSubscriptionNamespaceProperties; };
118
+ type NotificationEventName = 'click' | 'willDisplay' | 'dismiss' | 'permissionChange' | 'permissionPromptDisplay';
119
+ interface NotificationButtonData { action?: string; title?: string; icon?: string; url?: string; }
120
+ 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[]; }
121
+ type SlidedownEventName = 'slidedownShown';
122
+ type OneSignalDeferredLoadedCallback = (onesignal: IOneSignalOneSignal) => void;
100
123
 
101
124
  interface IInitObject {
102
125
  appId: string;
@@ -119,1052 +142,524 @@ interface IInitObject {
119
142
  [key: string]: any;
120
143
  }
121
144
 
122
- interface IOneSignal {
145
+ interface IOneSignalOneSignal {
146
+ login(externalId: string, jwtToken?: string): Promise<void>
147
+ logout(): Promise<void>
123
148
  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>
149
+ setConsentGiven(consent: boolean): Promise<void>
150
+ setConsentRequired(requiresConsent: boolean): Promise<void>
151
+ Slidedown: IOneSignalSlidedown;
152
+ Notifications: IOneSignalNotifications;
153
+ Session: IOneSignalSession;
154
+ User: IOneSignalUser;
155
+ Debug: IOneSignalDebug;
156
+ }
157
+ interface IOneSignalNotifications {
158
+ setDefaultUrl(url: string): Promise<void>
131
159
  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;
160
+ isPushSupported(): boolean
161
+ getPermissionStatus(onComplete: Action<NotificationPermission>): Promise<NotificationPermission>
162
+ requestPermission(): Promise<void>
163
+ addEventListener(event: NotificationEventName, listener: (obj: any) => void): void
164
+ removeEventListener(event: NotificationEventName, listener: (obj: any) => void): void
165
+ }
166
+ interface IOneSignalSlidedown {
167
+ promptPush(options?: AutoPromptOptions): Promise<void>
168
+ promptPushCategories(options?: AutoPromptOptions): Promise<void>
169
+ promptSms(options?: AutoPromptOptions): Promise<void>
170
+ promptEmail(options?: AutoPromptOptions): Promise<void>
171
+ promptSmsAndEmail(options?: AutoPromptOptions): Promise<void>
172
+ addEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void
173
+ removeEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void
174
+ }
175
+ interface IOneSignalDebug {
176
+ setLogLevel(logLevel: string): void
177
+ }
178
+ interface IOneSignalSession {
179
+ sendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void>
180
+ sendUniqueOutcome(outcomeName: string): Promise<void>
181
+ }
182
+ interface IOneSignalUser {
183
+ addAlias(label: string, id: string): void
184
+ addAliases(aliases: { [key: string]: string }): void
185
+ removeAlias(label: string): void
186
+ removeAliases(labels: string[]): void
187
+ addEmail(email: string): void
188
+ removeEmail(email: string): void
189
+ addSms(smsNumber: string): void
190
+ removeSms(smsNumber: string): void
191
+ PushSubscription: IOneSignalPushSubscription;
192
+ }
193
+ interface IOneSignalPushSubscription {
194
+ optIn(): Promise<void>
195
+ optOut(): Promise<void>
196
+ addEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void
197
+ removeEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void
161
198
  }
162
199
 
200
+ function oneSignalLogin(externalId: string, jwtToken?: string): Promise<void> {
201
+ return new Promise((resolve, reject) => {
202
+ if (isOneSignalScriptFailed) {
203
+ reject();
204
+ }
163
205
 
206
+ try {
207
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
208
+ OneSignal.login(externalId, jwtToken)
209
+ .then((value: any) => resolve(value))
210
+ .catch((error: any) => reject(error));
211
+ });
212
+ } catch (error) {
213
+ reject(error);
214
+ }
215
+ });
216
+ }
217
+
218
+ function oneSignalLogout(): Promise<void> {
219
+ return new Promise((resolve, reject) => {
220
+ if (isOneSignalScriptFailed) {
221
+ reject();
222
+ }
164
223
 
165
- function on(event: string, listener: (eventData?: any) => void): void {
166
- if (!doesOneSignalExist()) {
167
- reactOneSignalFunctionQueue.push({
168
- name: 'on',
169
- args: arguments,
224
+ try {
225
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
226
+ OneSignal.logout()
227
+ .then((value: any) => resolve(value))
228
+ .catch((error: any) => reject(error));
170
229
  });
171
- return;
230
+ } catch (error) {
231
+ reject(error);
172
232
  }
233
+ });
234
+ }
173
235
 
174
- window["OneSignal"].push(() => {
175
- window["OneSignal"].on(event, listener)
176
- });
177
- }
236
+ function oneSignalSetConsentGiven(consent: boolean): Promise<void> {
237
+ return new Promise((resolve, reject) => {
238
+ if (isOneSignalScriptFailed) {
239
+ reject();
240
+ }
178
241
 
179
- function off(event: string, listener: (eventData?: any) => void): void {
180
- if (!doesOneSignalExist()) {
181
- reactOneSignalFunctionQueue.push({
182
- name: 'off',
183
- args: arguments,
242
+ try {
243
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
244
+ OneSignal.setConsentGiven(consent)
245
+ .then((value: any) => resolve(value))
246
+ .catch((error: any) => reject(error));
184
247
  });
185
- return;
248
+ } catch (error) {
249
+ reject(error);
186
250
  }
251
+ });
252
+ }
187
253
 
188
- window["OneSignal"].push(() => {
189
- window["OneSignal"].off(event, listener)
190
- });
191
- }
254
+ function oneSignalSetConsentRequired(requiresConsent: boolean): Promise<void> {
255
+ return new Promise((resolve, reject) => {
256
+ if (isOneSignalScriptFailed) {
257
+ reject();
258
+ }
192
259
 
193
- function once(event: string, listener: (eventData?: any) => void): void {
194
- if (!doesOneSignalExist()) {
195
- reactOneSignalFunctionQueue.push({
196
- name: 'once',
197
- args: arguments,
260
+ try {
261
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
262
+ OneSignal.setConsentRequired(requiresConsent)
263
+ .then((value: any) => resolve(value))
264
+ .catch((error: any) => reject(error));
198
265
  });
199
- return;
266
+ } catch (error) {
267
+ reject(error);
200
268
  }
269
+ });
270
+ }
201
271
 
202
- window["OneSignal"].push(() => {
203
- window["OneSignal"].once(event, listener)
204
- });
205
- }
272
+ function slidedownPromptPush(options?: AutoPromptOptions): Promise<void> {
273
+ return new Promise((resolve, reject) => {
274
+ if (isOneSignalScriptFailed) {
275
+ reject();
276
+ }
206
277
 
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
- }
278
+ try {
279
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
280
+ OneSignal.Slidedown.promptPush(options)
281
+ .then((value: any) => resolve(value))
282
+ .catch((error: any) => reject(error));
283
+ });
284
+ } catch (error) {
285
+ reject(error);
286
+ }
287
+ });
288
+ }
234
289
 
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
- }
290
+ function slidedownPromptPushCategories(options?: AutoPromptOptions): Promise<void> {
291
+ return new Promise((resolve, reject) => {
292
+ if (isOneSignalScriptFailed) {
293
+ reject();
294
+ }
262
295
 
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
- }
296
+ try {
297
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
298
+ OneSignal.Slidedown.promptPushCategories(options)
299
+ .then((value: any) => resolve(value))
300
+ .catch((error: any) => reject(error));
301
+ });
302
+ } catch (error) {
303
+ reject(error);
304
+ }
305
+ });
306
+ }
290
307
 
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
- }
308
+ function slidedownPromptSms(options?: AutoPromptOptions): Promise<void> {
309
+ return new Promise((resolve, reject) => {
310
+ if (isOneSignalScriptFailed) {
311
+ reject();
312
+ }
318
313
 
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
- }
314
+ try {
315
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
316
+ OneSignal.Slidedown.promptSms(options)
317
+ .then((value: any) => resolve(value))
318
+ .catch((error: any) => reject(error));
319
+ });
320
+ } catch (error) {
321
+ reject(error);
322
+ }
323
+ });
324
+ }
346
325
 
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
- }
326
+ function slidedownPromptEmail(options?: AutoPromptOptions): Promise<void> {
327
+ return new Promise((resolve, reject) => {
328
+ if (isOneSignalScriptFailed) {
329
+ reject();
330
+ }
374
331
 
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
- }
332
+ try {
333
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
334
+ OneSignal.Slidedown.promptEmail(options)
335
+ .then((value: any) => resolve(value))
336
+ .catch((error: any) => reject(error));
337
+ });
338
+ } catch (error) {
339
+ reject(error);
340
+ }
341
+ });
342
+ }
402
343
 
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
- }
344
+ function slidedownPromptSmsAndEmail(options?: AutoPromptOptions): Promise<void> {
345
+ return new Promise((resolve, reject) => {
346
+ if (isOneSignalScriptFailed) {
347
+ reject();
348
+ }
430
349
 
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
- }
350
+ try {
351
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
352
+ OneSignal.Slidedown.promptSmsAndEmail(options)
353
+ .then((value: any) => resolve(value))
354
+ .catch((error: any) => reject(error));
355
+ });
356
+ } catch (error) {
357
+ reject(error);
358
+ }
359
+ });
360
+ }
458
361
 
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
- }
362
+ function slidedownAddEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void {
363
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
364
+ OneSignal.Slidedown.addEventListener(event, listener)
365
+ });
366
+ }
486
367
 
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
- }
368
+ function slidedownRemoveEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void {
369
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
370
+ OneSignal.Slidedown.removeEventListener(event, listener)
371
+ });
372
+ }
514
373
 
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
- }
374
+ function notificationsSetDefaultUrl(url: string): Promise<void> {
375
+ return new Promise((resolve, reject) => {
376
+ if (isOneSignalScriptFailed) {
377
+ reject();
378
+ }
542
379
 
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
- }
380
+ try {
381
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
382
+ OneSignal.Notifications.setDefaultUrl(url)
383
+ .then((value: any) => resolve(value))
384
+ .catch((error: any) => reject(error));
385
+ });
386
+ } catch (error) {
387
+ reject(error);
388
+ }
389
+ });
390
+ }
570
391
 
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
- }
392
+ function notificationsSetDefaultTitle(title: string): Promise<void> {
393
+ return new Promise((resolve, reject) => {
394
+ if (isOneSignalScriptFailed) {
395
+ reject();
396
+ }
598
397
 
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
- }
398
+ try {
399
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
400
+ OneSignal.Notifications.setDefaultTitle(title)
401
+ .then((value: any) => resolve(value))
402
+ .catch((error: any) => reject(error));
403
+ });
404
+ } catch (error) {
405
+ reject(error);
406
+ }
407
+ });
408
+ }
626
409
 
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
- }
410
+ function notificationsGetPermissionStatus(onComplete: Action<NotificationPermission>): Promise<NotificationPermission> {
411
+ return new Promise((resolve, reject) => {
412
+ if (isOneSignalScriptFailed) {
413
+ reject();
414
+ }
654
415
 
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
- }
416
+ try {
417
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
418
+ OneSignal.Notifications.getPermissionStatus(onComplete)
419
+ .then((value: any) => resolve(value))
420
+ .catch((error: any) => reject(error));
421
+ });
422
+ } catch (error) {
423
+ reject(error);
424
+ }
425
+ });
426
+ }
682
427
 
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
- }
428
+ function notificationsRequestPermission(): Promise<void> {
429
+ return new Promise((resolve, reject) => {
430
+ if (isOneSignalScriptFailed) {
431
+ reject();
432
+ }
710
433
 
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
- }
434
+ try {
435
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
436
+ OneSignal.Notifications.requestPermission()
437
+ .then((value: any) => resolve(value))
438
+ .catch((error: any) => reject(error));
439
+ });
440
+ } catch (error) {
441
+ reject(error);
442
+ }
443
+ });
444
+ }
738
445
 
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
- }
446
+ function notificationsAddEventListener(event: 'click' | 'willDisplay' | 'dismiss', listener: (obj: StructuredNotification) => void): void;
447
+ function notificationsAddEventListener(event: 'permissionChange', listener: (obj: { to: NotificationPermission }) => void): void;
448
+ function notificationsAddEventListener(event: 'permissionPromptDisplay', listener: () => void): void;
766
449
 
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
- }
450
+ function notificationsAddEventListener(event: NotificationEventName, listener: (obj: any) => void): void {
451
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
452
+ OneSignal.Notifications.addEventListener(event, listener)
453
+ });
454
+ }
794
455
 
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
- }
456
+ function notificationsRemoveEventListener(event: 'click' | 'willDisplay' | 'dismiss', listener: (obj: StructuredNotification) => void): void;
457
+ function notificationsRemoveEventListener(event: 'permissionChange', listener: (obj: { to: NotificationPermission }) => void): void;
458
+ function notificationsRemoveEventListener(event: 'permissionPromptDisplay', listener: () => void): void;
822
459
 
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
- }
460
+ function notificationsRemoveEventListener(event: NotificationEventName, listener: (obj: any) => void): void {
461
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
462
+ OneSignal.Notifications.removeEventListener(event, listener)
463
+ });
464
+ }
850
465
 
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
- }
466
+ function sessionSendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void> {
467
+ return new Promise((resolve, reject) => {
468
+ if (isOneSignalScriptFailed) {
469
+ reject();
470
+ }
878
471
 
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
- }
472
+ try {
473
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
474
+ OneSignal.Session.sendOutcome(outcomeName, outcomeWeight)
475
+ .then((value: any) => resolve(value))
476
+ .catch((error: any) => reject(error));
477
+ });
478
+ } catch (error) {
479
+ reject(error);
480
+ }
481
+ });
482
+ }
906
483
 
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
- }
484
+ function sessionSendUniqueOutcome(outcomeName: string): Promise<void> {
485
+ return new Promise((resolve, reject) => {
486
+ if (isOneSignalScriptFailed) {
487
+ reject();
488
+ }
934
489
 
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
- }
490
+ try {
491
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
492
+ OneSignal.Session.sendUniqueOutcome(outcomeName)
493
+ .then((value: any) => resolve(value))
494
+ .catch((error: any) => reject(error));
495
+ });
496
+ } catch (error) {
497
+ reject(error);
498
+ }
499
+ });
500
+ }
962
501
 
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
- }
502
+ function userAddAlias(label: string, id: string): void {
503
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
504
+ OneSignal.User.addAlias(label, id)
505
+ });
506
+ }
990
507
 
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
- }
508
+ function userAddAliases(aliases: { [key: string]: string }): void {
509
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
510
+ OneSignal.User.addAliases(aliases)
511
+ });
512
+ }
1018
513
 
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
- }
514
+ function userRemoveAlias(label: string): void {
515
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
516
+ OneSignal.User.removeAlias(label)
517
+ });
518
+ }
1046
519
 
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
- }
520
+ function userRemoveAliases(labels: string[]): void {
521
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
522
+ OneSignal.User.removeAliases(labels)
523
+ });
524
+ }
1074
525
 
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
- }
526
+ function userAddEmail(email: string): void {
527
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
528
+ OneSignal.User.addEmail(email)
529
+ });
530
+ }
1102
531
 
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
- }
532
+ function userRemoveEmail(email: string): void {
533
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
534
+ OneSignal.User.removeEmail(email)
535
+ });
536
+ }
537
+
538
+ function userAddSms(smsNumber: string): void {
539
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
540
+ OneSignal.User.addSms(smsNumber)
541
+ });
542
+ }
543
+
544
+ function userRemoveSms(smsNumber: string): void {
545
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
546
+ OneSignal.User.removeSms(smsNumber)
547
+ });
548
+ }
1130
549
 
1131
- const OneSignalReact: IOneSignal = {
550
+ function pushSubscriptionOptIn(): Promise<void> {
551
+ return new Promise((resolve, reject) => {
552
+ if (isOneSignalScriptFailed) {
553
+ reject();
554
+ }
555
+
556
+ try {
557
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
558
+ OneSignal.User.PushSubscription.optIn()
559
+ .then((value: any) => resolve(value))
560
+ .catch((error: any) => reject(error));
561
+ });
562
+ } catch (error) {
563
+ reject(error);
564
+ }
565
+ });
566
+ }
567
+
568
+ function pushSubscriptionOptOut(): Promise<void> {
569
+ return new Promise((resolve, reject) => {
570
+ if (isOneSignalScriptFailed) {
571
+ reject();
572
+ }
573
+
574
+ try {
575
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
576
+ OneSignal.User.PushSubscription.optOut()
577
+ .then((value: any) => resolve(value))
578
+ .catch((error: any) => reject(error));
579
+ });
580
+ } catch (error) {
581
+ reject(error);
582
+ }
583
+ });
584
+ }
585
+
586
+ function pushSubscriptionAddEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void {
587
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
588
+ OneSignal.User.PushSubscription.addEventListener(event, listener)
589
+ });
590
+ }
591
+
592
+ function pushSubscriptionRemoveEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void {
593
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
594
+ OneSignal.User.PushSubscription.removeEventListener(event, listener)
595
+ });
596
+ }
597
+
598
+ function debugSetLogLevel(logLevel: string): void {
599
+ window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
600
+ OneSignal.Debug.setLogLevel(logLevel)
601
+ });
602
+ }
603
+ const PushSubscriptionNamespace: IOneSignalPushSubscription = {
604
+ optIn: pushSubscriptionOptIn,
605
+ optOut: pushSubscriptionOptOut,
606
+ addEventListener: pushSubscriptionAddEventListener,
607
+ removeEventListener: pushSubscriptionRemoveEventListener,
608
+ };
609
+
610
+ const UserNamespace: IOneSignalUser = {
611
+ addAlias: userAddAlias,
612
+ addAliases: userAddAliases,
613
+ removeAlias: userRemoveAlias,
614
+ removeAliases: userRemoveAliases,
615
+ addEmail: userAddEmail,
616
+ removeEmail: userRemoveEmail,
617
+ addSms: userAddSms,
618
+ removeSms: userRemoveSms,
619
+ PushSubscription: PushSubscriptionNamespace,
620
+ };
621
+
622
+ const SessionNamespace: IOneSignalSession = {
623
+ sendOutcome: sessionSendOutcome,
624
+ sendUniqueOutcome: sessionSendUniqueOutcome,
625
+ };
626
+
627
+ const DebugNamespace: IOneSignalDebug = {
628
+ setLogLevel: debugSetLogLevel,
629
+ };
630
+
631
+ const SlidedownNamespace: IOneSignalSlidedown = {
632
+ promptPush: slidedownPromptPush,
633
+ promptPushCategories: slidedownPromptPushCategories,
634
+ promptSms: slidedownPromptSms,
635
+ promptEmail: slidedownPromptEmail,
636
+ promptSmsAndEmail: slidedownPromptSmsAndEmail,
637
+ addEventListener: slidedownAddEventListener,
638
+ removeEventListener: slidedownRemoveEventListener,
639
+ };
640
+
641
+ const NotificationsNamespace: IOneSignalNotifications = {
642
+ setDefaultUrl: notificationsSetDefaultUrl,
643
+ setDefaultTitle: notificationsSetDefaultTitle,
644
+ isPushSupported,
645
+ getPermissionStatus: notificationsGetPermissionStatus,
646
+ requestPermission: notificationsRequestPermission,
647
+ addEventListener: notificationsAddEventListener,
648
+ removeEventListener: notificationsRemoveEventListener,
649
+ };
650
+
651
+ const OneSignalNamespace: IOneSignalOneSignal = {
652
+ login: oneSignalLogin,
653
+ logout: oneSignalLogout,
1132
654
  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,
655
+ setConsentGiven: oneSignalSetConsentGiven,
656
+ setConsentRequired: oneSignalSetConsentRequired,
657
+ Slidedown: SlidedownNamespace,
658
+ Notifications: NotificationsNamespace,
659
+ Session: SessionNamespace,
660
+ User: UserNamespace,
661
+ Debug: DebugNamespace,
1169
662
  };
1170
- export default OneSignalReact
663
+
664
+ const OneSignal = OneSignalNamespace;
665
+ export default OneSignal;