8000 GitHub - brave/adblock-resources: Custom resources and scriptlets used for Brave's adblocker · GitHub
[go: up one dir, main page]

Skip to content

About

Custom resources and scriptlets used for Brave's adblocker

Resources

Stars

123 stars

Watchers

8 watching

Forks

Repository files navigation

adblock-resources

Contains resources and scriptlets designed for use with Brave's adblock-rust library.

Custom resources should be added to the resources directory, and a corresponding entry should be added to the metadata.json file.

Using

This package can be imported as a library, exposing the function readResources which will produce the correctly formatted list of resources for use with adblock-rust.

Alternatively, pnpm build will write all resources to dist/resources.json for future use.

To generate metadata.json automatically from files in resources/, run pnpm generateMetadata.

Use pnpm test after modifying the resources or metadata file to ensure the format can be accepted by adblock-rust.

Metadata format

metadata.json is a list of elements of the following format:

{
    "name": "name-of-my-resource",
    "aliases": ["an-alias-for-my-resource"],
    "kind": {"mime":"application/javascript"},
    "resourcePath": "pathRelativeToResources.js"
}
  • name is the name of the resource as it would be used in a filter rule.

  • aliases is a list containing optional additional (usually shorter) identifiers that could be used instead of the name. Usually this is empty or contains a single entry that is an abbreviation of the name.

  • kind is either a MIME type as shown above, or simply the string "template" to specify that the resource is a scriptlet with optional template parameters (i.e., {{1}}, {{2}}, ...).

  • resourcePath specifies the path to the content of the resource. It should be relative to the resources director 7FEE y in the root of this repository.

In general, this format corresponds to the Resource struct from adblock-rust, but the base64-encoded content field is replaced by a path to a file for better maintainability. This library will translate the resourcePath field back to a base64-encoded content field when ready for use.

Filter list description format

The filter_lists/*.json files are lists of elements, each describing a filter list. The format for each element is:

{
    "title": "New Filter Rules",
    "desc": "Removes new elements"
    "langs": [],
    "component_id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "base64_public_key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs...IDAQAB",
    "list_text_component": {
        "component_id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
        "base64_public_key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs...IDAQAB",
    },
    "sources": [
        {
            "url": "https://raw.githubusercontent.com/brave/adblock-lists/master/brave-lists/new-list.txt",
            "title": "Brave New List",
            "format": "Standard",
            "support_url": "https://github.com/brave/adblock-lists",
        }
    ]
}
  • uuid is a UUID generated with, for example, the CLI tool uuidgen.

  • title is a human-readable title for the filter list component. Each source also has a title, which is a human-readable title for each individual list making up the full component.

  • desc is a short human-readable description of what the filter list is designed to block.

  • langs is a list of locale codes for the given component, allowing it to be preselected in-browser by users in the corresponding regions. Note that despite the name, it should not list language codes.

  • component_id and base64_public_key are unique constants generated per-list such that the lists can be served in CRX components created by brave-core-crx-packager. Note that the ones inside list_text_component should not have the same values.

  • sources is a list of individual filter lists that are concatenated together in order to create the full list for a component.

  • url is the URL where a filter list source can be downloaded from. It should be a list of rules in the format specified in format in a plaintext file.

  • format is either ABP/uBO-style format ("Standard", most common) or IP address and hostname ("Hosts").

  • support_url is somewhere a user can ask for help with the filter list.

Optional fields

The following 4 fields are all optional and default to false or 0 if omitted.

  • hidden (boolean) should the component be displayed in brave://settings/shields/filters as an additional list option?
  • default_enabled (boolean) should the component be enabled by default?
  • first_party_protections (boolean) should first-party heuristics be applied to rules from the list?
  • permission_mask (number) what scriptlet permissions should be granted to rules from the list? The bits of the bitmask are currently assigned as follows:
    • Bit 0: "trusted" resources from the uBlock Origin project
    • Bit 1: resources only intended for use by Brave-authored lists
    • Bits 2-7: reserved
  • platforms (array of string) specify the platforms that the list supports. Can be any combination of LINUX, WINDOWS, MAC, ANDROID or IOS.

Adding a new list

The generate_component.sh script can be used to help create a new filter list component. It will generate:

  • A UUID (for the top-level uuid field)
  • A public key (corresponding to the list_text_component.base64_public_key field)
  • A component ID (corresponding to the list_text_component.component_id field)
  • The component's private key (in a new PEM file)

The script should be run with no arguments. The resulting PEM file will be named ad-block-updater-<component_id>.pem. This new PEM file has to be uploaded to 1Password. See instructions here.

You'll probably also want to see https://github.com/brave/brave-core/blob/master/docs/ship_a_file_to_all_clients.md to have brave-core clients actually consume the new component.

About

Custom resources and scriptlets used for Brave's adblocker

Resources

Stars

123 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

0