UNPKG

onesignal-web-sdk

Version:

Web push notifications from OneSignal.

127 lines (118 loc) 4.5 kB
import { AppConfig } from './models/AppConfig'; import { DeviceRecord } from './models/DeviceRecord'; import { OneSignalApiErrorKind, OneSignalApiError } from './errors/OneSignalApiError'; import { EmailProfile } from './models/EmailProfile'; import { EmailDeviceRecord } from './models/EmailDeviceRecord'; import OneSignalApiBase from "./OneSignalApiBase"; import Utils from "./utils/Utils"; export default class OneSignalApiShared { static getPlayer(appId: string, playerId: string) { Utils.enforceAppId(appId); Utils.enforcePlayerId(playerId); return OneSignalApiBase.get(`players/${playerId}?app_id=${appId}`); } static updatePlayer(appId: string, playerId: string, options?: Object) { Utils.enforceAppId(appId); Utils.enforcePlayerId(playerId); return OneSignalApiBase.put(`players/${playerId}`, {app_id: appId, ...options}); } static sendNotification(appId: string, playerIds: Array<string>, titles, contents, url, icon, data, buttons) { var params = { app_id: appId, contents: contents, include_player_ids: playerIds, isAnyWeb: true, data: data, web_buttons: buttons }; if (titles) { (params as any).headings = titles; } if (url) { (params as any).url = url; } if (icon) { (params as any).chrome_web_icon = icon; (params as any).firefox_icon = icon; } Utils.trimUndefined(params); return OneSignalApiBase.post('notifications', params); } static async createUser(deviceRecord: DeviceRecord): Promise<string | null> { const serializedDeviceRecord = deviceRecord.serialize(); Utils.enforceAppId(serializedDeviceRecord.app_id); const response = await OneSignalApiBase.post(`players`, serializedDeviceRecord); if (response && response.success) return response.id; return null; } static async createEmailRecord( appConfig: AppConfig, emailProfile: EmailProfile, pushDeviceRecordId?: string ): Promise<string | null> { Utils.enforceAppId(appConfig.appId); const emailRecord = new EmailDeviceRecord(emailProfile.emailAddress, emailProfile.emailAuthHash, pushDeviceRecordId); emailRecord.appId = appConfig.appId; const response = await OneSignalApiBase.post(`players`, emailRecord.serialize()); if (response && response.success) { return response.id; } else { return null; } } static async updateEmailRecord( appConfig: AppConfig, emailProfile: EmailProfile, pushDeviceRecordId?: string ): Promise<string | null> { Utils.enforceAppId(appConfig.appId); Utils.enforcePlayerId(emailProfile.emailId); const emailRecord = new EmailDeviceRecord(emailProfile.emailAddress, emailProfile.emailAuthHash, pushDeviceRecordId); emailRecord.appId = appConfig.appId; const response = await OneSignalApiBase.put(`players/${emailProfile.emailId}`, emailRecord.serialize()); if (response && response.success) { return response.id; } else { return null; } } static async logoutEmail(appConfig: AppConfig, emailProfile: EmailProfile, deviceId: string): Promise<boolean> { Utils.enforceAppId(appConfig.appId); Utils.enforcePlayerId(deviceId); const response = await OneSignalApiBase.post(`players/${deviceId}/email_logout`, { app_id: appConfig.appId, parent_player_id: emailProfile.emailId, email_auth_hash: emailProfile.emailAuthHash ? emailProfile.emailAuthHash : undefined }); if (response && response.success) { return true; } else { return false; } } static async updateUserSession( userId: string, deviceRecord: DeviceRecord, ): Promise<string> { try { const serializedDeviceRecord = deviceRecord.serialize(); Utils.enforceAppId(serializedDeviceRecord.app_id); Utils.enforcePlayerId(userId); const response = await OneSignalApiBase.post(`players/${userId}/on_session`, serializedDeviceRecord); if (response.id) { // A new user ID can be returned return response.id; } else { return userId; } } catch (e) { if (e && Array.isArray(e.errors) && e.errors.length > 0 && Utils.contains(e.errors[0], 'app_id not found')) { throw new OneSignalApiError(OneSignalApiErrorKind.MissingAppId); } else throw e; } } }