@wayq/beekon-rn 0.0.1 → 0.0.5
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/BeekonRn.podspec +4 -4
- package/README.md +94 -48
- package/android/build.gradle +11 -6
- package/android/src/main/java/in/wayq/beekonrn/BeekonRnModule.kt +428 -0
- package/android/src/main/java/{com → in}/wayq/beekonrn/BeekonRnPackage.kt +1 -1
- package/ios/BeekonRn.h +5 -1
- package/ios/BeekonRn.mm +90 -34
- package/ios/BeekonRn.swift +396 -116
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/BeekonKit +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/Info.plist +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/Modules/BeekonKit.swiftmodule/arm64-apple-ios.abi.json +8636 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/Modules/BeekonKit.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/Modules/BeekonKit.swiftmodule/arm64-apple-ios.swiftinterface +236 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/PrivacyInfo.xcprivacy +1 -1
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/BeekonKit +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/Info.plist +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.abi.json +8636 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.swiftinterface +236 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.abi.json +8636 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +236 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/PrivacyInfo.xcprivacy +1 -1
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/_CodeSignature/CodeResources +2 -14
- package/lib/module/NativeBeekonRn.js +22 -7
- package/lib/module/NativeBeekonRn.js.map +1 -1
- package/lib/module/beekon.js +209 -60
- package/lib/module/beekon.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/internal/mappers.js +145 -23
- package/lib/module/internal/mappers.js.map +1 -1
- package/lib/module/types/enums.js +2 -0
- package/lib/module/types/{preset.js.map → enums.js.map} +1 -1
- package/lib/module/types/error.js +25 -0
- package/lib/module/types/error.js.map +1 -0
- package/lib/module/types/geofence.js +2 -0
- package/lib/module/types/{position.js.map → geofence.js.map} +1 -1
- package/lib/module/types/location.js +4 -0
- package/lib/module/types/location.js.map +1 -0
- package/lib/module/types/sync.js +2 -0
- package/lib/module/types/sync.js.map +1 -0
- package/lib/typescript/src/NativeBeekonRn.d.ts +113 -35
- package/lib/typescript/src/NativeBeekonRn.d.ts.map +1 -1
- package/lib/typescript/src/beekon.d.ts +84 -49
- package/lib/typescript/src/beekon.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +7 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/internal/mappers.d.ts +16 -3
- package/lib/typescript/src/internal/mappers.d.ts.map +1 -1
- package/lib/typescript/src/types/config.d.ts +53 -31
- package/lib/typescript/src/types/config.d.ts.map +1 -1
- package/lib/typescript/src/types/enums.d.ts +48 -0
- package/lib/typescript/src/types/enums.d.ts.map +1 -0
- package/lib/typescript/src/types/error.d.ts +20 -0
- package/lib/typescript/src/types/error.d.ts.map +1 -0
- package/lib/typescript/src/types/geofence.d.ts +36 -0
- package/lib/typescript/src/types/geofence.d.ts.map +1 -0
- package/lib/typescript/src/types/location.d.ts +40 -0
- package/lib/typescript/src/types/location.d.ts.map +1 -0
- package/lib/typescript/src/types/state.d.ts +18 -9
- package/lib/typescript/src/types/state.d.ts.map +1 -1
- package/lib/typescript/src/types/sync.d.ts +27 -0
- package/lib/typescript/src/types/sync.d.ts.map +1 -0
- package/package.json +5 -6
- package/scripts/fetch-beekonkit.sh +5 -2
- package/src/NativeBeekonRn.ts +120 -34
- package/src/beekon.ts +235 -63
- package/src/index.tsx +23 -4
- package/src/internal/mappers.ts +213 -22
- package/src/types/config.ts +54 -31
- package/src/types/enums.ts +64 -0
- package/src/types/error.ts +25 -0
- package/src/types/geofence.ts +37 -0
- package/src/types/location.ts +45 -0
- package/src/types/state.ts +23 -7
- package/src/types/sync.ts +23 -0
- package/android/src/main/java/com/wayq/beekonrn/BeekonRnModule.kt +0 -233
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeDirectory +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeRequirements +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeRequirements-1 +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeResources +0 -233
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeSignature +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/_CodeSignature/CodeResources +0 -113
- package/lib/module/types/position.js +0 -2
- package/lib/module/types/preset.js +0 -2
- package/lib/typescript/src/types/position.d.ts +0 -24
- package/lib/typescript/src/types/position.d.ts.map +0 -1
- package/lib/typescript/src/types/preset.d.ts +0 -12
- package/lib/typescript/src/types/preset.d.ts.map +0 -1
- package/src/types/position.ts +0 -23
- package/src/types/preset.ts +0 -11
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Beekon"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,aAAU","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Beekon","BeekonError"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,aAAU;AAuBjC,SAASC,WAAW,QAA8B,kBAAe","ignoreList":[]}
|
|
@@ -1,28 +1,96 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { BeekonError } from "../types/error.js";
|
|
4
|
+
// Config defaults. Kept here (not in the wire layer) so the native modules can
|
|
5
|
+
// treat every wire field as present.
|
|
6
|
+
const DEFAULTS = {
|
|
7
|
+
minTimeBetweenLocationsSeconds: 30,
|
|
8
|
+
minDistanceBetweenLocationsMeters: 100,
|
|
9
|
+
accuracyMode: 'balanced',
|
|
10
|
+
whenStationary: 'pause',
|
|
11
|
+
stationaryRadiusMeters: 5,
|
|
12
|
+
detectActivity: false,
|
|
13
|
+
syncIntervalSeconds: 300,
|
|
14
|
+
syncBatchSize: 100
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// --- Public → wire ---------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
export function recordToEntries(record) {
|
|
20
|
+
if (!record) return [];
|
|
21
|
+
return Object.keys(record).map(key => ({
|
|
22
|
+
key,
|
|
23
|
+
value: record[key]
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
3
26
|
export function configToWire(config) {
|
|
27
|
+
const sync = config.sync;
|
|
4
28
|
return {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
29
|
+
minTimeBetweenLocationsSeconds: config.minTimeBetweenLocationsSeconds ?? DEFAULTS.minTimeBetweenLocationsSeconds,
|
|
30
|
+
minDistanceBetweenLocationsMeters: config.minDistanceBetweenLocationsMeters ?? DEFAULTS.minDistanceBetweenLocationsMeters,
|
|
31
|
+
accuracyMode: config.accuracyMode ?? DEFAULTS.accuracyMode,
|
|
32
|
+
whenStationary: config.whenStationary ?? DEFAULTS.whenStationary,
|
|
33
|
+
stationaryRadiusMeters: config.stationaryRadiusMeters ?? DEFAULTS.stationaryRadiusMeters,
|
|
34
|
+
detectActivity: config.detectActivity ?? DEFAULTS.detectActivity,
|
|
35
|
+
sync: sync ? {
|
|
36
|
+
url: sync.url,
|
|
37
|
+
headers: recordToEntries(sync.headers),
|
|
38
|
+
intervalSeconds: sync.intervalSeconds ?? DEFAULTS.syncIntervalSeconds,
|
|
39
|
+
batchSize: sync.batchSize ?? DEFAULTS.syncBatchSize
|
|
40
|
+
} : undefined,
|
|
41
|
+
notification: config.notification ? {
|
|
42
|
+
title: config.notification.title,
|
|
43
|
+
text: config.notification.text
|
|
44
|
+
} : undefined
|
|
10
45
|
};
|
|
11
46
|
}
|
|
12
|
-
export function
|
|
47
|
+
export function geofenceToWire(g) {
|
|
13
48
|
return {
|
|
14
|
-
|
|
15
|
-
|
|
49
|
+
id: g.id,
|
|
50
|
+
lat: g.latitude,
|
|
51
|
+
lng: g.longitude,
|
|
52
|
+
radiusMeters: g.radiusMeters,
|
|
53
|
+
notifyOnEntry: g.notifyOnEntry ?? true,
|
|
54
|
+
notifyOnExit: g.notifyOnExit ?? true
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// --- Wire → public ---------------------------------------------------------
|
|
59
|
+
|
|
60
|
+
export function wireToLocation(w) {
|
|
61
|
+
return {
|
|
62
|
+
id: w.id,
|
|
63
|
+
latitude: w.lat,
|
|
64
|
+
longitude: w.lng,
|
|
65
|
+
timestamp: new Date(w.timestampMs),
|
|
16
66
|
accuracy: w.accuracy,
|
|
17
67
|
speed: w.speed,
|
|
18
68
|
bearing: w.bearing,
|
|
19
69
|
altitude: w.altitude,
|
|
20
|
-
|
|
70
|
+
quality: oneOf(w.quality, ['ok', 'lowAccuracy', 'implausibleSpeed'], 'ok'),
|
|
71
|
+
trigger: oneOf(w.trigger, ['interval', 'motion', 'checkIn', 'geofence', 'manual'], 'interval'),
|
|
72
|
+
motion: oneOf(w.motion, ['moving', 'stationary', 'unknown'], 'unknown'),
|
|
73
|
+
activity: w.activity == null ? null : oneOf(w.activity, ['stationary', 'walking', 'running', 'cycling', 'automotive', 'unknown'], 'unknown'),
|
|
74
|
+
isMock: w.isMock
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export function wireToGeofence(w) {
|
|
78
|
+
return {
|
|
79
|
+
id: w.id,
|
|
80
|
+
latitude: w.lat,
|
|
81
|
+
longitude: w.lng,
|
|
82
|
+
radiusMeters: w.radiusMeters,
|
|
83
|
+
notifyOnEntry: w.notifyOnEntry,
|
|
84
|
+
notifyOnExit: w.notifyOnExit
|
|
21
85
|
};
|
|
22
86
|
}
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
-
|
|
87
|
+
export function wireToGeofenceEvent(w) {
|
|
88
|
+
return {
|
|
89
|
+
id: w.id,
|
|
90
|
+
geofenceId: w.geofenceId,
|
|
91
|
+
type: oneOf(w.type, ['enter', 'exit'], 'enter'),
|
|
92
|
+
timestamp: new Date(w.timestampMs)
|
|
93
|
+
};
|
|
26
94
|
}
|
|
27
95
|
export function wireToState(w) {
|
|
28
96
|
switch (w.type) {
|
|
@@ -30,29 +98,83 @@ export function wireToState(w) {
|
|
|
30
98
|
return {
|
|
31
99
|
kind: 'idle'
|
|
32
100
|
};
|
|
33
|
-
case 'starting':
|
|
34
|
-
return {
|
|
35
|
-
kind: 'starting'
|
|
36
|
-
};
|
|
37
101
|
case 'tracking':
|
|
38
102
|
return {
|
|
39
103
|
kind: 'tracking'
|
|
40
104
|
};
|
|
41
|
-
case '
|
|
105
|
+
case 'stopped':
|
|
42
106
|
return {
|
|
43
|
-
kind: '
|
|
44
|
-
reason:
|
|
107
|
+
kind: 'stopped',
|
|
108
|
+
reason: toStopReason(w.stopReason)
|
|
45
109
|
};
|
|
46
|
-
|
|
110
|
+
default:
|
|
111
|
+
// Forward-compat: treat unknown as idle rather than throwing.
|
|
47
112
|
return {
|
|
48
|
-
kind: '
|
|
113
|
+
kind: 'idle'
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export function wireToSyncStatus(w) {
|
|
118
|
+
switch (w.type) {
|
|
119
|
+
case 'idle':
|
|
120
|
+
return {
|
|
121
|
+
kind: 'idle'
|
|
122
|
+
};
|
|
123
|
+
case 'pending':
|
|
124
|
+
return {
|
|
125
|
+
kind: 'pending'
|
|
126
|
+
};
|
|
127
|
+
case 'failed':
|
|
128
|
+
return {
|
|
129
|
+
kind: 'failed',
|
|
130
|
+
reason: toSyncFailure(w.failure)
|
|
49
131
|
};
|
|
50
132
|
default:
|
|
51
|
-
// Defensive fallback. Native should never emit an unknown state, but
|
|
52
|
-
// forward-compat: treat as idle rather than throwing.
|
|
53
133
|
return {
|
|
54
134
|
kind: 'idle'
|
|
55
135
|
};
|
|
56
136
|
}
|
|
57
137
|
}
|
|
138
|
+
function toStopReason(s) {
|
|
139
|
+
return oneOf(s, ['user', 'permissionDenied', 'locationServicesDisabled', 'locationUnavailable', 'system'],
|
|
140
|
+
// The native side always populates the reason for a `stopped` state; an
|
|
141
|
+
// unknown/missing value means the wire contract was violated — fall back to
|
|
142
|
+
// `system` rather than throwing on a subscriber.
|
|
143
|
+
'system');
|
|
144
|
+
}
|
|
145
|
+
function toSyncFailure(s) {
|
|
146
|
+
return oneOf(s, ['auth', 'rejected'], 'rejected');
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** Validate a wire enum string against the known set, with a safe fallback. */
|
|
150
|
+
function oneOf(value, allowed, fallback) {
|
|
151
|
+
return allowed.includes(value ?? '') ? value : fallback;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// --- Errors ----------------------------------------------------------------
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Re-throw a native promise rejection as a typed {@link BeekonError}. The native
|
|
158
|
+
* modules encode the kind in the error-code string (`STORAGE_FAILURE`,
|
|
159
|
+
* `INVALID_GEOFENCE`); anything else falls through as the original error.
|
|
160
|
+
*/
|
|
161
|
+
export function rethrowAsBeekonError(e) {
|
|
162
|
+
const code = e?.code;
|
|
163
|
+
const message = e?.message ?? String(e);
|
|
164
|
+
const kind = codeToKind(code);
|
|
165
|
+
if (kind) {
|
|
166
|
+
throw new BeekonError(kind, message);
|
|
167
|
+
}
|
|
168
|
+
throw e;
|
|
169
|
+
}
|
|
170
|
+
function codeToKind(code) {
|
|
171
|
+
switch (code) {
|
|
172
|
+
case 'STORAGE_FAILURE':
|
|
173
|
+
return 'storage';
|
|
174
|
+
case 'INVALID_GEOFENCE':
|
|
175
|
+
return 'invalidGeofence';
|
|
176
|
+
default:
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
58
180
|
//# sourceMappingURL=mappers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["configToWire","config","
|
|
1
|
+
{"version":3,"names":["BeekonError","DEFAULTS","minTimeBetweenLocationsSeconds","minDistanceBetweenLocationsMeters","accuracyMode","whenStationary","stationaryRadiusMeters","detectActivity","syncIntervalSeconds","syncBatchSize","recordToEntries","record","Object","keys","map","key","value","configToWire","config","sync","url","headers","intervalSeconds","batchSize","undefined","notification","title","text","geofenceToWire","g","id","lat","latitude","lng","longitude","radiusMeters","notifyOnEntry","notifyOnExit","wireToLocation","w","timestamp","Date","timestampMs","accuracy","speed","bearing","altitude","quality","oneOf","trigger","motion","activity","isMock","wireToGeofence","wireToGeofenceEvent","geofenceId","type","wireToState","kind","reason","toStopReason","stopReason","wireToSyncStatus","toSyncFailure","failure","s","allowed","fallback","includes","rethrowAsBeekonError","e","code","message","String","codeToKind"],"sourceRoot":"../../../src","sources":["internal/mappers.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/enums.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Error kinds thrown across the bridge. These are the **only** errors Beekon
|
|
5
|
+
* throws — permission / location-services / lifecycle problems never throw; they
|
|
6
|
+
* surface on the `onState` stream as `stopped(reason)` instead.
|
|
7
|
+
*
|
|
8
|
+
* - `'storage'` — a local-store (SQLite) read/write failed. Thrown by
|
|
9
|
+
* `getLocations()`, `deleteLocations()`, and `pendingUploadCount()`.
|
|
10
|
+
* - `'invalidGeofence'` — a geofence passed to `addGeofences()` failed
|
|
11
|
+
* validation (empty/oversized id, or non-positive radius).
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Typed error surfaced from the bridge. The native module rejects promises with
|
|
16
|
+
* the kind encoded as the error code; the facade re-wraps into this.
|
|
17
|
+
*/
|
|
18
|
+
export class BeekonError extends Error {
|
|
19
|
+
constructor(kind, message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = 'BeekonError';
|
|
22
|
+
this.kind = kind;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BeekonError","Error","constructor","kind","message","name"],"sourceRoot":"../../../src","sources":["types/error.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA,OAAO,MAAMA,WAAW,SAASC,KAAK,CAAC;EAGrCC,WAAWA,CAACC,IAAqB,EAAEC,OAAe,EAAE;IAClD,KAAK,CAACA,OAAO,CAAC;IACd,IAAI,CAACC,IAAI,GAAG,aAAa;IACzB,IAAI,CAACF,IAAI,GAAGA,IAAI;EAClB;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/geofence.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/location.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/sync.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1,57 +1,135 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Codegen TurboModule spec —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Codegen TurboModule spec — the single source React Native's Codegen reads to
|
|
3
|
+
* generate the native interface. **DO NOT export Wire* types from
|
|
4
|
+
* `src/index.tsx`.** The public TS API in `src/beekon.ts` and `src/types/` is
|
|
5
|
+
* what consumers use; mappers in `src/internal/mappers.ts` convert between the
|
|
6
|
+
* two.
|
|
5
7
|
*
|
|
6
|
-
* Wire types are flat (primitives + nested
|
|
7
|
-
* TS
|
|
8
|
-
* recursive structures
|
|
9
|
-
*
|
|
8
|
+
* Wire types are deliberately **flat** (primitives + flat nested objects +
|
|
9
|
+
* arrays) because Codegen's TS→Kotlin/ObjC derivation has no support for unions
|
|
10
|
+
* or recursive structures:
|
|
11
|
+
*
|
|
12
|
+
* - **Enums travel as plain `string`** (e.g. `accuracyMode`, `quality`); the
|
|
13
|
+
* mappers translate to/from the public string-literal unions with a defensive
|
|
14
|
+
* fallback, so an unknown value never crashes a subscriber.
|
|
15
|
+
* - **Sum types** (`WireState`, `WireSyncStatus`) are a `type` discriminator
|
|
16
|
+
* string plus sibling fields nullable per variant.
|
|
17
|
+
* - **String maps** (`headers`, `extras`) travel as `WireKeyValue[]` pairs —
|
|
18
|
+
* Codegen has no portable dictionary type.
|
|
19
|
+
* - **Timestamps** are epoch-milliseconds; intervals are seconds.
|
|
10
20
|
*/
|
|
11
21
|
import type { CodegenTypes, TurboModule } from 'react-native';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
22
|
+
/** A single string map entry — see `headers` / `setExtras`. */
|
|
23
|
+
export type WireKeyValue = {
|
|
24
|
+
key: string;
|
|
25
|
+
value: string;
|
|
26
|
+
};
|
|
27
|
+
export type WireSyncConfig = {
|
|
28
|
+
url: string;
|
|
29
|
+
headers: WireKeyValue[];
|
|
30
|
+
intervalSeconds: number;
|
|
31
|
+
batchSize: number;
|
|
32
|
+
};
|
|
33
|
+
/** Android-only foreground-service notification overrides. iOS ignores it. */
|
|
34
|
+
export type WireNotificationConfig = {
|
|
35
|
+
title?: string;
|
|
36
|
+
text?: string;
|
|
19
37
|
};
|
|
20
38
|
export type WireConfig = {
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
39
|
+
/** All fields required at the wire level — the TS facade applies defaults. */
|
|
40
|
+
minTimeBetweenLocationsSeconds: number;
|
|
41
|
+
minDistanceBetweenLocationsMeters: number;
|
|
42
|
+
/** One of: 'high' | 'balanced' | 'low'. */
|
|
43
|
+
accuracyMode: string;
|
|
44
|
+
/** One of: 'keepTracking' | 'pause' | 'pauseWithCheckIns'. */
|
|
45
|
+
whenStationary: string;
|
|
46
|
+
stationaryRadiusMeters: number;
|
|
47
|
+
detectActivity: boolean;
|
|
48
|
+
/** Omitted keeps tracking local-only. */
|
|
49
|
+
sync?: WireSyncConfig;
|
|
50
|
+
/** Android-only; the iOS native module ignores it. */
|
|
51
|
+
notification?: WireNotificationConfig;
|
|
52
|
+
};
|
|
53
|
+
export type WireLocation = {
|
|
54
|
+
id: string;
|
|
55
|
+
lat: number;
|
|
56
|
+
lng: number;
|
|
57
|
+
timestampMs: number;
|
|
58
|
+
/** `null` when the OS did not report a value. */
|
|
59
|
+
accuracy: number | null;
|
|
60
|
+
speed: number | null;
|
|
61
|
+
bearing: number | null;
|
|
62
|
+
altitude: number | null;
|
|
63
|
+
/** One of: 'ok' | 'lowAccuracy' | 'implausibleSpeed'. */
|
|
64
|
+
quality: string;
|
|
65
|
+
/** One of: 'interval' | 'motion' | 'checkIn' | 'geofence' | 'manual'. */
|
|
66
|
+
trigger: string;
|
|
67
|
+
/** One of: 'moving' | 'stationary' | 'unknown'. */
|
|
68
|
+
motion: string;
|
|
69
|
+
/** Activity enum string, or `null` unless activity detection is enabled. */
|
|
70
|
+
activity: string | null;
|
|
71
|
+
isMock: boolean;
|
|
72
|
+
};
|
|
73
|
+
export type WireGeofence = {
|
|
74
|
+
id: string;
|
|
29
75
|
lat: number;
|
|
30
76
|
lng: number;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
77
|
+
radiusMeters: number;
|
|
78
|
+
notifyOnEntry: boolean;
|
|
79
|
+
notifyOnExit: boolean;
|
|
80
|
+
};
|
|
81
|
+
export type WireGeofenceEvent = {
|
|
82
|
+
id: string;
|
|
83
|
+
geofenceId: string;
|
|
84
|
+
/** One of: 'enter' | 'exit'. */
|
|
85
|
+
type: string;
|
|
35
86
|
timestampMs: number;
|
|
36
87
|
};
|
|
37
88
|
export type WireState = {
|
|
38
|
-
/** One of: 'idle' | '
|
|
89
|
+
/** One of: 'idle' | 'tracking' | 'stopped'. */
|
|
39
90
|
type: string;
|
|
40
91
|
/**
|
|
41
|
-
* Only populated when `type === '
|
|
42
|
-
* '
|
|
92
|
+
* Only populated when `type === 'stopped'`. One of: 'user' |
|
|
93
|
+
* 'permissionDenied' | 'locationServicesDisabled' | 'locationUnavailable' |
|
|
94
|
+
* 'system'.
|
|
43
95
|
*/
|
|
44
|
-
|
|
96
|
+
stopReason?: string;
|
|
97
|
+
};
|
|
98
|
+
export type WireSyncStatus = {
|
|
99
|
+
/** One of: 'idle' | 'pending' | 'failed'. */
|
|
100
|
+
type: string;
|
|
101
|
+
/** Only populated when `type === 'failed'`. One of: 'auth' | 'rejected'. */
|
|
102
|
+
failure?: string;
|
|
45
103
|
};
|
|
46
104
|
export interface Spec extends TurboModule {
|
|
47
|
-
|
|
48
|
-
|
|
105
|
+
/**
|
|
106
|
+
* The config crosses as an untyped object (`ReadableMap` on Android,
|
|
107
|
+
* `NSDictionary` on iOS) and is parsed natively. Typing it as the nested
|
|
108
|
+
* {@link WireConfig} struct would force the iOS ObjC++ layer to walk Codegen's
|
|
109
|
+
* generated C++ structs; the facade still builds a `WireConfig`-shaped value
|
|
110
|
+
* via `configToWire`, so the shape is enforced upstream.
|
|
111
|
+
*/
|
|
112
|
+
configure(config: CodegenTypes.UnsafeObject): Promise<void>;
|
|
49
113
|
start(): Promise<void>;
|
|
50
114
|
stop(): Promise<void>;
|
|
51
|
-
|
|
52
|
-
|
|
115
|
+
resumeIfNeeded(): Promise<void>;
|
|
116
|
+
getLocations(fromMs: number, toMs: number): Promise<WireLocation[]>;
|
|
117
|
+
/**
|
|
118
|
+
* A negative `beforeMs` deletes all stored locations (the wire encoding of
|
|
119
|
+
* the public `deleteLocations()` no-argument case). A plain `number` is used
|
|
120
|
+
* rather than `number | null` for portable Codegen support across platforms.
|
|
121
|
+
*/
|
|
122
|
+
deleteLocations(beforeMs: number): Promise<number>;
|
|
123
|
+
pendingUploadCount(): Promise<number>;
|
|
124
|
+
sync(): Promise<void>;
|
|
125
|
+
setExtras(entries: WireKeyValue[]): Promise<void>;
|
|
126
|
+
addGeofences(geofences: WireGeofence[]): Promise<void>;
|
|
127
|
+
removeGeofences(ids: string[]): Promise<void>;
|
|
128
|
+
listGeofences(): Promise<WireGeofence[]>;
|
|
53
129
|
readonly onState: CodegenTypes.EventEmitter<WireState>;
|
|
54
|
-
readonly
|
|
130
|
+
readonly onLocation: CodegenTypes.EventEmitter<WireLocation>;
|
|
131
|
+
readonly onGeofenceEvent: CodegenTypes.EventEmitter<WireGeofenceEvent>;
|
|
132
|
+
readonly onSyncStatus: CodegenTypes.EventEmitter<WireSyncStatus>;
|
|
55
133
|
}
|
|
56
134
|
declare const _default: Spec;
|
|
57
135
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeBeekonRn.d.ts","sourceRoot":"","sources":["../../../src/NativeBeekonRn.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"NativeBeekonRn.d.ts","sourceRoot":"","sources":["../../../src/NativeBeekonRn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9D,+DAA+D;AAC/D,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,8EAA8E;IAC9E,8BAA8B,EAAE,MAAM,CAAC;IACvC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,sDAAsD;IACtD,YAAY,CAAC,EAAE,sBAAsB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,YAAY,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEzC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvD,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC7D,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACvE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;CAClE;;AAED,wBAAkE"}
|