From 835e0b2e46f138aca197be3a0f72e16c2810f897 Mon Sep 17 00:00:00 2001 From: David Broder-Rodgers Date: Mon, 18 Dec 2017 14:26:12 +0000 Subject: [PATCH] Add typings for onesignal-cordova-sdk --- types/onesignal-cordova-plugin/index.d.ts | 201 ++++++++++++++++++ .../onesignal-cordova-plugin-tests.ts | 70 ++++++ types/onesignal-cordova-plugin/tsconfig.json | 24 +++ types/onesignal-cordova-plugin/tslint.json | 1 + 4 files changed, 296 insertions(+) create mode 100644 types/onesignal-cordova-plugin/index.d.ts create mode 100644 types/onesignal-cordova-plugin/onesignal-cordova-plugin-tests.ts create mode 100644 types/onesignal-cordova-plugin/tsconfig.json create mode 100644 types/onesignal-cordova-plugin/tslint.json diff --git a/types/onesignal-cordova-plugin/index.d.ts b/types/onesignal-cordova-plugin/index.d.ts new file mode 100644 index 0000000000..d2c2534829 --- /dev/null +++ b/types/onesignal-cordova-plugin/index.d.ts @@ -0,0 +1,201 @@ +// Type definitions for onesignal-cordova-plugin 2.2 +// Project: https://github.com/onesignal/OneSignal-Cordova-SDK#readme +// Definitions by: David Broder-Rodgers +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +interface Window { + plugins: { OneSignal: OneSignalCordovaPlugin.OneSignalCordovaPlugin }; +} + +declare namespace OneSignalCordovaPlugin { + interface OneSignalCordovaPlugin { + startInit(appId: string): OneSignalBuilder; + promptForPushNotificationsWithUserResponse(callback: (accepted: boolean) => void): void; + getPermissionSubscriptionState(callback: (status: OSPermissionSubscriptionState) => void): void; + addPermissionObserver(callback: (state: OSPermissionState) => void): void; + addSubscriptionObserver(callback: (state: OSSubscriptionState) => void): void; + getTags(callback: (tags: any) => void): void; + sendTag(key: string, value: string): void; + sendTags(tags: { [key: string]: string }): void; + deleteTag(key: string): void; + deleteTags(keys: string[]): void; + promptLocation(): void; + syncHashedEmail(email: string): void; + postNotification(notificationObj: any, onSuccess: (json: any) => void, onFailure: (json: any) => void): void; + clearOneSignalNotifications(): void; + setSubscription(enable: boolean): void; + enableVibrate(enable: boolean): void; + enableSound(enable: boolean): void; + setLogLevel(logLevel: { logLevel: number, visualLevel: number }): void; + getIds(callback: (id: { userId: string; pushToken: string }) => void): void; + registerForPushNotifications(): void; + } + + interface OneSignalBuilder { + handleNotificationReceived(callback: (json: OSNotification) => void): OneSignalBuilder; + handleNotificationOpened(callback: (json: OSNotificationOpenedResult) => void): OneSignalBuilder; + inFocusDisplaying(displayOption: OSDisplayType): OneSignalBuilder; + iOSSettings(settings: { + kOSSettingsKeyAutoPrompt: boolean; + kOSSettingsKeyInAppLaunchURL: boolean; + }): OneSignalBuilder; + endInit(): void; + } + + interface OSNotification { + isAppInFocus: boolean; + shown: boolean; + androidNotificationId?: number; + payload: OSNotificationPayload; + displayType: OSDisplayType; + groupedNotifications?: OSNotificationPayload[]; + app_id?: string; + contents: any; + headings?: any; + isIos?: boolean; + isAndroid?: boolean; + isWP?: boolean; + isWP_WNS?: boolean; + isAdm?: boolean; + isChrome?: boolean; + isChromeWeb?: boolean; + isSafari?: boolean; + isAnyWeb?: boolean; + included_segments?: string[]; + excluded_segments?: string[]; + include_player_ids?: string[]; + include_ios_tokens?: string[]; + include_android_reg_ids?: string[]; + include_wp_uris?: string[]; + include_wp_wns_uris?: string[]; + include_amazon_reg_ids?: string[]; + include_chrome_reg_ids?: string[]; + include_chrome_web_reg_ids?: string[]; + app_ids?: string[]; + tags?: any[]; + ios_badgeType?: string; + ios_badgeCount?: number; + ios_sound?: string; + android_sound?: string; + adm_sound?: string; + wp_sound?: string; + wp_wns_sound?: string; + data?: any; + buttons?: any; + small_icon?: string; + large_icon?: string; + big_picture?: string; + adm_small_icon?: string; + adm_large_icon?: string; + adm_big_picture?: string; + chrome_icon?: string; + chrome_big_picture?: string; + chrome_web_icon?: string; + firefox_icon?: string; + url?: string; + send_after?: string; + delayed_option?: string; + delivery_time_of_day?: string; + android_led_color?: string; + android_accent_color?: string; + android_visibility?: number; + content_available?: boolean; + amazon_background_data?: boolean; + template_id?: string; + android_group?: string; + android_group_message?: any; + adm_group?: string; + adm_group_message?: any; + ttl?: number; + priority?: number; + ios_category?: string; + } + + interface OSNotificationPayload { + notificationID: string; + title: string; + body: string; + additionalData?: any; + smallIcon?: string; + largeIcon?: string; + bigPicture?: string; + smallIconAccentColor?: string; + launchURL?: string; + sound: string; + ledColor?: string; + lockScreenVisibility?: OSLockScreenVisibility; + groupKey?: string; + groupMessage?: string; + actionButtons: OSActionButton[]; + fromProjectNumber?: string; + backgroundImageLayout?: OSBackgroundImageLayout; + priority?: number; + rawPayload: string; + } + + interface OSActionButton { + id: string; + text: string; + icon: string; + } + + interface OSPermissionState { + hasPrompted: boolean; + status: OSNotificationPermission; + } + + interface OSSubscriptionState { + subscribed: boolean; + userSubscriptionSetting: any; + userId: any; + pushToken: any; + } + + interface OSPermissionSubscriptionState { + permissionStatus: OSPermissionState; + subscriptionStatus: OSSubscriptionState; + } + + interface OSBackgroundImageLayout { + image: string; + titleTextColor: string; + bodyTextColor: string; + } + + interface OSNotificationOpenedResult { + action: { + type: OSActionType; + actionID?: string; + }; + notification: OSNotification; + } + + const enum OSLockScreenVisibility { + Public = 1, + Private = 0, + Secret = -1 + } + + const enum OSDisplayType { + None = 0, + InAppAlert = 1, + Notification = 2 + } + + const enum OSActionType { + Opened = 0, + ActionTake = 1 + } + + const enum OSInFocusDisplayOption { + None = 0, + InAppAlert = 1, + Notification = 2 + } + + const enum OSNotificationPermission { + NotDetermined = 0, + Authorized = 1, + Denied = 2, + } +} diff --git a/types/onesignal-cordova-plugin/onesignal-cordova-plugin-tests.ts b/types/onesignal-cordova-plugin/onesignal-cordova-plugin-tests.ts new file mode 100644 index 0000000000..763338f948 --- /dev/null +++ b/types/onesignal-cordova-plugin/onesignal-cordova-plugin-tests.ts @@ -0,0 +1,70 @@ +window.plugins.OneSignal + .startInit("YOUR_APPID") + .handleNotificationReceived((jsonData) => { + console.log("Notification received:\n" + JSON.stringify(jsonData)); + }) + .handleNotificationOpened((jsonData) => { + console.log("Notification opened:\n" + JSON.stringify(jsonData)); + }) + .inFocusDisplaying(OneSignalCordovaPlugin.OSDisplayType.Notification) + .iOSSettings({ + kOSSettingsKeyAutoPrompt: true, + kOSSettingsKeyInAppLaunchURL: false, + }) + .endInit(); + +window.plugins.OneSignal.promptForPushNotificationsWithUserResponse((accepted) => { + console.log("User accepted notifications: " + accepted); +}); + +window.plugins.OneSignal.addPermissionObserver((state) => { + console.log("Notification permission state changed: " + JSON.stringify(state)); +}); + +window.plugins.OneSignal.addSubscriptionObserver((state) => { + if (!state.subscribed) { + console.log("Subscribed for OneSignal push notifications!"); + } + console.log("Push Subscription state changed: " + JSON.stringify(state)); +}); + +window.plugins.OneSignal.getTags((tags) => { + console.log('Tags Received: ' + JSON.stringify(tags)); +}); + +window.plugins.OneSignal.sendTag("key", "value"); + +window.plugins.OneSignal.deleteTag("key"); + +window.plugins.OneSignal.sendTags({ key1: "value", key2: "value2" }); + +window.plugins.OneSignal.deleteTags(["key1", "key2"]); + +window.plugins.OneSignal.promptLocation(); + +window.plugins.OneSignal.syncHashedEmail("John.Smith@example.com"); + +window.plugins.OneSignal.getIds((ids) => { + const notificationObj = { + contents: { en: "message body" }, + include_player_ids: [ids.userId] + }; + window.plugins.OneSignal.postNotification(notificationObj, + (successResponse) => { + console.log("Notification Post Success:", successResponse); + }, + (failedResponse) => { + console.log("Notification Post Failed: ", failedResponse); + } + ); +}); + +window.plugins.OneSignal.clearOneSignalNotifications(); + +window.plugins.OneSignal.setSubscription(false); + +window.plugins.OneSignal.enableVibrate(false); + +window.plugins.OneSignal.enableSound(false); + +window.plugins.OneSignal.setLogLevel({ logLevel: 4, visualLevel: 4 }); diff --git a/types/onesignal-cordova-plugin/tsconfig.json b/types/onesignal-cordova-plugin/tsconfig.json new file mode 100644 index 0000000000..bcee47426f --- /dev/null +++ b/types/onesignal-cordova-plugin/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "onesignal-cordova-plugin-tests.ts" + ] +} diff --git a/types/onesignal-cordova-plugin/tslint.json b/types/onesignal-cordova-plugin/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/onesignal-cordova-plugin/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }