@cookiemunch/sdk 0.3.0 → 0.4.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.cjs +21 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +469 -8
- package/dist/index.d.ts +469 -8
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
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. */
|
|
@@ -262,6 +406,11 @@ interface CookieMunchOptions {
|
|
|
262
406
|
baseUrl: string;
|
|
263
407
|
/** Injectable for tests / custom runtimes. Defaults to the global fetch. */
|
|
264
408
|
fetch?: typeof fetch;
|
|
409
|
+
/**
|
|
410
|
+
* Send `Prefer: strict-unknown-fields` on every write: a body field the operation does not
|
|
411
|
+
* declare is refused (`400 unknown_field`, with `field`) instead of ignored. Catches typos.
|
|
412
|
+
*/
|
|
413
|
+
strictUnknownFields?: boolean;
|
|
265
414
|
}
|
|
266
415
|
/**
|
|
267
416
|
* Thrown for any non-2xx response. `message` is the server's `error` field when present;
|
|
@@ -312,7 +461,21 @@ interface CategorizedCookie {
|
|
|
312
461
|
by?: string;
|
|
313
462
|
pattern?: string;
|
|
314
463
|
};
|
|
315
|
-
|
|
464
|
+
/** A cookie (default, also when absent) or a key in browser storage. */
|
|
465
|
+
type?: StorageType;
|
|
466
|
+
/** Where the row came from: a real visit, a crawl, the owner (`api`) or a vendor preset (`import`). */
|
|
467
|
+
source?: 'embed' | 'scan' | 'api' | 'import';
|
|
468
|
+
/** Epoch-ms it was first stored. Absent on rows from before provenance was recorded. */
|
|
469
|
+
firstSeen?: number;
|
|
470
|
+
/** Distinct visits that reported it. */
|
|
471
|
+
visits?: number;
|
|
472
|
+
/** Owner views only: reported by a real visit, but not yet by enough distinct visits to be listed publicly. */
|
|
473
|
+
quarantined?: boolean;
|
|
474
|
+
/** "Declared by <vendor>": the vendor preset that declared it. */
|
|
475
|
+
vendor?: string;
|
|
476
|
+
}
|
|
477
|
+
/** What a declaration row describes. */
|
|
478
|
+
type StorageType = 'cookie' | 'localStorage' | 'sessionStorage' | 'indexedDB';
|
|
316
479
|
/** A cookie the site owner retired: the site renamed or stopped setting it. */
|
|
317
480
|
interface RetiredCookie {
|
|
318
481
|
/** Exact name, or a `prefix*` wildcard. */
|
|
@@ -353,11 +516,70 @@ interface DeclaredCookieInput {
|
|
|
353
516
|
domain?: string;
|
|
354
517
|
/** Treat the name as a prefix wildcard (a trailing `*` does the same). */
|
|
355
518
|
pattern?: boolean;
|
|
519
|
+
/** A cookie (default) or a key in localStorage, sessionStorage or IndexedDB. */
|
|
520
|
+
type?: StorageType;
|
|
356
521
|
}
|
|
357
522
|
/** A stored declaration. */
|
|
358
523
|
interface DeclaredCookie extends DeclaredCookieInput {
|
|
359
524
|
name: string;
|
|
360
525
|
updatedAt: number;
|
|
526
|
+
/** `import` when a vendor preset wrote it. */
|
|
527
|
+
source?: 'import';
|
|
528
|
+
/** The vendor whose preset declared it. */
|
|
529
|
+
vendor?: string;
|
|
530
|
+
}
|
|
531
|
+
/** A platform whose cookies and storage a preset declares. */
|
|
532
|
+
type CookiePresetVendor = 'atlas' | 'forumulate' | 'chatly' | 'cookiemunch';
|
|
533
|
+
/** Where a vendor's live manifest will come from, and whether it exists yet. */
|
|
534
|
+
interface CookiePresetManifest {
|
|
535
|
+
status: 'builtin' | 'waiting_on_vendor';
|
|
536
|
+
waitingOn?: string;
|
|
537
|
+
item?: string;
|
|
538
|
+
contract?: string;
|
|
539
|
+
}
|
|
540
|
+
/** Preset parameters: Atlas `frontendApiHost`/`crossSubdomainCookies`; Chatly `publicId`/`dragging`/`category`. */
|
|
541
|
+
interface CookiePresetParams {
|
|
542
|
+
frontendApiHost?: string;
|
|
543
|
+
crossSubdomainCookies?: boolean;
|
|
544
|
+
publicId?: string;
|
|
545
|
+
dragging?: boolean;
|
|
546
|
+
category?: string;
|
|
547
|
+
}
|
|
548
|
+
/** One preset in GET /v1/sites/:cbid/cookies/presets. */
|
|
549
|
+
interface CookiePreset {
|
|
550
|
+
vendor: CookiePresetVendor;
|
|
551
|
+
params: Array<{
|
|
552
|
+
name: string;
|
|
553
|
+
type: string;
|
|
554
|
+
required: boolean;
|
|
555
|
+
description?: string;
|
|
556
|
+
}>;
|
|
557
|
+
applied: boolean;
|
|
558
|
+
declared: string[];
|
|
559
|
+
manifest: CookiePresetManifest;
|
|
560
|
+
}
|
|
561
|
+
/** What applying a preset declared. */
|
|
562
|
+
interface CookiePresetResult {
|
|
563
|
+
vendor: CookiePresetVendor;
|
|
564
|
+
cookies: DeclaredCookie[];
|
|
565
|
+
removed: string[];
|
|
566
|
+
skipped?: Array<{
|
|
567
|
+
name: string;
|
|
568
|
+
reason: string;
|
|
569
|
+
}>;
|
|
570
|
+
note?: string;
|
|
571
|
+
manifest: CookiePresetManifest;
|
|
572
|
+
dryRun?: true;
|
|
573
|
+
declared?: DeclaredCookie[];
|
|
574
|
+
diff?: DeclarationDiff;
|
|
575
|
+
}
|
|
576
|
+
/** What removing observed rows removed (or, with `dryRun`, would). */
|
|
577
|
+
interface ObservedPurgeResult {
|
|
578
|
+
removed: string[];
|
|
579
|
+
count: number;
|
|
580
|
+
since?: number;
|
|
581
|
+
until?: number;
|
|
582
|
+
dryRun?: true;
|
|
361
583
|
}
|
|
362
584
|
/** What a declaration write would change (`dryRun`). */
|
|
363
585
|
interface DeclarationDiff {
|
|
@@ -418,6 +640,8 @@ interface ScanStatus {
|
|
|
418
640
|
cookieCount?: number;
|
|
419
641
|
keptFromEarlier?: number;
|
|
420
642
|
pagesVisited?: number;
|
|
643
|
+
/** Where the site's address redirected to (its canonical host), when it did. */
|
|
644
|
+
finalUrl?: string;
|
|
421
645
|
/** Why it failed. */
|
|
422
646
|
error?: string;
|
|
423
647
|
}
|
|
@@ -740,9 +964,12 @@ interface RightsLinkInput {
|
|
|
740
964
|
}
|
|
741
965
|
/** A signed, single-use link to the hosted rights page for one signed-in person. */
|
|
742
966
|
interface RightsLink {
|
|
967
|
+
/** `https://<customDomain>/?t=…`, or `https://cookiemunch.net/r/<cbid>?t=…` when `customDomain` is null. */
|
|
743
968
|
url: string;
|
|
744
969
|
/** Epoch milliseconds. */
|
|
745
970
|
expiresAt: number;
|
|
971
|
+
/** The site's active custom rights-page host the link opens on, or null. */
|
|
972
|
+
customDomain: string | null;
|
|
746
973
|
}
|
|
747
974
|
/** One DNS record to create, exactly as written. */
|
|
748
975
|
interface DnsRecordInstruction {
|
|
@@ -885,6 +1112,31 @@ interface Member {
|
|
|
885
1112
|
interface ApiKeyPrefix {
|
|
886
1113
|
prefix: string;
|
|
887
1114
|
createdAt?: number;
|
|
1115
|
+
/** Epoch ms the key stops working; null = never. */
|
|
1116
|
+
expiresAt?: number | null;
|
|
1117
|
+
name?: string | null;
|
|
1118
|
+
/** null = full access. */
|
|
1119
|
+
scopes?: string[] | null;
|
|
1120
|
+
cbids?: string[] | null;
|
|
1121
|
+
/** Epoch ms it last authenticated a request (recorded at most hourly); null = not since recording began. */
|
|
1122
|
+
lastUsedAt?: number | null;
|
|
1123
|
+
}
|
|
1124
|
+
/** GET /v1/keys/report — key hygiene. */
|
|
1125
|
+
interface ApiKeyReport {
|
|
1126
|
+
generatedAt: number;
|
|
1127
|
+
unusedDays: number;
|
|
1128
|
+
expiringDays: number;
|
|
1129
|
+
unused: Array<ApiKeyPrefix & {
|
|
1130
|
+
reason: string;
|
|
1131
|
+
}>;
|
|
1132
|
+
broad: Array<ApiKeyPrefix & {
|
|
1133
|
+
reason: string;
|
|
1134
|
+
}>;
|
|
1135
|
+
expiringSoon: Array<ApiKeyPrefix & {
|
|
1136
|
+
reason: string;
|
|
1137
|
+
}>;
|
|
1138
|
+
noExpiry: number;
|
|
1139
|
+
total: number;
|
|
888
1140
|
}
|
|
889
1141
|
/** A newly issued key. `key` is returned ONCE and never again. Returned by keys.issue(). */
|
|
890
1142
|
interface ApiKeyIssued {
|
|
@@ -920,6 +1172,8 @@ interface ApiKeyIssueInput {
|
|
|
920
1172
|
cbids?: string[];
|
|
921
1173
|
/** Expire the key after this many days (1–3650). */
|
|
922
1174
|
expiresInDays?: number;
|
|
1175
|
+
/** Or when it expires: epoch ms or an ISO date-time (not with expiresInDays). Omit both: never. */
|
|
1176
|
+
expiresAt?: number | string;
|
|
923
1177
|
}
|
|
924
1178
|
/** Org usage/quota summary. Matches the server's Usage schema. */
|
|
925
1179
|
interface Usage {
|
|
@@ -1168,6 +1422,8 @@ interface ApiKeyUpdate {
|
|
|
1168
1422
|
name?: string;
|
|
1169
1423
|
scopes?: string[];
|
|
1170
1424
|
cbids?: string[];
|
|
1425
|
+
/** A new expiry (epoch ms or ISO date-time), or null to remove it. */
|
|
1426
|
+
expiresAt?: number | string | null;
|
|
1171
1427
|
}
|
|
1172
1428
|
/** An image to upload: base64 (or a `data:` URL) plus its type. */
|
|
1173
1429
|
interface AssetUpload {
|
|
@@ -1467,6 +1723,11 @@ interface ExecutorProfile {
|
|
|
1467
1723
|
statusPath: string;
|
|
1468
1724
|
values: string[];
|
|
1469
1725
|
};
|
|
1726
|
+
/** How this system says the person was already removed; closes the task as `already_erased`. Checked before `noMatch`. */
|
|
1727
|
+
alreadyErased?: {
|
|
1728
|
+
statusPath: string;
|
|
1729
|
+
values: string[];
|
|
1730
|
+
};
|
|
1470
1731
|
};
|
|
1471
1732
|
/** Response header carrying the system's version, recorded in the task log. Default `X-Version`. */
|
|
1472
1733
|
versionHeader?: string;
|
|
@@ -1500,6 +1761,23 @@ interface ExecutorProfile {
|
|
|
1500
1761
|
failed: string[];
|
|
1501
1762
|
};
|
|
1502
1763
|
idempotencyHeader?: string;
|
|
1764
|
+
/**
|
|
1765
|
+
* An identity platform's app grant, revoked on erasure before anything else: look it up by
|
|
1766
|
+
* `{email}`, then end it with `{grant}`. A test looks it up but never revokes it.
|
|
1767
|
+
*/
|
|
1768
|
+
grantRevoke?: {
|
|
1769
|
+
lookup: {
|
|
1770
|
+
method: 'GET' | 'POST';
|
|
1771
|
+
path: string;
|
|
1772
|
+
body?: unknown;
|
|
1773
|
+
grantIdPath: string;
|
|
1774
|
+
};
|
|
1775
|
+
revoke: {
|
|
1776
|
+
method: 'POST' | 'DELETE';
|
|
1777
|
+
path: string;
|
|
1778
|
+
body?: unknown;
|
|
1779
|
+
};
|
|
1780
|
+
};
|
|
1503
1781
|
/** How that system signs its webhooks, if it sends any. */
|
|
1504
1782
|
webhook?: {
|
|
1505
1783
|
algorithm: 'hmac-sha256';
|
|
@@ -1527,9 +1805,80 @@ interface DsarExecutor {
|
|
|
1527
1805
|
hasWebhookSecret: boolean;
|
|
1528
1806
|
/** Open a sub-task automatically when a request reaches fulfilment. */
|
|
1529
1807
|
auto: boolean;
|
|
1808
|
+
/** What the subject reads on this system's notice line when it holds nothing about them. */
|
|
1809
|
+
subjectNote?: string;
|
|
1530
1810
|
createdAt: number;
|
|
1531
1811
|
/** Where that system should send its completion webhooks. On every connection, secret or not. */
|
|
1532
1812
|
webhookUrl: string;
|
|
1813
|
+
/**
|
|
1814
|
+
* The last canary health check (hourly, and on `testExecutor(id, { canary: true })`). null
|
|
1815
|
+
* until the first; cleared when the address, profile or key changes.
|
|
1816
|
+
*/
|
|
1817
|
+
health: ExecutorHealth | null;
|
|
1818
|
+
/** The preset it was built from; absent when hand-written. */
|
|
1819
|
+
preset?: ExecutorPresetName;
|
|
1820
|
+
presetVersion?: number;
|
|
1821
|
+
/** Newer than `presetVersion`: `upgradeExecutorPreset` applies it. */
|
|
1822
|
+
presetLatestVersion?: number;
|
|
1823
|
+
/** The non-secret params it was built with, e.g. `{ orgId }`. */
|
|
1824
|
+
presetParams?: Record<string, string>;
|
|
1825
|
+
/** How the stored address and profile differ from what its preset version builds. Empty: unmodified. */
|
|
1826
|
+
presetDiff?: ConfigChange[];
|
|
1827
|
+
}
|
|
1828
|
+
/** A connection's last canary health check. */
|
|
1829
|
+
interface ExecutorHealth {
|
|
1830
|
+
lastCheckedAt: number;
|
|
1831
|
+
ok: boolean;
|
|
1832
|
+
verdict: string;
|
|
1833
|
+
/** e.g. `base_url_redirects`, `credential_unavailable`. */
|
|
1834
|
+
code?: string;
|
|
1835
|
+
}
|
|
1836
|
+
/** A preset's name, as `executorPresets()` lists them. Not enumerated here: presets are data. */
|
|
1837
|
+
type ExecutorPresetName = string;
|
|
1838
|
+
/**
|
|
1839
|
+
* Connect a system from a versioned preset instead of a hand-written profile. Each preset
|
|
1840
|
+
* lists the params it takes (`executorPresets()`); a preset waiting on another platform is
|
|
1841
|
+
* refused with `preset_waiting_on_platform`.
|
|
1842
|
+
*/
|
|
1843
|
+
interface DsarExecutorPresetInput {
|
|
1844
|
+
preset: ExecutorPresetName;
|
|
1845
|
+
presetVersion?: number;
|
|
1846
|
+
secretKey: string;
|
|
1847
|
+
system?: string;
|
|
1848
|
+
baseUrl?: string;
|
|
1849
|
+
orgId?: string;
|
|
1850
|
+
atlasIdAppId?: string;
|
|
1851
|
+
webhookSecret?: string;
|
|
1852
|
+
auto?: boolean;
|
|
1853
|
+
cbid?: string;
|
|
1854
|
+
}
|
|
1855
|
+
/** What `upgradeExecutorPreset` takes: a version, a preset to adopt, or params to add. */
|
|
1856
|
+
interface ExecutorPresetUpgrade {
|
|
1857
|
+
preset?: ExecutorPresetName;
|
|
1858
|
+
presetVersion?: number;
|
|
1859
|
+
orgId?: string;
|
|
1860
|
+
atlasIdAppId?: string;
|
|
1861
|
+
}
|
|
1862
|
+
/** The presets, which are usable now, and this org's canary address. */
|
|
1863
|
+
interface ExecutorPresets {
|
|
1864
|
+
canaryEmail: string;
|
|
1865
|
+
presets: Array<{
|
|
1866
|
+
name: ExecutorPresetName;
|
|
1867
|
+
title: string;
|
|
1868
|
+
latestVersion: number;
|
|
1869
|
+
defaultSystem?: string;
|
|
1870
|
+
params: Array<{
|
|
1871
|
+
name: string;
|
|
1872
|
+
required: boolean;
|
|
1873
|
+
description: string;
|
|
1874
|
+
}>;
|
|
1875
|
+
available: boolean;
|
|
1876
|
+
waitingOn?: {
|
|
1877
|
+
platform: string;
|
|
1878
|
+
items: string[];
|
|
1879
|
+
operations: string[];
|
|
1880
|
+
};
|
|
1881
|
+
}>;
|
|
1533
1882
|
}
|
|
1534
1883
|
/** What a connection write would do (`?dryRun=1`). Nothing was stored. */
|
|
1535
1884
|
interface DsarExecutorDryRun {
|
|
@@ -1586,6 +1935,8 @@ interface DsarExecutorInput {
|
|
|
1586
1935
|
*/
|
|
1587
1936
|
webhookSecret?: string;
|
|
1588
1937
|
auto?: boolean;
|
|
1938
|
+
/** What the subject reads when this system holds nothing about them (≤500 chars, never a key). */
|
|
1939
|
+
subjectNote?: string;
|
|
1589
1940
|
/** How to drive it. */
|
|
1590
1941
|
profile: ExecutorProfile;
|
|
1591
1942
|
}
|
|
@@ -1597,6 +1948,8 @@ interface DsarExecutorPatch {
|
|
|
1597
1948
|
secretKey?: string;
|
|
1598
1949
|
webhookSecret?: string | null;
|
|
1599
1950
|
auto?: boolean;
|
|
1951
|
+
/** null removes it. */
|
|
1952
|
+
subjectNote?: string | null;
|
|
1600
1953
|
}
|
|
1601
1954
|
/** One entry in a fulfilment task's status history. */
|
|
1602
1955
|
interface DsarTaskEvent {
|
|
@@ -1609,12 +1962,12 @@ interface DsarTaskEvent {
|
|
|
1609
1962
|
externalRef?: string;
|
|
1610
1963
|
}
|
|
1611
1964
|
/** 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';
|
|
1965
|
+
type DsarTaskOutcome = 'located' | 'exported' | 'erased' | 'no_record' | 'done_without_artifact' | 'not_applicable' | 'already_erased' | 'external_identity';
|
|
1613
1966
|
/** One request made to a connected system on a task's behalf, credentials removed. Kept 30 days. */
|
|
1614
1967
|
interface DsarTaskLogEntry {
|
|
1615
1968
|
id?: string;
|
|
1616
1969
|
system?: string;
|
|
1617
|
-
step: 'lookup' | 'open' | 'poll' | 'export';
|
|
1970
|
+
step: 'lookup' | 'open' | 'poll' | 'export' | 'grant';
|
|
1618
1971
|
method: string;
|
|
1619
1972
|
path: string;
|
|
1620
1973
|
/** Absent when the system never answered. */
|
|
@@ -1628,6 +1981,11 @@ interface DsarTaskLogEntry {
|
|
|
1628
1981
|
error?: string;
|
|
1629
1982
|
/** The system's version header on this answer. */
|
|
1630
1983
|
version?: string;
|
|
1984
|
+
/** This answer was a redirect (origin and path; never the query). Only same-origin, method-keeping ones are followed. */
|
|
1985
|
+
redirect?: {
|
|
1986
|
+
status: number;
|
|
1987
|
+
location: string;
|
|
1988
|
+
};
|
|
1631
1989
|
at: number;
|
|
1632
1990
|
}
|
|
1633
1991
|
/** One fulfilment task with its history and its upstream request log. */
|
|
@@ -1673,11 +2031,21 @@ interface ExecutorTestResult {
|
|
|
1673
2031
|
/** One sentence: what a real request would have done. */
|
|
1674
2032
|
verdict: string;
|
|
1675
2033
|
ok: boolean;
|
|
2034
|
+
/** Why not, when there is a code: `base_url_redirects` — the baseUrl redirected; the verdict names the status and target. */
|
|
2035
|
+
code?: string;
|
|
2036
|
+
/** The subject's app grant at an identity platform, when the profile has a grant step. Never revoked by a test. */
|
|
2037
|
+
grant?: string;
|
|
2038
|
+
/** Present when the test used the org canary address, with the address in `email`. */
|
|
2039
|
+
canary?: boolean;
|
|
2040
|
+
email?: string;
|
|
1676
2041
|
/** Every upstream answer, as the system gave it (credentials removed). */
|
|
1677
2042
|
exchanges: DsarTaskLogEntry[];
|
|
1678
2043
|
}
|
|
1679
2044
|
interface ExecutorTestInput {
|
|
1680
|
-
|
|
2045
|
+
/** The address to look up. Required unless `canary` is true. */
|
|
2046
|
+
email?: string;
|
|
2047
|
+
/** Use this org's canary address — no real person. A canary `locate` also updates `health`. */
|
|
2048
|
+
canary?: boolean;
|
|
1681
2049
|
/** Default `locate`. */
|
|
1682
2050
|
operation?: 'locate' | 'export' | 'erase';
|
|
1683
2051
|
/** For `export` only: open a real export and poll it once. An erasure is never sent. */
|
|
@@ -1737,7 +2105,31 @@ interface CookieMunchClient {
|
|
|
1737
2105
|
list(): Promise<Site[]>;
|
|
1738
2106
|
create(input: SiteCreate): Promise<Site>;
|
|
1739
2107
|
get(cbid: string): Promise<Site>;
|
|
2108
|
+
/**
|
|
2109
|
+
* Rename or move a site: domain, display name, aliases. The cbid and the consent ledger stay; a domain
|
|
2110
|
+
* move clears verification. `{ dryRun: true }` answers with the diff and stores nothing.
|
|
2111
|
+
*/
|
|
2112
|
+
update(cbid: string, patch: SiteUpdate, opts?: {
|
|
2113
|
+
dryRun?: boolean;
|
|
2114
|
+
}): Promise<SiteUpdateResult>;
|
|
1740
2115
|
delete(cbid: string): Promise<void>;
|
|
2116
|
+
/** Partner platforms granted this site's consent events, and the partners on offer. */
|
|
2117
|
+
listPartners(cbid: string): Promise<{
|
|
2118
|
+
links: PartnerLink[];
|
|
2119
|
+
partners: PartnerCatalogEntry[];
|
|
2120
|
+
}>;
|
|
2121
|
+
/** Grant a partner (Forumulate, Atlas) the site's consent events — no secret is created. Idempotent. */
|
|
2122
|
+
linkPartner(cbid: string, input: PartnerLinkCreate, opts?: {
|
|
2123
|
+
dryRun?: boolean;
|
|
2124
|
+
}): Promise<{
|
|
2125
|
+
change: 'created' | 'updated' | 'unchanged';
|
|
2126
|
+
link: PartnerLink;
|
|
2127
|
+
dryRun?: true;
|
|
2128
|
+
}>;
|
|
2129
|
+
/** Revoke a partner link: deliveries stop at once. */
|
|
2130
|
+
unlinkPartner(cbid: string, linkId: string): Promise<{
|
|
2131
|
+
link: PartnerLink;
|
|
2132
|
+
}>;
|
|
1741
2133
|
getConfig(cbid: string): Promise<SiteConfig>;
|
|
1742
2134
|
/**
|
|
1743
2135
|
* Replaces the whole config — a top-level field you omit reverts to its default. With
|
|
@@ -1858,6 +2250,43 @@ interface CookieMunchClient {
|
|
|
1858
2250
|
dryRun: true;
|
|
1859
2251
|
retired: RetiredCookie[];
|
|
1860
2252
|
}>;
|
|
2253
|
+
/** Every declaration preset (atlas, forumulate, chatly, cookiemunch): params, what it declared here, manifest status. */
|
|
2254
|
+
cookiePresets(cbid: string): Promise<{
|
|
2255
|
+
presets: CookiePreset[];
|
|
2256
|
+
}>;
|
|
2257
|
+
/**
|
|
2258
|
+
* Apply (or re-sync) a vendor preset: declares what that platform writes, marked
|
|
2259
|
+
* `vendor`. Names you declared yourself are kept (`skipped`). `dryRun` stores nothing.
|
|
2260
|
+
*/
|
|
2261
|
+
applyCookiePreset(cbid: string, vendor: CookiePresetVendor, params?: CookiePresetParams, opts?: {
|
|
2262
|
+
dryRun?: boolean;
|
|
2263
|
+
}): Promise<CookiePresetResult>;
|
|
2264
|
+
/** Remove every declaration a vendor preset made. */
|
|
2265
|
+
removeCookiePreset(cbid: string, vendor: CookiePresetVendor, opts?: {
|
|
2266
|
+
dryRun?: boolean;
|
|
2267
|
+
}): Promise<{
|
|
2268
|
+
vendor: CookiePresetVendor;
|
|
2269
|
+
removed: string[];
|
|
2270
|
+
dryRun?: true;
|
|
2271
|
+
declared?: DeclaredCookie[];
|
|
2272
|
+
diff?: DeclarationDiff;
|
|
2273
|
+
}>;
|
|
2274
|
+
/** Remove every stored (scanned or observed) row of this name. A declaration of it stays. */
|
|
2275
|
+
deleteObservedCookie(cbid: string, name: string): Promise<void>;
|
|
2276
|
+
/** What deleting it would remove; nothing is removed. */
|
|
2277
|
+
deleteObservedCookie(cbid: string, name: string, opts: {
|
|
2278
|
+
dryRun: true;
|
|
2279
|
+
}): Promise<ObservedPurgeResult>;
|
|
2280
|
+
/**
|
|
2281
|
+
* Purge observed since T: remove every row a real visit first reported at or after
|
|
2282
|
+
* `since` (and before `until`). Crawled rows and declarations stay. ISO-8601 or epoch ms.
|
|
2283
|
+
*/
|
|
2284
|
+
purgeObservedCookies(cbid: string, input: {
|
|
2285
|
+
since: string | number;
|
|
2286
|
+
until?: string | number;
|
|
2287
|
+
}, opts?: {
|
|
2288
|
+
dryRun?: boolean;
|
|
2289
|
+
}): Promise<ObservedPurgeResult>;
|
|
1861
2290
|
/** Remove a declaration; the scanned classification applies again. */
|
|
1862
2291
|
undeclareCookie(cbid: string, name: string): Promise<void>;
|
|
1863
2292
|
/** What removing a declaration would leave; nothing is removed. */
|
|
@@ -1941,7 +2370,10 @@ interface CookieMunchClient {
|
|
|
1941
2370
|
create(input: DsarCreate): Promise<{
|
|
1942
2371
|
request: DsarRequest;
|
|
1943
2372
|
}>;
|
|
1944
|
-
|
|
2373
|
+
/** `opts.messageToSubject` replaces the line the subject reads in the notice — for a rejection, why. */
|
|
2374
|
+
advance(id: string, toStatus: DsarStatus, opts?: {
|
|
2375
|
+
messageToSubject?: string;
|
|
2376
|
+
}): Promise<{
|
|
1945
2377
|
request: DsarRequest;
|
|
1946
2378
|
}>;
|
|
1947
2379
|
/** The subject-facing response notice for a request, as plain text. */
|
|
@@ -2213,7 +2645,7 @@ interface CookieMunchClient {
|
|
|
2213
2645
|
* Connect one. The secret is stored encrypted and never returned; the response carries
|
|
2214
2646
|
* the URL to point that system's webhook at.
|
|
2215
2647
|
*/
|
|
2216
|
-
connectExecutor(input: DsarExecutorInput): Promise<DsarExecutorCreated>;
|
|
2648
|
+
connectExecutor(input: DsarExecutorInput | DsarExecutorPresetInput): Promise<DsarExecutorCreated>;
|
|
2217
2649
|
/**
|
|
2218
2650
|
* Change a connection in place. Only what you send changes, and the stored credential
|
|
2219
2651
|
* is kept unless you pass a new `secretKey` — so adding a field to a profile does not
|
|
@@ -2221,7 +2653,22 @@ interface CookieMunchClient {
|
|
|
2221
2653
|
*/
|
|
2222
2654
|
updateExecutor(id: string, patch: DsarExecutorPatch): Promise<DsarExecutor>;
|
|
2223
2655
|
/** What `connectExecutor` would create, validated in full; nothing is stored (`?dryRun=1`). */
|
|
2224
|
-
dryRunConnectExecutor(input: DsarExecutorInput): Promise<DsarExecutorDryRun>;
|
|
2656
|
+
dryRunConnectExecutor(input: DsarExecutorInput | DsarExecutorPresetInput): Promise<DsarExecutorDryRun>;
|
|
2657
|
+
/** The versioned presets, whether each is usable now (or waits on another platform), and the org canary address. */
|
|
2658
|
+
executorPresets(): Promise<ExecutorPresets>;
|
|
2659
|
+
/**
|
|
2660
|
+
* Rebuild a connection from its preset's latest version (or `presetVersion`), keeping its id
|
|
2661
|
+
* and credentials; or adopt a preset on a hand-written one by naming it. Answers with `diff`.
|
|
2662
|
+
*/
|
|
2663
|
+
upgradeExecutorPreset(id: string, input?: ExecutorPresetUpgrade): Promise<DsarExecutor & {
|
|
2664
|
+
diff: ConfigChange[];
|
|
2665
|
+
warnings?: Array<{
|
|
2666
|
+
field: string;
|
|
2667
|
+
reason: string;
|
|
2668
|
+
}>;
|
|
2669
|
+
}>;
|
|
2670
|
+
/** What `upgradeExecutorPreset` would change; nothing is stored (`?dryRun=1`). */
|
|
2671
|
+
dryRunUpgradeExecutorPreset(id: string, input?: ExecutorPresetUpgrade): Promise<DsarExecutorDryRun>;
|
|
2225
2672
|
/** What `updateExecutor` would change, with a diff; the stored connection is untouched (`?dryRun=1`). */
|
|
2226
2673
|
dryRunUpdateExecutor(id: string, patch: DsarExecutorPatch): Promise<DsarExecutorDryRun>;
|
|
2227
2674
|
/**
|
|
@@ -2293,8 +2740,22 @@ interface CookieMunchClient {
|
|
|
2293
2740
|
update(prefix: string, patch: ApiKeyUpdate): Promise<{
|
|
2294
2741
|
ok: true;
|
|
2295
2742
|
}>;
|
|
2743
|
+
/** Key hygiene: keys unused for `unusedDays` (default 90), broad keys, keys expiring within `expiringDays` (default 14). */
|
|
2744
|
+
report(opts?: {
|
|
2745
|
+
unusedDays?: number;
|
|
2746
|
+
expiringDays?: number;
|
|
2747
|
+
}): Promise<ApiKeyReport>;
|
|
2296
2748
|
};
|
|
2297
2749
|
usage(): Promise<Usage>;
|
|
2750
|
+
/** 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. */
|
|
2751
|
+
integrationHealth(cbid?: string): Promise<IntegrationHealthReport>;
|
|
2752
|
+
/**
|
|
2753
|
+
* Wire a product's privacy in one call: the site, connected systems, Atlas and Forumulate. Idempotent;
|
|
2754
|
+
* `{ dryRun: true }` writes nothing anywhere. No secret appears in the answer.
|
|
2755
|
+
*/
|
|
2756
|
+
provision(input: ProvisionRequest, opts?: {
|
|
2757
|
+
dryRun?: boolean;
|
|
2758
|
+
}): Promise<ProvisionResult>;
|
|
2298
2759
|
/** The key's organisation. Requires an unscoped key that is not property-locked. */
|
|
2299
2760
|
org: {
|
|
2300
2761
|
get(): Promise<Org>;
|
|
@@ -2449,4 +2910,4 @@ interface CookieMunchClient {
|
|
|
2449
2910
|
}
|
|
2450
2911
|
declare function createCookieMunch(opts: CookieMunchOptions): CookieMunchClient;
|
|
2451
2912
|
|
|
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 };
|
|
2913
|
+
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, 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 };
|