react-native-sdk-pianoio 0.3.5 → 0.3.7
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/README.md +23 -7
- package/android/src/main/java/com/sdkpianoio/ComposerPianoImpl.kt +48 -147
- package/android/src/main/java/com/sdkpianoio/SdkPianoioModule.kt +2 -2
- package/android/src/main/java/com/sdkpianoio/TokenService.kt +0 -25
- package/ios/ComposerPianoImpl.swift +76 -55
- package/ios/SdkPianoio.swift +112 -27
- package/ios/SdkPianoioBridge.m +24 -5
- package/ios/TokenService.swift +5 -35
- package/lib/commonjs/NativeSdkPianoio.ts +1 -1
- package/lib/commonjs/PianoComposer.js +2 -2
- package/lib/commonjs/PianoComposer.js.map +1 -1
- package/lib/module/NativeSdkPianoio.ts +1 -1
- package/lib/module/PianoComposer.js +2 -2
- package/lib/module/PianoComposer.js.map +1 -1
- package/lib/typescript/commonjs/src/NativeSdkPianoio.d.ts +1 -1
- package/lib/typescript/commonjs/src/NativeSdkPianoio.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/PianoComposer.d.ts +1 -1
- package/lib/typescript/commonjs/src/PianoComposer.d.ts.map +1 -1
- package/lib/typescript/module/src/NativeSdkPianoio.d.ts +1 -1
- package/lib/typescript/module/src/NativeSdkPianoio.d.ts.map +1 -1
- package/lib/typescript/module/src/PianoComposer.d.ts +1 -1
- package/lib/typescript/module/src/PianoComposer.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativeSdkPianoio.ts +1 -1
- package/src/PianoComposer.tsx +8 -3
package/README.md
CHANGED
@@ -136,16 +136,32 @@ npm run build
|
|
136
136
|
└── ...
|
137
137
|
```
|
138
138
|
|
139
|
-
## 🎯
|
139
|
+
## 🎯 How to install
|
140
140
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
141
|
+
```
|
142
|
+
# In your expo projet's app.json file, make sure to have:
|
143
|
+
|
144
|
+
"plugins": [
|
145
|
+
[
|
146
|
+
"expo-build-properties",
|
147
|
+
{
|
148
|
+
"android": {
|
149
|
+
"buildToolsVersion": "35.0.0",
|
150
|
+
"compileSdkVersion": 34,
|
151
|
+
"minSdkVersion": 24,
|
152
|
+
"targetSdkVersion": 34
|
153
|
+
},
|
154
|
+
"ios": {
|
155
|
+
"deploymentTarget": "15.1",
|
156
|
+
"useFrameworks": "static"
|
157
|
+
}
|
158
|
+
}
|
159
|
+
]
|
160
|
+
...other plugins...
|
161
|
+
],
|
146
162
|
|
147
163
|
# Install dependencies
|
148
|
-
npm install
|
164
|
+
npm install react-native-sdk-pianoio
|
149
165
|
|
150
166
|
# Run on Android
|
151
167
|
npx expo run:android
|
@@ -26,40 +26,24 @@ class ComposerPianoImpl {
|
|
26
26
|
|
27
27
|
// MARK: - Properties
|
28
28
|
|
29
|
-
/** The Piano SDK's Composer instance */
|
30
29
|
private var composer: Composer? = null
|
31
|
-
|
32
|
-
/** The Piano ID Token Service instance */
|
33
30
|
internal var tokenService: TokenService? = null
|
34
31
|
|
35
|
-
/** The Piano Application ID */
|
36
32
|
companion object {
|
37
33
|
var aid: String = ""
|
38
34
|
}
|
39
35
|
|
40
36
|
// MARK: - Configuration Properties
|
41
37
|
|
42
|
-
/** Configured tags for the composer */
|
43
38
|
private val tags = mutableListOf<String>()
|
44
|
-
|
45
|
-
/** Configured Zone ID */
|
46
39
|
private var zoneId: String? = null
|
47
|
-
|
48
|
-
/** Configured referrer */
|
49
40
|
private var referrer: String? = null
|
50
|
-
|
51
|
-
/** Configured URL */
|
52
41
|
private var url: String? = null
|
53
|
-
|
54
|
-
/** Configured user token */
|
55
42
|
private var userToken: String? = null
|
56
|
-
|
57
|
-
/** Configured custom variables */
|
58
43
|
private val customVariables = mutableMapOf<String, String>()
|
59
44
|
|
60
45
|
// MARK: - Initialization
|
61
46
|
|
62
|
-
/** Public class constructor Initializes the instance with default values */
|
63
47
|
constructor() {
|
64
48
|
println("ComposerPianoImpl: Constructor initialized")
|
65
49
|
}
|
@@ -70,7 +54,7 @@ class ComposerPianoImpl {
|
|
70
54
|
* @param context The Android application context.
|
71
55
|
* @param aid The Piano Application ID.
|
72
56
|
*/
|
73
|
-
fun initializeComposer(context: Context, aid: String) {
|
57
|
+
fun initializeComposer(context: Context, aid: String, isSandbox: Boolean) {
|
74
58
|
println("ComposerPianoImpl: Initializing composer with AID: $aid")
|
75
59
|
|
76
60
|
// Validate input parameter
|
@@ -84,7 +68,9 @@ class ComposerPianoImpl {
|
|
84
68
|
|
85
69
|
try {
|
86
70
|
// 1. Initialize the Composer SDK statically using the official API
|
87
|
-
|
71
|
+
val endpoint =
|
72
|
+
if (isSandbox) Composer.Endpoint.SANDBOX else Composer.Endpoint.PRODUCTION
|
73
|
+
Composer.init(context, aid, endpoint)
|
88
74
|
println("ComposerPianoImpl: Composer SDK initialized for PRODUCTION")
|
89
75
|
|
90
76
|
// 2. Get the singleton instance and store it
|
@@ -103,24 +89,48 @@ class ComposerPianoImpl {
|
|
103
89
|
}
|
104
90
|
}
|
105
91
|
|
106
|
-
// MARK: -
|
92
|
+
// MARK: - State Methods (Getters)
|
93
|
+
|
94
|
+
fun getAid(): String {
|
95
|
+
return ComposerPianoImpl.aid
|
96
|
+
}
|
97
|
+
|
98
|
+
fun getTags(): List<String> {
|
99
|
+
return this.tags.toList()
|
100
|
+
}
|
101
|
+
|
102
|
+
fun getZoneId(): String {
|
103
|
+
return this.zoneId ?: ""
|
104
|
+
}
|
105
|
+
|
106
|
+
fun getReferrer(): String {
|
107
|
+
return referrer ?: ""
|
108
|
+
}
|
109
|
+
|
110
|
+
fun getUrl(): String {
|
111
|
+
return url ?: ""
|
112
|
+
}
|
113
|
+
|
114
|
+
fun getUserToken(): String {
|
115
|
+
return userToken ?: ""
|
116
|
+
}
|
117
|
+
|
118
|
+
fun getComposer(): Composer? {
|
119
|
+
return composer
|
120
|
+
}
|
121
|
+
|
122
|
+
fun getCustomVariables(): Map<String, String> {
|
123
|
+
return customVariables.toMap()
|
124
|
+
}
|
125
|
+
|
126
|
+
// MARK: - Configuration Methods (Setters)
|
107
127
|
|
108
|
-
/**
|
109
|
-
* Adds a tag to the composer
|
110
|
-
*
|
111
|
-
* @param tag The tag to be added
|
112
|
-
*/
|
113
128
|
fun addTag(tag: String) {
|
114
129
|
if (!this.tags.contains(tag)) {
|
115
130
|
this.tags.add(tag)
|
116
131
|
}
|
117
132
|
}
|
118
133
|
|
119
|
-
/**
|
120
|
-
* Adds multiple tags to the composer
|
121
|
-
*
|
122
|
-
* @param tags The list of tags to be added
|
123
|
-
*/
|
124
134
|
fun addTags(tags: List<String>) {
|
125
135
|
for (tag in tags) {
|
126
136
|
if (!this.tags.contains(tag)) {
|
@@ -129,166 +139,57 @@ class ComposerPianoImpl {
|
|
129
139
|
}
|
130
140
|
}
|
131
141
|
|
132
|
-
/**
|
133
|
-
* Sets the Zone ID for the composer
|
134
|
-
*
|
135
|
-
* @param zoneId The Zone ID to be configured
|
136
|
-
*/
|
137
142
|
fun setZoneId(zoneId: String) {
|
138
143
|
this.zoneId = zoneId
|
139
144
|
}
|
140
145
|
|
141
|
-
/**
|
142
|
-
* Sets the referrer for the composer
|
143
|
-
*
|
144
|
-
* @param referrer The referrer to be configured
|
145
|
-
*/
|
146
146
|
fun setReferrer(referrer: String) {
|
147
147
|
this.referrer = referrer
|
148
148
|
}
|
149
149
|
|
150
|
-
/**
|
151
|
-
* Sets the URL for the composer
|
152
|
-
*
|
153
|
-
* @param url The URL to be configured
|
154
|
-
*/
|
155
150
|
fun setUrl(url: String) {
|
156
151
|
this.url = url
|
157
152
|
}
|
158
153
|
|
159
|
-
/**
|
160
|
-
* Sets the user token on the Composer instance.
|
161
|
-
*
|
162
|
-
* @param token The user's access token.
|
163
|
-
*/
|
164
154
|
fun setUserToken(token: String) {
|
165
155
|
this.userToken = token
|
166
|
-
// Call the official SDK method to set the token
|
167
156
|
composer?.userToken(token)
|
168
157
|
}
|
169
158
|
|
170
|
-
/**
|
171
|
-
* Adds a custom variable.
|
172
|
-
*
|
173
|
-
* @param key The variable's key
|
174
|
-
* @param value The variable's value
|
175
|
-
*/
|
176
159
|
fun addCustomVariable(key: String, value: String) {
|
177
160
|
this.customVariables[key] = value
|
178
161
|
}
|
179
162
|
|
180
|
-
// MARK: - Advanced Configuration Methods
|
181
|
-
|
182
|
-
/**
|
183
|
-
* Sets multiple custom variables at once.
|
184
|
-
*
|
185
|
-
* @param variables A map of custom variables.
|
186
|
-
*/
|
187
163
|
fun setCustomVariables(variables: Map<String, String>) {
|
188
164
|
this.customVariables.clear()
|
189
165
|
this.customVariables.putAll(variables)
|
190
166
|
}
|
191
167
|
|
192
|
-
|
168
|
+
// MARK: - Cleanup Methods
|
169
|
+
|
193
170
|
fun clearTags() {
|
194
171
|
this.tags.clear()
|
195
172
|
}
|
196
173
|
|
197
|
-
/** Removes all custom variables. */
|
198
174
|
fun clearCustomVariables() {
|
199
175
|
this.customVariables.clear()
|
200
176
|
}
|
201
177
|
|
202
|
-
/**
|
203
|
-
* Removes a specific tag.
|
204
|
-
*
|
205
|
-
* @param tag The tag to be removed.
|
206
|
-
*/
|
207
178
|
fun removeTag(tag: String) {
|
208
179
|
this.tags.remove(tag)
|
209
180
|
}
|
210
181
|
|
211
|
-
/**
|
212
|
-
* Removes a specific custom variable.
|
213
|
-
*
|
214
|
-
* @param key The key of the variable to be removed.
|
215
|
-
*/
|
216
182
|
fun removeCustomVariable(key: String) {
|
217
183
|
this.customVariables.remove(key)
|
218
184
|
}
|
219
185
|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
fun getAid(): String {
|
228
|
-
return ComposerPianoImpl.aid
|
229
|
-
}
|
230
|
-
|
231
|
-
/**
|
232
|
-
* Gets the configured tags.
|
233
|
-
*
|
234
|
-
* @return A list of configured tags.
|
235
|
-
*/
|
236
|
-
fun getTags(): List<String> {
|
237
|
-
return this.tags.toList()
|
238
|
-
}
|
239
|
-
|
240
|
-
/**
|
241
|
-
* Gets the configured Zone ID.
|
242
|
-
*
|
243
|
-
* @return The current Zone ID.
|
244
|
-
*/
|
245
|
-
fun getZoneId(): String {
|
246
|
-
return this.zoneId ?: ""
|
247
|
-
}
|
248
|
-
|
249
|
-
/**
|
250
|
-
* Gets the configured referrer.
|
251
|
-
*
|
252
|
-
* @return The current referrer.
|
253
|
-
*/
|
254
|
-
fun getReferrer(): String {
|
255
|
-
return referrer ?: ""
|
256
|
-
}
|
257
|
-
|
258
|
-
/**
|
259
|
-
* Gets the configured URL.
|
260
|
-
*
|
261
|
-
* @return The current URL.
|
262
|
-
*/
|
263
|
-
fun getUrl(): String {
|
264
|
-
return url ?: ""
|
265
|
-
}
|
266
|
-
|
267
|
-
/**
|
268
|
-
* Gets the user token.
|
269
|
-
*
|
270
|
-
* @return The current user token.
|
271
|
-
*/
|
272
|
-
fun getUserToken(): String {
|
273
|
-
return userToken ?: ""
|
274
|
-
}
|
275
|
-
|
276
|
-
/**
|
277
|
-
* Gets the composer instance.
|
278
|
-
*
|
279
|
-
* @return The Composer instance, or null if not initialized.
|
280
|
-
*/
|
281
|
-
fun getComposer(): Composer? {
|
282
|
-
return composer
|
283
|
-
}
|
284
|
-
|
285
|
-
/**
|
286
|
-
* Gets the configured custom variables.
|
287
|
-
*
|
288
|
-
* @return A map of the custom variables.
|
289
|
-
*/
|
290
|
-
fun getCustomVariables(): Map<String, String> {
|
291
|
-
return customVariables.toMap()
|
186
|
+
fun clearConfiguration() {
|
187
|
+
this.clearTags()
|
188
|
+
this.clearCustomVariables()
|
189
|
+
this.zoneId = null
|
190
|
+
this.referrer = null
|
191
|
+
this.url = null
|
192
|
+
this.userToken = null
|
292
193
|
}
|
293
194
|
|
294
195
|
// MARK: - Execution Methods
|
@@ -79,14 +79,14 @@ class SdkPianoioModule(private val reactContext: ReactApplicationContext) : Reac
|
|
79
79
|
}
|
80
80
|
|
81
81
|
@ReactMethod
|
82
|
-
fun initialize(aid: String, promise: Promise) {
|
82
|
+
fun initialize(aid: String, isSandbox: Boolean, promise: Promise) {
|
83
83
|
try {
|
84
84
|
if (isInitialized) {
|
85
85
|
promise.resolve(true)
|
86
86
|
return
|
87
87
|
}
|
88
88
|
composerImpl = ComposerPianoImpl()
|
89
|
-
composerImpl?.initializeComposer(reactContext, aid)
|
89
|
+
composerImpl?.initializeComposer(reactContext, aid, isSandbox)
|
90
90
|
isInitialized = true
|
91
91
|
promise.resolve(true)
|
92
92
|
} catch (e: Exception) {
|
@@ -54,20 +54,10 @@ class TokenService {
|
|
54
54
|
|
55
55
|
// MARK: - Authentication Methods
|
56
56
|
|
57
|
-
/**
|
58
|
-
* Caches the token received from a successful sign-in.
|
59
|
-
*
|
60
|
-
* @param token The token to cache. Can be null to clear it.
|
61
|
-
*/
|
62
57
|
fun setToken(token: PianoIdToken?) {
|
63
58
|
this.cachedToken = token
|
64
59
|
}
|
65
60
|
|
66
|
-
/**
|
67
|
-
* Launches the Piano ID sign-in flow.
|
68
|
-
*
|
69
|
-
* @param authResultLauncher The ActivityResultLauncher from the calling Activity/Fragment.
|
70
|
-
*/
|
71
61
|
fun signIn(authResultLauncher: ActivityResultLauncher<PianoIdClient.SignInContext>) {
|
72
62
|
val localClient = client
|
73
63
|
if (localClient == null) {
|
@@ -79,11 +69,6 @@ class TokenService {
|
|
79
69
|
authResultLauncher.launch(request)
|
80
70
|
}
|
81
71
|
|
82
|
-
/**
|
83
|
-
* Signs the user out.
|
84
|
-
*
|
85
|
-
* @param callback The callback to be invoked with the result (true for success, false for failure).
|
86
|
-
*/
|
87
72
|
fun signOut(callback: (Boolean) -> Unit) {
|
88
73
|
val localClient = client
|
89
74
|
if (localClient == null) {
|
@@ -113,11 +98,6 @@ class TokenService {
|
|
113
98
|
|
114
99
|
// MARK: - User Information Methods
|
115
100
|
|
116
|
-
/**
|
117
|
-
* Gets the current user's information.
|
118
|
-
*
|
119
|
-
* @return A User object if authenticated, otherwise null.
|
120
|
-
*/
|
121
101
|
fun getCurrentUser(): User? {
|
122
102
|
val token = this.cachedToken ?: return null
|
123
103
|
// Construct a user from the token information using the getInfoField method.
|
@@ -128,11 +108,6 @@ class TokenService {
|
|
128
108
|
)
|
129
109
|
}
|
130
110
|
|
131
|
-
/**
|
132
|
-
* Checks if a user is currently authenticated.
|
133
|
-
*
|
134
|
-
* @return true if a valid token exists, false otherwise.
|
135
|
-
*/
|
136
111
|
fun isAuthenticated(): Boolean {
|
137
112
|
return this.cachedToken != null
|
138
113
|
}
|
@@ -3,32 +3,29 @@ import PianoComposer
|
|
3
3
|
import PianoOAuth
|
4
4
|
import React
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
* - Managing React Native promises across asynchronous callbacks.
|
14
|
-
*/
|
6
|
+
/// ComposerPianoImpl - Main implementation class for the Piano SDK on iOS.
|
7
|
+
///
|
8
|
+
/// This class is responsible for:
|
9
|
+
/// - Managing the Piano SDK's Composer instance.
|
10
|
+
/// - Configuring the experience request using a fluent builder pattern.
|
11
|
+
/// - Executing Piano experiences and handling results via a delegate.
|
12
|
+
/// - Managing React Native promises across asynchronous callbacks.
|
15
13
|
@objcMembers public class ComposerPianoImpl: NSObject {
|
16
14
|
|
17
15
|
// MARK: - Properties
|
18
16
|
|
19
17
|
private var composer: PianoComposer?
|
20
|
-
|
18
|
+
internal var tokenService: TokenService?
|
21
19
|
private var delegate: MyComposerDelegate?
|
22
20
|
|
23
|
-
// Promises to communicate results of async operations back to React Native
|
24
21
|
var experienceResolver: RCTPromiseResolveBlock?
|
25
22
|
var experienceRejecter: RCTPromiseRejectBlock?
|
26
23
|
|
27
|
-
// Stored configuration properties
|
28
24
|
private var tags: [String] = []
|
29
25
|
private var zoneId: String?
|
30
26
|
private var referrer: String?
|
31
27
|
private var url: String?
|
28
|
+
private var userToken: String?
|
32
29
|
private var customVariables: [String: String] = [:]
|
33
30
|
|
34
31
|
// MARK: - Initialization
|
@@ -38,7 +35,7 @@ import React
|
|
38
35
|
*
|
39
36
|
* @param aid The Piano Application ID.
|
40
37
|
*/
|
41
|
-
public func initialize(aid: String) {
|
38
|
+
public func initialize(aid: String, isSandbox: Bool) {
|
42
39
|
print("ComposerPianoImpl: Initializing with AID: \(aid)")
|
43
40
|
|
44
41
|
// 1. Initialize and store the TokenService
|
@@ -47,7 +44,8 @@ import React
|
|
47
44
|
print("ComposerPianoImpl: TokenService initialized")
|
48
45
|
|
49
46
|
// 2. Initialize the Composer instance
|
50
|
-
|
47
|
+
let endpoint = isSandbox ? PianoEndpoint.sandbox : PianoEndpoint.production
|
48
|
+
self.composer = PianoComposer(aid: aid, endpoint: endpoint)
|
51
49
|
print("ComposerPianoImpl: Composer instance created for PRODUCTION")
|
52
50
|
|
53
51
|
// 3. Initialize and set up the delegate
|
@@ -56,7 +54,33 @@ import React
|
|
56
54
|
print("ComposerPianoImpl: Delegate initialized and set")
|
57
55
|
}
|
58
56
|
|
59
|
-
// MARK: -
|
57
|
+
// MARK: - State Methods (Getters)
|
58
|
+
|
59
|
+
public func getTags() -> [String] {
|
60
|
+
return self.tags
|
61
|
+
}
|
62
|
+
|
63
|
+
public func getZoneId() -> String {
|
64
|
+
return self.zoneId ?? ""
|
65
|
+
}
|
66
|
+
|
67
|
+
public func getReferrer() -> String {
|
68
|
+
return self.referrer ?? ""
|
69
|
+
}
|
70
|
+
|
71
|
+
public func getUrl() -> String {
|
72
|
+
return self.url ?? ""
|
73
|
+
}
|
74
|
+
|
75
|
+
public func getUserToken() -> String {
|
76
|
+
return self.composer?.userToken ?? ""
|
77
|
+
}
|
78
|
+
|
79
|
+
public func getCustomVariables() -> [String: String] {
|
80
|
+
return self.customVariables
|
81
|
+
}
|
82
|
+
|
83
|
+
// MARK: - Configuration Methods (Setters)
|
60
84
|
|
61
85
|
public func addTag(_ tag: String) {
|
62
86
|
self.tags.append(tag)
|
@@ -78,23 +102,47 @@ import React
|
|
78
102
|
self.url = url
|
79
103
|
}
|
80
104
|
|
81
|
-
public func
|
105
|
+
public func setCustomVariables(_ variables: [String: String]) {
|
106
|
+
self.customVariables = variables
|
107
|
+
}
|
108
|
+
|
109
|
+
public func addCustomVariable(_ name: String, value: String) {
|
82
110
|
self.customVariables[name] = value
|
83
111
|
}
|
84
112
|
|
85
113
|
public func setUserToken(_ token: String) {
|
86
|
-
// The iOS SDK requires setting the user token on the composer instance directly
|
87
114
|
_ = self.composer?.userToken(token)
|
88
115
|
}
|
89
116
|
|
117
|
+
// MARK: - Cleanup Methods
|
118
|
+
|
119
|
+
public func clearTags() {
|
120
|
+
self.tags.removeAll()
|
121
|
+
}
|
122
|
+
|
123
|
+
public func clearCustomVariables() {
|
124
|
+
self.customVariables.removeAll()
|
125
|
+
}
|
126
|
+
|
127
|
+
public func removeTag(_ tag: String) {
|
128
|
+
self.tags.removeAll { $0 == tag }
|
129
|
+
}
|
130
|
+
|
131
|
+
public func removeCustomVariable(key: String) {
|
132
|
+
self.customVariables.removeValue(forKey: key)
|
133
|
+
}
|
134
|
+
|
135
|
+
public func clearConfiguration() {
|
136
|
+
self.clearTags()
|
137
|
+
self.clearCustomVariables()
|
138
|
+
self.zoneId = nil
|
139
|
+
self.referrer = nil
|
140
|
+
self.url = nil
|
141
|
+
self.userToken = nil
|
142
|
+
}
|
143
|
+
|
90
144
|
// MARK: - Execution Method
|
91
145
|
|
92
|
-
/**
|
93
|
-
* Executes the Piano experience with the current configuration.
|
94
|
-
*
|
95
|
-
* @param resolver The promise resolver from React Native.
|
96
|
-
* @param rejecter The promise rejecter from React Native.
|
97
|
-
*/
|
98
146
|
public func executeExperience(
|
99
147
|
resolver: @escaping RCTPromiseResolveBlock,
|
100
148
|
rejecter: @escaping RCTPromiseRejectBlock
|
@@ -104,47 +152,20 @@ import React
|
|
104
152
|
return
|
105
153
|
}
|
106
154
|
|
107
|
-
print("ComposerPianoImpl: Executing experience")
|
108
|
-
|
109
|
-
// Store the promise functions to be called by the delegate later
|
110
155
|
self.experienceResolver = resolver
|
111
156
|
self.experienceRejecter = rejecter
|
112
157
|
|
113
|
-
|
114
|
-
|
158
|
+
_ =
|
159
|
+
composer
|
115
160
|
.tags(self.tags)
|
116
|
-
.zoneId(self.zoneId ?? "")
|
117
|
-
.referrer(self.referrer ?? "")
|
118
|
-
.url(self.url ?? "")
|
161
|
+
.zoneId(self.zoneId ?? "")
|
162
|
+
.referrer(self.referrer ?? "")
|
163
|
+
.url(self.url ?? "")
|
119
164
|
|
120
165
|
for (key, value) in self.customVariables {
|
121
166
|
_ = composer.customVariable(name: key, value: value)
|
122
167
|
}
|
123
168
|
|
124
|
-
// Execute the experience. The result will be handled by the delegate.
|
125
169
|
composer.execute()
|
126
170
|
}
|
127
|
-
|
128
|
-
// MARK: - State Methods (Getters)
|
129
|
-
|
130
|
-
public func getTags() -> [String] {
|
131
|
-
return self.tags
|
132
|
-
}
|
133
|
-
|
134
|
-
public func getZoneId() -> String {
|
135
|
-
return self.zoneId ?? ""
|
136
|
-
}
|
137
|
-
|
138
|
-
public func getReferrer() -> String {
|
139
|
-
return self.referrer ?? ""
|
140
|
-
}
|
141
|
-
|
142
|
-
public func getUrl() -> String {
|
143
|
-
return self.url ?? ""
|
144
|
-
}
|
145
|
-
|
146
|
-
public func getUserToken() -> String {
|
147
|
-
// User token is write-only to the composer instance, so we return the stored value if needed.
|
148
|
-
return self.composer?.userToken ?? ""
|
149
|
-
}
|
150
171
|
}
|
package/ios/SdkPianoio.swift
CHANGED
@@ -1,76 +1,161 @@
|
|
1
1
|
import Foundation
|
2
2
|
import React
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
* This class exposes the functionality of the ComposerPianoImpl to JavaScript.
|
8
|
-
*/
|
4
|
+
/// SdkPianoio - The main React Native bridge module for the Piano SDK.
|
5
|
+
///
|
6
|
+
/// This class exposes the functionality of the ComposerPianoImpl to JavaScript.
|
9
7
|
@objc(SdkPianoio)
|
10
8
|
class SdkPianoio: NSObject {
|
11
9
|
|
12
|
-
|
13
|
-
private var moduleImpl: ComposerPianoImpl?
|
10
|
+
private var moduleImpl: ComposerPianoImpl
|
14
11
|
|
15
12
|
override init() {
|
16
13
|
self.moduleImpl = ComposerPianoImpl()
|
17
14
|
super.init()
|
18
15
|
}
|
19
16
|
|
20
|
-
@objc(initialize:resolver:rejecter:)
|
21
|
-
func initialize(
|
22
|
-
|
17
|
+
@objc(initialize:isSandbox:resolver:rejecter:)
|
18
|
+
func initialize(
|
19
|
+
aid: String, isSandbox: Bool, resolver: @escaping RCTPromiseResolveBlock,
|
20
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
21
|
+
) {
|
22
|
+
moduleImpl.initialize(aid: aid, isSandbox: isSandbox)
|
23
23
|
resolver(true)
|
24
24
|
}
|
25
25
|
|
26
26
|
// MARK: - Configuration Methods
|
27
27
|
|
28
28
|
@objc(addTag:resolver:rejecter:)
|
29
|
-
func addTag(
|
30
|
-
|
29
|
+
func addTag(
|
30
|
+
tag: String, resolver: @escaping RCTPromiseResolveBlock,
|
31
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
32
|
+
) {
|
33
|
+
moduleImpl.addTag(tag)
|
31
34
|
resolver(true)
|
32
35
|
}
|
33
36
|
|
34
37
|
@objc(addTags:resolver:rejecter:)
|
35
|
-
func addTags(
|
36
|
-
|
38
|
+
func addTags(
|
39
|
+
tags: [String], resolver: @escaping RCTPromiseResolveBlock,
|
40
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
41
|
+
) {
|
42
|
+
moduleImpl.addTags(tags)
|
37
43
|
resolver(true)
|
38
44
|
}
|
39
45
|
|
40
46
|
@objc(setZoneId:resolver:rejecter:)
|
41
|
-
func setZoneId(
|
42
|
-
|
47
|
+
func setZoneId(
|
48
|
+
zoneId: String, resolver: @escaping RCTPromiseResolveBlock,
|
49
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
50
|
+
) {
|
51
|
+
moduleImpl.setZoneId(zoneId)
|
43
52
|
resolver(true)
|
44
53
|
}
|
45
54
|
|
46
55
|
@objc(setReferrer:resolver:rejecter:)
|
47
|
-
func setReferrer(
|
48
|
-
|
56
|
+
func setReferrer(
|
57
|
+
referrer: String, resolver: @escaping RCTPromiseResolveBlock,
|
58
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
59
|
+
) {
|
60
|
+
moduleImpl.setReferrer(referrer)
|
49
61
|
resolver(true)
|
50
62
|
}
|
51
63
|
|
52
64
|
@objc(setUrl:resolver:rejecter:)
|
53
|
-
func setUrl(
|
54
|
-
|
65
|
+
func setUrl(
|
66
|
+
url: String, resolver: @escaping RCTPromiseResolveBlock,
|
67
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
68
|
+
) {
|
69
|
+
moduleImpl.setUrl(url)
|
55
70
|
resolver(true)
|
56
71
|
}
|
57
72
|
|
58
73
|
@objc(setUserToken:resolver:rejecter:)
|
59
|
-
func setUserToken(
|
60
|
-
|
74
|
+
func setUserToken(
|
75
|
+
token: String, resolver: @escaping RCTPromiseResolveBlock,
|
76
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
77
|
+
) {
|
78
|
+
moduleImpl.setUserToken(token)
|
61
79
|
resolver(true)
|
62
80
|
}
|
63
81
|
|
64
|
-
@objc(
|
65
|
-
func
|
66
|
-
|
82
|
+
@objc(addCustomVariable:value:resolver:rejecter:)
|
83
|
+
func addCustomVariable(
|
84
|
+
name: String, value: String, resolver: @escaping RCTPromiseResolveBlock,
|
85
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
86
|
+
) {
|
87
|
+
moduleImpl.addCustomVariable(name, value: value)
|
88
|
+
resolver(true)
|
89
|
+
}
|
90
|
+
|
91
|
+
@objc(setCustomVariables:resolver:rejecter:)
|
92
|
+
func setCustomVariables(
|
93
|
+
variables: [String: String], resolver: @escaping RCTPromiseResolveBlock,
|
94
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
95
|
+
) {
|
96
|
+
moduleImpl.setCustomVariables(variables)
|
67
97
|
resolver(true)
|
68
98
|
}
|
69
99
|
|
70
100
|
// MARK: - Execution Method
|
71
101
|
|
72
102
|
@objc(executeExperience:rejecter:)
|
73
|
-
func executeExperience(
|
74
|
-
|
103
|
+
func executeExperience(
|
104
|
+
resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
105
|
+
) {
|
106
|
+
moduleImpl.executeExperience(resolver: resolver, rejecter: rejecter)
|
107
|
+
}
|
108
|
+
|
109
|
+
// MARK: - Authentication Methods
|
110
|
+
|
111
|
+
@objc(signIn:rejecter:)
|
112
|
+
func signIn(
|
113
|
+
resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
114
|
+
) {
|
115
|
+
// Correctly call signIn on the tokenService instance
|
116
|
+
moduleImpl.tokenService?.signIn(resolver: resolver, rejecter: rejecter)
|
117
|
+
}
|
118
|
+
|
119
|
+
@objc(signOut:rejecter:)
|
120
|
+
func signOut(
|
121
|
+
resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
122
|
+
) {
|
123
|
+
moduleImpl.tokenService?.signOut(resolver: resolver, rejecter: rejecter)
|
124
|
+
}
|
125
|
+
|
126
|
+
@objc(getCurrentUser:rejecter:)
|
127
|
+
func getCurrentUser(
|
128
|
+
resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
129
|
+
) {
|
130
|
+
if let user = moduleImpl.tokenService?.getCurrentUser() {
|
131
|
+
let userMap: [String: Any] = [
|
132
|
+
"success": true,
|
133
|
+
"userId": user.id,
|
134
|
+
"userEmail": user.email,
|
135
|
+
"accessToken": user.accessToken,
|
136
|
+
"authenticated": true,
|
137
|
+
]
|
138
|
+
resolver(userMap)
|
139
|
+
} else {
|
140
|
+
resolver(["success": true, "authenticated": false])
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
@objc(isAuthenticated:rejecter:)
|
145
|
+
func isAuthenticated(
|
146
|
+
resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
147
|
+
) {
|
148
|
+
let isAuth = moduleImpl.tokenService?.isAuthenticated() ?? false
|
149
|
+
resolver(["authenticated": isAuth])
|
150
|
+
}
|
151
|
+
|
152
|
+
// MARK: - Helper and Cleanup Methods
|
153
|
+
|
154
|
+
@objc(clearConfiguration:rejecter:)
|
155
|
+
func clearConfiguration(
|
156
|
+
resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
157
|
+
) {
|
158
|
+
moduleImpl.clearConfiguration()
|
159
|
+
resolver(true)
|
75
160
|
}
|
76
161
|
}
|
package/ios/SdkPianoioBridge.m
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
// MARK: - Initialization
|
7
7
|
|
8
8
|
RCT_EXTERN_METHOD(initialize:(NSString *)aid
|
9
|
+
isSandbox:(BOOL)isSandbox
|
9
10
|
resolver:(RCTPromiseResolveBlock)resolve
|
10
11
|
rejecter:(RCTPromiseRejectBlock)reject)
|
11
12
|
|
@@ -35,19 +36,37 @@ RCT_EXTERN_METHOD(setUserToken:(NSString *)token
|
|
35
36
|
resolver:(RCTPromiseResolveBlock)resolve
|
36
37
|
rejecter:(RCTPromiseRejectBlock)reject)
|
37
38
|
|
38
|
-
RCT_EXTERN_METHOD(
|
39
|
+
RCT_EXTERN_METHOD(addCustomVariable:(NSString *)name
|
39
40
|
value:(NSString *)value
|
40
41
|
resolver:(RCTPromiseResolveBlock)resolve
|
41
42
|
rejecter:(RCTPromiseRejectBlock)reject)
|
42
43
|
|
44
|
+
RCT_EXTERN_METHOD(setCustomVariables:(NSDictionary *)variables
|
45
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
46
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
47
|
+
|
43
48
|
// MARK: - Execution Method
|
44
49
|
|
45
50
|
RCT_EXTERN_METHOD(executeExperience:(RCTPromiseResolveBlock)resolve
|
46
51
|
rejecter:(RCTPromiseRejectBlock)reject)
|
47
52
|
|
48
|
-
//
|
49
|
-
|
50
|
-
|
51
|
-
|
53
|
+
// MARK: - Authentication Methods
|
54
|
+
|
55
|
+
RCT_EXTERN_METHOD(signIn:(RCTPromiseResolveBlock)resolve
|
56
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
57
|
+
|
58
|
+
RCT_EXTERN_METHOD(signOut:(RCTPromiseResolveBlock)resolve
|
59
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
60
|
+
|
61
|
+
RCT_EXTERN_METHOD(getCurrentUser:(RCTPromiseResolveBlock)resolve
|
62
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
63
|
+
|
64
|
+
RCT_EXTERN_METHOD(isAuthenticated:(RCTPromiseResolveBlock)resolve
|
65
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
66
|
+
|
67
|
+
// MARK: - Helper and Cleanup Methods
|
68
|
+
|
69
|
+
RCT_EXTERN_METHOD(clearConfiguration:(RCTPromiseResolveBlock)resolve
|
70
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
52
71
|
|
53
72
|
@end
|
package/ios/TokenService.swift
CHANGED
@@ -16,7 +16,7 @@ public class User {
|
|
16
16
|
self.accessToken = accessToken
|
17
17
|
}
|
18
18
|
}
|
19
|
-
|
19
|
+
|
20
20
|
/**
|
21
21
|
* TokenService - Manages OAuth tokens and authentication with the Piano ID SDK.
|
22
22
|
*
|
@@ -40,11 +40,6 @@ public class TokenService: NSObject, PianoIDDelegate {
|
|
40
40
|
|
41
41
|
// MARK: - Initialization
|
42
42
|
|
43
|
-
/**
|
44
|
-
* Initializes the TokenService and configures the PianoID singleton.
|
45
|
-
*
|
46
|
-
* @param aid The Piano Application ID.
|
47
|
-
*/
|
48
43
|
public func initialize(aid: String) {
|
49
44
|
if isInitialized {
|
50
45
|
return
|
@@ -61,12 +56,8 @@ public class TokenService: NSObject, PianoIDDelegate {
|
|
61
56
|
|
62
57
|
// MARK: - Authentication Methods
|
63
58
|
|
64
|
-
|
65
|
-
|
66
|
-
*
|
67
|
-
* @param resolver The promise resolver from React Native.
|
68
|
-
* @param rejecter The promise rejecter from React Native.
|
69
|
-
*/
|
59
|
+
// Missing set tokens no?
|
60
|
+
|
70
61
|
public func signIn(resolver: @escaping (Any?) -> Void, rejecter: @escaping (String?, String?, Error?) -> Void) {
|
71
62
|
if !isInitialized {
|
72
63
|
print("TokenService: Not initialized. Call initialize() first.")
|
@@ -79,12 +70,7 @@ public class TokenService: NSObject, PianoIDDelegate {
|
|
79
70
|
PianoID.shared.signIn()
|
80
71
|
}
|
81
72
|
|
82
|
-
|
83
|
-
* Starts the sign-out process.
|
84
|
-
*
|
85
|
-
* @param resolver The promise resolver from React Native.
|
86
|
-
* @param rejecter The promise rejecter from React Native.
|
87
|
-
*/
|
73
|
+
|
88
74
|
public func signOut(resolver: @escaping (Any?) -> Void, rejecter: @escaping (String?, String?, Error?) -> Void) {
|
89
75
|
if !isInitialized {
|
90
76
|
print("TokenService: Not initialized.")
|
@@ -105,11 +91,6 @@ public class TokenService: NSObject, PianoIDDelegate {
|
|
105
91
|
|
106
92
|
// MARK: - User Information Methods
|
107
93
|
|
108
|
-
/**
|
109
|
-
* Gets the current user's information.
|
110
|
-
*
|
111
|
-
* @return A User object if authenticated, otherwise null.
|
112
|
-
*/
|
113
94
|
public func getCurrentUser() -> User? {
|
114
95
|
guard let token = self.cachedToken else {
|
115
96
|
return nil
|
@@ -129,11 +110,6 @@ public class TokenService: NSObject, PianoIDDelegate {
|
|
129
110
|
)
|
130
111
|
}
|
131
112
|
|
132
|
-
/**
|
133
|
-
* Checks if a user is currently authenticated.
|
134
|
-
*
|
135
|
-
* @return true if a valid token exists, false otherwise.
|
136
|
-
*/
|
137
113
|
public func isAuthenticated() -> Bool {
|
138
114
|
return self.cachedToken != nil
|
139
115
|
}
|
@@ -157,7 +133,7 @@ public class TokenService: NSObject, PianoIDDelegate {
|
|
157
133
|
print("TokenService: Sign in failed: \(e.localizedDescription)")
|
158
134
|
self.signInRejecter?("SIGNIN_ERROR", e.localizedDescription, e)
|
159
135
|
}
|
160
|
-
|
136
|
+
|
161
137
|
self.signInResolver = nil
|
162
138
|
self.signInRejecter = nil
|
163
139
|
}
|
@@ -188,12 +164,6 @@ public class TokenService: NSObject, PianoIDDelegate {
|
|
188
164
|
|
189
165
|
// MARK: - Helper Methods
|
190
166
|
|
191
|
-
/**
|
192
|
-
* Decodes the payload of a JWT.
|
193
|
-
*
|
194
|
-
* @param jwt The JSON Web Token string.
|
195
|
-
* @return A dictionary of claims, or nil if decoding fails.
|
196
|
-
*/
|
197
167
|
private func decode(jwtToken jwt: String) -> [String: Any]? {
|
198
168
|
let segments = jwt.components(separatedBy: ".")
|
199
169
|
guard segments.count > 1 else {
|
@@ -7,7 +7,7 @@ import { NativeModules, Platform } from 'react-native';
|
|
7
7
|
*/
|
8
8
|
interface SdkPianoioType {
|
9
9
|
// Initialization
|
10
|
-
initialize(aid: string): Promise<boolean>;
|
10
|
+
initialize(aid: string, isSandbox: boolean): Promise<boolean>;
|
11
11
|
|
12
12
|
// Configuration
|
13
13
|
addTag(tag: string): Promise<boolean>;
|
@@ -21,9 +21,9 @@ class PianoComposer {
|
|
21
21
|
* This is the main entry point for using the library.
|
22
22
|
* @param aid Your Application ID from Piano.io
|
23
23
|
*/
|
24
|
-
static async create(aid) {
|
24
|
+
static async create(aid, isSandbox = false) {
|
25
25
|
// Call the corrected native initialize method
|
26
|
-
await _NativeSdkPianoio.default.initialize(aid);
|
26
|
+
await _NativeSdkPianoio.default.initialize(aid, isSandbox);
|
27
27
|
return new PianoComposer();
|
28
28
|
}
|
29
29
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_NativeSdkPianoio","_interopRequireDefault","require","e","__esModule","default","PianoComposer","constructor","create","aid","SdkPianoio","initialize","addTag","tag","addTags","tags","setZoneId","zoneId","setReferrer","referrer","setCustomVariable","name","value","addCustomVariable","setCustomVariables","variables","setUserToken","token","setUrl","url","signIn","signOut","getCurrentUser","isAuthenticated","executeExperience","getStatus","clearConfiguration","_default","exports"],"sourceRoot":"../../src","sources":["PianoComposer.tsx"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE5C;AACA;AACA;AACA;AACA,MAAMG,aAAa,CAAC;EAClB;EACQC,WAAWA,CAAA,EAAG;IACpB;EAAA;;EAGF;AACF;AACA;AACA;AACA;EACE,aAAaC,MAAMA,
|
1
|
+
{"version":3,"names":["_NativeSdkPianoio","_interopRequireDefault","require","e","__esModule","default","PianoComposer","constructor","create","aid","isSandbox","SdkPianoio","initialize","addTag","tag","addTags","tags","setZoneId","zoneId","setReferrer","referrer","setCustomVariable","name","value","addCustomVariable","setCustomVariables","variables","setUserToken","token","setUrl","url","signIn","signOut","getCurrentUser","isAuthenticated","executeExperience","getStatus","clearConfiguration","_default","exports"],"sourceRoot":"../../src","sources":["PianoComposer.tsx"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE5C;AACA;AACA;AACA;AACA,MAAMG,aAAa,CAAC;EAClB;EACQC,WAAWA,CAAA,EAAG;IACpB;EAAA;;EAGF;AACF;AACA;AACA;AACA;EACE,aAAaC,MAAMA,CACjBC,GAAW,EACXC,SAAkB,GAAG,KAAK,EACF;IACxB;IACA,MAAMC,yBAAU,CAACC,UAAU,CAACH,GAAG,EAAEC,SAAS,CAAC;IAC3C,OAAO,IAAIJ,aAAa,CAAC,CAAC;EAC5B;;EAEA;;EAEA,MAAMO,MAAMA,CAACC,GAAW,EAAoB;IAC1C,OAAOH,yBAAU,CAACE,MAAM,CAACC,GAAG,CAAC;EAC/B;EAEA,MAAMC,OAAOA,CAACC,IAAc,EAAoB;IAC9C,OAAOL,yBAAU,CAACI,OAAO,CAACC,IAAI,CAAC;EACjC;EAEA,MAAMC,SAASA,CAACC,MAAc,EAAoB;IAChD,OAAOP,yBAAU,CAACM,SAAS,CAACC,MAAM,CAAC;EACrC;EAEA,MAAMC,WAAWA,CAACC,QAAgB,EAAoB;IACpD,OAAOT,yBAAU,CAACQ,WAAW,CAACC,QAAQ,CAAC;EACzC;EAEA,MAAMC,iBAAiBA,CAACC,IAAY,EAAEC,KAAa,EAAoB;IACrE,OAAOZ,yBAAU,CAACa,iBAAiB,CAACF,IAAI,EAAEC,KAAK,CAAC;EAClD;EAEA,MAAME,kBAAkBA,CAACC,SAExB,EAAoB;IACnB,OAAOf,yBAAU,CAACc,kBAAkB,CAACC,SAAS,CAAC;EACjD;EAEA,MAAMC,YAAYA,CAACC,KAAa,EAAoB;IAClD,OAAOjB,yBAAU,CAACgB,YAAY,CAACC,KAAK,CAAC;EACvC;EAEA,MAAMC,MAAMA,CAACC,GAAW,EAAoB;IAC1C,OAAOnB,yBAAU,CAACkB,MAAM,CAACC,GAAG,CAAC;EAC/B;;EAEA;;EAEA;AACF;AACA;AACA;EACE,MAAMC,MAAMA,CAAA,EAAiB;IAC3B,OAAOpB,yBAAU,CAACoB,MAAM,CAAC,CAAC;EAC5B;;EAEA;AACF;AACA;AACA;EACE,MAAMC,OAAOA,CAAA,EAAiB;IAC5B,OAAOrB,yBAAU,CAACqB,OAAO,CAAC,CAAC;EAC7B;;EAEA;AACF;AACA;AACA;EACE,MAAMC,cAAcA,CAAA,EAAiB;IACnC,OAAOtB,yBAAU,CAACsB,cAAc,CAAC,CAAC;EACpC;;EAEA;AACF;AACA;AACA;EACE,MAAMC,eAAeA,CAAA,EAAiB;IACpC,OAAOvB,yBAAU,CAACuB,eAAe,CAAC,CAAC;EACrC;;EAEA;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMC,iBAAiBA,CAAA,EAAiB;IACtC,OAAOxB,yBAAU,CAACwB,iBAAiB,CAAC,CAAC;EACvC;;EAEA;;EAEA;AACF;AACA;AACA;EACE,MAAMC,SAASA,CAAA,EAAiB;IAC9B,OAAOzB,yBAAU,CAACyB,SAAS,CAAC,CAAC;EAC/B;;EAEA;AACF;AACA;AACA;EACE,MAAMC,kBAAkBA,CAAA,EAAqB;IAC3C,OAAO1B,yBAAU,CAAC0B,kBAAkB,CAAC,CAAC;EACxC;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAlC,OAAA,GAEcC,aAAa","ignoreList":[]}
|
@@ -7,7 +7,7 @@ import { NativeModules, Platform } from 'react-native';
|
|
7
7
|
*/
|
8
8
|
interface SdkPianoioType {
|
9
9
|
// Initialization
|
10
|
-
initialize(aid: string): Promise<boolean>;
|
10
|
+
initialize(aid: string, isSandbox: boolean): Promise<boolean>;
|
11
11
|
|
12
12
|
// Configuration
|
13
13
|
addTag(tag: string): Promise<boolean>;
|
@@ -17,9 +17,9 @@ class PianoComposer {
|
|
17
17
|
* This is the main entry point for using the library.
|
18
18
|
* @param aid Your Application ID from Piano.io
|
19
19
|
*/
|
20
|
-
static async create(aid) {
|
20
|
+
static async create(aid, isSandbox = false) {
|
21
21
|
// Call the corrected native initialize method
|
22
|
-
await SdkPianoio.initialize(aid);
|
22
|
+
await SdkPianoio.initialize(aid, isSandbox);
|
23
23
|
return new PianoComposer();
|
24
24
|
}
|
25
25
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["SdkPianoio","PianoComposer","constructor","create","aid","initialize","addTag","tag","addTags","tags","setZoneId","zoneId","setReferrer","referrer","setCustomVariable","name","value","addCustomVariable","setCustomVariables","variables","setUserToken","token","setUrl","url","signIn","signOut","getCurrentUser","isAuthenticated","executeExperience","getStatus","clearConfiguration"],"sourceRoot":"../../src","sources":["PianoComposer.tsx"],"mappings":";;AAAA,OAAOA,UAAU,MAAM,oBAAoB;;AAE3C;AACA;AACA;AACA;AACA,MAAMC,aAAa,CAAC;EAClB;EACQC,WAAWA,CAAA,EAAG;IACpB;EAAA;;EAGF;AACF;AACA;AACA;AACA;EACE,aAAaC,MAAMA,
|
1
|
+
{"version":3,"names":["SdkPianoio","PianoComposer","constructor","create","aid","isSandbox","initialize","addTag","tag","addTags","tags","setZoneId","zoneId","setReferrer","referrer","setCustomVariable","name","value","addCustomVariable","setCustomVariables","variables","setUserToken","token","setUrl","url","signIn","signOut","getCurrentUser","isAuthenticated","executeExperience","getStatus","clearConfiguration"],"sourceRoot":"../../src","sources":["PianoComposer.tsx"],"mappings":";;AAAA,OAAOA,UAAU,MAAM,oBAAoB;;AAE3C;AACA;AACA;AACA;AACA,MAAMC,aAAa,CAAC;EAClB;EACQC,WAAWA,CAAA,EAAG;IACpB;EAAA;;EAGF;AACF;AACA;AACA;AACA;EACE,aAAaC,MAAMA,CACjBC,GAAW,EACXC,SAAkB,GAAG,KAAK,EACF;IACxB;IACA,MAAML,UAAU,CAACM,UAAU,CAACF,GAAG,EAAEC,SAAS,CAAC;IAC3C,OAAO,IAAIJ,aAAa,CAAC,CAAC;EAC5B;;EAEA;;EAEA,MAAMM,MAAMA,CAACC,GAAW,EAAoB;IAC1C,OAAOR,UAAU,CAACO,MAAM,CAACC,GAAG,CAAC;EAC/B;EAEA,MAAMC,OAAOA,CAACC,IAAc,EAAoB;IAC9C,OAAOV,UAAU,CAACS,OAAO,CAACC,IAAI,CAAC;EACjC;EAEA,MAAMC,SAASA,CAACC,MAAc,EAAoB;IAChD,OAAOZ,UAAU,CAACW,SAAS,CAACC,MAAM,CAAC;EACrC;EAEA,MAAMC,WAAWA,CAACC,QAAgB,EAAoB;IACpD,OAAOd,UAAU,CAACa,WAAW,CAACC,QAAQ,CAAC;EACzC;EAEA,MAAMC,iBAAiBA,CAACC,IAAY,EAAEC,KAAa,EAAoB;IACrE,OAAOjB,UAAU,CAACkB,iBAAiB,CAACF,IAAI,EAAEC,KAAK,CAAC;EAClD;EAEA,MAAME,kBAAkBA,CAACC,SAExB,EAAoB;IACnB,OAAOpB,UAAU,CAACmB,kBAAkB,CAACC,SAAS,CAAC;EACjD;EAEA,MAAMC,YAAYA,CAACC,KAAa,EAAoB;IAClD,OAAOtB,UAAU,CAACqB,YAAY,CAACC,KAAK,CAAC;EACvC;EAEA,MAAMC,MAAMA,CAACC,GAAW,EAAoB;IAC1C,OAAOxB,UAAU,CAACuB,MAAM,CAACC,GAAG,CAAC;EAC/B;;EAEA;;EAEA;AACF;AACA;AACA;EACE,MAAMC,MAAMA,CAAA,EAAiB;IAC3B,OAAOzB,UAAU,CAACyB,MAAM,CAAC,CAAC;EAC5B;;EAEA;AACF;AACA;AACA;EACE,MAAMC,OAAOA,CAAA,EAAiB;IAC5B,OAAO1B,UAAU,CAAC0B,OAAO,CAAC,CAAC;EAC7B;;EAEA;AACF;AACA;AACA;EACE,MAAMC,cAAcA,CAAA,EAAiB;IACnC,OAAO3B,UAAU,CAAC2B,cAAc,CAAC,CAAC;EACpC;;EAEA;AACF;AACA;AACA;EACE,MAAMC,eAAeA,CAAA,EAAiB;IACpC,OAAO5B,UAAU,CAAC4B,eAAe,CAAC,CAAC;EACrC;;EAEA;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMC,iBAAiBA,CAAA,EAAiB;IACtC,OAAO7B,UAAU,CAAC6B,iBAAiB,CAAC,CAAC;EACvC;;EAEA;;EAEA;AACF;AACA;AACA;EACE,MAAMC,SAASA,CAAA,EAAiB;IAC9B,OAAO9B,UAAU,CAAC8B,SAAS,CAAC,CAAC;EAC/B;;EAEA;AACF;AACA;AACA;EACE,MAAMC,kBAAkBA,CAAA,EAAqB;IAC3C,OAAO/B,UAAU,CAAC+B,kBAAkB,CAAC,CAAC;EACxC;AACF;AAEA,eAAe9B,aAAa","ignoreList":[]}
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* in SdkPianoioModule.kt.
|
5
5
|
*/
|
6
6
|
interface SdkPianoioType {
|
7
|
-
initialize(aid: string): Promise<boolean>;
|
7
|
+
initialize(aid: string, isSandbox: boolean): Promise<boolean>;
|
8
8
|
addTag(tag: string): Promise<boolean>;
|
9
9
|
addTags(tags: string[]): Promise<boolean>;
|
10
10
|
setZoneId(zoneId: string): Promise<boolean>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"NativeSdkPianoio.d.ts","sourceRoot":"","sources":["../../../../src/NativeSdkPianoio.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,UAAU,cAAc;IAEtB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"NativeSdkPianoio.d.ts","sourceRoot":"","sources":["../../../../src/NativeSdkPianoio.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,UAAU,cAAc;IAEtB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAG9D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,kBAAkB,CAAC,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAG3E,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAGlC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAGhC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;wBAW4B,cAAc;AAA3C,wBAA4C"}
|
@@ -9,7 +9,7 @@ declare class PianoComposer {
|
|
9
9
|
* This is the main entry point for using the library.
|
10
10
|
* @param aid Your Application ID from Piano.io
|
11
11
|
*/
|
12
|
-
static create(aid: string): Promise<PianoComposer>;
|
12
|
+
static create(aid: string, isSandbox?: boolean): Promise<PianoComposer>;
|
13
13
|
addTag(tag: string): Promise<boolean>;
|
14
14
|
addTags(tags: string[]): Promise<boolean>;
|
15
15
|
setZoneId(zoneId: string): Promise<boolean>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PianoComposer.d.ts","sourceRoot":"","sources":["../../../../src/PianoComposer.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,cAAM,aAAa;IAEjB,OAAO;IAIP;;;;OAIG;WACU,MAAM,
|
1
|
+
{"version":3,"file":"PianoComposer.d.ts","sourceRoot":"","sources":["../../../../src/PianoComposer.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,cAAM,aAAa;IAEjB,OAAO;IAIP;;;;OAIG;WACU,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,aAAa,CAAC;IAQnB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE,kBAAkB,CAAC,SAAS,EAAE;QAClC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,OAAO,CAAC;IAId,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAI5B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAI7B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAIpC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IAMrC;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC;IAMvC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IAI/B;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;CAG7C;AAED,eAAe,aAAa,CAAC"}
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* in SdkPianoioModule.kt.
|
5
5
|
*/
|
6
6
|
interface SdkPianoioType {
|
7
|
-
initialize(aid: string): Promise<boolean>;
|
7
|
+
initialize(aid: string, isSandbox: boolean): Promise<boolean>;
|
8
8
|
addTag(tag: string): Promise<boolean>;
|
9
9
|
addTags(tags: string[]): Promise<boolean>;
|
10
10
|
setZoneId(zoneId: string): Promise<boolean>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"NativeSdkPianoio.d.ts","sourceRoot":"","sources":["../../../../src/NativeSdkPianoio.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,UAAU,cAAc;IAEtB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"NativeSdkPianoio.d.ts","sourceRoot":"","sources":["../../../../src/NativeSdkPianoio.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,UAAU,cAAc;IAEtB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAG9D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,kBAAkB,CAAC,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAG3E,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAGlC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAGhC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;wBAW4B,cAAc;AAA3C,wBAA4C"}
|
@@ -9,7 +9,7 @@ declare class PianoComposer {
|
|
9
9
|
* This is the main entry point for using the library.
|
10
10
|
* @param aid Your Application ID from Piano.io
|
11
11
|
*/
|
12
|
-
static create(aid: string): Promise<PianoComposer>;
|
12
|
+
static create(aid: string, isSandbox?: boolean): Promise<PianoComposer>;
|
13
13
|
addTag(tag: string): Promise<boolean>;
|
14
14
|
addTags(tags: string[]): Promise<boolean>;
|
15
15
|
setZoneId(zoneId: string): Promise<boolean>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PianoComposer.d.ts","sourceRoot":"","sources":["../../../../src/PianoComposer.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,cAAM,aAAa;IAEjB,OAAO;IAIP;;;;OAIG;WACU,MAAM,
|
1
|
+
{"version":3,"file":"PianoComposer.d.ts","sourceRoot":"","sources":["../../../../src/PianoComposer.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,cAAM,aAAa;IAEjB,OAAO;IAIP;;;;OAIG;WACU,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,aAAa,CAAC;IAQnB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE,kBAAkB,CAAC,SAAS,EAAE;QAClC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,OAAO,CAAC;IAId,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAI5B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAI7B;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAIpC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IAMrC;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC;IAMvC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IAI/B;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;CAG7C;AAED,eAAe,aAAa,CAAC"}
|
package/package.json
CHANGED
package/src/NativeSdkPianoio.ts
CHANGED
@@ -7,7 +7,7 @@ import { NativeModules, Platform } from 'react-native';
|
|
7
7
|
*/
|
8
8
|
interface SdkPianoioType {
|
9
9
|
// Initialization
|
10
|
-
initialize(aid: string): Promise<boolean>;
|
10
|
+
initialize(aid: string, isSandbox: boolean): Promise<boolean>;
|
11
11
|
|
12
12
|
// Configuration
|
13
13
|
addTag(tag: string): Promise<boolean>;
|
package/src/PianoComposer.tsx
CHANGED
@@ -15,9 +15,12 @@ class PianoComposer {
|
|
15
15
|
* This is the main entry point for using the library.
|
16
16
|
* @param aid Your Application ID from Piano.io
|
17
17
|
*/
|
18
|
-
static async create(
|
18
|
+
static async create(
|
19
|
+
aid: string,
|
20
|
+
isSandbox: boolean = false
|
21
|
+
): Promise<PianoComposer> {
|
19
22
|
// Call the corrected native initialize method
|
20
|
-
await SdkPianoio.initialize(aid);
|
23
|
+
await SdkPianoio.initialize(aid, isSandbox);
|
21
24
|
return new PianoComposer();
|
22
25
|
}
|
23
26
|
|
@@ -43,7 +46,9 @@ class PianoComposer {
|
|
43
46
|
return SdkPianoio.addCustomVariable(name, value);
|
44
47
|
}
|
45
48
|
|
46
|
-
async setCustomVariables(variables: {
|
49
|
+
async setCustomVariables(variables: {
|
50
|
+
[key: string]: string;
|
51
|
+
}): Promise<boolean> {
|
47
52
|
return SdkPianoio.setCustomVariables(variables);
|
48
53
|
}
|
49
54
|
|