@chainpatrol/sdk 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1274,17 +1274,17 @@ var PolyDateFormatter = class {
1274
1274
  constructor(dt, intl, opts) {
1275
1275
  this.opts = opts;
1276
1276
  this.originalZone = void 0;
1277
- let z64 = void 0;
1277
+ let z68 = void 0;
1278
1278
  if (this.opts.timeZone) {
1279
1279
  this.dt = dt;
1280
1280
  } else if (dt.zone.type === "fixed") {
1281
1281
  const gmtOffset = -1 * (dt.offset / 60);
1282
1282
  const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;
1283
1283
  if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {
1284
- z64 = offsetZ;
1284
+ z68 = offsetZ;
1285
1285
  this.dt = dt;
1286
1286
  } else {
1287
- z64 = "UTC";
1287
+ z68 = "UTC";
1288
1288
  this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ minutes: dt.offset });
1289
1289
  this.originalZone = dt.zone;
1290
1290
  }
@@ -1292,14 +1292,14 @@ var PolyDateFormatter = class {
1292
1292
  this.dt = dt;
1293
1293
  } else if (dt.zone.type === "iana") {
1294
1294
  this.dt = dt;
1295
- z64 = dt.zone.name;
1295
+ z68 = dt.zone.name;
1296
1296
  } else {
1297
- z64 = "UTC";
1297
+ z68 = "UTC";
1298
1298
  this.dt = dt.setZone("UTC").plus({ minutes: dt.offset });
1299
1299
  this.originalZone = dt.zone;
1300
1300
  }
1301
1301
  const intlOpts = __spreadValues({}, this.opts);
1302
- intlOpts.timeZone = intlOpts.timeZone || z64;
1302
+ intlOpts.timeZone = intlOpts.timeZone || z68;
1303
1303
  this.dtf = getCachedDTF(intl, intlOpts);
1304
1304
  }
1305
1305
  format() {
@@ -7033,6 +7033,14 @@ zod.z.object({
7033
7033
  zod.z.object({
7034
7034
  noteId: zod.z.number().int().positive()
7035
7035
  });
7036
+ var getAssetSubscriptionSchema = zod.z.object({
7037
+ slug: zod.z.string().min(1),
7038
+ assetId: zod.z.number().int().positive()
7039
+ });
7040
+ getAssetSubscriptionSchema.extend({
7041
+ /** True to follow this asset, false to stop following it. */
7042
+ subscribed: zod.z.boolean()
7043
+ });
7036
7044
  var ASSET_TAGS = {
7037
7045
  ENFORCEMENT_EXHAUSTED: {
7038
7046
  label: "Enforcement Exhausted",
@@ -7062,6 +7070,9 @@ zod.z.object({
7062
7070
  email: zod.z.string().email(),
7063
7071
  description: zod.z.string().optional().default("")
7064
7072
  });
7073
+ zod.z.object({
7074
+ slug: zod.z.string().min(1)
7075
+ });
7065
7076
  zod.z.object({
7066
7077
  /** Canonicalization algorithm version the client computed its prefixes with. */
7067
7078
  algoVersion: zod.z.number().int().positive(),
@@ -7210,7 +7221,8 @@ var AssetType = {
7210
7221
  SMARTMONEYMATCH: "SMARTMONEYMATCH",
7211
7222
  APK_GOLD: "APK_GOLD",
7212
7223
  GLASSDOOR: "GLASSDOOR",
7213
- PUMP_FUN: "PUMP_FUN"
7224
+ PUMP_FUN: "PUMP_FUN",
7225
+ TUMBLR: "TUMBLR"
7214
7226
  };
7215
7227
  var LivenessStatus = {
7216
7228
  UNKNOWN: "UNKNOWN",
@@ -7539,6 +7551,7 @@ var ThreatDetectionSourceKey = /* @__PURE__ */ ((ThreatDetectionSourceKey2) => {
7539
7551
  ThreatDetectionSourceKey2["BLOCKLIST"] = "blocklist";
7540
7552
  ThreatDetectionSourceKey2["APPLE_APP_STORE"] = "apple_app_store";
7541
7553
  ThreatDetectionSourceKey2["GOOGLE_ADS_SEARCH"] = "google_ads_search";
7554
+ ThreatDetectionSourceKey2["GOOGLE_ADS_TRANSPARENCY_SEARCH"] = "google_ads_transparency_search";
7542
7555
  ThreatDetectionSourceKey2["MOZILLA_ADDON_SEARCH"] = "mozilla_addon_search";
7543
7556
  ThreatDetectionSourceKey2["REDDIT_SUBREDDIT_SEARCH"] = "reddit_subreddit_search";
7544
7557
  ThreatDetectionSourceKey2["ASSET_CHECK"] = "asset_check";
@@ -7585,638 +7598,47 @@ var ThreatDetectionScope = /* @__PURE__ */ ((ThreatDetectionScope2) => {
7585
7598
  return ThreatDetectionScope2;
7586
7599
  })(ThreatDetectionScope || {});
7587
7600
 
7588
- // ../../internal/utils/src/enrichments.ts
7589
- var enrichments_exports = {};
7590
- __export(enrichments_exports, {
7591
- ASSET_SCAN_ENRICHMENT_SOURCE_LABELS: () => ASSET_SCAN_ENRICHMENT_SOURCE_LABELS,
7592
- ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES: () => ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES,
7593
- ASSET_SCAN_ENRICHMENT_TYPE_LABELS: () => ASSET_SCAN_ENRICHMENT_TYPE_LABELS,
7594
- AssetScanEnrichmentSource: () => AssetScanEnrichmentSource,
7595
- AssetScanEnrichmentType: () => AssetScanEnrichmentType
7601
+ // ../../internal/utils/src/url.ts
7602
+ var url_exports = {};
7603
+ __export(url_exports, {
7604
+ URL_REGEX: () => URL_REGEX,
7605
+ containsPunycode: () => containsPunycode,
7606
+ convertHttpsToHttp: () => convertHttpsToHttp,
7607
+ ensureHttpsPrefix: () => ensureHttpsPrefix,
7608
+ generateCanonicalIPFSUrl: () => generateCanonicalIPFSUrl,
7609
+ getDefangedUrl: () => getDefangedUrl,
7610
+ getDomain: () => tldts.getDomain,
7611
+ getFaviconUrl: () => getFaviconUrl,
7612
+ getHostname: () => getHostname,
7613
+ getNormalizedUrl: () => getNormalizedUrl,
7614
+ getParentDomains: () => getParentDomains,
7615
+ getPublicHostname: () => getPublicHostname,
7616
+ getRefangedUrl: () => getRefangedUrl,
7617
+ isEmail: () => isEmail,
7618
+ isUrl: () => isUrl,
7619
+ isWalrusSite: () => isWalrusSite,
7620
+ removeHttpProtocol: () => removeHttpProtocol,
7621
+ sanitizeHttpUrl: () => sanitizeHttpUrl,
7622
+ slugify: () => slugify,
7623
+ stripDomainWildcardPrefix: () => stripDomainWildcardPrefix,
7624
+ toUnicode: () => toUnicode2,
7625
+ trimDomainToLevels: () => trimDomainToLevels
7596
7626
  });
7597
- var AssetScanEnrichmentType = /* @__PURE__ */ ((AssetScanEnrichmentType2) => {
7598
- AssetScanEnrichmentType2["CONTENT_AND_METADATA"] = "content_and_metadata";
7599
- AssetScanEnrichmentType2["BROWSER_CAPTURE"] = "browser_capture";
7600
- AssetScanEnrichmentType2["OWNERSHIP_AND_REGISTRATION"] = "ownership_and_registration";
7601
- AssetScanEnrichmentType2["GEOLOCATION_AND_IP"] = "geolocation_and_ip";
7602
- AssetScanEnrichmentType2["DNS"] = "dns";
7603
- AssetScanEnrichmentType2["TLS"] = "tls";
7604
- AssetScanEnrichmentType2["TCP"] = "tcp";
7605
- AssetScanEnrichmentType2["HOSTNAME_FIRST_SEEN"] = "hostname_first_seen";
7606
- AssetScanEnrichmentType2["TWITTER_POST"] = "post";
7607
- AssetScanEnrichmentType2["TWITTER_PROFILE"] = "profile";
7608
- AssetScanEnrichmentType2["TWITTER_FOLLOWERS"] = "twitter_followers";
7609
- AssetScanEnrichmentType2["FARCASTER_CAST"] = "cast";
7610
- AssetScanEnrichmentType2["FARCASTER_PROFILE"] = "farcaster_profile";
7611
- AssetScanEnrichmentType2["FARCASTER_CHANNEL"] = "channel";
7612
- AssetScanEnrichmentType2["FARCASTER_MINIAPP"] = "miniapp";
7613
- AssetScanEnrichmentType2["TELEGRAM_PROFILE"] = "telegram_profile";
7614
- AssetScanEnrichmentType2["INSTAGRAM_PROFILE"] = "instagram_profile";
7615
- AssetScanEnrichmentType2["FACEBOOK_PROFILE"] = "facebook_profile";
7616
- AssetScanEnrichmentType2["YOUTUBE_VIDEO"] = "youtube_video";
7617
- AssetScanEnrichmentType2["YOUTUBE_CHANNEL"] = "youtube_channel";
7618
- AssetScanEnrichmentType2["APPLE_APP_STORE_LISTING"] = "apple_app_store_listing";
7619
- AssetScanEnrichmentType2["GOOGLE_PLAY_STORE_LISTING"] = "google_play_store_listing";
7620
- AssetScanEnrichmentType2["MOZILLA_ADDON"] = "mozilla_addon";
7621
- AssetScanEnrichmentType2["REDDIT_SUBREDDIT"] = "reddit_subreddit";
7622
- AssetScanEnrichmentType2["EMAIL_VALIDATION"] = "email_validation";
7623
- AssetScanEnrichmentType2["PHONE_LOOKUP"] = "phone_lookup";
7624
- AssetScanEnrichmentType2["BILIBILI_VIDEO"] = "bilibili_video";
7625
- AssetScanEnrichmentType2["BILIBILI_PROFILE"] = "bilibili_profile";
7626
- AssetScanEnrichmentType2["DAILYMOTION_VIDEO"] = "dailymotion_video";
7627
- AssetScanEnrichmentType2["VIMEO_VIDEO"] = "vimeo_video";
7628
- AssetScanEnrichmentType2["VIMEO_PROFILE"] = "vimeo_profile";
7629
- AssetScanEnrichmentType2["STACKBLITZ_PAGE"] = "stackblitz_page";
7630
- AssetScanEnrichmentType2["LEETCODE_PAGE"] = "leetcode_page";
7631
- AssetScanEnrichmentType2["TUMBLR_BLOG"] = "tumblr_blog";
7632
- AssetScanEnrichmentType2["TUMBLR_POST"] = "tumblr_post";
7633
- AssetScanEnrichmentType2["TUMBLR_COMMUNITY"] = "tumblr_community";
7634
- AssetScanEnrichmentType2["NPM_PACKAGE"] = "npm_package";
7635
- AssetScanEnrichmentType2["PYPI_PACKAGE"] = "pypi_package";
7636
- AssetScanEnrichmentType2["RUST_PACKAGE"] = "rust_package";
7637
- AssetScanEnrichmentType2["LINKEDIN_PROFILE"] = "linkedin_profile";
7638
- AssetScanEnrichmentType2["PUMP_FUN_TOKEN"] = "pump_fun_token";
7639
- AssetScanEnrichmentType2["META_AD"] = "meta_ad";
7640
- AssetScanEnrichmentType2["GOOGLE_AD"] = "google_ad";
7641
- AssetScanEnrichmentType2["ADLIBRARY_AD"] = "adlibrary_ad";
7642
- AssetScanEnrichmentType2["CONTRACT_DEPLOYER"] = "contract_deployer";
7643
- return AssetScanEnrichmentType2;
7644
- })(AssetScanEnrichmentType || {});
7645
- var AssetScanEnrichmentSource = /* @__PURE__ */ ((AssetScanEnrichmentSource2) => {
7646
- AssetScanEnrichmentSource2["URLSCAN"] = "urlscan";
7647
- AssetScanEnrichmentSource2["WHOIS"] = "whois";
7648
- AssetScanEnrichmentSource2["RDAP"] = "rdap";
7649
- AssetScanEnrichmentSource2["HTTP_CONTENT"] = "http_content";
7650
- AssetScanEnrichmentSource2["NETWORK"] = "node_js_network";
7651
- AssetScanEnrichmentSource2["EXTENSION"] = "extension";
7652
- AssetScanEnrichmentSource2["PLAYWRIGHT"] = "playwright";
7653
- AssetScanEnrichmentSource2["CHAINPATROL_BROWSER"] = "chainpatrol_browser";
7654
- AssetScanEnrichmentSource2["STEEL_BROWSER"] = "steel_browser";
7655
- AssetScanEnrichmentSource2["X_API"] = "x_api";
7656
- AssetScanEnrichmentSource2["SOCIALDATA_API"] = "socialdata_api";
7657
- AssetScanEnrichmentSource2["NEYNAR_API"] = "neynar_api";
7658
- AssetScanEnrichmentSource2["TELEGRAM_API"] = "telegram_api";
7659
- AssetScanEnrichmentSource2["INSTAGRAM_API"] = "instagram_api";
7660
- AssetScanEnrichmentSource2["FACEBOOK_API"] = "facebook_api";
7661
- AssetScanEnrichmentSource2["YOUTUBE_API"] = "youtube_api";
7662
- AssetScanEnrichmentSource2["APPLE_APP_STORE_API"] = "apple_app_store_api";
7663
- AssetScanEnrichmentSource2["GOOGLE_PLAY_STORE_API"] = "google_play_store_api";
7664
- AssetScanEnrichmentSource2["MOZILLA_ADDONS_API"] = "mozilla_addons_api";
7665
- AssetScanEnrichmentSource2["REDDIT_API"] = "reddit_api";
7666
- AssetScanEnrichmentSource2["MAILS_API"] = "mails_api";
7667
- AssetScanEnrichmentSource2["TELNYX_LOOKUP"] = "telnyx_lookup";
7668
- AssetScanEnrichmentSource2["TWILIO_LOOKUP"] = "twilio_lookup";
7669
- AssetScanEnrichmentSource2["DAILYMOTION_API"] = "dailymotion_api";
7670
- AssetScanEnrichmentSource2["VIMEO_API"] = "vimeo_api";
7671
- AssetScanEnrichmentSource2["STACKBLITZ_API"] = "stackblitz_api";
7672
- AssetScanEnrichmentSource2["LEETCODE_API"] = "leetcode_api";
7673
- AssetScanEnrichmentSource2["TUMBLR_API"] = "tumblr_api";
7674
- AssetScanEnrichmentSource2["NPM_REGISTRY_API"] = "npm_registry_api";
7675
- AssetScanEnrichmentSource2["PYPI_REGISTRY_API"] = "pypi_registry_api";
7676
- AssetScanEnrichmentSource2["CRATES_IO_API"] = "crates_io_api";
7677
- AssetScanEnrichmentSource2["APIFY_LINKEDIN_API"] = "apify_linkedin_api";
7678
- AssetScanEnrichmentSource2["PUMP_FUN_API"] = "pump_fun_api";
7679
- AssetScanEnrichmentSource2["META_ADS_LIBRARY"] = "meta_ads_library";
7680
- AssetScanEnrichmentSource2["STEEL_META_ADS_LIBRARY"] = "steel_meta_ads_library";
7681
- AssetScanEnrichmentSource2["GOOGLE_ADS_TRANSPARENCY_CENTER"] = "google_ads_transparency_center";
7682
- AssetScanEnrichmentSource2["ADLIBRARY"] = "adlibrary";
7683
- AssetScanEnrichmentSource2["ETHERSCAN_API"] = "etherscan_api";
7684
- return AssetScanEnrichmentSource2;
7685
- })(AssetScanEnrichmentSource || {});
7686
- var ASSET_SCAN_ENRICHMENT_TYPE_LABELS = {
7687
- ["content_and_metadata" /* CONTENT_AND_METADATA */]: "Content and Metadata",
7688
- ["post" /* TWITTER_POST */]: "Post",
7689
- ["profile" /* TWITTER_PROFILE */]: "Profile",
7690
- ["twitter_followers" /* TWITTER_FOLLOWERS */]: "Twitter Followers",
7691
- ["browser_capture" /* BROWSER_CAPTURE */]: "Browser Capture",
7692
- ["geolocation_and_ip" /* GEOLOCATION_AND_IP */]: "Geolocation and IP",
7693
- ["ownership_and_registration" /* OWNERSHIP_AND_REGISTRATION */]: "Ownership and Registration",
7694
- ["dns" /* DNS */]: "DNS Lookup",
7695
- ["tls" /* TLS */]: "TLS Connection Info",
7696
- ["tcp" /* TCP */]: "TCP Connection Info",
7697
- ["hostname_first_seen" /* HOSTNAME_FIRST_SEEN */]: "Hostname First Seen",
7698
- // Farcaster
7699
- ["cast" /* FARCASTER_CAST */]: "Farcaster Cast",
7700
- ["farcaster_profile" /* FARCASTER_PROFILE */]: "Farcaster Profile",
7701
- ["channel" /* FARCASTER_CHANNEL */]: "Farcaster Channel",
7702
- ["miniapp" /* FARCASTER_MINIAPP */]: "Farcaster MiniApp",
7703
- // Telegram
7704
- ["telegram_profile" /* TELEGRAM_PROFILE */]: "Telegram Profile",
7705
- // Instagram
7706
- ["instagram_profile" /* INSTAGRAM_PROFILE */]: "Instagram Profile",
7707
- // Facebook
7708
- ["facebook_profile" /* FACEBOOK_PROFILE */]: "Facebook Profile",
7709
- // YouTube
7710
- ["youtube_video" /* YOUTUBE_VIDEO */]: "YouTube Video",
7711
- ["youtube_channel" /* YOUTUBE_CHANNEL */]: "YouTube Channel",
7712
- // Apple App Store
7713
- ["apple_app_store_listing" /* APPLE_APP_STORE_LISTING */]: "Apple App Store Listing",
7714
- // Google Play Store
7715
- ["google_play_store_listing" /* GOOGLE_PLAY_STORE_LISTING */]: "Google Play Store Listing",
7716
- // Mozilla
7717
- ["mozilla_addon" /* MOZILLA_ADDON */]: "Mozilla Add-on",
7718
- // Reddit
7719
- ["reddit_subreddit" /* REDDIT_SUBREDDIT */]: "Reddit Subreddit",
7720
- // Email
7721
- ["email_validation" /* EMAIL_VALIDATION */]: "Email Validation",
7722
- // Phone Number
7723
- ["phone_lookup" /* PHONE_LOOKUP */]: "Phone Lookup",
7724
- // Bilibili
7725
- ["bilibili_video" /* BILIBILI_VIDEO */]: "Bilibili Video",
7726
- ["bilibili_profile" /* BILIBILI_PROFILE */]: "Bilibili Profile",
7727
- // DailyMotion
7728
- ["dailymotion_video" /* DAILYMOTION_VIDEO */]: "DailyMotion Video",
7729
- // Vimeo
7730
- ["vimeo_video" /* VIMEO_VIDEO */]: "Vimeo Video",
7731
- ["vimeo_profile" /* VIMEO_PROFILE */]: "Vimeo Profile",
7732
- // Stackblitz
7733
- ["stackblitz_page" /* STACKBLITZ_PAGE */]: "Stackblitz Page",
7734
- // Leetcode
7735
- ["leetcode_page" /* LEETCODE_PAGE */]: "Leetcode Page",
7736
- // Tumblr
7737
- ["tumblr_blog" /* TUMBLR_BLOG */]: "Tumblr Blog",
7738
- ["tumblr_post" /* TUMBLR_POST */]: "Tumblr Post",
7739
- ["tumblr_community" /* TUMBLR_COMMUNITY */]: "Tumblr Community",
7740
- // NPM
7741
- ["npm_package" /* NPM_PACKAGE */]: "NPM Package",
7742
- // PyPI
7743
- ["pypi_package" /* PYPI_PACKAGE */]: "PyPI Package",
7744
- // Rust Package
7745
- ["rust_package" /* RUST_PACKAGE */]: "Rust Package",
7746
- // LinkedIn
7747
- ["linkedin_profile" /* LINKEDIN_PROFILE */]: "LinkedIn Profile",
7748
- // Pump.fun
7749
- ["pump_fun_token" /* PUMP_FUN_TOKEN */]: "Pump.fun Token",
7750
- // Meta Ads
7751
- ["meta_ad" /* META_AD */]: "Meta Ad",
7752
- // Google Ads
7753
- ["google_ad" /* GOOGLE_AD */]: "Google Ad",
7754
- // Cross-platform ad intelligence
7755
- ["adlibrary_ad" /* ADLIBRARY_AD */]: "AdLibrary Ad",
7756
- // Crypto / Onchain
7757
- ["contract_deployer" /* CONTRACT_DEPLOYER */]: "Contract Deployer"
7758
- };
7759
- var ASSET_SCAN_ENRICHMENT_SOURCE_LABELS = {
7760
- // URL
7761
- ["urlscan" /* URLSCAN */]: "URLScan",
7762
- ["whois" /* WHOIS */]: "Whois",
7763
- ["rdap" /* RDAP */]: "RDAP",
7764
- ["http_content" /* HTTP_CONTENT */]: "HTTP Content",
7765
- ["node_js_network" /* NETWORK */]: "Network",
7766
- ["extension" /* EXTENSION */]: "Browser Extension",
7767
- ["playwright" /* PLAYWRIGHT */]: "Playwright",
7768
- ["chainpatrol_browser" /* CHAINPATROL_BROWSER */]: "ChainPatrol Browser",
7769
- ["steel_browser" /* STEEL_BROWSER */]: "Steel Browser",
7770
- // Twitter
7771
- ["x_api" /* X_API */]: "X API",
7772
- ["socialdata_api" /* SOCIALDATA_API */]: "SocialData API",
7773
- // Farcaster
7774
- ["neynar_api" /* NEYNAR_API */]: "Neynar API",
7775
- // Telegram
7776
- ["telegram_api" /* TELEGRAM_API */]: "Telegram API",
7777
- // Instagram
7778
- ["instagram_api" /* INSTAGRAM_API */]: "Instagram API",
7779
- // Facebook
7780
- ["facebook_api" /* FACEBOOK_API */]: "Facebook API",
7781
- // YouTube
7782
- ["youtube_api" /* YOUTUBE_API */]: "YouTube API",
7783
- // Apple App Store
7784
- ["apple_app_store_api" /* APPLE_APP_STORE_API */]: "Apple App Store API",
7785
- // Google Play Store
7786
- ["google_play_store_api" /* GOOGLE_PLAY_STORE_API */]: "Google Play Store API",
7787
- // Mozilla
7788
- ["mozilla_addons_api" /* MOZILLA_ADDONS_API */]: "Mozilla Add-ons API",
7789
- // Reddit
7790
- ["reddit_api" /* REDDIT_API */]: "Reddit API",
7791
- // Email
7792
- ["mails_api" /* MAILS_API */]: "Mails.so API",
7793
- // Phone Number
7794
- ["telnyx_lookup" /* TELNYX_LOOKUP */]: "Telnyx Lookup",
7795
- ["twilio_lookup" /* TWILIO_LOOKUP */]: "Twilio Lookup",
7796
- // DailyMotion
7797
- ["dailymotion_api" /* DAILYMOTION_API */]: "DailyMotion API",
7798
- // Vimeo
7799
- ["vimeo_api" /* VIMEO_API */]: "Vimeo API",
7800
- // Stackblitz
7801
- ["stackblitz_api" /* STACKBLITZ_API */]: "Stackblitz API",
7802
- // Leetcode
7803
- ["leetcode_api" /* LEETCODE_API */]: "Leetcode API",
7804
- // Tumblr
7805
- ["tumblr_api" /* TUMBLR_API */]: "Tumblr API",
7806
- // NPM
7807
- ["npm_registry_api" /* NPM_REGISTRY_API */]: "NPM Registry API",
7808
- // PyPI
7809
- ["pypi_registry_api" /* PYPI_REGISTRY_API */]: "PyPI Registry API",
7810
- // Rust Package
7811
- ["crates_io_api" /* CRATES_IO_API */]: "Crates.io API",
7812
- // LinkedIn
7813
- ["apify_linkedin_api" /* APIFY_LINKEDIN_API */]: "Apify LinkedIn API",
7814
- // Pump.fun
7815
- ["pump_fun_api" /* PUMP_FUN_API */]: "Pump.fun API",
7816
- // Meta Ads
7817
- ["meta_ads_library" /* META_ADS_LIBRARY */]: "Meta Ads Library",
7818
- ["steel_meta_ads_library" /* STEEL_META_ADS_LIBRARY */]: "Steel Meta Ads Library",
7819
- // Google Ads
7820
- ["google_ads_transparency_center" /* GOOGLE_ADS_TRANSPARENCY_CENTER */]: "Google Ads Transparency Center",
7821
- // Cross-platform ad intelligence
7822
- ["adlibrary" /* ADLIBRARY */]: "AdLibrary",
7823
- // Crypto / Onchain
7824
- ["etherscan_api" /* ETHERSCAN_API */]: "Etherscan"
7825
- };
7826
- var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
7827
- // URL-related sources
7828
- ["urlscan" /* URLSCAN */]: [
7829
- "browser_capture" /* BROWSER_CAPTURE */,
7830
- "geolocation_and_ip" /* GEOLOCATION_AND_IP */,
7831
- "hostname_first_seen" /* HOSTNAME_FIRST_SEEN */
7832
- ],
7833
- ["whois" /* WHOIS */]: ["ownership_and_registration" /* OWNERSHIP_AND_REGISTRATION */],
7834
- ["rdap" /* RDAP */]: ["ownership_and_registration" /* OWNERSHIP_AND_REGISTRATION */],
7835
- ["http_content" /* HTTP_CONTENT */]: [
7836
- "content_and_metadata" /* CONTENT_AND_METADATA */
7837
- ],
7838
- ["node_js_network" /* NETWORK */]: [
7839
- "dns" /* DNS */,
7840
- "tls" /* TLS */,
7841
- "tcp" /* TCP */
7842
- ],
7843
- ["extension" /* EXTENSION */]: [
7844
- "browser_capture" /* BROWSER_CAPTURE */,
7845
- "telegram_profile" /* TELEGRAM_PROFILE */,
7846
- "linkedin_profile" /* LINKEDIN_PROFILE */,
7847
- "instagram_profile" /* INSTAGRAM_PROFILE */,
7848
- "meta_ad" /* META_AD */
7849
- ],
7850
- ["playwright" /* PLAYWRIGHT */]: [
7851
- "browser_capture" /* BROWSER_CAPTURE */,
7852
- "bilibili_video" /* BILIBILI_VIDEO */,
7853
- "bilibili_profile" /* BILIBILI_PROFILE */,
7854
- "telegram_profile" /* TELEGRAM_PROFILE */
7855
- ],
7856
- // Only the generic page capture: the in-house browser does not (yet) run the
7857
- // platform-specific scrapes PLAYWRIGHT does above.
7858
- ["chainpatrol_browser" /* CHAINPATROL_BROWSER */]: [
7859
- "browser_capture" /* BROWSER_CAPTURE */
7860
- ],
7861
- ["steel_browser" /* STEEL_BROWSER */]: ["browser_capture" /* BROWSER_CAPTURE */],
7862
- // Twitter-related sources
7863
- ["x_api" /* X_API */]: [
7864
- "post" /* TWITTER_POST */,
7865
- "profile" /* TWITTER_PROFILE */,
7866
- "twitter_followers" /* TWITTER_FOLLOWERS */
7867
- ],
7868
- ["socialdata_api" /* SOCIALDATA_API */]: [
7869
- "post" /* TWITTER_POST */,
7870
- "profile" /* TWITTER_PROFILE */,
7871
- "twitter_followers" /* TWITTER_FOLLOWERS */
7872
- ],
7873
- // Farcaster-related sources
7874
- ["neynar_api" /* NEYNAR_API */]: [
7875
- "cast" /* FARCASTER_CAST */,
7876
- "farcaster_profile" /* FARCASTER_PROFILE */,
7877
- "channel" /* FARCASTER_CHANNEL */,
7878
- "miniapp" /* FARCASTER_MINIAPP */
7879
- ],
7880
- // Telegram-related sources
7881
- ["telegram_api" /* TELEGRAM_API */]: ["telegram_profile" /* TELEGRAM_PROFILE */],
7882
- // Instagram-related sources
7883
- ["instagram_api" /* INSTAGRAM_API */]: ["instagram_profile" /* INSTAGRAM_PROFILE */],
7884
- // Facebook-related sources
7885
- ["facebook_api" /* FACEBOOK_API */]: ["facebook_profile" /* FACEBOOK_PROFILE */],
7886
- // YouTube-related sources
7887
- ["youtube_api" /* YOUTUBE_API */]: [
7888
- "youtube_video" /* YOUTUBE_VIDEO */,
7889
- "youtube_channel" /* YOUTUBE_CHANNEL */
7890
- ],
7891
- // Apple App Store-related sources
7892
- ["apple_app_store_api" /* APPLE_APP_STORE_API */]: [
7893
- "apple_app_store_listing" /* APPLE_APP_STORE_LISTING */
7894
- ],
7895
- // Google Play Store-related sources
7896
- ["google_play_store_api" /* GOOGLE_PLAY_STORE_API */]: [
7897
- "google_play_store_listing" /* GOOGLE_PLAY_STORE_LISTING */
7898
- ],
7899
- // Mozilla-related sources
7900
- ["mozilla_addons_api" /* MOZILLA_ADDONS_API */]: ["mozilla_addon" /* MOZILLA_ADDON */],
7901
- // Reddit-related sources
7902
- ["reddit_api" /* REDDIT_API */]: ["reddit_subreddit" /* REDDIT_SUBREDDIT */],
7903
- // Email-related sources
7904
- ["mails_api" /* MAILS_API */]: ["email_validation" /* EMAIL_VALIDATION */],
7905
- // Phone Number-related sources
7906
- ["telnyx_lookup" /* TELNYX_LOOKUP */]: ["phone_lookup" /* PHONE_LOOKUP */],
7907
- ["twilio_lookup" /* TWILIO_LOOKUP */]: ["phone_lookup" /* PHONE_LOOKUP */],
7908
- // DailyMotion-related sources
7909
- ["dailymotion_api" /* DAILYMOTION_API */]: [
7910
- "dailymotion_video" /* DAILYMOTION_VIDEO */
7911
- ],
7912
- // Vimeo-related sources
7913
- ["vimeo_api" /* VIMEO_API */]: [
7914
- "vimeo_video" /* VIMEO_VIDEO */,
7915
- "vimeo_profile" /* VIMEO_PROFILE */
7916
- ],
7917
- // Stackblitz-related sources
7918
- ["stackblitz_api" /* STACKBLITZ_API */]: ["stackblitz_page" /* STACKBLITZ_PAGE */],
7919
- // Leetcode-related sources
7920
- ["leetcode_api" /* LEETCODE_API */]: ["leetcode_page" /* LEETCODE_PAGE */],
7921
- // Tumblr-related sources
7922
- ["tumblr_api" /* TUMBLR_API */]: [
7923
- "tumblr_blog" /* TUMBLR_BLOG */,
7924
- "tumblr_post" /* TUMBLR_POST */,
7925
- "tumblr_community" /* TUMBLR_COMMUNITY */
7926
- ],
7927
- // NPM-related sources
7928
- ["npm_registry_api" /* NPM_REGISTRY_API */]: ["npm_package" /* NPM_PACKAGE */],
7929
- // PyPI-related sources
7930
- ["pypi_registry_api" /* PYPI_REGISTRY_API */]: ["pypi_package" /* PYPI_PACKAGE */],
7931
- // Rust Package-related sources
7932
- ["crates_io_api" /* CRATES_IO_API */]: ["rust_package" /* RUST_PACKAGE */],
7933
- // LinkedIn-related sources
7934
- ["apify_linkedin_api" /* APIFY_LINKEDIN_API */]: [
7935
- "linkedin_profile" /* LINKEDIN_PROFILE */
7936
- ],
7937
- // Pump.fun
7938
- ["pump_fun_api" /* PUMP_FUN_API */]: ["pump_fun_token" /* PUMP_FUN_TOKEN */],
7939
- // Meta Ads-related sources
7940
- ["meta_ads_library" /* META_ADS_LIBRARY */]: ["meta_ad" /* META_AD */],
7941
- ["steel_meta_ads_library" /* STEEL_META_ADS_LIBRARY */]: ["meta_ad" /* META_AD */],
7942
- // Google Ads-related sources
7943
- ["google_ads_transparency_center" /* GOOGLE_ADS_TRANSPARENCY_CENTER */]: [
7944
- "google_ad" /* GOOGLE_AD */
7945
- ],
7946
- // Cross-platform ad intelligence sources
7947
- ["adlibrary" /* ADLIBRARY */]: ["adlibrary_ad" /* ADLIBRARY_AD */],
7948
- // Crypto / Onchain sources
7949
- ["etherscan_api" /* ETHERSCAN_API */]: ["contract_deployer" /* CONTRACT_DEPLOYER */]
7950
- };
7951
7627
 
7952
- // ../../internal/utils/src/array.ts
7953
- var array_exports = {};
7954
- __export(array_exports, {
7955
- arraysEqual: () => arraysEqual,
7956
- chunkArray: () => chunkArray,
7957
- combineAndRemoveDuplicatesByKey: () => combineAndRemoveDuplicatesByKey,
7958
- isArray: () => isArray,
7959
- isEmptyArray: () => isEmptyArray,
7960
- isNonEmptyArray: () => isNonEmptyArray,
7961
- randomElement: () => randomElement,
7962
- randomIndex: () => randomIndex,
7963
- removeDuplicates: () => removeDuplicates,
7964
- shuffleInPlace: () => shuffleInPlace,
7965
- shuffled: () => shuffled
7966
- });
7967
- function isArray(value) {
7968
- return Array.isArray(value);
7969
- }
7970
- function isEmptyArray(value) {
7971
- return value.length === 0;
7972
- }
7973
- function isNonEmptyArray(value) {
7974
- return value.length > 0;
7975
- }
7976
- function randomIndex(array) {
7977
- return Math.floor(Math.random() * array.length);
7978
- }
7979
- function randomElement(array) {
7980
- return array[randomIndex(array)];
7981
- }
7982
- function removeDuplicates(array) {
7983
- return Array.from(new Set(array));
7984
- }
7985
- function combineAndRemoveDuplicatesByKey(arr1, arr2, uniqueKey) {
7986
- const combinedArray = [...arr1, ...arr2];
7987
- const uniqueObjects = new Map(
7988
- combinedArray.map((item) => [item[uniqueKey], item])
7989
- );
7990
- return Array.from(uniqueObjects.values());
7991
- }
7992
- function chunkArray(array, chunkSize) {
7993
- const chunks = [];
7994
- for (let i = 0; i < array.length; i += chunkSize) {
7995
- chunks.push(array.slice(i, i + chunkSize));
7628
+ // ../../node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp/index.js
7629
+ function escapeStringRegexp(string) {
7630
+ if (typeof string !== "string") {
7631
+ throw new TypeError("Expected a string");
7996
7632
  }
7997
- return chunks;
7633
+ return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
7998
7634
  }
7999
- function shuffleInPlace(array) {
8000
- for (let i = array.length - 1; i > 0; i--) {
8001
- const j = Math.floor(Math.random() * (i + 1));
8002
- [array[i], array[j]] = [array[j], array[i]];
7635
+
7636
+ // ../../node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp/index.js
7637
+ function escapeStringRegexp2(string) {
7638
+ if (typeof string !== "string") {
7639
+ throw new TypeError("Expected a string");
8003
7640
  }
8004
- }
8005
- function shuffled(array) {
8006
- const newArray = array.slice();
8007
- shuffleInPlace(newArray);
8008
- return newArray;
8009
- }
8010
- function arraysEqual(a, b) {
8011
- if (a.length !== b.length) return false;
8012
- const sortedA = [...a].sort();
8013
- const sortedB = [...b].sort();
8014
- return sortedA.every((val, idx) => val === sortedB[idx]);
8015
- }
8016
-
8017
- // ../../internal/utils/src/cron.ts
8018
- var cron_exports = {};
8019
- __export(cron_exports, {
8020
- cronToHumanReadable: () => cronToHumanReadable,
8021
- isValidCronExpression: () => isValidCronExpression
8022
- });
8023
- var WEEKDAYS = [
8024
- "Sunday",
8025
- "Monday",
8026
- "Tuesday",
8027
- "Wednesday",
8028
- "Thursday",
8029
- "Friday",
8030
- "Saturday"
8031
- ];
8032
- var MONTHS = [
8033
- "January",
8034
- "February",
8035
- "March",
8036
- "April",
8037
- "May",
8038
- "June",
8039
- "July",
8040
- "August",
8041
- "September",
8042
- "October",
8043
- "November",
8044
- "December"
8045
- ];
8046
- function cronToHumanReadable(cronExpression) {
8047
- const [minute, hour, dayOfMonth, month, dayOfWeek2] = cronExpression.split(" ");
8048
- let result = "Runs ";
8049
- if (minute === "*") {
8050
- result += "every minute ";
8051
- } else if (minute.includes("/")) {
8052
- const [, interval] = minute.split("/");
8053
- result += `every ${interval} minutes `;
8054
- } else {
8055
- result += `at minute ${minute} `;
8056
- }
8057
- if (hour !== "*") {
8058
- result += `past hour ${hour} `;
8059
- }
8060
- if (dayOfMonth !== "*") {
8061
- result += `on the ${dayOfMonth}${getDaySuffix(
8062
- parseInt(dayOfMonth)
8063
- )} day of the month `;
8064
- }
8065
- if (month !== "*") {
8066
- const monthNames = month.split(",").map((m) => MONTHS[parseInt(m) - 1]);
8067
- result += `in ${monthNames.join(", ")} `;
8068
- }
8069
- if (dayOfWeek2 !== "*") {
8070
- const dayNames = dayOfWeek2.split(",").map((d) => WEEKDAYS[parseInt(d)]);
8071
- result += `on ${dayNames.join(", ")}`;
8072
- }
8073
- return result.trim();
8074
- }
8075
- function getDaySuffix(day) {
8076
- if (day >= 11 && day <= 13) {
8077
- return "th";
8078
- }
8079
- switch (day % 10) {
8080
- case 1:
8081
- return "st";
8082
- case 2:
8083
- return "nd";
8084
- case 3:
8085
- return "rd";
8086
- default:
8087
- return "th";
8088
- }
8089
- }
8090
- function isValidCronExpression(cronExpression) {
8091
- if (!cronExpression || typeof cronExpression !== "string") {
8092
- return false;
8093
- }
8094
- const parts = cronExpression.trim().split(/\s+/);
8095
- if (parts.length !== 5) {
8096
- return false;
8097
- }
8098
- const [minute, hour, dayOfMonth, month, dayOfWeek2] = parts;
8099
- return isValidCronField(minute, 0, 59) && isValidCronField(hour, 0, 23) && isValidCronField(dayOfMonth, 1, 31) && isValidCronField(month, 1, 12) && isValidCronField(dayOfWeek2, 0, 7);
8100
- }
8101
- function isValidCronField(field, min, max) {
8102
- if (!field) return false;
8103
- if (field === "*") return true;
8104
- if (field.includes("/")) {
8105
- const [range, step] = field.split("/");
8106
- const stepNum = parseInt(step);
8107
- if (isNaN(stepNum) || stepNum <= 0) return false;
8108
- if (range === "*") return true;
8109
- return isValidCronField(range, min, max);
8110
- }
8111
- if (field.includes("-")) {
8112
- const [start, end] = field.split("-");
8113
- const startNum = parseInt(start);
8114
- const endNum = parseInt(end);
8115
- if (isNaN(startNum) || isNaN(endNum)) return false;
8116
- return startNum >= min && startNum <= max && endNum >= min && endNum <= max && startNum <= endNum;
8117
- }
8118
- if (field.includes(",")) {
8119
- const values = field.split(",");
8120
- return values.every((value) => isValidCronField(value.trim(), min, max));
8121
- }
8122
- const num3 = parseInt(field);
8123
- if (isNaN(num3)) return false;
8124
- if (max === 7 && num3 === 7) return true;
8125
- return num3 >= min && num3 <= max;
8126
- }
8127
-
8128
- // ../../internal/utils/src/object.ts
8129
- var object_exports = {};
8130
- __export(object_exports, {
8131
- isDefined: () => isDefined,
8132
- isDefinedAndNotNull: () => isDefinedAndNotNull,
8133
- isNotNull: () => isNotNull
8134
- });
8135
- function isDefined(value) {
8136
- return value !== void 0;
8137
- }
8138
- function isNotNull(value) {
8139
- return value !== null;
8140
- }
8141
- function isDefinedAndNotNull(value) {
8142
- return value !== null && value !== void 0;
8143
- }
8144
-
8145
- // ../../internal/utils/src/promise.ts
8146
- var promise_exports = {};
8147
- __export(promise_exports, {
8148
- allSettledWithConcurrency: () => allSettledWithConcurrency,
8149
- isPromiseSettledResultFulfilled: () => isPromiseSettledResultFulfilled,
8150
- isPromiseSettledResultRejected: () => isPromiseSettledResultRejected
8151
- });
8152
- function isPromiseSettledResultFulfilled(result) {
8153
- return result.status === "fulfilled";
8154
- }
8155
- function isPromiseSettledResultRejected(result) {
8156
- return result.status === "rejected";
8157
- }
8158
- function allSettledWithConcurrency(items, limit, fn5) {
8159
- return __async(this, null, function* () {
8160
- const results = new Array(items.length);
8161
- let next = 0;
8162
- const worker = () => __async(null, null, function* () {
8163
- for (; ; ) {
8164
- const index = next;
8165
- next += 1;
8166
- if (index >= items.length) return;
8167
- try {
8168
- results[index] = { status: "fulfilled", value: yield fn5(items[index], index) };
8169
- } catch (reason) {
8170
- results[index] = { status: "rejected", reason };
8171
- }
8172
- }
8173
- });
8174
- const workers = Math.max(1, Math.min(Math.floor(limit) || 1, items.length));
8175
- yield Promise.all(Array.from({ length: workers }, worker));
8176
- return results;
8177
- });
8178
- }
8179
-
8180
- // ../../internal/utils/src/url.ts
8181
- var url_exports = {};
8182
- __export(url_exports, {
8183
- URL_REGEX: () => URL_REGEX,
8184
- containsPunycode: () => containsPunycode,
8185
- convertHttpsToHttp: () => convertHttpsToHttp,
8186
- ensureHttpsPrefix: () => ensureHttpsPrefix,
8187
- generateCanonicalIPFSUrl: () => generateCanonicalIPFSUrl,
8188
- getDefangedUrl: () => getDefangedUrl,
8189
- getDomain: () => tldts.getDomain,
8190
- getFaviconUrl: () => getFaviconUrl,
8191
- getHostname: () => getHostname,
8192
- getNormalizedUrl: () => getNormalizedUrl,
8193
- getParentDomains: () => getParentDomains,
8194
- getRefangedUrl: () => getRefangedUrl,
8195
- isEmail: () => isEmail,
8196
- isUrl: () => isUrl,
8197
- isWalrusSite: () => isWalrusSite,
8198
- removeHttpProtocol: () => removeHttpProtocol,
8199
- sanitizeHttpUrl: () => sanitizeHttpUrl,
8200
- slugify: () => slugify,
8201
- stripDomainWildcardPrefix: () => stripDomainWildcardPrefix,
8202
- toUnicode: () => toUnicode2,
8203
- trimDomainToLevels: () => trimDomainToLevels
8204
- });
8205
-
8206
- // ../../node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp/index.js
8207
- function escapeStringRegexp(string) {
8208
- if (typeof string !== "string") {
8209
- throw new TypeError("Expected a string");
8210
- }
8211
- return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
8212
- }
8213
-
8214
- // ../../node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp/index.js
8215
- function escapeStringRegexp2(string) {
8216
- if (typeof string !== "string") {
8217
- throw new TypeError("Expected a string");
8218
- }
8219
- return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
7641
+ return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
8220
7642
  }
8221
7643
 
8222
7644
  // ../../node_modules/@sindresorhus/transliterate/replacements.js
@@ -10465,302 +9887,970 @@ function preparePhoneInput(input) {
10465
9887
  function isAllSameDigit(digits2) {
10466
9888
  return /^(\d)\1+$/.test(digits2);
10467
9889
  }
10468
- function isStrictlyMonotonicStep1(digits2) {
10469
- if (digits2.length < 8) {
10470
- return false;
10471
- }
10472
- let increasing = true;
10473
- let decreasing = true;
10474
- for (let i = 1; i < digits2.length; i++) {
10475
- const curr = digits2.charCodeAt(i) - 48;
10476
- const prev = digits2.charCodeAt(i - 1) - 48;
10477
- if (curr !== prev + 1) {
10478
- increasing = false;
10479
- }
10480
- if (curr !== prev - 1) {
10481
- decreasing = false;
10482
- }
10483
- }
10484
- return increasing || decreasing;
9890
+ function isStrictlyMonotonicStep1(digits2) {
9891
+ if (digits2.length < 8) {
9892
+ return false;
9893
+ }
9894
+ let increasing = true;
9895
+ let decreasing = true;
9896
+ for (let i = 1; i < digits2.length; i++) {
9897
+ const curr = digits2.charCodeAt(i) - 48;
9898
+ const prev = digits2.charCodeAt(i - 1) - 48;
9899
+ if (curr !== prev + 1) {
9900
+ increasing = false;
9901
+ }
9902
+ if (curr !== prev - 1) {
9903
+ decreasing = false;
9904
+ }
9905
+ }
9906
+ return increasing || decreasing;
9907
+ }
9908
+ function isValidNanpNational10(d10) {
9909
+ if (d10.length !== 10) {
9910
+ return false;
9911
+ }
9912
+ const npaFirst = d10.charCodeAt(0) - 48;
9913
+ const nxxFirst = d10.charCodeAt(3) - 48;
9914
+ if (npaFirst < 2 || npaFirst > 9) {
9915
+ return false;
9916
+ }
9917
+ if (nxxFirst < 2 || nxxFirst > 9) {
9918
+ return false;
9919
+ }
9920
+ return true;
9921
+ }
9922
+ function isPlausiblePhoneDigits(withoutExt) {
9923
+ const hasPlus = withoutExt.startsWith("+");
9924
+ const d = withoutExt.replace(/\D/g, "");
9925
+ if (d.length < 8 || d.length > 15) {
9926
+ return false;
9927
+ }
9928
+ if (isAllSameDigit(d) || isStrictlyMonotonicStep1(d)) {
9929
+ return false;
9930
+ }
9931
+ const onlyDigits = /^\d+$/.test(withoutExt);
9932
+ if (hasPlus) {
9933
+ if (d.length === 11 && d.startsWith("1")) {
9934
+ return isValidNanpNational10(d.slice(1));
9935
+ }
9936
+ return true;
9937
+ }
9938
+ if (onlyDigits) {
9939
+ if (d.length === 10) {
9940
+ return isValidNanpNational10(d);
9941
+ }
9942
+ if (d.length === 11 && d.startsWith("1")) {
9943
+ return isValidNanpNational10(d.slice(1));
9944
+ }
9945
+ if (d.length === 11 && d.startsWith("0")) {
9946
+ return true;
9947
+ }
9948
+ return false;
9949
+ }
9950
+ if (d.length === 10) {
9951
+ return isValidNanpNational10(d);
9952
+ }
9953
+ if (d.length === 11 && d.startsWith("1")) {
9954
+ return isValidNanpNational10(d.slice(1));
9955
+ }
9956
+ if (d.length === 11 && d.startsWith("0")) {
9957
+ return true;
9958
+ }
9959
+ if (d.length >= 12 && d.length <= 15) {
9960
+ return true;
9961
+ }
9962
+ return false;
9963
+ }
9964
+ function isPhoneNumber(input) {
9965
+ const trimmed = preparePhoneInput(input);
9966
+ if (trimmed === "") {
9967
+ return false;
9968
+ }
9969
+ if (!/^[+\d(]/.test(trimmed)) {
9970
+ return false;
9971
+ }
9972
+ const withoutExt = trimmed.replace(/\s*(ext|extension|x)\s*\d+$/i, "");
9973
+ if (/[a-zA-Z]/.test(withoutExt)) {
9974
+ return false;
9975
+ }
9976
+ const hasPhoneMarker = /[+()\s-]/.test(trimmed);
9977
+ const isPureDotSeparated = /^\d+(\.\d+)+$/.test(trimmed);
9978
+ if (isPureDotSeparated && !hasPhoneMarker) {
9979
+ return false;
9980
+ }
9981
+ const phoneRegex = /^(?:\+?\d{1,4}[\s.-]?)?(?:\(\d{1,4}\)|\d{1,4})[\s.-]?\d{1,4}[\s.-]?\d{1,4}[\s.-]?\d{0,4}(?:\s*(?:ext|x|extension)[\s.]*\d{1,6})?$/i;
9982
+ if (!phoneRegex.test(trimmed)) {
9983
+ return false;
9984
+ }
9985
+ return isPlausiblePhoneDigits(withoutExt);
9986
+ }
9987
+ function normalizePhoneNumber(phone) {
9988
+ const trimmed = preparePhoneInput(phone);
9989
+ const withoutExt = trimmed.replace(/\s*(ext|extension|x)\s*\d+$/i, "");
9990
+ const hasPlus = withoutExt.startsWith("+");
9991
+ const digitsOnly = withoutExt.replace(/\D/g, "");
9992
+ return hasPlus ? `+${digitsOnly}` : digitsOnly;
9993
+ }
9994
+
9995
+ // ../../internal/utils/src/punycode.ts
9996
+ var maxInt = 2147483647;
9997
+ var base = 36;
9998
+ var tMin = 1;
9999
+ var tMax = 26;
10000
+ var skew = 38;
10001
+ var damp = 700;
10002
+ var initialBias = 72;
10003
+ var initialN = 128;
10004
+ var delimiter = "-";
10005
+ var regexPunycode = /^xn--/;
10006
+ var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g;
10007
+ var errors = {
10008
+ overflow: "Overflow: input needs wider integers to process",
10009
+ "not-basic": "Illegal input >= 0x80 (not a basic code point)",
10010
+ "invalid-input": "Invalid input"
10011
+ };
10012
+ var baseMinusTMin = base - tMin;
10013
+ var floor = Math.floor;
10014
+ function error(type) {
10015
+ throw new RangeError(errors[type]);
10016
+ }
10017
+ function mapDomain(domain, callback) {
10018
+ const parts = domain.split("@");
10019
+ let result = "";
10020
+ if (parts.length > 1) {
10021
+ result = parts[0] + "@";
10022
+ domain = parts[1];
10023
+ }
10024
+ domain = domain.replace(regexSeparators, ".");
10025
+ const labels = domain.split(".");
10026
+ const encoded = labels.map(callback).join(".");
10027
+ return result + encoded;
10028
+ }
10029
+ function basicToDigit(codePoint) {
10030
+ if (codePoint >= 48 && codePoint < 58) {
10031
+ return 26 + (codePoint - 48);
10032
+ }
10033
+ if (codePoint >= 65 && codePoint < 91) {
10034
+ return codePoint - 65;
10035
+ }
10036
+ if (codePoint >= 97 && codePoint < 123) {
10037
+ return codePoint - 97;
10038
+ }
10039
+ return base;
10040
+ }
10041
+ function adapt(delta, numPoints, firstTime) {
10042
+ let k4 = 0;
10043
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
10044
+ delta += floor(delta / numPoints);
10045
+ for (
10046
+ ;
10047
+ /* no initialization */
10048
+ delta > baseMinusTMin * tMax >> 1;
10049
+ k4 += base
10050
+ ) {
10051
+ delta = floor(delta / baseMinusTMin);
10052
+ }
10053
+ return floor(k4 + (baseMinusTMin + 1) * delta / (delta + skew));
10054
+ }
10055
+ function decode(input) {
10056
+ const output = [];
10057
+ const inputLength = input.length;
10058
+ let i = 0;
10059
+ let n2 = initialN;
10060
+ let bias2 = initialBias;
10061
+ let basic = input.lastIndexOf(delimiter);
10062
+ if (basic < 0) {
10063
+ basic = 0;
10064
+ }
10065
+ for (let j = 0; j < basic; ++j) {
10066
+ if (input.charCodeAt(j) >= 128) {
10067
+ error("not-basic");
10068
+ }
10069
+ output.push(input.charCodeAt(j));
10070
+ }
10071
+ for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; ) {
10072
+ const oldi = i;
10073
+ for (let w = 1, k4 = base; ; k4 += base) {
10074
+ if (index >= inputLength) {
10075
+ error("invalid-input");
10076
+ }
10077
+ const digit = basicToDigit(input.charCodeAt(index++));
10078
+ if (digit >= base) {
10079
+ error("invalid-input");
10080
+ }
10081
+ if (digit > floor((maxInt - i) / w)) {
10082
+ error("overflow");
10083
+ }
10084
+ i += digit * w;
10085
+ const t = k4 <= bias2 ? tMin : k4 >= bias2 + tMax ? tMax : k4 - bias2;
10086
+ if (digit < t) {
10087
+ break;
10088
+ }
10089
+ const baseMinusT = base - t;
10090
+ if (w > floor(maxInt / baseMinusT)) {
10091
+ error("overflow");
10092
+ }
10093
+ w *= baseMinusT;
10094
+ }
10095
+ const out = output.length + 1;
10096
+ bias2 = adapt(i - oldi, out, oldi == 0);
10097
+ if (floor(i / out) > maxInt - n2) {
10098
+ error("overflow");
10099
+ }
10100
+ n2 += floor(i / out);
10101
+ i %= out;
10102
+ output.splice(i++, 0, n2);
10103
+ }
10104
+ return String.fromCodePoint(...output);
10105
+ }
10106
+ function toUnicode(input) {
10107
+ return mapDomain(input, function(string) {
10108
+ return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;
10109
+ });
10110
+ }
10111
+
10112
+ // ../../internal/utils/src/url.ts
10113
+ function isEmail(input) {
10114
+ if (input.trim() === "") {
10115
+ return false;
10116
+ }
10117
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
10118
+ return emailRegex.test(input);
10119
+ }
10120
+ function removeHttpProtocol(input) {
10121
+ return input.replace(/^https?:\/\//, "");
10122
+ }
10123
+ function stripDomainWildcardPrefix(domain) {
10124
+ const trimmedDomain = domain.trim();
10125
+ const strippedDomain = trimmedDomain.startsWith("*.") ? trimmedDomain.slice(2) : trimmedDomain;
10126
+ return strippedDomain.length > 0 ? strippedDomain : null;
10127
+ }
10128
+ function getDefangedUrl(input) {
10129
+ if (!isUrl(input)) {
10130
+ console.warn(`[getDefangedUrl] Invalid URL: ${input}, returning input as-is`);
10131
+ return input;
10132
+ }
10133
+ return input.replace(/\./g, "[.]").replace(/(https:\/\/)/g, "hxxps://").replace(/(http:\/\/)/g, "hxxp://").replace(/:\/\//g, "[://]");
10134
+ }
10135
+ function getRefangedUrl(input) {
10136
+ return input.replace(/hxxps/gi, "https").replace(/hxxp/gi, "http").replace(/\[:\/{2}\]/g, "://").replace(/\[\.\]/g, ".");
10137
+ }
10138
+ function containsPunycode(url) {
10139
+ return url.indexOf("xn--") !== -1;
10140
+ }
10141
+ function toUnicode2(url) {
10142
+ return toUnicode(url);
10143
+ }
10144
+ function convertHttpsToHttp(url) {
10145
+ if (url.startsWith("https://")) {
10146
+ const httpUrl = new URL(url);
10147
+ httpUrl.protocol = "http:";
10148
+ return httpUrl.toString();
10149
+ }
10150
+ throw new Error(`URL is not HTTPS: ${url}`);
10151
+ }
10152
+ function generateCanonicalIPFSUrl(content) {
10153
+ if (!content) {
10154
+ return content;
10155
+ }
10156
+ if (content.includes("ipfs.io")) {
10157
+ return content;
10158
+ }
10159
+ if (content.startsWith("Qm") || content.startsWith("bafy")) {
10160
+ return `ipfs.io/ipfs/${content}`;
10161
+ }
10162
+ return content;
10163
+ }
10164
+ function isWalrusSite(content) {
10165
+ return content.includes(".walrus.site") || content.includes(".walrus.host") || content.includes(".wal.app") || content.includes(".wal.site");
10166
+ }
10167
+ function getFaviconUrl(content) {
10168
+ const normalizedUrl = getNormalizedUrl(content);
10169
+ return `https://icons.duckduckgo.com/ip3/${normalizedUrl.hostname}.ico`;
10170
+ }
10171
+ function sanitizeHttpUrl(value) {
10172
+ if (typeof value !== "string" || value.length === 0) {
10173
+ return null;
10174
+ }
10175
+ try {
10176
+ const parsed = new URL(value);
10177
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
10178
+ return null;
10179
+ }
10180
+ return parsed.toString();
10181
+ } catch (e4) {
10182
+ return null;
10183
+ }
10184
+ }
10185
+ var SCHEME_PREFIX_REGEX = /^[a-z][a-z0-9+.-]*:\/\//i;
10186
+ function getPublicHostname(input) {
10187
+ try {
10188
+ const trimmed = input.trim();
10189
+ const hasHttpScheme = /^https?:\/\//i.test(trimmed);
10190
+ if (!hasHttpScheme && SCHEME_PREFIX_REGEX.test(trimmed)) {
10191
+ return null;
10192
+ }
10193
+ const withScheme = hasHttpScheme ? trimmed : `https://${trimmed}`;
10194
+ const afterScheme = withScheme.replace(SCHEME_PREFIX_REGEX, "");
10195
+ const authority = afterScheme.split(/[/?#\\]/)[0];
10196
+ const remainder = afterScheme.slice(authority.length);
10197
+ if (remainder !== "" && remainder !== "/") {
10198
+ return null;
10199
+ }
10200
+ if (!/^[\p{L}\p{N}.-]+$/u.test(authority)) {
10201
+ return null;
10202
+ }
10203
+ const url = new URL(withScheme);
10204
+ const host = url.hostname.toLowerCase().replace(/\.$/, "");
10205
+ if (host.split(".").includes("")) {
10206
+ return null;
10207
+ }
10208
+ const parsed = tldts.parse(host);
10209
+ if (parsed.isIp || !parsed.isIcann || !parsed.domain) {
10210
+ return null;
10211
+ }
10212
+ return host;
10213
+ } catch (e4) {
10214
+ return null;
10215
+ }
10216
+ }
10217
+ var URL_REGEX = /https?:\/\/[^\s"'<>\])]*/g;
10218
+
10219
+ // ../../internal/utils/src/enrichments.ts
10220
+ var enrichments_exports = {};
10221
+ __export(enrichments_exports, {
10222
+ ASSET_SCAN_ENRICHMENT_SOURCE_LABELS: () => ASSET_SCAN_ENRICHMENT_SOURCE_LABELS,
10223
+ ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES: () => ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES,
10224
+ ASSET_SCAN_ENRICHMENT_TYPE_LABELS: () => ASSET_SCAN_ENRICHMENT_TYPE_LABELS,
10225
+ AssetScanEnrichmentSource: () => AssetScanEnrichmentSource,
10226
+ AssetScanEnrichmentType: () => AssetScanEnrichmentType
10227
+ });
10228
+ var AssetScanEnrichmentType = /* @__PURE__ */ ((AssetScanEnrichmentType2) => {
10229
+ AssetScanEnrichmentType2["CONTENT_AND_METADATA"] = "content_and_metadata";
10230
+ AssetScanEnrichmentType2["BROWSER_CAPTURE"] = "browser_capture";
10231
+ AssetScanEnrichmentType2["OWNERSHIP_AND_REGISTRATION"] = "ownership_and_registration";
10232
+ AssetScanEnrichmentType2["GEOLOCATION_AND_IP"] = "geolocation_and_ip";
10233
+ AssetScanEnrichmentType2["DNS"] = "dns";
10234
+ AssetScanEnrichmentType2["TLS"] = "tls";
10235
+ AssetScanEnrichmentType2["TCP"] = "tcp";
10236
+ AssetScanEnrichmentType2["HOSTNAME_FIRST_SEEN"] = "hostname_first_seen";
10237
+ AssetScanEnrichmentType2["TWITTER_POST"] = "post";
10238
+ AssetScanEnrichmentType2["TWITTER_PROFILE"] = "profile";
10239
+ AssetScanEnrichmentType2["TWITTER_FOLLOWERS"] = "twitter_followers";
10240
+ AssetScanEnrichmentType2["FARCASTER_CAST"] = "cast";
10241
+ AssetScanEnrichmentType2["FARCASTER_PROFILE"] = "farcaster_profile";
10242
+ AssetScanEnrichmentType2["FARCASTER_CHANNEL"] = "channel";
10243
+ AssetScanEnrichmentType2["FARCASTER_MINIAPP"] = "miniapp";
10244
+ AssetScanEnrichmentType2["TELEGRAM_PROFILE"] = "telegram_profile";
10245
+ AssetScanEnrichmentType2["INSTAGRAM_PROFILE"] = "instagram_profile";
10246
+ AssetScanEnrichmentType2["FACEBOOK_PROFILE"] = "facebook_profile";
10247
+ AssetScanEnrichmentType2["YOUTUBE_VIDEO"] = "youtube_video";
10248
+ AssetScanEnrichmentType2["YOUTUBE_CHANNEL"] = "youtube_channel";
10249
+ AssetScanEnrichmentType2["APPLE_APP_STORE_LISTING"] = "apple_app_store_listing";
10250
+ AssetScanEnrichmentType2["GOOGLE_PLAY_STORE_LISTING"] = "google_play_store_listing";
10251
+ AssetScanEnrichmentType2["MOZILLA_ADDON"] = "mozilla_addon";
10252
+ AssetScanEnrichmentType2["GITHUB_COMMENT"] = "github_comment";
10253
+ AssetScanEnrichmentType2["REDDIT_SUBREDDIT"] = "reddit_subreddit";
10254
+ AssetScanEnrichmentType2["EMAIL_VALIDATION"] = "email_validation";
10255
+ AssetScanEnrichmentType2["PHONE_LOOKUP"] = "phone_lookup";
10256
+ AssetScanEnrichmentType2["BILIBILI_VIDEO"] = "bilibili_video";
10257
+ AssetScanEnrichmentType2["BILIBILI_PROFILE"] = "bilibili_profile";
10258
+ AssetScanEnrichmentType2["DAILYMOTION_VIDEO"] = "dailymotion_video";
10259
+ AssetScanEnrichmentType2["VIMEO_VIDEO"] = "vimeo_video";
10260
+ AssetScanEnrichmentType2["VIMEO_PROFILE"] = "vimeo_profile";
10261
+ AssetScanEnrichmentType2["STACKBLITZ_PAGE"] = "stackblitz_page";
10262
+ AssetScanEnrichmentType2["LEETCODE_PAGE"] = "leetcode_page";
10263
+ AssetScanEnrichmentType2["TUMBLR_BLOG"] = "tumblr_blog";
10264
+ AssetScanEnrichmentType2["TUMBLR_POST"] = "tumblr_post";
10265
+ AssetScanEnrichmentType2["TUMBLR_COMMUNITY"] = "tumblr_community";
10266
+ AssetScanEnrichmentType2["NPM_PACKAGE"] = "npm_package";
10267
+ AssetScanEnrichmentType2["PYPI_PACKAGE"] = "pypi_package";
10268
+ AssetScanEnrichmentType2["RUST_PACKAGE"] = "rust_package";
10269
+ AssetScanEnrichmentType2["LINKEDIN_PROFILE"] = "linkedin_profile";
10270
+ AssetScanEnrichmentType2["PUMP_FUN_TOKEN"] = "pump_fun_token";
10271
+ AssetScanEnrichmentType2["META_AD"] = "meta_ad";
10272
+ AssetScanEnrichmentType2["GOOGLE_AD"] = "google_ad";
10273
+ AssetScanEnrichmentType2["ADLIBRARY_AD"] = "adlibrary_ad";
10274
+ AssetScanEnrichmentType2["CONTRACT_DEPLOYER"] = "contract_deployer";
10275
+ AssetScanEnrichmentType2["THREAT_INTEL"] = "threat_intel";
10276
+ AssetScanEnrichmentType2["LIST_MEMBERSHIP"] = "list_membership";
10277
+ AssetScanEnrichmentType2["THREAT_SCORE"] = "threat_score";
10278
+ return AssetScanEnrichmentType2;
10279
+ })(AssetScanEnrichmentType || {});
10280
+ var AssetScanEnrichmentSource = /* @__PURE__ */ ((AssetScanEnrichmentSource2) => {
10281
+ AssetScanEnrichmentSource2["URLSCAN"] = "urlscan";
10282
+ AssetScanEnrichmentSource2["WHOIS"] = "whois";
10283
+ AssetScanEnrichmentSource2["RDAP"] = "rdap";
10284
+ AssetScanEnrichmentSource2["HTTP_CONTENT"] = "http_content";
10285
+ AssetScanEnrichmentSource2["NETWORK"] = "node_js_network";
10286
+ AssetScanEnrichmentSource2["EXTENSION"] = "extension";
10287
+ AssetScanEnrichmentSource2["PLAYWRIGHT"] = "playwright";
10288
+ AssetScanEnrichmentSource2["CHAINPATROL_BROWSER"] = "chainpatrol_browser";
10289
+ AssetScanEnrichmentSource2["STEEL_BROWSER"] = "steel_browser";
10290
+ AssetScanEnrichmentSource2["X_API"] = "x_api";
10291
+ AssetScanEnrichmentSource2["SOCIALDATA_API"] = "socialdata_api";
10292
+ AssetScanEnrichmentSource2["NEYNAR_API"] = "neynar_api";
10293
+ AssetScanEnrichmentSource2["TELEGRAM_API"] = "telegram_api";
10294
+ AssetScanEnrichmentSource2["INSTAGRAM_API"] = "instagram_api";
10295
+ AssetScanEnrichmentSource2["FACEBOOK_API"] = "facebook_api";
10296
+ AssetScanEnrichmentSource2["YOUTUBE_API"] = "youtube_api";
10297
+ AssetScanEnrichmentSource2["APPLE_APP_STORE_API"] = "apple_app_store_api";
10298
+ AssetScanEnrichmentSource2["GOOGLE_PLAY_STORE_API"] = "google_play_store_api";
10299
+ AssetScanEnrichmentSource2["MOZILLA_ADDONS_API"] = "mozilla_addons_api";
10300
+ AssetScanEnrichmentSource2["GITHUB_API"] = "github_api";
10301
+ AssetScanEnrichmentSource2["REDDIT_API"] = "reddit_api";
10302
+ AssetScanEnrichmentSource2["MAILS_API"] = "mails_api";
10303
+ AssetScanEnrichmentSource2["TELNYX_LOOKUP"] = "telnyx_lookup";
10304
+ AssetScanEnrichmentSource2["TWILIO_LOOKUP"] = "twilio_lookup";
10305
+ AssetScanEnrichmentSource2["DAILYMOTION_API"] = "dailymotion_api";
10306
+ AssetScanEnrichmentSource2["VIMEO_API"] = "vimeo_api";
10307
+ AssetScanEnrichmentSource2["STACKBLITZ_API"] = "stackblitz_api";
10308
+ AssetScanEnrichmentSource2["LEETCODE_API"] = "leetcode_api";
10309
+ AssetScanEnrichmentSource2["TUMBLR_API"] = "tumblr_api";
10310
+ AssetScanEnrichmentSource2["NPM_REGISTRY_API"] = "npm_registry_api";
10311
+ AssetScanEnrichmentSource2["PYPI_REGISTRY_API"] = "pypi_registry_api";
10312
+ AssetScanEnrichmentSource2["CRATES_IO_API"] = "crates_io_api";
10313
+ AssetScanEnrichmentSource2["APIFY_LINKEDIN_API"] = "apify_linkedin_api";
10314
+ AssetScanEnrichmentSource2["PUMP_FUN_API"] = "pump_fun_api";
10315
+ AssetScanEnrichmentSource2["META_ADS_LIBRARY"] = "meta_ads_library";
10316
+ AssetScanEnrichmentSource2["STEEL_META_ADS_LIBRARY"] = "steel_meta_ads_library";
10317
+ AssetScanEnrichmentSource2["GOOGLE_ADS_TRANSPARENCY_CENTER"] = "google_ads_transparency_center";
10318
+ AssetScanEnrichmentSource2["ADLIBRARY"] = "adlibrary";
10319
+ AssetScanEnrichmentSource2["ETHERSCAN_API"] = "etherscan_api";
10320
+ AssetScanEnrichmentSource2["GOOGLE_WEB_RISK"] = "google_web_risk";
10321
+ AssetScanEnrichmentSource2["SEAL_ISAC"] = "seal_isac";
10322
+ AssetScanEnrichmentSource2["ETH_PHISHING_DETECT"] = "eth_phishing_detect";
10323
+ AssetScanEnrichmentSource2["POLKADOT_PHISHING"] = "polkadot_phishing";
10324
+ AssetScanEnrichmentSource2["TRANCO"] = "tranco";
10325
+ AssetScanEnrichmentSource2["UMBRELLA"] = "umbrella";
10326
+ AssetScanEnrichmentSource2["OPEN_PAGE_RANK"] = "open_page_rank";
10327
+ AssetScanEnrichmentSource2["DEFILLAMA"] = "defillama";
10328
+ AssetScanEnrichmentSource2["VERCEL_DOMAINS"] = "vercel_domains";
10329
+ return AssetScanEnrichmentSource2;
10330
+ })(AssetScanEnrichmentSource || {});
10331
+ var ASSET_SCAN_ENRICHMENT_TYPE_LABELS = {
10332
+ ["content_and_metadata" /* CONTENT_AND_METADATA */]: "Content and Metadata",
10333
+ ["post" /* TWITTER_POST */]: "Post",
10334
+ ["profile" /* TWITTER_PROFILE */]: "Profile",
10335
+ ["twitter_followers" /* TWITTER_FOLLOWERS */]: "Twitter Followers",
10336
+ ["browser_capture" /* BROWSER_CAPTURE */]: "Browser Capture",
10337
+ ["geolocation_and_ip" /* GEOLOCATION_AND_IP */]: "Geolocation and IP",
10338
+ ["ownership_and_registration" /* OWNERSHIP_AND_REGISTRATION */]: "Ownership and Registration",
10339
+ ["dns" /* DNS */]: "DNS Lookup",
10340
+ ["tls" /* TLS */]: "TLS Connection Info",
10341
+ ["tcp" /* TCP */]: "TCP Connection Info",
10342
+ ["hostname_first_seen" /* HOSTNAME_FIRST_SEEN */]: "Hostname First Seen",
10343
+ // Farcaster
10344
+ ["cast" /* FARCASTER_CAST */]: "Farcaster Cast",
10345
+ ["farcaster_profile" /* FARCASTER_PROFILE */]: "Farcaster Profile",
10346
+ ["channel" /* FARCASTER_CHANNEL */]: "Farcaster Channel",
10347
+ ["miniapp" /* FARCASTER_MINIAPP */]: "Farcaster MiniApp",
10348
+ // Telegram
10349
+ ["telegram_profile" /* TELEGRAM_PROFILE */]: "Telegram Profile",
10350
+ // Instagram
10351
+ ["instagram_profile" /* INSTAGRAM_PROFILE */]: "Instagram Profile",
10352
+ // Facebook
10353
+ ["facebook_profile" /* FACEBOOK_PROFILE */]: "Facebook Profile",
10354
+ // YouTube
10355
+ ["youtube_video" /* YOUTUBE_VIDEO */]: "YouTube Video",
10356
+ ["youtube_channel" /* YOUTUBE_CHANNEL */]: "YouTube Channel",
10357
+ // Apple App Store
10358
+ ["apple_app_store_listing" /* APPLE_APP_STORE_LISTING */]: "Apple App Store Listing",
10359
+ // Google Play Store
10360
+ ["google_play_store_listing" /* GOOGLE_PLAY_STORE_LISTING */]: "Google Play Store Listing",
10361
+ // Mozilla
10362
+ ["mozilla_addon" /* MOZILLA_ADDON */]: "Mozilla Add-on",
10363
+ // GitHub
10364
+ ["github_comment" /* GITHUB_COMMENT */]: "GitHub Comment",
10365
+ // Reddit
10366
+ ["reddit_subreddit" /* REDDIT_SUBREDDIT */]: "Reddit Subreddit",
10367
+ // Email
10368
+ ["email_validation" /* EMAIL_VALIDATION */]: "Email Validation",
10369
+ // Phone Number
10370
+ ["phone_lookup" /* PHONE_LOOKUP */]: "Phone Lookup",
10371
+ // Bilibili
10372
+ ["bilibili_video" /* BILIBILI_VIDEO */]: "Bilibili Video",
10373
+ ["bilibili_profile" /* BILIBILI_PROFILE */]: "Bilibili Profile",
10374
+ // DailyMotion
10375
+ ["dailymotion_video" /* DAILYMOTION_VIDEO */]: "DailyMotion Video",
10376
+ // Vimeo
10377
+ ["vimeo_video" /* VIMEO_VIDEO */]: "Vimeo Video",
10378
+ ["vimeo_profile" /* VIMEO_PROFILE */]: "Vimeo Profile",
10379
+ // Stackblitz
10380
+ ["stackblitz_page" /* STACKBLITZ_PAGE */]: "Stackblitz Page",
10381
+ // Leetcode
10382
+ ["leetcode_page" /* LEETCODE_PAGE */]: "Leetcode Page",
10383
+ // Tumblr
10384
+ ["tumblr_blog" /* TUMBLR_BLOG */]: "Tumblr Blog",
10385
+ ["tumblr_post" /* TUMBLR_POST */]: "Tumblr Post",
10386
+ ["tumblr_community" /* TUMBLR_COMMUNITY */]: "Tumblr Community",
10387
+ // NPM
10388
+ ["npm_package" /* NPM_PACKAGE */]: "NPM Package",
10389
+ // PyPI
10390
+ ["pypi_package" /* PYPI_PACKAGE */]: "PyPI Package",
10391
+ // Rust Package
10392
+ ["rust_package" /* RUST_PACKAGE */]: "Rust Package",
10393
+ // LinkedIn
10394
+ ["linkedin_profile" /* LINKEDIN_PROFILE */]: "LinkedIn Profile",
10395
+ // Pump.fun
10396
+ ["pump_fun_token" /* PUMP_FUN_TOKEN */]: "Pump.fun Token",
10397
+ // Meta Ads
10398
+ ["meta_ad" /* META_AD */]: "Meta Ad",
10399
+ // Google Ads
10400
+ ["google_ad" /* GOOGLE_AD */]: "Google Ad",
10401
+ // Cross-platform ad intelligence
10402
+ ["adlibrary_ad" /* ADLIBRARY_AD */]: "AdLibrary Ad",
10403
+ // Crypto / Onchain
10404
+ ["contract_deployer" /* CONTRACT_DEPLOYER */]: "Contract Deployer",
10405
+ // URL reputation
10406
+ ["threat_intel" /* THREAT_INTEL */]: "Threat Intelligence",
10407
+ ["list_membership" /* LIST_MEMBERSHIP */]: "List Membership",
10408
+ ["threat_score" /* THREAT_SCORE */]: "Threat Score"
10409
+ };
10410
+ var ASSET_SCAN_ENRICHMENT_SOURCE_LABELS = {
10411
+ // URL
10412
+ ["urlscan" /* URLSCAN */]: "URLScan",
10413
+ ["whois" /* WHOIS */]: "Whois",
10414
+ ["rdap" /* RDAP */]: "RDAP",
10415
+ ["http_content" /* HTTP_CONTENT */]: "HTTP Content",
10416
+ ["node_js_network" /* NETWORK */]: "Network",
10417
+ ["extension" /* EXTENSION */]: "Browser Extension",
10418
+ ["playwright" /* PLAYWRIGHT */]: "Playwright",
10419
+ ["chainpatrol_browser" /* CHAINPATROL_BROWSER */]: "ChainPatrol Browser",
10420
+ ["steel_browser" /* STEEL_BROWSER */]: "Steel Browser",
10421
+ // Twitter
10422
+ ["x_api" /* X_API */]: "X API",
10423
+ ["socialdata_api" /* SOCIALDATA_API */]: "SocialData API",
10424
+ // Farcaster
10425
+ ["neynar_api" /* NEYNAR_API */]: "Neynar API",
10426
+ // Telegram
10427
+ ["telegram_api" /* TELEGRAM_API */]: "Telegram API",
10428
+ // Instagram
10429
+ ["instagram_api" /* INSTAGRAM_API */]: "Instagram API",
10430
+ // Facebook
10431
+ ["facebook_api" /* FACEBOOK_API */]: "Facebook API",
10432
+ // YouTube
10433
+ ["youtube_api" /* YOUTUBE_API */]: "YouTube API",
10434
+ // Apple App Store
10435
+ ["apple_app_store_api" /* APPLE_APP_STORE_API */]: "Apple App Store API",
10436
+ // Google Play Store
10437
+ ["google_play_store_api" /* GOOGLE_PLAY_STORE_API */]: "Google Play Store API",
10438
+ // Mozilla
10439
+ ["mozilla_addons_api" /* MOZILLA_ADDONS_API */]: "Mozilla Add-ons API",
10440
+ // GitHub
10441
+ ["github_api" /* GITHUB_API */]: "GitHub API",
10442
+ // Reddit
10443
+ ["reddit_api" /* REDDIT_API */]: "Reddit API",
10444
+ // Email
10445
+ ["mails_api" /* MAILS_API */]: "Mails.so API",
10446
+ // Phone Number
10447
+ ["telnyx_lookup" /* TELNYX_LOOKUP */]: "Telnyx Lookup",
10448
+ ["twilio_lookup" /* TWILIO_LOOKUP */]: "Twilio Lookup",
10449
+ // DailyMotion
10450
+ ["dailymotion_api" /* DAILYMOTION_API */]: "DailyMotion API",
10451
+ // Vimeo
10452
+ ["vimeo_api" /* VIMEO_API */]: "Vimeo API",
10453
+ // Stackblitz
10454
+ ["stackblitz_api" /* STACKBLITZ_API */]: "Stackblitz API",
10455
+ // Leetcode
10456
+ ["leetcode_api" /* LEETCODE_API */]: "Leetcode API",
10457
+ // Tumblr
10458
+ ["tumblr_api" /* TUMBLR_API */]: "Tumblr API",
10459
+ // NPM
10460
+ ["npm_registry_api" /* NPM_REGISTRY_API */]: "NPM Registry API",
10461
+ // PyPI
10462
+ ["pypi_registry_api" /* PYPI_REGISTRY_API */]: "PyPI Registry API",
10463
+ // Rust Package
10464
+ ["crates_io_api" /* CRATES_IO_API */]: "Crates.io API",
10465
+ // LinkedIn
10466
+ ["apify_linkedin_api" /* APIFY_LINKEDIN_API */]: "Apify LinkedIn API",
10467
+ // Pump.fun
10468
+ ["pump_fun_api" /* PUMP_FUN_API */]: "Pump.fun API",
10469
+ // Meta Ads
10470
+ ["meta_ads_library" /* META_ADS_LIBRARY */]: "Meta Ads Library",
10471
+ ["steel_meta_ads_library" /* STEEL_META_ADS_LIBRARY */]: "Steel Meta Ads Library",
10472
+ // Google Ads
10473
+ ["google_ads_transparency_center" /* GOOGLE_ADS_TRANSPARENCY_CENTER */]: "Google Ads Transparency Center",
10474
+ // Cross-platform ad intelligence
10475
+ ["adlibrary" /* ADLIBRARY */]: "AdLibrary",
10476
+ // Crypto / Onchain
10477
+ ["etherscan_api" /* ETHERSCAN_API */]: "Etherscan",
10478
+ // URL reputation
10479
+ ["google_web_risk" /* GOOGLE_WEB_RISK */]: "Google Web Risk",
10480
+ ["seal_isac" /* SEAL_ISAC */]: "SEAL-ISAC",
10481
+ ["eth_phishing_detect" /* ETH_PHISHING_DETECT */]: "eth-phishing-detect",
10482
+ ["polkadot_phishing" /* POLKADOT_PHISHING */]: "Polkadot Phishing",
10483
+ ["tranco" /* TRANCO */]: "Tranco",
10484
+ ["umbrella" /* UMBRELLA */]: "Cisco Umbrella",
10485
+ ["open_page_rank" /* OPEN_PAGE_RANK */]: "Open Page Rank",
10486
+ ["defillama" /* DEFILLAMA */]: "DefiLlama",
10487
+ ["vercel_domains" /* VERCEL_DOMAINS */]: "Vercel Domains"
10488
+ };
10489
+ var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
10490
+ // URL-related sources
10491
+ ["urlscan" /* URLSCAN */]: [
10492
+ "browser_capture" /* BROWSER_CAPTURE */,
10493
+ "geolocation_and_ip" /* GEOLOCATION_AND_IP */,
10494
+ "hostname_first_seen" /* HOSTNAME_FIRST_SEEN */
10495
+ ],
10496
+ ["whois" /* WHOIS */]: ["ownership_and_registration" /* OWNERSHIP_AND_REGISTRATION */],
10497
+ ["rdap" /* RDAP */]: ["ownership_and_registration" /* OWNERSHIP_AND_REGISTRATION */],
10498
+ ["http_content" /* HTTP_CONTENT */]: [
10499
+ "content_and_metadata" /* CONTENT_AND_METADATA */
10500
+ ],
10501
+ ["node_js_network" /* NETWORK */]: [
10502
+ "dns" /* DNS */,
10503
+ "tls" /* TLS */,
10504
+ "tcp" /* TCP */
10505
+ ],
10506
+ ["extension" /* EXTENSION */]: [
10507
+ "browser_capture" /* BROWSER_CAPTURE */,
10508
+ "telegram_profile" /* TELEGRAM_PROFILE */,
10509
+ "linkedin_profile" /* LINKEDIN_PROFILE */,
10510
+ "instagram_profile" /* INSTAGRAM_PROFILE */,
10511
+ "meta_ad" /* META_AD */
10512
+ ],
10513
+ ["playwright" /* PLAYWRIGHT */]: [
10514
+ "browser_capture" /* BROWSER_CAPTURE */,
10515
+ "bilibili_video" /* BILIBILI_VIDEO */,
10516
+ "bilibili_profile" /* BILIBILI_PROFILE */,
10517
+ "telegram_profile" /* TELEGRAM_PROFILE */
10518
+ ],
10519
+ // Only the generic page capture: the in-house browser does not (yet) run the
10520
+ // platform-specific scrapes PLAYWRIGHT does above.
10521
+ ["chainpatrol_browser" /* CHAINPATROL_BROWSER */]: [
10522
+ "browser_capture" /* BROWSER_CAPTURE */
10523
+ ],
10524
+ ["steel_browser" /* STEEL_BROWSER */]: ["browser_capture" /* BROWSER_CAPTURE */],
10525
+ // Twitter-related sources
10526
+ ["x_api" /* X_API */]: [
10527
+ "post" /* TWITTER_POST */,
10528
+ "profile" /* TWITTER_PROFILE */,
10529
+ "twitter_followers" /* TWITTER_FOLLOWERS */
10530
+ ],
10531
+ ["socialdata_api" /* SOCIALDATA_API */]: [
10532
+ "post" /* TWITTER_POST */,
10533
+ "profile" /* TWITTER_PROFILE */,
10534
+ "twitter_followers" /* TWITTER_FOLLOWERS */
10535
+ ],
10536
+ // Farcaster-related sources
10537
+ ["neynar_api" /* NEYNAR_API */]: [
10538
+ "cast" /* FARCASTER_CAST */,
10539
+ "farcaster_profile" /* FARCASTER_PROFILE */,
10540
+ "channel" /* FARCASTER_CHANNEL */,
10541
+ "miniapp" /* FARCASTER_MINIAPP */
10542
+ ],
10543
+ // Telegram-related sources
10544
+ ["telegram_api" /* TELEGRAM_API */]: ["telegram_profile" /* TELEGRAM_PROFILE */],
10545
+ // Instagram-related sources
10546
+ ["instagram_api" /* INSTAGRAM_API */]: ["instagram_profile" /* INSTAGRAM_PROFILE */],
10547
+ // Facebook-related sources
10548
+ ["facebook_api" /* FACEBOOK_API */]: ["facebook_profile" /* FACEBOOK_PROFILE */],
10549
+ // YouTube-related sources
10550
+ ["youtube_api" /* YOUTUBE_API */]: [
10551
+ "youtube_video" /* YOUTUBE_VIDEO */,
10552
+ "youtube_channel" /* YOUTUBE_CHANNEL */
10553
+ ],
10554
+ // Apple App Store-related sources
10555
+ ["apple_app_store_api" /* APPLE_APP_STORE_API */]: [
10556
+ "apple_app_store_listing" /* APPLE_APP_STORE_LISTING */
10557
+ ],
10558
+ // Google Play Store-related sources
10559
+ ["google_play_store_api" /* GOOGLE_PLAY_STORE_API */]: [
10560
+ "google_play_store_listing" /* GOOGLE_PLAY_STORE_LISTING */
10561
+ ],
10562
+ // Mozilla-related sources
10563
+ ["mozilla_addons_api" /* MOZILLA_ADDONS_API */]: ["mozilla_addon" /* MOZILLA_ADDON */],
10564
+ // GitHub-related sources
10565
+ ["github_api" /* GITHUB_API */]: ["github_comment" /* GITHUB_COMMENT */],
10566
+ // Reddit-related sources
10567
+ ["reddit_api" /* REDDIT_API */]: ["reddit_subreddit" /* REDDIT_SUBREDDIT */],
10568
+ // Email-related sources
10569
+ ["mails_api" /* MAILS_API */]: ["email_validation" /* EMAIL_VALIDATION */],
10570
+ // Phone Number-related sources
10571
+ ["telnyx_lookup" /* TELNYX_LOOKUP */]: ["phone_lookup" /* PHONE_LOOKUP */],
10572
+ ["twilio_lookup" /* TWILIO_LOOKUP */]: ["phone_lookup" /* PHONE_LOOKUP */],
10573
+ // DailyMotion-related sources
10574
+ ["dailymotion_api" /* DAILYMOTION_API */]: [
10575
+ "dailymotion_video" /* DAILYMOTION_VIDEO */
10576
+ ],
10577
+ // Vimeo-related sources
10578
+ ["vimeo_api" /* VIMEO_API */]: [
10579
+ "vimeo_video" /* VIMEO_VIDEO */,
10580
+ "vimeo_profile" /* VIMEO_PROFILE */
10581
+ ],
10582
+ // Stackblitz-related sources
10583
+ ["stackblitz_api" /* STACKBLITZ_API */]: ["stackblitz_page" /* STACKBLITZ_PAGE */],
10584
+ // Leetcode-related sources
10585
+ ["leetcode_api" /* LEETCODE_API */]: ["leetcode_page" /* LEETCODE_PAGE */],
10586
+ // Tumblr-related sources
10587
+ ["tumblr_api" /* TUMBLR_API */]: [
10588
+ "tumblr_blog" /* TUMBLR_BLOG */,
10589
+ "tumblr_post" /* TUMBLR_POST */,
10590
+ "tumblr_community" /* TUMBLR_COMMUNITY */
10591
+ ],
10592
+ // NPM-related sources
10593
+ ["npm_registry_api" /* NPM_REGISTRY_API */]: ["npm_package" /* NPM_PACKAGE */],
10594
+ // PyPI-related sources
10595
+ ["pypi_registry_api" /* PYPI_REGISTRY_API */]: ["pypi_package" /* PYPI_PACKAGE */],
10596
+ // Rust Package-related sources
10597
+ ["crates_io_api" /* CRATES_IO_API */]: ["rust_package" /* RUST_PACKAGE */],
10598
+ // LinkedIn-related sources
10599
+ ["apify_linkedin_api" /* APIFY_LINKEDIN_API */]: [
10600
+ "linkedin_profile" /* LINKEDIN_PROFILE */
10601
+ ],
10602
+ // Pump.fun
10603
+ ["pump_fun_api" /* PUMP_FUN_API */]: ["pump_fun_token" /* PUMP_FUN_TOKEN */],
10604
+ // Meta Ads-related sources
10605
+ ["meta_ads_library" /* META_ADS_LIBRARY */]: ["meta_ad" /* META_AD */],
10606
+ ["steel_meta_ads_library" /* STEEL_META_ADS_LIBRARY */]: ["meta_ad" /* META_AD */],
10607
+ // Google Ads-related sources
10608
+ ["google_ads_transparency_center" /* GOOGLE_ADS_TRANSPARENCY_CENTER */]: [
10609
+ "google_ad" /* GOOGLE_AD */
10610
+ ],
10611
+ // Cross-platform ad intelligence sources
10612
+ ["adlibrary" /* ADLIBRARY */]: ["adlibrary_ad" /* ADLIBRARY_AD */],
10613
+ // Crypto / Onchain sources
10614
+ ["etherscan_api" /* ETHERSCAN_API */]: ["contract_deployer" /* CONTRACT_DEPLOYER */],
10615
+ // URL reputation
10616
+ ["google_web_risk" /* GOOGLE_WEB_RISK */]: ["threat_score" /* THREAT_SCORE */],
10617
+ ["seal_isac" /* SEAL_ISAC */]: ["threat_intel" /* THREAT_INTEL */],
10618
+ ["eth_phishing_detect" /* ETH_PHISHING_DETECT */]: ["threat_intel" /* THREAT_INTEL */],
10619
+ ["polkadot_phishing" /* POLKADOT_PHISHING */]: ["threat_intel" /* THREAT_INTEL */],
10620
+ ["tranco" /* TRANCO */]: ["list_membership" /* LIST_MEMBERSHIP */],
10621
+ ["umbrella" /* UMBRELLA */]: ["list_membership" /* LIST_MEMBERSHIP */],
10622
+ ["open_page_rank" /* OPEN_PAGE_RANK */]: ["list_membership" /* LIST_MEMBERSHIP */],
10623
+ ["defillama" /* DEFILLAMA */]: ["list_membership" /* LIST_MEMBERSHIP */],
10624
+ ["vercel_domains" /* VERCEL_DOMAINS */]: ["list_membership" /* LIST_MEMBERSHIP */]
10625
+ };
10626
+
10627
+ // ../../internal/utils/src/array.ts
10628
+ var array_exports = {};
10629
+ __export(array_exports, {
10630
+ arraysEqual: () => arraysEqual,
10631
+ chunkArray: () => chunkArray,
10632
+ combineAndRemoveDuplicatesByKey: () => combineAndRemoveDuplicatesByKey,
10633
+ isArray: () => isArray,
10634
+ isEmptyArray: () => isEmptyArray,
10635
+ isNonEmptyArray: () => isNonEmptyArray,
10636
+ randomElement: () => randomElement,
10637
+ randomIndex: () => randomIndex,
10638
+ removeDuplicates: () => removeDuplicates,
10639
+ shuffleInPlace: () => shuffleInPlace,
10640
+ shuffled: () => shuffled
10641
+ });
10642
+ function isArray(value) {
10643
+ return Array.isArray(value);
10644
+ }
10645
+ function isEmptyArray(value) {
10646
+ return value.length === 0;
10485
10647
  }
10486
- function isValidNanpNational10(d10) {
10487
- if (d10.length !== 10) {
10488
- return false;
10489
- }
10490
- const npaFirst = d10.charCodeAt(0) - 48;
10491
- const nxxFirst = d10.charCodeAt(3) - 48;
10492
- if (npaFirst < 2 || npaFirst > 9) {
10493
- return false;
10494
- }
10495
- if (nxxFirst < 2 || nxxFirst > 9) {
10496
- return false;
10497
- }
10498
- return true;
10648
+ function isNonEmptyArray(value) {
10649
+ return value.length > 0;
10499
10650
  }
10500
- function isPlausiblePhoneDigits(withoutExt) {
10501
- const hasPlus = withoutExt.startsWith("+");
10502
- const d = withoutExt.replace(/\D/g, "");
10503
- if (d.length < 8 || d.length > 15) {
10504
- return false;
10505
- }
10506
- if (isAllSameDigit(d) || isStrictlyMonotonicStep1(d)) {
10507
- return false;
10508
- }
10509
- const onlyDigits = /^\d+$/.test(withoutExt);
10510
- if (hasPlus) {
10511
- if (d.length === 11 && d.startsWith("1")) {
10512
- return isValidNanpNational10(d.slice(1));
10513
- }
10514
- return true;
10515
- }
10516
- if (onlyDigits) {
10517
- if (d.length === 10) {
10518
- return isValidNanpNational10(d);
10519
- }
10520
- if (d.length === 11 && d.startsWith("1")) {
10521
- return isValidNanpNational10(d.slice(1));
10522
- }
10523
- if (d.length === 11 && d.startsWith("0")) {
10524
- return true;
10525
- }
10526
- return false;
10527
- }
10528
- if (d.length === 10) {
10529
- return isValidNanpNational10(d);
10530
- }
10531
- if (d.length === 11 && d.startsWith("1")) {
10532
- return isValidNanpNational10(d.slice(1));
10533
- }
10534
- if (d.length === 11 && d.startsWith("0")) {
10535
- return true;
10536
- }
10537
- if (d.length >= 12 && d.length <= 15) {
10538
- return true;
10539
- }
10540
- return false;
10651
+ function randomIndex(array) {
10652
+ return Math.floor(Math.random() * array.length);
10541
10653
  }
10542
- function isPhoneNumber(input) {
10543
- const trimmed = preparePhoneInput(input);
10544
- if (trimmed === "") {
10545
- return false;
10546
- }
10547
- if (!/^[+\d(]/.test(trimmed)) {
10548
- return false;
10549
- }
10550
- const withoutExt = trimmed.replace(/\s*(ext|extension|x)\s*\d+$/i, "");
10551
- if (/[a-zA-Z]/.test(withoutExt)) {
10552
- return false;
10553
- }
10554
- const hasPhoneMarker = /[+()\s-]/.test(trimmed);
10555
- const isPureDotSeparated = /^\d+(\.\d+)+$/.test(trimmed);
10556
- if (isPureDotSeparated && !hasPhoneMarker) {
10557
- return false;
10558
- }
10559
- const phoneRegex = /^(?:\+?\d{1,4}[\s.-]?)?(?:\(\d{1,4}\)|\d{1,4})[\s.-]?\d{1,4}[\s.-]?\d{1,4}[\s.-]?\d{0,4}(?:\s*(?:ext|x|extension)[\s.]*\d{1,6})?$/i;
10560
- if (!phoneRegex.test(trimmed)) {
10561
- return false;
10562
- }
10563
- return isPlausiblePhoneDigits(withoutExt);
10654
+ function randomElement(array) {
10655
+ return array[randomIndex(array)];
10564
10656
  }
10565
- function normalizePhoneNumber(phone) {
10566
- const trimmed = preparePhoneInput(phone);
10567
- const withoutExt = trimmed.replace(/\s*(ext|extension|x)\s*\d+$/i, "");
10568
- const hasPlus = withoutExt.startsWith("+");
10569
- const digitsOnly = withoutExt.replace(/\D/g, "");
10570
- return hasPlus ? `+${digitsOnly}` : digitsOnly;
10657
+ function removeDuplicates(array) {
10658
+ return Array.from(new Set(array));
10571
10659
  }
10572
-
10573
- // ../../internal/utils/src/punycode.ts
10574
- var maxInt = 2147483647;
10575
- var base = 36;
10576
- var tMin = 1;
10577
- var tMax = 26;
10578
- var skew = 38;
10579
- var damp = 700;
10580
- var initialBias = 72;
10581
- var initialN = 128;
10582
- var delimiter = "-";
10583
- var regexPunycode = /^xn--/;
10584
- var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g;
10585
- var errors = {
10586
- overflow: "Overflow: input needs wider integers to process",
10587
- "not-basic": "Illegal input >= 0x80 (not a basic code point)",
10588
- "invalid-input": "Invalid input"
10589
- };
10590
- var baseMinusTMin = base - tMin;
10591
- var floor = Math.floor;
10592
- function error(type) {
10593
- throw new RangeError(errors[type]);
10660
+ function combineAndRemoveDuplicatesByKey(arr1, arr2, uniqueKey) {
10661
+ const combinedArray = [...arr1, ...arr2];
10662
+ const uniqueObjects = new Map(
10663
+ combinedArray.map((item) => [item[uniqueKey], item])
10664
+ );
10665
+ return Array.from(uniqueObjects.values());
10594
10666
  }
10595
- function mapDomain(domain, callback) {
10596
- const parts = domain.split("@");
10597
- let result = "";
10598
- if (parts.length > 1) {
10599
- result = parts[0] + "@";
10600
- domain = parts[1];
10667
+ function chunkArray(array, chunkSize) {
10668
+ const chunks = [];
10669
+ for (let i = 0; i < array.length; i += chunkSize) {
10670
+ chunks.push(array.slice(i, i + chunkSize));
10601
10671
  }
10602
- domain = domain.replace(regexSeparators, ".");
10603
- const labels = domain.split(".");
10604
- const encoded = labels.map(callback).join(".");
10605
- return result + encoded;
10672
+ return chunks;
10606
10673
  }
10607
- function basicToDigit(codePoint) {
10608
- if (codePoint >= 48 && codePoint < 58) {
10609
- return 26 + (codePoint - 48);
10610
- }
10611
- if (codePoint >= 65 && codePoint < 91) {
10612
- return codePoint - 65;
10613
- }
10614
- if (codePoint >= 97 && codePoint < 123) {
10615
- return codePoint - 97;
10674
+ function shuffleInPlace(array) {
10675
+ for (let i = array.length - 1; i > 0; i--) {
10676
+ const j = Math.floor(Math.random() * (i + 1));
10677
+ [array[i], array[j]] = [array[j], array[i]];
10616
10678
  }
10617
- return base;
10618
10679
  }
10619
- function adapt(delta, numPoints, firstTime) {
10620
- let k4 = 0;
10621
- delta = firstTime ? floor(delta / damp) : delta >> 1;
10622
- delta += floor(delta / numPoints);
10623
- for (
10624
- ;
10625
- /* no initialization */
10626
- delta > baseMinusTMin * tMax >> 1;
10627
- k4 += base
10628
- ) {
10629
- delta = floor(delta / baseMinusTMin);
10630
- }
10631
- return floor(k4 + (baseMinusTMin + 1) * delta / (delta + skew));
10680
+ function shuffled(array) {
10681
+ const newArray = array.slice();
10682
+ shuffleInPlace(newArray);
10683
+ return newArray;
10632
10684
  }
10633
- function decode(input) {
10634
- const output = [];
10635
- const inputLength = input.length;
10636
- let i = 0;
10637
- let n2 = initialN;
10638
- let bias2 = initialBias;
10639
- let basic = input.lastIndexOf(delimiter);
10640
- if (basic < 0) {
10641
- basic = 0;
10685
+ function arraysEqual(a, b) {
10686
+ if (a.length !== b.length) return false;
10687
+ const sortedA = [...a].sort();
10688
+ const sortedB = [...b].sort();
10689
+ return sortedA.every((val, idx) => val === sortedB[idx]);
10690
+ }
10691
+
10692
+ // ../../internal/utils/src/cron.ts
10693
+ var cron_exports = {};
10694
+ __export(cron_exports, {
10695
+ cronToHumanReadable: () => cronToHumanReadable,
10696
+ isValidCronExpression: () => isValidCronExpression
10697
+ });
10698
+ var WEEKDAYS = [
10699
+ "Sunday",
10700
+ "Monday",
10701
+ "Tuesday",
10702
+ "Wednesday",
10703
+ "Thursday",
10704
+ "Friday",
10705
+ "Saturday"
10706
+ ];
10707
+ var MONTHS = [
10708
+ "January",
10709
+ "February",
10710
+ "March",
10711
+ "April",
10712
+ "May",
10713
+ "June",
10714
+ "July",
10715
+ "August",
10716
+ "September",
10717
+ "October",
10718
+ "November",
10719
+ "December"
10720
+ ];
10721
+ function cronToHumanReadable(cronExpression) {
10722
+ const [minute, hour, dayOfMonth, month, dayOfWeek2] = cronExpression.split(" ");
10723
+ let result = "Runs ";
10724
+ if (minute === "*") {
10725
+ result += "every minute ";
10726
+ } else if (minute.includes("/")) {
10727
+ const [, interval] = minute.split("/");
10728
+ result += `every ${interval} minutes `;
10729
+ } else {
10730
+ result += `at minute ${minute} `;
10642
10731
  }
10643
- for (let j = 0; j < basic; ++j) {
10644
- if (input.charCodeAt(j) >= 128) {
10645
- error("not-basic");
10646
- }
10647
- output.push(input.charCodeAt(j));
10732
+ if (hour !== "*") {
10733
+ result += `past hour ${hour} `;
10734
+ }
10735
+ if (dayOfMonth !== "*") {
10736
+ result += `on the ${dayOfMonth}${getDaySuffix(
10737
+ parseInt(dayOfMonth)
10738
+ )} day of the month `;
10648
10739
  }
10649
- for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; ) {
10650
- const oldi = i;
10651
- for (let w = 1, k4 = base; ; k4 += base) {
10652
- if (index >= inputLength) {
10653
- error("invalid-input");
10654
- }
10655
- const digit = basicToDigit(input.charCodeAt(index++));
10656
- if (digit >= base) {
10657
- error("invalid-input");
10658
- }
10659
- if (digit > floor((maxInt - i) / w)) {
10660
- error("overflow");
10661
- }
10662
- i += digit * w;
10663
- const t = k4 <= bias2 ? tMin : k4 >= bias2 + tMax ? tMax : k4 - bias2;
10664
- if (digit < t) {
10665
- break;
10666
- }
10667
- const baseMinusT = base - t;
10668
- if (w > floor(maxInt / baseMinusT)) {
10669
- error("overflow");
10670
- }
10671
- w *= baseMinusT;
10672
- }
10673
- const out = output.length + 1;
10674
- bias2 = adapt(i - oldi, out, oldi == 0);
10675
- if (floor(i / out) > maxInt - n2) {
10676
- error("overflow");
10677
- }
10678
- n2 += floor(i / out);
10679
- i %= out;
10680
- output.splice(i++, 0, n2);
10740
+ if (month !== "*") {
10741
+ const monthNames = month.split(",").map((m) => MONTHS[parseInt(m) - 1]);
10742
+ result += `in ${monthNames.join(", ")} `;
10681
10743
  }
10682
- return String.fromCodePoint(...output);
10683
- }
10684
- function toUnicode(input) {
10685
- return mapDomain(input, function(string) {
10686
- return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;
10687
- });
10688
- }
10689
-
10690
- // ../../internal/utils/src/url.ts
10691
- function isEmail(input) {
10692
- if (input.trim() === "") {
10693
- return false;
10744
+ if (dayOfWeek2 !== "*") {
10745
+ const dayNames = dayOfWeek2.split(",").map((d) => WEEKDAYS[parseInt(d)]);
10746
+ result += `on ${dayNames.join(", ")}`;
10694
10747
  }
10695
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
10696
- return emailRegex.test(input);
10697
- }
10698
- function removeHttpProtocol(input) {
10699
- return input.replace(/^https?:\/\//, "");
10700
- }
10701
- function stripDomainWildcardPrefix(domain) {
10702
- const trimmedDomain = domain.trim();
10703
- const strippedDomain = trimmedDomain.startsWith("*.") ? trimmedDomain.slice(2) : trimmedDomain;
10704
- return strippedDomain.length > 0 ? strippedDomain : null;
10748
+ return result.trim();
10705
10749
  }
10706
- function getDefangedUrl(input) {
10707
- if (!isUrl(input)) {
10708
- console.warn(`[getDefangedUrl] Invalid URL: ${input}, returning input as-is`);
10709
- return input;
10750
+ function getDaySuffix(day) {
10751
+ if (day >= 11 && day <= 13) {
10752
+ return "th";
10753
+ }
10754
+ switch (day % 10) {
10755
+ case 1:
10756
+ return "st";
10757
+ case 2:
10758
+ return "nd";
10759
+ case 3:
10760
+ return "rd";
10761
+ default:
10762
+ return "th";
10710
10763
  }
10711
- return input.replace(/\./g, "[.]").replace(/(https:\/\/)/g, "hxxps://").replace(/(http:\/\/)/g, "hxxp://").replace(/:\/\//g, "[://]");
10712
- }
10713
- function getRefangedUrl(input) {
10714
- return input.replace(/hxxps/gi, "https").replace(/hxxp/gi, "http").replace(/\[:\/{2}\]/g, "://").replace(/\[\.\]/g, ".");
10715
- }
10716
- function containsPunycode(url) {
10717
- return url.indexOf("xn--") !== -1;
10718
- }
10719
- function toUnicode2(url) {
10720
- return toUnicode(url);
10721
10764
  }
10722
- function convertHttpsToHttp(url) {
10723
- if (url.startsWith("https://")) {
10724
- const httpUrl = new URL(url);
10725
- httpUrl.protocol = "http:";
10726
- return httpUrl.toString();
10765
+ function isValidCronExpression(cronExpression) {
10766
+ if (!cronExpression || typeof cronExpression !== "string") {
10767
+ return false;
10727
10768
  }
10728
- throw new Error(`URL is not HTTPS: ${url}`);
10769
+ const parts = cronExpression.trim().split(/\s+/);
10770
+ if (parts.length !== 5) {
10771
+ return false;
10772
+ }
10773
+ const [minute, hour, dayOfMonth, month, dayOfWeek2] = parts;
10774
+ return isValidCronField(minute, 0, 59) && isValidCronField(hour, 0, 23) && isValidCronField(dayOfMonth, 1, 31) && isValidCronField(month, 1, 12) && isValidCronField(dayOfWeek2, 0, 7);
10729
10775
  }
10730
- function generateCanonicalIPFSUrl(content) {
10731
- if (!content) {
10732
- return content;
10776
+ function isValidCronField(field, min, max) {
10777
+ if (!field) return false;
10778
+ if (field === "*") return true;
10779
+ if (field.includes("/")) {
10780
+ const [range, step] = field.split("/");
10781
+ const stepNum = parseInt(step);
10782
+ if (isNaN(stepNum) || stepNum <= 0) return false;
10783
+ if (range === "*") return true;
10784
+ return isValidCronField(range, min, max);
10733
10785
  }
10734
- if (content.includes("ipfs.io")) {
10735
- return content;
10786
+ if (field.includes("-")) {
10787
+ const [start, end] = field.split("-");
10788
+ const startNum = parseInt(start);
10789
+ const endNum = parseInt(end);
10790
+ if (isNaN(startNum) || isNaN(endNum)) return false;
10791
+ return startNum >= min && startNum <= max && endNum >= min && endNum <= max && startNum <= endNum;
10736
10792
  }
10737
- if (content.startsWith("Qm") || content.startsWith("bafy")) {
10738
- return `ipfs.io/ipfs/${content}`;
10793
+ if (field.includes(",")) {
10794
+ const values = field.split(",");
10795
+ return values.every((value) => isValidCronField(value.trim(), min, max));
10739
10796
  }
10740
- return content;
10797
+ const num3 = parseInt(field);
10798
+ if (isNaN(num3)) return false;
10799
+ if (max === 7 && num3 === 7) return true;
10800
+ return num3 >= min && num3 <= max;
10741
10801
  }
10742
- function isWalrusSite(content) {
10743
- return content.includes(".walrus.site") || content.includes(".walrus.host") || content.includes(".wal.app") || content.includes(".wal.site");
10802
+
10803
+ // ../../internal/utils/src/object.ts
10804
+ var object_exports = {};
10805
+ __export(object_exports, {
10806
+ isDefined: () => isDefined,
10807
+ isDefinedAndNotNull: () => isDefinedAndNotNull,
10808
+ isNotNull: () => isNotNull
10809
+ });
10810
+ function isDefined(value) {
10811
+ return value !== void 0;
10744
10812
  }
10745
- function getFaviconUrl(content) {
10746
- const normalizedUrl = getNormalizedUrl(content);
10747
- return `https://icons.duckduckgo.com/ip3/${normalizedUrl.hostname}.ico`;
10813
+ function isNotNull(value) {
10814
+ return value !== null;
10748
10815
  }
10749
- function sanitizeHttpUrl(value) {
10750
- if (typeof value !== "string" || value.length === 0) {
10751
- return null;
10752
- }
10753
- try {
10754
- const parsed = new URL(value);
10755
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
10756
- return null;
10757
- }
10758
- return parsed.toString();
10759
- } catch (e4) {
10760
- return null;
10761
- }
10816
+ function isDefinedAndNotNull(value) {
10817
+ return value !== null && value !== void 0;
10818
+ }
10819
+
10820
+ // ../../internal/utils/src/promise.ts
10821
+ var promise_exports = {};
10822
+ __export(promise_exports, {
10823
+ allSettledWithConcurrency: () => allSettledWithConcurrency,
10824
+ isPromiseSettledResultFulfilled: () => isPromiseSettledResultFulfilled,
10825
+ isPromiseSettledResultRejected: () => isPromiseSettledResultRejected
10826
+ });
10827
+ function isPromiseSettledResultFulfilled(result) {
10828
+ return result.status === "fulfilled";
10829
+ }
10830
+ function isPromiseSettledResultRejected(result) {
10831
+ return result.status === "rejected";
10832
+ }
10833
+ function allSettledWithConcurrency(items, limit, fn5) {
10834
+ return __async(this, null, function* () {
10835
+ const results = new Array(items.length);
10836
+ let next = 0;
10837
+ const worker = () => __async(null, null, function* () {
10838
+ for (; ; ) {
10839
+ const index = next;
10840
+ next += 1;
10841
+ if (index >= items.length) return;
10842
+ try {
10843
+ results[index] = { status: "fulfilled", value: yield fn5(items[index], index) };
10844
+ } catch (reason) {
10845
+ results[index] = { status: "rejected", reason };
10846
+ }
10847
+ }
10848
+ });
10849
+ const workers = Math.max(1, Math.min(Math.floor(limit) || 1, items.length));
10850
+ yield Promise.all(Array.from({ length: workers }, worker));
10851
+ return results;
10852
+ });
10762
10853
  }
10763
- var URL_REGEX = /https?:\/\/[^\s"'<>\])]*/g;
10764
10854
 
10765
10855
  // ../../internal/utils/src/email.ts
10766
10856
  var email_exports = {};
@@ -11243,6 +11333,65 @@ function parseLinkedInProfileUrl(url) {
11243
11333
  return { pathSegment, handle, name, profileUrl };
11244
11334
  }
11245
11335
 
11336
+ // ../../internal/utils/src/detection-sources.ts
11337
+ var UNKNOWN_DETECTION_SOURCE = "unknown";
11338
+ var WORD_OVERRIDES = {
11339
+ ads: "Ads",
11340
+ dns: "DNS",
11341
+ dnsdb: "DNSDB",
11342
+ duck: "Duck",
11343
+ go: "Go",
11344
+ ip: "IP",
11345
+ linkedin: "LinkedIn",
11346
+ rss: "RSS",
11347
+ serp: "SERP",
11348
+ tik: "Tik",
11349
+ tok: "Tok",
11350
+ urlscan: "URLScan",
11351
+ youtube: "YouTube"
11352
+ };
11353
+ var KEY_OVERRIDES = {
11354
+ ["duck_duck_go_search" /* DUCK_DUCK_GO_SEARCH */]: "DuckDuckGo Search",
11355
+ ["tik_tok_ads_search" /* TIK_TOK_ADS_SEARCH */]: "TikTok Ads Search",
11356
+ ["tik_tok_user_search" /* TIK_TOK_USER_SEARCH */]: "TikTok User Search",
11357
+ ["tik_tok_video_search" /* TIK_TOK_VIDEO_SEARCH */]: "TikTok Video Search",
11358
+ ["dns_twist" /* DNS_TWIST */]: "DNSTwist",
11359
+ // Keys carry the vendor for internal traceability; customers see neither.
11360
+ ["telegram_user_search_vetric" /* TELEGRAM_USER_SEARCH_VETRIC */]: "Telegram User Discovery",
11361
+ ["telegram_channels_search_vetric" /* TELEGRAM_CHANNELS_SEARCH_VETRIC */]: "Telegram Channel Discovery",
11362
+ ["facebook_page_search_vetric" /* FACEBOOK_PAGE_SEARCH_VETRIC */]: "Facebook Page Discovery",
11363
+ ["facebook_user_search_vetric" /* FACEBOOK_USER_SEARCH_VETRIC */]: "Facebook User Discovery",
11364
+ ["facebook_post_search_vetric" /* FACEBOOK_POST_SEARCH_VETRIC */]: "Facebook Post Discovery",
11365
+ ["instagram_account_search_vetric" /* INSTAGRAM_ACCOUNT_SEARCH_VETRIC */]: "Instagram Account Discovery",
11366
+ ["twitter_search_vetric" /* TWITTER_SEARCH_VETRIC */]: "Twitter People Discovery",
11367
+ ["linkedin_people_search_vetric" /* LINKEDIN_PEOPLE_SEARCH_VETRIC */]: "LinkedIn People Discovery",
11368
+ ["linkedin_company_search_vetric" /* LINKEDIN_COMPANY_SEARCH_VETRIC */]: "LinkedIn Company Discovery",
11369
+ ["meta_ads_search_vetric" /* META_ADS_SEARCH_VETRIC */]: "Meta Ads Discovery",
11370
+ ["tik_tok_user_search_vetric" /* TIK_TOK_USER_SEARCH_VETRIC */]: "TikTok User Discovery",
11371
+ ["tik_tok_video_search_vetric" /* TIK_TOK_VIDEO_SEARCH_VETRIC */]: "TikTok Post Discovery",
11372
+ [UNKNOWN_DETECTION_SOURCE]: "Unknown (no source recorded)"
11373
+ };
11374
+ function detectionSourceLabel(key) {
11375
+ const override = KEY_OVERRIDES[key];
11376
+ if (override) return override;
11377
+ return key.split("_").map((word2) => {
11378
+ var _a;
11379
+ return (_a = WORD_OVERRIDES[word2]) != null ? _a : word2.charAt(0).toUpperCase() + word2.slice(1);
11380
+ }).join(" ");
11381
+ }
11382
+ [
11383
+ ...Object.values(ThreatDetectionSourceKey).map((key) => ({
11384
+ value: key,
11385
+ label: detectionSourceLabel(key),
11386
+ searchText: `${key} ${detectionSourceLabel(key)}`
11387
+ })),
11388
+ {
11389
+ value: UNKNOWN_DETECTION_SOURCE,
11390
+ label: detectionSourceLabel(UNKNOWN_DETECTION_SOURCE),
11391
+ searchText: UNKNOWN_DETECTION_SOURCE
11392
+ }
11393
+ ].sort((a, b) => a.label.localeCompare(b.label));
11394
+
11246
11395
  // ../../internal/validation/src/public/detection/configs-create.ts
11247
11396
  zod.z.object({
11248
11397
  slug: zod.z.string().min(1).optional().describe(
@@ -11902,6 +12051,35 @@ zod.z.object({
11902
12051
  "One series per requested asset type, in the order requested, or a single pooled series when no asset types were given"
11903
12052
  )
11904
12053
  });
12054
+ zod.z.object({
12055
+ slug: zod.z.string().min(1).describe("Organization slug"),
12056
+ startDate: utcDateSchema(false).optional().describe(
12057
+ "Only include assets blocked on or after this date. A date-only value (YYYY-MM-DD) starts at midnight UTC"
12058
+ ),
12059
+ endDate: utcDateSchema(true).optional().describe(
12060
+ "Only include assets blocked on or before this date. A date-only value (YYYY-MM-DD) covers the whole day in UTC; pass a full timestamp for a precise cut-off"
12061
+ ),
12062
+ brandIds: zod.z.array(zod.z.number().int().positive()).optional().describe("Only include assets belonging to these brands"),
12063
+ countryCodes: zod.z.array(zod.z.string().length(2)).optional().describe("Only include assets scanned from these ISO 3166-1 alpha-2 countries")
12064
+ });
12065
+ zod.z.object({
12066
+ byAssetType: zod.z.array(
12067
+ zod.z.object({
12068
+ assetType: zod.z.nativeEnum(AssetType).describe("Asset type that was blocked"),
12069
+ blocked: zod.z.number().describe(
12070
+ "Distinct assets of this type the organization blocked within the date range that are still blocked today"
12071
+ ),
12072
+ withEvidence: zod.z.number().describe(
12073
+ "Of those, how many enter the median: an accepted live date and an automated detection after it. A live date with no detection result does not count, and a human report is not a detection"
12074
+ ),
12075
+ medianDaysAtLeast: zod.z.number().nullable().describe(
12076
+ "Median days the asset was already live before the earliest automated detection of that asset, for any organization. Always a minimum, because the live date is the first time anyone saw the asset. Null when withEvidence is 0"
12077
+ )
12078
+ })
12079
+ ).describe(
12080
+ "Time to Detection, one entry per asset type this organization blocked in the range, descending by number blocked. The clock stops at the earliest automated detection of the asset for any organization, not at this organization's report. Assets that do not enter withEvidence are left out of the median. For URL and page assets only an observed-serving date counts, so a domain registration date never enters the number"
12081
+ )
12082
+ });
11905
12083
  zod.z.object({
11906
12084
  slug: zod.z.string().optional().describe(
11907
12085
  "Organization slug. Optional for organization-scoped API keys, which resolve the organization from the key itself. Required when your credentials can reach more than one organization."
@@ -12107,6 +12285,79 @@ var brandItemSchema = zod.z.object({
12107
12285
  zod.z.object({
12108
12286
  brands: zod.z.array(brandItemSchema).describe("List of brands")
12109
12287
  }).describe("Successful operation");
12288
+ var threatLifecycleStateSchema = zod.z.enum(["investigating", "escalated", "blocked", "allowed", "closed"]).describe(
12289
+ "Lifecycle stage: `investigating` (a report is open and under review), `escalated` (an open report has been passed to the organization for a decision), `blocked` (confirmed malicious), `allowed` (confirmed benign / false positive), `closed` (every report reviewed, asset neither blocked nor allowed). `escalated` reflects an escalation that is still open, not one that was decided and followed by a new report."
12290
+ );
12291
+ zod.z.object({
12292
+ slug: zod.z.string().optional().describe(
12293
+ "Organization slug. Optional for organization-scoped API keys, which resolve the organization from the key itself. Required when your credentials can reach more than one organization."
12294
+ ),
12295
+ /**
12296
+ * A poll watermark rather than a true event cursor: there is no single
12297
+ * change log behind these threats, so the filter is an OR across the
12298
+ * `updatedAt` of every table the projection reads. Set it a few minutes
12299
+ * behind the last successful sync so in-flight writes are not skipped.
12300
+ */
12301
+ updatedSince: zod.z.string().refine((value) => DateTime.fromISO(value, { zone: "utc" }).isValid, {
12302
+ message: "updatedSince must be a valid ISO 8601 timestamp"
12303
+ }).transform((value) => DateTime.fromISO(value, { zone: "utc" }).toJSDate()).optional().describe(
12304
+ "Only return threats touched at or after this ISO 8601 timestamp. Compared against the most recent change to the asset, its reports, and its takedown \u2014 whichever is latest. Omit for a full backfill. Overlap your windows by a few minutes: writes that land mid-request can otherwise fall between two polls."
12305
+ ),
12306
+ assetType: zod.z.nativeEnum(AssetType).optional().describe("Filter by asset type. Omit to return every type."),
12307
+ per_page: zod.z.number().int().min(1).max(1e3).optional().default(100).describe("The number of threats to return per page (max 1000)"),
12308
+ next_page: zod.z.string().optional().nullable().describe("Cursor for fetching the next page of results")
12309
+ }).describe(
12310
+ `List organization threats request body
12311
+
12312
+ Returns every asset this organization has filed a report against, together with
12313
+ the lifecycle state of that investigation \u2014 report opened, escalated, blocked,
12314
+ takedown submitted, takedown completed.
12315
+
12316
+ This is a projection of current state, not an event stream: each threat is
12317
+ returned with the facts as they stand right now, so a consumer that upserts on
12318
+ \`id\` converges regardless of which intermediate transitions it saw. Results are
12319
+ ordered by asset ID ascending and paginated with \`next_page\`.`
12320
+ );
12321
+ var organizationThreatBrandSchema = zod.z.object({
12322
+ slug: zod.z.string().describe("Brand slug"),
12323
+ name: zod.z.string().describe("Brand name")
12324
+ });
12325
+ var organizationThreatTakedownSchema = zod.z.object({
12326
+ status: zod.z.nativeEnum(TakedownStatus).describe("Current takedown status"),
12327
+ submittedAt: zod.z.date().nullable().describe(
12328
+ "When the first takedown request was submitted to a provider, or null if nothing has been submitted yet"
12329
+ ),
12330
+ completedAt: zod.z.date().nullable().describe("When the takedown was marked completed, or null if it has not been")
12331
+ });
12332
+ var organizationThreatSchema = zod.z.object({
12333
+ id: zod.z.number().describe("Asset ID"),
12334
+ content: zod.z.string().describe("Asset content (URL, handle, email, etc.)"),
12335
+ type: zod.z.nativeEnum(AssetType).describe("Asset type"),
12336
+ status: zod.z.nativeEnum(AssetStatus).describe("Raw asset status"),
12337
+ state: threatLifecycleStateSchema,
12338
+ livenessStatus: zod.z.nativeEnum(LivenessStatus).describe(
12339
+ "Whether the threat is currently reachable (`ALIVE`), gone (`DEAD`), or unchecked (`UNKNOWN`)"
12340
+ ),
12341
+ brands: zod.z.array(organizationThreatBrandSchema).describe(
12342
+ "The brands of yours this threat was reported against. Empty when no report named one."
12343
+ ),
12344
+ firstReportedAt: zod.z.date().describe("When this organization first filed a report against the asset"),
12345
+ escalatedAt: zod.z.date().nullable().describe(
12346
+ "When the asset was *first* escalated to this organization for a decision, or null if it never was. This is escalation history, not current state: an asset escalated once and later reported again reports `escalated_at` alongside a `state` of `investigating`. Read `state` to know whether anything is waiting on you right now."
12347
+ ),
12348
+ blockedAt: zod.z.date().nullable().describe("When the asset was blocklisted, or null if it has not been"),
12349
+ takedown: organizationThreatTakedownSchema.nullable().describe("Takedown progress, or null if no takedown was opened"),
12350
+ detailsUrl: zod.z.string().describe("Deep link to the asset's reports and takedowns in the ChainPatrol app"),
12351
+ updatedAt: zod.z.date().describe(
12352
+ "The most recent change to anything in this record \u2014 the asset, its reports, its takedown or that takedown's tasks. Matches what `updatedSince` filters on. To derive your next watermark, drain every page until `next_page` is null and take the highest value across the whole sweep: results are ordered by asset ID, not by this field, so a later page can carry an earlier timestamp and a per-page watermark would skip it."
12353
+ )
12354
+ });
12355
+ zod.z.object({
12356
+ threats: zod.z.array(organizationThreatSchema),
12357
+ next_page: zod.z.string().nullable().optional().describe(
12358
+ "Cursor for fetching the next page of results, or null on the last page. Drain it to null before advancing your `updatedSince` watermark \u2014 see `updatedAt`."
12359
+ )
12360
+ }).describe("Successful operation");
12110
12361
  var FILTERABLE_SUBSCRIPTION_STATUSES = [
12111
12362
  SubscriptionStatus.PROSPECT,
12112
12363
  SubscriptionStatus.POC,
@@ -13779,7 +14030,7 @@ function parseModernSyntax(tokens, includeHue) {
13779
14030
  coords.unshift(token.value);
13780
14031
  return coords;
13781
14032
  }
13782
- var parse3 = (color) => {
14033
+ var parse4 = (color) => {
13783
14034
  if (typeof color !== "string") {
13784
14035
  return void 0;
13785
14036
  }
@@ -13795,7 +14046,7 @@ var parse3 = (color) => {
13795
14046
  }
13796
14047
  return tokens ? parseColorSyntax(tokens) : void 0;
13797
14048
  };
13798
- var parse_default = parse3;
14049
+ var parse_default = parse4;
13799
14050
 
13800
14051
  // ../../node_modules/culori/src/rgb/parseRgb.js
13801
14052
  function parseRgb(color, parsed) {
@@ -13924,20 +14175,20 @@ var convertA98ToXyz65_default = convertA98ToXyz65;
13924
14175
 
13925
14176
  // ../../node_modules/culori/src/a98/convertXyz65ToA98.js
13926
14177
  var gamma = (v) => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);
13927
- var convertXyz65ToA98 = ({ x, y, z: z64, alpha }) => {
14178
+ var convertXyz65ToA98 = ({ x, y, z: z68, alpha }) => {
13928
14179
  if (x === void 0) x = 0;
13929
14180
  if (y === void 0) y = 0;
13930
- if (z64 === void 0) z64 = 0;
14181
+ if (z68 === void 0) z68 = 0;
13931
14182
  let res = {
13932
14183
  mode: "a98",
13933
14184
  r: gamma(
13934
- x * 2.0415879038107465 - y * 0.5650069742788597 - 0.3447313507783297 * z64
14185
+ x * 2.0415879038107465 - y * 0.5650069742788597 - 0.3447313507783297 * z68
13935
14186
  ),
13936
14187
  g: gamma(
13937
- x * -0.9692436362808798 + y * 1.8759675015077206 + 0.0415550574071756 * z64
14188
+ x * -0.9692436362808798 + y * 1.8759675015077206 + 0.0415550574071756 * z68
13938
14189
  ),
13939
14190
  b: gamma(
13940
- x * 0.0134442806320312 - y * 0.1183623922310184 + 1.0151749943912058 * z64
14191
+ x * 0.0134442806320312 - y * 0.1183623922310184 + 1.0151749943912058 * z68
13941
14192
  )
13942
14193
  };
13943
14194
  if (alpha !== void 0) {
@@ -14004,14 +14255,14 @@ var convertLrgbToRgb = ({ r, g, b, alpha }, mode = "rgb") => {
14004
14255
  var convertLrgbToRgb_default = convertLrgbToRgb;
14005
14256
 
14006
14257
  // ../../node_modules/culori/src/xyz65/convertXyz65ToRgb.js
14007
- var convertXyz65ToRgb = ({ x, y, z: z64, alpha }) => {
14258
+ var convertXyz65ToRgb = ({ x, y, z: z68, alpha }) => {
14008
14259
  if (x === void 0) x = 0;
14009
14260
  if (y === void 0) y = 0;
14010
- if (z64 === void 0) z64 = 0;
14261
+ if (z68 === void 0) z68 = 0;
14011
14262
  let res = convertLrgbToRgb_default({
14012
- r: x * 3.2409699419045226 - y * 1.537383177570094 - 0.4986107602930034 * z64,
14013
- g: x * -0.9692436362808796 + y * 1.8759675015077204 + 0.0415550574071756 * z64,
14014
- b: x * 0.0556300796969936 - y * 0.2039769588889765 + 1.0569715142428784 * z64
14263
+ r: x * 3.2409699419045226 - y * 1.537383177570094 - 0.4986107602930034 * z68,
14264
+ g: x * -0.9692436362808796 + y * 1.8759675015077204 + 0.0415550574071756 * z68,
14265
+ b: x * 0.0556300796969936 - y * 0.2039769588889765 + 1.0569715142428784 * z68
14015
14266
  });
14016
14267
  if (alpha !== void 0) {
14017
14268
  res.alpha = alpha;
@@ -14261,13 +14512,13 @@ var convertLab65ToRgb_default = convertLab65ToRgb;
14261
14512
 
14262
14513
  // ../../node_modules/culori/src/lab65/convertXyz65ToLab65.js
14263
14514
  var f = (value) => value > e ? Math.cbrt(value) : (k * value + 16) / 116;
14264
- var convertXyz65ToLab65 = ({ x, y, z: z64, alpha }) => {
14515
+ var convertXyz65ToLab65 = ({ x, y, z: z68, alpha }) => {
14265
14516
  if (x === void 0) x = 0;
14266
14517
  if (y === void 0) y = 0;
14267
- if (z64 === void 0) z64 = 0;
14518
+ if (z68 === void 0) z68 = 0;
14268
14519
  let f0 = f(x / D65.X);
14269
14520
  let f1 = f(y / D65.Y);
14270
- let f22 = f(z64 / D65.Z);
14521
+ let f22 = f(z68 / D65.Z);
14271
14522
  let res = {
14272
14523
  mode: "lab65",
14273
14524
  l: 116 * f1 - 16,
@@ -14924,10 +15175,10 @@ var convertItpToXyz65_default = convertItpToXyz65;
14924
15175
 
14925
15176
  // ../../node_modules/culori/src/itp/convertXyz65ToItp.js
14926
15177
  var toAbs = (c2 = 0) => Math.max(c2 * YW, 0);
14927
- var convertXyz65ToItp = ({ x, y, z: z64, alpha }) => {
15178
+ var convertXyz65ToItp = ({ x, y, z: z68, alpha }) => {
14928
15179
  const absX = toAbs(x);
14929
15180
  const absY = toAbs(y);
14930
- const absZ = toAbs(z64);
15181
+ const absZ = toAbs(z68);
14931
15182
  const l2 = transferPqEncode(
14932
15183
  0.3592832590121217 * absX + 0.6976051147779502 * absY - 0.0358915932320289 * absZ
14933
15184
  );
@@ -14985,15 +15236,15 @@ var jabPqEncode = (v) => {
14985
15236
  return Math.pow((C1 + C2 * vn3) / (1 + C3 * vn3), p);
14986
15237
  };
14987
15238
  var abs = (v = 0) => Math.max(v * 203, 0);
14988
- var convertXyz65ToJab = ({ x, y, z: z64, alpha }) => {
15239
+ var convertXyz65ToJab = ({ x, y, z: z68, alpha }) => {
14989
15240
  x = abs(x);
14990
15241
  y = abs(y);
14991
- z64 = abs(z64);
14992
- let xp = 1.15 * x - 0.15 * z64;
15242
+ z68 = abs(z68);
15243
+ let xp = 1.15 * x - 0.15 * z68;
14993
15244
  let yp = 0.66 * y + 0.34 * x;
14994
- let l2 = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z64);
14995
- let m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z64);
14996
- let s2 = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z64);
15245
+ let l2 = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z68);
15246
+ let m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z68);
15247
+ let s2 = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z68);
14997
15248
  let i = (l2 + m) / 2;
14998
15249
  let res = {
14999
15250
  mode: "jab",
@@ -15179,14 +15430,14 @@ var convertLabToXyz50 = ({ l: l2, a, b, alpha }) => {
15179
15430
  var convertLabToXyz50_default = convertLabToXyz50;
15180
15431
 
15181
15432
  // ../../node_modules/culori/src/xyz50/convertXyz50ToRgb.js
15182
- var convertXyz50ToRgb = ({ x, y, z: z64, alpha }) => {
15433
+ var convertXyz50ToRgb = ({ x, y, z: z68, alpha }) => {
15183
15434
  if (x === void 0) x = 0;
15184
15435
  if (y === void 0) y = 0;
15185
- if (z64 === void 0) z64 = 0;
15436
+ if (z68 === void 0) z68 = 0;
15186
15437
  let res = convertLrgbToRgb_default({
15187
- r: x * 3.1341359569958707 - y * 1.6173863321612538 - 0.4906619460083532 * z64,
15188
- g: x * -0.978795502912089 + y * 1.916254567259524 + 0.03344273116131949 * z64,
15189
- b: x * 0.07195537988411677 - y * 0.2289768264158322 + 1.405386058324125 * z64
15438
+ r: x * 3.1341359569958707 - y * 1.6173863321612538 - 0.4906619460083532 * z68,
15439
+ g: x * -0.978795502912089 + y * 1.916254567259524 + 0.03344273116131949 * z68,
15440
+ b: x * 0.07195537988411677 - y * 0.2289768264158322 + 1.405386058324125 * z68
15190
15441
  });
15191
15442
  if (alpha !== void 0) {
15192
15443
  res.alpha = alpha;
@@ -15217,13 +15468,13 @@ var convertRgbToXyz50_default = convertRgbToXyz50;
15217
15468
 
15218
15469
  // ../../node_modules/culori/src/lab/convertXyz50ToLab.js
15219
15470
  var f2 = (value) => value > e3 ? Math.cbrt(value) : (k3 * value + 16) / 116;
15220
- var convertXyz50ToLab = ({ x, y, z: z64, alpha }) => {
15471
+ var convertXyz50ToLab = ({ x, y, z: z68, alpha }) => {
15221
15472
  if (x === void 0) x = 0;
15222
15473
  if (y === void 0) y = 0;
15223
- if (z64 === void 0) z64 = 0;
15474
+ if (z68 === void 0) z68 = 0;
15224
15475
  let f0 = f2(x / D50.X);
15225
15476
  let f1 = f2(y / D50.Y);
15226
- let f22 = f2(z64 / D50.Z);
15477
+ let f22 = f2(z68 / D50.Z);
15227
15478
  let res = {
15228
15479
  mode: "lab",
15229
15480
  l: 116 * f1 - 16,
@@ -15458,18 +15709,18 @@ var convertLchuvToLuv = ({ l: l2, c: c2, h, alpha }) => {
15458
15709
  var convertLchuvToLuv_default = convertLchuvToLuv;
15459
15710
 
15460
15711
  // ../../node_modules/culori/src/luv/convertXyz50ToLuv.js
15461
- var u_fn = (x, y, z64) => 4 * x / (x + 15 * y + 3 * z64);
15462
- var v_fn = (x, y, z64) => 9 * y / (x + 15 * y + 3 * z64);
15712
+ var u_fn = (x, y, z68) => 4 * x / (x + 15 * y + 3 * z68);
15713
+ var v_fn = (x, y, z68) => 9 * y / (x + 15 * y + 3 * z68);
15463
15714
  var un = u_fn(D50.X, D50.Y, D50.Z);
15464
15715
  var vn = v_fn(D50.X, D50.Y, D50.Z);
15465
15716
  var l_fn = (value) => value <= e3 ? k3 * value : 116 * Math.cbrt(value) - 16;
15466
- var convertXyz50ToLuv = ({ x, y, z: z64, alpha }) => {
15717
+ var convertXyz50ToLuv = ({ x, y, z: z68, alpha }) => {
15467
15718
  if (x === void 0) x = 0;
15468
15719
  if (y === void 0) y = 0;
15469
- if (z64 === void 0) z64 = 0;
15720
+ if (z68 === void 0) z68 = 0;
15470
15721
  let l2 = l_fn(y / D50.Y);
15471
- let u = u_fn(x, y, z64);
15472
- let v = v_fn(x, y, z64);
15722
+ let u = u_fn(x, y, z68);
15723
+ let v = v_fn(x, y, z68);
15473
15724
  if (!isFinite(u) || !isFinite(v)) {
15474
15725
  l2 = u = v = 0;
15475
15726
  } else {
@@ -15490,8 +15741,8 @@ var convertXyz50ToLuv = ({ x, y, z: z64, alpha }) => {
15490
15741
  var convertXyz50ToLuv_default = convertXyz50ToLuv;
15491
15742
 
15492
15743
  // ../../node_modules/culori/src/luv/convertLuvToXyz50.js
15493
- var u_fn2 = (x, y, z64) => 4 * x / (x + 15 * y + 3 * z64);
15494
- var v_fn2 = (x, y, z64) => 9 * y / (x + 15 * y + 3 * z64);
15744
+ var u_fn2 = (x, y, z68) => 4 * x / (x + 15 * y + 3 * z68);
15745
+ var v_fn2 = (x, y, z68) => 9 * y / (x + 15 * y + 3 * z68);
15495
15746
  var un2 = u_fn2(D50.X, D50.Y, D50.Z);
15496
15747
  var vn2 = v_fn2(D50.X, D50.Y, D50.Z);
15497
15748
  var convertLuvToXyz50 = ({ l: l2, u, v, alpha }) => {
@@ -15505,8 +15756,8 @@ var convertLuvToXyz50 = ({ l: l2, u, v, alpha }) => {
15505
15756
  let vp = v / (13 * l2) + vn2;
15506
15757
  let y = D50.Y * (l2 <= 8 ? l2 / k3 : Math.pow((l2 + 16) / 116, 3));
15507
15758
  let x = y * (9 * up) / (4 * vp);
15508
- let z64 = y * (12 - 3 * up - 20 * vp) / (4 * vp);
15509
- let res = { mode: "xyz50", x, y, z: z64 };
15759
+ let z68 = y * (12 - 3 * up - 20 * vp) / (4 * vp);
15760
+ let res = { mode: "xyz50", x, y, z: z68 };
15510
15761
  if (alpha !== void 0) {
15511
15762
  res.alpha = alpha;
15512
15763
  }
@@ -16123,15 +16374,15 @@ var convertP3ToXyz65 = (rgb2) => {
16123
16374
  var convertP3ToXyz65_default = convertP3ToXyz65;
16124
16375
 
16125
16376
  // ../../node_modules/culori/src/p3/convertXyz65ToP3.js
16126
- var convertXyz65ToP3 = ({ x, y, z: z64, alpha }) => {
16377
+ var convertXyz65ToP3 = ({ x, y, z: z68, alpha }) => {
16127
16378
  if (x === void 0) x = 0;
16128
16379
  if (y === void 0) y = 0;
16129
- if (z64 === void 0) z64 = 0;
16380
+ if (z68 === void 0) z68 = 0;
16130
16381
  let res = convertLrgbToRgb_default(
16131
16382
  {
16132
- r: x * 2.4934969119414263 - y * 0.9313836179191242 - 0.402710784450717 * z64,
16133
- g: x * -0.8294889695615749 + y * 1.7626640603183465 + 0.0236246858419436 * z64,
16134
- b: x * 0.0358458302437845 - y * 0.0761723892680418 + 0.9568845240076871 * z64
16383
+ r: x * 2.4934969119414263 - y * 0.9313836179191242 - 0.402710784450717 * z68,
16384
+ g: x * -0.8294889695615749 + y * 1.7626640603183465 + 0.0236246858419436 * z68,
16385
+ b: x * 0.0358458302437845 - y * 0.0761723892680418 + 0.9568845240076871 * z68
16135
16386
  },
16136
16387
  "p3"
16137
16388
  );
@@ -16166,19 +16417,19 @@ var gamma2 = (v) => {
16166
16417
  }
16167
16418
  return 16 * v;
16168
16419
  };
16169
- var convertXyz50ToProphoto = ({ x, y, z: z64, alpha }) => {
16420
+ var convertXyz50ToProphoto = ({ x, y, z: z68, alpha }) => {
16170
16421
  if (x === void 0) x = 0;
16171
16422
  if (y === void 0) y = 0;
16172
- if (z64 === void 0) z64 = 0;
16423
+ if (z68 === void 0) z68 = 0;
16173
16424
  let res = {
16174
16425
  mode: "prophoto",
16175
16426
  r: gamma2(
16176
- x * 1.3457868816471585 - y * 0.2555720873797946 - 0.0511018649755453 * z64
16427
+ x * 1.3457868816471585 - y * 0.2555720873797946 - 0.0511018649755453 * z68
16177
16428
  ),
16178
16429
  g: gamma2(
16179
- x * -0.5446307051249019 + y * 1.5082477428451466 + 0.0205274474364214 * z64
16430
+ x * -0.5446307051249019 + y * 1.5082477428451466 + 0.0205274474364214 * z68
16180
16431
  ),
16181
- b: gamma2(x * 0 + y * 0 + 1.2119675456389452 * z64)
16432
+ b: gamma2(x * 0 + y * 0 + 1.2119675456389452 * z68)
16182
16433
  };
16183
16434
  if (alpha !== void 0) {
16184
16435
  res.alpha = alpha;
@@ -16238,20 +16489,20 @@ var gamma3 = (v) => {
16238
16489
  }
16239
16490
  return 4.5 * v;
16240
16491
  };
16241
- var convertXyz65ToRec2020 = ({ x, y, z: z64, alpha }) => {
16492
+ var convertXyz65ToRec2020 = ({ x, y, z: z68, alpha }) => {
16242
16493
  if (x === void 0) x = 0;
16243
16494
  if (y === void 0) y = 0;
16244
- if (z64 === void 0) z64 = 0;
16495
+ if (z68 === void 0) z68 = 0;
16245
16496
  let res = {
16246
16497
  mode: "rec2020",
16247
16498
  r: gamma3(
16248
- x * 1.7166511879712683 - y * 0.3556707837763925 - 0.2533662813736599 * z64
16499
+ x * 1.7166511879712683 - y * 0.3556707837763925 - 0.2533662813736599 * z68
16249
16500
  ),
16250
16501
  g: gamma3(
16251
- x * -0.6666843518324893 + y * 1.6164812366349395 + 0.0157685458139111 * z64
16502
+ x * -0.6666843518324893 + y * 1.6164812366349395 + 0.0157685458139111 * z68
16252
16503
  ),
16253
16504
  b: gamma3(
16254
- x * 0.0176398574453108 - y * 0.0427706132578085 + 0.9421031212354739 * z64
16505
+ x * 0.0176398574453108 - y * 0.0427706132578085 + 0.9421031212354739 * z68
16255
16506
  )
16256
16507
  };
16257
16508
  if (alpha !== void 0) {
@@ -16404,15 +16655,15 @@ var definition_default26 = definition26;
16404
16655
 
16405
16656
  // ../../node_modules/culori/src/xyz65/convertXyz65ToXyz50.js
16406
16657
  var convertXyz65ToXyz50 = (xyz652) => {
16407
- let { x, y, z: z64, alpha } = xyz652;
16658
+ let { x, y, z: z68, alpha } = xyz652;
16408
16659
  if (x === void 0) x = 0;
16409
16660
  if (y === void 0) y = 0;
16410
- if (z64 === void 0) z64 = 0;
16661
+ if (z68 === void 0) z68 = 0;
16411
16662
  let res = {
16412
16663
  mode: "xyz50",
16413
- x: 1.0479298208405488 * x + 0.0229467933410191 * y - 0.0501922295431356 * z64,
16414
- y: 0.0296278156881593 * x + 0.990434484573249 * y - 0.0170738250293851 * z64,
16415
- z: -0.0092430581525912 * x + 0.0150551448965779 * y + 0.7518742899580008 * z64
16664
+ x: 1.0479298208405488 * x + 0.0229467933410191 * y - 0.0501922295431356 * z68,
16665
+ y: 0.0296278156881593 * x + 0.990434484573249 * y - 0.0170738250293851 * z68,
16666
+ z: -0.0092430581525912 * x + 0.0150551448965779 * y + 0.7518742899580008 * z68
16416
16667
  };
16417
16668
  if (alpha !== void 0) {
16418
16669
  res.alpha = alpha;
@@ -16423,15 +16674,15 @@ var convertXyz65ToXyz50_default = convertXyz65ToXyz50;
16423
16674
 
16424
16675
  // ../../node_modules/culori/src/xyz65/convertXyz50ToXyz65.js
16425
16676
  var convertXyz50ToXyz65 = (xyz502) => {
16426
- let { x, y, z: z64, alpha } = xyz502;
16677
+ let { x, y, z: z68, alpha } = xyz502;
16427
16678
  if (x === void 0) x = 0;
16428
16679
  if (y === void 0) y = 0;
16429
- if (z64 === void 0) z64 = 0;
16680
+ if (z68 === void 0) z68 = 0;
16430
16681
  let res = {
16431
16682
  mode: "xyz65",
16432
- x: 0.9554734527042182 * x - 0.0230985368742614 * y + 0.0632593086610217 * z64,
16433
- y: -0.0283697069632081 * x + 1.0099954580058226 * y + 0.021041398966943 * z64,
16434
- z: 0.0123140016883199 * x - 0.0205076964334779 * y + 1.3303659366080753 * z64
16683
+ x: 0.9554734527042182 * x - 0.0230985368742614 * y + 0.0632593086610217 * z68,
16684
+ y: -0.0283697069632081 * x + 1.0099954580058226 * y + 0.021041398966943 * z68,
16685
+ z: 0.0123140016883199 * x - 0.0205076964334779 * y + 1.3303659366080753 * z68
16435
16686
  };
16436
16687
  if (alpha !== void 0) {
16437
16688
  res.alpha = alpha;