@blowfishxyz/blocklist

中文文档
0.0.11发布于 2026/02/02ISCTypeScriptESM + CJS近 30 天下载 9.6万

获取并执行 Blowfish 块列表上的搜索

中文使用文档
文档目录15 节
  1. 安装
  2. 使用量
  3. 基本用途
  4. Bloom 过滤器
  5. 处理错误
  6. 指南
  7. 浏览器扩展
  8. 原生反应
  9. API 参考
  10. BlowfishLocalBlocklist
  11. 构造参数
  12. 方法
  13. fetchBlocklist(): Promise<LocalBlocklist | undefined>
  14. scanDomain(url: string): Promise<Action>
  15. allowDomainLocally(url: string): Promise<Action>

Blowfish 本地块列表

这是一个 Javascript/ Typescript 库, 方便访问 Blowfish 本地封装列表 API : 例如从 API 中获取封装列表对象, 扫描一个域与封装列表相对并保存开花过滤器.

它旨在支持React Indigen,Chrome扩展和Node.js环境.

安装

npm install @blowfishxyz/blocklist

还推荐React 原生应用程序安装 react-native-url-polyfill。 。 。 .

使用量

要执行检查, 您需要获取 块列表对象 财务报告和审定财务报表 开花过滤器。 。 。 . 在第一次获取后, 您应该不断更新这些对象 。 您可以在本地数据库中保存对象 (例如使用Chrome扩展中的本地存储).

我们建议每5分钟更新一次.

基本用途

import {
  BlowfishLocalBlocklist,
  ApiConfig,
  BLOWFISH_API_BASE_URL,
} from "@blowfishxyz/blocklist";

const apiConfig: ApiConfig = {
  basePath: BLOWFISH_API_BASE_URL,
  // It's highly encouraged to use a proxy server to not expose your API key on the client (see: https://docs.blowfish.xyz/docs/wallet-integration-guide#optional-proxy-server).
  // When using a proxy server, replace basePath with your endpoint and set apiKey to `undefined`.
  apiKey: "you-api-key",
};
const blocklist = new BlowfishLocalBlocklist(apiConfig);

// 1. Fetch the blocklist and persist it in the storage
blocklist.fetchBlocklist();

// 2. Re-refetch the blocklist every 5 minutes
setInterval(() => blocklist.fetchBlocklist(), 1000 * 60 * 5);

// 3. Once you have a blocklist object and a bloom filter saved, you can execute lookups
const action = blocklist.scanDomain("https://scam-website.io");

if (action === Action.BLOCK) {
  // block the domain
}

你可以跳过 apiKey 并通过自定义 basePath 将查询引导到您的后端app或代理.

Bloom 过滤器

屏蔽对象链接到开花过滤器. 然而,开花过滤器是一个700 KB 文件,所以您的应用程序只应该 纳西里时重新下载.

为了做到这一点,我们正在追踪开花滤波器的散列物,并在必要时重新抽取.

然后,我们保存开花滤波器本身 及其散列物到 storage。 。 。 .

我们不会比每24小时更频繁更新块状散列.

处理错误

依赖于 API a/或网络的函数可以返回 null 当遇到 I/O 错误时.

如果您想要跟踪错误, 您可以通过可选 reportError 回调到 BlowfishLocalBlocklist 建筑师.

它可以叫一个 Error 或以一弦为相.

指南

浏览器扩展

  1. 安装必要的依赖 :
npm install @blowfishxyz/blocklist webextension-polyfill
  1. 创建块列表模块 :
// src/blocklist.ts
import {
  BlowfishLocalBlocklist,
  BlowfishBlocklistStorageKey,
  BlowfishBlocklistStorage,
  BLOWFISH_API_BASE_URL,
} from "@blowfishxyz/blocklist";

const storage: BlowfishBlocklistStorage = {
  async getItem<T>(key: BlowfishBlocklistStorageKey) {
    const storage = chrome.storage.local.get([key]);
    return storage[key] as T | undefined;
  },
  async setItem(key: BlowfishBlocklistStorageKey, data: unknown) {
    return chrome.storage.local.set({
      [key]: data,
    });
  },
};

export const blocklist = new BlowfishLocalBlocklist(
  { basePath: BLOWFISH_API_BASE_URL, apiKey: undefined },
  undefined,
  storage
);
export { Action } from "@blowfishxyz/blocklist";
  1. 列表块列表更新 :
// src/background.ts
import Browser from "webextension-polyfill";
import { blocklist } from "./blocklist";

Browser.alarms.onAlarm.addListener((alarm) => {
  if (alarm.name === "refetch-blocklist") {
    blocklist.fetchBlocklist();
  }
});

Browser.alarms.create("refetch-blocklist", {
  periodInMinutes: 5,
  delayInMinutes: 0,
});
  1. 域扫描 :
// src/content-script.ts
import Browser from "webextension-polyfill";
import { blocklist, Action } from "./blocklist";

blocklist.scanDomain(window.location.href).then((action) => {
  if (action === Action.BLOCK) {
    Browser.runtime.sendMessage({
      type: "block-domain",
      host: window.location.hostname,
      href: encodeURI(window.location.href),
    });
  }
});
  1. 被屏蔽的域屏 :
// src/block-screen.tsx
import { blocklist } from "./blocklist";

function proceedToBlockedDomainButtonClickHandler() {
  blocklist.allowDomainLocally(window.location.href);
}

原生反应

  1. 安装必要的依赖 :
npm install @blowfishxyz/blocklist react-native-async-storage react-native-background-timer react-native-url-polyfill
  1. 创建块列表模块 :
// src/blocklist.ts
import {
  BlowfishLocalBlocklist,
  BlowfishBlocklistStorageKey,
  BlowfishBlocklistStorage,
  BLOWFISH_API_BASE_URL,
} from "@blowfishxyz/blocklist";
import AsyncStorage from "@react-native-async-storage/async-storage";

const storage: BlowfishBlocklistStorage = {
  async getItem<T>(key: BlowfishBlocklistStorageKey): Promise<T | undefined> {
    const data = await AsyncStorage.getItem(key);
    return data ? (JSON.parse(data) as T) : undefined;
  },
  async setItem(
    key: BlowfishBlocklistStorageKey,
    data: unknown
  ): Promise<void> {
    await AsyncStorage.setItem(key, JSON.stringify(data));
  },
};

export const blocklist = new BlowfishLocalBlocklist(
  { basePath: BLOWFISH_API_BASE_URL, apiKey: undefined },
  undefined,
  storage
);
export { Action } from "@blowfishxyz/blocklist";
  1. 列表块列表更新 :
// src/background.ts
import { blocklist } from "./blocklist";
import BackgroundTimer from "react-native-background-timer";

let intervalId;

const refetchBlocklist = () => {
  blocklist.fetchBlocklist();
};
export const startBlocklistRefetch = () => {
  intervalId = BackgroundTimer.setInterval(refetchBlocklist, 5 * 60 * 60);
};

export const stopBlocklistRefetch = () => {
  BackgroundTimer.clearInterval(intervalId);
};
  1. 域扫描 :
// src/domainScanner.ts
import { blocklist, Action } from "./blocklist";

const scanCurrentDomain = async (url: string) => {
  const action = await blocklist.scanDomain(url);
  if (action === Action.BLOCK) {
    // Handle domain blocking logic
    console.warn("Blocked domain:", url);
  }
};

export default scanCurrentDomain;
  1. 被屏蔽的域屏 :
// src/BlockScreen.tsx
import React from "react";
import { TouchableOpacity, Text } from "react-native";
import { blocklist } from "./blocklist";

function proceedToBlockedDomainHandler(url: string) {
  blocklist.allowDomainLocally(url);
}

const BlockScreen: React.FC<{ url: string }> = ({ url }) => {
  return (
    <TouchableOpacity onPress={() => proceedToBlockedDomainHandler(url)}>
      <Text>Proceed to Blocked Domain</Text>
    </TouchableOpacity>
  );
};

export default BlockScreen;

API 参考

BlowfishLocalBlocklist

构造参数

  • apiConfig: ApiConfig
    • basePath: string: 域块列表的URL. 您可以用它将 API 请求传递给一个位于用户和 Blowfish API 之间的代理服务器.
    • apiKey: string | undefined: Blowfish API的API密钥. 可能会 undefined 当使用代理时.
  • blocklistConfig: BlocklistConfig
    • priorityBlockLists: PriorityBlockListsEnum[] | undefined: 如果在其中一个列表中显示, 总是块域, 即使它被允许在常规允许列表中列出( ex: PHANTOM, (中文(简体) ), BLOWFISH, (中文(简体) ), BLOWFISH_AUTOMATED, (中文(简体) ), SOLFARE, (中文(简体) ), PHISHFORT, (中文(简体) ), SCAMSNIFFER, (中文(简体) ), METAMASK(中文(简体) )
    • priorityAllowLists: PriorityAllowListsEnum[] | undefined: 覆盖域名, 如果域名出现在其中的列表中, 即使它被列入常规的块列表中( ex: BLOWFISH, (中文(简体) ), METAMASK, (中文(简体) ), DEFILLAMA(中文(简体) )
    • blockLists: BlockListsEnum[] | undefined: 覆盖域名, 如果域名出现在其中的列表中, 即使它被列入常规的块列表中( ex: PHANTOM, (中文(简体) ), BLOWFISH, (中文(简体) ), BLOWFISH_AUTOMATED, (中文(简体) ), SOLFARE, (中文(简体) ), PHISHFORT, (中文(简体) ), SCAMSNIFFER, (中文(简体) ), METAMASK(中文(简体) )
    • allowLists: AllowListsEnum[] | undefined: 覆盖域名, 如果域名出现在其中的列表中, 即使它被列入常规的块列表中( ex: BLOWFISH, (中文(简体) ), METAMASK, (中文(简体) ), DEFILLAMA(中文(简体) )
    • bloomFilterTtl?: number: 开花过滤器和相应的过滤器需要多长时间 hash 应保持静止。 默认24小时 最少24小时,最多14天. 在此期间,将增加新域 recentlyAdded 并删除 recentlyRemoved 字段.
  • storage: BlowfishBlocklistStorage 如果没有指定存储,我们使用内存存储。 大力鼓励您为您的环境提供合适的储存( Evironemt) 见指南) (中文(简体) ).
    • getItem<T>(key: BlowfishBlocklistStorageKey): Promise<T | undefined>:从环境存储中逐项取出.
    • setItem(key: BlowfishBlocklistStorageKey, data: unknown): 按环境存储键设置项目.
  • reportError: (error: unknown) => void: 当结果出现时,库用于跟踪错误的回调函数 null. (可选)

方法

fetchBlocklist(): Promise<LocalBlocklist | undefined>

获取块列表元数据并将其保存到存储中。 如果取取的块状散列与存储中的散列不同,则会将开花过滤器重新排入并保存到存储中.

如果块列表获取失败, 方法返回 undefined 并报告错误到 reportError。 。 。 .

scanDomain(url: string): Promise<Action>

扫描所存储域块列表的域并返回要采取的行动( 要么 BLOCK 或者说 NONE) (中文(简体) ).

如果没有存储的块列表, 它会使用 fetchBlocklist 方法并返回所产生的动作.

如果获取失败, 方法返回动作 NONE 并报告错误到 reportError。 。 。 .

allowDomainLocally(url: string): Promise<Action>

如果用户想通过明确的动作来继续到被封锁的域,域被添加到用户允许列表中(本地存储中).

这个 scanDomain 方法将返回 NONE 用于此域的动作,即使它在块列表中.

版本与发布记录

@blowfishxyz/blocklist 共发布 11 个版本,首次发布于 2023/02/09;过去 12 个月发布了 1 个版本。

版本发布日期距今
0.0.11latest2026/02/029 个月前
0.0.102025/07/011.4 年前
0.0.92025/06/301.4 年前
0.0.82024/04/232 年前
0.0.72023/10/183 年前
0.0.62023/05/153 年前

关于 @blowfishxyz/blocklist 的常见问题

@blowfishxyz/blocklist 是什么?

获取并执行 Blowfish 块列表上的搜索

如何安装 @blowfishxyz/blocklist?

在项目目录运行 npm install @blowfishxyz/blocklist,或使用 pnpm add / yarn add / bun add。

@blowfishxyz/blocklist 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@blowfishxyz/blocklist 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@blowfishxyz/blocklist 可以商用吗?

@blowfishxyz/blocklist 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@blowfishxyz/blocklist 的下载量有多少?

根据 npm 官方下载统计,@blowfishxyz/blocklist 在 2026/10/09 – 2026/11/07 这 30 天内被下载 96,196 次,日均约 3,207 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@blowfishxyz/blocklist 还在维护吗?

最新版本 0.0.11 发布于 2026/02/02(9 个月前);至今共发布 11 个版本,其中过去 12 个月发布了 1 个;首次发布于 2023/02/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。