@bubblsdk/react-native-sdk 4.1.7 → 5.0.0-alpha.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/BubblReactNativeSdk.podspec +29 -9
- package/CHANGELOG.md +52 -1
- package/LICENSE +202 -1
- package/README.md +172 -83
- package/android/build.gradle +33 -30
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/tech/bubbl/reactnative/BubblJson.kt +135 -0
- package/android/src/main/java/tech/bubbl/reactnative/BubblSdkModule.kt +277 -0
- package/android/src/main/java/tech/bubbl/reactnative/BubblSdkPackage.kt +26 -0
- package/app.plugin.js +2 -0
- package/ios/BubblPush.swift +44 -0
- package/ios/BubblSdk.h +7 -0
- package/ios/BubblSdk.mm +252 -0
- package/ios/BubblSdkImpl.swift +335 -0
- package/ios-extension/BubblReactNativeNotificationService.podspec +44 -0
- package/ios-extension/Sources/BubblCore/API/ApiResponse.swift +90 -0
- package/ios-extension/Sources/BubblCore/API/CredentialStore.swift +116 -0
- package/ios-extension/Sources/BubblCore/API/DeviceApiClient.swift +239 -0
- package/ios-extension/Sources/BubblCore/API/ErrorActions.swift +68 -0
- package/ios-extension/Sources/BubblCore/API/Http.swift +39 -0
- package/ios-extension/Sources/BubblCore/API/ServerClock.swift +69 -0
- package/ios-extension/Sources/BubblCore/BubblVersion.swift +5 -0
- package/ios-extension/Sources/BubblCore/Device/ConfigSync.swift +216 -0
- package/ios-extension/Sources/BubblCore/Device/DeviceSync.swift +160 -0
- package/ios-extension/Sources/BubblCore/Device/ProvisioningProfile.swift +24 -0
- package/ios-extension/Sources/BubblCore/Engine/EngineCore.swift +523 -0
- package/ios-extension/Sources/BubblCore/Engine/Geofencing.swift +170 -0
- package/ios-extension/Sources/BubblCore/Engine/Permissions.swift +90 -0
- package/ios-extension/Sources/BubblCore/Engine/Privacy.swift +64 -0
- package/ios-extension/Sources/BubblCore/Engine/PrivacyControls.swift +184 -0
- package/ios-extension/Sources/BubblCore/Engine/Pushes.swift +61 -0
- package/ios-extension/Sources/BubblCore/Engine/Sandbox.swift +149 -0
- package/ios-extension/Sources/BubblCore/Events/EventQueue.swift +207 -0
- package/ios-extension/Sources/BubblCore/Events/EventStore.swift +159 -0
- package/ios-extension/Sources/BubblCore/Geofence/Geofence.swift +160 -0
- package/ios-extension/Sources/BubblCore/Geofence/GeofenceEngine.swift +488 -0
- package/ios-extension/Sources/BubblCore/Geofence/GeofenceState.swift +103 -0
- package/ios-extension/Sources/BubblCore/Geofence/RegionBudget.swift +62 -0
- package/ios-extension/Sources/BubblCore/Notification/BubblNotification.swift +137 -0
- package/ios-extension/Sources/BubblCore/Notification/NotificationEvents.swift +160 -0
- package/ios-extension/Sources/BubblCore/Notification/Push.swift +134 -0
- package/ios-extension/Sources/BubblCore/Notification/SurveyForm.swift +185 -0
- package/ios-extension/Sources/BubblCore/RequestSigner.swift +56 -0
- package/ios-extension/Sources/BubblCore/Support/AsyncMutex.swift +39 -0
- package/ios-extension/Sources/BubblCore/Support/BubblLog.swift +52 -0
- package/ios-extension/Sources/BubblCore/Support/JSON.swift +31 -0
- package/ios-extension/Sources/BubblCore/Support/JSONValue.swift +94 -0
- package/ios-extension/Sources/BubblCore/Support/Locking.swift +11 -0
- package/ios-extension/Sources/BubblCore/Support/ValueStore.swift +109 -0
- package/ios-extension/Sources/BubblNotificationService/BubblNotificationService.swift +124 -0
- package/ios-sdk/BubblCore/API/ApiResponse.swift +90 -0
- package/ios-sdk/BubblCore/API/CredentialStore.swift +116 -0
- package/ios-sdk/BubblCore/API/DeviceApiClient.swift +239 -0
- package/ios-sdk/BubblCore/API/ErrorActions.swift +68 -0
- package/ios-sdk/BubblCore/API/Http.swift +39 -0
- package/ios-sdk/BubblCore/API/ServerClock.swift +69 -0
- package/ios-sdk/BubblCore/BubblVersion.swift +5 -0
- package/ios-sdk/BubblCore/Device/ConfigSync.swift +216 -0
- package/ios-sdk/BubblCore/Device/DeviceSync.swift +160 -0
- package/ios-sdk/BubblCore/Device/ProvisioningProfile.swift +24 -0
- package/ios-sdk/BubblCore/Engine/EngineCore.swift +523 -0
- package/ios-sdk/BubblCore/Engine/Geofencing.swift +170 -0
- package/ios-sdk/BubblCore/Engine/Permissions.swift +90 -0
- package/ios-sdk/BubblCore/Engine/Privacy.swift +64 -0
- package/ios-sdk/BubblCore/Engine/PrivacyControls.swift +184 -0
- package/ios-sdk/BubblCore/Engine/Pushes.swift +61 -0
- package/ios-sdk/BubblCore/Engine/Sandbox.swift +149 -0
- package/ios-sdk/BubblCore/Events/EventQueue.swift +207 -0
- package/ios-sdk/BubblCore/Events/EventStore.swift +159 -0
- package/ios-sdk/BubblCore/Geofence/Geofence.swift +160 -0
- package/ios-sdk/BubblCore/Geofence/GeofenceEngine.swift +488 -0
- package/ios-sdk/BubblCore/Geofence/GeofenceState.swift +103 -0
- package/ios-sdk/BubblCore/Geofence/RegionBudget.swift +62 -0
- package/ios-sdk/BubblCore/Notification/BubblNotification.swift +137 -0
- package/ios-sdk/BubblCore/Notification/NotificationEvents.swift +160 -0
- package/ios-sdk/BubblCore/Notification/Push.swift +134 -0
- package/ios-sdk/BubblCore/Notification/SurveyForm.swift +185 -0
- package/ios-sdk/BubblCore/RequestSigner.swift +56 -0
- package/ios-sdk/BubblCore/Support/AsyncMutex.swift +39 -0
- package/ios-sdk/BubblCore/Support/BubblLog.swift +52 -0
- package/ios-sdk/BubblCore/Support/JSON.swift +31 -0
- package/ios-sdk/BubblCore/Support/JSONValue.swift +94 -0
- package/ios-sdk/BubblCore/Support/Locking.swift +11 -0
- package/ios-sdk/BubblCore/Support/ValueStore.swift +109 -0
- package/ios-sdk/BubblLaunch/BubblLaunch.m +45 -0
- package/ios-sdk/BubblLaunch/include/BubblLaunch.h +5 -0
- package/ios-sdk/BubblSDK/Bubbl.swift +308 -0
- package/ios-sdk/BubblSDK/BubblBackend.swift +118 -0
- package/ios-sdk/BubblSDK/BubblCredential.swift +30 -0
- package/ios-sdk/BubblSDK/BubblMessage.swift +151 -0
- package/ios-sdk/BubblSDK/BubblOptions.swift +39 -0
- package/ios-sdk/BubblSDK/BubblPermissions.swift +79 -0
- package/ios-sdk/BubblSDK/BubblTestDeviceResult.swift +10 -0
- package/ios-sdk/BubblSDK/Engine/BackgroundRefresh.swift +92 -0
- package/ios-sdk/BubblSDK/Engine/EngineHost+Geofences.swift +177 -0
- package/ios-sdk/BubblSDK/Engine/EngineHost+Privacy.swift +65 -0
- package/ios-sdk/BubblSDK/Engine/EngineHost+Push.swift +154 -0
- package/ios-sdk/BubblSDK/Engine/EngineHost.swift +356 -0
- package/ios-sdk/BubblSDK/Engine/SupportedBubbl.swift +320 -0
- package/ios-sdk/BubblSDK/Engine/SystemLog.swift +27 -0
- package/ios-sdk/BubblSDK/Engine/WorkRunner.swift +107 -0
- package/ios-sdk/BubblSDK/Notification/Look.swift +78 -0
- package/ios-sdk/BubblSDK/Notification/NotificationMedia.swift +329 -0
- package/ios-sdk/BubblSDK/Notification/NotificationModel.swift +172 -0
- package/ios-sdk/BubblSDK/Notification/NotificationScreen.swift +428 -0
- package/ios-sdk/BubblSDK/Notification/ScreenPresenter.swift +148 -0
- package/ios-sdk/BubblSDK/Permissions/PermissionFlow.swift +169 -0
- package/ios-sdk/BubblSDK/Permissions/PrivacyView.swift +110 -0
- package/ios-sdk/BubblSDK/Platform/AppleDevicePlatform.swift +95 -0
- package/ios-sdk/BubblSDK/Platform/KeychainCredentialStore.swift +114 -0
- package/ios-sdk/BubblSDK/Platform/LocationService.swift +418 -0
- package/ios-sdk/BubblSDK/Platform/PushIntegration.swift +288 -0
- package/ios-sdk/BubblSDK/Platform/URLSessionHttpClient.swift +69 -0
- package/ios-sdk/BubblSDK/PrivacyInfo.xcprivacy +76 -0
- package/jest/index.js +75 -0
- package/lib/commonjs/BubblModule.js +14 -0
- package/lib/commonjs/BubblModule.js.map +1 -0
- package/lib/commonjs/BubblModule.web.js +13 -0
- package/lib/commonjs/BubblModule.web.js.map +1 -0
- package/lib/commonjs/NativeBubblSdk.js +20 -0
- package/lib/commonjs/NativeBubblSdk.js.map +1 -0
- package/lib/commonjs/index.js +336 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/BubblModule.js +5 -0
- package/lib/module/BubblModule.js.map +1 -0
- package/lib/module/BubblModule.web.js +9 -0
- package/lib/module/BubblModule.web.js.map +1 -0
- package/lib/module/NativeBubblSdk.js +18 -0
- package/lib/module/NativeBubblSdk.js.map +1 -0
- package/lib/module/index.js +331 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/BubblModule.d.ts +3 -0
- package/lib/typescript/commonjs/src/BubblModule.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/BubblModule.web.d.ts +8 -0
- package/lib/typescript/commonjs/src/BubblModule.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/NativeBubblSdk.d.ts +59 -0
- package/lib/typescript/commonjs/src/NativeBubblSdk.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +111 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types.d.ts +192 -0
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/BubblModule.d.ts +3 -0
- package/lib/typescript/module/src/BubblModule.d.ts.map +1 -0
- package/lib/typescript/module/src/BubblModule.web.d.ts +8 -0
- package/lib/typescript/module/src/BubblModule.web.d.ts.map +1 -0
- package/lib/typescript/module/src/NativeBubblSdk.d.ts +59 -0
- package/lib/typescript/module/src/NativeBubblSdk.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +111 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/types.d.ts +192 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -0
- package/package.json +105 -24
- package/plugin/build/imageNotifications.d.ts +35 -0
- package/plugin/build/imageNotifications.js +198 -0
- package/plugin/build/index.d.ts +84 -0
- package/plugin/build/index.js +176 -0
- package/src/BubblModule.ts +2 -0
- package/src/BubblModule.web.ts +9 -0
- package/src/NativeBubblSdk.ts +67 -0
- package/src/index.ts +338 -282
- package/src/types.ts +182 -0
- package/android/src/main/kotlin/tech/bubbl/reactnative/BubblSdkModule.kt +0 -680
- package/android/src/main/kotlin/tech/bubbl/reactnative/BubblSdkNotificationIntents.kt +0 -32
- package/android/src/main/kotlin/tech/bubbl/reactnative/BubblSdkPackage.kt +0 -14
- package/ios/BubblSdk.swift +0 -802
- package/ios/BubblSdkBridge.m +0 -86
- package/react-native.config.js +0 -11
- package/src/specs/NativeBubblSdk.ts +0 -54
package/ios/BubblSdkBridge.m
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
#import <React/RCTBridgeModule.h>
|
|
2
|
-
#import <React/RCTEventEmitter.h>
|
|
3
|
-
|
|
4
|
-
@interface RCT_EXTERN_MODULE(BubblSdk, RCTEventEmitter)
|
|
5
|
-
|
|
6
|
-
RCT_EXTERN_METHOD(boot:(NSDictionary *)config
|
|
7
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
8
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
9
|
-
RCT_EXTERN_METHOD(shutdown:(RCTPromiseResolveBlock)resolve
|
|
10
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
11
|
-
RCT_EXTERN_METHOD(startLocationTracking:(RCTPromiseResolveBlock)resolve
|
|
12
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
13
|
-
RCT_EXTERN_METHOD(stopLocationTracking:(RCTPromiseResolveBlock)resolve
|
|
14
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
15
|
-
RCT_EXTERN_METHOD(refresh:(RCTPromiseResolveBlock)resolve
|
|
16
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
17
|
-
RCT_EXTERN_METHOD(refreshGeofence:(double)latitude
|
|
18
|
-
longitude:(double)longitude
|
|
19
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
20
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
21
|
-
RCT_EXTERN_METHOD(handleLocationUpdate:(double)latitude
|
|
22
|
-
longitude:(double)longitude
|
|
23
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
24
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
25
|
-
RCT_EXTERN_METHOD(refreshPush:(RCTPromiseResolveBlock)resolve
|
|
26
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
27
|
-
RCT_EXTERN_METHOD(getConfiguration:(RCTPromiseResolveBlock)resolve
|
|
28
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
29
|
-
RCT_EXTERN_METHOD(getPrivacyText:(RCTPromiseResolveBlock)resolve
|
|
30
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
31
|
-
RCT_EXTERN_METHOD(updateSegments:(NSArray *)tags
|
|
32
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
33
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
34
|
-
RCT_EXTERN_METHOD(setCorrelationId:(NSString *)value
|
|
35
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
36
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
37
|
-
RCT_EXTERN_METHOD(clearCorrelationId:(RCTPromiseResolveBlock)resolve
|
|
38
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
39
|
-
RCT_EXTERN_METHOD(setDefaultNotificationModalEnabled:(BOOL)enabled
|
|
40
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
41
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
42
|
-
RCT_EXTERN_METHOD(setDefaultNotificationModalStyle:(NSDictionary *)style
|
|
43
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
44
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
45
|
-
RCT_EXTERN_METHOD(registerPushToken:(NSString *)token
|
|
46
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
47
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
48
|
-
RCT_EXTERN_METHOD(handleFirebasePayload:(NSDictionary *)payload
|
|
49
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
50
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
51
|
-
RCT_EXTERN_METHOD(showNotification:(NSDictionary *)payload
|
|
52
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
53
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
54
|
-
RCT_EXTERN_METHOD(handleNotificationPayload:(NSDictionary *)payload
|
|
55
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
56
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
57
|
-
RCT_EXTERN_METHOD(handleNotificationOpen:(NSDictionary *)payload
|
|
58
|
-
action:(NSString *)action
|
|
59
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
60
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
61
|
-
RCT_EXTERN_METHOD(openNotificationModal:(NSDictionary *)payload
|
|
62
|
-
action:(NSString *)action
|
|
63
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
64
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
65
|
-
RCT_EXTERN_METHOD(handleNotificationCta:(NSDictionary *)payload
|
|
66
|
-
action:(NSString *)action
|
|
67
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
68
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
69
|
-
RCT_EXTERN_METHOD(handleNotificationMediaViewed:(NSDictionary *)payload
|
|
70
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
71
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
72
|
-
RCT_EXTERN_METHOD(handleNotificationSurveyRequested:(NSDictionary *)payload
|
|
73
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
74
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
75
|
-
RCT_EXTERN_METHOD(track:(NSDictionary *)event
|
|
76
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
77
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
78
|
-
RCT_EXTERN_METHOD(submitSurveyResponse:(NSDictionary *)response
|
|
79
|
-
resolver:(RCTPromiseResolveBlock)resolve
|
|
80
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
81
|
-
RCT_EXTERN_METHOD(flush:(RCTPromiseResolveBlock)resolve
|
|
82
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
83
|
-
RCT_EXTERN_METHOD(diagnostics:(RCTPromiseResolveBlock)resolve
|
|
84
|
-
rejecter:(RCTPromiseRejectBlock)reject)
|
|
85
|
-
|
|
86
|
-
@end
|
package/react-native.config.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { TurboModule } from 'react-native';
|
|
2
|
-
import { TurboModuleRegistry } from 'react-native';
|
|
3
|
-
|
|
4
|
-
export type BubblBootOptions = {
|
|
5
|
-
apiKey: string;
|
|
6
|
-
environment?: string;
|
|
7
|
-
runtimeBaseUrl?: string | null;
|
|
8
|
-
transmissionBaseUrl?: string | null;
|
|
9
|
-
ingestBaseUrl?: string | null;
|
|
10
|
-
segments?: string[];
|
|
11
|
-
correlationId?: string | null;
|
|
12
|
-
defaultDistanceMeters?: number;
|
|
13
|
-
refreshIntervalSeconds?: number;
|
|
14
|
-
enablePushHandling?: boolean;
|
|
15
|
-
enableLocationTracking?: boolean;
|
|
16
|
-
notificationRenderingMode?: string;
|
|
17
|
-
enableDefaultNotificationModal?: boolean;
|
|
18
|
-
defaultNotificationModalStyle?: Object | null;
|
|
19
|
-
enableDefaultSurveyUi?: boolean;
|
|
20
|
-
logLevel?: string;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export interface Spec extends TurboModule {
|
|
24
|
-
boot(config: BubblBootOptions): Promise<Object>;
|
|
25
|
-
shutdown(): Promise<void>;
|
|
26
|
-
startLocationTracking(): Promise<void>;
|
|
27
|
-
stopLocationTracking(): Promise<void>;
|
|
28
|
-
refresh(): Promise<void>;
|
|
29
|
-
refreshGeofence(latitude: number, longitude: number): Promise<void>;
|
|
30
|
-
handleLocationUpdate(latitude: number, longitude: number): Promise<void>;
|
|
31
|
-
refreshPush(): Promise<void>;
|
|
32
|
-
getConfiguration(): Promise<Object | null>;
|
|
33
|
-
getPrivacyText(): Promise<string>;
|
|
34
|
-
updateSegments(tags: string[]): Promise<void>;
|
|
35
|
-
setCorrelationId(value: string): Promise<void>;
|
|
36
|
-
clearCorrelationId(): Promise<void>;
|
|
37
|
-
setDefaultNotificationModalEnabled(enabled: boolean): Promise<void>;
|
|
38
|
-
setDefaultNotificationModalStyle(style?: Object | null): Promise<void>;
|
|
39
|
-
registerPushToken(token: string): Promise<void>;
|
|
40
|
-
handleFirebasePayload(payload: Object): Promise<Object | null>;
|
|
41
|
-
showNotification(payload: Object): Promise<Object>;
|
|
42
|
-
handleNotificationPayload(payload: Object): Promise<Object>;
|
|
43
|
-
handleNotificationOpen(payload: Object, action?: string | null): Promise<void>;
|
|
44
|
-
openNotificationModal(payload: Object, action?: string | null): Promise<boolean>;
|
|
45
|
-
handleNotificationCta(payload: Object, action?: string | null): Promise<void>;
|
|
46
|
-
handleNotificationMediaViewed(payload: Object): Promise<void>;
|
|
47
|
-
handleNotificationSurveyRequested(payload: Object): Promise<void>;
|
|
48
|
-
track(event: Object): Promise<void>;
|
|
49
|
-
submitSurveyResponse(response: Object): Promise<void>;
|
|
50
|
-
flush(): Promise<Object>;
|
|
51
|
-
diagnostics(): Promise<Object>;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export default TurboModuleRegistry.get<Spec>('BubblSdk');
|