@chainpatrol/sdk 0.7.0 → 0.9.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.
@@ -0,0 +1,422 @@
1
+ import { __async, __spreadProps, __spreadValues } from '../chunk-4U7ZT42S.mjs';
2
+
3
+ // src/api/types.ts
4
+ var REPORT_REVIEW_DECISIONS = ["APPROVE", "REJECT", "SKIP", "ESCALATE"];
5
+ var REPORT_STATUSES = ["TODO", "IN_PROGRESS", "CLOSED"];
6
+ var DETECTION_CONFIDENCE_LEVELS = ["none", "low", "medium", "high"];
7
+ var DETECTION_REPORTED_FILTERS = ["reported", "not_reported"];
8
+ var LIVENESS_FILTER_VALUES = ["ALIVE", "DEAD", "UNKNOWN"];
9
+ var WATCHLIST_FILTER_VALUES = ["ENABLED", "DISABLED"];
10
+ var TAKEDOWN_STATUSES = [
11
+ "TODO",
12
+ "IN_PROGRESS",
13
+ "COMPLETED",
14
+ "CANCELLED",
15
+ "PENDING_RETRACTION",
16
+ "RETRACTION_SENT",
17
+ "RETRACTED",
18
+ "PENDING_INPUT"
19
+ ];
20
+ var LIVENESS_STATUSES = ["UNKNOWN", "ALIVE", "DEAD"];
21
+ var TAKEDOWN_SORT_KEYS = [
22
+ "updatedAt",
23
+ "createdAt",
24
+ "takedownStatus",
25
+ "takedownUpdatedAt",
26
+ "assigneeId",
27
+ "brandId"
28
+ ];
29
+ var ORGANIZATION_METRICS_INCLUDE_FIELDS = [
30
+ "reports",
31
+ "newThreats",
32
+ "threatsWatchlisted",
33
+ "takedownsFiled",
34
+ "takedownsCompleted",
35
+ "domainThreats",
36
+ "twitterThreats",
37
+ "telegramThreats",
38
+ "otherThreats",
39
+ "blockedByType",
40
+ "blockedByDay"
41
+ ];
42
+
43
+ // src/api/date-utils.ts
44
+ var ISO_DATE_REGEX = /^(\d{4})-(\d{2})-(\d{2})(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:?\d{2})?)?$/;
45
+ function parseIsoDate(value) {
46
+ if (!value) return void 0;
47
+ const m = ISO_DATE_REGEX.exec(value);
48
+ if (!m) {
49
+ throw new Error(`Invalid ISO date: '${value}'. Use YYYY-MM-DD or full ISO 8601.`);
50
+ }
51
+ const hasTime = m[4] !== void 0;
52
+ const hasOffset = m[7] !== void 0;
53
+ const normalized = hasTime && !hasOffset ? value + "Z" : value;
54
+ const date = new Date(normalized);
55
+ if (Number.isNaN(date.getTime())) {
56
+ throw new Error(`Invalid ISO date: '${value}'. Use YYYY-MM-DD or full ISO 8601.`);
57
+ }
58
+ if (date.getUTCFullYear() !== Number(m[1]) || date.getUTCMonth() + 1 !== Number(m[2]) || date.getUTCDate() !== Number(m[3])) {
59
+ throw new Error(`Invalid ISO date: '${value}'. Use YYYY-MM-DD or full ISO 8601.`);
60
+ }
61
+ return date;
62
+ }
63
+ function parseIsoDateString(value) {
64
+ var _a;
65
+ return (_a = parseIsoDate(value)) == null ? void 0 : _a.toISOString();
66
+ }
67
+
68
+ // src/api/client.ts
69
+ var DEFAULT_BASE_URL = "https://app.chainpatrol.io";
70
+ var DEFAULT_TIMEOUT_MS = 3e4;
71
+ function trimTrailingSlashes(url) {
72
+ return url.replace(/\/+$/, "");
73
+ }
74
+ function staticApiKey(key) {
75
+ return () => ({ kind: "api-key", value: key });
76
+ }
77
+ function staticBearerToken(token) {
78
+ return () => ({ kind: "bearer", value: token });
79
+ }
80
+ var ChainPatrolApiClient = class {
81
+ constructor(options) {
82
+ var _a, _b;
83
+ this.baseUrl = trimTrailingSlashes((_a = options.baseUrl) != null ? _a : DEFAULT_BASE_URL);
84
+ this.credential = options.credential;
85
+ this.timeoutMs = (_b = options.timeoutMs) != null ? _b : DEFAULT_TIMEOUT_MS;
86
+ }
87
+ buildAuthHeaders() {
88
+ return __async(this, null, function* () {
89
+ const credential = yield this.credential();
90
+ const headers = {};
91
+ if (credential.kind === "api-key") {
92
+ headers["x-api-key"] = credential.value;
93
+ } else {
94
+ headers["Authorization"] = `Bearer ${credential.value}`;
95
+ }
96
+ return headers;
97
+ });
98
+ }
99
+ requestGet(path, query) {
100
+ return __async(this, null, function* () {
101
+ const headers = yield this.buildAuthHeaders();
102
+ const search = new URLSearchParams();
103
+ for (const [key, value] of Object.entries(query)) {
104
+ if (value === void 0) continue;
105
+ if (Array.isArray(value)) {
106
+ for (const item of value) {
107
+ if (item !== void 0 && item !== "") {
108
+ search.append(key, item);
109
+ }
110
+ }
111
+ continue;
112
+ }
113
+ if (value !== "") {
114
+ search.set(key, value);
115
+ }
116
+ }
117
+ const queryString = search.toString();
118
+ const url = `${this.baseUrl}/api/v2${path}${queryString ? `?${queryString}` : ""}`;
119
+ let res;
120
+ try {
121
+ res = yield fetch(url, {
122
+ method: "GET",
123
+ headers,
124
+ signal: AbortSignal.timeout(this.timeoutMs)
125
+ });
126
+ } catch (err) {
127
+ throw this.wrapFetchError(err);
128
+ }
129
+ return this.handleResponse(res);
130
+ });
131
+ }
132
+ request(path, body) {
133
+ return __async(this, null, function* () {
134
+ const headers = yield this.buildAuthHeaders();
135
+ headers["Content-Type"] = "application/json";
136
+ let res;
137
+ try {
138
+ res = yield fetch(`${this.baseUrl}/api/v2${path}`, {
139
+ method: "POST",
140
+ headers,
141
+ body: JSON.stringify(body),
142
+ signal: AbortSignal.timeout(this.timeoutMs)
143
+ });
144
+ } catch (err) {
145
+ throw this.wrapFetchError(err);
146
+ }
147
+ return this.handleResponse(res);
148
+ });
149
+ }
150
+ wrapFetchError(err) {
151
+ if (err instanceof DOMException && err.name === "TimeoutError") {
152
+ return new Error("Request timed out. Check your network connection and try again.");
153
+ }
154
+ if (err instanceof TypeError && err.code === "ECONNREFUSED") {
155
+ return new Error(`Cannot connect to ${this.baseUrl}. Is the server running?`);
156
+ }
157
+ return new Error("Network error. Check your internet connection and try again.");
158
+ }
159
+ handleResponse(res) {
160
+ return __async(this, null, function* () {
161
+ var _a;
162
+ if (!res.ok) {
163
+ let errorMessageFromResponse = null;
164
+ try {
165
+ const errorBody = yield res.json();
166
+ errorMessageFromResponse = (_a = errorBody.message) != null ? _a : null;
167
+ } catch (e) {
168
+ }
169
+ if (res.status === 401) {
170
+ throw new Error(errorMessageFromResponse != null ? errorMessageFromResponse : "Authentication failed.");
171
+ }
172
+ if (res.status === 403) {
173
+ throw new Error(
174
+ errorMessageFromResponse != null ? errorMessageFromResponse : "You don't have permission to access this resource."
175
+ );
176
+ }
177
+ if (res.status === 404) {
178
+ throw new Error(errorMessageFromResponse != null ? errorMessageFromResponse : "Resource not found.");
179
+ }
180
+ if (res.status === 422) {
181
+ throw new Error(errorMessageFromResponse != null ? errorMessageFromResponse : "Request validation failed.");
182
+ }
183
+ if (res.status >= 500) {
184
+ throw new Error(
185
+ "ChainPatrol API is temporarily unavailable. Please try again later."
186
+ );
187
+ }
188
+ throw new Error(errorMessageFromResponse != null ? errorMessageFromResponse : `Request failed (${res.status}).`);
189
+ }
190
+ return yield res.json();
191
+ });
192
+ }
193
+ assetCheck(input) {
194
+ return this.request("/asset/check", input);
195
+ }
196
+ assetSearch(input) {
197
+ return this.request("/asset/search", input);
198
+ }
199
+ listDetectionConfigs(slug) {
200
+ return this.request("/detection/configs/list", { slug });
201
+ }
202
+ updateDetectionConfig(input) {
203
+ return this.request("/detection/configs/update", input);
204
+ }
205
+ runDetectionConfigs(input) {
206
+ return this.request("/detection/configs/run", input);
207
+ }
208
+ validateDetectionConfigs(input) {
209
+ return this.request(
210
+ "/detection/configs/validate",
211
+ input
212
+ );
213
+ }
214
+ getDetectionDrift(input) {
215
+ return this.request("/detection/drift", __spreadProps(__spreadValues({}, input), {
216
+ startDate: parseIsoDate(input.startDate),
217
+ endDate: parseIsoDate(input.endDate)
218
+ }));
219
+ }
220
+ getOperationsQueuesSnapshot(input) {
221
+ return this.request(
222
+ "/operations/queues/snapshot",
223
+ input
224
+ );
225
+ }
226
+ getMetricsSummary(input) {
227
+ return this.request("/metrics/summary", __spreadProps(__spreadValues({}, input), {
228
+ startDate: parseIsoDate(input.startDate),
229
+ endDate: parseIsoDate(input.endDate)
230
+ }));
231
+ }
232
+ getMetricsFound(input) {
233
+ return this.request("/metrics/found", __spreadProps(__spreadValues({}, input), {
234
+ startDate: parseIsoDate(input.startDate),
235
+ endDate: parseIsoDate(input.endDate)
236
+ }));
237
+ }
238
+ getMetricsBreakdown(input) {
239
+ return this.request("/metrics/breakdown", __spreadProps(__spreadValues({}, input), {
240
+ startDate: parseIsoDate(input.startDate),
241
+ endDate: parseIsoDate(input.endDate)
242
+ }));
243
+ }
244
+ createReport(input) {
245
+ return this.request("/report/create", input);
246
+ }
247
+ listOrganizationReports(input) {
248
+ var _a, _b, _c, _d, _e;
249
+ return this.request("/public/getOrganizationReports", {
250
+ slug: input.slug,
251
+ limit: (_a = input.limit) != null ? _a : 10,
252
+ cursor: input.cursor,
253
+ status: input.status,
254
+ searchQuery: input.searchQuery,
255
+ reporterQuery: input.reporterQuery,
256
+ reportedByCustomer: input.reportedByCustomer,
257
+ excludeAutomation: input.excludeAutomation,
258
+ onlyRejected: input.onlyRejected,
259
+ reviewStatuses: ((_b = input.reviewStatuses) == null ? void 0 : _b.length) ? input.reviewStatuses : void 0,
260
+ assetTypes: ((_c = input.assetTypes) == null ? void 0 : _c.length) ? input.assetTypes : void 0,
261
+ brandIds: ((_d = input.brandIds) == null ? void 0 : _d.length) ? input.brandIds : void 0,
262
+ countryCodes: ((_e = input.countryCodes) == null ? void 0 : _e.length) ? input.countryCodes : void 0,
263
+ reviewedByUserId: input.reviewedByUserId,
264
+ startDate: parseIsoDateString(input.startDate),
265
+ endDate: parseIsoDateString(input.endDate),
266
+ updatedAtStartDate: parseIsoDateString(input.updatedAtStartDate),
267
+ updatedAtEndDate: parseIsoDateString(input.updatedAtEndDate)
268
+ });
269
+ }
270
+ listTakedowns(input) {
271
+ var _a, _b;
272
+ return this.request("/takedowns/list", {
273
+ organizationSlug: input.organizationSlug,
274
+ query: input.query,
275
+ startDate: parseIsoDateString(input.startDate),
276
+ endDate: parseIsoDateString(input.endDate),
277
+ assetType: input.assetType,
278
+ takedownStatus: input.takedownStatus,
279
+ livenessStatus: input.livenessStatus,
280
+ brandIds: ((_a = input.brandIds) == null ? void 0 : _a.length) ? input.brandIds : void 0,
281
+ assigneeIds: ((_b = input.assigneeIds) == null ? void 0 : _b.length) ? input.assigneeIds : void 0,
282
+ startedAtStartDate: parseIsoDateString(input.startedAtStartDate),
283
+ startedAtEndDate: parseIsoDateString(input.startedAtEndDate),
284
+ hideAutomatedTakedowns: input.hideAutomatedTakedowns,
285
+ hideAutomatedLivenessChecks: input.hideAutomatedLivenessChecks,
286
+ sorting: input.sorting,
287
+ per_page: input.perPage,
288
+ next_page: input.nextPage
289
+ });
290
+ }
291
+ getOrganizationMetrics(input) {
292
+ return this.requestGet("/organization/metrics", {
293
+ organizationSlug: input.organizationSlug,
294
+ slugs: input.slugs,
295
+ allMyOrgs: input.allMyOrgs ? "true" : void 0,
296
+ subscriptionStatus: input.subscriptionStatus,
297
+ services: input.services ? JSON.stringify(input.services) : void 0,
298
+ brandSlug: input.brandSlug,
299
+ startDate: parseIsoDateString(input.startDate),
300
+ endDate: parseIsoDateString(input.endDate),
301
+ include: input.include
302
+ });
303
+ }
304
+ listHealthchecks() {
305
+ return this.request("/healthchecks/list", {});
306
+ }
307
+ runHealthcheck(endpoint, input) {
308
+ return this.request(endpoint, input);
309
+ }
310
+ getUserOrgs(input) {
311
+ return this.request("/user/orgs", input);
312
+ }
313
+ getUserOrg(input) {
314
+ return this.requestGet(
315
+ `/user/orgs/${encodeURIComponent(input.slug)}`,
316
+ {}
317
+ );
318
+ }
319
+ listAssets(input) {
320
+ return this.request("/asset/list", {
321
+ type: input.type,
322
+ status: input.status,
323
+ startDate: parseIsoDateString(input.startDate),
324
+ endDate: parseIsoDateString(input.endDate),
325
+ per_page: input.perPage,
326
+ next_page: input.nextPage
327
+ });
328
+ }
329
+ listThreats(input) {
330
+ return this.request("/threats/list", {
331
+ query: input.query,
332
+ startDate: parseIsoDateString(input.startDate),
333
+ endDate: parseIsoDateString(input.endDate),
334
+ assetType: input.assetType,
335
+ sorting: input.sorting,
336
+ per_page: input.perPage,
337
+ next_page: input.nextPage
338
+ });
339
+ }
340
+ listDetections(input) {
341
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
342
+ const filters = [];
343
+ if ((_a = input.sources) == null ? void 0 : _a.length) {
344
+ filters.push({ property: "source", operator: "in", value: input.sources });
345
+ }
346
+ if ((_b = input.confidence) == null ? void 0 : _b.length) {
347
+ filters.push({ property: "confidence", operator: "in", value: input.confidence });
348
+ }
349
+ if ((_c = input.assetStatus) == null ? void 0 : _c.length) {
350
+ filters.push({
351
+ property: "assetStatus",
352
+ operator: "in",
353
+ value: input.assetStatus
354
+ });
355
+ }
356
+ if ((_d = input.assetType) == null ? void 0 : _d.length) {
357
+ filters.push({ property: "assetType", operator: "in", value: input.assetType });
358
+ }
359
+ if ((_e = input.brandIds) == null ? void 0 : _e.length) {
360
+ filters.push({ property: "brand", operator: "in", value: input.brandIds });
361
+ }
362
+ if ((_f = input.liveness) == null ? void 0 : _f.length) {
363
+ filters.push({ property: "liveness", operator: "in", value: input.liveness });
364
+ }
365
+ if ((_g = input.watchlist) == null ? void 0 : _g.length) {
366
+ filters.push({ property: "watchlist", operator: "in", value: input.watchlist });
367
+ }
368
+ if ((_h = input.reported) == null ? void 0 : _h.length) {
369
+ filters.push({ property: "reported", operator: "in", value: input.reported });
370
+ }
371
+ if ((_i = input.countryCodes) == null ? void 0 : _i.length) {
372
+ filters.push({
373
+ property: "countryCode",
374
+ operator: "in",
375
+ value: input.countryCodes
376
+ });
377
+ }
378
+ if (input.onlyDeleted) {
379
+ filters.push({ property: "deleted", operator: "in", value: ["deleted"] });
380
+ }
381
+ return this.request("/detection/list", {
382
+ slug: input.slug,
383
+ cursor: input.cursor,
384
+ limit: input.limit,
385
+ query: input.query,
386
+ startDate: parseIsoDate(input.startDate),
387
+ endDate: parseIsoDate(input.endDate),
388
+ filters: filters.length > 0 ? filters : void 0
389
+ });
390
+ }
391
+ searchReports(input) {
392
+ return this.request("/reports/search", input);
393
+ }
394
+ listOrganizationAssets(input) {
395
+ return this.requestGet("/organization/assets", {
396
+ type: input.type,
397
+ groupId: input.groupId !== void 0 ? String(input.groupId) : void 0,
398
+ query: input.query,
399
+ per_page: input.perPage !== void 0 ? String(input.perPage) : void 0,
400
+ next_page: input.nextPage
401
+ });
402
+ }
403
+ listOrganizationAssetGroups() {
404
+ return this.requestGet(
405
+ "/organization/asset-groups",
406
+ {}
407
+ );
408
+ }
409
+ listOrganizationBrands() {
410
+ return this.requestGet("/organization/brands", {});
411
+ }
412
+ getCurrentUser() {
413
+ return this.request("/user/me", {});
414
+ }
415
+ validateApiKey() {
416
+ return this.requestGet("/validate", {});
417
+ }
418
+ };
419
+
420
+ export { ChainPatrolApiClient, DETECTION_CONFIDENCE_LEVELS, DETECTION_REPORTED_FILTERS, LIVENESS_FILTER_VALUES, LIVENESS_STATUSES, ORGANIZATION_METRICS_INCLUDE_FIELDS, REPORT_REVIEW_DECISIONS, REPORT_STATUSES, TAKEDOWN_SORT_KEYS, TAKEDOWN_STATUSES, WATCHLIST_FILTER_VALUES, parseIsoDate, parseIsoDateString, staticApiKey, staticBearerToken };
421
+ //# sourceMappingURL=index.mjs.map
422
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/types.ts","../../src/api/date-utils.ts","../../src/api/client.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["export type ApiCredential =\n | { kind: \"api-key\"; value: string }\n | { kind: \"bearer\"; value: string };\n\nexport type CredentialProvider = () => ApiCredential | Promise<ApiCredential>;\n\nexport interface ChainPatrolApiClientOptions {\n baseUrl?: string;\n credential: CredentialProvider;\n timeoutMs?: number;\n}\n\nexport interface ConfigEntry {\n id: number;\n title: string;\n status: string;\n cron: string | null;\n config: Record<string, unknown>;\n}\n\nexport interface DetectionSource {\n source: string;\n scope: \"global\" | \"organization\";\n configs: ConfigEntry[];\n}\n\nexport interface ApiClient {\n assetCheck: (input: AssetCheckInput) => Promise<AssetCheckResult>;\n assetSearch: (input: AssetSearchInput) => Promise<AssetSearchResult>;\n listAssets: (input: AssetListInput) => Promise<AssetListResult>;\n listDetectionConfigs: (slug: string) => Promise<DetectionSource[]>;\n updateDetectionConfig: (\n input: DetectionConfigUpdateInput,\n ) => Promise<DetectionConfigUpdateResult>;\n runDetectionConfigs: (\n input: DetectionConfigRunInput,\n ) => Promise<DetectionConfigRunResult>;\n validateDetectionConfigs: (\n input: DetectionConfigValidateInput,\n ) => Promise<DetectionConfigValidateResult>;\n getDetectionDrift: (input: DetectionDriftInput) => Promise<DetectionDriftResult>;\n listDetections: (input: DetectionListInput) => Promise<DetectionListResult>;\n getOperationsQueuesSnapshot: (\n input: OperationsQueuesSnapshotInput,\n ) => Promise<OperationsQueuesSnapshotResult>;\n getMetricsSummary: (input: MetricsSummaryInput) => Promise<MetricsSummaryResult>;\n getMetricsFound: (input: MetricsFoundInput) => Promise<MetricsFoundResult>;\n getMetricsBreakdown: (input: MetricsBreakdownInput) => Promise<MetricsBreakdownResult>;\n createReport: (input: ReportCreateInput) => Promise<ReportCreateResult>;\n listOrganizationReports: (\n input: OrganizationReportsListInput,\n ) => Promise<OrganizationReportsListResult>;\n searchReports: (input: ReportsSearchInput) => Promise<ReportsSearchResult>;\n listTakedowns: (input: TakedownsListInput) => Promise<TakedownsListResult>;\n listThreats: (input: ThreatsListInput) => Promise<ThreatsListResult>;\n getOrganizationMetrics: (\n input: OrganizationMetricsInput,\n ) => Promise<OrganizationMetricsResult>;\n listOrganizationAssets: (\n input: OrganizationAssetsListInput,\n ) => Promise<OrganizationAssetsListResult>;\n listOrganizationAssetGroups: () => Promise<OrganizationAssetGroupsListResult>;\n listOrganizationBrands: () => Promise<OrganizationBrandsListResult>;\n listHealthchecks: () => Promise<HealthchecksListResult>;\n runHealthcheck: (\n endpoint: string,\n input: Record<string, unknown>,\n ) => Promise<HealthcheckResult>;\n getUserOrgs: (input: UserOrgsInput) => Promise<UserOrgsResult>;\n getUserOrg: (input: UserOrgGetInput) => Promise<UserOrgGetResult>;\n getCurrentUser: () => Promise<UserMeResult>;\n validateApiKey: () => Promise<ValidateApiKeyResult>;\n}\n\nexport interface AssetCheckInput {\n content: string;\n}\n\nexport type AssetCheckStatus = \"ALLOWED\" | \"BLOCKED\" | \"UNKNOWN\";\n\nexport interface AssetCheckSourceEntry {\n source: string;\n status: AssetCheckStatus;\n}\n\nexport interface AssetCheckResult {\n status: AssetCheckStatus;\n source: string;\n reason?: string;\n sources: AssetCheckSourceEntry[];\n message?: string;\n code?: string;\n watchStatus?: \"ENABLED\" | \"DISABLED\";\n}\n\nexport interface AssetSearchInput {\n content?: string;\n assetId?: number;\n assetIds?: number[];\n}\n\nexport interface AssetSearchResultItem {\n asset: {\n id: number;\n content: string;\n type: string;\n status: string;\n watchStatus: string;\n createdAt: string;\n updatedAt: string;\n } | null;\n reports: Array<{\n id: number;\n title: string | null;\n status: string;\n createdAt: string;\n }>;\n takedown: {\n id: number;\n status: string;\n createdAt: string;\n updatedAt: string;\n tasks: Array<{\n id: number;\n type: string;\n status: string;\n retractionStatus: string;\n externalId: string | null;\n submittedAt: string | null;\n retractedAt: string | null;\n lastResponseAt: string | null;\n createdAt: string;\n updatedAt: string;\n takedownProvider: { name: string } | null;\n }>;\n } | null;\n blockedBy: Array<{\n consumer: string;\n name: string | null;\n consumedAt: string;\n }>;\n}\n\nexport interface AssetSearchResult extends AssetSearchResultItem {\n results?: AssetSearchResultItem[];\n}\n\nexport interface AssetListInput {\n type: string;\n status?: string;\n startDate?: string;\n endDate?: string;\n perPage?: number;\n nextPage?: string;\n}\n\nexport interface AssetListItem {\n content: string;\n type: string;\n status: string;\n watchStatus: string;\n updatedAt: string;\n}\n\nexport interface AssetListResult {\n assets: AssetListItem[];\n next_page: string | null;\n}\n\nexport interface DetectionConfigUpdateInput {\n slug: string;\n configId: number;\n status?: \"ENABLED\" | \"DISABLED\";\n title?: string;\n description?: string | null;\n cron?: string | null;\n config?: Record<string, unknown>;\n mergeConfig?: boolean;\n}\n\nexport interface DetectionConfigUpdateResult {\n config: {\n id: number;\n source: string;\n status: string;\n title: string;\n description: string | null;\n cron: string | null;\n config: Record<string, unknown>;\n updatedAt: string;\n };\n}\n\nexport interface DetectionConfigRunInput {\n slug: string;\n configId?: number;\n source?: string;\n includeDisabled?: boolean;\n}\n\nexport interface DetectionConfigRunResult {\n ranCount: number;\n successCount: number;\n failedCount: number;\n results: Array<{\n configId: number;\n source: string;\n ok: boolean;\n message: string | null;\n assetsCount: number;\n }>;\n}\n\nexport interface DetectionConfigValidateInput {\n slug: string;\n source?: string;\n minResults?: number;\n lookbackHours?: number;\n runBeforeValidate?: boolean;\n includeDisabled?: boolean;\n}\n\nexport interface DetectionConfigValidateResult {\n ok: boolean;\n summary: {\n checkedConfigs: number;\n passingConfigs: number;\n failingConfigs: number;\n lookbackHours: number;\n minResults: number;\n };\n validations: Array<{\n configId: number;\n source: string;\n status: string;\n ran: boolean;\n runOk: boolean;\n runMessage: string | null;\n recentResultCount: number;\n valid: boolean;\n }>;\n}\n\nexport interface DetectionDriftInput {\n slug: string;\n lookbackHours?: number;\n startDate?: string;\n endDate?: string;\n source?: string;\n configIds?: number[];\n includeDisabled?: boolean;\n thresholds?: {\n zeroResultsMaxHours?: number;\n noisyResultsPerDay?: number;\n noisyAllowedRatioThreshold?: number;\n staleConfigDays?: number;\n };\n}\n\nexport interface DetectionDriftResult {\n ok: boolean;\n range: {\n startDate: string;\n endDate: string;\n lookbackHours: number;\n };\n thresholds: {\n zeroResultsMaxHours: number;\n noisyResultsPerDay: number;\n noisyAllowedRatioThreshold: number;\n staleConfigDays: number;\n };\n summary: {\n checkedConfigs: number;\n signalCount: number;\n zeroResultsCount: number;\n noisyCount: number;\n staleCount: number;\n };\n signals: Array<{\n signal: \"zero_results_too_long\" | \"noisy_source\" | \"stale_query\";\n configId: number;\n source: string;\n title: string | null;\n status: string;\n severity: \"low\" | \"medium\" | \"high\";\n details: Record<string, unknown>;\n }>;\n}\n\nexport interface OperationsQueuesSnapshotInput {\n slug?: string;\n all?: boolean;\n windowHours?: number;\n}\n\nexport interface OperationsQueuesSnapshotResult {\n generatedAt: string;\n scope: {\n slug: string | null;\n all: boolean;\n };\n reviewQueue: {\n totalPendingProposals: number;\n distinctReports: number;\n ageBuckets: {\n lt24h: number;\n h24to72: number;\n h72to168: number;\n gte168h: number;\n };\n slaBuckets: {\n breached: number;\n dueWithin24h: number;\n dueWithin72h: number;\n beyond72h: number;\n missingSla: number;\n };\n byOrg: Array<{ slug: string; pendingProposals: number }>;\n };\n takedownQueue: {\n totalOpen: number;\n statusCounts: {\n todo: number;\n inProgress: number;\n pendingInput: number;\n };\n ageBuckets: {\n lt24h: number;\n h24to72: number;\n h72to168: number;\n gte168h: number;\n };\n staleInProgress: number;\n byOrg: Array<{ slug: string; openTakedowns: number }>;\n };\n}\n\nexport interface MetricsSummaryInput {\n slug: string;\n startDate?: string;\n endDate?: string;\n brandIds?: number[];\n}\n\nexport interface MetricsSummaryResult {\n metrics: {\n reports: number;\n newThreats: number;\n threatsWatchlisted: number;\n takedownsFiled: number;\n takedownsCompleted: number;\n domainThreats: number;\n twitterThreats: number;\n telegramThreats: number;\n otherThreats: number;\n };\n blockedByDay: Array<{ date: string; count: number }>;\n blockedByType: Array<{ type: string; count: number }>;\n}\n\nexport interface MetricsFoundInput {\n slug: string;\n startDate: string;\n endDate: string;\n brandIds?: number[];\n}\n\nexport interface MetricsFoundResult {\n metric: \"new_threats\";\n found: number;\n range: {\n startDate: string;\n endDate: string;\n };\n}\n\nexport interface MetricsBreakdownInput {\n slug: string;\n by: \"day\" | \"type\" | \"brand\";\n startDate?: string;\n endDate?: string;\n brandIds?: number[];\n}\n\nexport interface MetricsBreakdownResult {\n by: \"day\" | \"type\" | \"brand\";\n points: Array<{\n key: string;\n count: number;\n date?: string;\n type?: string;\n brandId?: number;\n brandSlug?: string;\n brandName?: string;\n }>;\n}\n\nexport interface ReportAssetInput {\n content: string;\n status?: \"BLOCKED\" | \"ALLOWED\" | \"UNKNOWN\";\n brandSlug?: string;\n}\n\nexport interface ReportCreateInput {\n organizationSlug?: string;\n title?: string;\n description?: string;\n contactInfo?: string;\n attachmentUrls?: string[];\n externalSubmissionLink?: string;\n userAgent?: string;\n referrer?: string;\n assets: ReportAssetInput[];\n rawAssetsInput?: string;\n externalReporter?: {\n avatarUrl?: string;\n platformIdentifier: string;\n platform: string;\n displayName: string;\n };\n}\n\nexport interface ReportCreateResult {\n id: number;\n createdAt: string;\n organization: {\n id: number;\n slug: string;\n name: string;\n } | null;\n}\n\nexport const REPORT_REVIEW_DECISIONS = [\"APPROVE\", \"REJECT\", \"SKIP\", \"ESCALATE\"] as const;\nexport type ReportReviewDecision = (typeof REPORT_REVIEW_DECISIONS)[number];\n\nexport const REPORT_STATUSES = [\"TODO\", \"IN_PROGRESS\", \"CLOSED\"] as const;\nexport type ReportStatus = (typeof REPORT_STATUSES)[number];\n\nexport interface OrganizationReportsListInput {\n slug: string;\n limit?: number;\n cursor?: number;\n status?: string;\n searchQuery?: string;\n reporterQuery?: string;\n reportedByCustomer?: boolean;\n excludeAutomation?: boolean;\n onlyRejected?: boolean;\n reviewStatuses?: ReportReviewDecision[];\n assetTypes?: string[];\n brandIds?: number[];\n countryCodes?: string[];\n reviewedByUserId?: number;\n startDate?: string;\n endDate?: string;\n updatedAtStartDate?: string;\n updatedAtEndDate?: string;\n}\n\nexport interface OrganizationReportsListResult {\n reports: Array<{\n id: number;\n title: string;\n description: string;\n status: string | null;\n reportedByCustomer: boolean;\n createdAt: string;\n updatedAt: string;\n proposals: Array<{\n reviewStatus: string;\n asset: {\n id: number;\n type: string;\n content: string;\n status: string;\n };\n }>;\n reporter: {\n id: number;\n role: string;\n fullName: string;\n avatarUrl: string | null;\n } | null;\n externalReporter: {\n id: number;\n displayName: string | null;\n avatarUrl: string | null;\n platform: string;\n } | null;\n }>;\n nextCursor: number | null;\n totalCount: number;\n}\n\nexport const DETECTION_CONFIDENCE_LEVELS = [\"none\", \"low\", \"medium\", \"high\"] as const;\nexport type DetectionConfidence = (typeof DETECTION_CONFIDENCE_LEVELS)[number];\nexport type DetectionReportStatus = \"REPORTED\" | \"NOT_REPORTED\";\n\nexport const DETECTION_REPORTED_FILTERS = [\"reported\", \"not_reported\"] as const;\nexport type DetectionReportedFilter = (typeof DETECTION_REPORTED_FILTERS)[number];\n\nexport const LIVENESS_FILTER_VALUES = [\"ALIVE\", \"DEAD\", \"UNKNOWN\"] as const;\nexport type LivenessFilterValue = (typeof LIVENESS_FILTER_VALUES)[number];\n\nexport const WATCHLIST_FILTER_VALUES = [\"ENABLED\", \"DISABLED\"] as const;\nexport type WatchlistFilterValue = (typeof WATCHLIST_FILTER_VALUES)[number];\n\nexport interface DetectionListInput {\n slug: string;\n cursor?: number;\n limit?: number;\n query?: string;\n startDate?: string;\n endDate?: string;\n sources?: string[];\n confidence?: DetectionConfidence[];\n assetStatus?: string[];\n assetType?: string[];\n brandIds?: number[];\n liveness?: LivenessFilterValue[];\n watchlist?: WatchlistFilterValue[];\n reported?: DetectionReportedFilter[];\n countryCodes?: string[];\n onlyDeleted?: boolean;\n}\n\nexport interface DetectionListItem {\n id: number;\n threatContent: string;\n source: string;\n createdAt: string;\n confidence: DetectionConfidence;\n reportStatus: DetectionReportStatus;\n asset: {\n id: number;\n content: string;\n type: string;\n status: string;\n };\n}\n\nexport interface DetectionListResult {\n detections: DetectionListItem[];\n nextCursor?: number;\n}\n\nexport interface ThreatsListInput {\n query?: string;\n startDate?: string;\n endDate?: string;\n assetType?: string[];\n sorting?: Array<{ key: string; direction: \"asc\" | \"desc\" }>;\n perPage?: number;\n nextPage?: string;\n}\n\nexport interface ThreatItem {\n id: number;\n content: string;\n type: string;\n blockedAt: string;\n}\n\nexport interface ThreatsListResult {\n threats: ThreatItem[];\n next_page: string | null;\n}\n\nexport interface OrganizationAssetsListInput {\n type?: string;\n groupId?: number;\n query?: string;\n perPage?: number;\n nextPage?: string;\n}\n\nexport interface OrganizationAssetItem {\n id: number;\n content: string;\n type: string;\n status: string;\n name: string | null;\n description: string | null;\n group: { id: number; name: string } | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface OrganizationAssetsListResult {\n assets: OrganizationAssetItem[];\n next_page: string | null;\n}\n\nexport interface AssetGroupItem {\n id: number;\n name: string;\n assetCount: number;\n}\n\nexport interface OrganizationAssetGroupsListResult {\n groups: AssetGroupItem[];\n}\n\nexport type BrandType = \"ORGANIZATION\" | \"INDIVIDUAL\";\n\nexport interface BrandItem {\n id: number;\n slug: string;\n name: string;\n type: BrandType;\n description: string | null;\n brandGroupId: number | null;\n createdAt: string;\n}\n\nexport interface OrganizationBrandsListResult {\n brands: BrandItem[];\n}\n\nexport interface ReportsSearchInput {\n assetContents: string[];\n reportedByCustomer?: boolean;\n}\n\nexport interface ReportsSearchResultItem {\n id: number;\n status: string;\n reportedByCustomer: boolean;\n assets: string[];\n}\n\nexport interface ReportsSearchResult {\n reports: ReportsSearchResultItem[];\n}\n\nexport interface UserMeResult {\n user: {\n id: number;\n name: string;\n avatarUrl: string | null;\n email: string;\n role: string;\n protectionConfig: {\n linkMonitoring: boolean;\n socialMediaScanning: boolean;\n historyScanning: boolean;\n } | null;\n };\n}\n\nexport interface ValidateApiKeyResult {\n status: \"success\";\n message: string;\n}\n\nexport const TAKEDOWN_STATUSES = [\n \"TODO\",\n \"IN_PROGRESS\",\n \"COMPLETED\",\n \"CANCELLED\",\n \"PENDING_RETRACTION\",\n \"RETRACTION_SENT\",\n \"RETRACTED\",\n \"PENDING_INPUT\",\n] as const;\nexport type TakedownStatus = (typeof TAKEDOWN_STATUSES)[number];\n\nexport const LIVENESS_STATUSES = [\"UNKNOWN\", \"ALIVE\", \"DEAD\"] as const;\nexport type LivenessStatus = (typeof LIVENESS_STATUSES)[number];\n\nexport const TAKEDOWN_SORT_KEYS = [\n \"updatedAt\",\n \"createdAt\",\n \"takedownStatus\",\n \"takedownUpdatedAt\",\n \"assigneeId\",\n \"brandId\",\n] as const;\nexport type TakedownSortKey = (typeof TAKEDOWN_SORT_KEYS)[number];\n\nexport interface TakedownsListInput {\n organizationSlug?: string;\n query?: string;\n startDate?: string;\n endDate?: string;\n assetType?: string[];\n takedownStatus?: TakedownStatus[];\n livenessStatus?: LivenessStatus[];\n brandIds?: number[];\n assigneeIds?: number[];\n startedAtStartDate?: string;\n startedAtEndDate?: string;\n hideAutomatedTakedowns?: boolean;\n hideAutomatedLivenessChecks?: boolean;\n sorting?: Array<{ key: TakedownSortKey; direction: \"asc\" | \"desc\" }>;\n perPage?: number;\n nextPage?: string;\n}\n\nexport interface TakedownItem {\n id: number;\n status: TakedownStatus;\n createdAt: string;\n updatedAt: string;\n asset: {\n id: number;\n content: string;\n type: string;\n livenessStatus: LivenessStatus | null;\n };\n assignee: {\n id: number;\n fullName: string | null;\n } | null;\n brand: {\n id: number;\n name: string;\n slug: string | null;\n } | null;\n}\n\nexport interface TakedownsListResult {\n takedowns: TakedownItem[];\n next_page: string | null;\n}\n\nexport const ORGANIZATION_METRICS_INCLUDE_FIELDS = [\n \"reports\",\n \"newThreats\",\n \"threatsWatchlisted\",\n \"takedownsFiled\",\n \"takedownsCompleted\",\n \"domainThreats\",\n \"twitterThreats\",\n \"telegramThreats\",\n \"otherThreats\",\n \"blockedByType\",\n \"blockedByDay\",\n] as const;\n\nexport type OrganizationMetricsIncludeField =\n (typeof ORGANIZATION_METRICS_INCLUDE_FIELDS)[number];\n\nexport interface OrganizationMetricsServicesFilter {\n reporting?: { active?: boolean };\n reviewing?: { active?: boolean };\n protection?: { active?: boolean };\n takedowns?: { active?: boolean; automated?: boolean };\n detection?: { active?: boolean };\n darkWebMonitoring?: { active?: boolean };\n}\n\nexport interface OrganizationMetricsInput {\n organizationSlug?: string;\n slugs?: string[];\n allMyOrgs?: boolean;\n subscriptionStatus?: string[];\n services?: OrganizationMetricsServicesFilter;\n brandSlug?: string;\n startDate?: string;\n endDate?: string;\n include?: OrganizationMetricsIncludeField[];\n}\n\nexport interface OrganizationMetricsResultMetrics {\n reports: number | null;\n newThreats: number | null;\n threatsWatchlisted: number | null;\n takedownsFiled: number | null;\n takedownsCompleted: number | null;\n domainThreats: number | null;\n twitterThreats: number | null;\n telegramThreats: number | null;\n otherThreats: number | null;\n}\n\nexport interface OrganizationMetricsResult {\n metrics: OrganizationMetricsResultMetrics;\n blockedByType: Array<{ type: string; count: number }> | null;\n blockedByDay: Array<{ date: string; count: number }> | null;\n averages: {\n perDay: OrganizationMetricsResultMetrics | null;\n perOrgPerDay: OrganizationMetricsResultMetrics | null;\n windowDays: number | null;\n };\n perOrg: Record<\n string,\n {\n metrics: OrganizationMetricsResultMetrics;\n blockedByType: Array<{ type: string; count: number }> | null;\n blockedByDay: Array<{ date: string; count: number }> | null;\n }\n > | null;\n scope: {\n mode: \"single\" | \"multi\";\n orgs: string[];\n resolvedFrom: \"api-key\" | \"organizationSlug\" | \"slugs\" | \"allMyOrgs\";\n };\n}\n\nexport type HealthcheckCategory =\n | \"detection\"\n | \"reviewing\"\n | \"blocklisting\"\n | \"takedowns\"\n | \"assets\"\n | \"organization\";\n\nexport type HealthcheckSeverity = \"ok\" | \"warn\" | \"fail\";\n\nexport interface HealthcheckFinding {\n kind: string;\n ref: string | null;\n message: string;\n severity: \"warn\" | \"fail\";\n}\n\nexport interface HealthcheckResult {\n id: string;\n title: string;\n category: HealthcheckCategory;\n generatedAt: string;\n scope: { slug: string | null };\n ok: boolean;\n severity: HealthcheckSeverity;\n observed: Record<string, number | string | boolean | null>;\n threshold: Record<string, number | string | boolean | null>;\n findings: HealthcheckFinding[];\n suggestedAction: string | null;\n appUrl: string | null;\n}\n\nexport interface HealthcheckRegistryEntry {\n id: string;\n title: string;\n description: string;\n category: HealthcheckCategory;\n implemented: boolean;\n endpoint: string | null;\n defaultThreshold?: Record<string, number | string>;\n notImplementedReason?: string;\n}\n\nexport interface HealthchecksListResult {\n checks: HealthcheckRegistryEntry[];\n}\n\nexport type UserOrgsSubscriptionStatus = \"PROSPECT\" | \"TRIAL\" | \"ACTIVE\" | \"INTEGRATION\";\n\nexport type PendingApprovalService = \"protection\" | \"takedowns\";\n\nexport interface PendingServiceApproval {\n service: PendingApprovalService;\n automated: boolean;\n serviceType: string;\n serviceName: string;\n requestedAt: string;\n}\n\nexport interface UserOrgsServiceFilters {\n reporting?: { active?: boolean };\n reviewing?: { active?: boolean };\n protection?: { active?: boolean };\n takedowns?: { active?: boolean; automated?: boolean };\n detection?: { active?: boolean };\n darkWebMonitoring?: { active?: boolean };\n}\n\nexport interface UserOrgsObligatoryAdminApprovalFilter {\n active?: boolean;\n assetTypes?: string[];\n}\n\nexport interface UserOrgsPendingServiceApprovalFilter {\n active?: boolean;\n services?: PendingApprovalService[];\n}\n\nexport interface UserOrgsInput {\n query?: string;\n subscriptionStatus?: UserOrgsSubscriptionStatus[];\n services?: UserOrgsServiceFilters;\n obligatoryAdminApproval?: UserOrgsObligatoryAdminApprovalFilter;\n pendingServiceApproval?: UserOrgsPendingServiceApprovalFilter;\n}\n\nexport interface UserOrg {\n id: number;\n name: string;\n slug: string;\n avatarUrl: string | null;\n contactUrl: string | null;\n subscriptionStatus: \"PROSPECT\" | \"TRIAL\" | \"ACTIVE\" | \"INTEGRATION\" | \"INACTIVE\";\n services: {\n reporting: { active: boolean };\n reviewing: { active: boolean };\n protection: { active: boolean };\n takedowns: { active: boolean; automated: boolean };\n detection: { active: boolean };\n darkWebMonitoring: { active: boolean };\n };\n obligatoryAdminApproval: {\n active: boolean;\n assetTypes: string[];\n };\n pendingServiceApprovals: PendingServiceApproval[];\n}\n\nexport interface UserOrgsResult {\n organizations: UserOrg[];\n}\n\nexport interface UserOrgGetInput {\n slug: string;\n}\n\nexport interface UserOrgGetResult {\n organization: UserOrg;\n}\n","const ISO_DATE_REGEX =\n /^(\\d{4})-(\\d{2})-(\\d{2})(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$/;\n\nexport function parseIsoDate(value: string | undefined): Date | undefined {\n if (!value) return undefined;\n const m = ISO_DATE_REGEX.exec(value);\n if (!m) {\n throw new Error(`Invalid ISO date: '${value}'. Use YYYY-MM-DD or full ISO 8601.`);\n }\n // Normalize offset-less datetimes to UTC (matches Luxon's { zone: \"utc\" } behavior).\n // Date-only strings are already UTC per ECMAScript spec.\n const hasTime = m[4] !== undefined;\n const hasOffset = m[7] !== undefined;\n const normalized = hasTime && !hasOffset ? value + \"Z\" : value;\n const date = new Date(normalized);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid ISO date: '${value}'. Use YYYY-MM-DD or full ISO 8601.`);\n }\n // Reject impossible calendar dates that Date rolls forward (e.g. Feb 31 → Mar 3)\n if (\n date.getUTCFullYear() !== Number(m[1]) ||\n date.getUTCMonth() + 1 !== Number(m[2]) ||\n date.getUTCDate() !== Number(m[3])\n ) {\n throw new Error(`Invalid ISO date: '${value}'. Use YYYY-MM-DD or full ISO 8601.`);\n }\n return date;\n}\n\nexport function parseIsoDateString(value: string | undefined): string | undefined {\n return parseIsoDate(value)?.toISOString();\n}\n","import { parseIsoDate, parseIsoDateString } from \"./date-utils\";\nimport type {\n ApiClient,\n ApiCredential,\n AssetCheckInput,\n AssetCheckResult,\n AssetListInput,\n AssetListResult,\n AssetSearchInput,\n AssetSearchResult,\n ChainPatrolApiClientOptions,\n CredentialProvider,\n DetectionConfigRunInput,\n DetectionConfigRunResult,\n DetectionConfigUpdateInput,\n DetectionConfigUpdateResult,\n DetectionConfigValidateInput,\n DetectionConfigValidateResult,\n DetectionDriftInput,\n DetectionDriftResult,\n DetectionListInput,\n DetectionListResult,\n DetectionSource,\n HealthcheckResult,\n HealthchecksListResult,\n MetricsBreakdownInput,\n MetricsBreakdownResult,\n MetricsFoundInput,\n MetricsFoundResult,\n MetricsSummaryInput,\n MetricsSummaryResult,\n OperationsQueuesSnapshotInput,\n OperationsQueuesSnapshotResult,\n OrganizationAssetsListInput,\n OrganizationAssetsListResult,\n OrganizationAssetGroupsListResult,\n OrganizationBrandsListResult,\n OrganizationMetricsInput,\n OrganizationMetricsResult,\n OrganizationReportsListInput,\n OrganizationReportsListResult,\n ReportCreateInput,\n ReportCreateResult,\n ReportsSearchInput,\n ReportsSearchResult,\n TakedownsListInput,\n TakedownsListResult,\n ThreatsListInput,\n ThreatsListResult,\n UserMeResult,\n UserOrgGetInput,\n UserOrgGetResult,\n UserOrgsInput,\n UserOrgsResult,\n ValidateApiKeyResult,\n} from \"./types\";\n\nconst DEFAULT_BASE_URL = \"https://app.chainpatrol.io\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nfunction trimTrailingSlashes(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nexport function staticApiKey(key: string): CredentialProvider {\n return () => ({ kind: \"api-key\", value: key });\n}\n\nexport function staticBearerToken(token: string): CredentialProvider {\n return () => ({ kind: \"bearer\", value: token });\n}\n\nexport class ChainPatrolApiClient implements ApiClient {\n private readonly baseUrl: string;\n private readonly credential: CredentialProvider;\n private readonly timeoutMs: number;\n\n constructor(options: ChainPatrolApiClientOptions) {\n this.baseUrl = trimTrailingSlashes(options.baseUrl ?? DEFAULT_BASE_URL);\n this.credential = options.credential;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n }\n\n private async buildAuthHeaders(): Promise<Record<string, string>> {\n const credential = await this.credential();\n const headers: Record<string, string> = {};\n if (credential.kind === \"api-key\") {\n headers[\"x-api-key\"] = credential.value;\n } else {\n headers[\"Authorization\"] = `Bearer ${credential.value}`;\n }\n return headers;\n }\n\n private async requestGet<T>(\n path: string,\n query: Record<string, string | string[] | undefined>,\n ): Promise<T> {\n const headers = await this.buildAuthHeaders();\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item !== undefined && item !== \"\") {\n search.append(key, item);\n }\n }\n continue;\n }\n if (value !== \"\") {\n search.set(key, value);\n }\n }\n const queryString = search.toString();\n const url = `${this.baseUrl}/api/v2${path}${queryString ? `?${queryString}` : \"\"}`;\n\n let res: Response;\n try {\n res = await fetch(url, {\n method: \"GET\",\n headers,\n signal: AbortSignal.timeout(this.timeoutMs),\n });\n } catch (err) {\n throw this.wrapFetchError(err);\n }\n\n return this.handleResponse<T>(res);\n }\n\n private async request<T>(path: string, body: unknown): Promise<T> {\n const headers = await this.buildAuthHeaders();\n headers[\"Content-Type\"] = \"application/json\";\n\n let res: Response;\n try {\n res = await fetch(`${this.baseUrl}/api/v2${path}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(this.timeoutMs),\n });\n } catch (err) {\n throw this.wrapFetchError(err);\n }\n\n return this.handleResponse<T>(res);\n }\n\n private wrapFetchError(err: unknown): Error {\n if (err instanceof DOMException && err.name === \"TimeoutError\") {\n return new Error(\"Request timed out. Check your network connection and try again.\");\n }\n if (\n err instanceof TypeError &&\n (err as NodeJS.ErrnoException).code === \"ECONNREFUSED\"\n ) {\n return new Error(`Cannot connect to ${this.baseUrl}. Is the server running?`);\n }\n return new Error(\"Network error. Check your internet connection and try again.\");\n }\n\n private async handleResponse<T>(res: Response): Promise<T> {\n if (!res.ok) {\n let errorMessageFromResponse: string | null = null;\n try {\n const errorBody = (await res.json()) as { message?: string };\n errorMessageFromResponse = errorBody.message ?? null;\n } catch {\n // Response body may not be JSON; ignore parse failures\n }\n\n if (res.status === 401) {\n throw new Error(errorMessageFromResponse ?? \"Authentication failed.\");\n }\n if (res.status === 403) {\n throw new Error(\n errorMessageFromResponse ??\n \"You don't have permission to access this resource.\",\n );\n }\n if (res.status === 404) {\n throw new Error(errorMessageFromResponse ?? \"Resource not found.\");\n }\n if (res.status === 422) {\n throw new Error(errorMessageFromResponse ?? \"Request validation failed.\");\n }\n if (res.status >= 500) {\n throw new Error(\n \"ChainPatrol API is temporarily unavailable. Please try again later.\",\n );\n }\n throw new Error(errorMessageFromResponse ?? `Request failed (${res.status}).`);\n }\n\n return (await res.json()) as T;\n }\n\n assetCheck(input: AssetCheckInput) {\n return this.request<AssetCheckResult>(\"/asset/check\", input);\n }\n\n assetSearch(input: AssetSearchInput) {\n return this.request<AssetSearchResult>(\"/asset/search\", input);\n }\n\n listDetectionConfigs(slug: string) {\n return this.request<DetectionSource[]>(\"/detection/configs/list\", { slug });\n }\n\n updateDetectionConfig(input: DetectionConfigUpdateInput) {\n return this.request<DetectionConfigUpdateResult>(\"/detection/configs/update\", input);\n }\n\n runDetectionConfigs(input: DetectionConfigRunInput) {\n return this.request<DetectionConfigRunResult>(\"/detection/configs/run\", input);\n }\n\n validateDetectionConfigs(input: DetectionConfigValidateInput) {\n return this.request<DetectionConfigValidateResult>(\n \"/detection/configs/validate\",\n input,\n );\n }\n\n getDetectionDrift(input: DetectionDriftInput) {\n return this.request<DetectionDriftResult>(\"/detection/drift\", {\n ...input,\n startDate: parseIsoDate(input.startDate),\n endDate: parseIsoDate(input.endDate),\n });\n }\n\n getOperationsQueuesSnapshot(input: OperationsQueuesSnapshotInput) {\n return this.request<OperationsQueuesSnapshotResult>(\n \"/operations/queues/snapshot\",\n input,\n );\n }\n\n getMetricsSummary(input: MetricsSummaryInput) {\n return this.request<MetricsSummaryResult>(\"/metrics/summary\", {\n ...input,\n startDate: parseIsoDate(input.startDate),\n endDate: parseIsoDate(input.endDate),\n });\n }\n\n getMetricsFound(input: MetricsFoundInput) {\n return this.request<MetricsFoundResult>(\"/metrics/found\", {\n ...input,\n startDate: parseIsoDate(input.startDate),\n endDate: parseIsoDate(input.endDate),\n });\n }\n\n getMetricsBreakdown(input: MetricsBreakdownInput) {\n return this.request<MetricsBreakdownResult>(\"/metrics/breakdown\", {\n ...input,\n startDate: parseIsoDate(input.startDate),\n endDate: parseIsoDate(input.endDate),\n });\n }\n\n createReport(input: ReportCreateInput) {\n return this.request<ReportCreateResult>(\"/report/create\", input);\n }\n\n listOrganizationReports(input: OrganizationReportsListInput) {\n return this.request<OrganizationReportsListResult>(\"/public/getOrganizationReports\", {\n slug: input.slug,\n limit: input.limit ?? 10,\n cursor: input.cursor,\n status: input.status,\n searchQuery: input.searchQuery,\n reporterQuery: input.reporterQuery,\n reportedByCustomer: input.reportedByCustomer,\n excludeAutomation: input.excludeAutomation,\n onlyRejected: input.onlyRejected,\n reviewStatuses: input.reviewStatuses?.length ? input.reviewStatuses : undefined,\n assetTypes: input.assetTypes?.length ? input.assetTypes : undefined,\n brandIds: input.brandIds?.length ? input.brandIds : undefined,\n countryCodes: input.countryCodes?.length ? input.countryCodes : undefined,\n reviewedByUserId: input.reviewedByUserId,\n startDate: parseIsoDateString(input.startDate),\n endDate: parseIsoDateString(input.endDate),\n updatedAtStartDate: parseIsoDateString(input.updatedAtStartDate),\n updatedAtEndDate: parseIsoDateString(input.updatedAtEndDate),\n });\n }\n\n listTakedowns(input: TakedownsListInput) {\n return this.request<TakedownsListResult>(\"/takedowns/list\", {\n organizationSlug: input.organizationSlug,\n query: input.query,\n startDate: parseIsoDateString(input.startDate),\n endDate: parseIsoDateString(input.endDate),\n assetType: input.assetType,\n takedownStatus: input.takedownStatus,\n livenessStatus: input.livenessStatus,\n brandIds: input.brandIds?.length ? input.brandIds : undefined,\n assigneeIds: input.assigneeIds?.length ? input.assigneeIds : undefined,\n startedAtStartDate: parseIsoDateString(input.startedAtStartDate),\n startedAtEndDate: parseIsoDateString(input.startedAtEndDate),\n hideAutomatedTakedowns: input.hideAutomatedTakedowns,\n hideAutomatedLivenessChecks: input.hideAutomatedLivenessChecks,\n sorting: input.sorting,\n per_page: input.perPage,\n next_page: input.nextPage,\n });\n }\n\n getOrganizationMetrics(input: OrganizationMetricsInput) {\n return this.requestGet<OrganizationMetricsResult>(\"/organization/metrics\", {\n organizationSlug: input.organizationSlug,\n slugs: input.slugs,\n allMyOrgs: input.allMyOrgs ? \"true\" : undefined,\n subscriptionStatus: input.subscriptionStatus,\n services: input.services ? JSON.stringify(input.services) : undefined,\n brandSlug: input.brandSlug,\n startDate: parseIsoDateString(input.startDate),\n endDate: parseIsoDateString(input.endDate),\n include: input.include,\n });\n }\n\n listHealthchecks() {\n return this.request<HealthchecksListResult>(\"/healthchecks/list\", {});\n }\n\n runHealthcheck(endpoint: string, input: Record<string, unknown>) {\n return this.request<HealthcheckResult>(endpoint, input);\n }\n\n getUserOrgs(input: UserOrgsInput) {\n return this.request<UserOrgsResult>(\"/user/orgs\", input);\n }\n\n getUserOrg(input: UserOrgGetInput) {\n return this.requestGet<UserOrgGetResult>(\n `/user/orgs/${encodeURIComponent(input.slug)}`,\n {},\n );\n }\n\n listAssets(input: AssetListInput) {\n return this.request<AssetListResult>(\"/asset/list\", {\n type: input.type,\n status: input.status,\n startDate: parseIsoDateString(input.startDate),\n endDate: parseIsoDateString(input.endDate),\n per_page: input.perPage,\n next_page: input.nextPage,\n });\n }\n\n listThreats(input: ThreatsListInput) {\n return this.request<ThreatsListResult>(\"/threats/list\", {\n query: input.query,\n startDate: parseIsoDateString(input.startDate),\n endDate: parseIsoDateString(input.endDate),\n assetType: input.assetType,\n sorting: input.sorting,\n per_page: input.perPage,\n next_page: input.nextPage,\n });\n }\n\n listDetections(input: DetectionListInput) {\n const filters: Array<{\n property: string;\n operator: \"in\" | \"notIn\";\n value: unknown[];\n }> = [];\n if (input.sources?.length) {\n filters.push({ property: \"source\", operator: \"in\", value: input.sources });\n }\n if (input.confidence?.length) {\n filters.push({ property: \"confidence\", operator: \"in\", value: input.confidence });\n }\n if (input.assetStatus?.length) {\n filters.push({\n property: \"assetStatus\",\n operator: \"in\",\n value: input.assetStatus,\n });\n }\n if (input.assetType?.length) {\n filters.push({ property: \"assetType\", operator: \"in\", value: input.assetType });\n }\n if (input.brandIds?.length) {\n filters.push({ property: \"brand\", operator: \"in\", value: input.brandIds });\n }\n if (input.liveness?.length) {\n filters.push({ property: \"liveness\", operator: \"in\", value: input.liveness });\n }\n if (input.watchlist?.length) {\n filters.push({ property: \"watchlist\", operator: \"in\", value: input.watchlist });\n }\n if (input.reported?.length) {\n filters.push({ property: \"reported\", operator: \"in\", value: input.reported });\n }\n if (input.countryCodes?.length) {\n filters.push({\n property: \"countryCode\",\n operator: \"in\",\n value: input.countryCodes,\n });\n }\n if (input.onlyDeleted) {\n filters.push({ property: \"deleted\", operator: \"in\", value: [\"deleted\"] });\n }\n return this.request<DetectionListResult>(\"/detection/list\", {\n slug: input.slug,\n cursor: input.cursor,\n limit: input.limit,\n query: input.query,\n startDate: parseIsoDate(input.startDate),\n endDate: parseIsoDate(input.endDate),\n filters: filters.length > 0 ? filters : undefined,\n });\n }\n\n searchReports(input: ReportsSearchInput) {\n return this.request<ReportsSearchResult>(\"/reports/search\", input);\n }\n\n listOrganizationAssets(input: OrganizationAssetsListInput) {\n return this.requestGet<OrganizationAssetsListResult>(\"/organization/assets\", {\n type: input.type,\n groupId: input.groupId !== undefined ? String(input.groupId) : undefined,\n query: input.query,\n per_page: input.perPage !== undefined ? String(input.perPage) : undefined,\n next_page: input.nextPage,\n });\n }\n\n listOrganizationAssetGroups() {\n return this.requestGet<OrganizationAssetGroupsListResult>(\n \"/organization/asset-groups\",\n {},\n );\n }\n\n listOrganizationBrands() {\n return this.requestGet<OrganizationBrandsListResult>(\"/organization/brands\", {});\n }\n\n getCurrentUser() {\n return this.request<UserMeResult>(\"/user/me\", {});\n }\n\n validateApiKey() {\n return this.requestGet<ValidateApiKeyResult>(\"/validate\", {});\n }\n}\n"]}
@@ -0,0 +1,60 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __pow = Math.pow;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
33
+ var __export = (target, all) => {
34
+ for (var name in all)
35
+ __defProp(target, name, { get: all[name], enumerable: true });
36
+ };
37
+ var __async = (__this, __arguments, generator) => {
38
+ return new Promise((resolve, reject) => {
39
+ var fulfilled = (value) => {
40
+ try {
41
+ step(generator.next(value));
42
+ } catch (e) {
43
+ reject(e);
44
+ }
45
+ };
46
+ var rejected = (value) => {
47
+ try {
48
+ step(generator.throw(value));
49
+ } catch (e) {
50
+ reject(e);
51
+ }
52
+ };
53
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
54
+ step((generator = generator.apply(__this, __arguments)).next());
55
+ });
56
+ };
57
+
58
+ export { __async, __export, __objRest, __pow, __spreadProps, __spreadValues };
59
+ //# sourceMappingURL=chunk-4U7ZT42S.mjs.map
60
+ //# sourceMappingURL=chunk-4U7ZT42S.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-4U7ZT42S.mjs"}