@cookiemunch/sdk 0.3.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/dist/index.d.ts CHANGED
@@ -57,6 +57,144 @@ interface Site {
57
57
  cbid: string;
58
58
  orgId: string;
59
59
  domain: string;
60
+ /** The business name data subjects see on the rights page, in notices and the policy. Absent: the domain is shown. */
61
+ name?: string;
62
+ /** Other hosts serving the site: accepted consent-ingest origins, never verified claims. */
63
+ aliases?: string[];
64
+ verified?: boolean;
65
+ }
66
+ /** PATCH /v1/sites/{cbid} — rename or move a site. `name: null` clears the name; `aliases: []` clears them. */
67
+ interface SiteUpdate {
68
+ domain?: string;
69
+ name?: string | null;
70
+ aliases?: string[];
71
+ }
72
+ interface SiteUpdateResult {
73
+ dryRun?: true;
74
+ site: Site;
75
+ diff: Array<{
76
+ field: 'domain' | 'name' | 'aliases' | 'verified';
77
+ before: unknown;
78
+ after: unknown;
79
+ }>;
80
+ effects: {
81
+ /** `reset`: the domain moved; verify the new one. */
82
+ verification: 'kept' | 'reset';
83
+ scanTarget: string;
84
+ previewDefaultUrl: string;
85
+ displayName: string;
86
+ /** Custom rights-page hostnames no longer under the domain or an alias (left in place). */
87
+ staleRightsDomains: string[];
88
+ };
89
+ warnings?: Array<{
90
+ field: string;
91
+ reason: string;
92
+ }>;
93
+ }
94
+ /** One row of GET /v1/integration-health. `ok: null` = the check could not run (see `detail`). */
95
+ interface HealthRow {
96
+ check: string;
97
+ ok: boolean | null;
98
+ severity: 'error' | 'warning' | 'info';
99
+ subject: string;
100
+ fixHint?: string;
101
+ detail?: string;
102
+ lastCheckedAt: number;
103
+ }
104
+ interface IntegrationHealthReport {
105
+ cbid: string;
106
+ checkedAt: number;
107
+ ok: boolean;
108
+ counts: {
109
+ error: number;
110
+ warning: number;
111
+ notChecked: number;
112
+ };
113
+ checks: HealthRow[];
114
+ }
115
+ /** POST /v1/provision. Secrets are used for the request only and never returned. */
116
+ interface ProvisionRequest {
117
+ product: string;
118
+ domain: string;
119
+ name?: string;
120
+ aliases?: string[];
121
+ cbid?: string;
122
+ /** `frontendApiHost` (e.g. auth.example.com) lets provision declare Atlas's sign-in cookies on the site. */
123
+ atlas?: {
124
+ secretKey: string;
125
+ cookieConsent?: boolean;
126
+ dsrWebhook?: boolean;
127
+ frontendApiHost?: string;
128
+ };
129
+ forumulate?: {
130
+ token: string;
131
+ orgId: string;
132
+ consent?: boolean;
133
+ executorKey?: boolean;
134
+ label?: string;
135
+ };
136
+ rightsApi?: {
137
+ baseUrl: string;
138
+ secretKey: string;
139
+ profilePreset?: string;
140
+ };
141
+ }
142
+ interface ProvisionStep {
143
+ step: string;
144
+ status: 'created' | 'updated' | 'unchanged' | 'would_create' | 'would_update' | 'skipped' | 'waiting' | 'failed' | 'passed';
145
+ detail?: string;
146
+ diff?: Array<{
147
+ field: string;
148
+ before: unknown;
149
+ after: unknown;
150
+ }>;
151
+ waitingOn?: string;
152
+ }
153
+ interface ProvisionResult {
154
+ dryRun: boolean;
155
+ product: string;
156
+ cbid: string | null;
157
+ steps: ProvisionStep[];
158
+ summary: {
159
+ changed: number;
160
+ unchanged: number;
161
+ waiting: number;
162
+ failed: number;
163
+ };
164
+ }
165
+ type PartnerId = 'forumulate' | 'atlas';
166
+ interface PartnerLinkCreate {
167
+ partner: PartnerId;
168
+ /** The partner's id for the receiving account (a Forumulate organisation id, an Atlas instance id). */
169
+ externalId: string;
170
+ label?: string;
171
+ events?: Array<'consent.recorded' | 'consent.withdrawn'>;
172
+ }
173
+ interface PartnerLink {
174
+ id: string;
175
+ cbid: string;
176
+ partner: PartnerId;
177
+ externalId: string;
178
+ label?: string;
179
+ events: string[];
180
+ status: 'active' | 'waiting_on_partner' | 'revoked';
181
+ /** e.g. "Forumulate (docs) — receiving consent events". */
182
+ summary: string;
183
+ waitingOn?: string;
184
+ createdAt: number;
185
+ createdBy?: string;
186
+ revokedAt?: number;
187
+ revokedBy?: string | null;
188
+ lastDeliveryAt: number | null;
189
+ lastError: string | null;
190
+ }
191
+ interface PartnerCatalogEntry {
192
+ id: PartnerId;
193
+ label: string;
194
+ externalIdLabel: string;
195
+ events: string[];
196
+ available: boolean;
197
+ waitingOn?: string;
60
198
  }
61
199
  interface SiteCreate {
62
200
  domain: string;
@@ -110,7 +248,10 @@ interface DsarRequest {
110
248
  dueAt: number;
111
249
  /** Where the subject said they are, when the intake captured it. */
112
250
  jurisdiction?: string;
251
+ /** INTERNAL: intake note plus the audit lines `/erase` and `/export` append. Never shown to the subject. */
113
252
  note?: string;
253
+ /** The line the subject reads in the response notice. */
254
+ messageToSubject?: string;
114
255
  /** A test request: off the SLA board, labelled, and deletable with `dsar.delete`. A closed request can be marked one with `dsar.markTest`. */
115
256
  test?: boolean;
116
257
  }
@@ -158,7 +299,10 @@ interface DsarCreate {
158
299
  * shares one `regulation` for the deadline.
159
300
  */
160
301
  jurisdiction?: string;
302
+ /** INTERNAL: kept on the request, never shown to the subject. */
161
303
  note?: string;
304
+ /** The one free-text line the subject reads in the notice (≤2000 chars; an API key or key prefix is refused). */
305
+ messageToSubject?: string;
162
306
  /** The property this request belongs to; decides which connected systems answer it. */
163
307
  cbid?: string;
164
308
  /** The subject's consent-receipt id. */
@@ -256,12 +400,24 @@ declare function verifyWebhookSignature(input: VerifyWebhookInput): boolean;
256
400
  * const sites = await fc.sites.list();
257
401
  */
258
402
 
403
+ /**
404
+ * This package's version, sent in the default User-Agent. Cloudflare answers a request with
405
+ * no recognisable User-Agent with `403 error code: 1010`; a test pins this to package.json.
406
+ */
407
+ declare const SDK_VERSION = "0.4.1";
259
408
  interface CookieMunchOptions {
260
409
  apiKey: string;
261
410
  /** "https://api.cookiemunch.net" — the /v1 prefix is appended automatically. */
262
411
  baseUrl: string;
263
412
  /** Injectable for tests / custom runtimes. Defaults to the global fetch. */
264
413
  fetch?: typeof fetch;
414
+ /**
415
+ * Send `Prefer: strict-unknown-fields` on every write: a body field the operation does not
416
+ * declare is refused (`400 unknown_field`, with `field`) instead of ignored. Catches typos.
417
+ */
418
+ strictUnknownFields?: boolean;
419
+ /** The `User-Agent` sent on every request. Default `cookiemunch-js/<version>`. */
420
+ userAgent?: string;
265
421
  }
266
422
  /**
267
423
  * Thrown for any non-2xx response. `message` is the server's `error` field when present;
@@ -299,9 +455,12 @@ interface CategorizedCookie {
299
455
  /**
300
456
  * Why a person should look at it. Visitors see unclassified and category ones under
301
457
  * "Unclassified"; `retired_but_seen` = retired, but a crawl or a visit saw it since, so the
302
- * site still sets it and it is listed again.
458
+ * site still sets it and it is listed again. `awaiting_corroboration` / `suspicious_report` =
459
+ * only visitors reported it (not enough of them yet, or in one injection-shaped report), owner
460
+ * views only; `foreign_cmp` = another consent platform's cookie, filed unclassified;
461
+ * `not_seen_recently` = unseen for the site's `staleAfterDays`, owner views only.
303
462
  */
304
- review?: 'unclassified' | 'category_disabled' | 'category_unknown' | 'retired_but_seen';
463
+ review?: 'unclassified' | 'category_disabled' | 'category_unknown' | 'retired_but_seen' | 'awaiting_corroboration' | 'suspicious_report' | 'foreign_cmp' | 'not_seen_recently';
305
464
  /** Epoch-ms a crawl or a real visit last saw it. Absent on older rows. */
306
465
  lastSeenAt?: number;
307
466
  /** Owner views only: the site owner retired this cookie (see `sites.retireCookie`). */
@@ -312,7 +471,21 @@ interface CategorizedCookie {
312
471
  by?: string;
313
472
  pattern?: string;
314
473
  };
315
- }
474
+ /** A cookie (default, also when absent) or a key in browser storage. */
475
+ type?: StorageType;
476
+ /** Where the row came from: a real visit, a crawl, the owner (`api`) or a vendor preset (`import`). */
477
+ source?: 'embed' | 'scan' | 'api' | 'import';
478
+ /** Epoch-ms it was first stored. Absent on rows from before provenance was recorded. */
479
+ firstSeen?: number;
480
+ /** Distinct visits that reported it. */
481
+ visits?: number;
482
+ /** Owner views only: reported by a real visit, but not yet by enough distinct visits to be listed publicly. */
483
+ quarantined?: boolean;
484
+ /** "Declared by <vendor>": the vendor preset that declared it. */
485
+ vendor?: string;
486
+ }
487
+ /** What a declaration row describes. */
488
+ type StorageType = 'cookie' | 'localStorage' | 'sessionStorage' | 'indexedDB';
316
489
  /** A cookie the site owner retired: the site renamed or stopped setting it. */
317
490
  interface RetiredCookie {
318
491
  /** Exact name, or a `prefix*` wildcard. */
@@ -353,11 +526,72 @@ interface DeclaredCookieInput {
353
526
  domain?: string;
354
527
  /** Treat the name as a prefix wildcard (a trailing `*` does the same). */
355
528
  pattern?: boolean;
529
+ /** A cookie (default) or a key in localStorage, sessionStorage or IndexedDB. */
530
+ type?: StorageType;
356
531
  }
357
532
  /** A stored declaration. */
358
533
  interface DeclaredCookie extends DeclaredCookieInput {
359
534
  name: string;
360
535
  updatedAt: number;
536
+ /** `import` when a vendor preset wrote it. */
537
+ source?: 'import';
538
+ /** The vendor whose preset declared it. */
539
+ vendor?: string;
540
+ }
541
+ /** A platform whose cookies and storage a preset declares. */
542
+ type CookiePresetVendor = 'atlas' | 'forumulate' | 'chatly' | 'cookiemunch' | 'referally';
543
+ /** Where a vendor's live manifest will come from, and whether it exists yet. */
544
+ interface CookiePresetManifest {
545
+ status: 'builtin' | 'waiting_on_vendor';
546
+ waitingOn?: string;
547
+ item?: string;
548
+ contract?: string;
549
+ }
550
+ /** Preset parameters: Atlas `frontendApiHost`/`crossSubdomainCookies`; Chatly `publicId`/`dragging`/`category`; Referally `cookieDomain`/`cookieDays`/`category`. */
551
+ interface CookiePresetParams {
552
+ frontendApiHost?: string;
553
+ crossSubdomainCookies?: boolean;
554
+ publicId?: string;
555
+ dragging?: boolean;
556
+ category?: string;
557
+ cookieDomain?: string;
558
+ cookieDays?: number;
559
+ }
560
+ /** One preset in GET /v1/sites/:cbid/cookies/presets. */
561
+ interface CookiePreset {
562
+ vendor: CookiePresetVendor;
563
+ params: Array<{
564
+ name: string;
565
+ type: string;
566
+ required: boolean;
567
+ description?: string;
568
+ }>;
569
+ applied: boolean;
570
+ declared: string[];
571
+ manifest: CookiePresetManifest;
572
+ }
573
+ /** What applying a preset declared. */
574
+ interface CookiePresetResult {
575
+ vendor: CookiePresetVendor;
576
+ cookies: DeclaredCookie[];
577
+ removed: string[];
578
+ skipped?: Array<{
579
+ name: string;
580
+ reason: string;
581
+ }>;
582
+ note?: string;
583
+ manifest: CookiePresetManifest;
584
+ dryRun?: true;
585
+ declared?: DeclaredCookie[];
586
+ diff?: DeclarationDiff;
587
+ }
588
+ /** What removing observed rows removed (or, with `dryRun`, would). */
589
+ interface ObservedPurgeResult {
590
+ removed: string[];
591
+ count: number;
592
+ since?: number;
593
+ until?: number;
594
+ dryRun?: true;
361
595
  }
362
596
  /** What a declaration write would change (`dryRun`). */
363
597
  interface DeclarationDiff {
@@ -418,6 +652,8 @@ interface ScanStatus {
418
652
  cookieCount?: number;
419
653
  keptFromEarlier?: number;
420
654
  pagesVisited?: number;
655
+ /** Where the site's address redirected to (its canonical host), when it did. */
656
+ finalUrl?: string;
421
657
  /** Why it failed. */
422
658
  error?: string;
423
659
  }
@@ -740,9 +976,12 @@ interface RightsLinkInput {
740
976
  }
741
977
  /** A signed, single-use link to the hosted rights page for one signed-in person. */
742
978
  interface RightsLink {
979
+ /** `https://<customDomain>/?t=…`, or `https://cookiemunch.net/r/<cbid>?t=…` when `customDomain` is null. */
743
980
  url: string;
744
981
  /** Epoch milliseconds. */
745
982
  expiresAt: number;
983
+ /** The site's active custom rights-page host the link opens on, or null. */
984
+ customDomain: string | null;
746
985
  }
747
986
  /** One DNS record to create, exactly as written. */
748
987
  interface DnsRecordInstruction {
@@ -885,6 +1124,31 @@ interface Member {
885
1124
  interface ApiKeyPrefix {
886
1125
  prefix: string;
887
1126
  createdAt?: number;
1127
+ /** Epoch ms the key stops working; null = never. */
1128
+ expiresAt?: number | null;
1129
+ name?: string | null;
1130
+ /** null = full access. */
1131
+ scopes?: string[] | null;
1132
+ cbids?: string[] | null;
1133
+ /** Epoch ms it last authenticated a request (recorded at most hourly); null = not since recording began. */
1134
+ lastUsedAt?: number | null;
1135
+ }
1136
+ /** GET /v1/keys/report — key hygiene. */
1137
+ interface ApiKeyReport {
1138
+ generatedAt: number;
1139
+ unusedDays: number;
1140
+ expiringDays: number;
1141
+ unused: Array<ApiKeyPrefix & {
1142
+ reason: string;
1143
+ }>;
1144
+ broad: Array<ApiKeyPrefix & {
1145
+ reason: string;
1146
+ }>;
1147
+ expiringSoon: Array<ApiKeyPrefix & {
1148
+ reason: string;
1149
+ }>;
1150
+ noExpiry: number;
1151
+ total: number;
888
1152
  }
889
1153
  /** A newly issued key. `key` is returned ONCE and never again. Returned by keys.issue(). */
890
1154
  interface ApiKeyIssued {
@@ -920,6 +1184,8 @@ interface ApiKeyIssueInput {
920
1184
  cbids?: string[];
921
1185
  /** Expire the key after this many days (1–3650). */
922
1186
  expiresInDays?: number;
1187
+ /** Or when it expires: epoch ms or an ISO date-time (not with expiresInDays). Omit both: never. */
1188
+ expiresAt?: number | string;
923
1189
  }
924
1190
  /** Org usage/quota summary. Matches the server's Usage schema. */
925
1191
  interface Usage {
@@ -1168,6 +1434,8 @@ interface ApiKeyUpdate {
1168
1434
  name?: string;
1169
1435
  scopes?: string[];
1170
1436
  cbids?: string[];
1437
+ /** A new expiry (epoch ms or ISO date-time), or null to remove it. */
1438
+ expiresAt?: number | string | null;
1171
1439
  }
1172
1440
  /** An image to upload: base64 (or a `data:` URL) plus its type. */
1173
1441
  interface AssetUpload {
@@ -1467,6 +1735,11 @@ interface ExecutorProfile {
1467
1735
  statusPath: string;
1468
1736
  values: string[];
1469
1737
  };
1738
+ /** How this system says the person was already removed; closes the task as `already_erased`. Checked before `noMatch`. */
1739
+ alreadyErased?: {
1740
+ statusPath: string;
1741
+ values: string[];
1742
+ };
1470
1743
  };
1471
1744
  /** Response header carrying the system's version, recorded in the task log. Default `X-Version`. */
1472
1745
  versionHeader?: string;
@@ -1500,6 +1773,23 @@ interface ExecutorProfile {
1500
1773
  failed: string[];
1501
1774
  };
1502
1775
  idempotencyHeader?: string;
1776
+ /**
1777
+ * An identity platform's app grant, revoked on erasure before anything else: look it up by
1778
+ * `{email}`, then end it with `{grant}`. A test looks it up but never revokes it.
1779
+ */
1780
+ grantRevoke?: {
1781
+ lookup: {
1782
+ method: 'GET' | 'POST';
1783
+ path: string;
1784
+ body?: unknown;
1785
+ grantIdPath: string;
1786
+ };
1787
+ revoke: {
1788
+ method: 'POST' | 'DELETE';
1789
+ path: string;
1790
+ body?: unknown;
1791
+ };
1792
+ };
1503
1793
  /** How that system signs its webhooks, if it sends any. */
1504
1794
  webhook?: {
1505
1795
  algorithm: 'hmac-sha256';
@@ -1527,9 +1817,80 @@ interface DsarExecutor {
1527
1817
  hasWebhookSecret: boolean;
1528
1818
  /** Open a sub-task automatically when a request reaches fulfilment. */
1529
1819
  auto: boolean;
1820
+ /** What the subject reads on this system's notice line when it holds nothing about them. */
1821
+ subjectNote?: string;
1530
1822
  createdAt: number;
1531
1823
  /** Where that system should send its completion webhooks. On every connection, secret or not. */
1532
1824
  webhookUrl: string;
1825
+ /**
1826
+ * The last canary health check (hourly, and on `testExecutor(id, { canary: true })`). null
1827
+ * until the first; cleared when the address, profile or key changes.
1828
+ */
1829
+ health: ExecutorHealth | null;
1830
+ /** The preset it was built from; absent when hand-written. */
1831
+ preset?: ExecutorPresetName;
1832
+ presetVersion?: number;
1833
+ /** Newer than `presetVersion`: `upgradeExecutorPreset` applies it. */
1834
+ presetLatestVersion?: number;
1835
+ /** The non-secret params it was built with, e.g. `{ orgId }`. */
1836
+ presetParams?: Record<string, string>;
1837
+ /** How the stored address and profile differ from what its preset version builds. Empty: unmodified. */
1838
+ presetDiff?: ConfigChange[];
1839
+ }
1840
+ /** A connection's last canary health check. */
1841
+ interface ExecutorHealth {
1842
+ lastCheckedAt: number;
1843
+ ok: boolean;
1844
+ verdict: string;
1845
+ /** e.g. `base_url_redirects`, `credential_unavailable`. */
1846
+ code?: string;
1847
+ }
1848
+ /** A preset's name, as `executorPresets()` lists them. Not enumerated here: presets are data. */
1849
+ type ExecutorPresetName = string;
1850
+ /**
1851
+ * Connect a system from a versioned preset instead of a hand-written profile. Each preset
1852
+ * lists the params it takes (`executorPresets()`); a preset waiting on another platform is
1853
+ * refused with `preset_waiting_on_platform`.
1854
+ */
1855
+ interface DsarExecutorPresetInput {
1856
+ preset: ExecutorPresetName;
1857
+ presetVersion?: number;
1858
+ secretKey: string;
1859
+ system?: string;
1860
+ baseUrl?: string;
1861
+ orgId?: string;
1862
+ atlasIdAppId?: string;
1863
+ webhookSecret?: string;
1864
+ auto?: boolean;
1865
+ cbid?: string;
1866
+ }
1867
+ /** What `upgradeExecutorPreset` takes: a version, a preset to adopt, or params to add. */
1868
+ interface ExecutorPresetUpgrade {
1869
+ preset?: ExecutorPresetName;
1870
+ presetVersion?: number;
1871
+ orgId?: string;
1872
+ atlasIdAppId?: string;
1873
+ }
1874
+ /** The presets, which are usable now, and this org's canary address. */
1875
+ interface ExecutorPresets {
1876
+ canaryEmail: string;
1877
+ presets: Array<{
1878
+ name: ExecutorPresetName;
1879
+ title: string;
1880
+ latestVersion: number;
1881
+ defaultSystem?: string;
1882
+ params: Array<{
1883
+ name: string;
1884
+ required: boolean;
1885
+ description: string;
1886
+ }>;
1887
+ available: boolean;
1888
+ waitingOn?: {
1889
+ platform: string;
1890
+ items: string[];
1891
+ operations: string[];
1892
+ };
1893
+ }>;
1533
1894
  }
1534
1895
  /** What a connection write would do (`?dryRun=1`). Nothing was stored. */
1535
1896
  interface DsarExecutorDryRun {
@@ -1586,6 +1947,8 @@ interface DsarExecutorInput {
1586
1947
  */
1587
1948
  webhookSecret?: string;
1588
1949
  auto?: boolean;
1950
+ /** What the subject reads when this system holds nothing about them (≤500 chars, never a key). */
1951
+ subjectNote?: string;
1589
1952
  /** How to drive it. */
1590
1953
  profile: ExecutorProfile;
1591
1954
  }
@@ -1597,6 +1960,8 @@ interface DsarExecutorPatch {
1597
1960
  secretKey?: string;
1598
1961
  webhookSecret?: string | null;
1599
1962
  auto?: boolean;
1963
+ /** null removes it. */
1964
+ subjectNote?: string | null;
1600
1965
  }
1601
1966
  /** One entry in a fulfilment task's status history. */
1602
1967
  interface DsarTaskEvent {
@@ -1609,12 +1974,12 @@ interface DsarTaskEvent {
1609
1974
  externalRef?: string;
1610
1975
  }
1611
1976
  /** What a task's answer means for the person. `exported` only once the export was fetched. */
1612
- type DsarTaskOutcome = 'located' | 'exported' | 'erased' | 'no_record' | 'done_without_artifact' | 'not_applicable';
1977
+ type DsarTaskOutcome = 'located' | 'exported' | 'erased' | 'no_record' | 'done_without_artifact' | 'not_applicable' | 'already_erased' | 'external_identity';
1613
1978
  /** One request made to a connected system on a task's behalf, credentials removed. Kept 30 days. */
1614
1979
  interface DsarTaskLogEntry {
1615
1980
  id?: string;
1616
1981
  system?: string;
1617
- step: 'lookup' | 'open' | 'poll' | 'export';
1982
+ step: 'lookup' | 'open' | 'poll' | 'export' | 'grant';
1618
1983
  method: string;
1619
1984
  path: string;
1620
1985
  /** Absent when the system never answered. */
@@ -1628,6 +1993,11 @@ interface DsarTaskLogEntry {
1628
1993
  error?: string;
1629
1994
  /** The system's version header on this answer. */
1630
1995
  version?: string;
1996
+ /** This answer was a redirect (origin and path; never the query). Only same-origin, method-keeping ones are followed. */
1997
+ redirect?: {
1998
+ status: number;
1999
+ location: string;
2000
+ };
1631
2001
  at: number;
1632
2002
  }
1633
2003
  /** One fulfilment task with its history and its upstream request log. */
@@ -1673,11 +2043,21 @@ interface ExecutorTestResult {
1673
2043
  /** One sentence: what a real request would have done. */
1674
2044
  verdict: string;
1675
2045
  ok: boolean;
2046
+ /** Why not, when there is a code: `base_url_redirects` — the baseUrl redirected; the verdict names the status and target. */
2047
+ code?: string;
2048
+ /** The subject's app grant at an identity platform, when the profile has a grant step. Never revoked by a test. */
2049
+ grant?: string;
2050
+ /** Present when the test used the org canary address, with the address in `email`. */
2051
+ canary?: boolean;
2052
+ email?: string;
1676
2053
  /** Every upstream answer, as the system gave it (credentials removed). */
1677
2054
  exchanges: DsarTaskLogEntry[];
1678
2055
  }
1679
2056
  interface ExecutorTestInput {
1680
- email: string;
2057
+ /** The address to look up. Required unless `canary` is true. */
2058
+ email?: string;
2059
+ /** Use this org's canary address — no real person. A canary `locate` also updates `health`. */
2060
+ canary?: boolean;
1681
2061
  /** Default `locate`. */
1682
2062
  operation?: 'locate' | 'export' | 'erase';
1683
2063
  /** For `export` only: open a real export and poll it once. An erasure is never sent. */
@@ -1737,7 +2117,31 @@ interface CookieMunchClient {
1737
2117
  list(): Promise<Site[]>;
1738
2118
  create(input: SiteCreate): Promise<Site>;
1739
2119
  get(cbid: string): Promise<Site>;
2120
+ /**
2121
+ * Rename or move a site: domain, display name, aliases. The cbid and the consent ledger stay; a domain
2122
+ * move clears verification. `{ dryRun: true }` answers with the diff and stores nothing.
2123
+ */
2124
+ update(cbid: string, patch: SiteUpdate, opts?: {
2125
+ dryRun?: boolean;
2126
+ }): Promise<SiteUpdateResult>;
1740
2127
  delete(cbid: string): Promise<void>;
2128
+ /** Partner platforms granted this site's consent events, and the partners on offer. */
2129
+ listPartners(cbid: string): Promise<{
2130
+ links: PartnerLink[];
2131
+ partners: PartnerCatalogEntry[];
2132
+ }>;
2133
+ /** Grant a partner (Forumulate, Atlas) the site's consent events — no secret is created. Idempotent. */
2134
+ linkPartner(cbid: string, input: PartnerLinkCreate, opts?: {
2135
+ dryRun?: boolean;
2136
+ }): Promise<{
2137
+ change: 'created' | 'updated' | 'unchanged';
2138
+ link: PartnerLink;
2139
+ dryRun?: true;
2140
+ }>;
2141
+ /** Revoke a partner link: deliveries stop at once. */
2142
+ unlinkPartner(cbid: string, linkId: string): Promise<{
2143
+ link: PartnerLink;
2144
+ }>;
1741
2145
  getConfig(cbid: string): Promise<SiteConfig>;
1742
2146
  /**
1743
2147
  * Replaces the whole config — a top-level field you omit reverts to its default. With
@@ -1858,6 +2262,43 @@ interface CookieMunchClient {
1858
2262
  dryRun: true;
1859
2263
  retired: RetiredCookie[];
1860
2264
  }>;
2265
+ /** Every declaration preset (atlas, forumulate, chatly, cookiemunch, referally): params, what it declared here, manifest status. */
2266
+ cookiePresets(cbid: string): Promise<{
2267
+ presets: CookiePreset[];
2268
+ }>;
2269
+ /**
2270
+ * Apply (or re-sync) a vendor preset: declares what that platform writes, marked
2271
+ * `vendor`. Names you declared yourself are kept (`skipped`). `dryRun` stores nothing.
2272
+ */
2273
+ applyCookiePreset(cbid: string, vendor: CookiePresetVendor, params?: CookiePresetParams, opts?: {
2274
+ dryRun?: boolean;
2275
+ }): Promise<CookiePresetResult>;
2276
+ /** Remove every declaration a vendor preset made. */
2277
+ removeCookiePreset(cbid: string, vendor: CookiePresetVendor, opts?: {
2278
+ dryRun?: boolean;
2279
+ }): Promise<{
2280
+ vendor: CookiePresetVendor;
2281
+ removed: string[];
2282
+ dryRun?: true;
2283
+ declared?: DeclaredCookie[];
2284
+ diff?: DeclarationDiff;
2285
+ }>;
2286
+ /** Remove every stored (scanned or observed) row of this name. A declaration of it stays. */
2287
+ deleteObservedCookie(cbid: string, name: string): Promise<void>;
2288
+ /** What deleting it would remove; nothing is removed. */
2289
+ deleteObservedCookie(cbid: string, name: string, opts: {
2290
+ dryRun: true;
2291
+ }): Promise<ObservedPurgeResult>;
2292
+ /**
2293
+ * Purge observed since T: remove every row a real visit first reported at or after
2294
+ * `since` (and before `until`). Crawled rows and declarations stay. ISO-8601 or epoch ms.
2295
+ */
2296
+ purgeObservedCookies(cbid: string, input: {
2297
+ since: string | number;
2298
+ until?: string | number;
2299
+ }, opts?: {
2300
+ dryRun?: boolean;
2301
+ }): Promise<ObservedPurgeResult>;
1861
2302
  /** Remove a declaration; the scanned classification applies again. */
1862
2303
  undeclareCookie(cbid: string, name: string): Promise<void>;
1863
2304
  /** What removing a declaration would leave; nothing is removed. */
@@ -1941,7 +2382,10 @@ interface CookieMunchClient {
1941
2382
  create(input: DsarCreate): Promise<{
1942
2383
  request: DsarRequest;
1943
2384
  }>;
1944
- advance(id: string, toStatus: DsarStatus): Promise<{
2385
+ /** `opts.messageToSubject` replaces the line the subject reads in the notice — for a rejection, why. */
2386
+ advance(id: string, toStatus: DsarStatus, opts?: {
2387
+ messageToSubject?: string;
2388
+ }): Promise<{
1945
2389
  request: DsarRequest;
1946
2390
  }>;
1947
2391
  /** The subject-facing response notice for a request, as plain text. */
@@ -2213,7 +2657,7 @@ interface CookieMunchClient {
2213
2657
  * Connect one. The secret is stored encrypted and never returned; the response carries
2214
2658
  * the URL to point that system's webhook at.
2215
2659
  */
2216
- connectExecutor(input: DsarExecutorInput): Promise<DsarExecutorCreated>;
2660
+ connectExecutor(input: DsarExecutorInput | DsarExecutorPresetInput): Promise<DsarExecutorCreated>;
2217
2661
  /**
2218
2662
  * Change a connection in place. Only what you send changes, and the stored credential
2219
2663
  * is kept unless you pass a new `secretKey` — so adding a field to a profile does not
@@ -2221,7 +2665,22 @@ interface CookieMunchClient {
2221
2665
  */
2222
2666
  updateExecutor(id: string, patch: DsarExecutorPatch): Promise<DsarExecutor>;
2223
2667
  /** What `connectExecutor` would create, validated in full; nothing is stored (`?dryRun=1`). */
2224
- dryRunConnectExecutor(input: DsarExecutorInput): Promise<DsarExecutorDryRun>;
2668
+ dryRunConnectExecutor(input: DsarExecutorInput | DsarExecutorPresetInput): Promise<DsarExecutorDryRun>;
2669
+ /** The versioned presets, whether each is usable now (or waits on another platform), and the org canary address. */
2670
+ executorPresets(): Promise<ExecutorPresets>;
2671
+ /**
2672
+ * Rebuild a connection from its preset's latest version (or `presetVersion`), keeping its id
2673
+ * and credentials; or adopt a preset on a hand-written one by naming it. Answers with `diff`.
2674
+ */
2675
+ upgradeExecutorPreset(id: string, input?: ExecutorPresetUpgrade): Promise<DsarExecutor & {
2676
+ diff: ConfigChange[];
2677
+ warnings?: Array<{
2678
+ field: string;
2679
+ reason: string;
2680
+ }>;
2681
+ }>;
2682
+ /** What `upgradeExecutorPreset` would change; nothing is stored (`?dryRun=1`). */
2683
+ dryRunUpgradeExecutorPreset(id: string, input?: ExecutorPresetUpgrade): Promise<DsarExecutorDryRun>;
2225
2684
  /** What `updateExecutor` would change, with a diff; the stored connection is untouched (`?dryRun=1`). */
2226
2685
  dryRunUpdateExecutor(id: string, patch: DsarExecutorPatch): Promise<DsarExecutorDryRun>;
2227
2686
  /**
@@ -2293,8 +2752,22 @@ interface CookieMunchClient {
2293
2752
  update(prefix: string, patch: ApiKeyUpdate): Promise<{
2294
2753
  ok: true;
2295
2754
  }>;
2755
+ /** Key hygiene: keys unused for `unusedDays` (default 90), broad keys, keys expiring within `expiringDays` (default 14). */
2756
+ report(opts?: {
2757
+ unusedDays?: number;
2758
+ expiringDays?: number;
2759
+ }): Promise<ApiKeyReport>;
2296
2760
  };
2297
2761
  usage(): Promise<Usage>;
2762
+ /** Every link a site's privacy wiring depends on, one row each with `ok` and a fix hint. `cbid` may be omitted with one site. */
2763
+ integrationHealth(cbid?: string): Promise<IntegrationHealthReport>;
2764
+ /**
2765
+ * Wire a product's privacy in one call: the site, connected systems, Atlas and Forumulate. Idempotent;
2766
+ * `{ dryRun: true }` writes nothing anywhere. No secret appears in the answer.
2767
+ */
2768
+ provision(input: ProvisionRequest, opts?: {
2769
+ dryRun?: boolean;
2770
+ }): Promise<ProvisionResult>;
2298
2771
  /** The key's organisation. Requires an unscoped key that is not property-locked. */
2299
2772
  org: {
2300
2773
  get(): Promise<Org>;
@@ -2449,4 +2922,4 @@ interface CookieMunchClient {
2449
2922
  }
2450
2923
  declare function createCookieMunch(opts: CookieMunchOptions): CookieMunchClient;
2451
2924
 
2452
- export { type AbResult, type AccountOrg, type AccountOrgs, type AdPersonalizationInput, type AiInspectInput, type AiInspectResult, type ApiKey, type ApiKeyIssueInput, type ApiKeyIssued, type ApiKeyPrefix, type ApiKeyUpdate, type AppliedImport, type AssetUpload, type AuditEntry, type BannerRecord, type BannerSummary, type BlockedReport, type BrandExtractionResult, type BrandKit, type BrandKitCreate, type BrandSuggestion, type BulkSiteInput, type BulkSiteResult, type ButtonParityFinding, type ButtonParityLint, type ButtonParityScan, type CategorizedCookie, type ChildKeyInput, type ConfigChange, type ConfigDryRun, type ConfigWarning, type ConsentDay, type ConsentDecisionInput, type ConsentIngestInput, type ConsentLogRow, type CookieDeclaration, CookieMunchApiError, type CookieMunchClient, type CookieMunchOptions, type CspSources, type DeclarationDiff, type DeclarationDryRun, type DeclarationWarning, type DeclaredCookie, type DeclaredCookieInput, type DnsRecordInstruction, type DsarCreate, type DsarEraseResult, type DsarExecutor, type DsarExecutorCreated, type DsarExecutorDryRun, type DsarExecutorInput, type DsarExecutorPatch, type DsarExportResult, type DsarRequest, type DsarStatus, type DsarTask, type DsarTaskEvent, type DsarTaskExport, type DsarTaskLogEntry, type DsarTaskOutcome, type DsarType, type EnforcementRuleInput, type ExecutorProfile, type ExecutorTestInput, type ExecutorTestResult, type ExecutorWebhookDelivery, type ExecutorWebhookTestResult, type FlowIssue, type FlowOp, type FlowOpResponse, type FulfillmentOp, type Identifier, type Identity, type ImportedCookie, type ImportedDeclaration, type InstallSnippet, type LegalBasis, type LogQuery, type MailProvider, type MailProviderInput, type MailProviderKind, type MailProviderTestResult, type Member, type OptInMethod, type Org, type OrgUpdate, type ParityControlSummary, type PlanSource, type PolicyOptions, type PreferenceItem, type PreferenceRecord, type PreviewToken, type PreviewTokenOptions, type ProfileAttributeInput, type PublicDsarFiled, type PublicDsarPending, type PublicVerification, type PutConfigOptions, type RangeQuery, type Regulation, type RegulationSummary, type RegulatoryFeedResult, type ResellerChild, type ResellerChildCreate, type ResellerChildList, type ResellerChildPatch, type RetiredCookie, type RightKind, type RightsCaptcha, type RightsCaptchaInput, type RightsCaptchaProvider, type RightsIdentity, type RightsIdentityInput, type RightsIdentityType, type RightsLink, type RightsLinkInput, type RightsPageDocument, type RightsPageDomain, type RightsPageDomainList, type RightsPageDraft, type RightsPageDraftConflict, type RightsPageDryRun, type RightsPageIssue, type RightsPagePublishResult, type RightsPagePublished, type RightsPagePublisher, type RightsPageVersions, type RightsPageWriteOptions, type RiskScore, type RopaEntry, type RopaInput, type ScanResult, type ScanStatus, type ScoredVendor, type ScrollbarTheme, type SessionAnalysisInput, type SignedReceipt, type Site, type SiteConfig, type SiteCookie, type SiteCreate, type SiteFlow, type SnippetOptions, type SubscriptionTopicInput, type SuggestedRejectStyle, type SupportedLanguage, type Usage, type VendorInput, type VendorRecord, type VerifyResult, type VerifyWebhookInput, type WebhookCreate, type WebhookDeadLetter, type WebhookKeyForm, type WebhookStage, type WebhookSubscription, type WebhookTestResult, type WebhookUpdate, createCookieMunch, verifyWebhookSignature };
2925
+ export { type AbResult, type AccountOrg, type AccountOrgs, type AdPersonalizationInput, type AiInspectInput, type AiInspectResult, type ApiKey, type ApiKeyIssueInput, type ApiKeyIssued, type ApiKeyPrefix, type ApiKeyReport, type ApiKeyUpdate, type AppliedImport, type AssetUpload, type AuditEntry, type BannerRecord, type BannerSummary, type BlockedReport, type BrandExtractionResult, type BrandKit, type BrandKitCreate, type BrandSuggestion, type BulkSiteInput, type BulkSiteResult, type ButtonParityFinding, type ButtonParityLint, type ButtonParityScan, type CategorizedCookie, type ChildKeyInput, type ConfigChange, type ConfigDryRun, type ConfigWarning, type ConsentDay, type ConsentDecisionInput, type ConsentIngestInput, type ConsentLogRow, type CookieDeclaration, CookieMunchApiError, type CookieMunchClient, type CookieMunchOptions, type CookiePreset, type CookiePresetManifest, type CookiePresetParams, type CookiePresetResult, type CookiePresetVendor, type CspSources, type DeclarationDiff, type DeclarationDryRun, type DeclarationWarning, type DeclaredCookie, type DeclaredCookieInput, type DnsRecordInstruction, type DsarCreate, type DsarEraseResult, type DsarExecutor, type DsarExecutorCreated, type DsarExecutorDryRun, type DsarExecutorInput, type DsarExecutorPatch, type DsarExecutorPresetInput, type DsarExportResult, type DsarRequest, type DsarStatus, type DsarTask, type DsarTaskEvent, type DsarTaskExport, type DsarTaskLogEntry, type DsarTaskOutcome, type DsarType, type EnforcementRuleInput, type ExecutorHealth, type ExecutorPresetName, type ExecutorPresetUpgrade, type ExecutorPresets, type ExecutorProfile, type ExecutorTestInput, type ExecutorTestResult, type ExecutorWebhookDelivery, type ExecutorWebhookTestResult, type FlowIssue, type FlowOp, type FlowOpResponse, type FulfillmentOp, type HealthRow, type Identifier, type Identity, type ImportedCookie, type ImportedDeclaration, type InstallSnippet, type IntegrationHealthReport, type LegalBasis, type LogQuery, type MailProvider, type MailProviderInput, type MailProviderKind, type MailProviderTestResult, type Member, type ObservedPurgeResult, type OptInMethod, type Org, type OrgUpdate, type ParityControlSummary, type PartnerCatalogEntry, type PartnerId, type PartnerLink, type PartnerLinkCreate, type PlanSource, type PolicyOptions, type PreferenceItem, type PreferenceRecord, type PreviewToken, type PreviewTokenOptions, type ProfileAttributeInput, type ProvisionRequest, type ProvisionResult, type ProvisionStep, type PublicDsarFiled, type PublicDsarPending, type PublicVerification, type PutConfigOptions, type RangeQuery, type Regulation, type RegulationSummary, type RegulatoryFeedResult, type ResellerChild, type ResellerChildCreate, type ResellerChildList, type ResellerChildPatch, type RetiredCookie, type RightKind, type RightsCaptcha, type RightsCaptchaInput, type RightsCaptchaProvider, type RightsIdentity, type RightsIdentityInput, type RightsIdentityType, type RightsLink, type RightsLinkInput, type RightsPageDocument, type RightsPageDomain, type RightsPageDomainList, type RightsPageDraft, type RightsPageDraftConflict, type RightsPageDryRun, type RightsPageIssue, type RightsPagePublishResult, type RightsPagePublished, type RightsPagePublisher, type RightsPageVersions, type RightsPageWriteOptions, type RiskScore, type RopaEntry, type RopaInput, SDK_VERSION, type ScanResult, type ScanStatus, type ScoredVendor, type ScrollbarTheme, type SessionAnalysisInput, type SignedReceipt, type Site, type SiteConfig, type SiteCookie, type SiteCreate, type SiteFlow, type SiteUpdate, type SiteUpdateResult, type SnippetOptions, type StorageType, type SubscriptionTopicInput, type SuggestedRejectStyle, type SupportedLanguage, type Usage, type VendorInput, type VendorRecord, type VerifyResult, type VerifyWebhookInput, type WebhookCreate, type WebhookDeadLetter, type WebhookKeyForm, type WebhookStage, type WebhookSubscription, type WebhookTestResult, type WebhookUpdate, createCookieMunch, verifyWebhookSignature };