spotny-sdk 0.5.2 → 0.5.4
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.
Potentially problematic release.
This version of spotny-sdk might be problematic. Click here for more details.
- package/README.md +117 -66
- package/android/src/main/java/com/spotnysdk/SpotnySdkModule.kt +3 -2
- package/ios/SpotnyBeaconScanner.swift +3 -2
- package/ios/SpotnySdk.mm +4 -4
- package/lib/module/index.js +4 -5
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/NativeSpotnySdk.d.ts +1 -1
- package/lib/typescript/src/NativeSpotnySdk.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativeSpotnySdk.ts +2 -2
- package/src/index.tsx +4 -5
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# spotny-sdk
|
|
2
2
|
|
|
3
|
-
A React Native SDK for real-time proximity experiences. Detects nearby
|
|
3
|
+
A React Native SDK for real-time iBeacon proximity experiences. Detects nearby beacons, fetches campaigns, and fires tracking events automatically on iOS and Android.
|
|
4
4
|
|
|
5
5
|
> Requires **React Native 0.73+** with the New Architecture (Turbo Modules) enabled.
|
|
6
6
|
|
|
@@ -31,13 +31,11 @@ Add the following keys to your `Info.plist`:
|
|
|
31
31
|
<string>We use Bluetooth to detect nearby points of interest.</string>
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Enable **Background Modes** in Xcode → your app target → **Signing & Capabilities** →
|
|
34
|
+
Enable **Background Modes** in Xcode → your app target → **Signing & Capabilities** → Background Modes:
|
|
35
35
|
|
|
36
36
|
- ✅ Location updates
|
|
37
37
|
- ✅ Uses Bluetooth LE accessories
|
|
38
38
|
|
|
39
|
-
> **Note:** Background scanning requires the _Location updates_ background mode. The SDK works without it for foreground-only use.
|
|
40
|
-
|
|
41
39
|
### Android
|
|
42
40
|
|
|
43
41
|
Add to `AndroidManifest.xml`:
|
|
@@ -57,31 +55,37 @@ Add to `AndroidManifest.xml`:
|
|
|
57
55
|
```tsx
|
|
58
56
|
import { useEffect } from 'react';
|
|
59
57
|
import {
|
|
60
|
-
|
|
58
|
+
initialize,
|
|
61
59
|
startScanner,
|
|
62
60
|
stopScanner,
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
addBeaconsRangedListener,
|
|
62
|
+
addBeaconRegionListener,
|
|
65
63
|
} from 'spotny-sdk';
|
|
66
64
|
|
|
67
65
|
export default function App() {
|
|
68
66
|
useEffect(() => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
// 1. Initialize once before anything else
|
|
68
|
+
initialize({ source: 'nike', maxDetectionDistance: 10 });
|
|
69
|
+
|
|
70
|
+
// 2. Listen for nearby beacons
|
|
71
|
+
const beaconSub = addBeaconsRangedListener(({ beacons, region }) => {
|
|
72
|
+
beacons.forEach((b) =>
|
|
73
|
+
console.log(`${b.major}/${b.minor} — ${b.distance.toFixed(1)}m (${b.proximity})`)
|
|
74
|
+
);
|
|
74
75
|
});
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
// 3. Listen for region enter/exit
|
|
78
|
+
const regionSub = addBeaconRegionListener(({ event, region }) => {
|
|
79
|
+
console.log(`${event.toUpperCase()}: ${region}`);
|
|
79
80
|
});
|
|
80
81
|
|
|
82
|
+
// 4. Start scanning
|
|
83
|
+
startScanner();
|
|
84
|
+
|
|
81
85
|
return () => {
|
|
82
86
|
stopScanner();
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
beaconSub.remove();
|
|
88
|
+
regionSub.remove();
|
|
85
89
|
};
|
|
86
90
|
}, []);
|
|
87
91
|
|
|
@@ -93,53 +97,55 @@ export default function App() {
|
|
|
93
97
|
|
|
94
98
|
## API Reference
|
|
95
99
|
|
|
96
|
-
###
|
|
100
|
+
### Initialization
|
|
97
101
|
|
|
98
|
-
#### `
|
|
102
|
+
#### `initialize(config)`
|
|
99
103
|
|
|
100
|
-
|
|
104
|
+
**Must be called before any other SDK function.** Configures the SDK with your brand settings.
|
|
101
105
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
| `
|
|
105
|
-
| `
|
|
106
|
+
| Option | Type | Default | Description |
|
|
107
|
+
| ------------------------- | -------- | ------- | -------------------------------------------------------------- |
|
|
108
|
+
| `source` | `string` | – | Your brand or app identifier (e.g. `'nike'`). Sent with every tracking event. |
|
|
109
|
+
| `maxDetectionDistance` | `number` | `8.0` | Maximum detection radius in metres. Beacons beyond this are ignored. |
|
|
110
|
+
| `distanceCorrectionFactor`| `number` | `0.5` | Multiplier applied to raw RSSI distance. Tune for your beacon TX power. |
|
|
106
111
|
|
|
107
112
|
Returns `Promise<string>`.
|
|
108
113
|
|
|
109
114
|
```ts
|
|
110
|
-
await
|
|
115
|
+
await initialize({
|
|
116
|
+
source: 'nike',
|
|
117
|
+
maxDetectionDistance: 10,
|
|
118
|
+
distanceCorrectionFactor: 0.5,
|
|
119
|
+
});
|
|
111
120
|
```
|
|
112
121
|
|
|
113
122
|
---
|
|
114
123
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
Stops scanning and clears all state.
|
|
124
|
+
### Core Scanning
|
|
118
125
|
|
|
119
|
-
|
|
126
|
+
#### `startScanner()`
|
|
120
127
|
|
|
121
|
-
|
|
128
|
+
Starts iBeacon scanning. The SDK manages a fully anonymous `device_id` internally (stored in Keychain on iOS, SharedPreferences on Android — persists across launches).
|
|
122
129
|
|
|
123
|
-
|
|
130
|
+
Returns `Promise<string>`.
|
|
124
131
|
|
|
125
|
-
|
|
132
|
+
```ts
|
|
133
|
+
await startScanner();
|
|
134
|
+
```
|
|
126
135
|
|
|
127
136
|
---
|
|
128
137
|
|
|
129
|
-
|
|
138
|
+
#### `stopScanner()`
|
|
130
139
|
|
|
131
|
-
|
|
140
|
+
Stops scanning and cleans up all per-beacon state (sends `PROXIMITY_EXIT` events for any active beacons).
|
|
141
|
+
|
|
142
|
+
Returns `Promise<string>`.
|
|
132
143
|
|
|
133
|
-
|
|
144
|
+
---
|
|
134
145
|
|
|
135
|
-
|
|
136
|
-
| ---------------------- | -------- | ------- | -------------------------------------------- |
|
|
137
|
-
| `source` | `string` | – | Your brand or app identifier (e.g. `'nike'`) |
|
|
138
|
-
| `maxDetectionDistance` | `number` | `8.0` | Detection radius in metres |
|
|
146
|
+
#### `isScanning()`
|
|
139
147
|
|
|
140
|
-
|
|
141
|
-
await configure({ source: 'nike', maxDetectionDistance: 10 });
|
|
142
|
-
```
|
|
148
|
+
Returns `Promise<boolean>` — `true` if the scanner is currently active.
|
|
143
149
|
|
|
144
150
|
---
|
|
145
151
|
|
|
@@ -147,9 +153,9 @@ await configure({ source: 'nike', maxDetectionDistance: 10 });
|
|
|
147
153
|
|
|
148
154
|
#### `requestNotificationPermissions()` _(iOS only)_
|
|
149
155
|
|
|
150
|
-
|
|
156
|
+
Prompts the user for local notification permission (`alert`, `sound`, `badge`).
|
|
151
157
|
|
|
152
|
-
Returns `Promise<
|
|
158
|
+
Returns `Promise<'granted' | 'denied'>`.
|
|
153
159
|
|
|
154
160
|
---
|
|
155
161
|
|
|
@@ -157,44 +163,52 @@ Returns `Promise<string>`.
|
|
|
157
163
|
|
|
158
164
|
#### `addBeaconsRangedListener(callback)`
|
|
159
165
|
|
|
160
|
-
Fires when nearby
|
|
166
|
+
Fires when the set of nearby beacons changes, or every `debounceInterval` seconds (default 5 s) if nothing changed. The event is **deduplicated** — it does not fire every ranging cycle if proximity is unchanged.
|
|
161
167
|
|
|
162
168
|
```ts
|
|
163
|
-
const sub = addBeaconsRangedListener(({ beacons }) => {
|
|
164
|
-
beacons.forEach((
|
|
165
|
-
console.log(
|
|
169
|
+
const sub = addBeaconsRangedListener(({ beacons, region }) => {
|
|
170
|
+
beacons.forEach((b) => {
|
|
171
|
+
console.log(`Major ${b.major} / Minor ${b.minor}`);
|
|
172
|
+
console.log(`Distance: ${b.distance.toFixed(2)}m — ${b.proximity}`);
|
|
173
|
+
console.log(`RSSI: ${b.rssi} dBm`);
|
|
166
174
|
});
|
|
167
175
|
});
|
|
168
176
|
|
|
169
|
-
sub.remove(); //
|
|
177
|
+
sub.remove(); // call on cleanup
|
|
170
178
|
```
|
|
171
179
|
|
|
172
|
-
Each
|
|
180
|
+
Each beacon in the array:
|
|
173
181
|
|
|
174
|
-
| Field | Type | Description
|
|
175
|
-
| ----------- | -------- |
|
|
176
|
-
| `
|
|
177
|
-
| `
|
|
182
|
+
| Field | Type | Description |
|
|
183
|
+
| ----------- | -------- | --------------------------------------------------------------- |
|
|
184
|
+
| `uuid` | `string` | Beacon proximity UUID |
|
|
185
|
+
| `major` | `number` | Beacon major value |
|
|
186
|
+
| `minor` | `number` | Beacon minor value |
|
|
187
|
+
| `distance` | `number` | Estimated distance in metres (after correction factor applied) |
|
|
188
|
+
| `rssi` | `number` | Raw signal strength in dBm |
|
|
189
|
+
| `proximity` | `string` | `'immediate'` \| `'near'` \| `'far'` \| `'unknown'` |
|
|
178
190
|
|
|
179
191
|
---
|
|
180
192
|
|
|
181
193
|
#### `addBeaconRegionListener(callback)`
|
|
182
194
|
|
|
183
|
-
Fires when the user enters or exits a
|
|
195
|
+
Fires when the user enters or exits a beacon region. Works in foreground, background, and terminated state (iOS).
|
|
184
196
|
|
|
185
197
|
```ts
|
|
186
198
|
const sub = addBeaconRegionListener(({ event, region, state }) => {
|
|
187
|
-
|
|
199
|
+
if (event === 'enter') console.log('Entered region', region);
|
|
200
|
+
if (event === 'exit') console.log('Left region', region);
|
|
201
|
+
if (event === 'determined') console.log('State for', region, '→', state);
|
|
188
202
|
});
|
|
189
203
|
|
|
190
|
-
sub.remove(); //
|
|
204
|
+
sub.remove(); // call on cleanup
|
|
191
205
|
```
|
|
192
206
|
|
|
193
|
-
| Field | Type | Description
|
|
194
|
-
| -------- | -------- |
|
|
195
|
-
| `event` | `string` | `'enter'` \| `'exit'` \| `'determined'`
|
|
196
|
-
| `region` | `string` |
|
|
197
|
-
| `state` | `string` | `'inside'` \| `'outside'` \| `'unknown'` (determined only) |
|
|
207
|
+
| Field | Type | Description |
|
|
208
|
+
| -------- | -------- | ------------------------------------------------------------------ |
|
|
209
|
+
| `event` | `string` | `'enter'` \| `'exit'` \| `'determined'` |
|
|
210
|
+
| `region` | `string` | Region identifier |
|
|
211
|
+
| `state` | `string` | `'inside'` \| `'outside'` \| `'unknown'` (`determined` event only) |
|
|
198
212
|
|
|
199
213
|
---
|
|
200
214
|
|
|
@@ -202,21 +216,58 @@ sub.remove(); // when done
|
|
|
202
216
|
|
|
203
217
|
#### `getDebugLogs()`
|
|
204
218
|
|
|
205
|
-
Returns on-device debug
|
|
219
|
+
Returns the on-device debug log file as a string. Includes campaign fetch results and proximity events sent.
|
|
220
|
+
|
|
221
|
+
Returns `Promise<string>`.
|
|
206
222
|
|
|
207
223
|
#### `clearDebugLogs()`
|
|
208
224
|
|
|
209
|
-
Clears on-device debug
|
|
225
|
+
Clears the on-device debug log file.
|
|
226
|
+
|
|
227
|
+
Returns `Promise<string>`.
|
|
228
|
+
|
|
229
|
+
#### `setDebounceInterval(seconds)`
|
|
230
|
+
|
|
231
|
+
Sets how often the `onBeaconsRanged` event is force-emitted even if proximity hasn't changed (default: `5`).
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
await setDebounceInterval(10); // emit at most every 10 s
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
#### `clearDebounceCache()`
|
|
238
|
+
|
|
239
|
+
Resets internal campaign-fetch cooldown state. Useful during testing.
|
|
240
|
+
|
|
241
|
+
#### `getDebounceStatus()`
|
|
242
|
+
|
|
243
|
+
Returns internal per-beacon timing state. Useful for debugging stuck campaigns.
|
|
244
|
+
|
|
245
|
+
Returns `Promise<Object>`.
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## How It Works
|
|
250
|
+
|
|
251
|
+
1. `initialize()` sets your brand config.
|
|
252
|
+
2. `startScanner()` begins monitoring for iBeacons with the Spotny UUID.
|
|
253
|
+
3. When a beacon is detected, the SDK fetches the associated campaign from the Spotny backend.
|
|
254
|
+
4. `NEARBY` events are sent automatically as the user moves closer or further.
|
|
255
|
+
5. `IMPRESSION_HEARTBEAT` events are sent every 10 s when the user is within 2 m of an active campaign.
|
|
256
|
+
6. On exit, `PROXIMITY_EXIT` is sent and all state is cleaned up.
|
|
257
|
+
|
|
258
|
+
The SDK is **fully anonymous** — it generates a persistent `device_id` (Keychain on iOS, SharedPreferences on Android) that survives app reinstalls. No user identity is collected or sent.
|
|
210
259
|
|
|
211
260
|
---
|
|
212
261
|
|
|
213
|
-
## Platform
|
|
262
|
+
## Platform Support
|
|
214
263
|
|
|
215
264
|
| Feature | iOS | Android |
|
|
216
265
|
| ------------------------ | --- | ------- |
|
|
217
|
-
|
|
|
266
|
+
| iBeacon ranging | ✅ | ✅ |
|
|
267
|
+
| Region enter/exit | ✅ | ✅ |
|
|
218
268
|
| Background scanning | ✅ | ✅ |
|
|
219
269
|
| Terminated-state wakeup | ✅ | ✅ |
|
|
270
|
+
| Keychain device ID | ✅ | – |
|
|
220
271
|
| Notification permissions | ✅ | – |
|
|
221
272
|
|
|
222
273
|
---
|
|
@@ -130,14 +130,15 @@ class SpotnySdkModule(private val reactContext: ReactApplicationContext) :
|
|
|
130
130
|
|
|
131
131
|
override fun isScanning(promise: Promise) = promise.resolve(scanning)
|
|
132
132
|
|
|
133
|
-
override fun
|
|
133
|
+
override fun initialize(config: ReadableMap?, promise: Promise) {
|
|
134
134
|
config?.getDouble("maxDetectionDistance").takeIf { config?.hasKey("maxDetectionDistance") == true }
|
|
135
135
|
?.let { maxDetectionDistance = it; Log.d(TAG, "maxDetectionDistance = $it m") }
|
|
136
136
|
config?.getString("source")?.let { source = it; Log.d(TAG, "source = $it") }
|
|
137
137
|
config?.getDouble("distanceCorrectionFactor")
|
|
138
138
|
.takeIf { config?.hasKey("distanceCorrectionFactor") == true && it > 0 }
|
|
139
139
|
?.let { distanceCorrectionFactor = it; Log.d(TAG, "distanceCorrectionFactor = $it") }
|
|
140
|
-
|
|
140
|
+
Log.d(TAG, "SDK initialized")
|
|
141
|
+
promise.resolve("SDK initialized")
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
override fun requestNotificationPermissions(promise: Promise) {
|
|
@@ -189,7 +189,7 @@ public class SpotnyBeaconScanner: NSObject {
|
|
|
189
189
|
}
|
|
190
190
|
|
|
191
191
|
@objc
|
|
192
|
-
public func
|
|
192
|
+
public func initialize(
|
|
193
193
|
with config: NSDictionary,
|
|
194
194
|
resolve: @escaping (Any?) -> Void,
|
|
195
195
|
reject: @escaping (String?, String?, Error?) -> Void
|
|
@@ -206,7 +206,8 @@ public class SpotnyBeaconScanner: NSObject {
|
|
|
206
206
|
distanceCorrectionFactor = factor
|
|
207
207
|
print("⚙️ SpotnySDK: distanceCorrectionFactor = \(factor)")
|
|
208
208
|
}
|
|
209
|
-
|
|
209
|
+
print("✅ SpotnySDK: Initialized")
|
|
210
|
+
resolve("SDK initialized")
|
|
210
211
|
}
|
|
211
212
|
|
|
212
213
|
@objc
|
package/ios/SpotnySdk.mm
CHANGED
|
@@ -79,10 +79,10 @@ RCT_EXPORT_MODULE()
|
|
|
79
79
|
[_scanner isScanningWithResolve:resolve reject:reject];
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
- (void)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
[_scanner
|
|
82
|
+
- (void)initialize:(NSDictionary *)config
|
|
83
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
84
|
+
reject:(RCTPromiseRejectBlock)reject {
|
|
85
|
+
[_scanner initializeWith:config resolve:resolve reject:reject];
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
- (void)requestNotificationPermissions:(RCTPromiseResolveBlock)resolve
|
package/lib/module/index.js
CHANGED
|
@@ -31,14 +31,13 @@ export function isScanning() {
|
|
|
31
31
|
return NativeSpotnySdk.isScanning();
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
// ──
|
|
34
|
+
// ── Initialization ──────────────────────────────────────────────────────────────
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
38
|
-
* Must be called **before** `startScanner`.
|
|
37
|
+
* Initialize the SDK. Must be called **before** any other SDK function.
|
|
39
38
|
*/
|
|
40
|
-
export function
|
|
41
|
-
return NativeSpotnySdk.
|
|
39
|
+
export function initialize(config) {
|
|
40
|
+
return NativeSpotnySdk.initialize(config);
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
// ── Permissions ──────────────────────────────────────────────────────────────
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","NativeModules","NativeSpotnySdk","SpotnyEvents","ON_BEACONS_RANGED","ON_BEACON_REGION_EVENT","eventEmitter","SpotnySdk","startScanner","stopScanner","isScanning","
|
|
1
|
+
{"version":3,"names":["NativeEventEmitter","NativeModules","NativeSpotnySdk","SpotnyEvents","ON_BEACONS_RANGED","ON_BEACON_REGION_EVENT","eventEmitter","SpotnySdk","startScanner","stopScanner","isScanning","initialize","config","requestNotificationPermissions","getDebugLogs","clearDebugLogs","setDebounceInterval","interval","clearDebounceCache","getDebounceStatus","addBeaconsRangedListener","callback","addListener","addBeaconRegionListener"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,kBAAkB,EAAEC,aAAa,QAAQ,cAAc;AAChE,OAAOC,eAAe,MAAM,sBAAmB;;AAE/C;AACA,OAAO,MAAMC,YAAY,GAAG;EAC1BC,iBAAiB,EAAE,iBAAiB;EACpCC,sBAAsB,EAAE;AAC1B,CAAU;;AAEV;;AAqCA;AACA,MAAMC,YAAY,GAAG,IAAIN,kBAAkB,CAACC,aAAa,CAACM,SAAS,CAAC;;AAEpE;;AAEA;AACA,OAAO,SAASC,YAAYA,CAAA,EAAoB;EAC9C,OAAON,eAAe,CAACM,YAAY,CAAC,CAAC;AACvC;;AAEA;AACA,OAAO,SAASC,WAAWA,CAAA,EAAoB;EAC7C,OAAOP,eAAe,CAACO,WAAW,CAAC,CAAC;AACtC;;AAEA;AACA,OAAO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOR,eAAe,CAACQ,UAAU,CAAC,CAAC;AACrC;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,MAAuB,EAAmB;EACnE,OAAOV,eAAe,CAACS,UAAU,CAACC,MAAgB,CAAC;AACrD;;AAEA;;AAEA;AACA,OAAO,SAASC,8BAA8BA,CAAA,EAAoB;EAChE,OAAOX,eAAe,CAACW,8BAA8B,CAAC,CAAC;AACzD;;AAEA;;AAEA;AACA,OAAO,SAASC,YAAYA,CAAA,EAAoB;EAC9C,OAAOZ,eAAe,CAACY,YAAY,CAAC,CAAC;AACvC;;AAEA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAoB;EAChD,OAAOb,eAAe,CAACa,cAAc,CAAC,CAAC;AACzC;;AAEA;;AAEA;AACA,OAAO,SAASC,mBAAmBA,CAACC,QAAgB,EAAmB;EACrE,OAAOf,eAAe,CAACc,mBAAmB,CAACC,QAAQ,CAAC;AACtD;;AAEA;AACA,OAAO,SAASC,kBAAkBA,CAAA,EAAoB;EACpD,OAAOhB,eAAe,CAACgB,kBAAkB,CAAC,CAAC;AAC7C;;AAEA;AACA,OAAO,SAASC,iBAAiBA,CAAA,EAAoB;EACnD,OAAOjB,eAAe,CAACiB,iBAAiB,CAAC,CAAC;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CACtCC,QAA4C,EAC5C;EACA,OAAOf,YAAY,CAACgB,WAAW,CAC7BnB,YAAY,CAACC,iBAAiB,EAC9BiB,QACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASE,uBAAuBA,CACrCF,QAA4C,EAC5C;EACA,OAAOf,YAAY,CAACgB,WAAW,CAC7BnB,YAAY,CAACE,sBAAsB,EACnCgB,QACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@ export interface Spec extends TurboModule {
|
|
|
3
3
|
startScanner(): Promise<string>;
|
|
4
4
|
stopScanner(): Promise<string>;
|
|
5
5
|
isScanning(): Promise<boolean>;
|
|
6
|
-
|
|
6
|
+
initialize(config: Object): Promise<string>;
|
|
7
7
|
requestNotificationPermissions(): Promise<string>;
|
|
8
8
|
getDebugLogs(): Promise<string>;
|
|
9
9
|
clearDebugLogs(): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeSpotnySdk.d.ts","sourceRoot":"","sources":["../../../src/NativeSpotnySdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAG/B,
|
|
1
|
+
{"version":3,"file":"NativeSpotnySdk.d.ts","sourceRoot":"","sources":["../../../src/NativeSpotnySdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAG/B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAG5C,8BAA8B,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAGlD,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAGlC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAGrC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;;AAED,wBAAmE"}
|
|
@@ -40,10 +40,9 @@ export declare function stopScanner(): Promise<string>;
|
|
|
40
40
|
/** Returns `true` if the SDK is currently scanning. */
|
|
41
41
|
export declare function isScanning(): Promise<boolean>;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
44
|
-
* Must be called **before** `startScanner`.
|
|
43
|
+
* Initialize the SDK. Must be called **before** any other SDK function.
|
|
45
44
|
*/
|
|
46
|
-
export declare function
|
|
45
|
+
export declare function initialize(config: SpotnySdkConfig): Promise<string>;
|
|
47
46
|
/** (iOS) Prompt the user for local-notification permissions. */
|
|
48
47
|
export declare function requestNotificationPermissions(): Promise<string>;
|
|
49
48
|
/** Read the on-device debug log file. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAIX,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC;IACvC,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAOF,6BAA6B;AAC7B,wBAAgB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAE9C;AAED,mDAAmD;AACnD,wBAAgB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAE7C;AAED,uDAAuD;AACvD,wBAAgB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7C;AAID
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAIX,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC;IACvC,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAOF,6BAA6B;AAC7B,wBAAgB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAE9C;AAED,mDAAmD;AACnD,wBAAgB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAE7C;AAED,uDAAuD;AACvD,wBAAgB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7C;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;AAID,gEAAgE;AAChE,wBAAgB,8BAA8B,IAAI,OAAO,CAAC,MAAM,CAAC,CAEhE;AAID,yCAAyC;AACzC,wBAAgB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAE9C;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAEhD;AAID,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAEpD;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAEnD;AAID;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,4CAM7C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,4CAM7C"}
|
package/package.json
CHANGED
package/src/NativeSpotnySdk.ts
CHANGED
|
@@ -6,8 +6,8 @@ export interface Spec extends TurboModule {
|
|
|
6
6
|
stopScanner(): Promise<string>;
|
|
7
7
|
isScanning(): Promise<boolean>;
|
|
8
8
|
|
|
9
|
-
// ──
|
|
10
|
-
|
|
9
|
+
// ── Initialization ───────────────────────────────────────────────────────
|
|
10
|
+
initialize(config: Object): Promise<string>;
|
|
11
11
|
|
|
12
12
|
// ── Permissions ────────────────────────────────────────────────────────────
|
|
13
13
|
requestNotificationPermissions(): Promise<string>;
|
package/src/index.tsx
CHANGED
|
@@ -64,14 +64,13 @@ export function isScanning(): Promise<boolean> {
|
|
|
64
64
|
return NativeSpotnySdk.isScanning();
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
// ──
|
|
67
|
+
// ── Initialization ──────────────────────────────────────────────────────────────
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
|
-
*
|
|
71
|
-
* Must be called **before** `startScanner`.
|
|
70
|
+
* Initialize the SDK. Must be called **before** any other SDK function.
|
|
72
71
|
*/
|
|
73
|
-
export function
|
|
74
|
-
return NativeSpotnySdk.
|
|
72
|
+
export function initialize(config: SpotnySdkConfig): Promise<string> {
|
|
73
|
+
return NativeSpotnySdk.initialize(config as Object);
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
// ── Permissions ──────────────────────────────────────────────────────────────
|