https://github.com/aaronius/get-apex-domain
Returns the apex domain (aka base, bare, naked, root apex, or zone apex domain) of the current web page without the use of a public suffix list. The apex domain is also the top-most domain that allows for setting cookies.
https://github.com/aaronius/get-apex-domain
Last synced: 8 months ago
JSON representation
Returns the apex domain (aka base, bare, naked, root apex, or zone apex domain) of the current web page without the use of a public suffix list. The apex domain is also the top-most domain that allows for setting cookies.
- Host: GitHub
- URL: https://github.com/aaronius/get-apex-domain
- Owner: Aaronius
- License: mit
- Created: 2019-11-17T00:54:44.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-02T05:36:37.000Z (over 3 years ago)
- Last Synced: 2025-05-21T08:19:25.848Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 526 KB
- Stars: 9
- Watchers: 1
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# get-apex-domain
Returns the apex domain (aka base, bare, naked, root apex, or zone apex domain) of the current web page without the use of a public suffix list. The apex domain is also the top-most domain that allows for setting cookies.
Because of the methodology used, this library is very small.
## What's an apex domain?
An apex domain is the longest portion of a domain that does not contain a subdomain. In the case of `store.example.co.uk`, `example.co.uk` would be the apex domain.
When a website owner attempts to register a domain name, they cannot register a domain matching an effective top-level domain (e.g., `com`, `co.uk`) due to restrictions controlled by registrars. However, domains ending in an effective top-level domain are allowed (e.g., `example.com`, `example.co.uk`). **This is the apex domain.** The domain name owner can then create subdomains ending in the domain they registered (e.g., `store.example.com`, `store.example.co.uk`), but subdomains are not apex domains.
## Requirements
This will only work in a browser and cookies must be enabled.
## How detection is accomplished
As it turns out, browsers allow websites to set cookies for apex domains (e.g., `example.co.uk`) but not top-level domains (e.g., `uk`) or effective top-level domains (e.g., `co.uk`).
Considering a hostname of `store.example.co.uk`, we can determine the apex domain by attempting to write a cookie on `uk`, then `co.uk`, then `example.co.uk`, then `store.example.co.uk`, until we succeed in writing a cookie. In this case, the first attempt that will succeed is `example.co.uk`. This is the apex domain.
## Installation
If you use npm for package management, you can install `get-apex-domain` by running the following command from within your project's directory:
```
npm install get-apex-domain
```
## Usage
```javascript
import getApexDomain from "get-apex-domain";
console.log(getApexDomain());
```
If cookies are not enabled, an error will be thrown.
The `localhost` hostname presents a unique case. If the hostname is `localhost`, the returned apex domain will be `undefined`.
## Related Packages
See [get-etld](https://www.npmjs.com/package/get-etld) if you'd like to retrieve the effective top-level domain (eTLD).
## Special Recognition
Full credit goes to [Joe Khoury](https://github.com/jfkhoury) for devising the strategy used to determine the apex domain.