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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # spotny-sdk
2
2
 
3
- A React Native SDK for real-time proximity experiences. Detects nearby points of interest and fires location events on iOS and Android.
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** → **+ Capability** → Background Modes:
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
- configure,
58
+ initialize,
61
59
  startScanner,
62
60
  stopScanner,
63
- addProximityListener,
64
- addLocationEventListener,
61
+ addBeaconsRangedListener,
62
+ addBeaconRegionListener,
65
63
  } from 'spotny-sdk';
66
64
 
67
65
  export default function App() {
68
66
  useEffect(() => {
69
- configure({ source: 'nike', maxDetectionDistance: 10 });
70
- startScanner('device-uuid-here', /* userId */ null);
71
-
72
- const proxSub = addProximityListener((items) => {
73
- console.log('Nearby:', items);
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
- const locationSub = addLocationEventListener(({ event, zone }) => {
77
- if (event === 'enter') console.log('Entered zone', zone);
78
- if (event === 'exit') console.log('Left zone', zone);
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
- proxSub.remove();
84
- locationSub.remove();
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
- ### Core
100
+ ### Initialization
97
101
 
98
- #### `startScanner(userUUID, userId?)`
102
+ #### `initialize(config)`
99
103
 
100
- Starts proximity scanning.
104
+ **Must be called before any other SDK function.** Configures the SDK with your brand settings.
101
105
 
102
- | Parameter | Type | Required | Description |
103
- | ---------- | ---------------- | -------- | ----------------------------------------- |
104
- | `userUUID` | `string` | Yes | Unique identifier for this device/session |
105
- | `userId` | `number \| null` | No | Authenticated user ID |
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 startScanner('550e8400-e29b-41d4-a716-446655440000', 42);
115
+ await initialize({
116
+ source: 'nike',
117
+ maxDetectionDistance: 10,
118
+ distanceCorrectionFactor: 0.5,
119
+ });
111
120
  ```
112
121
 
113
122
  ---
114
123
 
115
- #### `stopScanner()`
116
-
117
- Stops scanning and clears all state.
124
+ ### Core Scanning
118
125
 
119
- Returns `Promise<string>`.
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
- #### `isScanning()`
130
+ Returns `Promise<string>`.
124
131
 
125
- Returns `Promise<boolean>`.
132
+ ```ts
133
+ await startScanner();
134
+ ```
126
135
 
127
136
  ---
128
137
 
129
- ### Configuration
138
+ #### `stopScanner()`
130
139
 
131
- #### `configure(config)`
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
- Call **before** `startScanner`.
144
+ ---
134
145
 
135
- | Option | Type | Default | Description |
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
- ```ts
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
- Requests local notification permissions.
156
+ Prompts the user for local notification permission (`alert`, `sound`, `badge`).
151
157
 
152
- Returns `Promise<string>`.
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 items are detected (approximately every second).
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((item) => {
165
- console.log(`${item.distance.toFixed(1)} m ${item.proximity}`);
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(); // when done
177
+ sub.remove(); // call on cleanup
170
178
  ```
171
179
 
172
- Each item contains:
180
+ Each beacon in the array:
173
181
 
174
- | Field | Type | Description |
175
- | ----------- | -------- | --------------------------------------------------- |
176
- | `distance` | `number` | Estimated distance in metres |
177
- | `proximity` | `string` | `'immediate'` \| `'near'` \| `'far'` \| `'unknown'` |
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 zone. Works in foreground, background, and terminated state (iOS).
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
- console.log(event, region); // 'enter' | 'exit' | 'determined'
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(); // when done
204
+ sub.remove(); // call on cleanup
191
205
  ```
192
206
 
193
- | Field | Type | Description |
194
- | -------- | -------- | ---------------------------------------------------------- |
195
- | `event` | `string` | `'enter'` \| `'exit'` \| `'determined'` |
196
- | `region` | `string` | Zone identifier |
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 logs as a string.
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 logs.
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 Notes
262
+ ## Platform Support
214
263
 
215
264
  | Feature | iOS | Android |
216
265
  | ------------------------ | --- | ------- |
217
- | Zone monitoring | ✅ | ✅ |
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 configure(config: ReadableMap?, promise: Promise) {
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
- promise.resolve("Configuration updated")
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 configure(
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
- resolve("Configuration updated")
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)configure:(NSDictionary *)config
83
- resolve:(RCTPromiseResolveBlock)resolve
84
- reject:(RCTPromiseRejectBlock)reject {
85
- [_scanner configureWith:config resolve:resolve reject:reject];
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
@@ -31,14 +31,13 @@ export function isScanning() {
31
31
  return NativeSpotnySdk.isScanning();
32
32
  }
33
33
 
34
- // ── Configuration ────────────────────────────────────────────────────────────
34
+ // ── Initialization ──────────────────────────────────────────────────────────────
35
35
 
36
36
  /**
37
- * Override SDK configuration at runtime.
38
- * Must be called **before** `startScanner`.
37
+ * Initialize the SDK. Must be called **before** any other SDK function.
39
38
  */
40
- export function configure(config) {
41
- return NativeSpotnySdk.configure(config);
39
+ export function initialize(config) {
40
+ return NativeSpotnySdk.initialize(config);
42
41
  }
43
42
 
44
43
  // ── Permissions ──────────────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","NativeModules","NativeSpotnySdk","SpotnyEvents","ON_BEACONS_RANGED","ON_BEACON_REGION_EVENT","eventEmitter","SpotnySdk","startScanner","stopScanner","isScanning","configure","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;AACA,OAAO,SAASC,SAASA,CAACC,MAAuB,EAAmB;EAClE,OAAOV,eAAe,CAACS,SAAS,CAACC,MAAgB,CAAC;AACpD;;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":[]}
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
- configure(config: Object): Promise<string>;
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,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAG3C,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"}
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
- * Override SDK configuration at runtime.
44
- * Must be called **before** `startScanner`.
43
+ * Initialize the SDK. Must be called **before** any other SDK function.
45
44
  */
46
- export declare function configure(config: SpotnySdkConfig): Promise<string>;
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;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAElE;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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spotny-sdk",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "description": "Beacon Scanner",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -6,8 +6,8 @@ export interface Spec extends TurboModule {
6
6
  stopScanner(): Promise<string>;
7
7
  isScanning(): Promise<boolean>;
8
8
 
9
- // ── Configuration ──────────────────────────────────────────────────────────
10
- configure(config: Object): Promise<string>;
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
- // ── Configuration ────────────────────────────────────────────────────────────
67
+ // ── Initialization ──────────────────────────────────────────────────────────────
68
68
 
69
69
  /**
70
- * Override SDK configuration at runtime.
71
- * Must be called **before** `startScanner`.
70
+ * Initialize the SDK. Must be called **before** any other SDK function.
72
71
  */
73
- export function configure(config: SpotnySdkConfig): Promise<string> {
74
- return NativeSpotnySdk.configure(config as Object);
72
+ export function initialize(config: SpotnySdkConfig): Promise<string> {
73
+ return NativeSpotnySdk.initialize(config as Object);
75
74
  }
76
75
 
77
76
  // ── Permissions ──────────────────────────────────────────────────────────────