@trillboards/api-client 0.3.0 → 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.mts 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.mjs';
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.mjs';
3
+
1
4
  /**
2
- * Core type definitions for the Trillboards API Client SDK.
3
- *
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.
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.
20
+ *
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,120 +63,88 @@ interface ListResponse<T> {
45
63
  has_more: boolean;
46
64
  };
47
65
  }
48
- interface Screen {
49
- screen_id: string;
50
- name: string;
51
- status: string;
52
- device_id?: string;
53
- venue_type?: string;
54
- country?: string;
55
- city?: string;
56
- timezone?: string;
57
- resolution?: string;
58
- embed_url?: string;
59
- created_at: string;
60
- updated_at: string;
61
- }
62
- interface Device {
63
- device_id: string;
64
- device_name: string;
65
- device_type?: string;
66
- platform?: string;
67
- screen_id?: string;
68
- status: string;
69
- last_heartbeat?: string;
70
- created_at: string;
71
- updated_at: string;
72
- }
73
- interface Impression {
74
- impression_id: string;
75
- screen_id: string;
76
- device_id: string;
77
- ad_type?: string;
78
- advertiser_name?: string;
79
- cpm?: number;
80
- earnings?: number;
81
- played_at: string;
82
- duration_seconds?: number;
83
- }
84
- interface AnalyticsData {
85
- period: string;
86
- total_impressions: number;
87
- total_earnings: number;
88
- average_cpm: number;
89
- fill_rate: number;
90
- screens_active: number;
91
- screens_total: number;
92
- by_screen?: Array<{
93
- screen_id: string;
94
- name: string;
95
- impressions: number;
96
- earnings: number;
97
- }>;
98
- }
99
- interface EarningsData {
100
- period: string;
101
- total_earnings: number;
102
- total_impressions: number;
103
- average_cpm: number;
104
- daily?: Array<{
105
- date: string;
106
- earnings: number;
107
- impressions: number;
108
- }>;
109
- pending_payout: number;
110
- last_payout_date?: string;
111
- last_payout_amount?: number;
112
- }
113
- interface WebhookEvent {
114
- id: string;
115
- type: string;
116
- created_at: string;
117
- data: Record<string, unknown>;
118
- partner_id: string;
119
- }
120
- interface Webhook {
121
- id: string;
122
- url: string;
123
- events: string[];
124
- status: string;
125
- secret: string;
126
- created_at: string;
127
- updated_at: string;
128
- }
129
- interface ErrorEntry {
130
- id: string;
131
- code: string;
132
- type: ApiErrorType;
133
- message: string;
134
- param?: string;
135
- doc_url: string;
136
- timestamp: string;
137
- request_id: string;
138
- endpoint: string;
139
- method: string;
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
+ */
71
+ type ContentFitMode = 'fit' | 'fill';
72
+ /**
73
+ * Comparison operators accepted for a Route threshold condition — the same set
74
+ * the API validates against (services/fein/clipTriggerSchema VALID_OPERATORS).
75
+ */
76
+ type RouteConditionOp = 'gt' | 'gte' | 'lt' | 'lte' | 'eq' | 'neq';
77
+ /** A threshold condition: fires when `field` crosses `value` via `op`. */
78
+ interface RouteCondition {
79
+ field: string;
80
+ op?: RouteConditionOp;
81
+ value?: number | string | boolean;
82
+ }
83
+ /** Channels a Route action can fire on. */
84
+ type RouteChannel = 'webhook' | 'whatsapp' | 'sms' | 'slack' | 'email' | 'clip';
85
+ /** One channel action fired when a Route matches. */
86
+ interface RouteAction {
87
+ channel: RouteChannel;
88
+ webhookId?: string;
89
+ recipientE164?: string;
90
+ recipientEmail?: string;
91
+ slackChannelId?: string;
92
+ templateName?: string;
93
+ attachClip?: boolean;
94
+ }
95
+ /** Scheduled-digest config (mode = 'digest'). */
96
+ interface RouteDigest {
97
+ metric: 'count' | 'avg' | 'max';
98
+ windowMinutes: number;
99
+ intervalMinutes: number;
100
+ nextRunAt?: string;
140
101
  }
141
- interface FleetCommand {
142
- command_id: string;
143
- command: string;
144
- status: string;
145
- target_screens: string[];
146
- created_at: string;
147
- completed_at?: string;
102
+ /**
103
+ * The webhook events a Route fire can deliver. The event type is in the
104
+ * `X-Trillboards-Event` request header: a custom sensed field delivers
105
+ * `sensing.threshold_crossed`, a known semantic delivers the matching
106
+ * `audience.*` / `venue.*` event, and a scheduled digest delivers
107
+ * `venue.traffic_summary`.
108
+ */
109
+ type RouteWebhookEvent = 'sensing.threshold_crossed' | 'audience.spike' | 'audience.venue_busy' | 'audience.purchase_intent' | 'audience.demographics_update' | 'venue.traffic_summary';
110
+ /**
111
+ * The aggregate summary delivered as the `observed` value of a digest Route fire
112
+ * (`venue.traffic_summary`). The digest runner builds it over the Route's window.
113
+ */
114
+ interface RouteDigestSummary {
115
+ metric: 'count' | 'avg' | 'max';
116
+ field: string | null;
117
+ /** The headline value for `metric`. null for an avg/max window with no samples. */
118
+ value: number | null;
119
+ count: number;
120
+ avg: number | null;
121
+ max: number | null;
122
+ window_minutes: number;
123
+ window_end: string;
148
124
  }
149
- interface AudienceData {
125
+ /**
126
+ * The FLAT webhook request body delivered when a Route fires. Unlike the
127
+ * device/programmatic events there is NO `{event,timestamp,data}` wrapper — the
128
+ * event type rides the `X-Trillboards-Event` header. Verify the
129
+ * `X-Trillboards-Signature` header over the raw body before trusting it.
130
+ *
131
+ * `observed` is a scalar for threshold Routes; for a digest Route
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.
137
+ */
138
+ interface SensingThresholdCrossedEvent {
139
+ route_id: string;
140
+ route_name: string;
141
+ owner_kind: 'earner_user' | 'partner';
150
142
  screen_id: string;
151
- timestamp: string;
152
- attention_count: number;
153
- dwell_time_avg: number;
154
- demographics?: Record<string, unknown>;
155
- }
156
- interface BillingInfo {
157
- plan: string;
158
- credits_remaining: number;
159
- credits_used: number;
160
- usage_this_month: Record<string, number>;
161
- stripe_connected: boolean;
143
+ field: string | null;
144
+ op: RouteConditionOp | null;
145
+ threshold: number | string | boolean | null;
146
+ observed: number | string | boolean | RouteDigestSummary | null;
147
+ fired_at: string;
162
148
  }
163
149
 
164
150
  /**
@@ -256,18 +242,18 @@ declare class ScreensClient {
256
242
  data: Screen;
257
243
  }>;
258
244
  /** Register a new device/screen. */
259
- create(body: {
260
- device_name: string;
261
- device_type?: string;
262
- venue_type?: string;
263
- country?: string;
264
- city?: string;
265
- timezone?: string;
266
- resolution?: string;
267
- }): Promise<{
245
+ create(body: PartnerDeviceRegistrationInput): Promise<{
268
246
  success: boolean;
269
247
  data: Screen;
270
248
  }>;
249
+ /** Get the resolved display settings for one screen. */
250
+ getDisplaySettings(screenId: string): Promise<DisplaySettingsResponse>;
251
+ /** Partially update display settings; omitted content-fit keys are preserved. */
252
+ patchDisplaySettings(screenId: string, settings: DisplaySettingsInput): Promise<DisplaySettingsResponse>;
253
+ /** Update display settings through the PUT endpoint. */
254
+ updateDisplaySettings(screenId: string, settings: DisplaySettingsInput): Promise<DisplaySettingsResponse>;
255
+ /** Apply a partial display-settings update to up to 100 screens. */
256
+ batchUpdateDisplaySettings(screenIds: string[], settings: DisplaySettingsInput): Promise<Record<string, unknown>>;
271
257
  /** Delete a screen/device. */
272
258
  delete(screenId: string): Promise<{
273
259
  success: boolean;
@@ -294,14 +280,17 @@ declare class DevicesClient {
294
280
  data: Device;
295
281
  }>;
296
282
  /** Register a new device. */
297
- create(body: {
298
- device_name: string;
299
- device_type?: string;
300
- platform?: string;
301
- }): Promise<{
283
+ create(body: PartnerDeviceRegistrationInput): Promise<{
302
284
  success: boolean;
303
285
  data: Device;
304
286
  }>;
287
+ /** Register or re-register up to 100 devices with optional fleet defaults. */
288
+ createBatch(body: PartnerDeviceBatchRegistrationInput): Promise<{
289
+ success: boolean;
290
+ summary: Record<string, number>;
291
+ devices: Array<Record<string, unknown>>;
292
+ errors: Array<Record<string, unknown>>;
293
+ }>;
305
294
  /** Delete a device. */
306
295
  delete(deviceId: string): Promise<{
307
296
  success: boolean;
@@ -436,7 +425,14 @@ declare class WebhooksClient {
436
425
  constructor(http: HttpClient);
437
426
  /** List all webhook subscriptions. */
438
427
  list(): Promise<ListResponse<Webhook>>;
439
- /** 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
+ */
440
436
  create(body: {
441
437
  url: string;
442
438
  events: string[];
@@ -573,6 +569,57 @@ declare class BillingClient {
573
569
  }>;
574
570
  }
575
571
 
572
+ /**
573
+ * RoutesClient — Sense Anything "Routes": alerting + automation on the sensing
574
+ * stream. A Route fires channel actions (webhook / managed WhatsApp / SMS /
575
+ * Slack / email) when a sensed field crosses a threshold on a set of your
576
+ * screens, or on a scheduled digest.
577
+ *
578
+ * Base path: /v1/partner/sensing/routes
579
+ */
580
+
581
+ declare class RoutesClient {
582
+ private readonly http;
583
+ constructor(http: HttpClient);
584
+ /** Create a Route. Every screen in `screenMongoIds` must be one you own. */
585
+ create(body: CreatePartnerSensingRouteRequest): Promise<{
586
+ success: boolean;
587
+ data: {
588
+ route: SensingRoute;
589
+ };
590
+ }>;
591
+ /** List your Routes. Pass `includeDisabled: false` to return only enabled Routes. */
592
+ list(params?: {
593
+ includeDisabled?: boolean;
594
+ }): Promise<{
595
+ success: boolean;
596
+ data: {
597
+ routes: SensingRoute[];
598
+ };
599
+ }>;
600
+ /** Get one Route by id. */
601
+ get(routeId: string): Promise<{
602
+ success: boolean;
603
+ data: {
604
+ route: SensingRoute;
605
+ };
606
+ }>;
607
+ /** Update a Route (partial, non-clobbering — only the fields you send change). */
608
+ update(routeId: string, body: UpdatePartnerSensingRouteRequest): Promise<{
609
+ success: boolean;
610
+ data: {
611
+ route: SensingRoute;
612
+ };
613
+ }>;
614
+ /** Soft-delete a Route. */
615
+ delete(routeId: string): Promise<{
616
+ success: boolean;
617
+ data: {
618
+ routeId: string;
619
+ };
620
+ }>;
621
+ }
622
+
576
623
  /**
577
624
  * TrillboardsClient — main entry point for the Trillboards Partner API SDK.
578
625
  *
@@ -595,6 +642,7 @@ declare class TrillboardsClient {
595
642
  readonly data: DataClient;
596
643
  readonly errors: ErrorsClient;
597
644
  readonly billing: BillingClient;
645
+ readonly routes: RoutesClient;
598
646
  /** The underlying HTTP client (exposed for advanced use cases). */
599
647
  readonly _http: HttpClient;
600
648
  constructor(options: ClientOptions);
@@ -750,7 +798,7 @@ declare function parseSignatureHeader(rawSig: string): ParsedSignatureHeader;
750
798
  * req.headers, // IncomingHttpHeaders
751
799
  * process.env.WEBHOOK_SECRET!, // your subscription secret
752
800
  * );
753
- * console.log('Received', event.type);
801
+ * console.log('Received', event.event);
754
802
  * res.sendStatus(200);
755
803
  * } catch (err) {
756
804
  * // TrillboardsError with code "webhook_signature_invalid"
@@ -784,391 +832,6 @@ declare const Webhooks: {
784
832
  * SDK version constant. Sent in User-Agent and X-Trillboards-Client headers.
785
833
  * Keep in sync with package.json version.
786
834
  */
787
- declare const VERSION = "0.1.3";
788
-
789
- type BleScanResultData = {
790
- appleContinuitySubtype?: number | null;
791
- deviceType?: number | null;
792
- ibeaconMajor?: number | null;
793
- ibeaconMinor?: number | null;
794
- ibeaconUuid?: string | null;
795
- manufacturerCompanyId?: number | null;
796
- rawAddress: string;
797
- rssi: number;
798
- serviceUuids?: Array<string> | null;
799
- stableManufacturerPayloadHex?: string | null;
800
- txPowerDbm?: number | null;
801
- [key: string]: unknown;
802
- };
803
- type DeviceCapabilityPayload = {
804
- agentType?: string | null;
805
- agentVersion?: string | null;
806
- audienceSensing?: {
807
- cameraAvailable?: boolean | null;
808
- cameraCount?: number | null;
809
- cameraHealth?: {
810
- lastFailureClass?: string | null;
811
- lastFailureMessage?: string | null;
812
- lastFrameAtMs?: number | null;
813
- retryCount?: number | null;
814
- state?: string | null;
815
- [key: string]: unknown;
816
- } | null;
817
- cameraType?: string | null;
818
- microphoneAvailable?: boolean | null;
819
- sensingMode?: string | null;
820
- [key: string]: unknown;
821
- } | null;
822
- audioControl?: {
823
- mute?: boolean | null;
824
- volume?: boolean | null;
825
- [key: string]: unknown;
826
- } | null;
827
- capabilitiesVersion?: number | null;
828
- environmentSensors?: {
829
- ambientLight?: boolean | null;
830
- temperature?: boolean | null;
831
- [key: string]: unknown;
832
- } | null;
833
- inputControl?: {
834
- appSwitch?: boolean | null;
835
- hdmi?: boolean | null;
836
- [key: string]: unknown;
837
- } | null;
838
- isDeviceOwner?: boolean | null;
839
- managementCapabilities?: {
840
- clearCache?: boolean | null;
841
- installApk?: boolean | null;
842
- kioskMode?: boolean | null;
843
- reboot?: boolean | null;
844
- restart?: boolean | null;
845
- screenshot?: boolean | null;
846
- wipe?: boolean | null;
847
- [key: string]: unknown;
848
- } | null;
849
- mlCapabilities?: {
850
- availableRamMb?: number | null;
851
- chipsetName?: string | null;
852
- chipsetVendor?: string | null;
853
- cpuAbi?: string | null;
854
- densityDpi?: number | null;
855
- gpuDelegateSupported?: boolean | null;
856
- gpuName?: string | null;
857
- hasNpu?: boolean | null;
858
- maxVlmSizeMb?: number | null;
859
- nnapiSupported?: boolean | null;
860
- npuName?: string | null;
861
- osApiLevel?: number | null;
862
- recommendedModelTier?: string | null;
863
- screenHeightPx?: number | null;
864
- screenWidthPx?: number | null;
865
- totalRamMb?: number | null;
866
- [key: string]: unknown;
867
- } | null;
868
- powerControl?: {
869
- cec?: boolean | null;
870
- softBlackout?: boolean | null;
871
- wol?: boolean | null;
872
- [key: string]: unknown;
873
- } | null;
874
- wifiCsiSensing?: {
875
- csiAvailable?: boolean | null;
876
- csiHardwareType?: string | null;
877
- csiNodeCount?: number | null;
878
- [key: string]: unknown;
879
- } | null;
880
- [key: string]: unknown;
881
- };
882
- type HttpProbeResult = {
883
- host: string;
884
- port?: number | null;
885
- server?: string | null;
886
- [key: string]: unknown;
887
- };
888
- type MdnsNetworkDevice = {
889
- host?: string | null;
890
- instanceName: string;
891
- mdnsModel?: string | null;
892
- mdnsSoftwareVersion?: string | null;
893
- mdnsVendor?: string | null;
894
- port?: number | null;
895
- serviceType: string;
896
- [key: string]: unknown;
897
- };
898
- type PartnerAdDeliveryProfile = {
899
- android_api_level?: number | null;
900
- auto_recovery_enabled?: boolean;
901
- ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
902
- mode?: "ima_sdk" | "vast_fallback";
903
- notes?: Array<string>;
904
- reason?: string;
905
- webview_chromium_major?: number | null;
906
- };
907
- /**
908
- * Heartbeat payload from agent-core / agent-core-lite Android partner
909
- * SDKs. Only includes fields verified populated in production
910
- * `signal_observations` (last 30 days). Stub fields wired in Kotlin but
911
- * never observed in CH are intentionally excluded; re-add only after
912
- * telemetry confirms >1% population over 7 days.
913
- *
914
- */
915
- type PartnerDeviceHeartbeatBody = {
916
- advertisingId?: string | null;
917
- advertisingIdType?: "gaid" | "idfa" | null | null;
918
- bleDeviceCount?: number;
919
- capabilities?: DeviceCapabilityPayload;
920
- discoveredNetworkDevices?: Array<MdnsNetworkDevice> | null;
921
- fingerprint?: string;
922
- gatewayIpHash?: string | null;
923
- httpProbes?: Array<HttpProbeResult> | null;
924
- limitAdTracking?: boolean | null;
925
- metadata?: Record<string, unknown>;
926
- /** Capped at 50 devices (RSSI-sorted, strongest first). */
927
- nearbyBleDevices?: Array<BleScanResultData> | null;
928
- nearbyWifiNetworks?: Array<WifiScanResult> | null;
929
- networkDeviceCount?: number;
930
- /** Heartbeat schema version (1=baseline, 2=nativeSensorSnapshot) */
931
- schemaVersion?: number;
932
- screenId?: string | null;
933
- /** Per-source skip-reason counter map. Shape `{source: {reason: count}}`. */
934
- skipReasonCounts?: Record<string, Record<string, number>>;
935
- ssdpDevices?: Array<SsdpDeviceInfo> | null;
936
- status?: string;
937
- wifiBssidHash?: string | null;
938
- wifiEnvironment?: WifiEnvironmentSnapshot;
939
- wifiNetworkCount?: number;
940
- wifiSsidHash?: string | null;
941
- [key: string]: unknown;
942
- };
943
- type PartnerHeartbeatCommand = {
944
- /** Command normalized for partner SDK compatibility. */
945
- command?: string;
946
- id?: string;
947
- payload?: Record<string, unknown>;
948
- queued_at?: string;
949
- };
950
- type PartnerHeartbeatData = {
951
- ad_delivery_profile?: PartnerAdDeliveryProfile;
952
- commands?: Array<PartnerHeartbeatCommand>;
953
- last_seen_at?: string;
954
- status?: "online" | "offline";
955
- };
956
- type PartnerHeartbeatMeasurementMetadata = {
957
- ageSeconds?: number | null;
958
- cachedAt?: string | null;
959
- receivedAt?: string | null;
960
- source?: "redis_twin" | "pg_fallback" | "unknown";
961
- [key: string]: unknown;
962
- };
963
- type PartnerHeartbeatQueryData = {
964
- adDeliveryProfile?: PartnerAdDeliveryProfile;
965
- deviceId: string;
966
- lastHeartbeatAt?: string | null;
967
- measurementMetadata?: PartnerHeartbeatMeasurementMetadata;
968
- stalenessSeconds?: number | null;
969
- telemetry?: PartnerSafeHeartbeatTelemetry;
970
- [key: string]: unknown;
971
- };
972
- type PartnerHeartbeatQueryResponse = {
973
- data?: PartnerHeartbeatQueryData;
974
- success?: boolean;
975
- };
976
- /**
977
- * Optional heartbeat payload. Nested telemetry objects are preferred; legacy flat keys
978
- * are still accepted for backward compatibility.
979
- *
980
- */
981
- type PartnerHeartbeatRequest = {
982
- ad?: {
983
- last_vast_request_at?: string;
984
- last_vast_response_at?: string;
985
- proof_of_play_enabled?: boolean;
986
- };
987
- agent_status?: string;
988
- agent_version?: string;
989
- android_api_level?: number;
990
- brightness?: number;
991
- desugaring_enabled?: boolean;
992
- device?: {
993
- android_api_level?: number;
994
- make?: string;
995
- model?: string;
996
- os?: string;
997
- osv?: string;
998
- webview_chromium_major?: number;
999
- };
1000
- ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
1001
- ima_sdk_version?: string;
1002
- ima_support_reason?: string;
1003
- ima_supported?: boolean;
1004
- input_source?: string;
1005
- last_ima_error_code?: number;
1006
- last_vast_error_code?: number;
1007
- last_vast_request_at?: string;
1008
- last_vast_response_at?: string;
1009
- /** Alternate namespace for telemetry keys (legacy support). */
1010
- metadata?: Record<string, unknown>;
1011
- muted?: boolean;
1012
- network?: {
1013
- bandwidthMbps?: number;
1014
- connectionType?: string;
1015
- downlinkMbps?: number;
1016
- effectiveType?: string;
1017
- latencyRtt?: number;
1018
- rtt?: number;
1019
- saveData?: boolean;
1020
- };
1021
- network_strength_dbm?: number;
1022
- power_state?: "on" | "standby" | "off" | "unknown";
1023
- proof_of_play_enabled?: boolean;
1024
- sdk?: {
1025
- android_api_level?: number;
1026
- desugaring_enabled?: boolean;
1027
- ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
1028
- ima_sdk_version?: string;
1029
- ima_supported?: boolean;
1030
- version?: string;
1031
- webview_chromium_major?: number;
1032
- };
1033
- sdk_version?: string;
1034
- telemetry?: PartnerHeartbeatTelemetry;
1035
- temperature_c?: number;
1036
- uptime_seconds?: number;
1037
- volume?: number;
1038
- webview_chromium_major?: number;
1039
- };
1040
- type PartnerHeartbeatResponse = {
1041
- data?: PartnerHeartbeatData;
1042
- success?: boolean;
1043
- };
1044
- type PartnerHeartbeatTelemetry = {
1045
- agentStatus?: string;
1046
- agentVersion?: string;
1047
- android_api_level?: number;
1048
- bandwidthMbps?: number;
1049
- brightness?: number;
1050
- connectionType?: string;
1051
- desugaring_enabled?: boolean;
1052
- downlinkMbps?: number;
1053
- ima_integration?: "android_native" | "html5_webview" | "disabled" | "unknown";
1054
- ima_sdk_version?: string;
1055
- ima_support_reason?: string;
1056
- ima_supported?: boolean;
1057
- inputSource?: string;
1058
- last_ima_error_code?: number;
1059
- last_vast_error_code?: number;
1060
- last_vast_request_at?: string;
1061
- last_vast_response_at?: string;
1062
- latencyRtt?: number;
1063
- make?: string;
1064
- model?: string;
1065
- muted?: boolean;
1066
- networkConnectionType?: string;
1067
- networkEffectiveType?: string;
1068
- networkStrengthDbm?: number;
1069
- os?: string;
1070
- osVersion?: string;
1071
- osv?: string;
1072
- powerState?: "on" | "standby" | "off" | "unknown";
1073
- proof_of_play_enabled?: boolean;
1074
- rtt?: number;
1075
- saveData?: boolean;
1076
- temperatureC?: number;
1077
- uptimeSeconds?: number;
1078
- volume?: number;
1079
- webview_chromium_major?: number;
1080
- [key: string]: unknown;
1081
- };
1082
- /**
1083
- * Partner-safe subset of device telemetry. Strips MDM compliance,
1084
- * Vertex embeddings, identity-correction internals, partner identifiers,
1085
- * and Mongo `_id` so partners only see what they need to decide
1086
- * whether a device is healthy enough to receive ads.
1087
- *
1088
- */
1089
- type PartnerSafeHeartbeatTelemetry = {
1090
- agentStatus?: string | null;
1091
- agentVersion?: string | null;
1092
- bandwidthMbps?: number | null;
1093
- brightness?: number | null;
1094
- connectionType?: string | null;
1095
- consecutiveAdFailures?: number | null;
1096
- effectiveType?: string | null;
1097
- latencyRtt?: number | null;
1098
- make?: string | null;
1099
- model?: string | null;
1100
- muted?: boolean | null;
1101
- networkStrengthDbm?: number | null;
1102
- onlineStatus?: "online" | "offline" | "standby" | "unknown" | null;
1103
- os?: string | null;
1104
- osv?: string | null;
1105
- powerState?: string | null;
1106
- temperatureC?: number | null;
1107
- ua?: string | null;
1108
- uptimeSeconds?: number | null;
1109
- visibilityState?: string | null;
1110
- volume?: number | null;
1111
- [key: string]: unknown;
1112
- };
1113
- type SsdpDeviceInfo = {
1114
- friendlyName?: string | null;
1115
- location: string;
1116
- manufacturer?: string | null;
1117
- modelName?: string | null;
1118
- server?: string | null;
1119
- st: string;
1120
- udn?: string | null;
1121
- [key: string]: unknown;
1122
- };
1123
- type WifiEnvironmentSnapshot = {
1124
- channelCongestionRatio?: number | null;
1125
- connectedChannelWidthMhz?: number | null;
1126
- connectedFrequencyMhz?: number | null;
1127
- connectedLinkSpeedMbps?: number | null;
1128
- connectedSignalDbm?: number | null;
1129
- frequencyBand?: string | null;
1130
- medianSignalDbm?: number | null;
1131
- networkCount?: number | null;
1132
- rssiVariance?: number | null;
1133
- scanTimestampMs?: number | null;
1134
- signalSpreadDbm?: number | null;
1135
- uniqueBssidCount?: number | null;
1136
- [key: string]: unknown;
1137
- } | null;
1138
- type WifiScanResult = {
1139
- channelWidthMhz?: number | null;
1140
- frequencyMhz: number;
1141
- rawBssid: string;
1142
- signalStrengthDbm: number;
1143
- [key: string]: unknown;
1144
- };
1145
- /**
1146
- * Read live device heartbeat state
1147
- * GET /device/{deviceId}/heartbeat
1148
- */
1149
- interface getDeviceHeartbeatOperation {
1150
- readonly path: "/device/{deviceId}/heartbeat";
1151
- readonly method: "GET";
1152
- request: never;
1153
- response: PartnerHeartbeatQueryResponse;
1154
- }
1155
- /**
1156
- * Device heartbeat
1157
- * POST /device/{deviceId}/heartbeat
1158
- */
1159
- interface heartbeatOperation {
1160
- readonly path: "/device/{deviceId}/heartbeat";
1161
- readonly method: "POST";
1162
- request: PartnerHeartbeatRequest | PartnerDeviceHeartbeatBody;
1163
- response: PartnerHeartbeatResponse;
1164
- }
1165
- declare const generatedTypes: {
1166
- readonly schemaCount: 71;
1167
- readonly operationCount: 175;
1168
- readonly schemas: readonly ["Ad", "AdSettings", "AudienceAnalyticsResponse", "AudienceAttentionPrediction", "AudienceExportResponse", "AudienceLoyaltyFeaturesRow", "AudienceMetricsResponse", "AudienceSegment", "AudienceSocialAttention", "BatchResult", "BleScanResultData", "ChangelogEntry", "ChangelogResponse", "ContentPreferencesInput", "ContentPreferencesResponse", "ContentPreset", "DashboardResponse", "DataExportSummaryResponse", "DemographicsResponse", "Device", "DeviceCapabilityPayload", "DeviceSummary", "DisplaySettingsInput", "DisplaySettingsResponse", "EarningsBreakdownResponse", "EarningsResponse", "Error", "HeaderBiddingSettings", "HttpProbeResult", "MdnsNetworkDevice", "Pagination", "Partner", "PartnerAdDeliveryProfile", "PartnerDefaultStream", "PartnerDefaultStreamCreate", "PartnerDefaultStreamUpdate", "PartnerDeviceHeartbeatBody", "PartnerHeartbeatCommand", "PartnerHeartbeatData", "PartnerHeartbeatMeasurementMetadata", "PartnerHeartbeatQueryData", "PartnerHeartbeatQueryResponse", "PartnerHeartbeatRequest", "PartnerHeartbeatResponse", "PartnerHeartbeatTelemetry", "PartnerLBarContent", "PartnerLBarDisplayPreferences", "PartnerLBarSettings", "PartnerSafeHeartbeatTelemetry", "PartnerSelfPromoAd", "PartnerSelfPromoCreate", "PartnerSelfPromoPlacement", "PartnerStats", "PayoutResponse", "PlaygroundResult", "PlaygroundValidationError", "ProgrammaticSettingsInput", "ProgrammaticSettingsResponse", "RequestMetadataResponse", "RolePermissions", "SDKConfig", "ScreenAnalyticsResponse", "SsdpDeviceInfo", "TeamInviteResponse", "TeamMember", "Transaction", "Webhook", "WebhookDelivery", "WebhookEvent", "WifiEnvironmentSnapshot", "WifiScanResult"];
1169
- 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", "getDashboard", "exportProximityGraphEdges", "getDataExportSummary", "exportDataset", "getGeohashAudiencePanel", "registerDevice", "deleteDevice", "getDevice", "updateDevice", "getAdsForDevice", "ackDeviceCommand", "getDeviceHeartbeat", "heartbeat", "recordProgrammaticEvent", "listDevices", "registerDevicesBatch", "batchUpdateDeviceOrientation", "partnerDocsBrowser", "getEarnings", "getEarningsBreakdown", "requestPayout", "getTransactions", "getActiveSSEConnections", "subscribeToEvents", "getFleetAnalytics", "pushFleetCommand", "getFleetOverview", "updateFleetSettings", "recordImpressionGet", "recordImpressionPost", "recordImpressionsBatch", "getPartnerInfo", "listIntentCategories", "getIntentCategory", "getIntentPricing", "getMeasurementMethodology", "getNetworkConfig", "patchNetworkConfig", "updateNetworkConfig", "getNetworkTrends", "partnerPing", "partnerPingAuth", "getPricing", "quickStart", "registerPartner", "generateSandboxEvent", "resetSandbox", "createSandboxScreen", "getSandboxStatus", "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", "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"];
1170
- };
1171
- type GeneratedSchemaName = (typeof generatedTypes.schemas)[number];
1172
- type GeneratedOperationName = (typeof generatedTypes.operations)[number];
835
+ declare const VERSION = "1.0.0";
1173
836
 
1174
- export { AnalyticsClient, type AnalyticsData, type ApiErrorType, AudienceClient, type AudienceData, BillingClient, type BillingInfo, type BleScanResultData, type ClientOptions, type ConstructEventOptions, 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 PartnerDeviceHeartbeatBody, type PartnerHeartbeatMeasurementMetadata, type PartnerHeartbeatQueryData, type PartnerHeartbeatQueryResponse, type PartnerHeartbeatRequest, type PartnerHeartbeatResponse, type PartnerSafeHeartbeatTelemetry, type RequestOptions, type RetryOptions, type Screen, ScreensClient, type SsdpDeviceInfo, TrillboardsClient, TrillboardsError, type TrillboardsErrorOptions, 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 };