@wayq/beekon-rn 0.0.1 → 0.0.3
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 +3 -3
- package/README.md +24 -30
- package/android/build.gradle +3 -3
- package/android/src/main/java/in/wayq/beekonrn/BeekonRnModule.kt +182 -0
- package/android/src/main/java/{com → in}/wayq/beekonrn/BeekonRnPackage.kt +1 -1
- package/ios/BeekonRn.h +5 -1
- package/ios/BeekonRn.mm +15 -25
- package/ios/BeekonRn.swift +96 -116
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeDirectory +0 -0
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeResources +105 -42
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeSignature +0 -0
- 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 +2427 -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 +85 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/PrivacyInfo.xcprivacy +1 -1
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64/BeekonKit.framework/_CodeSignature/CodeResources +36 -3
- 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 +2427 -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 +85 -0
- package/ios/Frameworks/BeekonKit.xcframework/ios-arm64_x86_64-simulator/BeekonKit.framework/Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.abi.json +2427 -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 +85 -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 +69 -3
- package/lib/module/NativeBeekonRn.js +2 -2
- package/lib/module/NativeBeekonRn.js.map +1 -1
- package/lib/module/beekon.js +50 -53
- 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 +49 -21
- package/lib/module/internal/mappers.js.map +1 -1
- package/lib/module/types/config.js +0 -2
- package/lib/module/types/error.js +19 -0
- package/lib/module/types/error.js.map +1 -0
- package/lib/module/types/location.js +2 -0
- package/lib/module/types/{position.js.map → location.js.map} +1 -1
- package/lib/typescript/src/NativeBeekonRn.d.ts +22 -26
- package/lib/typescript/src/NativeBeekonRn.d.ts.map +1 -1
- package/lib/typescript/src/beekon.d.ts +29 -42
- package/lib/typescript/src/beekon.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/internal/mappers.d.ts +10 -3
- package/lib/typescript/src/internal/mappers.d.ts.map +1 -1
- package/lib/typescript/src/types/config.d.ts +23 -31
- package/lib/typescript/src/types/config.d.ts.map +1 -1
- package/lib/typescript/src/types/error.d.ts +14 -0
- package/lib/typescript/src/types/error.d.ts.map +1 -0
- package/lib/typescript/src/types/location.d.ts +26 -0
- package/lib/typescript/src/types/location.d.ts.map +1 -0
- package/lib/typescript/src/types/state.d.ts +9 -9
- package/lib/typescript/src/types/state.d.ts.map +1 -1
- package/package.json +2 -2
- package/scripts/fetch-beekonkit.sh +5 -2
- package/src/NativeBeekonRn.ts +22 -26
- package/src/beekon.ts +58 -56
- package/src/index.tsx +3 -3
- package/src/internal/mappers.ts +52 -18
- package/src/types/config.ts +23 -32
- package/src/types/error.ts +22 -0
- package/src/types/location.ts +25 -0
- package/src/types/state.ts +13 -7
- package/android/src/main/java/com/wayq/beekonrn/BeekonRnModule.kt +0 -233
- package/ios/Frameworks/BeekonKit.xcframework/_CodeSignature/CodeRequirements-1 +0 -0
- package/lib/module/types/position.js +0 -2
- package/lib/module/types/preset.js +0 -2
- package/lib/module/types/preset.js.map +0 -1
- 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
|
Binary file
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// swift-interface-format-version: 1.0
|
|
2
|
+
// swift-compiler-version: Apple Swift version 6.2.3 (swiftlang-6.2.3.3.21 clang-1700.6.3.2)
|
|
3
|
+
// swift-module-flags: -target x86_64-apple-ios17.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 6 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -module-name BeekonKit -package-name beekon_ios
|
|
4
|
+
// swift-module-flags-ignorable: -no-verify-emitted-module-interface -no-verify-emitted-module-interface -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2.3
|
|
5
|
+
import CoreLocation
|
|
6
|
+
import Foundation
|
|
7
|
+
import Foundation/*.Bundle*/
|
|
8
|
+
import Foundation/*.ProcessInfo*/
|
|
9
|
+
import Foundation/*.URL*/
|
|
10
|
+
import Swift
|
|
11
|
+
import _Concurrency
|
|
12
|
+
import _StringProcessing
|
|
13
|
+
import _SwiftConcurrencyShims
|
|
14
|
+
import os
|
|
15
|
+
@_hasMissingDesignatedInitializers public actor Beekon {
|
|
16
|
+
public static let shared: BeekonKit.Beekon
|
|
17
|
+
public func configure(_ config: BeekonKit.BeekonConfig)
|
|
18
|
+
public func start() async throws
|
|
19
|
+
public func stop() async
|
|
20
|
+
public func locations(from: Foundation.Date, to: Foundation.Date) async throws -> [BeekonKit.Location]
|
|
21
|
+
public var state: _Concurrency.AsyncStream<BeekonKit.BeekonState> {
|
|
22
|
+
get
|
|
23
|
+
}
|
|
24
|
+
public var locations: _Concurrency.AsyncStream<BeekonKit.Location> {
|
|
25
|
+
get
|
|
26
|
+
}
|
|
27
|
+
@objc deinit
|
|
28
|
+
@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
|
|
29
|
+
@_semantics("defaultActor") nonisolated final public var unownedExecutor: _Concurrency.UnownedSerialExecutor {
|
|
30
|
+
get
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
public struct BeekonConfig : Swift.Sendable, Swift.Equatable, Swift.Hashable {
|
|
34
|
+
public var intervalSeconds: Foundation.TimeInterval
|
|
35
|
+
public var distanceMeters: Swift.Double
|
|
36
|
+
public static let `default`: BeekonKit.BeekonConfig
|
|
37
|
+
public init(intervalSeconds: Foundation.TimeInterval = 30, distanceMeters: Swift.Double = 100)
|
|
38
|
+
public static func == (a: BeekonKit.BeekonConfig, b: BeekonKit.BeekonConfig) -> Swift.Bool
|
|
39
|
+
public func hash(into hasher: inout Swift.Hasher)
|
|
40
|
+
public var hashValue: Swift.Int {
|
|
41
|
+
get
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
public enum BeekonError : Swift.Error, Swift.Sendable {
|
|
45
|
+
case permissionDenied
|
|
46
|
+
case locationServicesDisabled
|
|
47
|
+
case storageFailure(any Swift.Error)
|
|
48
|
+
}
|
|
49
|
+
public enum BeekonState : Swift.Sendable, Swift.Equatable, Swift.Hashable {
|
|
50
|
+
case idle
|
|
51
|
+
case tracking
|
|
52
|
+
case stopped(reason: BeekonKit.StopReason)
|
|
53
|
+
public static func == (a: BeekonKit.BeekonState, b: BeekonKit.BeekonState) -> Swift.Bool
|
|
54
|
+
public func hash(into hasher: inout Swift.Hasher)
|
|
55
|
+
public var hashValue: Swift.Int {
|
|
56
|
+
get
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
public enum StopReason : Swift.Sendable, Swift.Equatable, Swift.Hashable {
|
|
60
|
+
case user
|
|
61
|
+
case permissionDenied
|
|
62
|
+
case locationServicesDisabled
|
|
63
|
+
public static func == (a: BeekonKit.StopReason, b: BeekonKit.StopReason) -> Swift.Bool
|
|
64
|
+
public func hash(into hasher: inout Swift.Hasher)
|
|
65
|
+
public var hashValue: Swift.Int {
|
|
66
|
+
get
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
public struct Location : Swift.Sendable, Swift.Equatable, Swift.Hashable {
|
|
70
|
+
public let lat: Swift.Double
|
|
71
|
+
public let lng: Swift.Double
|
|
72
|
+
public let accuracy: Swift.Double?
|
|
73
|
+
public let speed: Swift.Double?
|
|
74
|
+
public let bearing: Swift.Double?
|
|
75
|
+
public let altitude: Swift.Double?
|
|
76
|
+
public let timestamp: Foundation.Date
|
|
77
|
+
#if compiler(>=5.3) && $NonescapableTypes
|
|
78
|
+
public init(lat: Swift.Double, lng: Swift.Double, timestamp: Foundation.Date, accuracy: Swift.Double? = nil, speed: Swift.Double? = nil, bearing: Swift.Double? = nil, altitude: Swift.Double? = nil)
|
|
79
|
+
#endif
|
|
80
|
+
public static func == (a: BeekonKit.Location, b: BeekonKit.Location) -> Swift.Bool
|
|
81
|
+
public func hash(into hasher: inout Swift.Hasher)
|
|
82
|
+
public var hashValue: Swift.Int {
|
|
83
|
+
get
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
<!--
|
|
49
49
|
Required-Reason APIs we use:
|
|
50
50
|
- UserDefaults (CA92.1): StateHolder/TrackingPersistence stores the
|
|
51
|
-
last-known tracking config in the
|
|
51
|
+
last-known tracking config in the in.wayq.beekon UserDefaults suite
|
|
52
52
|
so SLC-driven relaunches can auto-restore tracking.
|
|
53
53
|
- File timestamp (3B52.1): GRDB queries timestamps on its own SQLite
|
|
54
54
|
database file inside the host app's container.
|
|
@@ -6,20 +6,86 @@
|
|
|
6
6
|
<dict>
|
|
7
7
|
<key>Info.plist</key>
|
|
8
8
|
<data>
|
|
9
|
-
|
|
9
|
+
uIBZEl29bIa6BD82AJqNnqxItQ8=
|
|
10
|
+
</data>
|
|
11
|
+
<key>Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.abi.json</key>
|
|
12
|
+
<data>
|
|
13
|
+
VX3G5xWaHufjuctExyD3KxnvPKo=
|
|
14
|
+
</data>
|
|
15
|
+
<key>Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.swiftdoc</key>
|
|
16
|
+
<data>
|
|
17
|
+
N69rpbNFqxF9nC3LxN0wVnxXtGI=
|
|
18
|
+
</data>
|
|
19
|
+
<key>Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.swiftinterface</key>
|
|
20
|
+
<data>
|
|
21
|
+
OwWAJveN4oSVFdX/aWzFdGsMh5s=
|
|
22
|
+
</data>
|
|
23
|
+
<key>Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.abi.json</key>
|
|
24
|
+
<data>
|
|
25
|
+
VX3G5xWaHufjuctExyD3KxnvPKo=
|
|
26
|
+
</data>
|
|
27
|
+
<key>Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.swiftdoc</key>
|
|
28
|
+
<data>
|
|
29
|
+
jNcXtOMMcpL2++xWcYLei9tqS5w=
|
|
30
|
+
</data>
|
|
31
|
+
<key>Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.swiftinterface</key>
|
|
32
|
+
<data>
|
|
33
|
+
aX58esTNE/RvDF6suImnsEDQMTM=
|
|
10
34
|
</data>
|
|
11
35
|
<key>PrivacyInfo.xcprivacy</key>
|
|
12
36
|
<data>
|
|
13
|
-
+
|
|
37
|
+
9ZHPJ6MUYP0Ios5LKP+bfuWVxJk=
|
|
14
38
|
</data>
|
|
15
39
|
</dict>
|
|
16
40
|
<key>files2</key>
|
|
17
41
|
<dict>
|
|
42
|
+
<key>Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.abi.json</key>
|
|
43
|
+
<dict>
|
|
44
|
+
<key>hash2</key>
|
|
45
|
+
<data>
|
|
46
|
+
9WWtJ/SunDN+RNh+QhuE+dUtw0x58nNbt9gYBn3XlBE=
|
|
47
|
+
</data>
|
|
48
|
+
</dict>
|
|
49
|
+
<key>Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.swiftdoc</key>
|
|
50
|
+
<dict>
|
|
51
|
+
<key>hash2</key>
|
|
52
|
+
<data>
|
|
53
|
+
kiW5NMFrXxi4aekbMu1hT1jL4NsFbUsT5gwvjIUim48=
|
|
54
|
+
</data>
|
|
55
|
+
</dict>
|
|
56
|
+
<key>Modules/BeekonKit.swiftmodule/arm64-apple-ios-simulator.swiftinterface</key>
|
|
57
|
+
<dict>
|
|
58
|
+
<key>hash2</key>
|
|
59
|
+
<data>
|
|
60
|
+
v/Cfl3tF13LG5nhjGFypVGQvacvwZ+VAdyy0Iy6c994=
|
|
61
|
+
</data>
|
|
62
|
+
</dict>
|
|
63
|
+
<key>Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.abi.json</key>
|
|
64
|
+
<dict>
|
|
65
|
+
<key>hash2</key>
|
|
66
|
+
<data>
|
|
67
|
+
9WWtJ/SunDN+RNh+QhuE+dUtw0x58nNbt9gYBn3XlBE=
|
|
68
|
+
</data>
|
|
69
|
+
</dict>
|
|
70
|
+
<key>Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.swiftdoc</key>
|
|
71
|
+
<dict>
|
|
72
|
+
<key>hash2</key>
|
|
73
|
+
<data>
|
|
74
|
+
GMOMoBM3ikrulB6x4+R3kPTTGUXqZ5eueJPYsJ4NkaU=
|
|
75
|
+
</data>
|
|
76
|
+
</dict>
|
|
77
|
+
<key>Modules/BeekonKit.swiftmodule/x86_64-apple-ios-simulator.swiftinterface</key>
|
|
78
|
+
<dict>
|
|
79
|
+
<key>hash2</key>
|
|
80
|
+
<data>
|
|
81
|
+
cP2NWEZSOyc/7TF6zwN7la0671FBm2P9UHwb1WLWAog=
|
|
82
|
+
</data>
|
|
83
|
+
</dict>
|
|
18
84
|
<key>PrivacyInfo.xcprivacy</key>
|
|
19
85
|
<dict>
|
|
20
86
|
<key>hash2</key>
|
|
21
87
|
<data>
|
|
22
|
-
|
|
88
|
+
KNi008FJ9ZF/nLOH4DadbEUqysKXh/HjMAmdLdidn4c=
|
|
23
89
|
</data>
|
|
24
90
|
</dict>
|
|
25
91
|
</dict>
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Wire types are flat (primitives + nested flat objects) because Codegen's
|
|
9
9
|
* TS-to-Kotlin/ObjC type derivation has limited support for unions and
|
|
10
|
-
* recursive structures.
|
|
11
|
-
* string with sibling fields nullable per variant.
|
|
10
|
+
* recursive structures. The state variants are encoded as a `type`
|
|
11
|
+
* discriminator string with sibling fields nullable per variant.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { TurboModuleRegistry } from 'react-native';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeBeekonRn.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeBeekonRn.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AAgDlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,UAAU,CAAC","ignoreList":[]}
|
package/lib/module/beekon.js
CHANGED
|
@@ -1,92 +1,89 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NativeBeekon from "./NativeBeekonRn.js";
|
|
4
|
-
import { configToWire,
|
|
4
|
+
import { configToWire, wireToLocation, wireToState, rethrowAsBeekonError } from "./internal/mappers.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Public facade for the Beekon SDK. Mirrors the native APIs:
|
|
8
8
|
*
|
|
9
|
-
* - Android: `
|
|
10
|
-
* - iOS: `Beekon.shared` (actor)
|
|
9
|
+
* - Android: `in.wayq.beekon.Beekon` (object)
|
|
10
|
+
* - iOS: `BeekonKit.Beekon.shared` (actor)
|
|
11
11
|
*
|
|
12
|
-
* Lifecycle: `
|
|
13
|
-
* `
|
|
14
|
-
* `
|
|
15
|
-
* persisted points.
|
|
12
|
+
* Lifecycle: `configure(config)` → `start()` → ... → `stop()` (idempotent).
|
|
13
|
+
* Subscribe to `onState` / `onLocation` for live updates; query
|
|
14
|
+
* `history(from, to)` for persisted fixes.
|
|
16
15
|
*
|
|
17
16
|
* **Threading:** Methods are safe to call from any JS context. Subscribers'
|
|
18
17
|
* callbacks fire on the JS thread.
|
|
19
18
|
*
|
|
20
|
-
* **Persistence invariant:** the SDK persists every gated
|
|
21
|
-
*
|
|
22
|
-
*
|
|
19
|
+
* **Persistence invariant:** the SDK persists every gated fix natively; JS is
|
|
20
|
+
* a passive observer. In background, the JS engine is not guaranteed to be
|
|
21
|
+
* alive — for past fixes, use `history()`.
|
|
23
22
|
*/
|
|
24
23
|
class BeekonImpl {
|
|
25
24
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* Set tracking parameters. Optional — `start()` falls back to the previously
|
|
26
|
+
* persisted config or the SDK default (30s / 100m) if never configured.
|
|
28
27
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*/
|
|
32
|
-
async init() {
|
|
33
|
-
return NativeBeekon.initialize();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Set sampling and platform-specific config. Replaces any previous config.
|
|
38
|
-
* Must be called before `start()`.
|
|
39
|
-
*
|
|
40
|
-
* Errors:
|
|
41
|
-
* - `NOT_INITIALISED` — `init()` was not called first.
|
|
42
|
-
* - `NOT_CONFIGURED` — Android only, `androidNotification` was missing.
|
|
28
|
+
* While tracking, the new gate values take effect on the next admitted fix
|
|
29
|
+
* without restarting the underlying location subscription.
|
|
43
30
|
*/
|
|
44
31
|
async configure(config) {
|
|
45
|
-
|
|
32
|
+
try {
|
|
33
|
+
await NativeBeekon.configure(configToWire(config));
|
|
34
|
+
} catch (e) {
|
|
35
|
+
rethrowAsBeekonError(e);
|
|
36
|
+
}
|
|
46
37
|
}
|
|
47
38
|
|
|
48
39
|
/**
|
|
49
|
-
* Begin tracking.
|
|
40
|
+
* Begin tracking. State transitions to `tracking`.
|
|
50
41
|
*
|
|
51
|
-
*
|
|
52
|
-
* - `
|
|
53
|
-
* - `
|
|
54
|
-
*
|
|
42
|
+
* Throws a `BeekonError` with kind:
|
|
43
|
+
* - `'permissionDenied'` — location permission not granted.
|
|
44
|
+
* - `'locationServicesDisabled'` — system location services off (or GMS
|
|
45
|
+
* unavailable on Android).
|
|
55
46
|
*/
|
|
56
47
|
async start() {
|
|
57
|
-
|
|
48
|
+
try {
|
|
49
|
+
await NativeBeekon.start();
|
|
50
|
+
} catch (e) {
|
|
51
|
+
rethrowAsBeekonError(e);
|
|
52
|
+
}
|
|
58
53
|
}
|
|
59
54
|
|
|
60
|
-
/** Stop tracking. Idempotent. State
|
|
55
|
+
/** Stop tracking. Idempotent. State transitions to `stopped(user)`. */
|
|
61
56
|
async stop() {
|
|
62
|
-
|
|
57
|
+
try {
|
|
58
|
+
await NativeBeekon.stop();
|
|
59
|
+
} catch (e) {
|
|
60
|
+
rethrowAsBeekonError(e);
|
|
61
|
+
}
|
|
63
62
|
}
|
|
64
63
|
|
|
65
64
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*/
|
|
69
|
-
async shutdown() {
|
|
70
|
-
return NativeBeekon.shutdown();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Read persisted positions in the time range [from, to]. Returns positions
|
|
75
|
-
* in chronological order. Reads come from the SDK's local storage (Room on
|
|
65
|
+
* Read persisted fixes in the time range [from, to]. Returns fixes in
|
|
66
|
+
* chronological order. Reads come from the SDK's local storage (Room on
|
|
76
67
|
* Android, GRDB on iOS) — the source of truth even when JS was asleep.
|
|
77
68
|
*
|
|
78
|
-
* Retention:
|
|
69
|
+
* Retention: fixes older than 7 days OR beyond the most recent 100K are
|
|
79
70
|
* pruned automatically.
|
|
71
|
+
*
|
|
72
|
+
* Throws `BeekonError` with kind `'storageFailure'` on database read failure.
|
|
80
73
|
*/
|
|
81
74
|
async history(from, to) {
|
|
82
|
-
|
|
83
|
-
|
|
75
|
+
try {
|
|
76
|
+
const wires = await NativeBeekon.history(from.getTime(), to.getTime());
|
|
77
|
+
return wires.map(wireToLocation);
|
|
78
|
+
} catch (e) {
|
|
79
|
+
rethrowAsBeekonError(e);
|
|
80
|
+
}
|
|
84
81
|
}
|
|
85
82
|
|
|
86
83
|
/**
|
|
87
84
|
* Subscribe to state transitions. Returns an unsubscribe function. The
|
|
88
85
|
* current state is delivered to new subscribers immediately (replay-1
|
|
89
|
-
* semantics, matching the native `state` flow).
|
|
86
|
+
* semantics, matching the native `state` flow / AsyncStream).
|
|
90
87
|
*/
|
|
91
88
|
onState(cb) {
|
|
92
89
|
const subscription = NativeBeekon.onState(wire => cb(wireToState(wire)));
|
|
@@ -94,12 +91,12 @@ class BeekonImpl {
|
|
|
94
91
|
}
|
|
95
92
|
|
|
96
93
|
/**
|
|
97
|
-
* Subscribe to gated
|
|
94
|
+
* Subscribe to gated locations as they arrive. Returns an unsubscribe
|
|
98
95
|
* function. Broadcast (no replay) — only delivers while the JS engine is
|
|
99
|
-
* alive. For
|
|
96
|
+
* alive. For fixes emitted while JS was asleep, use `history()`.
|
|
100
97
|
*/
|
|
101
|
-
|
|
102
|
-
const subscription = NativeBeekon.
|
|
98
|
+
onLocation(cb) {
|
|
99
|
+
const subscription = NativeBeekon.onLocation(wire => cb(wireToLocation(wire)));
|
|
103
100
|
return () => subscription.remove();
|
|
104
101
|
}
|
|
105
102
|
}
|
package/lib/module/beekon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeBeekon","configToWire","
|
|
1
|
+
{"version":3,"names":["NativeBeekon","configToWire","wireToLocation","wireToState","rethrowAsBeekonError","BeekonImpl","configure","config","e","start","stop","history","from","to","wires","getTime","map","onState","cb","subscription","wire","remove","onLocation","Beekon"],"sourceRoot":"../../src","sources":["beekon.ts"],"mappings":";;AAAA,OAAOA,YAAY,MAAM,qBAAkB;AAI3C,SACEC,YAAY,EACZC,cAAc,EACdC,WAAW,EACXC,oBAAoB,QACf,uBAAoB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,UAAU,CAAC;EACf;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,SAASA,CAACC,MAAoB,EAAiB;IACnD,IAAI;MACF,MAAMP,YAAY,CAACM,SAAS,CAACL,YAAY,CAACM,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,OAAOC,CAAC,EAAE;MACVJ,oBAAoB,CAACI,CAAC,CAAC;IACzB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMC,KAAKA,CAAA,EAAkB;IAC3B,IAAI;MACF,MAAMT,YAAY,CAACS,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,OAAOD,CAAC,EAAE;MACVJ,oBAAoB,CAACI,CAAC,CAAC;IACzB;EACF;;EAEA;EACA,MAAME,IAAIA,CAAA,EAAkB;IAC1B,IAAI;MACF,MAAMV,YAAY,CAACU,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,OAAOF,CAAC,EAAE;MACVJ,oBAAoB,CAACI,CAAC,CAAC;IACzB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAMG,OAAOA,CAACC,IAAU,EAAEC,EAAQ,EAAuB;IACvD,IAAI;MACF,MAAMC,KAAK,GAAG,MAAMd,YAAY,CAACW,OAAO,CAACC,IAAI,CAACG,OAAO,CAAC,CAAC,EAAEF,EAAE,CAACE,OAAO,CAAC,CAAC,CAAC;MACtE,OAAOD,KAAK,CAACE,GAAG,CAACd,cAAc,CAAC;IAClC,CAAC,CAAC,OAAOM,CAAC,EAAE;MACVJ,oBAAoB,CAACI,CAAC,CAAC;IACzB;EACF;;EAEA;AACF;AACA;AACA;AACA;EACES,OAAOA,CAACC,EAA4B,EAAc;IAChD,MAAMC,YAAY,GAAGnB,YAAY,CAACiB,OAAO,CAAEG,IAAI,IAAKF,EAAE,CAACf,WAAW,CAACiB,IAAI,CAAC,CAAC,CAAC;IAC1E,OAAO,MAAMD,YAAY,CAACE,MAAM,CAAC,CAAC;EACpC;;EAEA;AACF;AACA;AACA;AACA;EACEC,UAAUA,CAACJ,EAAyB,EAAc;IAChD,MAAMC,YAAY,GAAGnB,YAAY,CAACsB,UAAU,CAAEF,IAAI,IAChDF,EAAE,CAAChB,cAAc,CAACkB,IAAI,CAAC,CACzB,CAAC;IACD,OAAO,MAAMD,YAAY,CAACE,MAAM,CAAC,CAAC;EACpC;AACF;AAEA,OAAO,MAAME,MAAM,GAAG,IAAIlB,UAAU,CAAC,CAAC","ignoreList":[]}
|
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;AAIjC,SAASC,WAAW,QAA8B,kBAAe","ignoreList":[]}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { BeekonError } from "../types/error.js";
|
|
4
|
+
const DEFAULT_INTERVAL_SECONDS = 30;
|
|
5
|
+
const DEFAULT_DISTANCE_METERS = 100;
|
|
3
6
|
export function configToWire(config) {
|
|
4
7
|
return {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
androidNotification: config.androidNotification,
|
|
9
|
-
licenseKey: config.licenseKey
|
|
8
|
+
intervalSeconds: config.intervalSeconds ?? DEFAULT_INTERVAL_SECONDS,
|
|
9
|
+
distanceMeters: config.distanceMeters ?? DEFAULT_DISTANCE_METERS,
|
|
10
|
+
androidNotification: config.androidNotification
|
|
10
11
|
};
|
|
11
12
|
}
|
|
12
|
-
export function
|
|
13
|
+
export function wireToLocation(w) {
|
|
13
14
|
return {
|
|
14
15
|
lat: w.lat,
|
|
15
16
|
lng: w.lng,
|
|
@@ -20,9 +21,17 @@ export function wireToPosition(w) {
|
|
|
20
21
|
timestamp: new Date(w.timestampMs)
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
function toStopReason(s) {
|
|
25
|
+
switch (s) {
|
|
26
|
+
case 'user':
|
|
27
|
+
case 'permissionDenied':
|
|
28
|
+
case 'locationServicesDisabled':
|
|
29
|
+
case 'system':
|
|
30
|
+
return s;
|
|
31
|
+
default:
|
|
32
|
+
// Defensive — native should never emit an unknown reason.
|
|
33
|
+
return 'user';
|
|
34
|
+
}
|
|
26
35
|
}
|
|
27
36
|
export function wireToState(w) {
|
|
28
37
|
switch (w.type) {
|
|
@@ -30,29 +39,48 @@ export function wireToState(w) {
|
|
|
30
39
|
return {
|
|
31
40
|
kind: 'idle'
|
|
32
41
|
};
|
|
33
|
-
case 'starting':
|
|
34
|
-
return {
|
|
35
|
-
kind: 'starting'
|
|
36
|
-
};
|
|
37
42
|
case 'tracking':
|
|
38
43
|
return {
|
|
39
44
|
kind: 'tracking'
|
|
40
45
|
};
|
|
41
|
-
case 'paused':
|
|
42
|
-
return {
|
|
43
|
-
kind: 'paused',
|
|
44
|
-
reason: toPauseReason(w.pauseReason)
|
|
45
|
-
};
|
|
46
46
|
case 'stopped':
|
|
47
47
|
return {
|
|
48
|
-
kind: 'stopped'
|
|
48
|
+
kind: 'stopped',
|
|
49
|
+
reason: toStopReason(w.stopReason)
|
|
49
50
|
};
|
|
50
51
|
default:
|
|
51
|
-
//
|
|
52
|
-
// forward-compat: treat as idle rather than throwing.
|
|
52
|
+
// Forward-compat: treat unknown as idle rather than throwing.
|
|
53
53
|
return {
|
|
54
54
|
kind: 'idle'
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Re-throw a native promise rejection as a typed `BeekonError`. Native modules
|
|
61
|
+
* encode the kind in the error code string (`PERMISSION_DENIED`,
|
|
62
|
+
* `LOCATION_SERVICES_DISABLED`, `STORAGE_FAILURE`); anything else falls
|
|
63
|
+
* through as the original error.
|
|
64
|
+
*/
|
|
65
|
+
export function rethrowAsBeekonError(e) {
|
|
66
|
+
const code = e?.code;
|
|
67
|
+
const message = e?.message ?? String(e);
|
|
68
|
+
const kind = codeToKind(code);
|
|
69
|
+
if (kind) {
|
|
70
|
+
throw new BeekonError(kind, message);
|
|
71
|
+
}
|
|
72
|
+
throw e;
|
|
73
|
+
}
|
|
74
|
+
function codeToKind(code) {
|
|
75
|
+
switch (code) {
|
|
76
|
+
case 'PERMISSION_DENIED':
|
|
77
|
+
return 'permissionDenied';
|
|
78
|
+
case 'LOCATION_SERVICES_DISABLED':
|
|
79
|
+
return 'locationServicesDisabled';
|
|
80
|
+
case 'STORAGE_FAILURE':
|
|
81
|
+
return 'storageFailure';
|
|
82
|
+
default:
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
58
86
|
//# sourceMappingURL=mappers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["BeekonError","DEFAULT_INTERVAL_SECONDS","DEFAULT_DISTANCE_METERS","configToWire","config","intervalSeconds","distanceMeters","androidNotification","wireToLocation","w","lat","lng","accuracy","speed","bearing","altitude","timestamp","Date","timestampMs","toStopReason","s","wireToState","type","kind","reason","stopReason","rethrowAsBeekonError","e","code","message","String","codeToKind","undefined"],"sourceRoot":"../../../src","sources":["internal/mappers.ts"],"mappings":";;AAGA,SAASA,WAAW,QAA8B,mBAAgB;AAGlE,MAAMC,wBAAwB,GAAG,EAAE;AACnC,MAAMC,uBAAuB,GAAG,GAAG;AAEnC,OAAO,SAASC,YAAYA,CAACC,MAAoB,EAAc;EAC7D,OAAO;IACLC,eAAe,EAAED,MAAM,CAACC,eAAe,IAAIJ,wBAAwB;IACnEK,cAAc,EAAEF,MAAM,CAACE,cAAc,IAAIJ,uBAAuB;IAChEK,mBAAmB,EAAEH,MAAM,CAACG;EAC9B,CAAC;AACH;AAEA,OAAO,SAASC,cAAcA,CAACC,CAAe,EAAY;EACxD,OAAO;IACLC,GAAG,EAAED,CAAC,CAACC,GAAG;IACVC,GAAG,EAAEF,CAAC,CAACE,GAAG;IACVC,QAAQ,EAAEH,CAAC,CAACG,QAAQ;IACpBC,KAAK,EAAEJ,CAAC,CAACI,KAAK;IACdC,OAAO,EAAEL,CAAC,CAACK,OAAO;IAClBC,QAAQ,EAAEN,CAAC,CAACM,QAAQ;IACpBC,SAAS,EAAE,IAAIC,IAAI,CAACR,CAAC,CAACS,WAAW;EACnC,CAAC;AACH;AAEA,SAASC,YAAYA,CAACC,CAAqB,EAAc;EACvD,QAAQA,CAAC;IACP,KAAK,MAAM;IACX,KAAK,kBAAkB;IACvB,KAAK,0BAA0B;IAC/B,KAAK,QAAQ;MACX,OAAOA,CAAC;IACV;MACE;MACA,OAAO,MAAM;EACjB;AACF;AAEA,OAAO,SAASC,WAAWA,CAACZ,CAAY,EAAe;EACrD,QAAQA,CAAC,CAACa,IAAI;IACZ,KAAK,MAAM;MACT,OAAO;QAAEC,IAAI,EAAE;MAAO,CAAC;IACzB,KAAK,UAAU;MACb,OAAO;QAAEA,IAAI,EAAE;MAAW,CAAC;IAC7B,KAAK,SAAS;MACZ,OAAO;QAAEA,IAAI,EAAE,SAAS;QAAEC,MAAM,EAAEL,YAAY,CAACV,CAAC,CAACgB,UAAU;MAAE,CAAC;IAChE;MACE;MACA,OAAO;QAAEF,IAAI,EAAE;MAAO,CAAC;EAC3B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,oBAAoBA,CAACC,CAAU,EAAS;EACtD,MAAMC,IAAI,GAAID,CAAC,EAAoCC,IAAI;EACvD,MAAMC,OAAO,GAAIF,CAAC,EAAuCE,OAAO,IAAIC,MAAM,CAACH,CAAC,CAAC;EAC7E,MAAMJ,IAAI,GAAGQ,UAAU,CAACH,IAAI,CAAC;EAC7B,IAAIL,IAAI,EAAE;IACR,MAAM,IAAIvB,WAAW,CAACuB,IAAI,EAAEM,OAAO,CAAC;EACtC;EACA,MAAMF,CAAC;AACT;AAEA,SAASI,UAAUA,CAACH,IAAwB,EAA+B;EACzE,QAAQA,IAAI;IACV,KAAK,mBAAmB;MACtB,OAAO,kBAAkB;IAC3B,KAAK,4BAA4B;MAC/B,OAAO,0BAA0B;IACnC,KAAK,iBAAiB;MACpB,OAAO,gBAAgB;IACzB;MACE,OAAOI,SAAS;EACpB;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Error kinds thrown from `Beekon.start()` / `Beekon.history()`. Match the
|
|
5
|
+
* native `BeekonError` cases byte-for-byte.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Typed error surfaced from the bridge. The native module rejects promises
|
|
10
|
+
* with the kind encoded as the error code; the facade re-wraps into this.
|
|
11
|
+
*/
|
|
12
|
+
export class BeekonError extends Error {
|
|
13
|
+
constructor(kind, message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = 'BeekonError';
|
|
16
|
+
this.kind = kind;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# 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;;AAMA;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/location.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -5,53 +5,49 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Wire types are flat (primitives + nested flat objects) because Codegen's
|
|
7
7
|
* TS-to-Kotlin/ObjC type derivation has limited support for unions and
|
|
8
|
-
* recursive structures.
|
|
9
|
-
* string with sibling fields nullable per variant.
|
|
8
|
+
* recursive structures. The state variants are encoded as a `type`
|
|
9
|
+
* discriminator string with sibling fields nullable per variant.
|
|
10
10
|
*/
|
|
11
11
|
import type { CodegenTypes, TurboModule } from 'react-native';
|
|
12
12
|
export type WireAndroidNotification = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
title: string;
|
|
17
|
-
text: string;
|
|
18
|
-
smallIconResName: string;
|
|
13
|
+
title?: string;
|
|
14
|
+
text?: string;
|
|
15
|
+
smallIconResName?: string;
|
|
19
16
|
};
|
|
20
17
|
export type WireConfig = {
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
/** Required at the wire level — the TS facade applies defaults (30 / 100). */
|
|
19
|
+
intervalSeconds: number;
|
|
20
|
+
/** Required at the wire level — the TS facade applies defaults (30 / 100). */
|
|
21
|
+
distanceMeters: number;
|
|
22
|
+
/** Android-only. iOS native module ignores. */
|
|
25
23
|
androidNotification?: WireAndroidNotification;
|
|
26
|
-
licenseKey?: string;
|
|
27
24
|
};
|
|
28
|
-
export type
|
|
25
|
+
export type WireLocation = {
|
|
29
26
|
lat: number;
|
|
30
27
|
lng: number;
|
|
31
|
-
accuracy: number;
|
|
32
|
-
speed: number;
|
|
33
|
-
bearing: number;
|
|
34
|
-
altitude: number;
|
|
35
28
|
timestampMs: number;
|
|
29
|
+
/** `null` when the OS did not report a value (e.g. low-confidence fix). */
|
|
30
|
+
accuracy: number | null;
|
|
31
|
+
speed: number | null;
|
|
32
|
+
bearing: number | null;
|
|
33
|
+
altitude: number | null;
|
|
36
34
|
};
|
|
37
35
|
export type WireState = {
|
|
38
|
-
/** One of: 'idle' | '
|
|
36
|
+
/** One of: 'idle' | 'tracking' | 'stopped'. */
|
|
39
37
|
type: string;
|
|
40
38
|
/**
|
|
41
|
-
* Only populated when `type === '
|
|
42
|
-
* '
|
|
39
|
+
* Only populated when `type === 'stopped'`. One of:
|
|
40
|
+
* 'user' | 'permissionDenied' | 'locationServicesDisabled' | 'system'.
|
|
43
41
|
*/
|
|
44
|
-
|
|
42
|
+
stopReason?: string;
|
|
45
43
|
};
|
|
46
44
|
export interface Spec extends TurboModule {
|
|
47
|
-
initialize(): Promise<void>;
|
|
48
45
|
configure(config: WireConfig): Promise<void>;
|
|
49
46
|
start(): Promise<void>;
|
|
50
47
|
stop(): Promise<void>;
|
|
51
|
-
|
|
52
|
-
history(fromMs: number, toMs: number): Promise<WirePosition[]>;
|
|
48
|
+
history(fromMs: number, toMs: number): Promise<WireLocation[]>;
|
|
53
49
|
readonly onState: CodegenTypes.EventEmitter<WireState>;
|
|
54
|
-
readonly
|
|
50
|
+
readonly onLocation: CodegenTypes.EventEmitter<WireLocation>;
|
|
55
51
|
}
|
|
56
52
|
declare const _default: Spec;
|
|
57
53
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeBeekonRn.d.ts","sourceRoot":"","sources":["../../../src/NativeBeekonRn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9D,MAAM,MAAM,uBAAuB,GAAG;IACpC,
|
|
1
|
+
{"version":3,"file":"NativeBeekonRn.d.ts","sourceRoot":"","sources":["../../../src/NativeBeekonRn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9D,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,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;CACzB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE/D,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvD,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;CAC9D;;AAED,wBAAkE"}
|