@chainpatrol/sdk 1.10.0 → 1.11.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/CHANGELOG.md +18 -0
- package/dist/api/index.d.mts +72 -2
- package/dist/api/index.d.ts +72 -2
- package/dist/api/index.js +9 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/index.mjs +9 -0
- package/dist/api/index.mjs.map +1 -1
- package/dist/index.js +385 -114
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +386 -115
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __spreadValues, __export,
|
|
1
|
+
import { __spreadValues, __export, __async, __spreadProps, __objRest, __pow } from './chunk-4U7ZT42S.mjs';
|
|
2
2
|
import { getDomain, getSubdomain, parse as parse$1 } from 'tldts';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
|
|
@@ -1216,17 +1216,17 @@ var PolyDateFormatter = class {
|
|
|
1216
1216
|
constructor(dt, intl, opts) {
|
|
1217
1217
|
this.opts = opts;
|
|
1218
1218
|
this.originalZone = void 0;
|
|
1219
|
-
let
|
|
1219
|
+
let z64 = void 0;
|
|
1220
1220
|
if (this.opts.timeZone) {
|
|
1221
1221
|
this.dt = dt;
|
|
1222
1222
|
} else if (dt.zone.type === "fixed") {
|
|
1223
1223
|
const gmtOffset = -1 * (dt.offset / 60);
|
|
1224
1224
|
const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;
|
|
1225
1225
|
if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {
|
|
1226
|
-
|
|
1226
|
+
z64 = offsetZ;
|
|
1227
1227
|
this.dt = dt;
|
|
1228
1228
|
} else {
|
|
1229
|
-
|
|
1229
|
+
z64 = "UTC";
|
|
1230
1230
|
this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ minutes: dt.offset });
|
|
1231
1231
|
this.originalZone = dt.zone;
|
|
1232
1232
|
}
|
|
@@ -1234,14 +1234,14 @@ var PolyDateFormatter = class {
|
|
|
1234
1234
|
this.dt = dt;
|
|
1235
1235
|
} else if (dt.zone.type === "iana") {
|
|
1236
1236
|
this.dt = dt;
|
|
1237
|
-
|
|
1237
|
+
z64 = dt.zone.name;
|
|
1238
1238
|
} else {
|
|
1239
|
-
|
|
1239
|
+
z64 = "UTC";
|
|
1240
1240
|
this.dt = dt.setZone("UTC").plus({ minutes: dt.offset });
|
|
1241
1241
|
this.originalZone = dt.zone;
|
|
1242
1242
|
}
|
|
1243
1243
|
const intlOpts = __spreadValues({}, this.opts);
|
|
1244
|
-
intlOpts.timeZone = intlOpts.timeZone ||
|
|
1244
|
+
intlOpts.timeZone = intlOpts.timeZone || z64;
|
|
1245
1245
|
this.dtf = getCachedDTF(intl, intlOpts);
|
|
1246
1246
|
}
|
|
1247
1247
|
format() {
|
|
@@ -6975,6 +6975,22 @@ z.object({
|
|
|
6975
6975
|
z.object({
|
|
6976
6976
|
noteId: z.number().int().positive()
|
|
6977
6977
|
});
|
|
6978
|
+
var ASSET_TAGS = {
|
|
6979
|
+
ENFORCEMENT_EXHAUSTED: {
|
|
6980
|
+
label: "Enforcement Exhausted",
|
|
6981
|
+
description: "All available enforcement options have been pursued with the relevant providers. The asset remains active due to provider inaction.",
|
|
6982
|
+
colorScheme: "orange"
|
|
6983
|
+
}
|
|
6984
|
+
};
|
|
6985
|
+
var ASSET_TAG_KEYS = Object.keys(ASSET_TAGS);
|
|
6986
|
+
var assetTagKeySchema = z.enum(ASSET_TAG_KEYS);
|
|
6987
|
+
z.object({
|
|
6988
|
+
assetId: z.number().int().positive()
|
|
6989
|
+
});
|
|
6990
|
+
z.object({
|
|
6991
|
+
assetId: z.number().int().positive(),
|
|
6992
|
+
tag: assetTagKeySchema
|
|
6993
|
+
});
|
|
6978
6994
|
z.object({
|
|
6979
6995
|
slug: z.string(),
|
|
6980
6996
|
assetId: z.number(),
|
|
@@ -7134,7 +7150,9 @@ var AssetType = {
|
|
|
7134
7150
|
FIVE_HUNDRED_PX: "FIVE_HUNDRED_PX",
|
|
7135
7151
|
LUMA: "LUMA",
|
|
7136
7152
|
SMARTMONEYMATCH: "SMARTMONEYMATCH",
|
|
7137
|
-
APK_GOLD: "APK_GOLD"
|
|
7153
|
+
APK_GOLD: "APK_GOLD",
|
|
7154
|
+
GLASSDOOR: "GLASSDOOR",
|
|
7155
|
+
PUMP_FUN: "PUMP_FUN"
|
|
7138
7156
|
};
|
|
7139
7157
|
var LivenessStatus = {
|
|
7140
7158
|
UNKNOWN: "UNKNOWN",
|
|
@@ -7295,8 +7313,23 @@ z.object({
|
|
|
7295
7313
|
watchStatus: z.nativeEnum(WatchStatus).optional().describe("The watch status of the asset.")
|
|
7296
7314
|
}).describe("Check asset response body");
|
|
7297
7315
|
var assetListInputSchema = z.object({
|
|
7298
|
-
/**
|
|
7299
|
-
|
|
7316
|
+
/**
|
|
7317
|
+
* The type of asset to retrieve. Omitting the key means every asset type,
|
|
7318
|
+
* which lets a bulk consumer sweep the whole blocklist with one cursor
|
|
7319
|
+
* instead of looping all 94 members of `AssetType`.
|
|
7320
|
+
*
|
|
7321
|
+
* An explicit `null` is rejected with a 400 rather than treated as "all
|
|
7322
|
+
* types". Only omission opts into the full sweep, so a client that sends
|
|
7323
|
+
* `type: null` from an uninitialised variable gets a clear error instead of
|
|
7324
|
+
* silently pulling every blocked asset.
|
|
7325
|
+
*
|
|
7326
|
+
* Not `.nullable()`: besides accepting that null, it renders in the
|
|
7327
|
+
* generated MCP tool manifest as a nested `anyOf` containing `{"not": {}}`,
|
|
7328
|
+
* which buries the enum hint telling a model which values are legal.
|
|
7329
|
+
*/
|
|
7330
|
+
type: z.nativeEnum(AssetType).optional().describe(
|
|
7331
|
+
"Asset type to retrieve. Omit the field entirely to retrieve assets of every type in a single paginated sweep; an explicit null is rejected."
|
|
7332
|
+
),
|
|
7300
7333
|
/** Optional status filter for the assets; defaults to `BLOCKED`. */
|
|
7301
7334
|
status: z.nativeEnum(AssetStatus).optional().default(AssetStatus.BLOCKED).describe("Status of the assets to retrieve"),
|
|
7302
7335
|
/**
|
|
@@ -7324,7 +7357,8 @@ var assetListInputSchema = z.object({
|
|
|
7324
7357
|
}).describe(
|
|
7325
7358
|
`List asset request body
|
|
7326
7359
|
|
|
7327
|
-
|
|
7360
|
+
With no \`startDate\`, this returns every matching asset regardless of age \u2014 there
|
|
7361
|
+
is no implicit one-day window. Pass \`startDate\` to get a delta instead.
|
|
7328
7362
|
|
|
7329
7363
|
You can also choose a \`startDate\` and \`endDate\` for the range of asset updates, most
|
|
7330
7364
|
timestamp formats should work, we use [Luxon](https://moment.github.io/luxon/#/parsing)
|
|
@@ -7433,6 +7467,8 @@ var ThreatDetectionSourceKey = /* @__PURE__ */ ((ThreatDetectionSourceKey2) => {
|
|
|
7433
7467
|
ThreatDetectionSourceKey2["TELEGRAM_CHANNELS_SEARCH_VETRIC"] = "telegram_channels_search_vetric";
|
|
7434
7468
|
ThreatDetectionSourceKey2["TELEGRAM_USER_SEARCH_VETRIC"] = "telegram_user_search_vetric";
|
|
7435
7469
|
ThreatDetectionSourceKey2["FACEBOOK_PAGE_SEARCH_VETRIC"] = "facebook_page_search_vetric";
|
|
7470
|
+
ThreatDetectionSourceKey2["FACEBOOK_USER_SEARCH_VETRIC"] = "facebook_user_search_vetric";
|
|
7471
|
+
ThreatDetectionSourceKey2["FACEBOOK_POST_SEARCH_VETRIC"] = "facebook_post_search_vetric";
|
|
7436
7472
|
ThreatDetectionSourceKey2["INSTAGRAM_ACCOUNT_SEARCH_VETRIC"] = "instagram_account_search_vetric";
|
|
7437
7473
|
ThreatDetectionSourceKey2["TWITTER_SEARCH_VETRIC"] = "twitter_search_vetric";
|
|
7438
7474
|
ThreatDetectionSourceKey2["LINKEDIN_PEOPLE_SEARCH_VETRIC"] = "linkedin_people_search_vetric";
|
|
@@ -7472,14 +7508,17 @@ var ThreatDetectionSourceKey = /* @__PURE__ */ ((ThreatDetectionSourceKey2) => {
|
|
|
7472
7508
|
ThreatDetectionSourceKey2["GROK_USER_SEARCH"] = "grok_user_search";
|
|
7473
7509
|
ThreatDetectionSourceKey2["GOOGLE_LENS_IMAGE_SEARCH"] = "google_lens_image_search";
|
|
7474
7510
|
ThreatDetectionSourceKey2["YANDEX_SEARCH"] = "yandex_search";
|
|
7511
|
+
ThreatDetectionSourceKey2["YANDEX_IMAGE_SEARCH"] = "yandex_image_search";
|
|
7475
7512
|
ThreatDetectionSourceKey2["LINKEDIN_EMPLOYEE_DETECTION"] = "linkedin_employee_detection";
|
|
7476
7513
|
ThreatDetectionSourceKey2["LINKEDIN_POST_SEARCH"] = "linkedin_post_search";
|
|
7477
7514
|
ThreatDetectionSourceKey2["LINKEDIN_COMPANY_SEARCH"] = "linkedin_company_search";
|
|
7478
7515
|
ThreatDetectionSourceKey2["BING_ADS_SEARCH"] = "bing_ads_search";
|
|
7479
7516
|
ThreatDetectionSourceKey2["TIK_TOK_ADS_SEARCH"] = "tik_tok_ads_search";
|
|
7517
|
+
ThreatDetectionSourceKey2["ADLIBRARY_ADS_SEARCH"] = "adlibrary_ads_search";
|
|
7480
7518
|
ThreatDetectionSourceKey2["DNSDB"] = "dnsdb";
|
|
7481
7519
|
ThreatDetectionSourceKey2["DAILY_MOTION_SEARCH"] = "daily_motion_search";
|
|
7482
7520
|
ThreatDetectionSourceKey2["WATCHLIST"] = "watchlist";
|
|
7521
|
+
ThreatDetectionSourceKey2["GITHUB_SEARCH"] = "github_search";
|
|
7483
7522
|
return ThreatDetectionSourceKey2;
|
|
7484
7523
|
})(ThreatDetectionSourceKey || {});
|
|
7485
7524
|
var ThreatDetectionScope = /* @__PURE__ */ ((ThreatDetectionScope2) => {
|
|
@@ -7505,6 +7544,7 @@ var AssetScanEnrichmentType = /* @__PURE__ */ ((AssetScanEnrichmentType2) => {
|
|
|
7505
7544
|
AssetScanEnrichmentType2["DNS"] = "dns";
|
|
7506
7545
|
AssetScanEnrichmentType2["TLS"] = "tls";
|
|
7507
7546
|
AssetScanEnrichmentType2["TCP"] = "tcp";
|
|
7547
|
+
AssetScanEnrichmentType2["HOSTNAME_FIRST_SEEN"] = "hostname_first_seen";
|
|
7508
7548
|
AssetScanEnrichmentType2["TWITTER_POST"] = "post";
|
|
7509
7549
|
AssetScanEnrichmentType2["TWITTER_PROFILE"] = "profile";
|
|
7510
7550
|
AssetScanEnrichmentType2["TWITTER_FOLLOWERS"] = "twitter_followers";
|
|
@@ -7530,12 +7570,17 @@ var AssetScanEnrichmentType = /* @__PURE__ */ ((AssetScanEnrichmentType2) => {
|
|
|
7530
7570
|
AssetScanEnrichmentType2["VIMEO_PROFILE"] = "vimeo_profile";
|
|
7531
7571
|
AssetScanEnrichmentType2["STACKBLITZ_PAGE"] = "stackblitz_page";
|
|
7532
7572
|
AssetScanEnrichmentType2["LEETCODE_PAGE"] = "leetcode_page";
|
|
7573
|
+
AssetScanEnrichmentType2["TUMBLR_BLOG"] = "tumblr_blog";
|
|
7574
|
+
AssetScanEnrichmentType2["TUMBLR_POST"] = "tumblr_post";
|
|
7575
|
+
AssetScanEnrichmentType2["TUMBLR_COMMUNITY"] = "tumblr_community";
|
|
7533
7576
|
AssetScanEnrichmentType2["NPM_PACKAGE"] = "npm_package";
|
|
7534
7577
|
AssetScanEnrichmentType2["PYPI_PACKAGE"] = "pypi_package";
|
|
7535
7578
|
AssetScanEnrichmentType2["RUST_PACKAGE"] = "rust_package";
|
|
7536
7579
|
AssetScanEnrichmentType2["LINKEDIN_PROFILE"] = "linkedin_profile";
|
|
7580
|
+
AssetScanEnrichmentType2["PUMP_FUN_TOKEN"] = "pump_fun_token";
|
|
7537
7581
|
AssetScanEnrichmentType2["META_AD"] = "meta_ad";
|
|
7538
7582
|
AssetScanEnrichmentType2["GOOGLE_AD"] = "google_ad";
|
|
7583
|
+
AssetScanEnrichmentType2["ADLIBRARY_AD"] = "adlibrary_ad";
|
|
7539
7584
|
AssetScanEnrichmentType2["CONTRACT_DEPLOYER"] = "contract_deployer";
|
|
7540
7585
|
return AssetScanEnrichmentType2;
|
|
7541
7586
|
})(AssetScanEnrichmentType || {});
|
|
@@ -7547,6 +7592,8 @@ var AssetScanEnrichmentSource = /* @__PURE__ */ ((AssetScanEnrichmentSource2) =>
|
|
|
7547
7592
|
AssetScanEnrichmentSource2["NETWORK"] = "node_js_network";
|
|
7548
7593
|
AssetScanEnrichmentSource2["EXTENSION"] = "extension";
|
|
7549
7594
|
AssetScanEnrichmentSource2["PLAYWRIGHT"] = "playwright";
|
|
7595
|
+
AssetScanEnrichmentSource2["CHAINPATROL_BROWSER"] = "chainpatrol_browser";
|
|
7596
|
+
AssetScanEnrichmentSource2["STEEL_BROWSER"] = "steel_browser";
|
|
7550
7597
|
AssetScanEnrichmentSource2["X_API"] = "x_api";
|
|
7551
7598
|
AssetScanEnrichmentSource2["SOCIALDATA_API"] = "socialdata_api";
|
|
7552
7599
|
AssetScanEnrichmentSource2["NEYNAR_API"] = "neynar_api";
|
|
@@ -7565,12 +7612,16 @@ var AssetScanEnrichmentSource = /* @__PURE__ */ ((AssetScanEnrichmentSource2) =>
|
|
|
7565
7612
|
AssetScanEnrichmentSource2["VIMEO_API"] = "vimeo_api";
|
|
7566
7613
|
AssetScanEnrichmentSource2["STACKBLITZ_API"] = "stackblitz_api";
|
|
7567
7614
|
AssetScanEnrichmentSource2["LEETCODE_API"] = "leetcode_api";
|
|
7615
|
+
AssetScanEnrichmentSource2["TUMBLR_API"] = "tumblr_api";
|
|
7568
7616
|
AssetScanEnrichmentSource2["NPM_REGISTRY_API"] = "npm_registry_api";
|
|
7569
7617
|
AssetScanEnrichmentSource2["PYPI_REGISTRY_API"] = "pypi_registry_api";
|
|
7570
7618
|
AssetScanEnrichmentSource2["CRATES_IO_API"] = "crates_io_api";
|
|
7571
7619
|
AssetScanEnrichmentSource2["APIFY_LINKEDIN_API"] = "apify_linkedin_api";
|
|
7620
|
+
AssetScanEnrichmentSource2["PUMP_FUN_API"] = "pump_fun_api";
|
|
7572
7621
|
AssetScanEnrichmentSource2["META_ADS_LIBRARY"] = "meta_ads_library";
|
|
7622
|
+
AssetScanEnrichmentSource2["STEEL_META_ADS_LIBRARY"] = "steel_meta_ads_library";
|
|
7573
7623
|
AssetScanEnrichmentSource2["GOOGLE_ADS_TRANSPARENCY_CENTER"] = "google_ads_transparency_center";
|
|
7624
|
+
AssetScanEnrichmentSource2["ADLIBRARY"] = "adlibrary";
|
|
7574
7625
|
AssetScanEnrichmentSource2["ETHERSCAN_API"] = "etherscan_api";
|
|
7575
7626
|
return AssetScanEnrichmentSource2;
|
|
7576
7627
|
})(AssetScanEnrichmentSource || {});
|
|
@@ -7585,6 +7636,7 @@ var ASSET_SCAN_ENRICHMENT_TYPE_LABELS = {
|
|
|
7585
7636
|
["dns" /* DNS */]: "DNS Lookup",
|
|
7586
7637
|
["tls" /* TLS */]: "TLS Connection Info",
|
|
7587
7638
|
["tcp" /* TCP */]: "TCP Connection Info",
|
|
7639
|
+
["hostname_first_seen" /* HOSTNAME_FIRST_SEEN */]: "Hostname First Seen",
|
|
7588
7640
|
// Farcaster
|
|
7589
7641
|
["cast" /* FARCASTER_CAST */]: "Farcaster Cast",
|
|
7590
7642
|
["farcaster_profile" /* FARCASTER_PROFILE */]: "Farcaster Profile",
|
|
@@ -7623,6 +7675,10 @@ var ASSET_SCAN_ENRICHMENT_TYPE_LABELS = {
|
|
|
7623
7675
|
["stackblitz_page" /* STACKBLITZ_PAGE */]: "Stackblitz Page",
|
|
7624
7676
|
// Leetcode
|
|
7625
7677
|
["leetcode_page" /* LEETCODE_PAGE */]: "Leetcode Page",
|
|
7678
|
+
// Tumblr
|
|
7679
|
+
["tumblr_blog" /* TUMBLR_BLOG */]: "Tumblr Blog",
|
|
7680
|
+
["tumblr_post" /* TUMBLR_POST */]: "Tumblr Post",
|
|
7681
|
+
["tumblr_community" /* TUMBLR_COMMUNITY */]: "Tumblr Community",
|
|
7626
7682
|
// NPM
|
|
7627
7683
|
["npm_package" /* NPM_PACKAGE */]: "NPM Package",
|
|
7628
7684
|
// PyPI
|
|
@@ -7631,10 +7687,14 @@ var ASSET_SCAN_ENRICHMENT_TYPE_LABELS = {
|
|
|
7631
7687
|
["rust_package" /* RUST_PACKAGE */]: "Rust Package",
|
|
7632
7688
|
// LinkedIn
|
|
7633
7689
|
["linkedin_profile" /* LINKEDIN_PROFILE */]: "LinkedIn Profile",
|
|
7690
|
+
// Pump.fun
|
|
7691
|
+
["pump_fun_token" /* PUMP_FUN_TOKEN */]: "Pump.fun Token",
|
|
7634
7692
|
// Meta Ads
|
|
7635
7693
|
["meta_ad" /* META_AD */]: "Meta Ad",
|
|
7636
7694
|
// Google Ads
|
|
7637
7695
|
["google_ad" /* GOOGLE_AD */]: "Google Ad",
|
|
7696
|
+
// Cross-platform ad intelligence
|
|
7697
|
+
["adlibrary_ad" /* ADLIBRARY_AD */]: "AdLibrary Ad",
|
|
7638
7698
|
// Crypto / Onchain
|
|
7639
7699
|
["contract_deployer" /* CONTRACT_DEPLOYER */]: "Contract Deployer"
|
|
7640
7700
|
};
|
|
@@ -7647,6 +7707,8 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_LABELS = {
|
|
|
7647
7707
|
["node_js_network" /* NETWORK */]: "Network",
|
|
7648
7708
|
["extension" /* EXTENSION */]: "Browser Extension",
|
|
7649
7709
|
["playwright" /* PLAYWRIGHT */]: "Playwright",
|
|
7710
|
+
["chainpatrol_browser" /* CHAINPATROL_BROWSER */]: "ChainPatrol Browser",
|
|
7711
|
+
["steel_browser" /* STEEL_BROWSER */]: "Steel Browser",
|
|
7650
7712
|
// Twitter
|
|
7651
7713
|
["x_api" /* X_API */]: "X API",
|
|
7652
7714
|
["socialdata_api" /* SOCIALDATA_API */]: "SocialData API",
|
|
@@ -7681,6 +7743,8 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_LABELS = {
|
|
|
7681
7743
|
["stackblitz_api" /* STACKBLITZ_API */]: "Stackblitz API",
|
|
7682
7744
|
// Leetcode
|
|
7683
7745
|
["leetcode_api" /* LEETCODE_API */]: "Leetcode API",
|
|
7746
|
+
// Tumblr
|
|
7747
|
+
["tumblr_api" /* TUMBLR_API */]: "Tumblr API",
|
|
7684
7748
|
// NPM
|
|
7685
7749
|
["npm_registry_api" /* NPM_REGISTRY_API */]: "NPM Registry API",
|
|
7686
7750
|
// PyPI
|
|
@@ -7689,10 +7753,15 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_LABELS = {
|
|
|
7689
7753
|
["crates_io_api" /* CRATES_IO_API */]: "Crates.io API",
|
|
7690
7754
|
// LinkedIn
|
|
7691
7755
|
["apify_linkedin_api" /* APIFY_LINKEDIN_API */]: "Apify LinkedIn API",
|
|
7756
|
+
// Pump.fun
|
|
7757
|
+
["pump_fun_api" /* PUMP_FUN_API */]: "Pump.fun API",
|
|
7692
7758
|
// Meta Ads
|
|
7693
7759
|
["meta_ads_library" /* META_ADS_LIBRARY */]: "Meta Ads Library",
|
|
7760
|
+
["steel_meta_ads_library" /* STEEL_META_ADS_LIBRARY */]: "Steel Meta Ads Library",
|
|
7694
7761
|
// Google Ads
|
|
7695
7762
|
["google_ads_transparency_center" /* GOOGLE_ADS_TRANSPARENCY_CENTER */]: "Google Ads Transparency Center",
|
|
7763
|
+
// Cross-platform ad intelligence
|
|
7764
|
+
["adlibrary" /* ADLIBRARY */]: "AdLibrary",
|
|
7696
7765
|
// Crypto / Onchain
|
|
7697
7766
|
["etherscan_api" /* ETHERSCAN_API */]: "Etherscan"
|
|
7698
7767
|
};
|
|
@@ -7700,7 +7769,8 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
|
|
|
7700
7769
|
// URL-related sources
|
|
7701
7770
|
["urlscan" /* URLSCAN */]: [
|
|
7702
7771
|
"browser_capture" /* BROWSER_CAPTURE */,
|
|
7703
|
-
"geolocation_and_ip" /* GEOLOCATION_AND_IP
|
|
7772
|
+
"geolocation_and_ip" /* GEOLOCATION_AND_IP */,
|
|
7773
|
+
"hostname_first_seen" /* HOSTNAME_FIRST_SEEN */
|
|
7704
7774
|
],
|
|
7705
7775
|
["whois" /* WHOIS */]: ["ownership_and_registration" /* OWNERSHIP_AND_REGISTRATION */],
|
|
7706
7776
|
["rdap" /* RDAP */]: ["ownership_and_registration" /* OWNERSHIP_AND_REGISTRATION */],
|
|
@@ -7725,6 +7795,12 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
|
|
|
7725
7795
|
"bilibili_profile" /* BILIBILI_PROFILE */,
|
|
7726
7796
|
"telegram_profile" /* TELEGRAM_PROFILE */
|
|
7727
7797
|
],
|
|
7798
|
+
// Only the generic page capture: the in-house browser does not (yet) run the
|
|
7799
|
+
// platform-specific scrapes PLAYWRIGHT does above.
|
|
7800
|
+
["chainpatrol_browser" /* CHAINPATROL_BROWSER */]: [
|
|
7801
|
+
"browser_capture" /* BROWSER_CAPTURE */
|
|
7802
|
+
],
|
|
7803
|
+
["steel_browser" /* STEEL_BROWSER */]: ["browser_capture" /* BROWSER_CAPTURE */],
|
|
7728
7804
|
// Twitter-related sources
|
|
7729
7805
|
["x_api" /* X_API */]: [
|
|
7730
7806
|
"post" /* TWITTER_POST */,
|
|
@@ -7784,6 +7860,12 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
|
|
|
7784
7860
|
["stackblitz_api" /* STACKBLITZ_API */]: ["stackblitz_page" /* STACKBLITZ_PAGE */],
|
|
7785
7861
|
// Leetcode-related sources
|
|
7786
7862
|
["leetcode_api" /* LEETCODE_API */]: ["leetcode_page" /* LEETCODE_PAGE */],
|
|
7863
|
+
// Tumblr-related sources
|
|
7864
|
+
["tumblr_api" /* TUMBLR_API */]: [
|
|
7865
|
+
"tumblr_blog" /* TUMBLR_BLOG */,
|
|
7866
|
+
"tumblr_post" /* TUMBLR_POST */,
|
|
7867
|
+
"tumblr_community" /* TUMBLR_COMMUNITY */
|
|
7868
|
+
],
|
|
7787
7869
|
// NPM-related sources
|
|
7788
7870
|
["npm_registry_api" /* NPM_REGISTRY_API */]: ["npm_package" /* NPM_PACKAGE */],
|
|
7789
7871
|
// PyPI-related sources
|
|
@@ -7794,12 +7876,17 @@ var ASSET_SCAN_ENRICHMENT_SOURCE_TO_TYPES = {
|
|
|
7794
7876
|
["apify_linkedin_api" /* APIFY_LINKEDIN_API */]: [
|
|
7795
7877
|
"linkedin_profile" /* LINKEDIN_PROFILE */
|
|
7796
7878
|
],
|
|
7879
|
+
// Pump.fun
|
|
7880
|
+
["pump_fun_api" /* PUMP_FUN_API */]: ["pump_fun_token" /* PUMP_FUN_TOKEN */],
|
|
7797
7881
|
// Meta Ads-related sources
|
|
7798
7882
|
["meta_ads_library" /* META_ADS_LIBRARY */]: ["meta_ad" /* META_AD */],
|
|
7883
|
+
["steel_meta_ads_library" /* STEEL_META_ADS_LIBRARY */]: ["meta_ad" /* META_AD */],
|
|
7799
7884
|
// Google Ads-related sources
|
|
7800
7885
|
["google_ads_transparency_center" /* GOOGLE_ADS_TRANSPARENCY_CENTER */]: [
|
|
7801
7886
|
"google_ad" /* GOOGLE_AD */
|
|
7802
7887
|
],
|
|
7888
|
+
// Cross-platform ad intelligence sources
|
|
7889
|
+
["adlibrary" /* ADLIBRARY */]: ["adlibrary_ad" /* ADLIBRARY_AD */],
|
|
7803
7890
|
// Crypto / Onchain sources
|
|
7804
7891
|
["etherscan_api" /* ETHERSCAN_API */]: ["contract_deployer" /* CONTRACT_DEPLOYER */]
|
|
7805
7892
|
};
|
|
@@ -8000,6 +8087,7 @@ function isDefinedAndNotNull(value) {
|
|
|
8000
8087
|
// ../../internal/utils/src/promise.ts
|
|
8001
8088
|
var promise_exports = {};
|
|
8002
8089
|
__export(promise_exports, {
|
|
8090
|
+
allSettledWithConcurrency: () => allSettledWithConcurrency,
|
|
8003
8091
|
isPromiseSettledResultFulfilled: () => isPromiseSettledResultFulfilled,
|
|
8004
8092
|
isPromiseSettledResultRejected: () => isPromiseSettledResultRejected
|
|
8005
8093
|
});
|
|
@@ -8009,6 +8097,27 @@ function isPromiseSettledResultFulfilled(result) {
|
|
|
8009
8097
|
function isPromiseSettledResultRejected(result) {
|
|
8010
8098
|
return result.status === "rejected";
|
|
8011
8099
|
}
|
|
8100
|
+
function allSettledWithConcurrency(items, limit, fn5) {
|
|
8101
|
+
return __async(this, null, function* () {
|
|
8102
|
+
const results = new Array(items.length);
|
|
8103
|
+
let next = 0;
|
|
8104
|
+
const worker = () => __async(null, null, function* () {
|
|
8105
|
+
for (; ; ) {
|
|
8106
|
+
const index = next;
|
|
8107
|
+
next += 1;
|
|
8108
|
+
if (index >= items.length) return;
|
|
8109
|
+
try {
|
|
8110
|
+
results[index] = { status: "fulfilled", value: yield fn5(items[index], index) };
|
|
8111
|
+
} catch (reason) {
|
|
8112
|
+
results[index] = { status: "rejected", reason };
|
|
8113
|
+
}
|
|
8114
|
+
}
|
|
8115
|
+
});
|
|
8116
|
+
const workers = Math.max(1, Math.min(Math.floor(limit) || 1, items.length));
|
|
8117
|
+
yield Promise.all(Array.from({ length: workers }, worker));
|
|
8118
|
+
return results;
|
|
8119
|
+
});
|
|
8120
|
+
}
|
|
8012
8121
|
|
|
8013
8122
|
// ../../internal/utils/src/url.ts
|
|
8014
8123
|
var url_exports = {};
|
|
@@ -10763,6 +10872,7 @@ function buildSafePreviewUrl({
|
|
|
10763
10872
|
var parse_exports = {};
|
|
10764
10873
|
__export(parse_exports, {
|
|
10765
10874
|
parseTerms: () => parseTerms,
|
|
10875
|
+
repairTermsString: () => repairTermsString,
|
|
10766
10876
|
stringifyTerms: () => stringifyTerms
|
|
10767
10877
|
});
|
|
10768
10878
|
function parseTerms(terms, {
|
|
@@ -10789,6 +10899,31 @@ function parseTerms(terms, {
|
|
|
10789
10899
|
function stringifyTerms(parsedTerms) {
|
|
10790
10900
|
return parsedTerms.map((term) => term.type === "exact" ? `*${term.value}*` : term.value).join(", ");
|
|
10791
10901
|
}
|
|
10902
|
+
function repairTermsString(terms) {
|
|
10903
|
+
if (!terms) return terms;
|
|
10904
|
+
const entries = terms.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
|
|
10905
|
+
if (entries.length === 0) return terms;
|
|
10906
|
+
const first = entries[0];
|
|
10907
|
+
const last = entries[entries.length - 1];
|
|
10908
|
+
const isWholeListWrap = entries.length > 1 && first.startsWith("*") && !first.endsWith("*") && last.endsWith("*") && !last.startsWith("*");
|
|
10909
|
+
const hasOneSidedAsterisk = entries.some(
|
|
10910
|
+
(entry) => entry.startsWith("*") !== entry.endsWith("*")
|
|
10911
|
+
);
|
|
10912
|
+
if (!isWholeListWrap && !hasOneSidedAsterisk) return terms;
|
|
10913
|
+
const seen = /* @__PURE__ */ new Set();
|
|
10914
|
+
const repaired = [];
|
|
10915
|
+
for (const entry of entries) {
|
|
10916
|
+
const inner = entry.replace(/^\*+|\*+$/g, "").trim();
|
|
10917
|
+
if (inner.length === 0) continue;
|
|
10918
|
+
const isExact = isWholeListWrap || entry.startsWith("*") && entry.endsWith("*") && entry.length > 2;
|
|
10919
|
+
const formatted = isExact ? `*${inner}*` : inner;
|
|
10920
|
+
const key = formatted.toLowerCase();
|
|
10921
|
+
if (seen.has(key)) continue;
|
|
10922
|
+
seen.add(key);
|
|
10923
|
+
repaired.push(formatted);
|
|
10924
|
+
}
|
|
10925
|
+
return repaired.join(", ");
|
|
10926
|
+
}
|
|
10792
10927
|
|
|
10793
10928
|
// ../../internal/utils/src/brand-pattern.ts
|
|
10794
10929
|
var brand_pattern_exports = {};
|
|
@@ -11434,6 +11569,44 @@ z.object({
|
|
|
11434
11569
|
})
|
|
11435
11570
|
)
|
|
11436
11571
|
});
|
|
11572
|
+
var DATE_ONLY_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
11573
|
+
var utcDateSchema = (endOfDay) => z.preprocess((value) => {
|
|
11574
|
+
if (typeof value !== "string") {
|
|
11575
|
+
return value;
|
|
11576
|
+
}
|
|
11577
|
+
const parsed = DateTime.fromISO(value, { zone: "utc" });
|
|
11578
|
+
if (!parsed.isValid) {
|
|
11579
|
+
return new Date(Number.NaN);
|
|
11580
|
+
}
|
|
11581
|
+
return endOfDay && DATE_ONLY_PATTERN.test(value) ? parsed.endOf("day").toJSDate() : parsed.toJSDate();
|
|
11582
|
+
}, z.coerce.date());
|
|
11583
|
+
|
|
11584
|
+
// ../../internal/validation/src/public/metrics/false-positive-rate.ts
|
|
11585
|
+
z.object({
|
|
11586
|
+
slug: z.string().min(1).describe("Organization slug"),
|
|
11587
|
+
startDate: utcDateSchema(false).optional().describe(
|
|
11588
|
+
"Only include assets blocked on or after this date. A date-only value (YYYY-MM-DD) starts at midnight UTC"
|
|
11589
|
+
),
|
|
11590
|
+
endDate: utcDateSchema(true).optional().describe(
|
|
11591
|
+
"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"
|
|
11592
|
+
),
|
|
11593
|
+
brandIds: z.array(z.number().int().positive()).optional().describe("Only include assets belonging to these brands"),
|
|
11594
|
+
countryCodes: z.array(z.string().length(2)).optional().describe("Only include assets scanned from these ISO 3166-1 alpha-2 countries")
|
|
11595
|
+
});
|
|
11596
|
+
z.object({
|
|
11597
|
+
byAssetType: z.array(
|
|
11598
|
+
z.object({
|
|
11599
|
+
assetType: z.nativeEnum(AssetType).describe("Asset type that was blocked"),
|
|
11600
|
+
blocked: z.number().describe("Assets of this type blocked within the date range"),
|
|
11601
|
+
falsePositives: z.number().describe("Of those, how many are no longer blocked today"),
|
|
11602
|
+
falsePositiveRate: z.number().nullable().describe(
|
|
11603
|
+
"falsePositives / blocked, 0-1. Null only when nothing was blocked, which cannot happen for a returned row"
|
|
11604
|
+
)
|
|
11605
|
+
})
|
|
11606
|
+
).describe(
|
|
11607
|
+
"False positive rate, one entry per asset type blocked in the range, descending by number blocked. Asset types with no false positives are included with a rate of 0; asset types with no blocks at all in the range are omitted, since they have no rate to report. The denominator counts block events, not distinct assets, so an asset blocked twice in the range counts twice. Whether a block still stands is read as of now while the range bounds the block itself, so a recent range reads low. An asset's blocked status is global, so a block another organization's report caused to be reversed is counted here too"
|
|
11608
|
+
)
|
|
11609
|
+
});
|
|
11437
11610
|
z.object({
|
|
11438
11611
|
slug: z.string().min(1),
|
|
11439
11612
|
startDate: z.date(),
|
|
@@ -11448,8 +11621,8 @@ z.object({
|
|
|
11448
11621
|
endDate: z.date()
|
|
11449
11622
|
})
|
|
11450
11623
|
});
|
|
11451
|
-
var
|
|
11452
|
-
var
|
|
11624
|
+
var DATE_ONLY_PATTERN2 = /^\d{4}-\d{2}-\d{2}$/;
|
|
11625
|
+
var utcDateSchema2 = (endOfDay) => z.preprocess((value) => {
|
|
11453
11626
|
if (typeof value !== "string") {
|
|
11454
11627
|
return value;
|
|
11455
11628
|
}
|
|
@@ -11457,7 +11630,7 @@ var utcDateSchema = (endOfDay) => z.preprocess((value) => {
|
|
|
11457
11630
|
if (!parsed.isValid) {
|
|
11458
11631
|
return new Date(Number.NaN);
|
|
11459
11632
|
}
|
|
11460
|
-
return endOfDay &&
|
|
11633
|
+
return endOfDay && DATE_ONLY_PATTERN2.test(value) ? parsed.endOf("day").toJSDate() : parsed.toJSDate();
|
|
11461
11634
|
}, z.coerce.date());
|
|
11462
11635
|
var funnelCountsSchema = z.object({
|
|
11463
11636
|
blocked: z.number().int().nonnegative().describe(
|
|
@@ -11466,10 +11639,10 @@ var funnelCountsSchema = z.object({
|
|
|
11466
11639
|
});
|
|
11467
11640
|
z.object({
|
|
11468
11641
|
slug: z.string().min(1).describe("Organization slug"),
|
|
11469
|
-
startDate:
|
|
11642
|
+
startDate: utcDateSchema2(false).describe(
|
|
11470
11643
|
"Only include assets whose earliest report was created on or after this date. A date-only value (YYYY-MM-DD) starts at midnight UTC"
|
|
11471
11644
|
),
|
|
11472
|
-
endDate:
|
|
11645
|
+
endDate: utcDateSchema2(true).describe(
|
|
11473
11646
|
"Only include assets whose earliest report was created 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"
|
|
11474
11647
|
),
|
|
11475
11648
|
brandIds: z.array(z.number().int().positive()).optional().describe("Only include assets belonging to these brands")
|
|
@@ -11523,25 +11696,12 @@ z.object({
|
|
|
11523
11696
|
})
|
|
11524
11697
|
)
|
|
11525
11698
|
});
|
|
11526
|
-
var DATE_ONLY_PATTERN2 = /^\d{4}-\d{2}-\d{2}$/;
|
|
11527
|
-
var utcDateSchema2 = (endOfDay) => z.preprocess((value) => {
|
|
11528
|
-
if (typeof value !== "string") {
|
|
11529
|
-
return value;
|
|
11530
|
-
}
|
|
11531
|
-
const parsed = DateTime.fromISO(value, { zone: "utc" });
|
|
11532
|
-
if (!parsed.isValid) {
|
|
11533
|
-
return new Date(Number.NaN);
|
|
11534
|
-
}
|
|
11535
|
-
return endOfDay && DATE_ONLY_PATTERN2.test(value) ? parsed.endOf("day").toJSDate() : parsed.toJSDate();
|
|
11536
|
-
}, z.coerce.date());
|
|
11537
|
-
|
|
11538
|
-
// ../../internal/validation/src/public/metrics/takedown-success-rate.ts
|
|
11539
11699
|
z.object({
|
|
11540
11700
|
slug: z.string().min(1).describe("Organization slug"),
|
|
11541
|
-
startDate:
|
|
11701
|
+
startDate: utcDateSchema(false).optional().describe(
|
|
11542
11702
|
"Only include takedowns first submitted to a provider on or after this date. A date-only value (YYYY-MM-DD) starts at midnight UTC"
|
|
11543
11703
|
),
|
|
11544
|
-
endDate:
|
|
11704
|
+
endDate: utcDateSchema(true).optional().describe(
|
|
11545
11705
|
"Only include takedowns first submitted to a provider 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"
|
|
11546
11706
|
),
|
|
11547
11707
|
blockLabel: z.string().optional().describe(
|
|
@@ -11569,10 +11729,10 @@ z.object({
|
|
|
11569
11729
|
});
|
|
11570
11730
|
z.object({
|
|
11571
11731
|
slug: z.string().min(1).describe("Organization slug"),
|
|
11572
|
-
startDate:
|
|
11732
|
+
startDate: utcDateSchema(false).optional().describe(
|
|
11573
11733
|
"Only include takedowns completed on or after this date. A date-only value (YYYY-MM-DD) starts at midnight UTC"
|
|
11574
11734
|
),
|
|
11575
|
-
endDate:
|
|
11735
|
+
endDate: utcDateSchema(true).optional().describe(
|
|
11576
11736
|
"Only include takedowns completed 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"
|
|
11577
11737
|
),
|
|
11578
11738
|
blockLabel: z.string().optional().describe(
|
|
@@ -11602,10 +11762,10 @@ var TakedownProviderRoleSchema = z.enum([
|
|
|
11602
11762
|
]);
|
|
11603
11763
|
z.object({
|
|
11604
11764
|
slug: z.string().min(1).describe("Organization slug"),
|
|
11605
|
-
startDate:
|
|
11765
|
+
startDate: utcDateSchema(false).optional().describe(
|
|
11606
11766
|
"Only include takedowns completed on or after this date. A date-only value (YYYY-MM-DD) starts at midnight UTC"
|
|
11607
11767
|
),
|
|
11608
|
-
endDate:
|
|
11768
|
+
endDate: utcDateSchema(true).optional().describe(
|
|
11609
11769
|
"Only include takedowns completed 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"
|
|
11610
11770
|
),
|
|
11611
11771
|
roles: z.array(TakedownProviderRoleSchema).optional().describe(
|
|
@@ -12241,8 +12401,10 @@ var reportCreateInputSchema = z.object({
|
|
|
12241
12401
|
).optional().refine((value) => !value || !isPhoneNumberMissingCountryCode(value), {
|
|
12242
12402
|
message: PHONE_COUNTRY_CODE_ERROR_MESSAGE
|
|
12243
12403
|
}),
|
|
12244
|
-
/** Optional list of URLs for
|
|
12245
|
-
attachmentUrls: z.array(z.string().url()).optional().describe(
|
|
12404
|
+
/** Optional list of URLs for files to be attached to the report as evidence. */
|
|
12405
|
+
attachmentUrls: z.array(z.string().url()).optional().describe(
|
|
12406
|
+
"URLs of files to attach to the report as evidence. Any file type, not only images: .eml/.msg messages, PDFs, and documents are all supported. Upload a file to POST /attachment/upload to get a URL, or pass a publicly reachable URL you host yourself."
|
|
12407
|
+
),
|
|
12246
12408
|
/** Optional link to the external submission (e.g. Telegram message link) */
|
|
12247
12409
|
externalSubmissionLink: z.string().url().optional().describe("Link to the external submission (e.g. Telegram message link)"),
|
|
12248
12410
|
/** Optional user agent string from the reporter's browser */
|
|
@@ -12410,6 +12572,38 @@ for parsing the dates.`
|
|
|
12410
12572
|
path: ["startDate"]
|
|
12411
12573
|
}
|
|
12412
12574
|
);
|
|
12575
|
+
var TakedownProofType = {
|
|
12576
|
+
ProviderEmail: "provider-email"
|
|
12577
|
+
};
|
|
12578
|
+
var takedownProofEmailSchema = z.object({
|
|
12579
|
+
text: z.string().describe(
|
|
12580
|
+
"The provider's reply, verbatim. Plain-text body where the provider sent one, otherwise the raw HTML body \u2014 treat it as untrusted content and escape it before rendering."
|
|
12581
|
+
),
|
|
12582
|
+
subject: z.string().nullable().describe("Subject line of the provider's reply.")
|
|
12583
|
+
}).nullable().describe(
|
|
12584
|
+
"Present when `type` is `provider-email`, `null` for every other proof type."
|
|
12585
|
+
);
|
|
12586
|
+
var takedownProofSchema = z.object({
|
|
12587
|
+
type: z.nativeEnum(TakedownProofType).describe(
|
|
12588
|
+
"Which kind of evidence this is. Currently only `provider-email`. New types may be added over time \u2014 read `type` before reading any of the type-specific objects below, and treat an unrecognised value as an opaque proof rather than an error."
|
|
12589
|
+
),
|
|
12590
|
+
source: z.string().nullable().describe(
|
|
12591
|
+
"Who confirmed the takedown, in whatever form that provider identifies itself \u2014 an address such as `abuse@example.com` for `provider-email`."
|
|
12592
|
+
),
|
|
12593
|
+
confirmedAt: z.date().describe("When the provider confirmed the takedown."),
|
|
12594
|
+
email: takedownProofEmailSchema
|
|
12595
|
+
});
|
|
12596
|
+
var takedownProofsSchema = z.array(takedownProofSchema).describe(
|
|
12597
|
+
`Evidence that this takedown is ours: providers confirming they removed the asset, newest first.
|
|
12598
|
+
|
|
12599
|
+
A takedown filed at several providers can be confirmed by more than one of them, so this is a list. At most 5 are returned per takedown.
|
|
12600
|
+
|
|
12601
|
+
\`type\`, \`source\` and \`confirmedAt\` are present on every entry, so a caller that only needs to show "confirmed by X on date Y" never has to branch on the type. The type-specific object (\`email\`, and others as they are added) carries the underlying evidence.
|
|
12602
|
+
|
|
12603
|
+
Empty unless the takedown is COMPLETED and we hold a confirmation \u2014 which is the common case, because most providers either never reply or reply without confirming they acted. An empty list is not evidence that the asset is still up.
|
|
12604
|
+
|
|
12605
|
+
Requires the \`takedown-proof-api\` feature flag; without it this is always empty.`
|
|
12606
|
+
);
|
|
12413
12607
|
var takedownItemSchema = z.object({
|
|
12414
12608
|
id: z.number().describe("Takedown ID"),
|
|
12415
12609
|
status: z.nativeEnum(TakedownStatus).describe("Takedown status"),
|
|
@@ -12459,7 +12653,8 @@ var takedownItemSchema = z.object({
|
|
|
12459
12653
|
name: z.string().describe("TLD registrar name (e.g. `Verisign`, `Public Interest Registry`)")
|
|
12460
12654
|
}).nullable().describe(
|
|
12461
12655
|
"Top-level-domain registrar assigned to this takedown. `null` when unresolved."
|
|
12462
|
-
)
|
|
12656
|
+
),
|
|
12657
|
+
proofs: takedownProofsSchema
|
|
12463
12658
|
});
|
|
12464
12659
|
z.object({
|
|
12465
12660
|
takedowns: z.array(takedownItemSchema).describe("List of takedowns"),
|
|
@@ -12775,12 +12970,17 @@ var ONE_PAGER_BUDGETS = {
|
|
|
12775
12970
|
headline: 60,
|
|
12776
12971
|
badge: 28,
|
|
12777
12972
|
frontLabel: 44,
|
|
12778
|
-
paragraph: 480,
|
|
12779
12973
|
paragraphsMax: 2,
|
|
12780
12974
|
heroPhrase: 80,
|
|
12781
|
-
|
|
12782
|
-
|
|
12783
|
-
|
|
12975
|
+
landscapeCaption: 180,
|
|
12976
|
+
xp01Line: 220,
|
|
12977
|
+
screenshotCaption: 48,
|
|
12978
|
+
divergenceLine: 220
|
|
12979
|
+
};
|
|
12980
|
+
var ONE_PAGER_STORED_MAX = {
|
|
12981
|
+
paragraph: 480,
|
|
12982
|
+
paragraph2Lead: 60,
|
|
12983
|
+
heroNarrative: 300
|
|
12784
12984
|
};
|
|
12785
12985
|
var onePagerFactPayloadSchema = z.object({
|
|
12786
12986
|
/** Raw (not defanged) asset contents the prose may reference. */
|
|
@@ -12792,24 +12992,56 @@ var onePagerFactPayloadSchema = z.object({
|
|
|
12792
12992
|
platforms: z.array(z.string()),
|
|
12793
12993
|
groupSize: z.number(),
|
|
12794
12994
|
takedownCompletedAt: z.string().nullable(),
|
|
12795
|
-
activeSince: z.string().nullable()
|
|
12995
|
+
activeSince: z.string().nullable(),
|
|
12996
|
+
// ---- v2 enrichment ----------------------------------------------------
|
|
12997
|
+
// Optional rather than defaulted so rows stored by v1 keep parsing AND the
|
|
12998
|
+
// inferred type stays assignable from a v1-shaped literal.
|
|
12999
|
+
/** How the attacker paid for the surface ("free_subdomain" | ...). */
|
|
13000
|
+
hostingPattern: z.string().nullable().optional(),
|
|
13001
|
+
/** Who surfaced it first ("client_reported" | "proactive"). */
|
|
13002
|
+
sourceKind: z.string().nullable().optional(),
|
|
13003
|
+
/** Prior blocked assets in the same relaunch family. */
|
|
13004
|
+
relaunchCount: z.number().nullable().optional(),
|
|
13005
|
+
/** Earliest sighting, ISO. */
|
|
13006
|
+
firstSeenAt: z.string().nullable().optional(),
|
|
13007
|
+
/**
|
|
13008
|
+
* Pre-computed hours from first sighting to confirmed removal, as a string
|
|
13009
|
+
* so it lands in the same allowlist as `numbers`. The model is forbidden
|
|
13010
|
+
* from doing arithmetic, so every duration it may cite is computed here.
|
|
13011
|
+
*/
|
|
13012
|
+
timeToRemovalHrs: z.string().nullable().optional()
|
|
12796
13013
|
});
|
|
12797
13014
|
var onePagerStorySchema = z.object({
|
|
12798
13015
|
archetypeId: z.string(),
|
|
12799
13016
|
archetypeCategory: z.string(),
|
|
12800
13017
|
/** 1-5 = placed on the page; null = alternate available for swap. */
|
|
12801
13018
|
slot: z.number().int().min(1).max(5).nullable(),
|
|
13019
|
+
/** Column layout the story occupies; slot 1 is full-width by convention. */
|
|
13020
|
+
layout: z.enum(["full", "half"]).default("half"),
|
|
12802
13021
|
frontLabel: z.string().max(ONE_PAGER_BUDGETS.frontLabel),
|
|
12803
13022
|
headline: z.string().max(ONE_PAGER_BUDGETS.headline),
|
|
13023
|
+
/** Compound "10 of 10 removed · 3 hrs". */
|
|
12804
13024
|
badge: z.string().max(ONE_PAGER_BUDGETS.badge),
|
|
12805
|
-
paragraphs: z.array(z.string().max(
|
|
13025
|
+
paragraphs: z.array(z.string().max(ONE_PAGER_STORED_MAX.paragraph)).min(1).max(ONE_PAGER_BUDGETS.paragraphsMax),
|
|
13026
|
+
/** Bold lead-in shown ahead of the second paragraph. */
|
|
13027
|
+
paragraph2Lead: z.string().max(ONE_PAGER_STORED_MAX.paragraph2Lead).nullable().default(null),
|
|
12806
13028
|
/** Defanged, display-ready asset identifiers. */
|
|
12807
|
-
assetList: z.array(z.string()).max(
|
|
13029
|
+
assetList: z.array(z.string()).max(12),
|
|
13030
|
+
/** Story-bank identity for the referenced assets. */
|
|
13031
|
+
assetIds: z.array(z.number()).default([]),
|
|
12808
13032
|
screenshotUrls: z.array(z.string()),
|
|
12809
13033
|
selectedScreenshotUrls: z.array(z.string()).max(2),
|
|
13034
|
+
/** Parallel to selectedScreenshotUrls. */
|
|
13035
|
+
screenshotCaptions: z.array(z.string().max(ONE_PAGER_BUDGETS.screenshotCaption)).max(2).default([]),
|
|
13036
|
+
/** Manual redact toggle, parallel to selectedScreenshotUrls. */
|
|
13037
|
+
screenshotBlur: z.array(z.boolean()).max(2).default([]),
|
|
12810
13038
|
xp01Line: z.string().max(ONE_PAGER_BUDGETS.xp01Line).nullable(),
|
|
12811
13039
|
factPayload: onePagerFactPayloadSchema,
|
|
12812
|
-
proseSource: z.enum(["llm", "template"])
|
|
13040
|
+
proseSource: z.enum(["llm", "template"]),
|
|
13041
|
+
/** Cross-period continuation framing. */
|
|
13042
|
+
continuation: z.boolean().default(false),
|
|
13043
|
+
/** Shown in the editor when this story overlaps with a prior period. */
|
|
13044
|
+
priorHeadline: z.string().nullable().default(null)
|
|
12813
13045
|
});
|
|
12814
13046
|
var onePagerLandscapeRowSchema = z.object({
|
|
12815
13047
|
platform: z.string(),
|
|
@@ -12820,25 +13052,55 @@ var onePagerFormDataObjectSchema = z.object({
|
|
|
12820
13052
|
orgName: z.string(),
|
|
12821
13053
|
orgSlug: z.string(),
|
|
12822
13054
|
periodLabel: z.string(),
|
|
13055
|
+
partnershipLabel: z.string().max(40).default("AN ONGOING PARTNERSHIP"),
|
|
13056
|
+
coverageWindow: z.object({ start: z.string(), end: z.string(), label: z.string(), short: z.boolean() }).nullable().default(null),
|
|
12823
13057
|
heroStat: z.object({
|
|
12824
13058
|
value: z.string(),
|
|
12825
13059
|
phrase: z.string().max(ONE_PAGER_BUDGETS.heroPhrase)
|
|
12826
13060
|
}),
|
|
12827
|
-
heroNarrative: z.string().max(
|
|
12828
|
-
|
|
13061
|
+
heroNarrative: z.string().max(ONE_PAGER_STORED_MAX.heroNarrative),
|
|
13062
|
+
/**
|
|
13063
|
+
* Up to 4 rows, but the metric library legitimately returns fewer on a thin
|
|
13064
|
+
* month (a zero-valued metric is excluded outright rather than rendered as
|
|
13065
|
+
* a "0" row), so this is a range, not a fixed length. Below 2 the block
|
|
13066
|
+
* reads as broken rather than short.
|
|
13067
|
+
*/
|
|
13068
|
+
metricsRows: z.array(
|
|
13069
|
+
z.object({
|
|
13070
|
+
key: z.string().default("legacy"),
|
|
13071
|
+
label: z.string(),
|
|
13072
|
+
value: z.string()
|
|
13073
|
+
})
|
|
13074
|
+
).min(2).max(4),
|
|
12829
13075
|
landscape: z.object({
|
|
12830
13076
|
rows: z.array(onePagerLandscapeRowSchema).max(8),
|
|
12831
13077
|
otherCount: z.number().nullable(),
|
|
12832
13078
|
otherPlatformsLabel: z.string().nullable(),
|
|
12833
|
-
|
|
13079
|
+
/** Kept for legacy row parse; caption is preferred going forward. */
|
|
13080
|
+
divergenceLine: z.string().max(ONE_PAGER_BUDGETS.divergenceLine).nullable(),
|
|
13081
|
+
caption: z.string().max(ONE_PAGER_BUDGETS.landscapeCaption).nullable().default(null)
|
|
12834
13082
|
}),
|
|
12835
13083
|
stories: z.array(onePagerStorySchema).min(1).max(6),
|
|
12836
|
-
footer: z.object({
|
|
13084
|
+
footer: z.object({
|
|
13085
|
+
contactName: z.string(),
|
|
13086
|
+
contactLine: z.string(),
|
|
13087
|
+
contactEmail: z.string().default(""),
|
|
13088
|
+
bookingLink: z.string().default(""),
|
|
13089
|
+
ctaLine: z.string().default("Anything your community has flagged, send it over.")
|
|
13090
|
+
}),
|
|
13091
|
+
/** Engine v2 writes 2; absent/older rows default to 1. */
|
|
13092
|
+
schemaVersion: z.number().default(1)
|
|
12837
13093
|
});
|
|
12838
13094
|
onePagerFormDataObjectSchema.refine(
|
|
12839
13095
|
(data) => data.stories.some((s2) => s2.slot !== null),
|
|
12840
13096
|
{ message: "at least one story must be placed", path: ["stories"] }
|
|
12841
13097
|
);
|
|
13098
|
+
var INTERNAL_ORG_SLUGS = [
|
|
13099
|
+
"chainpatrol",
|
|
13100
|
+
"chainpatrol-automation",
|
|
13101
|
+
"mountaintop"
|
|
13102
|
+
];
|
|
13103
|
+
new Set(INTERNAL_ORG_SLUGS);
|
|
12842
13104
|
z.object({
|
|
12843
13105
|
x: z.number().min(0).max(1),
|
|
12844
13106
|
y: z.number().min(0).max(1),
|
|
@@ -13604,20 +13866,20 @@ var convertA98ToXyz65_default = convertA98ToXyz65;
|
|
|
13604
13866
|
|
|
13605
13867
|
// ../../node_modules/culori/src/a98/convertXyz65ToA98.js
|
|
13606
13868
|
var gamma = (v) => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);
|
|
13607
|
-
var convertXyz65ToA98 = ({ x, y, z:
|
|
13869
|
+
var convertXyz65ToA98 = ({ x, y, z: z64, alpha }) => {
|
|
13608
13870
|
if (x === void 0) x = 0;
|
|
13609
13871
|
if (y === void 0) y = 0;
|
|
13610
|
-
if (
|
|
13872
|
+
if (z64 === void 0) z64 = 0;
|
|
13611
13873
|
let res = {
|
|
13612
13874
|
mode: "a98",
|
|
13613
13875
|
r: gamma(
|
|
13614
|
-
x * 2.0415879038107465 - y * 0.5650069742788597 - 0.3447313507783297 *
|
|
13876
|
+
x * 2.0415879038107465 - y * 0.5650069742788597 - 0.3447313507783297 * z64
|
|
13615
13877
|
),
|
|
13616
13878
|
g: gamma(
|
|
13617
|
-
x * -0.9692436362808798 + y * 1.8759675015077206 + 0.0415550574071756 *
|
|
13879
|
+
x * -0.9692436362808798 + y * 1.8759675015077206 + 0.0415550574071756 * z64
|
|
13618
13880
|
),
|
|
13619
13881
|
b: gamma(
|
|
13620
|
-
x * 0.0134442806320312 - y * 0.1183623922310184 + 1.0151749943912058 *
|
|
13882
|
+
x * 0.0134442806320312 - y * 0.1183623922310184 + 1.0151749943912058 * z64
|
|
13621
13883
|
)
|
|
13622
13884
|
};
|
|
13623
13885
|
if (alpha !== void 0) {
|
|
@@ -13684,14 +13946,14 @@ var convertLrgbToRgb = ({ r, g, b, alpha }, mode = "rgb") => {
|
|
|
13684
13946
|
var convertLrgbToRgb_default = convertLrgbToRgb;
|
|
13685
13947
|
|
|
13686
13948
|
// ../../node_modules/culori/src/xyz65/convertXyz65ToRgb.js
|
|
13687
|
-
var convertXyz65ToRgb = ({ x, y, z:
|
|
13949
|
+
var convertXyz65ToRgb = ({ x, y, z: z64, alpha }) => {
|
|
13688
13950
|
if (x === void 0) x = 0;
|
|
13689
13951
|
if (y === void 0) y = 0;
|
|
13690
|
-
if (
|
|
13952
|
+
if (z64 === void 0) z64 = 0;
|
|
13691
13953
|
let res = convertLrgbToRgb_default({
|
|
13692
|
-
r: x * 3.2409699419045226 - y * 1.537383177570094 - 0.4986107602930034 *
|
|
13693
|
-
g: x * -0.9692436362808796 + y * 1.8759675015077204 + 0.0415550574071756 *
|
|
13694
|
-
b: x * 0.0556300796969936 - y * 0.2039769588889765 + 1.0569715142428784 *
|
|
13954
|
+
r: x * 3.2409699419045226 - y * 1.537383177570094 - 0.4986107602930034 * z64,
|
|
13955
|
+
g: x * -0.9692436362808796 + y * 1.8759675015077204 + 0.0415550574071756 * z64,
|
|
13956
|
+
b: x * 0.0556300796969936 - y * 0.2039769588889765 + 1.0569715142428784 * z64
|
|
13695
13957
|
});
|
|
13696
13958
|
if (alpha !== void 0) {
|
|
13697
13959
|
res.alpha = alpha;
|
|
@@ -13941,13 +14203,13 @@ var convertLab65ToRgb_default = convertLab65ToRgb;
|
|
|
13941
14203
|
|
|
13942
14204
|
// ../../node_modules/culori/src/lab65/convertXyz65ToLab65.js
|
|
13943
14205
|
var f = (value) => value > e ? Math.cbrt(value) : (k * value + 16) / 116;
|
|
13944
|
-
var convertXyz65ToLab65 = ({ x, y, z:
|
|
14206
|
+
var convertXyz65ToLab65 = ({ x, y, z: z64, alpha }) => {
|
|
13945
14207
|
if (x === void 0) x = 0;
|
|
13946
14208
|
if (y === void 0) y = 0;
|
|
13947
|
-
if (
|
|
14209
|
+
if (z64 === void 0) z64 = 0;
|
|
13948
14210
|
let f0 = f(x / D65.X);
|
|
13949
14211
|
let f1 = f(y / D65.Y);
|
|
13950
|
-
let f22 = f(
|
|
14212
|
+
let f22 = f(z64 / D65.Z);
|
|
13951
14213
|
let res = {
|
|
13952
14214
|
mode: "lab65",
|
|
13953
14215
|
l: 116 * f1 - 16,
|
|
@@ -14604,10 +14866,10 @@ var convertItpToXyz65_default = convertItpToXyz65;
|
|
|
14604
14866
|
|
|
14605
14867
|
// ../../node_modules/culori/src/itp/convertXyz65ToItp.js
|
|
14606
14868
|
var toAbs = (c2 = 0) => Math.max(c2 * YW, 0);
|
|
14607
|
-
var convertXyz65ToItp = ({ x, y, z:
|
|
14869
|
+
var convertXyz65ToItp = ({ x, y, z: z64, alpha }) => {
|
|
14608
14870
|
const absX = toAbs(x);
|
|
14609
14871
|
const absY = toAbs(y);
|
|
14610
|
-
const absZ = toAbs(
|
|
14872
|
+
const absZ = toAbs(z64);
|
|
14611
14873
|
const l2 = transferPqEncode(
|
|
14612
14874
|
0.3592832590121217 * absX + 0.6976051147779502 * absY - 0.0358915932320289 * absZ
|
|
14613
14875
|
);
|
|
@@ -14665,15 +14927,15 @@ var jabPqEncode = (v) => {
|
|
|
14665
14927
|
return Math.pow((C1 + C2 * vn3) / (1 + C3 * vn3), p);
|
|
14666
14928
|
};
|
|
14667
14929
|
var abs = (v = 0) => Math.max(v * 203, 0);
|
|
14668
|
-
var convertXyz65ToJab = ({ x, y, z:
|
|
14930
|
+
var convertXyz65ToJab = ({ x, y, z: z64, alpha }) => {
|
|
14669
14931
|
x = abs(x);
|
|
14670
14932
|
y = abs(y);
|
|
14671
|
-
|
|
14672
|
-
let xp = 1.15 * x - 0.15 *
|
|
14933
|
+
z64 = abs(z64);
|
|
14934
|
+
let xp = 1.15 * x - 0.15 * z64;
|
|
14673
14935
|
let yp = 0.66 * y + 0.34 * x;
|
|
14674
|
-
let l2 = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 *
|
|
14675
|
-
let m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 *
|
|
14676
|
-
let s2 = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 *
|
|
14936
|
+
let l2 = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z64);
|
|
14937
|
+
let m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z64);
|
|
14938
|
+
let s2 = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z64);
|
|
14677
14939
|
let i = (l2 + m) / 2;
|
|
14678
14940
|
let res = {
|
|
14679
14941
|
mode: "jab",
|
|
@@ -14859,14 +15121,14 @@ var convertLabToXyz50 = ({ l: l2, a, b, alpha }) => {
|
|
|
14859
15121
|
var convertLabToXyz50_default = convertLabToXyz50;
|
|
14860
15122
|
|
|
14861
15123
|
// ../../node_modules/culori/src/xyz50/convertXyz50ToRgb.js
|
|
14862
|
-
var convertXyz50ToRgb = ({ x, y, z:
|
|
15124
|
+
var convertXyz50ToRgb = ({ x, y, z: z64, alpha }) => {
|
|
14863
15125
|
if (x === void 0) x = 0;
|
|
14864
15126
|
if (y === void 0) y = 0;
|
|
14865
|
-
if (
|
|
15127
|
+
if (z64 === void 0) z64 = 0;
|
|
14866
15128
|
let res = convertLrgbToRgb_default({
|
|
14867
|
-
r: x * 3.1341359569958707 - y * 1.6173863321612538 - 0.4906619460083532 *
|
|
14868
|
-
g: x * -0.978795502912089 + y * 1.916254567259524 + 0.03344273116131949 *
|
|
14869
|
-
b: x * 0.07195537988411677 - y * 0.2289768264158322 + 1.405386058324125 *
|
|
15129
|
+
r: x * 3.1341359569958707 - y * 1.6173863321612538 - 0.4906619460083532 * z64,
|
|
15130
|
+
g: x * -0.978795502912089 + y * 1.916254567259524 + 0.03344273116131949 * z64,
|
|
15131
|
+
b: x * 0.07195537988411677 - y * 0.2289768264158322 + 1.405386058324125 * z64
|
|
14870
15132
|
});
|
|
14871
15133
|
if (alpha !== void 0) {
|
|
14872
15134
|
res.alpha = alpha;
|
|
@@ -14897,13 +15159,13 @@ var convertRgbToXyz50_default = convertRgbToXyz50;
|
|
|
14897
15159
|
|
|
14898
15160
|
// ../../node_modules/culori/src/lab/convertXyz50ToLab.js
|
|
14899
15161
|
var f2 = (value) => value > e3 ? Math.cbrt(value) : (k3 * value + 16) / 116;
|
|
14900
|
-
var convertXyz50ToLab = ({ x, y, z:
|
|
15162
|
+
var convertXyz50ToLab = ({ x, y, z: z64, alpha }) => {
|
|
14901
15163
|
if (x === void 0) x = 0;
|
|
14902
15164
|
if (y === void 0) y = 0;
|
|
14903
|
-
if (
|
|
15165
|
+
if (z64 === void 0) z64 = 0;
|
|
14904
15166
|
let f0 = f2(x / D50.X);
|
|
14905
15167
|
let f1 = f2(y / D50.Y);
|
|
14906
|
-
let f22 = f2(
|
|
15168
|
+
let f22 = f2(z64 / D50.Z);
|
|
14907
15169
|
let res = {
|
|
14908
15170
|
mode: "lab",
|
|
14909
15171
|
l: 116 * f1 - 16,
|
|
@@ -15138,18 +15400,18 @@ var convertLchuvToLuv = ({ l: l2, c: c2, h, alpha }) => {
|
|
|
15138
15400
|
var convertLchuvToLuv_default = convertLchuvToLuv;
|
|
15139
15401
|
|
|
15140
15402
|
// ../../node_modules/culori/src/luv/convertXyz50ToLuv.js
|
|
15141
|
-
var u_fn = (x, y,
|
|
15142
|
-
var v_fn = (x, y,
|
|
15403
|
+
var u_fn = (x, y, z64) => 4 * x / (x + 15 * y + 3 * z64);
|
|
15404
|
+
var v_fn = (x, y, z64) => 9 * y / (x + 15 * y + 3 * z64);
|
|
15143
15405
|
var un = u_fn(D50.X, D50.Y, D50.Z);
|
|
15144
15406
|
var vn = v_fn(D50.X, D50.Y, D50.Z);
|
|
15145
15407
|
var l_fn = (value) => value <= e3 ? k3 * value : 116 * Math.cbrt(value) - 16;
|
|
15146
|
-
var convertXyz50ToLuv = ({ x, y, z:
|
|
15408
|
+
var convertXyz50ToLuv = ({ x, y, z: z64, alpha }) => {
|
|
15147
15409
|
if (x === void 0) x = 0;
|
|
15148
15410
|
if (y === void 0) y = 0;
|
|
15149
|
-
if (
|
|
15411
|
+
if (z64 === void 0) z64 = 0;
|
|
15150
15412
|
let l2 = l_fn(y / D50.Y);
|
|
15151
|
-
let u = u_fn(x, y,
|
|
15152
|
-
let v = v_fn(x, y,
|
|
15413
|
+
let u = u_fn(x, y, z64);
|
|
15414
|
+
let v = v_fn(x, y, z64);
|
|
15153
15415
|
if (!isFinite(u) || !isFinite(v)) {
|
|
15154
15416
|
l2 = u = v = 0;
|
|
15155
15417
|
} else {
|
|
@@ -15170,8 +15432,8 @@ var convertXyz50ToLuv = ({ x, y, z: z61, alpha }) => {
|
|
|
15170
15432
|
var convertXyz50ToLuv_default = convertXyz50ToLuv;
|
|
15171
15433
|
|
|
15172
15434
|
// ../../node_modules/culori/src/luv/convertLuvToXyz50.js
|
|
15173
|
-
var u_fn2 = (x, y,
|
|
15174
|
-
var v_fn2 = (x, y,
|
|
15435
|
+
var u_fn2 = (x, y, z64) => 4 * x / (x + 15 * y + 3 * z64);
|
|
15436
|
+
var v_fn2 = (x, y, z64) => 9 * y / (x + 15 * y + 3 * z64);
|
|
15175
15437
|
var un2 = u_fn2(D50.X, D50.Y, D50.Z);
|
|
15176
15438
|
var vn2 = v_fn2(D50.X, D50.Y, D50.Z);
|
|
15177
15439
|
var convertLuvToXyz50 = ({ l: l2, u, v, alpha }) => {
|
|
@@ -15185,8 +15447,8 @@ var convertLuvToXyz50 = ({ l: l2, u, v, alpha }) => {
|
|
|
15185
15447
|
let vp = v / (13 * l2) + vn2;
|
|
15186
15448
|
let y = D50.Y * (l2 <= 8 ? l2 / k3 : Math.pow((l2 + 16) / 116, 3));
|
|
15187
15449
|
let x = y * (9 * up) / (4 * vp);
|
|
15188
|
-
let
|
|
15189
|
-
let res = { mode: "xyz50", x, y, z:
|
|
15450
|
+
let z64 = y * (12 - 3 * up - 20 * vp) / (4 * vp);
|
|
15451
|
+
let res = { mode: "xyz50", x, y, z: z64 };
|
|
15190
15452
|
if (alpha !== void 0) {
|
|
15191
15453
|
res.alpha = alpha;
|
|
15192
15454
|
}
|
|
@@ -15803,15 +16065,15 @@ var convertP3ToXyz65 = (rgb2) => {
|
|
|
15803
16065
|
var convertP3ToXyz65_default = convertP3ToXyz65;
|
|
15804
16066
|
|
|
15805
16067
|
// ../../node_modules/culori/src/p3/convertXyz65ToP3.js
|
|
15806
|
-
var convertXyz65ToP3 = ({ x, y, z:
|
|
16068
|
+
var convertXyz65ToP3 = ({ x, y, z: z64, alpha }) => {
|
|
15807
16069
|
if (x === void 0) x = 0;
|
|
15808
16070
|
if (y === void 0) y = 0;
|
|
15809
|
-
if (
|
|
16071
|
+
if (z64 === void 0) z64 = 0;
|
|
15810
16072
|
let res = convertLrgbToRgb_default(
|
|
15811
16073
|
{
|
|
15812
|
-
r: x * 2.4934969119414263 - y * 0.9313836179191242 - 0.402710784450717 *
|
|
15813
|
-
g: x * -0.8294889695615749 + y * 1.7626640603183465 + 0.0236246858419436 *
|
|
15814
|
-
b: x * 0.0358458302437845 - y * 0.0761723892680418 + 0.9568845240076871 *
|
|
16074
|
+
r: x * 2.4934969119414263 - y * 0.9313836179191242 - 0.402710784450717 * z64,
|
|
16075
|
+
g: x * -0.8294889695615749 + y * 1.7626640603183465 + 0.0236246858419436 * z64,
|
|
16076
|
+
b: x * 0.0358458302437845 - y * 0.0761723892680418 + 0.9568845240076871 * z64
|
|
15815
16077
|
},
|
|
15816
16078
|
"p3"
|
|
15817
16079
|
);
|
|
@@ -15846,19 +16108,19 @@ var gamma2 = (v) => {
|
|
|
15846
16108
|
}
|
|
15847
16109
|
return 16 * v;
|
|
15848
16110
|
};
|
|
15849
|
-
var convertXyz50ToProphoto = ({ x, y, z:
|
|
16111
|
+
var convertXyz50ToProphoto = ({ x, y, z: z64, alpha }) => {
|
|
15850
16112
|
if (x === void 0) x = 0;
|
|
15851
16113
|
if (y === void 0) y = 0;
|
|
15852
|
-
if (
|
|
16114
|
+
if (z64 === void 0) z64 = 0;
|
|
15853
16115
|
let res = {
|
|
15854
16116
|
mode: "prophoto",
|
|
15855
16117
|
r: gamma2(
|
|
15856
|
-
x * 1.3457868816471585 - y * 0.2555720873797946 - 0.0511018649755453 *
|
|
16118
|
+
x * 1.3457868816471585 - y * 0.2555720873797946 - 0.0511018649755453 * z64
|
|
15857
16119
|
),
|
|
15858
16120
|
g: gamma2(
|
|
15859
|
-
x * -0.5446307051249019 + y * 1.5082477428451466 + 0.0205274474364214 *
|
|
16121
|
+
x * -0.5446307051249019 + y * 1.5082477428451466 + 0.0205274474364214 * z64
|
|
15860
16122
|
),
|
|
15861
|
-
b: gamma2(x * 0 + y * 0 + 1.2119675456389452 *
|
|
16123
|
+
b: gamma2(x * 0 + y * 0 + 1.2119675456389452 * z64)
|
|
15862
16124
|
};
|
|
15863
16125
|
if (alpha !== void 0) {
|
|
15864
16126
|
res.alpha = alpha;
|
|
@@ -15918,20 +16180,20 @@ var gamma3 = (v) => {
|
|
|
15918
16180
|
}
|
|
15919
16181
|
return 4.5 * v;
|
|
15920
16182
|
};
|
|
15921
|
-
var convertXyz65ToRec2020 = ({ x, y, z:
|
|
16183
|
+
var convertXyz65ToRec2020 = ({ x, y, z: z64, alpha }) => {
|
|
15922
16184
|
if (x === void 0) x = 0;
|
|
15923
16185
|
if (y === void 0) y = 0;
|
|
15924
|
-
if (
|
|
16186
|
+
if (z64 === void 0) z64 = 0;
|
|
15925
16187
|
let res = {
|
|
15926
16188
|
mode: "rec2020",
|
|
15927
16189
|
r: gamma3(
|
|
15928
|
-
x * 1.7166511879712683 - y * 0.3556707837763925 - 0.2533662813736599 *
|
|
16190
|
+
x * 1.7166511879712683 - y * 0.3556707837763925 - 0.2533662813736599 * z64
|
|
15929
16191
|
),
|
|
15930
16192
|
g: gamma3(
|
|
15931
|
-
x * -0.6666843518324893 + y * 1.6164812366349395 + 0.0157685458139111 *
|
|
16193
|
+
x * -0.6666843518324893 + y * 1.6164812366349395 + 0.0157685458139111 * z64
|
|
15932
16194
|
),
|
|
15933
16195
|
b: gamma3(
|
|
15934
|
-
x * 0.0176398574453108 - y * 0.0427706132578085 + 0.9421031212354739 *
|
|
16196
|
+
x * 0.0176398574453108 - y * 0.0427706132578085 + 0.9421031212354739 * z64
|
|
15935
16197
|
)
|
|
15936
16198
|
};
|
|
15937
16199
|
if (alpha !== void 0) {
|
|
@@ -16084,15 +16346,15 @@ var definition_default26 = definition26;
|
|
|
16084
16346
|
|
|
16085
16347
|
// ../../node_modules/culori/src/xyz65/convertXyz65ToXyz50.js
|
|
16086
16348
|
var convertXyz65ToXyz50 = (xyz652) => {
|
|
16087
|
-
let { x, y, z:
|
|
16349
|
+
let { x, y, z: z64, alpha } = xyz652;
|
|
16088
16350
|
if (x === void 0) x = 0;
|
|
16089
16351
|
if (y === void 0) y = 0;
|
|
16090
|
-
if (
|
|
16352
|
+
if (z64 === void 0) z64 = 0;
|
|
16091
16353
|
let res = {
|
|
16092
16354
|
mode: "xyz50",
|
|
16093
|
-
x: 1.0479298208405488 * x + 0.0229467933410191 * y - 0.0501922295431356 *
|
|
16094
|
-
y: 0.0296278156881593 * x + 0.990434484573249 * y - 0.0170738250293851 *
|
|
16095
|
-
z: -0.0092430581525912 * x + 0.0150551448965779 * y + 0.7518742899580008 *
|
|
16355
|
+
x: 1.0479298208405488 * x + 0.0229467933410191 * y - 0.0501922295431356 * z64,
|
|
16356
|
+
y: 0.0296278156881593 * x + 0.990434484573249 * y - 0.0170738250293851 * z64,
|
|
16357
|
+
z: -0.0092430581525912 * x + 0.0150551448965779 * y + 0.7518742899580008 * z64
|
|
16096
16358
|
};
|
|
16097
16359
|
if (alpha !== void 0) {
|
|
16098
16360
|
res.alpha = alpha;
|
|
@@ -16103,15 +16365,15 @@ var convertXyz65ToXyz50_default = convertXyz65ToXyz50;
|
|
|
16103
16365
|
|
|
16104
16366
|
// ../../node_modules/culori/src/xyz65/convertXyz50ToXyz65.js
|
|
16105
16367
|
var convertXyz50ToXyz65 = (xyz502) => {
|
|
16106
|
-
let { x, y, z:
|
|
16368
|
+
let { x, y, z: z64, alpha } = xyz502;
|
|
16107
16369
|
if (x === void 0) x = 0;
|
|
16108
16370
|
if (y === void 0) y = 0;
|
|
16109
|
-
if (
|
|
16371
|
+
if (z64 === void 0) z64 = 0;
|
|
16110
16372
|
let res = {
|
|
16111
16373
|
mode: "xyz65",
|
|
16112
|
-
x: 0.9554734527042182 * x - 0.0230985368742614 * y + 0.0632593086610217 *
|
|
16113
|
-
y: -0.0283697069632081 * x + 1.0099954580058226 * y + 0.021041398966943 *
|
|
16114
|
-
z: 0.0123140016883199 * x - 0.0205076964334779 * y + 1.3303659366080753 *
|
|
16374
|
+
x: 0.9554734527042182 * x - 0.0230985368742614 * y + 0.0632593086610217 * z64,
|
|
16375
|
+
y: -0.0283697069632081 * x + 1.0099954580058226 * y + 0.021041398966943 * z64,
|
|
16376
|
+
z: 0.0123140016883199 * x - 0.0205076964334779 * y + 1.3303659366080753 * z64
|
|
16115
16377
|
};
|
|
16116
16378
|
if (alpha !== void 0) {
|
|
16117
16379
|
res.alpha = alpha;
|
|
@@ -16348,6 +16610,13 @@ function validateTermsString(termsString) {
|
|
|
16348
16610
|
};
|
|
16349
16611
|
}
|
|
16350
16612
|
} else {
|
|
16613
|
+
if (term.startsWith("*") || term.endsWith("*")) {
|
|
16614
|
+
const inner = term.replace(/^\*+|\*+$/g, "");
|
|
16615
|
+
return {
|
|
16616
|
+
valid: false,
|
|
16617
|
+
error: `Term "${term}" has an unmatched asterisk. Use *${inner}* for exact matching, or ${inner} for loose matching.`
|
|
16618
|
+
};
|
|
16619
|
+
}
|
|
16351
16620
|
normalizedTerm = term.replace(/\s+/g, "");
|
|
16352
16621
|
if (normalizedTerm.length < 6) {
|
|
16353
16622
|
return {
|
|
@@ -16945,6 +17214,8 @@ var SCAN_TEMPLATES = [
|
|
|
16945
17214
|
new Map(
|
|
16946
17215
|
SCAN_TEMPLATES.map((template) => [template.id, template])
|
|
16947
17216
|
);
|
|
17217
|
+
var DARK_WEB_ENTITY_SEARCH_KINDS = ["domain", "email", "crypto"];
|
|
17218
|
+
z.enum(DARK_WEB_ENTITY_SEARCH_KINDS);
|
|
16948
17219
|
|
|
16949
17220
|
// src/client.ts
|
|
16950
17221
|
function trimTrailingSlashes(url) {
|