@trillboards/api-client 0.2.0 → 0.4.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/README.md +72 -10
- package/dist/index.d.mts +430 -45
- package/dist/index.d.ts +430 -45
- package/dist/index.js +261 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +258 -29
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -72,10 +72,51 @@ var TrillboardsError = class _TrillboardsError extends Error {
|
|
|
72
72
|
};
|
|
73
73
|
|
|
74
74
|
// src/version.ts
|
|
75
|
-
var VERSION = "0.1
|
|
75
|
+
var VERSION = "0.4.1";
|
|
76
76
|
|
|
77
77
|
// src/http.ts
|
|
78
78
|
var PUBLIC_PATHS = ["/v1/errors", "/v1/changelog", "/api/discover", "/v1/health"];
|
|
79
|
+
function isRetryable(err) {
|
|
80
|
+
if (err instanceof TrillboardsError) {
|
|
81
|
+
return err.statusCode === 429 || err.statusCode >= 500;
|
|
82
|
+
}
|
|
83
|
+
if (err instanceof TypeError) return true;
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
function computeBackoffMs(attempt, baseMs, err) {
|
|
87
|
+
if (err instanceof TrillboardsError && err.retryAfter != null && err.retryAfter > 0) {
|
|
88
|
+
return err.retryAfter * 1e3;
|
|
89
|
+
}
|
|
90
|
+
const exponential = baseMs * Math.pow(2, attempt);
|
|
91
|
+
return Math.floor(Math.random() * exponential);
|
|
92
|
+
}
|
|
93
|
+
function sleep(ms) {
|
|
94
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
95
|
+
}
|
|
96
|
+
async function retryWithBackoff(operation, opts = {}) {
|
|
97
|
+
const retries = opts.retries ?? 6;
|
|
98
|
+
const baseMs = opts.baseMs ?? 1e3;
|
|
99
|
+
let lastError;
|
|
100
|
+
for (let attempt = 0; attempt <= retries; attempt += 1) {
|
|
101
|
+
try {
|
|
102
|
+
return await operation();
|
|
103
|
+
} catch (err) {
|
|
104
|
+
lastError = err;
|
|
105
|
+
if (!isRetryable(err) || attempt === retries) {
|
|
106
|
+
throw err;
|
|
107
|
+
}
|
|
108
|
+
if (opts.onAttemptError) {
|
|
109
|
+
try {
|
|
110
|
+
opts.onAttemptError(attempt + 1, err);
|
|
111
|
+
} catch {
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const delayMs = computeBackoffMs(attempt, baseMs, err);
|
|
115
|
+
await sleep(delayMs);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
throw lastError;
|
|
119
|
+
}
|
|
79
120
|
var HttpClient = class {
|
|
80
121
|
constructor(config) {
|
|
81
122
|
this.config = config;
|
|
@@ -126,17 +167,28 @@ var HttpClient = class {
|
|
|
126
167
|
get(path, opts) {
|
|
127
168
|
return this.request("GET", path, { params: opts?.params });
|
|
128
169
|
}
|
|
129
|
-
|
|
130
|
-
|
|
170
|
+
/**
|
|
171
|
+
* POST / PUT / PATCH / DELETE auto-retry on 429 + 5xx + network TypeError
|
|
172
|
+
* via `retryWithBackoff()`. Callers can opt into observability by passing
|
|
173
|
+
* `retry.onAttemptError` to receive a callback per transient failure.
|
|
174
|
+
*
|
|
175
|
+
* The retry behavior is identical across all four methods because all of
|
|
176
|
+
* them are state-changing operations subject to the same transient-failure
|
|
177
|
+
* classes (rate limit, upstream-down, network-flap). The wire idempotency
|
|
178
|
+
* of POST vs DELETE is enforced server-side via Idempotency-Key headers,
|
|
179
|
+
* which the caller can attach via `opts.headers`.
|
|
180
|
+
*/
|
|
181
|
+
post(path, body, opts) {
|
|
182
|
+
return retryWithBackoff(() => this.request("POST", path, { body, headers: opts?.headers }), opts?.retry);
|
|
131
183
|
}
|
|
132
|
-
put(path, body) {
|
|
133
|
-
return this.request("PUT", path, { body });
|
|
184
|
+
put(path, body, opts) {
|
|
185
|
+
return retryWithBackoff(() => this.request("PUT", path, { body, headers: opts?.headers }), opts?.retry);
|
|
134
186
|
}
|
|
135
|
-
patch(path, body) {
|
|
136
|
-
return this.request("PATCH", path, { body });
|
|
187
|
+
patch(path, body, opts) {
|
|
188
|
+
return retryWithBackoff(() => this.request("PATCH", path, { body, headers: opts?.headers }), opts?.retry);
|
|
137
189
|
}
|
|
138
|
-
delete(path) {
|
|
139
|
-
return this.request("DELETE", path);
|
|
190
|
+
delete(path, opts) {
|
|
191
|
+
return retryWithBackoff(() => this.request("DELETE", path, { headers: opts?.headers }), opts?.retry);
|
|
140
192
|
}
|
|
141
193
|
buildUrl(path, params) {
|
|
142
194
|
const base = `${this.config.baseUrl}${path}`;
|
|
@@ -170,6 +222,25 @@ var ScreensClient = class {
|
|
|
170
222
|
async create(body) {
|
|
171
223
|
return this.http.post("/v1/partner/device", body);
|
|
172
224
|
}
|
|
225
|
+
/** Get the resolved display settings for one screen. */
|
|
226
|
+
async getDisplaySettings(screenId) {
|
|
227
|
+
return this.http.get(`/v1/partner/screens/${screenId}/display-settings`);
|
|
228
|
+
}
|
|
229
|
+
/** Partially update display settings; omitted content-fit keys are preserved. */
|
|
230
|
+
async patchDisplaySettings(screenId, settings) {
|
|
231
|
+
return this.http.patch(`/v1/partner/screens/${screenId}/display-settings`, settings);
|
|
232
|
+
}
|
|
233
|
+
/** Update display settings through the PUT endpoint. */
|
|
234
|
+
async updateDisplaySettings(screenId, settings) {
|
|
235
|
+
return this.http.put(`/v1/partner/screens/${screenId}/display-settings`, settings);
|
|
236
|
+
}
|
|
237
|
+
/** Apply a partial display-settings update to up to 100 screens. */
|
|
238
|
+
async batchUpdateDisplaySettings(screenIds, settings) {
|
|
239
|
+
return this.http.post("/v1/partner/screens/batch/display-settings", {
|
|
240
|
+
screen_ids: screenIds,
|
|
241
|
+
settings
|
|
242
|
+
});
|
|
243
|
+
}
|
|
173
244
|
/** Delete a screen/device. */
|
|
174
245
|
async delete(screenId) {
|
|
175
246
|
return this.http.delete(`/v1/partner/device/${screenId}`);
|
|
@@ -193,13 +264,28 @@ var DevicesClient = class {
|
|
|
193
264
|
async create(body) {
|
|
194
265
|
return this.http.post("/v1/partner/device", body);
|
|
195
266
|
}
|
|
267
|
+
/** Register or re-register up to 100 devices with optional fleet defaults. */
|
|
268
|
+
async createBatch(body) {
|
|
269
|
+
return this.http.post("/v1/partner/devices/batch", body);
|
|
270
|
+
}
|
|
196
271
|
/** Delete a device. */
|
|
197
272
|
async delete(deviceId) {
|
|
198
273
|
return this.http.delete(`/v1/partner/device/${deviceId}`);
|
|
199
274
|
}
|
|
200
|
-
/**
|
|
201
|
-
|
|
202
|
-
|
|
275
|
+
/**
|
|
276
|
+
* Send heartbeat for a device.
|
|
277
|
+
*
|
|
278
|
+
* Auto-retries on 429 + 5xx + network TypeError via the shared
|
|
279
|
+
* retryWithBackoff() helper (see http.ts). Pass `opts.retry.onAttemptError`
|
|
280
|
+
* to observe transient failures (e.g. emit an `upload_error` event from
|
|
281
|
+
* the CTV SDK without coupling the retry loop to its event emitter).
|
|
282
|
+
*/
|
|
283
|
+
async heartbeat(deviceId, body, opts) {
|
|
284
|
+
return this.http.post(
|
|
285
|
+
`/v1/partner/device/${deviceId}/heartbeat`,
|
|
286
|
+
body ?? {},
|
|
287
|
+
{ retry: opts?.retry }
|
|
288
|
+
);
|
|
203
289
|
}
|
|
204
290
|
};
|
|
205
291
|
|
|
@@ -355,6 +441,34 @@ var BillingClient = class {
|
|
|
355
441
|
}
|
|
356
442
|
};
|
|
357
443
|
|
|
444
|
+
// src/resources/routes.ts
|
|
445
|
+
var BASE = "/v1/partner/sensing/routes";
|
|
446
|
+
var RoutesClient = class {
|
|
447
|
+
constructor(http) {
|
|
448
|
+
this.http = http;
|
|
449
|
+
}
|
|
450
|
+
/** Create a Route. Every screen in `screenMongoIds` must be one you own. */
|
|
451
|
+
async create(body) {
|
|
452
|
+
return this.http.post(BASE, body);
|
|
453
|
+
}
|
|
454
|
+
/** List your Routes. Pass `includeDisabled: false` to return only enabled Routes. */
|
|
455
|
+
async list(params) {
|
|
456
|
+
return this.http.get(BASE, { params });
|
|
457
|
+
}
|
|
458
|
+
/** Get one Route by id. */
|
|
459
|
+
async get(routeId) {
|
|
460
|
+
return this.http.get(`${BASE}/${routeId}`);
|
|
461
|
+
}
|
|
462
|
+
/** Update a Route (partial, non-clobbering — only the fields you send change). */
|
|
463
|
+
async update(routeId, body) {
|
|
464
|
+
return this.http.patch(`${BASE}/${routeId}`, body);
|
|
465
|
+
}
|
|
466
|
+
/** Soft-delete a Route. */
|
|
467
|
+
async delete(routeId) {
|
|
468
|
+
return this.http.delete(`${BASE}/${routeId}`);
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
|
|
358
472
|
// src/client.ts
|
|
359
473
|
var DEFAULT_BASE_URL = "https://api.trillboards.com";
|
|
360
474
|
var TrillboardsClient = class {
|
|
@@ -381,31 +495,146 @@ var TrillboardsClient = class {
|
|
|
381
495
|
this.data = new DataClient(this._http);
|
|
382
496
|
this.errors = new ErrorsClient(this._http);
|
|
383
497
|
this.billing = new BillingClient(this._http);
|
|
498
|
+
this.routes = new RoutesClient(this._http);
|
|
384
499
|
}
|
|
385
500
|
};
|
|
386
|
-
|
|
501
|
+
var DEFAULT_TOLERANCE_SECONDS = 300;
|
|
502
|
+
function parseSignatureHeader(rawSig) {
|
|
503
|
+
const versions = /* @__PURE__ */ new Map();
|
|
504
|
+
let timestamp;
|
|
505
|
+
let legacy;
|
|
506
|
+
const trimmed = rawSig.trim();
|
|
507
|
+
if (trimmed.startsWith("sha256=")) {
|
|
508
|
+
legacy = trimmed.slice("sha256=".length);
|
|
509
|
+
return { timestamp, versions, legacy };
|
|
510
|
+
}
|
|
511
|
+
for (const part of trimmed.split(",")) {
|
|
512
|
+
const eq = part.indexOf("=");
|
|
513
|
+
if (eq < 0) continue;
|
|
514
|
+
const key = part.slice(0, eq).trim();
|
|
515
|
+
const value = part.slice(eq + 1).trim();
|
|
516
|
+
if (!key || !value) continue;
|
|
517
|
+
if (key === "t") {
|
|
518
|
+
const ts = Number(value);
|
|
519
|
+
if (Number.isFinite(ts)) timestamp = ts;
|
|
520
|
+
} else if (/^v\d+$/.test(key)) {
|
|
521
|
+
versions.set(key, value);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return { timestamp, versions, legacy };
|
|
525
|
+
}
|
|
526
|
+
function getHeader(headers, name) {
|
|
527
|
+
const lc = name.toLowerCase();
|
|
528
|
+
for (const key of Object.keys(headers)) {
|
|
529
|
+
if (key.toLowerCase() === lc) {
|
|
530
|
+
const v = headers[key];
|
|
531
|
+
if (Array.isArray(v)) return v[0];
|
|
532
|
+
return v;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
return void 0;
|
|
536
|
+
}
|
|
537
|
+
function constantTimeEqual(a, b) {
|
|
538
|
+
const aBuf = Buffer.from(a, "utf8");
|
|
539
|
+
const bBuf = Buffer.from(b, "utf8");
|
|
540
|
+
if (aBuf.length !== bBuf.length) return false;
|
|
541
|
+
return crypto.timingSafeEqual(aBuf, bBuf);
|
|
542
|
+
}
|
|
543
|
+
function authError(message) {
|
|
544
|
+
return new TrillboardsError({
|
|
545
|
+
type: "authentication_error",
|
|
546
|
+
code: "webhook_signature_invalid",
|
|
547
|
+
message,
|
|
548
|
+
statusCode: 401
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
function constructEvent(payload, headers, secret, opts = {}) {
|
|
552
|
+
let signatureHeader;
|
|
553
|
+
let timestampHeader;
|
|
554
|
+
if (typeof headers === "string") {
|
|
555
|
+
signatureHeader = headers;
|
|
556
|
+
} else if (headers && typeof headers === "object") {
|
|
557
|
+
signatureHeader = getHeader(headers, "X-Trillboards-Signature");
|
|
558
|
+
timestampHeader = getHeader(headers, "X-Trillboards-Timestamp");
|
|
559
|
+
}
|
|
560
|
+
if (!signatureHeader) {
|
|
561
|
+
throw authError("Missing X-Trillboards-Signature header.");
|
|
562
|
+
}
|
|
387
563
|
const payloadStr = typeof payload === "string" ? payload : payload.toString("utf8");
|
|
388
|
-
const
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
564
|
+
const parsed = parseSignatureHeader(signatureHeader);
|
|
565
|
+
let ts = parsed.timestamp;
|
|
566
|
+
if (ts === void 0 && timestampHeader) {
|
|
567
|
+
const fromHeader = Number(timestampHeader);
|
|
568
|
+
if (Number.isFinite(fromHeader)) ts = fromHeader;
|
|
569
|
+
}
|
|
570
|
+
if (ts === void 0 || !Number.isFinite(ts)) {
|
|
571
|
+
throw authError(
|
|
572
|
+
"Webhook signature missing timestamp. Provide either `t=<unix_seconds>` inside X-Trillboards-Signature OR a separate X-Trillboards-Timestamp header."
|
|
573
|
+
);
|
|
574
|
+
}
|
|
575
|
+
const tolerance = opts.tolerance ?? DEFAULT_TOLERANCE_SECONDS;
|
|
576
|
+
const now = opts.nowSec ?? Math.floor(Date.now() / 1e3);
|
|
577
|
+
if (Math.abs(now - ts) > tolerance) {
|
|
578
|
+
throw authError(
|
|
579
|
+
`Webhook timestamp ${ts} outside tolerance window of ${tolerance}s (now ${now}). Possible replay attack.`
|
|
580
|
+
);
|
|
581
|
+
}
|
|
582
|
+
const v1Expected = crypto.createHmac("sha256", secret).update(`${ts}.${payloadStr}`).digest("hex");
|
|
583
|
+
const v0Expected = crypto.createHmac("sha256", secret).update(payloadStr).digest("hex");
|
|
584
|
+
const v1Provided = parsed.versions.get("v1");
|
|
585
|
+
const v0Provided = parsed.versions.get("v0");
|
|
586
|
+
if (v1Provided) {
|
|
587
|
+
if (constantTimeEqual(v1Provided, v1Expected)) {
|
|
588
|
+
return JSON.parse(payloadStr);
|
|
589
|
+
}
|
|
590
|
+
throw authError(
|
|
591
|
+
"Webhook v1 signature verification failed. The payload may have been tampered with, or your webhook secret may be incorrect."
|
|
592
|
+
);
|
|
593
|
+
}
|
|
594
|
+
if (v0Provided && constantTimeEqual(v0Provided, v0Expected)) {
|
|
595
|
+
return JSON.parse(payloadStr);
|
|
596
|
+
}
|
|
597
|
+
if (parsed.legacy) {
|
|
598
|
+
if (constantTimeEqual(parsed.legacy, v1Expected)) {
|
|
599
|
+
return JSON.parse(payloadStr);
|
|
600
|
+
}
|
|
601
|
+
if (constantTimeEqual(parsed.legacy, v0Expected)) {
|
|
602
|
+
return JSON.parse(payloadStr);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
throw authError(
|
|
606
|
+
"Webhook signature verification failed. The payload may have been tampered with, or your webhook secret may be incorrect."
|
|
607
|
+
);
|
|
608
|
+
}
|
|
609
|
+
var legacyWarned = false;
|
|
610
|
+
function constructEventLegacy(payload, signature, secret) {
|
|
611
|
+
if (!legacyWarned) {
|
|
612
|
+
console.warn(
|
|
613
|
+
"[@trillboards/api-client] constructEventLegacy is deprecated and unsafe (no replay protection). Migrate to Webhooks.constructEvent(payload, req.headers, secret). See https://api.trillboards.com/docs/integrations/webhook-signature-verification.md"
|
|
614
|
+
);
|
|
615
|
+
legacyWarned = true;
|
|
616
|
+
}
|
|
617
|
+
const payloadStr = typeof payload === "string" ? payload : payload.toString("utf8");
|
|
618
|
+
const expected = crypto.createHmac("sha256", secret).update(payloadStr).digest("hex");
|
|
619
|
+
if (!constantTimeEqual(signature, expected)) {
|
|
620
|
+
throw authError(
|
|
621
|
+
"Legacy webhook signature mismatch. If your server has been upgraded to the compound-header emitter, switch to Webhooks.constructEvent instead."
|
|
622
|
+
);
|
|
398
623
|
}
|
|
399
624
|
return JSON.parse(payloadStr);
|
|
400
625
|
}
|
|
401
|
-
var Webhooks = {
|
|
626
|
+
var Webhooks = {
|
|
627
|
+
constructEvent,
|
|
628
|
+
constructEventLegacy,
|
|
629
|
+
parseSignatureHeader
|
|
630
|
+
};
|
|
402
631
|
|
|
403
632
|
// src/generated/index.ts
|
|
404
633
|
var generatedTypes = {
|
|
405
|
-
schemaCount:
|
|
406
|
-
operationCount:
|
|
407
|
-
schemas: ["Ad", "AdSettings", "AudienceAnalyticsResponse", "AudienceExportResponse", "AudienceMetricsResponse", "AudienceSegment", "BatchResult", "BleScanResultData", "ChangelogEntry", "ChangelogResponse", "ContentPreferencesInput", "ContentPreferencesResponse", "ContentPreset", "DashboardResponse", "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"],
|
|
408
|
-
operations: ["listPartnerSelfPromoAds", "createPartnerSelfPromoAd", "listPartnerSelfPromoPlacements", "schedulePartnerSelfPromo", "createPartnerSelfPromoUpload", "
|
|
634
|
+
schemaCount: 99,
|
|
635
|
+
operationCount: 210,
|
|
636
|
+
schemas: ["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"],
|
|
637
|
+
operations: ["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"]
|
|
409
638
|
};
|
|
410
639
|
|
|
411
640
|
exports.AnalyticsClient = AnalyticsClient;
|
|
@@ -417,6 +646,7 @@ exports.EarningsClient = EarningsClient;
|
|
|
417
646
|
exports.ErrorsClient = ErrorsClient;
|
|
418
647
|
exports.FleetClient = FleetClient;
|
|
419
648
|
exports.ImpressionsClient = ImpressionsClient;
|
|
649
|
+
exports.RoutesClient = RoutesClient;
|
|
420
650
|
exports.ScreensClient = ScreensClient;
|
|
421
651
|
exports.TrillboardsClient = TrillboardsClient;
|
|
422
652
|
exports.TrillboardsError = TrillboardsError;
|
|
@@ -424,6 +654,9 @@ exports.VERSION = VERSION;
|
|
|
424
654
|
exports.Webhooks = Webhooks;
|
|
425
655
|
exports.WebhooksClient = WebhooksClient;
|
|
426
656
|
exports.constructEvent = constructEvent;
|
|
657
|
+
exports.constructEventLegacy = constructEventLegacy;
|
|
427
658
|
exports.generatedTypes = generatedTypes;
|
|
659
|
+
exports.parseSignatureHeader = parseSignatureHeader;
|
|
660
|
+
exports.retryWithBackoff = retryWithBackoff;
|
|
428
661
|
//# sourceMappingURL=index.js.map
|
|
429
662
|
//# sourceMappingURL=index.js.map
|