@trillboards/api-client 0.4.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  var crypto = require('crypto');
4
4
 
5
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
6
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
7
+ }) : x)(function(x) {
8
+ if (typeof require !== "undefined") return require.apply(this, arguments);
9
+ throw Error('Dynamic require of "' + x + '" is not supported');
10
+ });
11
+
5
12
  // src/error.ts
6
13
  var TrillboardsError = class _TrillboardsError extends Error {
7
14
  constructor(opts) {
@@ -72,7 +79,7 @@ var TrillboardsError = class _TrillboardsError extends Error {
72
79
  };
73
80
 
74
81
  // src/version.ts
75
- var VERSION = "0.4.1";
82
+ var VERSION = "1.1.0";
76
83
 
77
84
  // src/http.ts
78
85
  var PUBLIC_PATHS = ["/v1/errors", "/v1/changelog", "/api/discover", "/v1/health"];
@@ -355,7 +362,14 @@ var WebhooksClient = class {
355
362
  async list() {
356
363
  return this.http.get("/v1/partner/webhooks");
357
364
  }
358
- /** Create a new webhook subscription. */
365
+ /**
366
+ * Create a new webhook subscription.
367
+ *
368
+ * The created `Webhook` carries its signing `secret` (`whsec_…`) — this is the
369
+ * ONLY time it is returned. Persist it securely and pass it to
370
+ * `Webhooks.constructEvent()` to verify the compound `X-Trillboards-Signature`
371
+ * header over the raw delivery body.
372
+ */
359
373
  async create(body) {
360
374
  return this.http.post("/v1/partner/webhooks", body);
361
375
  }
@@ -623,20 +637,183 @@ function constructEventLegacy(payload, signature, secret) {
623
637
  }
624
638
  return JSON.parse(payloadStr);
625
639
  }
640
+ var ADCP_WEBHOOK_SIGNING_TAG = "adcp/webhook-signing/v1";
641
+ var ADCP_WEBHOOK_COMPONENTS = [
642
+ "@method",
643
+ "@target-uri",
644
+ "@authority",
645
+ "content-type",
646
+ "content-digest"
647
+ ];
648
+ var ADCP_MAX_WINDOW_SECONDS = 300;
649
+ function splitDictionary(headerValue) {
650
+ const members = [];
651
+ let depth = 0;
652
+ let quoted = false;
653
+ let start = 0;
654
+ for (let i = 0; i < headerValue.length; i++) {
655
+ const ch = headerValue[i];
656
+ if (quoted) {
657
+ if (ch === "\\") i++;
658
+ else if (ch === '"') quoted = false;
659
+ continue;
660
+ }
661
+ if (ch === '"') quoted = true;
662
+ else if (ch === "(") depth++;
663
+ else if (ch === ")") depth--;
664
+ else if (ch === "," && depth === 0) {
665
+ members.push(headerValue.slice(start, i).trim());
666
+ start = i + 1;
667
+ }
668
+ }
669
+ members.push(headerValue.slice(start).trim());
670
+ return members.filter((member) => member.length > 0);
671
+ }
672
+ function dictionaryMember(headerValue, label) {
673
+ return splitDictionary(headerValue).find((member) => member.startsWith(`${label}=`));
674
+ }
675
+ var ADCP_SIGNATURE_LABEL = "sig1";
676
+ function selectAdcpSignatureInput(signatureInput) {
677
+ const members = splitDictionary(signatureInput);
678
+ const named = members.find((member) => member.startsWith(`${ADCP_SIGNATURE_LABEL}=`));
679
+ if (named) return { label: ADCP_SIGNATURE_LABEL, member: named };
680
+ const tagged = members.find((member) => member.includes(`tag="${ADCP_WEBHOOK_SIGNING_TAG}"`));
681
+ if (tagged) return { label: tagged.slice(0, tagged.indexOf("=")), member: tagged };
682
+ throw authError(
683
+ `AdCP webhook has no "${ADCP_SIGNATURE_LABEL}" signature member and no member tagged "${ADCP_WEBHOOK_SIGNING_TAG}".`
684
+ );
685
+ }
686
+ function canonicalTargetUri(rawUrl) {
687
+ const parsed = new URL(rawUrl);
688
+ const beforeFragment = rawUrl.split("#", 1)[0];
689
+ const search = parsed.search || (beforeFragment.endsWith("?") ? "?" : "");
690
+ return `${parsed.protocol}//${parsed.host}${parsed.pathname}${search}`.replace(
691
+ /%([0-9a-fA-F]{2})/g,
692
+ (match, hex) => {
693
+ const code = parseInt(hex, 16);
694
+ const unreserved = code >= 65 && code <= 90 || code >= 97 && code <= 122 || code >= 48 && code <= 57 || code === 45 || code === 46 || code === 95 || code === 126;
695
+ return unreserved ? String.fromCharCode(code) : `%${hex.toUpperCase()}`;
696
+ }
697
+ );
698
+ }
699
+ function verifyAdcpWebhook(opts) {
700
+ const { createHash, createPublicKey, verify: cryptoVerify } = __require("crypto");
701
+ const signatureInput = getHeader(opts.headers, "Signature-Input");
702
+ const signature = getHeader(opts.headers, "Signature");
703
+ if (!signatureInput || !signature) {
704
+ throw authError("AdCP webhook is missing the Signature / Signature-Input header pair.");
705
+ }
706
+ const { label, member: inputMember } = selectAdcpSignatureInput(signatureInput);
707
+ const signatureMember = dictionaryMember(signature, label);
708
+ if (!signatureMember) {
709
+ throw authError(`AdCP webhook Signature has no "${label}" member to match Signature-Input.`);
710
+ }
711
+ const paramsStart = inputMember.indexOf("(");
712
+ const paramsEnd = inputMember.indexOf(")");
713
+ if (paramsStart < 0 || paramsEnd < 0) {
714
+ throw authError("AdCP webhook Signature-Input is malformed.");
715
+ }
716
+ const components = inputMember.slice(paramsStart + 1, paramsEnd).split(" ").map((component) => component.replace(/^"|"$/g, "")).filter((component) => component.length > 0);
717
+ const readParam = (name) => {
718
+ const match = new RegExp(`;${name}=("?)([^";]+)\\1`).exec(inputMember);
719
+ return match ? match[2] : void 0;
720
+ };
721
+ const created = Number(readParam("created"));
722
+ const expires = Number(readParam("expires"));
723
+ const nonce = readParam("nonce");
724
+ const keyid = readParam("keyid");
725
+ const alg = readParam("alg");
726
+ const tag = readParam("tag");
727
+ if (!nonce || !keyid || !alg || !Number.isFinite(created) || !Number.isFinite(expires)) {
728
+ throw authError("AdCP webhook signature is missing a required parameter.");
729
+ }
730
+ if (tag !== ADCP_WEBHOOK_SIGNING_TAG) {
731
+ throw authError(`AdCP webhook signature has tag "${tag}", expected "${ADCP_WEBHOOK_SIGNING_TAG}".`);
732
+ }
733
+ if (alg !== "ed25519") {
734
+ throw authError(`AdCP webhook signature algorithm "${alg}" is not allowed.`);
735
+ }
736
+ for (const required of ADCP_WEBHOOK_COMPONENTS) {
737
+ if (!components.includes(required)) {
738
+ throw authError(`AdCP webhook signature does not cover "${required}".`);
739
+ }
740
+ }
741
+ if (expires <= created || expires - created > ADCP_MAX_WINDOW_SECONDS) {
742
+ throw authError("AdCP webhook signature window is invalid.");
743
+ }
744
+ const now = opts.nowSec ?? Math.floor(Date.now() / 1e3);
745
+ if (now > expires) {
746
+ throw authError("AdCP webhook signature has expired. Possible replay attack.");
747
+ }
748
+ const jwk = opts.keys.find((key) => key.kid === keyid);
749
+ if (!jwk) {
750
+ throw authError(`AdCP webhook signed with unknown key "${keyid}". Refresh the JWKS.`);
751
+ }
752
+ if (jwk.key_ops && !jwk.key_ops.includes("verify")) {
753
+ throw authError(`AdCP webhook key "${keyid}" is not a verification key.`);
754
+ }
755
+ if (jwk.adcp_use && jwk.adcp_use !== "request-signing" && jwk.adcp_use !== "webhook-signing") {
756
+ throw authError(`AdCP webhook key "${keyid}" has adcp_use "${jwk.adcp_use}".`);
757
+ }
758
+ const payloadBuf = typeof opts.payload === "string" ? Buffer.from(opts.payload, "utf8") : opts.payload;
759
+ const contentDigest = getHeader(opts.headers, "Content-Digest");
760
+ const expectedDigest = `sha-256=:${createHash("sha256").update(payloadBuf).digest("base64")}:`;
761
+ if (!contentDigest || contentDigest !== expectedDigest) {
762
+ throw authError("AdCP webhook Content-Digest does not match the body.");
763
+ }
764
+ const method = (opts.method ?? "POST").toUpperCase();
765
+ const target = new URL(opts.url);
766
+ const baseLines = components.map((component) => {
767
+ switch (component) {
768
+ case "@method":
769
+ return `"@method": ${method}`;
770
+ case "@target-uri":
771
+ return `"@target-uri": ${canonicalTargetUri(opts.url)}`;
772
+ case "@authority":
773
+ return `"@authority": ${target.host.toLowerCase()}`;
774
+ default: {
775
+ const value = getHeader(opts.headers, component);
776
+ if (value === void 0) {
777
+ throw authError(`AdCP webhook covers "${component}" but the header is absent.`);
778
+ }
779
+ return `"${component}": ${value.trim()}`;
780
+ }
781
+ }
782
+ });
783
+ baseLines.push(`"@signature-params": ${inputMember.slice(label.length + 1)}`);
784
+ const signatureBytes = Buffer.from(
785
+ signatureMember.slice(label.length + 1).replace(/^:|:$/g, ""),
786
+ "base64url"
787
+ );
788
+ const publicKey = createPublicKey({ key: jwk, format: "jwk" });
789
+ if (!cryptoVerify(null, Buffer.from(baseLines.join("\n"), "utf8"), publicKey, signatureBytes)) {
790
+ throw authError(
791
+ "AdCP webhook signature verification failed. The delivery may have been tampered with."
792
+ );
793
+ }
794
+ return {
795
+ event: JSON.parse(payloadBuf.toString("utf8")),
796
+ keyid,
797
+ nonce,
798
+ expires
799
+ };
800
+ }
626
801
  var Webhooks = {
627
802
  constructEvent,
628
803
  constructEventLegacy,
629
- parseSignatureHeader
804
+ parseSignatureHeader,
805
+ verifyAdcpWebhook
630
806
  };
631
807
 
632
808
  // src/generated/index.ts
633
809
  var generatedTypes = {
634
- schemaCount: 99,
810
+ schemaCount: 109,
635
811
  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"]
812
+ schemas: ["Ad", "AdSettings", "AdvertisingIdentity", "AnalyticsData", "AudienceAnalyticsResponse", "AudienceAttentionPrediction", "AudienceData", "AudienceExportResponse", "AudienceLoyaltyFeaturesRow", "AudienceMetricsResponse", "AudienceSegment", "AudienceSocialAttention", "BatchResult", "BillingInfo", "BleScanResultData", "ChangelogEntry", "ChangelogResponse", "ContentFitSettings", "ContentPreferencesInput", "ContentPreferencesResponse", "ContentPreset", "CreatePartnerSensingRouteRequest", "CreativeClassification", "DashboardResponse", "DataExportSummaryResponse", "DemographicsResponse", "Device", "DeviceCapabilityPayload", "DeviceSummary", "DisplaySettingsInput", "DisplaySettingsResponse", "EarningsBreakdownResponse", "EarningsData", "EarningsResponse", "Error", "ErrorEntry", "FleetCommand", "FleetCommandEvent", "HeaderBiddingSettings", "HttpProbeResult", "Impression", "MdnsNetworkDevice", "Pagination", "Partner", "PartnerAdDeliveryProfile", "PartnerDefaultStream", "PartnerDefaultStreamCreate", "PartnerDefaultStreamUpdate", "PartnerDeviceBatchRegistrationInput", "PartnerDeviceHeartbeatBody", "PartnerDeviceRegistrationInput", "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", "Screen", "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"],
813
+ 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", "getBillingUsageSummary", "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", "getUsageDashboard", "getRateLimitStatus", "queryChangelog", "playgroundDryRun", "getRequestMetadata", "getVastConfig", "getVenuesNearby", "getVenueAtmosphere", "getVenueTraffic", "getVenueIntelligence", "listWebhooks", "createWebhook", "deleteWebhook", "updateWebhook", "getWebhookDeliveries", "testWebhook"]
638
814
  };
639
815
 
816
+ exports.ADCP_WEBHOOK_SIGNING_TAG = ADCP_WEBHOOK_SIGNING_TAG;
640
817
  exports.AnalyticsClient = AnalyticsClient;
641
818
  exports.AudienceClient = AudienceClient;
642
819
  exports.BillingClient = BillingClient;
@@ -658,5 +835,6 @@ exports.constructEventLegacy = constructEventLegacy;
658
835
  exports.generatedTypes = generatedTypes;
659
836
  exports.parseSignatureHeader = parseSignatureHeader;
660
837
  exports.retryWithBackoff = retryWithBackoff;
838
+ exports.verifyAdcpWebhook = verifyAdcpWebhook;
661
839
  //# sourceMappingURL=index.js.map
662
840
  //# sourceMappingURL=index.js.map