@tryterra/react-native 0.0.0-stage → 2.1.0
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/LICENSE +21 -0
- package/README.md +111 -2
- package/TerraReactNative.podspec +48 -0
- package/android/build.gradle +87 -0
- package/android/src/bridgeCore/kotlin/README.md +1 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/BridgeBootstrap.kt +133 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/BridgeHost.kt +32 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/Conversions.kt +468 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/LauncherSlots.kt +41 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/Rejections.kt +150 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/StreamRegistry.kt +77 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridge.kt +86 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridgeOpsImpl.kt +258 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridgeStreamsImpl.kt +52 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TokenBroker.kt +198 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeErrors.kt +217 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeOps.kt +493 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeTypes.kt +897 -0
- package/android/src/healthConnectOnly/kotlin/co/tryterra/sdk/reactnative/TerraStores.kt +11 -0
- package/android/src/main/AndroidManifest.xml +24 -0
- package/android/src/main/java/co/tryterra/sdk/reactnative/TerraBridgeModule.kt +96 -0
- package/android/src/main/java/co/tryterra/sdk/reactnative/TerraReactNativePackage.kt +26 -0
- package/android/src/main/java/co/tryterra/sdk/reactnative/TerraStartup.kt +46 -0
- package/android/src/samsung/kotlin/co/tryterra/sdk/reactnative/TerraStores.kt +13 -0
- package/docs/availability.md +246 -0
- package/frameworks/TerraSDK.xcframework/Info.plist +48 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Info.plist +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.abi.json +81513 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.package.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.swiftinterface +2127 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/PrivacyInfo.xcprivacy +96 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/TerraSDK +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Info.plist +20 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/DWARF/TerraSDK +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/aarch64/TerraSDK.yml +6473 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Info.plist +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +81513 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.package.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +2127 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +81513 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.package.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +2150 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +2127 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/PrivacyInfo.xcprivacy +96 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/TerraSDK +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/_CodeSignature/CodeResources +223 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Info.plist +20 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/DWARF/TerraSDK +0 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/aarch64/TerraSDK.yml +6474 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/x86_64/TerraSDK.yml +6392 -0
- package/ios/TerraBridgeCore/BridgeBootstrap.swift +89 -0
- package/ios/TerraBridgeCore/BridgeHost.swift +13 -0
- package/ios/TerraBridgeCore/Conversions.swift +467 -0
- package/ios/TerraBridgeCore/Generated/BridgeErrors.swift +179 -0
- package/ios/TerraBridgeCore/Generated/BridgeOps.swift +795 -0
- package/ios/TerraBridgeCore/Generated/BridgeTypes.swift +1317 -0
- package/ios/TerraBridgeCore/Locked.swift +15 -0
- package/ios/TerraBridgeCore/README.md +1 -0
- package/ios/TerraBridgeCore/Rejections.swift +130 -0
- package/ios/TerraBridgeCore/RuntimeAttachment.swift +60 -0
- package/ios/TerraBridgeCore/StreamRegistry.swift +59 -0
- package/ios/TerraBridgeCore/TerraBridge.swift +122 -0
- package/ios/TerraBridgeCore/TerraBridgeOpsImpl.swift +254 -0
- package/ios/TerraBridgeCore/TerraBridgeStreamsImpl.swift +60 -0
- package/ios/TerraBridgeCore/TokenBroker.swift +147 -0
- package/ios/TerraBridgeModule.mm +79 -0
- package/ios/TerraBridgeModuleImpl.swift +49 -0
- package/ios/TerraReactNative.swift +19 -0
- package/lib/EndUser.d.ts +12 -0
- package/lib/EndUser.js +13 -0
- package/lib/NativeTerraBridge.d.ts +23 -0
- package/lib/NativeTerraBridge.js +13 -0
- package/lib/Terra.d.ts +154 -0
- package/lib/Terra.js +280 -0
- package/lib/TerraError.d.ts +42 -0
- package/lib/TerraError.js +95 -0
- package/lib/createTerra.d.ts +8 -0
- package/lib/createTerra.js +19 -0
- package/lib/generated/client.d.ts +92 -0
- package/lib/generated/client.js +196 -0
- package/lib/generated/codecs.d.ts +135 -0
- package/lib/generated/codecs.js +1358 -0
- package/lib/generated/errors.d.ts +13 -0
- package/lib/generated/errors.js +68 -0
- package/lib/generated/ops.d.ts +13 -0
- package/lib/generated/ops.js +137 -0
- package/lib/generated/streams.d.ts +23 -0
- package/lib/generated/streams.js +58 -0
- package/lib/generated/types.d.ts +481 -0
- package/lib/generated/types.js +92 -0
- package/lib/index.d.ts +29 -0
- package/lib/index.js +55 -0
- package/package.json +71 -4
- package/src/EndUser.ts +15 -0
- package/src/NativeTerraBridge.ts +27 -0
- package/src/Terra.ts +462 -0
- package/src/TerraError.ts +116 -0
- package/src/createTerra.ts +18 -0
- package/src/generated/client.ts +243 -0
- package/src/generated/codecs.ts +1287 -0
- package/src/generated/errors.ts +113 -0
- package/src/generated/ops.ts +197 -0
- package/src/generated/streams.ts +74 -0
- package/src/generated/types.ts +667 -0
- package/src/index.ts +52 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Every code a rejected op can carry. */
|
|
2
|
+
export type TerraErrorCode = "health_data_unavailable" | "not_connected" | "route_awaiting_converter" | "token_unavailable" | "token_rejected" | "token_provider_failed" | "user_limit_reached" | "upgrade_required" | "platform" | "device_key_unavailable" | "signature_rejected" | "clock_skewed" | "link_revoked" | "dev_id_mismatch" | "link_conflict" | "sync_already_running" | "link_already_running" | "store_locked" | "store_unreadable" | "deadline_exceeded" | "read_quota_exceeded" | "permission_denied" | "authorization_not_determined" | "sample_not_found" | "rollback_incomplete" | "distance_not_attributable" | "blood_pressure_incomplete" | "authorization_unavailable_in_extension" | "planned_workout_unnamed" | "network.transport" | "network.throttled" | "network.server_error" | "network.malformed_response" | "network.offline" | "network.timed_out" | "bridge.not_bootstrapped" | "bridge.unsupported_on_platform" | "bridge.no_activity" | "bridge.permission_sheet_unavailable" | "bridge.token_timeout" | "bridge.invalid_payload";
|
|
3
|
+
/**
|
|
4
|
+
* Whether retrying the same call could succeed.
|
|
5
|
+
*
|
|
6
|
+
* `'carried'` means the answer depends on the instance, so the rejection's own `retryable` is
|
|
7
|
+
* the one to read. Only `network.server_error` is carried today.
|
|
8
|
+
*/
|
|
9
|
+
export declare const retryableByCode: Readonly<Record<TerraErrorCode, boolean | 'carried'>>;
|
|
10
|
+
/** Codes no native SDK raises. Their cause is always the host's setup or the bridge's own state. */
|
|
11
|
+
export declare const bridgeOwnedCodes: readonly TerraErrorCode[];
|
|
12
|
+
/** Codes only one platform can raise, so that a caller can narrow rather than discover. */
|
|
13
|
+
export declare const platformOnlyCodes: Readonly<Record<string, readonly TerraErrorCode[]>>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Generated from surface/terra-surface.json by surface/gen. Do not edit by hand.
|
|
3
|
+
// Regenerate with: node surface/gen/src/cli.ts generate
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.platformOnlyCodes = exports.bridgeOwnedCodes = exports.retryableByCode = void 0;
|
|
6
|
+
/**
|
|
7
|
+
* Whether retrying the same call could succeed.
|
|
8
|
+
*
|
|
9
|
+
* `'carried'` means the answer depends on the instance, so the rejection's own `retryable` is
|
|
10
|
+
* the one to read. Only `network.server_error` is carried today.
|
|
11
|
+
*/
|
|
12
|
+
exports.retryableByCode = {
|
|
13
|
+
"health_data_unavailable": false,
|
|
14
|
+
"not_connected": false,
|
|
15
|
+
"route_awaiting_converter": false,
|
|
16
|
+
"token_unavailable": false,
|
|
17
|
+
"token_rejected": false,
|
|
18
|
+
"token_provider_failed": false,
|
|
19
|
+
"user_limit_reached": false,
|
|
20
|
+
"upgrade_required": false,
|
|
21
|
+
"platform": false,
|
|
22
|
+
"device_key_unavailable": false,
|
|
23
|
+
"signature_rejected": false,
|
|
24
|
+
"clock_skewed": false,
|
|
25
|
+
"link_revoked": false,
|
|
26
|
+
"dev_id_mismatch": false,
|
|
27
|
+
"link_conflict": true,
|
|
28
|
+
"sync_already_running": false,
|
|
29
|
+
"link_already_running": false,
|
|
30
|
+
"store_locked": true,
|
|
31
|
+
"store_unreadable": false,
|
|
32
|
+
"deadline_exceeded": true,
|
|
33
|
+
"read_quota_exceeded": true,
|
|
34
|
+
"permission_denied": false,
|
|
35
|
+
"authorization_not_determined": false,
|
|
36
|
+
"sample_not_found": false,
|
|
37
|
+
"rollback_incomplete": false,
|
|
38
|
+
"distance_not_attributable": false,
|
|
39
|
+
"blood_pressure_incomplete": false,
|
|
40
|
+
"authorization_unavailable_in_extension": false,
|
|
41
|
+
"planned_workout_unnamed": false,
|
|
42
|
+
"network.transport": true,
|
|
43
|
+
"network.throttled": true,
|
|
44
|
+
"network.server_error": "carried",
|
|
45
|
+
"network.malformed_response": false,
|
|
46
|
+
"network.offline": true,
|
|
47
|
+
"network.timed_out": true,
|
|
48
|
+
"bridge.not_bootstrapped": false,
|
|
49
|
+
"bridge.unsupported_on_platform": false,
|
|
50
|
+
"bridge.no_activity": true,
|
|
51
|
+
"bridge.permission_sheet_unavailable": true,
|
|
52
|
+
"bridge.token_timeout": false,
|
|
53
|
+
"bridge.invalid_payload": false,
|
|
54
|
+
};
|
|
55
|
+
/** Codes no native SDK raises. Their cause is always the host's setup or the bridge's own state. */
|
|
56
|
+
exports.bridgeOwnedCodes = [
|
|
57
|
+
"bridge.not_bootstrapped",
|
|
58
|
+
"bridge.unsupported_on_platform",
|
|
59
|
+
"bridge.no_activity",
|
|
60
|
+
"bridge.permission_sheet_unavailable",
|
|
61
|
+
"bridge.token_timeout",
|
|
62
|
+
"bridge.invalid_payload",
|
|
63
|
+
];
|
|
64
|
+
/** Codes only one platform can raise, so that a caller can narrow rather than discover. */
|
|
65
|
+
exports.platformOnlyCodes = {
|
|
66
|
+
ios: ["planned_workout_unnamed", "network.offline", "network.timed_out"],
|
|
67
|
+
android: ["read_quota_exceeded", "bridge.no_activity", "bridge.permission_sheet_unavailable"],
|
|
68
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The op table: the strings that travel, and where each one is implemented.
|
|
3
|
+
*
|
|
4
|
+
* `availableOn` is read by the availability test and by the facade, which is what makes an op
|
|
5
|
+
* missing from a platform a typed absence rather than a runtime surprise.
|
|
6
|
+
*/
|
|
7
|
+
export type OpId = "client.attach" | "client.connect" | "client.connections" | "client.disconnect" | "token.setProviderPresent" | "token.resolve" | "token.reject" | "permissions.request" | "permissions.status" | "permissions.writeStatus" | "permissions.requested" | "permissions.statuses" | "permissions.backgroundReadStatus" | "permissions.historyReadStatus" | "diagnostics.state" | "diagnostics.lastDelivery" | "diagnostics.report" | "diagnostics.send" | "background.isRegistered" | "background.cancel" | "body.heartRate" | "body.logHeartRate" | "body.log" | "body.delete" | "daily.steps" | "daily.log" | "daily.delete" | "sleep.segments" | "sleep.log" | "sleep.delete" | "activity.workouts" | "activity.log" | "activity.delete" | "nutrition.log" | "nutrition.delete" | "plannedWorkouts.planned" | "plannedWorkouts.markComplete" | "plannedWorkouts.delete" | "plannedWorkouts.schedulingStatus" | "plannedWorkouts.requestScheduling";
|
|
8
|
+
export declare const opIds: readonly OpId[];
|
|
9
|
+
export declare const availableOn: Readonly<Record<OpId, readonly string[]>>;
|
|
10
|
+
export type StreamId = "diagnostics.events" | "body.changes" | "daily.changes" | "sleep.changes" | "activity.changes" | "bridge.tokenRequest";
|
|
11
|
+
export declare const streamIds: readonly StreamId[];
|
|
12
|
+
/** Event kinds, and the platforms that can emit each. */
|
|
13
|
+
export declare const eventKinds: Readonly<Record<string, readonly string[]>>;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Generated from surface/terra-surface.json by surface/gen. Do not edit by hand.
|
|
3
|
+
// Regenerate with: node surface/gen/src/cli.ts generate
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.eventKinds = exports.streamIds = exports.availableOn = exports.opIds = void 0;
|
|
6
|
+
exports.opIds = [
|
|
7
|
+
"client.attach",
|
|
8
|
+
"client.connect",
|
|
9
|
+
"client.connections",
|
|
10
|
+
"client.disconnect",
|
|
11
|
+
"token.setProviderPresent",
|
|
12
|
+
"token.resolve",
|
|
13
|
+
"token.reject",
|
|
14
|
+
"permissions.request",
|
|
15
|
+
"permissions.status",
|
|
16
|
+
"permissions.writeStatus",
|
|
17
|
+
"permissions.requested",
|
|
18
|
+
"permissions.statuses",
|
|
19
|
+
"permissions.backgroundReadStatus",
|
|
20
|
+
"permissions.historyReadStatus",
|
|
21
|
+
"diagnostics.state",
|
|
22
|
+
"diagnostics.lastDelivery",
|
|
23
|
+
"diagnostics.report",
|
|
24
|
+
"diagnostics.send",
|
|
25
|
+
"background.isRegistered",
|
|
26
|
+
"background.cancel",
|
|
27
|
+
"body.heartRate",
|
|
28
|
+
"body.logHeartRate",
|
|
29
|
+
"body.log",
|
|
30
|
+
"body.delete",
|
|
31
|
+
"daily.steps",
|
|
32
|
+
"daily.log",
|
|
33
|
+
"daily.delete",
|
|
34
|
+
"sleep.segments",
|
|
35
|
+
"sleep.log",
|
|
36
|
+
"sleep.delete",
|
|
37
|
+
"activity.workouts",
|
|
38
|
+
"activity.log",
|
|
39
|
+
"activity.delete",
|
|
40
|
+
"nutrition.log",
|
|
41
|
+
"nutrition.delete",
|
|
42
|
+
"plannedWorkouts.planned",
|
|
43
|
+
"plannedWorkouts.markComplete",
|
|
44
|
+
"plannedWorkouts.delete",
|
|
45
|
+
"plannedWorkouts.schedulingStatus",
|
|
46
|
+
"plannedWorkouts.requestScheduling",
|
|
47
|
+
];
|
|
48
|
+
exports.availableOn = {
|
|
49
|
+
"client.attach": ["ios", "android"],
|
|
50
|
+
"client.connect": ["ios", "android"],
|
|
51
|
+
"client.connections": ["ios", "android"],
|
|
52
|
+
"client.disconnect": ["ios", "android"],
|
|
53
|
+
"token.setProviderPresent": ["ios", "android"],
|
|
54
|
+
"token.resolve": ["ios", "android"],
|
|
55
|
+
"token.reject": ["ios", "android"],
|
|
56
|
+
"permissions.request": ["ios", "android"],
|
|
57
|
+
"permissions.status": ["ios", "android"],
|
|
58
|
+
"permissions.writeStatus": ["ios", "android"],
|
|
59
|
+
"permissions.requested": ["ios", "android"],
|
|
60
|
+
"permissions.statuses": ["android"],
|
|
61
|
+
"permissions.backgroundReadStatus": ["android"],
|
|
62
|
+
"permissions.historyReadStatus": ["android"],
|
|
63
|
+
"diagnostics.state": ["ios", "android"],
|
|
64
|
+
"diagnostics.lastDelivery": ["ios", "android"],
|
|
65
|
+
"diagnostics.report": ["ios", "android"],
|
|
66
|
+
"diagnostics.send": ["ios", "android"],
|
|
67
|
+
"background.isRegistered": ["ios", "android"],
|
|
68
|
+
"background.cancel": ["android"],
|
|
69
|
+
"body.heartRate": ["ios", "android"],
|
|
70
|
+
"body.logHeartRate": ["ios", "android"],
|
|
71
|
+
"body.log": ["ios", "android"],
|
|
72
|
+
"body.delete": ["ios", "android"],
|
|
73
|
+
"daily.steps": ["ios", "android"],
|
|
74
|
+
"daily.log": ["ios", "android"],
|
|
75
|
+
"daily.delete": ["ios", "android"],
|
|
76
|
+
"sleep.segments": ["ios", "android"],
|
|
77
|
+
"sleep.log": ["ios", "android"],
|
|
78
|
+
"sleep.delete": ["ios", "android"],
|
|
79
|
+
"activity.workouts": ["ios", "android"],
|
|
80
|
+
"activity.log": ["ios", "android"],
|
|
81
|
+
"activity.delete": ["ios", "android"],
|
|
82
|
+
"nutrition.log": ["ios", "android"],
|
|
83
|
+
"nutrition.delete": ["ios", "android"],
|
|
84
|
+
"plannedWorkouts.planned": ["ios"],
|
|
85
|
+
"plannedWorkouts.markComplete": ["ios"],
|
|
86
|
+
"plannedWorkouts.delete": ["ios"],
|
|
87
|
+
"plannedWorkouts.schedulingStatus": ["ios"],
|
|
88
|
+
"plannedWorkouts.requestScheduling": ["ios"],
|
|
89
|
+
};
|
|
90
|
+
exports.streamIds = [
|
|
91
|
+
"diagnostics.events",
|
|
92
|
+
"body.changes",
|
|
93
|
+
"daily.changes",
|
|
94
|
+
"sleep.changes",
|
|
95
|
+
"activity.changes",
|
|
96
|
+
"bridge.tokenRequest",
|
|
97
|
+
];
|
|
98
|
+
/** Event kinds, and the platforms that can emit each. */
|
|
99
|
+
exports.eventKinds = {
|
|
100
|
+
"connected": ["ios", "android"],
|
|
101
|
+
"disconnected": ["ios", "android"],
|
|
102
|
+
"linkRevoked": ["ios", "android"],
|
|
103
|
+
"permissionResult": ["ios", "android"],
|
|
104
|
+
"backgroundWake": ["ios", "android"],
|
|
105
|
+
"backgroundRefreshUnscheduled": ["ios", "android"],
|
|
106
|
+
"uploadBatch": ["ios", "android"],
|
|
107
|
+
"uploadFailed": ["ios", "android"],
|
|
108
|
+
"retryScheduled": ["ios", "android"],
|
|
109
|
+
"backfillProgress": ["ios", "android"],
|
|
110
|
+
"serverBackfillQueued": ["ios", "android"],
|
|
111
|
+
"serverBackfillCompleted": ["ios", "android"],
|
|
112
|
+
"serverBackfillAbandoned": ["ios", "android"],
|
|
113
|
+
"serverBackfillRefused": ["ios", "android"],
|
|
114
|
+
"serverBackfillUnsupported": ["ios", "android"],
|
|
115
|
+
"serverBackfillPollFailed": ["ios", "android"],
|
|
116
|
+
"backgroundObservationUnavailable": ["ios", "android"],
|
|
117
|
+
"observationDropped": ["ios", "android"],
|
|
118
|
+
"samplesLogged": ["ios", "android"],
|
|
119
|
+
"sampleDeleted": ["ios", "android"],
|
|
120
|
+
"tokenRefreshed": ["ios", "android"],
|
|
121
|
+
"deviceKeyRevokeAnswered": ["ios", "android"],
|
|
122
|
+
"deviceKeyRevokeFailed": ["ios", "android"],
|
|
123
|
+
"diagnosticsReported": ["ios", "android"],
|
|
124
|
+
"backgroundWakeRefused": ["ios"],
|
|
125
|
+
"dailyDayTooLarge": ["ios"],
|
|
126
|
+
"plannedWorkoutUpdated": ["ios"],
|
|
127
|
+
"plannedWorkoutsScheduled": ["ios"],
|
|
128
|
+
"plannedWorkoutScheduleFailed": ["ios"],
|
|
129
|
+
"sleepWakeDateTooLarge": ["ios"],
|
|
130
|
+
"backgroundWorkGap": ["android"],
|
|
131
|
+
"backgroundWorkReset": ["android"],
|
|
132
|
+
"changeTokenExpired": ["android"],
|
|
133
|
+
"historyReadUnavailable": ["android"],
|
|
134
|
+
"processExitDecided": ["android"],
|
|
135
|
+
"readQuotaExceeded": ["android"],
|
|
136
|
+
"routeConsentRequired": ["android"],
|
|
137
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { HealthChange, StreamMessage, TerraEvent, TokenRequest } from "./types";
|
|
2
|
+
import type { StreamId } from "./ops";
|
|
3
|
+
/** The element each stream delivers inside a data message. */
|
|
4
|
+
export interface StreamElements {
|
|
5
|
+
"diagnostics.events": TerraEvent;
|
|
6
|
+
"body.changes": HealthChange;
|
|
7
|
+
"daily.changes": HealthChange;
|
|
8
|
+
"sleep.changes": HealthChange;
|
|
9
|
+
"activity.changes": HealthChange;
|
|
10
|
+
"bridge.tokenRequest": TokenRequest;
|
|
11
|
+
}
|
|
12
|
+
/** Where each stream is published. */
|
|
13
|
+
export declare const streamAvailableOn: Readonly<Record<StreamId, readonly string[]>>;
|
|
14
|
+
/** One delivered message, with a data message's element typed as its stream's own. */
|
|
15
|
+
export type StreamDelivery<S extends StreamId> = {
|
|
16
|
+
kind: "data";
|
|
17
|
+
element: StreamElements[S];
|
|
18
|
+
} | Exclude<StreamMessage, {
|
|
19
|
+
kind: "data";
|
|
20
|
+
}>;
|
|
21
|
+
export declare function decodeStreamElement<S extends StreamId>(stream: S, raw: unknown): StreamElements[S];
|
|
22
|
+
export declare function encodeStreamElement<S extends StreamId>(stream: S, value: StreamElements[S]): Record<string, unknown>;
|
|
23
|
+
export declare function decodeStreamDelivery<S extends StreamId>(stream: S, raw: unknown): StreamDelivery<S>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Generated from surface/terra-surface.json by surface/gen. Do not edit by hand.
|
|
3
|
+
// Regenerate with: node surface/gen/src/cli.ts generate
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.streamAvailableOn = void 0;
|
|
6
|
+
exports.decodeStreamElement = decodeStreamElement;
|
|
7
|
+
exports.encodeStreamElement = encodeStreamElement;
|
|
8
|
+
exports.decodeStreamDelivery = decodeStreamDelivery;
|
|
9
|
+
const codecs_1 = require("./codecs");
|
|
10
|
+
/** Where each stream is published. */
|
|
11
|
+
exports.streamAvailableOn = {
|
|
12
|
+
"diagnostics.events": ["ios", "android"],
|
|
13
|
+
"body.changes": ["ios", "android"],
|
|
14
|
+
"daily.changes": ["ios", "android"],
|
|
15
|
+
"sleep.changes": ["ios", "android"],
|
|
16
|
+
"activity.changes": ["ios", "android"],
|
|
17
|
+
"bridge.tokenRequest": ["ios", "android"],
|
|
18
|
+
};
|
|
19
|
+
function decodeStreamElement(stream, raw) {
|
|
20
|
+
switch (stream) {
|
|
21
|
+
case "diagnostics.events":
|
|
22
|
+
return (0, codecs_1.decodeTerraEvent)(raw, "diagnostics.events");
|
|
23
|
+
case "body.changes":
|
|
24
|
+
return (0, codecs_1.decodeHealthChange)(raw, "body.changes");
|
|
25
|
+
case "daily.changes":
|
|
26
|
+
return (0, codecs_1.decodeHealthChange)(raw, "daily.changes");
|
|
27
|
+
case "sleep.changes":
|
|
28
|
+
return (0, codecs_1.decodeHealthChange)(raw, "sleep.changes");
|
|
29
|
+
case "activity.changes":
|
|
30
|
+
return (0, codecs_1.decodeHealthChange)(raw, "activity.changes");
|
|
31
|
+
case "bridge.tokenRequest":
|
|
32
|
+
return (0, codecs_1.decodeTokenRequest)(raw, "bridge.tokenRequest");
|
|
33
|
+
}
|
|
34
|
+
throw new TypeError(`unknown stream ${String(stream)}`);
|
|
35
|
+
}
|
|
36
|
+
function encodeStreamElement(stream, value) {
|
|
37
|
+
switch (stream) {
|
|
38
|
+
case "diagnostics.events":
|
|
39
|
+
return (0, codecs_1.encodeTerraEvent)(value);
|
|
40
|
+
case "body.changes":
|
|
41
|
+
return (0, codecs_1.encodeHealthChange)(value);
|
|
42
|
+
case "daily.changes":
|
|
43
|
+
return (0, codecs_1.encodeHealthChange)(value);
|
|
44
|
+
case "sleep.changes":
|
|
45
|
+
return (0, codecs_1.encodeHealthChange)(value);
|
|
46
|
+
case "activity.changes":
|
|
47
|
+
return (0, codecs_1.encodeHealthChange)(value);
|
|
48
|
+
case "bridge.tokenRequest":
|
|
49
|
+
return (0, codecs_1.encodeTokenRequest)(value);
|
|
50
|
+
}
|
|
51
|
+
throw new TypeError(`unknown stream ${String(stream)}`);
|
|
52
|
+
}
|
|
53
|
+
function decodeStreamDelivery(stream, raw) {
|
|
54
|
+
const message = (0, codecs_1.decodeStreamMessage)(raw, "StreamMessage");
|
|
55
|
+
if (message.kind !== "data")
|
|
56
|
+
return message;
|
|
57
|
+
return { kind: "data", element: decodeStreamElement(stream, message.element) };
|
|
58
|
+
}
|