@tryterra/react-native 0.0.0-stage → 2.2.1
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 +142 -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 +557 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/LauncherSlots.kt +41 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/ReadConversions.kt +250 -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 +300 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridgeStreamsImpl.kt +50 -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 +582 -0
- package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeTypes.kt +1569 -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 +396 -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 +82672 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.package.swiftinterface +2186 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +2186 -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 +2163 -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 +6594 -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 +82672 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.package.swiftinterface +2186 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +2186 -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 +2163 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +82672 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.package.swiftinterface +2186 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +2186 -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 +2163 -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 +6595 -0
- package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/x86_64/TerraSDK.yml +6513 -0
- package/ios/TerraBridgeCore/BridgeBootstrap.swift +89 -0
- package/ios/TerraBridgeCore/BridgeHost.swift +13 -0
- package/ios/TerraBridgeCore/Conversions+Reads.swift +259 -0
- package/ios/TerraBridgeCore/Conversions.swift +594 -0
- package/ios/TerraBridgeCore/Generated/BridgeErrors.swift +179 -0
- package/ios/TerraBridgeCore/Generated/BridgeOps.swift +967 -0
- package/ios/TerraBridgeCore/Generated/BridgeTypes.swift +2050 -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 +318 -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 +223 -0
- package/lib/Terra.js +336 -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 +128 -0
- package/lib/generated/client.js +256 -0
- package/lib/generated/codecs.d.ts +219 -0
- package/lib/generated/codecs.js +2066 -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 +161 -0
- package/lib/generated/streams.d.ts +23 -0
- package/lib/generated/streams.js +58 -0
- package/lib/generated/types.d.ts +794 -0
- package/lib/generated/types.js +224 -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 +592 -0
- package/src/TerraError.ts +116 -0
- package/src/createTerra.ts +18 -0
- package/src/generated/client.ts +315 -0
- package/src/generated/codecs.ts +1989 -0
- package/src/generated/errors.ts +113 -0
- package/src/generated/ops.ts +233 -0
- package/src/generated/streams.ts +74 -0
- package/src/generated/types.ts +1222 -0
- package/src/index.ts +54 -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.availability" | "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.restingHeartRate" | "body.readings" | "body.logHeartRate" | "body.log" | "body.delete" | "daily.steps" | "daily.totals" | "daily.intraday" | "daily.log" | "daily.delete" | "sleep.segments" | "sleep.log" | "sleep.delete" | "activity.workouts" | "activity.routes" | "activity.intensity" | "activity.log" | "activity.delete" | "nutrition.quantities" | "nutrition.log" | "nutrition.delete" | "nutrition.hydration" | "menstruation.flow" | "menstruation.events" | "athlete.profile" | "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,161 @@
|
|
|
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.availability",
|
|
11
|
+
"client.disconnect",
|
|
12
|
+
"token.setProviderPresent",
|
|
13
|
+
"token.resolve",
|
|
14
|
+
"token.reject",
|
|
15
|
+
"permissions.request",
|
|
16
|
+
"permissions.status",
|
|
17
|
+
"permissions.writeStatus",
|
|
18
|
+
"permissions.requested",
|
|
19
|
+
"permissions.statuses",
|
|
20
|
+
"permissions.backgroundReadStatus",
|
|
21
|
+
"permissions.historyReadStatus",
|
|
22
|
+
"diagnostics.state",
|
|
23
|
+
"diagnostics.lastDelivery",
|
|
24
|
+
"diagnostics.report",
|
|
25
|
+
"diagnostics.send",
|
|
26
|
+
"background.isRegistered",
|
|
27
|
+
"background.cancel",
|
|
28
|
+
"body.heartRate",
|
|
29
|
+
"body.restingHeartRate",
|
|
30
|
+
"body.readings",
|
|
31
|
+
"body.logHeartRate",
|
|
32
|
+
"body.log",
|
|
33
|
+
"body.delete",
|
|
34
|
+
"daily.steps",
|
|
35
|
+
"daily.totals",
|
|
36
|
+
"daily.intraday",
|
|
37
|
+
"daily.log",
|
|
38
|
+
"daily.delete",
|
|
39
|
+
"sleep.segments",
|
|
40
|
+
"sleep.log",
|
|
41
|
+
"sleep.delete",
|
|
42
|
+
"activity.workouts",
|
|
43
|
+
"activity.routes",
|
|
44
|
+
"activity.intensity",
|
|
45
|
+
"activity.log",
|
|
46
|
+
"activity.delete",
|
|
47
|
+
"nutrition.quantities",
|
|
48
|
+
"nutrition.log",
|
|
49
|
+
"nutrition.delete",
|
|
50
|
+
"nutrition.hydration",
|
|
51
|
+
"menstruation.flow",
|
|
52
|
+
"menstruation.events",
|
|
53
|
+
"athlete.profile",
|
|
54
|
+
"plannedWorkouts.planned",
|
|
55
|
+
"plannedWorkouts.markComplete",
|
|
56
|
+
"plannedWorkouts.delete",
|
|
57
|
+
"plannedWorkouts.schedulingStatus",
|
|
58
|
+
"plannedWorkouts.requestScheduling",
|
|
59
|
+
];
|
|
60
|
+
exports.availableOn = {
|
|
61
|
+
"client.attach": ["ios", "android"],
|
|
62
|
+
"client.connect": ["ios", "android"],
|
|
63
|
+
"client.connections": ["ios", "android"],
|
|
64
|
+
"client.availability": ["ios", "android"],
|
|
65
|
+
"client.disconnect": ["ios", "android"],
|
|
66
|
+
"token.setProviderPresent": ["ios", "android"],
|
|
67
|
+
"token.resolve": ["ios", "android"],
|
|
68
|
+
"token.reject": ["ios", "android"],
|
|
69
|
+
"permissions.request": ["ios", "android"],
|
|
70
|
+
"permissions.status": ["ios", "android"],
|
|
71
|
+
"permissions.writeStatus": ["ios", "android"],
|
|
72
|
+
"permissions.requested": ["ios", "android"],
|
|
73
|
+
"permissions.statuses": ["android"],
|
|
74
|
+
"permissions.backgroundReadStatus": ["android"],
|
|
75
|
+
"permissions.historyReadStatus": ["android"],
|
|
76
|
+
"diagnostics.state": ["ios", "android"],
|
|
77
|
+
"diagnostics.lastDelivery": ["ios", "android"],
|
|
78
|
+
"diagnostics.report": ["ios", "android"],
|
|
79
|
+
"diagnostics.send": ["ios", "android"],
|
|
80
|
+
"background.isRegistered": ["ios", "android"],
|
|
81
|
+
"background.cancel": ["android"],
|
|
82
|
+
"body.heartRate": ["ios", "android"],
|
|
83
|
+
"body.restingHeartRate": ["ios", "android"],
|
|
84
|
+
"body.readings": ["ios", "android"],
|
|
85
|
+
"body.logHeartRate": ["ios", "android"],
|
|
86
|
+
"body.log": ["ios", "android"],
|
|
87
|
+
"body.delete": ["ios", "android"],
|
|
88
|
+
"daily.steps": ["ios", "android"],
|
|
89
|
+
"daily.totals": ["ios", "android"],
|
|
90
|
+
"daily.intraday": ["ios", "android"],
|
|
91
|
+
"daily.log": ["ios", "android"],
|
|
92
|
+
"daily.delete": ["ios", "android"],
|
|
93
|
+
"sleep.segments": ["ios", "android"],
|
|
94
|
+
"sleep.log": ["ios", "android"],
|
|
95
|
+
"sleep.delete": ["ios", "android"],
|
|
96
|
+
"activity.workouts": ["ios", "android"],
|
|
97
|
+
"activity.routes": ["ios", "android"],
|
|
98
|
+
"activity.intensity": ["ios", "android"],
|
|
99
|
+
"activity.log": ["ios", "android"],
|
|
100
|
+
"activity.delete": ["ios", "android"],
|
|
101
|
+
"nutrition.quantities": ["ios", "android"],
|
|
102
|
+
"nutrition.log": ["ios", "android"],
|
|
103
|
+
"nutrition.delete": ["ios", "android"],
|
|
104
|
+
"nutrition.hydration": ["ios", "android"],
|
|
105
|
+
"menstruation.flow": ["ios", "android"],
|
|
106
|
+
"menstruation.events": ["ios", "android"],
|
|
107
|
+
"athlete.profile": ["ios"],
|
|
108
|
+
"plannedWorkouts.planned": ["ios"],
|
|
109
|
+
"plannedWorkouts.markComplete": ["ios"],
|
|
110
|
+
"plannedWorkouts.delete": ["ios"],
|
|
111
|
+
"plannedWorkouts.schedulingStatus": ["ios"],
|
|
112
|
+
"plannedWorkouts.requestScheduling": ["ios"],
|
|
113
|
+
};
|
|
114
|
+
exports.streamIds = [
|
|
115
|
+
"diagnostics.events",
|
|
116
|
+
"body.changes",
|
|
117
|
+
"daily.changes",
|
|
118
|
+
"sleep.changes",
|
|
119
|
+
"activity.changes",
|
|
120
|
+
"bridge.tokenRequest",
|
|
121
|
+
];
|
|
122
|
+
/** Event kinds, and the platforms that can emit each. */
|
|
123
|
+
exports.eventKinds = {
|
|
124
|
+
"connected": ["ios", "android"],
|
|
125
|
+
"disconnected": ["ios", "android"],
|
|
126
|
+
"linkRevoked": ["ios", "android"],
|
|
127
|
+
"permissionResult": ["ios", "android"],
|
|
128
|
+
"backgroundWake": ["ios", "android"],
|
|
129
|
+
"backgroundRefreshUnscheduled": ["ios", "android"],
|
|
130
|
+
"uploadBatch": ["ios", "android"],
|
|
131
|
+
"uploadFailed": ["ios", "android"],
|
|
132
|
+
"retryScheduled": ["ios", "android"],
|
|
133
|
+
"backfillProgress": ["ios", "android"],
|
|
134
|
+
"serverBackfillQueued": ["ios", "android"],
|
|
135
|
+
"serverBackfillCompleted": ["ios", "android"],
|
|
136
|
+
"serverBackfillAbandoned": ["ios", "android"],
|
|
137
|
+
"serverBackfillRefused": ["ios", "android"],
|
|
138
|
+
"serverBackfillUnsupported": ["ios", "android"],
|
|
139
|
+
"serverBackfillPollFailed": ["ios", "android"],
|
|
140
|
+
"backgroundObservationUnavailable": ["ios", "android"],
|
|
141
|
+
"observationDropped": ["ios", "android"],
|
|
142
|
+
"samplesLogged": ["ios", "android"],
|
|
143
|
+
"sampleDeleted": ["ios", "android"],
|
|
144
|
+
"tokenRefreshed": ["ios", "android"],
|
|
145
|
+
"deviceKeyRevokeAnswered": ["ios", "android"],
|
|
146
|
+
"deviceKeyRevokeFailed": ["ios", "android"],
|
|
147
|
+
"diagnosticsReported": ["ios", "android"],
|
|
148
|
+
"backgroundWakeRefused": ["ios"],
|
|
149
|
+
"dailyDayTooLarge": ["ios"],
|
|
150
|
+
"plannedWorkoutUpdated": ["ios"],
|
|
151
|
+
"plannedWorkoutsScheduled": ["ios"],
|
|
152
|
+
"plannedWorkoutScheduleFailed": ["ios"],
|
|
153
|
+
"sleepWakeDateTooLarge": ["ios"],
|
|
154
|
+
"backgroundWorkGap": ["android"],
|
|
155
|
+
"backgroundWorkReset": ["android"],
|
|
156
|
+
"changeTokenExpired": ["android"],
|
|
157
|
+
"historyReadUnavailable": ["android"],
|
|
158
|
+
"processExitDecided": ["android"],
|
|
159
|
+
"readQuotaExceeded": ["android"],
|
|
160
|
+
"routeConsentRequired": ["android"],
|
|
161
|
+
};
|
|
@@ -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
|
+
}
|