@chainpatrol/sdk 1.2.0 → 1.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.mjs CHANGED
@@ -7133,7 +7133,8 @@ var TakedownStatus = {
7133
7133
  PENDING_RETRACTION: "PENDING_RETRACTION",
7134
7134
  RETRACTION_SENT: "RETRACTION_SENT",
7135
7135
  RETRACTED: "RETRACTED",
7136
- PENDING_INPUT: "PENDING_INPUT"
7136
+ PENDING_INPUT: "PENDING_INPUT",
7137
+ PENDING_EVIDENCE: "PENDING_EVIDENCE"
7137
7138
  };
7138
7139
  var AssetStatus = {
7139
7140
  UNKNOWN: "UNKNOWN",
@@ -7326,10 +7327,17 @@ z.object({
7326
7327
  /** An array of assets with their content, type, status, and update timestamp. */
7327
7328
  assets: z.array(
7328
7329
  z.object({
7330
+ id: z.number().describe("Asset ID \u2014 use to reference the asset in follow-up calls"),
7329
7331
  content: z.string().describe("Asset content"),
7330
7332
  type: z.nativeEnum(AssetType).describe("Asset type"),
7331
7333
  status: z.nativeEnum(AssetStatus).describe("The result of the asset status check"),
7332
7334
  watchStatus: z.nativeEnum(WatchStatus).describe("The watch status of the asset"),
7335
+ livenessStatus: z.nativeEnum(LivenessStatus).nullable().describe(
7336
+ "Whether the asset is currently reachable (`ALIVE`), gone (`DEAD`), or hasn't been checked (`UNKNOWN`). `null` when liveness has never been evaluated."
7337
+ ),
7338
+ blockedAt: z.date().nullable().describe(
7339
+ "When the asset transitioned to BLOCKED status. `null` for non-blocked assets or blocks predating the field. Distinct from `updatedAt`, which changes on any mutation."
7340
+ ),
7333
7341
  updatedAt: z.date()
7334
7342
  })
7335
7343
  ),
@@ -7597,8 +7605,8 @@ z.object({
7597
7605
  }),
7598
7606
  ok: z.boolean(),
7599
7607
  severity: HealthcheckSeveritySchema,
7600
- observed: z.record(z.union([z.number(), z.string(), z.boolean(), z.null()])),
7601
- threshold: z.record(z.union([z.number(), z.string(), z.boolean(), z.null()])),
7608
+ observed: z.record(z.union([z.number(), z.string(), z.boolean()]).nullable()),
7609
+ threshold: z.record(z.union([z.number(), z.string(), z.boolean()]).nullable()),
7602
7610
  findings: z.array(HealthcheckFindingSchema),
7603
7611
  suggestedAction: z.string().nullable(),
7604
7612
  appUrl: z.string().nullable()
@@ -7759,6 +7767,12 @@ var organizationAssetItemSchema = z.object({
7759
7767
  id: z.number().describe("Group ID"),
7760
7768
  name: z.string().describe("Group name")
7761
7769
  }).nullable().describe("Asset group information"),
7770
+ livenessStatus: z.nativeEnum(LivenessStatus).nullable().describe(
7771
+ "Whether the asset is currently reachable (`ALIVE`), gone (`DEAD`), or hasn't been checked (`UNKNOWN`). `null` when liveness has never been evaluated."
7772
+ ),
7773
+ blockedAt: z.date().nullable().describe(
7774
+ "When the asset transitioned to BLOCKED status. `null` for non-blocked assets. Distinct from `updatedAt`."
7775
+ ),
7762
7776
  createdAt: z.date().describe("When the asset was created"),
7763
7777
  updatedAt: z.date().describe("When the asset was last updated")
7764
7778
  });
@@ -8267,6 +8281,7 @@ var AssetScanEnrichmentType = /* @__PURE__ */ ((AssetScanEnrichmentType2) => {
8267
8281
  AssetScanEnrichmentType2["FARCASTER_MINIAPP"] = "miniapp";
8268
8282
  AssetScanEnrichmentType2["TELEGRAM_PROFILE"] = "telegram_profile";
8269
8283
  AssetScanEnrichmentType2["INSTAGRAM_PROFILE"] = "instagram_profile";
8284
+ AssetScanEnrichmentType2["FACEBOOK_PROFILE"] = "facebook_profile";
8270
8285
  AssetScanEnrichmentType2["YOUTUBE_VIDEO"] = "youtube_video";
8271
8286
  AssetScanEnrichmentType2["YOUTUBE_CHANNEL"] = "youtube_channel";
8272
8287
  AssetScanEnrichmentType2["APPLE_APP_STORE_LISTING"] = "apple_app_store_listing";
@@ -8281,11 +8296,13 @@ var AssetScanEnrichmentType = /* @__PURE__ */ ((AssetScanEnrichmentType2) => {
8281
8296
  AssetScanEnrichmentType2["VIMEO_VIDEO"] = "vimeo_video";
8282
8297
  AssetScanEnrichmentType2["VIMEO_PROFILE"] = "vimeo_profile";
8283
8298
  AssetScanEnrichmentType2["STACKBLITZ_PAGE"] = "stackblitz_page";
8299
+ AssetScanEnrichmentType2["LEETCODE_PAGE"] = "leetcode_page";
8284
8300
  AssetScanEnrichmentType2["NPM_PACKAGE"] = "npm_package";
8285
8301
  AssetScanEnrichmentType2["PYPI_PACKAGE"] = "pypi_package";
8286
8302
  AssetScanEnrichmentType2["RUST_PACKAGE"] = "rust_package";
8287
8303
  AssetScanEnrichmentType2["LINKEDIN_PROFILE"] = "linkedin_profile";
8288
8304
  AssetScanEnrichmentType2["META_AD"] = "meta_ad";
8305
+ AssetScanEnrichmentType2["GOOGLE_AD"] = "google_ad";
8289
8306
  AssetScanEnrichmentType2["CONTRACT_DEPLOYER"] = "contract_deployer";
8290
8307
  return AssetScanEnrichmentType2;
8291
8308
  })(AssetScanEnrichmentType || {});
@@ -8302,6 +8319,7 @@ var AssetScanEnrichmentSource = /* @__PURE__ */ ((AssetScanEnrichmentSource2) =>
8302
8319
  AssetScanEnrichmentSource2["NEYNAR_API"] = "neynar_api";
8303
8320
  AssetScanEnrichmentSource2["TELEGRAM_API"] = "telegram_api";
8304
8321
  AssetScanEnrichmentSource2["INSTAGRAM_API"] = "instagram_api";
8322
+ AssetScanEnrichmentSource2["FACEBOOK_API"] = "facebook_api";
8305
8323
  AssetScanEnrichmentSource2["YOUTUBE_API"] = "youtube_api";
8306
8324
  AssetScanEnrichmentSource2["APPLE_APP_STORE_API"] = "apple_app_store_api";
8307
8325
  AssetScanEnrichmentSource2["GOOGLE_PLAY_STORE_API"] = "google_play_store_api";
@@ -8313,11 +8331,13 @@ var AssetScanEnrichmentSource = /* @__PURE__ */ ((AssetScanEnrichmentSource2) =>
8313
8331
  AssetScanEnrichmentSource2["DAILYMOTION_API"] = "dailymotion_api";
8314
8332
  AssetScanEnrichmentSource2["VIMEO_API"] = "vimeo_api";
8315
8333
  AssetScanEnrichmentSource2["STACKBLITZ_API"] = "stackblitz_api";
8334
+ AssetScanEnrichmentSource2["LEETCODE_API"] = "leetcode_api";
8316
8335
  AssetScanEnrichmentSource2["NPM_REGISTRY_API"] = "npm_registry_api";
8317
8336
  AssetScanEnrichmentSource2["PYPI_REGISTRY_API"] = "pypi_registry_api";
8318
8337
  AssetScanEnrichmentSource2["CRATES_IO_API"] = "crates_io_api";
8319
8338
  AssetScanEnrichmentSource2["APIFY_LINKEDIN_API"] = "apify_linkedin_api";
8320
8339
  AssetScanEnrichmentSource2["META_ADS_LIBRARY"] = "meta_ads_library";
8340
+ AssetScanEnrichmentSource2["GOOGLE_ADS_TRANSPARENCY_CENTER"] = "google_ads_transparency_center";
8321
8341
  AssetScanEnrichmentSource2["ETHERSCAN_API"] = "etherscan_api";
8322
8342
  return AssetScanEnrichmentSource2;
8323
8343
  })(AssetScanEnrichmentSource || {});
@@ -8341,6 +8361,8 @@ var ASSET_SCAN_ENRICHMENT_TYPE_LABELS = {
8341
8361
  ["telegram_profile" /* TELEGRAM_PROFILE */]: "Telegram Profile",
8342
8362
  // Instagram
8343
8363
  ["instagram_profile" /* INSTAGRAM_PROFILE */]: "Instagram Profile",
8364
+ // Facebook
8365
+ ["facebook_profile" /* FACEBOOK_PROFILE */]: "Facebook Profile",
8344
8366
  // YouTube
8345
8367
  ["youtube_video" /* YOUTUBE_VIDEO */]: "YouTube Video",
8346
8368
  ["youtube_channel" /* YOUTUBE_CHANNEL */]: "YouTube Channel",
@@ -8366,6 +8388,8 @@ var ASSET_SCAN_ENRICHMENT_TYPE_LABELS = {
8366
8388
  ["vimeo_profile" /* VIMEO_PROFILE */]: "Vimeo Profile",
8367
8389
  // Stackblitz
8368
8390
  ["stackblitz_page" /* STACKBLITZ_PAGE */]: "Stackblitz Page",
8391
+ // Leetcode
8392
+ ["leetcode_page" /* LEETCODE_PAGE */]: "Leetcode Page",
8369
8393
  // NPM
8370
8394
  ["npm_package" /* NPM_PACKAGE */]: "NPM Package",
8371
8395
  // PyPI
@@ -8376,6 +8400,8 @@ var ASSET_SCAN_ENRICHMENT_TYPE_LABELS = {
8376
8400
  ["linkedin_profile" /* LINKEDIN_PROFILE */]: "LinkedIn Profile",
8377
8401
  // Meta Ads
8378
8402
  ["meta_ad" /* META_AD */]: "Meta Ad",
8403
+ // Google Ads
8404
+ ["google_ad" /* GOOGLE_AD */]: "Google Ad",
8379
8405
  // Crypto / Onchain
8380
8406
  ["contract_deployer" /* CONTRACT_DEPLOYER */]: "Contract Deployer"
8381
8407
  };
@@ -8397,6 +8423,8 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_LABELS = {
8397
8423
  ["telegram_api" /* TELEGRAM_API */]: "Telegram API",
8398
8424
  // Instagram
8399
8425
  ["instagram_api" /* INSTAGRAM_API */]: "Instagram API",
8426
+ // Facebook
8427
+ ["facebook_api" /* FACEBOOK_API */]: "Facebook API",
8400
8428
  // YouTube
8401
8429
  ["youtube_api" /* YOUTUBE_API */]: "YouTube API",
8402
8430
  // Apple App Store
@@ -8418,6 +8446,8 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_LABELS = {
8418
8446
  ["vimeo_api" /* VIMEO_API */]: "Vimeo API",
8419
8447
  // Stackblitz
8420
8448
  ["stackblitz_api" /* STACKBLITZ_API */]: "Stackblitz API",
8449
+ // Leetcode
8450
+ ["leetcode_api" /* LEETCODE_API */]: "Leetcode API",
8421
8451
  // NPM
8422
8452
  ["npm_registry_api" /* NPM_REGISTRY_API */]: "NPM Registry API",
8423
8453
  // PyPI
@@ -8428,6 +8458,8 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_LABELS = {
8428
8458
  ["apify_linkedin_api" /* APIFY_LINKEDIN_API */]: "Apify LinkedIn API",
8429
8459
  // Meta Ads
8430
8460
  ["meta_ads_library" /* META_ADS_LIBRARY */]: "Meta Ads Library",
8461
+ // Google Ads
8462
+ ["google_ads_transparency_center" /* GOOGLE_ADS_TRANSPARENCY_CENTER */]: "Google Ads Transparency Center",
8431
8463
  // Crypto / Onchain
8432
8464
  ["etherscan_api" /* ETHERSCAN_API */]: "Etherscan"
8433
8465
  };
@@ -8482,6 +8514,8 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
8482
8514
  ["telegram_api" /* TELEGRAM_API */]: ["telegram_profile" /* TELEGRAM_PROFILE */],
8483
8515
  // Instagram-related sources
8484
8516
  ["instagram_api" /* INSTAGRAM_API */]: ["instagram_profile" /* INSTAGRAM_PROFILE */],
8517
+ // Facebook-related sources
8518
+ ["facebook_api" /* FACEBOOK_API */]: ["facebook_profile" /* FACEBOOK_PROFILE */],
8485
8519
  // YouTube-related sources
8486
8520
  ["youtube_api" /* YOUTUBE_API */]: [
8487
8521
  "youtube_video" /* YOUTUBE_VIDEO */,
@@ -8515,6 +8549,8 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
8515
8549
  ],
8516
8550
  // Stackblitz-related sources
8517
8551
  ["stackblitz_api" /* STACKBLITZ_API */]: ["stackblitz_page" /* STACKBLITZ_PAGE */],
8552
+ // Leetcode-related sources
8553
+ ["leetcode_api" /* LEETCODE_API */]: ["leetcode_page" /* LEETCODE_PAGE */],
8518
8554
  // NPM-related sources
8519
8555
  ["npm_registry_api" /* NPM_REGISTRY_API */]: ["npm_package" /* NPM_PACKAGE */],
8520
8556
  // PyPI-related sources
@@ -8527,6 +8563,10 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
8527
8563
  ],
8528
8564
  // Meta Ads-related sources
8529
8565
  ["meta_ads_library" /* META_ADS_LIBRARY */]: ["meta_ad" /* META_AD */],
8566
+ // Google Ads-related sources
8567
+ ["google_ads_transparency_center" /* GOOGLE_ADS_TRANSPARENCY_CENTER */]: [
8568
+ "google_ad" /* GOOGLE_AD */
8569
+ ],
8530
8570
  // Crypto / Onchain sources
8531
8571
  ["etherscan_api" /* ETHERSCAN_API */]: ["contract_deployer" /* CONTRACT_DEPLOYER */]
8532
8572
  };
@@ -11393,7 +11433,8 @@ var delay = (ms) => {
11393
11433
  var whois_exports = {};
11394
11434
  __export(whois_exports, {
11395
11435
  extractWhoisCountry: () => extractWhoisCountry,
11396
- extractWhoisPayload: () => extractWhoisPayload
11436
+ extractWhoisPayload: () => extractWhoisPayload,
11437
+ normalizeRegistrar: () => normalizeRegistrar
11397
11438
  });
11398
11439
  function extractWhoisPayload(raw) {
11399
11440
  var _a;
@@ -11418,6 +11459,9 @@ var WHOIS_COUNTRY_KEY_ALIASES = /* @__PURE__ */ new Set([
11418
11459
  function normalizeWhoisKey(key) {
11419
11460
  return key.toLowerCase().replace(/[^a-z0-9]/g, "");
11420
11461
  }
11462
+ function normalizeRegistrar(value) {
11463
+ return value.toLowerCase().replace(/[^a-z0-9]/g, "");
11464
+ }
11421
11465
  function parseWhoisString(value) {
11422
11466
  if (typeof value !== "string") {
11423
11467
  return void 0;
@@ -11971,13 +12015,25 @@ for parsing the dates.`
11971
12015
  var takedownItemSchema = z.object({
11972
12016
  id: z.number().describe("Takedown ID"),
11973
12017
  status: z.nativeEnum(TakedownStatus).describe("Takedown status"),
12018
+ externalId: z.string().nullable().describe(
12019
+ "Provider's own reference for this takedown (e.g. CleanDNS report ID, registrar ticket number). Use this to reconcile a takedown against the vendor's dashboard. `null` when no vendor has picked it up yet."
12020
+ ),
12021
+ hasFilingDelay: z.boolean().describe(
12022
+ "Manually set by staff to exclude the takedown from median-time metrics when its filing was delayed for reasons unrelated to platform performance. Useful for explaining a stuck-looking takedown."
12023
+ ),
12024
+ hasLivenessCheckDelay: z.boolean().describe(
12025
+ "Manually set by staff to exclude the takedown from median-time metrics when the liveness-check step was delayed for reasons unrelated to platform performance."
12026
+ ),
11974
12027
  createdAt: z.date().describe("When the takedown was created"),
11975
12028
  updatedAt: z.date().describe("When the takedown was last updated"),
11976
12029
  asset: z.object({
11977
12030
  id: z.number().describe("Asset ID"),
11978
12031
  content: z.string().describe("Asset content (URL, handle, etc.)"),
11979
12032
  type: z.nativeEnum(AssetType).describe("Asset type"),
11980
- livenessStatus: z.nativeEnum(LivenessStatus).nullable().describe("Asset liveness status")
12033
+ livenessStatus: z.nativeEnum(LivenessStatus).nullable().describe("Asset liveness status"),
12034
+ blockedAt: z.date().nullable().describe(
12035
+ "When the asset was blocked (transitioned to BLOCKED status). `null` if the asset was never blocked (rare for takedown rows). Distinct from `updatedAt`, which changes on any mutation."
12036
+ )
11981
12037
  }).describe("Associated asset information"),
11982
12038
  assignee: z.object({
11983
12039
  id: z.number().describe("Assignee user ID"),
@@ -11987,7 +12043,25 @@ var takedownItemSchema = z.object({
11987
12043
  id: z.number().describe("Brand ID"),
11988
12044
  name: z.string().describe("Brand name"),
11989
12045
  slug: z.string().nullable().describe("Brand slug")
11990
- }).nullable().describe("Associated brand information")
12046
+ }).nullable().describe("Associated brand information"),
12047
+ domainRegistrar: z.object({
12048
+ id: z.number().describe("Provider ID"),
12049
+ name: z.string().describe("Provider name (e.g. `Namecheap`, `GoDaddy`)")
12050
+ }).nullable().describe(
12051
+ "Domain registrar assigned to this takedown. `null` when unresolved. Distinct from the per-task `takedownProvider` \u2014 this is the takedown-level assignment for the domain itself."
12052
+ ),
12053
+ hostingProvider: z.object({
12054
+ id: z.number().describe("Provider ID"),
12055
+ name: z.string().describe("Provider name (e.g. `Cloudflare`, `AWS`)")
12056
+ }).nullable().describe(
12057
+ "Hosting provider assigned to this takedown. `null` when unresolved. Answers 'who hosts this?' without a follow-up call."
12058
+ ),
12059
+ tldRegistrar: z.object({
12060
+ id: z.number().describe("Provider ID"),
12061
+ name: z.string().describe("TLD registrar name (e.g. `Verisign`, `Public Interest Registry`)")
12062
+ }).nullable().describe(
12063
+ "Top-level-domain registrar assigned to this takedown. `null` when unresolved."
12064
+ )
11991
12065
  });
11992
12066
  z.object({
11993
12067
  takedowns: z.array(takedownItemSchema).describe("List of takedowns"),
@@ -12079,6 +12153,9 @@ z.object({
12079
12153
  id: z.number().describe("Threat ID"),
12080
12154
  content: z.string().describe("Threat content"),
12081
12155
  type: z.nativeEnum(AssetType).describe("Asset type"),
12156
+ livenessStatus: z.nativeEnum(LivenessStatus).nullable().describe(
12157
+ "Whether the blocked threat is currently reachable (`ALIVE`), gone (`DEAD`), or unchecked (`UNKNOWN`). Use to filter out dead threats without a second call."
12158
+ ),
12082
12159
  blockedAt: z.date().describe("When the asset was blocked")
12083
12160
  })
12084
12161
  ),