@trillboards/api-client 0.4.1 → 1.0.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/dist/index.d.ts CHANGED
@@ -1,8 +1,26 @@
1
+ import { Screen, PartnerDeviceRegistrationInput, DisplaySettingsResponse, DisplaySettingsInput, Device, PartnerDeviceBatchRegistrationInput, Impression, AnalyticsData, EarningsData, ErrorEntry, Webhook, FleetCommand, AudienceData, BillingInfo, CreatePartnerSensingRouteRequest, SensingRoute, UpdatePartnerSensingRouteRequest, WebhookEvent } from './generated.js';
2
+ export { BleScanResultData, ContentFitSettings, DeviceCapabilityPayload, GeneratedOperationName, GeneratedSchemaName, HttpProbeResult, MdnsNetworkDevice, PartnerAdDeliveryProfile, PartnerDeviceHeartbeatBody, PartnerHeartbeatMeasurementMetadata, PartnerHeartbeatQueryData, PartnerHeartbeatQueryResponse, PartnerHeartbeatRequest, PartnerHeartbeatResponse, PartnerSafeHeartbeatTelemetry, SsdpDeviceInfo, WifiEnvironmentSnapshot, WifiScanResult, generatedTypes, getDeviceHeartbeatOperation, heartbeatOperation } from './generated.js';
3
+
1
4
  /**
2
- * Core type definitions for the Trillboards API Client SDK.
5
+ * Non-wire type definitions for the Trillboards API Client SDK.
6
+ *
7
+ * This file is DELIBERATELY narrow. Every type that has an on-the-wire peer in
8
+ * the OpenAPI contract lives in `./generated` (emitted from
9
+ * trillboard-api/docs/openapi/merged/partner-api.json via `npm run generate`)
10
+ * and is re-exported from `./index`. What remains here is the set of types that
11
+ * CANNOT be generated from the spec and are the SDK's own hand-crafted surface:
12
+ *
13
+ * - the error contract (mirrors trillboard-api/utils/apiErrors.ts),
14
+ * - client/request ergonomics (`ClientOptions`, `RequestOptions`),
15
+ * - the generic pagination envelope (`ListResponse<T>`),
16
+ * - the Sense Anything "Route" ergonomics + the FLAT route-fire webhook body
17
+ * (richer than the spec can express — the digest summary is a typed object,
18
+ * not the spec's `observed: unknown`),
19
+ * - the `ContentFitMode` literal helper.
3
20
  *
4
- * Mirrors the canonical error contract from trillboard-api/utils/apiErrors.ts
5
- * and the OpenAPI schema at trillboard-api/docs/openapi/partner-api.yaml.
21
+ * Entity/wire types (`Screen`, `Device`, `Webhook`, `WebhookEvent`, `SensingRoute`,
22
+ * display-settings + device-registration inputs, etc.) are NOT here — import them
23
+ * from `@trillboards/api-client` (re-exported from `./generated`).
6
24
  */
7
25
  type ApiErrorType = 'invalid_request_error' | 'authentication_error' | 'permission_error' | 'rate_limit_error' | 'idempotency_error' | 'api_error';
8
26
  interface ErrorDetail {
@@ -45,158 +63,12 @@ interface ListResponse<T> {
45
63
  has_more: boolean;
46
64
  };
47
65
  }
66
+ /**
67
+ * Per-content-type sizing mode. `fit` preserves the entire creative and may
68
+ * letterbox; `fill` covers the screen and may crop edges. A convenience literal
69
+ * for callers building `ContentFitSettings` values; the spec inlines this union.
70
+ */
48
71
  type ContentFitMode = 'fit' | 'fill';
49
- interface ContentFitSettings {
50
- /** Direct and programmatic advertisements. */
51
- advertisements?: ContentFitMode;
52
- /** Default/background streams. */
53
- default_streams?: ContentFitMode;
54
- /** Self-promotion and QR-code house ads. */
55
- self_promo?: ContentFitMode;
56
- }
57
- interface PartnerDisplaySettingsInput {
58
- content_fit?: ContentFitSettings;
59
- [key: string]: unknown;
60
- }
61
- interface PartnerDisplaySettingsResponse {
62
- object: 'display_settings' | string;
63
- screen_id: string;
64
- content_fit: Required<ContentFitSettings>;
65
- [key: string]: unknown;
66
- }
67
- interface PartnerDeviceRegistrationInput {
68
- /** Stable partner-owned device identifier. */
69
- device_id?: string;
70
- /** Legacy SDK alias retained for backwards compatibility. */
71
- device_name?: string;
72
- device_type?: string;
73
- name?: string;
74
- display?: Record<string, unknown>;
75
- display_settings?: PartnerDisplaySettingsInput;
76
- location?: Record<string, unknown>;
77
- venue?: Record<string, unknown>;
78
- placement?: Record<string, unknown>;
79
- [key: string]: unknown;
80
- }
81
- interface PartnerDeviceBatchRegistrationInput {
82
- devices: PartnerDeviceRegistrationInput[];
83
- defaults?: Omit<PartnerDeviceRegistrationInput, 'device_id' | 'device_name'>;
84
- }
85
- interface Screen {
86
- screen_id: string;
87
- name: string;
88
- status: string;
89
- device_id?: string;
90
- venue_type?: string;
91
- country?: string;
92
- city?: string;
93
- timezone?: string;
94
- resolution?: string;
95
- embed_url?: string;
96
- created_at: string;
97
- updated_at: string;
98
- }
99
- interface Device {
100
- device_id: string;
101
- device_name: string;
102
- device_type?: string;
103
- platform?: string;
104
- screen_id?: string;
105
- status: string;
106
- last_heartbeat?: string;
107
- created_at: string;
108
- updated_at: string;
109
- }
110
- interface Impression {
111
- impression_id: string;
112
- screen_id: string;
113
- device_id: string;
114
- ad_type?: string;
115
- advertiser_name?: string;
116
- cpm?: number;
117
- earnings?: number;
118
- played_at: string;
119
- duration_seconds?: number;
120
- }
121
- interface AnalyticsData {
122
- period: string;
123
- total_impressions: number;
124
- total_earnings: number;
125
- average_cpm: number;
126
- fill_rate: number;
127
- screens_active: number;
128
- screens_total: number;
129
- by_screen?: Array<{
130
- screen_id: string;
131
- name: string;
132
- impressions: number;
133
- earnings: number;
134
- }>;
135
- }
136
- interface EarningsData {
137
- period: string;
138
- total_earnings: number;
139
- total_impressions: number;
140
- average_cpm: number;
141
- daily?: Array<{
142
- date: string;
143
- earnings: number;
144
- impressions: number;
145
- }>;
146
- pending_payout: number;
147
- last_payout_date?: string;
148
- last_payout_amount?: number;
149
- }
150
- interface WebhookEvent {
151
- id: string;
152
- type: string;
153
- created_at: string;
154
- data: Record<string, unknown>;
155
- partner_id: string;
156
- }
157
- interface Webhook {
158
- id: string;
159
- url: string;
160
- events: string[];
161
- status: string;
162
- secret: string;
163
- created_at: string;
164
- updated_at: string;
165
- }
166
- interface ErrorEntry {
167
- id: string;
168
- code: string;
169
- type: ApiErrorType;
170
- message: string;
171
- param?: string;
172
- doc_url: string;
173
- timestamp: string;
174
- request_id: string;
175
- endpoint: string;
176
- method: string;
177
- }
178
- interface FleetCommand {
179
- command_id: string;
180
- command: string;
181
- status: string;
182
- target_screens: string[];
183
- created_at: string;
184
- completed_at?: string;
185
- }
186
- interface AudienceData {
187
- screen_id: string;
188
- timestamp: string;
189
- attention_count: number;
190
- dwell_time_avg: number;
191
- demographics?: Record<string, unknown>;
192
- }
193
- interface BillingInfo {
194
- plan: string;
195
- credits_remaining: number;
196
- credits_used: number;
197
- usage_this_month: Record<string, number>;
198
- stripe_connected: boolean;
199
- }
200
72
  /**
201
73
  * Comparison operators accepted for a Route threshold condition — the same set
202
74
  * the API validates against (services/fein/clipTriggerSchema VALID_OPERATORS).
@@ -227,55 +99,6 @@ interface RouteDigest {
227
99
  intervalMinutes: number;
228
100
  nextRunAt?: string;
229
101
  }
230
- /** A Sense Anything Route — a (condition -> channel actions) alert/automation rule. */
231
- interface SensingRoute {
232
- routeId: string;
233
- ownerKind: 'earner_user' | 'partner';
234
- ownerId: string;
235
- partnerId?: string | null;
236
- name: string;
237
- enabled: boolean;
238
- profileName?: string | null;
239
- mode: 'threshold' | 'digest';
240
- condition: RouteCondition | null;
241
- actions: RouteAction[];
242
- screenMongoIds: string[];
243
- sustainWindowSeconds?: number;
244
- sustainMinSamples?: number;
245
- debounceSeconds?: number;
246
- activeTz?: string | null;
247
- activeStartMinute?: number | null;
248
- activeEndMinute?: number | null;
249
- activeDaysMask?: number;
250
- digest: RouteDigest | null;
251
- createdAt: string;
252
- updatedAt: string;
253
- }
254
- /** Request body to create a Route. */
255
- interface CreateRouteParams {
256
- name: string;
257
- screenMongoIds: string[];
258
- actions: RouteAction[];
259
- mode?: 'threshold' | 'digest';
260
- enabled?: boolean;
261
- profileName?: string;
262
- condition?: RouteCondition;
263
- digest?: {
264
- metric: 'count' | 'avg' | 'max';
265
- field?: string;
266
- windowMinutes: number;
267
- intervalMinutes: number;
268
- };
269
- sustainWindowSeconds?: number;
270
- sustainMinSamples?: number;
271
- debounceSeconds?: number;
272
- activeTz?: string;
273
- activeStartMinute?: number;
274
- activeEndMinute?: number;
275
- activeDaysMask?: number;
276
- }
277
- /** Request body to update a Route (partial, non-clobbering). */
278
- type UpdateRouteParams = Partial<CreateRouteParams>;
279
102
  /**
280
103
  * The webhook events a Route fire can deliver. The event type is in the
281
104
  * `X-Trillboards-Event` request header: a custom sensed field delivers
@@ -307,6 +130,10 @@ interface RouteDigestSummary {
307
130
  *
308
131
  * `observed` is a scalar for threshold Routes; for a digest Route
309
132
  * (`venue.traffic_summary`) it is a {@link RouteDigestSummary} object.
133
+ *
134
+ * Kept hand-authored (not routed to the generated `SensingThresholdCrossedEvent`)
135
+ * because the emitter's flat-property-bag walker can only type `observed`/`threshold`
136
+ * as `unknown`; the typed unions here are a deliberate ergonomic improvement.
310
137
  */
311
138
  interface SensingThresholdCrossedEvent {
312
139
  route_id: string;
@@ -420,13 +247,13 @@ declare class ScreensClient {
420
247
  data: Screen;
421
248
  }>;
422
249
  /** Get the resolved display settings for one screen. */
423
- getDisplaySettings(screenId: string): Promise<PartnerDisplaySettingsResponse>;
250
+ getDisplaySettings(screenId: string): Promise<DisplaySettingsResponse>;
424
251
  /** Partially update display settings; omitted content-fit keys are preserved. */
425
- patchDisplaySettings(screenId: string, settings: PartnerDisplaySettingsInput): Promise<PartnerDisplaySettingsResponse>;
252
+ patchDisplaySettings(screenId: string, settings: DisplaySettingsInput): Promise<DisplaySettingsResponse>;
426
253
  /** Update display settings through the PUT endpoint. */
427
- updateDisplaySettings(screenId: string, settings: PartnerDisplaySettingsInput): Promise<PartnerDisplaySettingsResponse>;
254
+ updateDisplaySettings(screenId: string, settings: DisplaySettingsInput): Promise<DisplaySettingsResponse>;
428
255
  /** Apply a partial display-settings update to up to 100 screens. */
429
- batchUpdateDisplaySettings(screenIds: string[], settings: PartnerDisplaySettingsInput): Promise<Record<string, unknown>>;
256
+ batchUpdateDisplaySettings(screenIds: string[], settings: DisplaySettingsInput): Promise<Record<string, unknown>>;
430
257
  /** Delete a screen/device. */
431
258
  delete(screenId: string): Promise<{
432
259
  success: boolean;
@@ -598,7 +425,14 @@ declare class WebhooksClient {
598
425
  constructor(http: HttpClient);
599
426
  /** List all webhook subscriptions. */
600
427
  list(): Promise<ListResponse<Webhook>>;
601
- /** Create a new webhook subscription. */
428
+ /**
429
+ * Create a new webhook subscription.
430
+ *
431
+ * The created `Webhook` carries its signing `secret` (`whsec_…`) — this is the
432
+ * ONLY time it is returned. Persist it securely and pass it to
433
+ * `Webhooks.constructEvent()` to verify the compound `X-Trillboards-Signature`
434
+ * header over the raw delivery body.
435
+ */
602
436
  create(body: {
603
437
  url: string;
604
438
  events: string[];
@@ -748,7 +582,7 @@ declare class RoutesClient {
748
582
  private readonly http;
749
583
  constructor(http: HttpClient);
750
584
  /** Create a Route. Every screen in `screenMongoIds` must be one you own. */
751
- create(body: CreateRouteParams): Promise<{
585
+ create(body: CreatePartnerSensingRouteRequest): Promise<{
752
586
  success: boolean;
753
587
  data: {
754
588
  route: SensingRoute;
@@ -771,7 +605,7 @@ declare class RoutesClient {
771
605
  };
772
606
  }>;
773
607
  /** Update a Route (partial, non-clobbering — only the fields you send change). */
774
- update(routeId: string, body: UpdateRouteParams): Promise<{
608
+ update(routeId: string, body: UpdatePartnerSensingRouteRequest): Promise<{
775
609
  success: boolean;
776
610
  data: {
777
611
  route: SensingRoute;
@@ -964,7 +798,7 @@ declare function parseSignatureHeader(rawSig: string): ParsedSignatureHeader;
964
798
  * req.headers, // IncomingHttpHeaders
965
799
  * process.env.WEBHOOK_SECRET!, // your subscription secret
966
800
  * );
967
- * console.log('Received', event.type);
801
+ * console.log('Received', event.event);
968
802
  * res.sendStatus(200);
969
803
  * } catch (err) {
970
804
  * // TrillboardsError with code "webhook_signature_invalid"
@@ -998,417 +832,6 @@ declare const Webhooks: {
998
832
  * SDK version constant. Sent in User-Agent and X-Trillboards-Client headers.
999
833
  * Keep in sync with package.json version.
1000
834
  */
1001
- declare const VERSION = "0.4.1";
1002
-
1003
- type BleScanResultData = {
1004
- appleContinuitySubtype?: number | null;
1005
- deviceType?: number | null;
1006
- ibeaconMajor?: number | null;
1007
- ibeaconMinor?: number | null;
1008
- ibeaconUuid?: string | null;
1009
- manufacturerCompanyId?: number | null;
1010
- rawAddress: string;
1011
- rssi: number;
1012
- serviceUuids?: Array<string> | null;
1013
- stableManufacturerPayloadHex?: string | null;
1014
- txPowerDbm?: number | null;
1015
- [key: string]: unknown;
1016
- };
1017
- type DeviceCapabilityPayload = {
1018
- agentType?: string | null;
1019
- agentVersion?: string | null;
1020
- audienceSensing?: {
1021
- cameraAvailable?: boolean | null;
1022
- cameraCount?: number | null;
1023
- cameraHealth?: {
1024
- lastFailureClass?: string | null;
1025
- lastFailureMessage?: string | null;
1026
- lastFrameAtMs?: number | null;
1027
- retryCount?: number | null;
1028
- state?: string | null;
1029
- [key: string]: unknown;
1030
- } | null;
1031
- cameraType?: string | null;
1032
- microphoneAvailable?: boolean | null;
1033
- sensingMode?: string | null;
1034
- [key: string]: unknown;
1035
- } | null;
1036
- audioControl?: {
1037
- mute?: boolean | null;
1038
- volume?: boolean | null;
1039
- [key: string]: unknown;
1040
- } | null;
1041
- capabilitiesVersion?: number | null;
1042
- environmentSensors?: {
1043
- ambientLight?: boolean | null;
1044
- temperature?: boolean | null;
1045
- [key: string]: unknown;
1046
- } | null;
1047
- inputControl?: {
1048
- appSwitch?: boolean | null;
1049
- hdmi?: boolean | null;
1050
- [key: string]: unknown;
1051
- } | null;
1052
- isDeviceOwner?: boolean | null;
1053
- managementCapabilities?: {
1054
- clearCache?: boolean | null;
1055
- installApk?: boolean | null;
1056
- kioskMode?: boolean | null;
1057
- reboot?: boolean | null;
1058
- restart?: boolean | null;
1059
- screenshot?: boolean | null;
1060
- wipe?: boolean | null;
1061
- [key: string]: unknown;
1062
- } | null;
1063
- mlCapabilities?: {
1064
- availableRamMb?: number | null;
1065
- chipsetName?: string | null;
1066
- chipsetVendor?: string | null;
1067
- cpuAbi?: string | null;
1068
- densityDpi?: number | null;
1069
- gpuDelegateSupported?: boolean | null;
1070
- gpuName?: string | null;
1071
- hasNpu?: boolean | null;
1072
- maxVlmSizeMb?: number | null;
1073
- nnapiSupported?: boolean | null;
1074
- npuName?: string | null;
1075
- osApiLevel?: number | null;
1076
- recommendedModelTier?: string | null;
1077
- screenHeightPx?: number | null;
1078
- screenWidthPx?: number | null;
1079
- totalRamMb?: number | null;
1080
- [key: string]: unknown;
1081
- } | null;
1082
- powerControl?: {
1083
- cec?: boolean | null;
1084
- softBlackout?: boolean | null;
1085
- wol?: boolean | null;
1086
- [key: string]: unknown;
1087
- } | null;
1088
- wifiCsiSensing?: {
1089
- csiAvailable?: boolean | null;
1090
- csiHardwareType?: string | null;
1091
- csiNodeCount?: number | null;
1092
- [key: string]: unknown;
1093
- } | null;
1094
- [key: string]: unknown;
1095
- };
1096
- type HttpProbeResult = {
1097
- host: string;
1098
- port?: number | null;
1099
- server?: string | null;
1100
- [key: string]: unknown;
1101
- };
1102
- type MdnsNetworkDevice = {
1103
- host?: string | null;
1104
- instanceName: string;
1105
- mdnsModel?: string | null;
1106
- mdnsSoftwareVersion?: string | null;
1107
- mdnsVendor?: string | null;
1108
- port?: number | null;
1109
- serviceType: string;
1110
- [key: string]: unknown;
1111
- };
1112
- type PartnerAdDeliveryProfile = {
1113
- android_api_level?: number | null;
1114
- auto_recovery_enabled?: boolean;
1115
- ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
1116
- mode?: "ima_sdk" | "vast_fallback";
1117
- notes?: Array<string>;
1118
- reason?: string;
1119
- webview_chromium_major?: number | null;
1120
- };
1121
- /**
1122
- * Heartbeat payload from agent-core / agent-core-lite Android partner
1123
- * SDKs. Only includes fields verified populated in production
1124
- * `signal_observations` (last 30 days). Stub fields wired in Kotlin but
1125
- * never observed in CH are intentionally excluded; re-add only after
1126
- * telemetry confirms >1% population over 7 days.
1127
- *
1128
- */
1129
- type PartnerDeviceHeartbeatBody = {
1130
- advertisingId?: string | null;
1131
- advertisingIdType?: "gaid" | "idfa" | null | null;
1132
- bleDeviceCount?: number;
1133
- capabilities?: DeviceCapabilityPayload;
1134
- discoveredNetworkDevices?: Array<MdnsNetworkDevice> | null;
1135
- fingerprint?: string;
1136
- gatewayIpHash?: string | null;
1137
- httpProbes?: Array<HttpProbeResult> | null;
1138
- limitAdTracking?: boolean | null;
1139
- metadata?: Record<string, unknown>;
1140
- /** Capped at 50 devices (RSSI-sorted, strongest first). */
1141
- nearbyBleDevices?: Array<BleScanResultData> | null;
1142
- nearbyWifiNetworks?: Array<WifiScanResult> | null;
1143
- networkDeviceCount?: number;
1144
- /** Heartbeat schema version (1=baseline, 2=nativeSensorSnapshot) */
1145
- schemaVersion?: number;
1146
- screenId?: string | null;
1147
- /** Per-source skip-reason counter map. Shape `{source: {reason: count}}`. */
1148
- skipReasonCounts?: Record<string, Record<string, number>>;
1149
- ssdpDevices?: Array<SsdpDeviceInfo> | null;
1150
- status?: string;
1151
- wifiBssidHash?: string | null;
1152
- wifiEnvironment?: WifiEnvironmentSnapshot;
1153
- wifiNetworkCount?: number;
1154
- wifiSsidHash?: string | null;
1155
- [key: string]: unknown;
1156
- };
1157
- type PartnerHeartbeatCommand = {
1158
- /** Command normalized for partner SDK compatibility. */
1159
- command?: string;
1160
- id?: string;
1161
- payload?: Record<string, unknown>;
1162
- queued_at?: string;
1163
- };
1164
- type PartnerHeartbeatData = {
1165
- ad_delivery_profile?: PartnerAdDeliveryProfile;
1166
- commands?: Array<PartnerHeartbeatCommand>;
1167
- last_seen_at?: string;
1168
- status?: "online" | "offline";
1169
- };
1170
- type PartnerHeartbeatMeasurementMetadata = {
1171
- ageSeconds?: number | null;
1172
- cachedAt?: string | null;
1173
- receivedAt?: string | null;
1174
- source?: "redis_twin" | "pg_fallback" | "unknown";
1175
- [key: string]: unknown;
1176
- };
1177
- type PartnerHeartbeatQueryData = {
1178
- adDeliveryProfile?: PartnerAdDeliveryProfile;
1179
- deviceId: string;
1180
- lastHeartbeatAt?: string | null;
1181
- measurementMetadata?: PartnerHeartbeatMeasurementMetadata;
1182
- stalenessSeconds?: number | null;
1183
- telemetry?: PartnerSafeHeartbeatTelemetry;
1184
- [key: string]: unknown;
1185
- };
1186
- type PartnerHeartbeatQueryResponse = {
1187
- data?: PartnerHeartbeatQueryData;
1188
- success?: boolean;
1189
- };
1190
- /**
1191
- * Optional heartbeat payload. Nested telemetry objects are preferred; legacy flat keys
1192
- * are still accepted for backward compatibility.
1193
- *
1194
- */
1195
- type PartnerHeartbeatRequest = {
1196
- ad?: {
1197
- last_vast_request_at?: string;
1198
- last_vast_response_at?: string;
1199
- proof_of_play_enabled?: boolean;
1200
- };
1201
- agent_status?: string;
1202
- agent_version?: string;
1203
- android_api_level?: number;
1204
- brightness?: number;
1205
- desugaring_enabled?: boolean;
1206
- device?: {
1207
- android_api_level?: number;
1208
- make?: string;
1209
- model?: string;
1210
- os?: string;
1211
- osv?: string;
1212
- webview_chromium_major?: number;
1213
- };
1214
- ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
1215
- ima_sdk_version?: string;
1216
- ima_support_reason?: string;
1217
- ima_supported?: boolean;
1218
- input_source?: string;
1219
- last_ima_error_code?: number;
1220
- last_vast_error_code?: number;
1221
- last_vast_request_at?: string;
1222
- last_vast_response_at?: string;
1223
- /** Current GPS fix for a moving screen. Processed only for screens whose `mobility_type` is `mobile` or `semi_mobile` (declare it at registration or via PATCH /device/{deviceId}), OR for any screen still missing coordinates (a one-time self-heal that also kicks off venue classification). Static screens with valid coordinates ignore it. Updates live geo-targeting, geofencing and analytics. Fully optional — omit it on stationary screens. */
1224
- location?: {
1225
- /** Horizontal accuracy radius in meters. Fixes above ~500m are clamped. */
1226
- accuracy_m?: number;
1227
- /** Up to 200 fixes recorded while the device was offline, replayed as a historical track. Timestamps MUST be in ascending order — a non-chronological batch is rejected with HTTP 400. Only the top-level `location` updates the live serving position. */
1228
- buffered_locations?: Array<{
1229
- accuracy_m?: number;
1230
- heading?: number;
1231
- lat: number;
1232
- lng: number;
1233
- speed_mps?: number;
1234
- timestamp?: number;
1235
- }>;
1236
- /** Bearing in degrees (0–360, 0 = true north). Omit if unavailable. */
1237
- heading?: number;
1238
- /** Latitude in decimal degrees (WGS 84). */
1239
- lat?: number;
1240
- /** Longitude in decimal degrees (WGS 84). */
1241
- lng?: number;
1242
- /** `gps` — a live on-device fix. `gps_buffered` — a fix recorded while offline and replayed on reconnect. */
1243
- source?: "gps" | "gps_buffered";
1244
- /** Ground speed in meters per second. Omit if unavailable. */
1245
- speed_mps?: number;
1246
- /** Unix epoch milliseconds of the on-device fix. Send the device clock value; the server tolerates up to 10 minutes of skew. A position jump implying > 320 km/h between consecutive fixes is rejected. */
1247
- timestamp?: number;
1248
- };
1249
- /** Alternate namespace for telemetry keys (legacy support). */
1250
- metadata?: Record<string, unknown>;
1251
- muted?: boolean;
1252
- network?: {
1253
- bandwidthMbps?: number;
1254
- connectionType?: string;
1255
- downlinkMbps?: number;
1256
- effectiveType?: string;
1257
- latencyRtt?: number;
1258
- rtt?: number;
1259
- saveData?: boolean;
1260
- };
1261
- network_strength_dbm?: number;
1262
- power_state?: "on" | "standby" | "off" | "unknown";
1263
- proof_of_play_enabled?: boolean;
1264
- sdk?: {
1265
- android_api_level?: number;
1266
- desugaring_enabled?: boolean;
1267
- ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
1268
- ima_sdk_version?: string;
1269
- ima_supported?: boolean;
1270
- version?: string;
1271
- webview_chromium_major?: number;
1272
- };
1273
- sdk_version?: string;
1274
- telemetry?: PartnerHeartbeatTelemetry;
1275
- temperature_c?: number;
1276
- uptime_seconds?: number;
1277
- volume?: number;
1278
- webview_chromium_major?: number;
1279
- };
1280
- type PartnerHeartbeatResponse = {
1281
- data?: PartnerHeartbeatData;
1282
- success?: boolean;
1283
- };
1284
- type PartnerHeartbeatTelemetry = {
1285
- agentStatus?: string;
1286
- agentVersion?: string;
1287
- android_api_level?: number;
1288
- bandwidthMbps?: number;
1289
- brightness?: number;
1290
- connectionType?: string;
1291
- desugaring_enabled?: boolean;
1292
- downlinkMbps?: number;
1293
- ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
1294
- ima_sdk_version?: string;
1295
- ima_support_reason?: string;
1296
- ima_supported?: boolean;
1297
- inputSource?: string;
1298
- last_ima_error_code?: number;
1299
- last_vast_error_code?: number;
1300
- last_vast_request_at?: string;
1301
- last_vast_response_at?: string;
1302
- latencyRtt?: number;
1303
- make?: string;
1304
- model?: string;
1305
- muted?: boolean;
1306
- networkConnectionType?: string;
1307
- networkEffectiveType?: string;
1308
- networkStrengthDbm?: number;
1309
- os?: string;
1310
- osVersion?: string;
1311
- osv?: string;
1312
- powerState?: "on" | "standby" | "off" | "unknown";
1313
- proof_of_play_enabled?: boolean;
1314
- rtt?: number;
1315
- saveData?: boolean;
1316
- temperatureC?: number;
1317
- uptimeSeconds?: number;
1318
- volume?: number;
1319
- webview_chromium_major?: number;
1320
- [key: string]: unknown;
1321
- };
1322
- /**
1323
- * Partner-safe subset of device telemetry. Strips MDM compliance,
1324
- * Vertex embeddings, identity-correction internals, partner identifiers,
1325
- * and Mongo `_id` so partners only see what they need to decide
1326
- * whether a device is healthy enough to receive ads.
1327
- *
1328
- */
1329
- type PartnerSafeHeartbeatTelemetry = {
1330
- agentStatus?: string | null;
1331
- agentVersion?: string | null;
1332
- bandwidthMbps?: number | null;
1333
- brightness?: number | null;
1334
- connectionType?: string | null;
1335
- consecutiveAdFailures?: number | null;
1336
- effectiveType?: string | null;
1337
- latencyRtt?: number | null;
1338
- make?: string | null;
1339
- model?: string | null;
1340
- muted?: boolean | null;
1341
- networkStrengthDbm?: number | null;
1342
- onlineStatus?: "online" | "offline" | "standby" | "unknown" | null;
1343
- os?: string | null;
1344
- osv?: string | null;
1345
- powerState?: string | null;
1346
- temperatureC?: number | null;
1347
- ua?: string | null;
1348
- uptimeSeconds?: number | null;
1349
- visibilityState?: string | null;
1350
- volume?: number | null;
1351
- [key: string]: unknown;
1352
- };
1353
- type SsdpDeviceInfo = {
1354
- friendlyName?: string | null;
1355
- location: string;
1356
- manufacturer?: string | null;
1357
- modelName?: string | null;
1358
- server?: string | null;
1359
- st: string;
1360
- udn?: string | null;
1361
- [key: string]: unknown;
1362
- };
1363
- type WifiEnvironmentSnapshot = {
1364
- channelCongestionRatio?: number | null;
1365
- connectedChannelWidthMhz?: number | null;
1366
- connectedFrequencyMhz?: number | null;
1367
- connectedLinkSpeedMbps?: number | null;
1368
- connectedSignalDbm?: number | null;
1369
- frequencyBand?: string | null;
1370
- medianSignalDbm?: number | null;
1371
- networkCount?: number | null;
1372
- rssiVariance?: number | null;
1373
- scanTimestampMs?: number | null;
1374
- signalSpreadDbm?: number | null;
1375
- uniqueBssidCount?: number | null;
1376
- [key: string]: unknown;
1377
- } | null;
1378
- type WifiScanResult = {
1379
- channelWidthMhz?: number | null;
1380
- frequencyMhz: number;
1381
- rawBssid: string;
1382
- signalStrengthDbm: number;
1383
- [key: string]: unknown;
1384
- };
1385
- /**
1386
- * Read live device heartbeat state
1387
- * GET /device/{deviceId}/heartbeat
1388
- */
1389
- interface getDeviceHeartbeatOperation {
1390
- readonly path: "/device/{deviceId}/heartbeat";
1391
- readonly method: "GET";
1392
- request: never;
1393
- response: PartnerHeartbeatQueryResponse;
1394
- }
1395
- /**
1396
- * Device heartbeat
1397
- * POST /device/{deviceId}/heartbeat
1398
- */
1399
- interface heartbeatOperation {
1400
- readonly path: "/device/{deviceId}/heartbeat";
1401
- readonly method: "POST";
1402
- request: PartnerHeartbeatRequest | PartnerDeviceHeartbeatBody;
1403
- response: PartnerHeartbeatResponse;
1404
- }
1405
- declare const generatedTypes: {
1406
- readonly schemaCount: 99;
1407
- readonly operationCount: 210;
1408
- readonly schemas: readonly ["Ad", "AdSettings", "AudienceAnalyticsResponse", "AudienceAttentionPrediction", "AudienceExportResponse", "AudienceLoyaltyFeaturesRow", "AudienceMetricsResponse", "AudienceSegment", "AudienceSocialAttention", "BatchResult", "BleScanResultData", "ChangelogEntry", "ChangelogResponse", "ContentFitSettings", "ContentPreferencesInput", "ContentPreferencesResponse", "ContentPreset", "CreatePartnerSensingRouteRequest", "CreativeClassification", "DashboardResponse", "DataExportSummaryResponse", "DemographicsResponse", "Device", "DeviceCapabilityPayload", "DeviceSummary", "DisplaySettingsInput", "DisplaySettingsResponse", "EarningsBreakdownResponse", "EarningsResponse", "Error", "FleetCommand", "FleetCommandEvent", "HeaderBiddingSettings", "HttpProbeResult", "MdnsNetworkDevice", "Pagination", "Partner", "PartnerAdDeliveryProfile", "PartnerDefaultStream", "PartnerDefaultStreamCreate", "PartnerDefaultStreamUpdate", "PartnerDeviceHeartbeatBody", "PartnerHeartbeatCommand", "PartnerHeartbeatData", "PartnerHeartbeatMeasurementMetadata", "PartnerHeartbeatQueryData", "PartnerHeartbeatQueryResponse", "PartnerHeartbeatRequest", "PartnerHeartbeatResponse", "PartnerHeartbeatTelemetry", "PartnerLBarContent", "PartnerLBarDisplayPreferences", "PartnerLBarSettings", "PartnerMonetizationRequirements", "PartnerNetworkConfig", "PartnerNetworkConfigUpdate", "PartnerPlay", "PartnerRegistrationDisplaySettings", "PartnerRequirement", "PartnerSafeHeartbeatTelemetry", "PartnerSelfPromoAd", "PartnerSelfPromoCreate", "PartnerSelfPromoPlacement", "PartnerStats", "PayoutResponse", "PlaygroundResult", "PlaygroundValidationError", "ProgrammaticSettingsInput", "ProgrammaticSettingsResponse", "RequestMetadataResponse", "ResolvedContentPolicy", "ResolvedSensingConfig", "RolePermissions", "SDKConfig", "ScreenAnalyticsResponse", "ScreenGroup", "ScreenGroupContentPolicy", "ScreenGroupContentPolicyInput", "ScreenGroupEvent", "ScreenGroupSensingConfig", "ScreenGroupSensingConfigInput", "SensingPerformanceMode", "SensingRoute", "SensingRouteAction", "SensingRouteCondition", "SensingSettingsResponse", "SensingThresholdCrossedEvent", "SsdpDeviceInfo", "TeamInviteResponse", "TeamMember", "Transaction", "UpdatePartnerSensingRouteRequest", "VastWaterfall", "VastWaterfallSource", "Webhook", "WebhookDelivery", "WebhookEvent", "WifiEnvironmentSnapshot", "WifiScanResult"];
1409
- readonly operations: readonly ["listPartnerSelfPromoAds", "createPartnerSelfPromoAd", "listPartnerSelfPromoPlacements", "schedulePartnerSelfPromo", "createPartnerSelfPromoUpload", "disableSelfPromoAd", "registerAgent", "getAnalytics", "getAudienceContinuity", "getAudienceProfile", "getBleSummary", "getContentPerformance", "searchCreativeCatalog", "getCreativeScenes", "getCrossScreenFlow", "getPartnerAnalyticsDashboard", "getDeviceSuiteSignature", "exportPartnerAnalytics", "exportPartnerAdsByDay", "getFleetHourly", "getHaloFunnel", "getLoyaltyClock", "getNetworkSummary", "getNetworkTrend", "getProximitySummary", "getRevenueAttentionCorrelation", "getSceneFeed", "getSceneIntelligence", "rotateApiKey", "getAudienceAnalytics", "exportAudienceData", "getAudienceHeatmap", "getLiveAudience", "getLookalikeScreens", "predictScreenAudience", "getResolvedHouseholdReach", "listAudienceSegments", "createAudienceSegment", "deleteAudienceSegment", "getAudienceSegment", "updateAudienceSegment", "matchAudienceSegment", "estimateSegmentReach", "generateSegmentVastTag", "getAudienceStats", "cancelBillingSubscription", "purchaseCredits", "createCreditCheckout", "listBillingPlans", "setupBilling", "createBillingSubscription", "getBillingSubscription", "getBillingUsage", "getUsageSummary", "stripeWebhookCallback", "getConnectDashboard", "getConnectEarningsChart", "getConnectScreenHealth", "listContentPresets", "getContentPreset", "submitPartnerCreative", "getPartnerCreative", "getDashboard", "exportProximityGraphEdges", "getDataExportSummary", "exportDataset", "getGeohashAudiencePanel", "getOutcomeAttribution", "registerDevice", "deleteDevice", "getDevice", "updateDevice", "getAdsForDevice", "ackDeviceCommand", "getDeviceHeartbeat", "heartbeat", "recordProgrammaticEvent", "listDevices", "registerDeviceV2", "registerDevicesBatch", "batchUpdateDeviceOrientation", "reconcileDevices", "partnerDocsBrowser", "getEarnings", "getEarningsBreakdown", "requestPayout", "getTransactions", "getActiveSSEConnections", "subscribeToEvents", "getFleetCommand", "getFleetAnalytics", "pushFleetCommand", "getFleetOverview", "updateFleetSettings", "recordImpressionGet", "recordImpressionPost", "recordImpressionsBatch", "getPartnerInfo", "listIntentCategories", "getIntentCategory", "getIntentPricing", "getMeasurementMethodology", "getNetworkConfig", "patchNetworkConfig", "updateNetworkConfig", "getNetworkTrends", "partnerPing", "partnerPingAuth", "recordPartnerPlay", "recordPartnerPlaysBatch", "getPricing", "recordProgrammaticEventLegacyAlias", "quickStart", "registerPartner", "generateSandboxEvent", "resetSandbox", "createSandboxScreen", "getSandboxStatus", "listScreenGroups", "createScreenGroup", "deleteScreenGroup", "getScreenGroup", "updateScreenGroup", "getScreenGroupAnalytics", "createScreenGroupCommand", "getScreenGroupContentPolicy", "updateScreenGroupContentPolicy", "removeScreenGroupMembers", "listScreenGroupMembers", "addScreenGroupMembers", "getScreenGroupSensingConfig", "updateScreenGroupSensingConfig", "getScreenAudienceSegments", "batchUpdateContentPreferences", "batchUpdateDisplaySettings", "batchUpdateProgrammaticSettings", "resolvePartnerScreen", "getScreenAnalytics", "getPartnerScreenAtmosphere", "getPartnerScreenIntelligence", "getPartnerScreenTasteProfile", "getPartnerScreenTraffic", "getPartnerScreenVAS", "applyContentPreset", "getAudienceMetrics", "getContentPreferences", "patchContentPreferences", "updateContentPreferences", "listPartnerDefaultStreams", "createPartnerDefaultStream", "createPartnerDefaultStreamImages", "reorderPartnerDefaultStreams", "createPartnerDefaultStreamUpload", "deletePartnerDefaultStream", "updatePartnerDefaultStream", "getScreenDemographics", "getDisplaySettings", "patchDisplaySettings", "updateDisplaySettings", "getPartnerLBarSettings", "updatePartnerLBarSettings", "updatePartnerLBarLiveUpdates", "getProgrammaticSettings", "patchProgrammaticSettings", "updateProgrammaticSettings", "getResolvedContentPolicy", "getResolvedSensingConfig", "getScreenSensingChips", "interpretScreenSensingIntent", "deployScreenSensingProfile", "getScreenSensingSettings", "updateScreenSensingSettings", "listPartnerSensingRoutes", "createPartnerSensingRoute", "deletePartnerSensingRoute", "getPartnerSensingRoute", "updatePartnerSensingRoute", "createStripeConnectAccount", "getStripeLoginLink", "getStripeOnboardingLink", "requestStripePayout", "getStripePayoutHistory", "getStripeAccountStatus", "handleStripeWebhook", "listTeamMembers", "acceptInvitation", "inviteTeamMember", "getInvitationByToken", "resendInvitation", "removeTeamMember", "changeTeamMemberRole", "getTrackingPublicKey", "recordTrackingBatch", "getUsageSummary__get__usage", "getUsageDashboard", "getRateLimitStatus", "queryChangelog", "playgroundDryRun", "getRequestMetadata", "getVastConfig", "getVenuesNearby", "getVenueAtmosphere", "getVenueTraffic", "getVenueIntelligence", "listWebhooks", "createWebhook", "deleteWebhook", "updateWebhook", "getWebhookDeliveries", "testWebhook"];
1410
- };
1411
- type GeneratedSchemaName = (typeof generatedTypes.schemas)[number];
1412
- type GeneratedOperationName = (typeof generatedTypes.operations)[number];
835
+ declare const VERSION = "1.0.0";
1413
836
 
1414
- export { AnalyticsClient, type AnalyticsData, type ApiErrorType, AudienceClient, type AudienceData, BillingClient, type BillingInfo, type BleScanResultData, type ClientOptions, type ConstructEventOptions, type ContentFitMode, type ContentFitSettings, type CreateRouteParams, DataClient, type Device, type DeviceCapabilityPayload, DevicesClient, EarningsClient, type EarningsData, type ErrorDetail, type ErrorEntry, type ErrorResponseBody, ErrorsClient, FleetClient, type FleetCommand, type GeneratedOperationName, type GeneratedSchemaName, type HttpProbeResult, type Impression, ImpressionsClient, type ListResponse, type MdnsNetworkDevice, type ParsedSignatureHeader, type PartnerAdDeliveryProfile, type PartnerDeviceBatchRegistrationInput, type PartnerDeviceHeartbeatBody, type PartnerDeviceRegistrationInput, type PartnerDisplaySettingsInput, type PartnerDisplaySettingsResponse, type PartnerHeartbeatMeasurementMetadata, type PartnerHeartbeatQueryData, type PartnerHeartbeatQueryResponse, type PartnerHeartbeatRequest, type PartnerHeartbeatResponse, type PartnerSafeHeartbeatTelemetry, type RequestOptions, type RetryOptions, type RouteAction, type RouteChannel, type RouteCondition, type RouteConditionOp, type RouteDigest, type RouteDigestSummary, type RouteWebhookEvent, RoutesClient, type Screen, ScreensClient, type SensingRoute, type SensingThresholdCrossedEvent, type SsdpDeviceInfo, TrillboardsClient, TrillboardsError, type TrillboardsErrorOptions, type UpdateRouteParams, VERSION, type Webhook, type WebhookEvent, type WebhookHeaders, Webhooks, WebhooksClient, type WifiEnvironmentSnapshot, type WifiScanResult, constructEvent, constructEventLegacy, generatedTypes, type getDeviceHeartbeatOperation, type heartbeatOperation, parseSignatureHeader, retryWithBackoff };
837
+ export { AnalyticsClient, AnalyticsData, type ApiErrorType, AudienceClient, AudienceData, BillingClient, BillingInfo, type ClientOptions, type ConstructEventOptions, type ContentFitMode, CreatePartnerSensingRouteRequest, DataClient, Device, DevicesClient, DisplaySettingsInput, DisplaySettingsResponse, EarningsClient, EarningsData, type ErrorDetail, ErrorEntry, type ErrorResponseBody, ErrorsClient, FleetClient, FleetCommand, Impression, ImpressionsClient, type ListResponse, type ParsedSignatureHeader, PartnerDeviceBatchRegistrationInput, PartnerDeviceRegistrationInput, type RequestOptions, type RetryOptions, type RouteAction, type RouteChannel, type RouteCondition, type RouteConditionOp, type RouteDigest, type RouteDigestSummary, type RouteWebhookEvent, RoutesClient, Screen, ScreensClient, SensingRoute, type SensingThresholdCrossedEvent, TrillboardsClient, TrillboardsError, type TrillboardsErrorOptions, UpdatePartnerSensingRouteRequest, VERSION, Webhook, WebhookEvent, type WebhookHeaders, Webhooks, WebhooksClient, constructEvent, constructEventLegacy, parseSignatureHeader, retryWithBackoff };