@namehash/ens-referrals 1.0.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/LICENSE +21 -0
- package/README.md +31 -0
- package/dist/index.cjs +77 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +80 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 NameHash
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# ENS Referrals
|
|
2
|
+
|
|
3
|
+
This package provides utilities for working with ENS Referrals, including useful types and utility functions.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @namehash/ens-referrals viem
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### Basic Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import {
|
|
15
|
+
buildEncodedReferrer,
|
|
16
|
+
decodeEncodedReferrer,
|
|
17
|
+
buildEnsReferralUrl
|
|
18
|
+
} from "@namehash/ens-referrals";
|
|
19
|
+
import type { Address } from 'viem';
|
|
20
|
+
|
|
21
|
+
const referrerAddress: Address = "0xd8da6bf26964af9d7eed9e03e53415d37aa96045";
|
|
22
|
+
|
|
23
|
+
// Build an encoded referrer value (according to the subjective referrer encoding used for ENS Holiday Awards)
|
|
24
|
+
const encodedReferrer = buildEncodedReferrer(referrerAddress); // 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045
|
|
25
|
+
|
|
26
|
+
// Decode an encoded referrer value (according to the subjective referrer encoding used for ENS Holiday Awards)
|
|
27
|
+
const decodedReferrer = decodeEncodedReferrer(encodedReferrer); // 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
|
|
28
|
+
|
|
29
|
+
// Build a referrer URL to the official ENS manager app
|
|
30
|
+
const referrerUrl = buildEnsReferralUrl(referrerAddress).toString(); // https://app.ens.domains/?referrer=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
|
|
31
|
+
```
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
ENCODED_REFERRER_BYTE_LENGTH: () => ENCODED_REFERRER_BYTE_LENGTH,
|
|
24
|
+
ENCODED_REFERRER_BYTE_OFFSET: () => ENCODED_REFERRER_BYTE_OFFSET,
|
|
25
|
+
ENS_HOLIDAY_AWARDS_END_DATE: () => ENS_HOLIDAY_AWARDS_END_DATE,
|
|
26
|
+
ENS_HOLIDAY_AWARDS_START_DATE: () => ENS_HOLIDAY_AWARDS_START_DATE,
|
|
27
|
+
buildEncodedReferrer: () => buildEncodedReferrer,
|
|
28
|
+
buildEnsReferralUrl: () => buildEnsReferralUrl,
|
|
29
|
+
decodeEncodedReferrer: () => decodeEncodedReferrer,
|
|
30
|
+
encodedReferrerPadding: () => encodedReferrerPadding,
|
|
31
|
+
zeroEncodedReferrer: () => zeroEncodedReferrer
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(index_exports);
|
|
34
|
+
|
|
35
|
+
// src/constants.ts
|
|
36
|
+
var ENS_HOLIDAY_AWARDS_START_DATE = 1764547200;
|
|
37
|
+
var ENS_HOLIDAY_AWARDS_END_DATE = 1767225599;
|
|
38
|
+
|
|
39
|
+
// src/referrer.ts
|
|
40
|
+
var import_viem = require("viem");
|
|
41
|
+
var ENCODED_REFERRER_BYTE_OFFSET = 12;
|
|
42
|
+
var ENCODED_REFERRER_BYTE_LENGTH = 32;
|
|
43
|
+
var encodedReferrerPadding = (0, import_viem.pad)("0x", {
|
|
44
|
+
size: ENCODED_REFERRER_BYTE_OFFSET,
|
|
45
|
+
dir: "left"
|
|
46
|
+
});
|
|
47
|
+
var zeroEncodedReferrer = (0, import_viem.pad)("0x", {
|
|
48
|
+
size: ENCODED_REFERRER_BYTE_LENGTH,
|
|
49
|
+
dir: "left"
|
|
50
|
+
});
|
|
51
|
+
function buildEncodedReferrer(address) {
|
|
52
|
+
const lowercaseAddress = address.toLowerCase();
|
|
53
|
+
return (0, import_viem.pad)(lowercaseAddress, { size: ENCODED_REFERRER_BYTE_LENGTH, dir: "left" });
|
|
54
|
+
}
|
|
55
|
+
function decodeEncodedReferrer(encodedReferrer) {
|
|
56
|
+
if ((0, import_viem.size)(encodedReferrer) !== ENCODED_REFERRER_BYTE_LENGTH) {
|
|
57
|
+
throw new Error(
|
|
58
|
+
`Encoded referrer value must be represented by ${ENCODED_REFERRER_BYTE_LENGTH} bytes.`
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
const padding = (0, import_viem.slice)(encodedReferrer, 0, ENCODED_REFERRER_BYTE_OFFSET);
|
|
62
|
+
if (padding !== encodedReferrerPadding) {
|
|
63
|
+
return import_viem.zeroAddress;
|
|
64
|
+
}
|
|
65
|
+
const decodedReferrer = (0, import_viem.slice)(encodedReferrer, ENCODED_REFERRER_BYTE_OFFSET);
|
|
66
|
+
try {
|
|
67
|
+
return (0, import_viem.getAddress)(decodedReferrer);
|
|
68
|
+
} catch {
|
|
69
|
+
throw new Error(`Decoded referrer value must be a valid EVM address.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function buildEnsReferralUrl(address) {
|
|
73
|
+
const ensAppUrl = new URL("https://app.ens.domains");
|
|
74
|
+
ensAppUrl.searchParams.set("referrer", (0, import_viem.getAddress)(address));
|
|
75
|
+
return ensAppUrl;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/referrer.ts"],"sourcesContent":["export * from \"./constants\";\nexport * from \"./referrer\";\n","/**\n * Unix timestamp value\n *\n * Represents the number of seconds that have elapsed\n * since January 1, 1970 (midnight UTC/GMT).\n *\n * Guaranteed to be an integer. May be zero or negative to represent a time at or\n * before Jan 1, 1970.\n */\nexport type UnixTimestamp = number;\n\n/**\n * Start date for the ENS Holiday Awards referral program.\n * 2025-12-01T00:00:00Z (December 1, 2025 at 00:00:00 UTC)\n */\nexport const ENS_HOLIDAY_AWARDS_START_DATE: UnixTimestamp = 1764547200;\n\n/**\n * End date for the ENS Holiday Awards referral program.\n * 2025-12-31T23:59:59Z (December 31, 2025 at 23:59:59 UTC)\n */\nexport const ENS_HOLIDAY_AWARDS_END_DATE: UnixTimestamp = 1767225599;\n","import { type Address, getAddress, type Hex, pad, size, slice, zeroAddress } from \"viem\";\n\n/**\n * Encoded Referrer\n *\n * Represents a \"raw\" ENS referrer value.\n *\n * Guaranteed to be a hex string representation of a 32-byte value.\n * For ENS Holiday Awards a correctly encoded referrer is\n * a left-padded lowercase EVM address.\n */\nexport type EncodedReferrer = Hex;\n\n/**\n * Encoded Referrer byte offset for ENS Holiday Awards.\n *\n * The count of left-padded bytes in an {@link EncodedReferrer} value for ENS Holiday Awards.\n */\nexport const ENCODED_REFERRER_BYTE_OFFSET = 12;\n\n/**\n * Encoded Referrer byte length\n *\n * The count of bytes the {@link EncodedReferrer} value consists of.\n */\nexport const ENCODED_REFERRER_BYTE_LENGTH = 32;\n\n/**\n * Encoded Referrer Padding for ENS Holiday Awards\n *\n * The initial bytes of correctly encoded referrer value for ENS Holiday Awards.\n */\nexport const encodedReferrerPadding = pad(\"0x\", {\n size: ENCODED_REFERRER_BYTE_OFFSET,\n dir: \"left\",\n});\n\n/**\n * Zero Encoded Referrer\n *\n * Guaranteed to be a hex string representation of a 32-byte zero value.\n */\nexport const zeroEncodedReferrer = pad(\"0x\", {\n size: ENCODED_REFERRER_BYTE_LENGTH,\n dir: \"left\",\n});\n\n/**\n * Build an {@link EncodedReferrer} value for the given {@link Address}\n * according to the subjective referrer encoding used for ENS Holiday Awards.\n */\nexport function buildEncodedReferrer(address: Address): EncodedReferrer {\n const lowercaseAddress = address.toLowerCase() as Address;\n\n return pad(lowercaseAddress, { size: ENCODED_REFERRER_BYTE_LENGTH, dir: \"left\" });\n}\n\n/**\n * Decode an {@link EncodedReferrer} value into a checksummed {@link Address}\n * according to the subjective referrer encoding used for ENS Holiday Awards.\n *\n * @param encodedReferrer - The \"raw\" {@link EncodedReferrer} value to decode.\n * @returns The decoded referrer checksummed address.\n * @throws when encodedReferrer value is not represented by\n * {@link ENCODED_REFERRER_BYTE_LENGTH} bytes.\n * @throws when decodedReferrer is not a valid EVM address.\n */\nexport function decodeEncodedReferrer(encodedReferrer: EncodedReferrer): Address {\n // Invariant: encoded referrer must be of expected size\n if (size(encodedReferrer) !== ENCODED_REFERRER_BYTE_LENGTH) {\n throw new Error(\n `Encoded referrer value must be represented by ${ENCODED_REFERRER_BYTE_LENGTH} bytes.`,\n );\n }\n\n const padding = slice(encodedReferrer, 0, ENCODED_REFERRER_BYTE_OFFSET);\n\n // return zero address if the padding of encoded referrer is not correct\n // for ENS Holiday Awards\n if (padding !== encodedReferrerPadding) {\n return zeroAddress;\n }\n\n const decodedReferrer = slice(encodedReferrer, ENCODED_REFERRER_BYTE_OFFSET);\n\n try {\n // return checksummed address\n return getAddress(decodedReferrer);\n } catch {\n throw new Error(`Decoded referrer value must be a valid EVM address.`);\n }\n}\n\n/**\n * Build a URL to the official ENS manager app\n * where the given {@link Address} is set as the referrer.\n */\nexport function buildEnsReferralUrl(address: Address): URL {\n const ensAppUrl = new URL(\"https://app.ens.domains\");\n\n ensAppUrl.searchParams.set(\"referrer\", getAddress(address));\n\n return ensAppUrl;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACeO,IAAM,gCAA+C;AAMrD,IAAM,8BAA6C;;;ACrB1D,kBAAkF;AAkB3E,IAAM,+BAA+B;AAOrC,IAAM,+BAA+B;AAOrC,IAAM,6BAAyB,iBAAI,MAAM;AAAA,EAC9C,MAAM;AAAA,EACN,KAAK;AACP,CAAC;AAOM,IAAM,0BAAsB,iBAAI,MAAM;AAAA,EAC3C,MAAM;AAAA,EACN,KAAK;AACP,CAAC;AAMM,SAAS,qBAAqB,SAAmC;AACtE,QAAM,mBAAmB,QAAQ,YAAY;AAE7C,aAAO,iBAAI,kBAAkB,EAAE,MAAM,8BAA8B,KAAK,OAAO,CAAC;AAClF;AAYO,SAAS,sBAAsB,iBAA2C;AAE/E,UAAI,kBAAK,eAAe,MAAM,8BAA8B;AAC1D,UAAM,IAAI;AAAA,MACR,iDAAiD,4BAA4B;AAAA,IAC/E;AAAA,EACF;AAEA,QAAM,cAAU,mBAAM,iBAAiB,GAAG,4BAA4B;AAItE,MAAI,YAAY,wBAAwB;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,sBAAkB,mBAAM,iBAAiB,4BAA4B;AAE3E,MAAI;AAEF,eAAO,wBAAW,eAAe;AAAA,EACnC,QAAQ;AACN,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACF;AAMO,SAAS,oBAAoB,SAAuB;AACzD,QAAM,YAAY,IAAI,IAAI,yBAAyB;AAEnD,YAAU,aAAa,IAAI,gBAAY,wBAAW,OAAO,CAAC;AAE1D,SAAO;AACT;","names":[]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Hex, Address } from 'viem';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Unix timestamp value
|
|
5
|
+
*
|
|
6
|
+
* Represents the number of seconds that have elapsed
|
|
7
|
+
* since January 1, 1970 (midnight UTC/GMT).
|
|
8
|
+
*
|
|
9
|
+
* Guaranteed to be an integer. May be zero or negative to represent a time at or
|
|
10
|
+
* before Jan 1, 1970.
|
|
11
|
+
*/
|
|
12
|
+
type UnixTimestamp = number;
|
|
13
|
+
/**
|
|
14
|
+
* Start date for the ENS Holiday Awards referral program.
|
|
15
|
+
* 2025-12-01T00:00:00Z (December 1, 2025 at 00:00:00 UTC)
|
|
16
|
+
*/
|
|
17
|
+
declare const ENS_HOLIDAY_AWARDS_START_DATE: UnixTimestamp;
|
|
18
|
+
/**
|
|
19
|
+
* End date for the ENS Holiday Awards referral program.
|
|
20
|
+
* 2025-12-31T23:59:59Z (December 31, 2025 at 23:59:59 UTC)
|
|
21
|
+
*/
|
|
22
|
+
declare const ENS_HOLIDAY_AWARDS_END_DATE: UnixTimestamp;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Encoded Referrer
|
|
26
|
+
*
|
|
27
|
+
* Represents a "raw" ENS referrer value.
|
|
28
|
+
*
|
|
29
|
+
* Guaranteed to be a hex string representation of a 32-byte value.
|
|
30
|
+
* For ENS Holiday Awards a correctly encoded referrer is
|
|
31
|
+
* a left-padded lowercase EVM address.
|
|
32
|
+
*/
|
|
33
|
+
type EncodedReferrer = Hex;
|
|
34
|
+
/**
|
|
35
|
+
* Encoded Referrer byte offset for ENS Holiday Awards.
|
|
36
|
+
*
|
|
37
|
+
* The count of left-padded bytes in an {@link EncodedReferrer} value for ENS Holiday Awards.
|
|
38
|
+
*/
|
|
39
|
+
declare const ENCODED_REFERRER_BYTE_OFFSET = 12;
|
|
40
|
+
/**
|
|
41
|
+
* Encoded Referrer byte length
|
|
42
|
+
*
|
|
43
|
+
* The count of bytes the {@link EncodedReferrer} value consists of.
|
|
44
|
+
*/
|
|
45
|
+
declare const ENCODED_REFERRER_BYTE_LENGTH = 32;
|
|
46
|
+
/**
|
|
47
|
+
* Encoded Referrer Padding for ENS Holiday Awards
|
|
48
|
+
*
|
|
49
|
+
* The initial bytes of correctly encoded referrer value for ENS Holiday Awards.
|
|
50
|
+
*/
|
|
51
|
+
declare const encodedReferrerPadding: `0x${string}`;
|
|
52
|
+
/**
|
|
53
|
+
* Zero Encoded Referrer
|
|
54
|
+
*
|
|
55
|
+
* Guaranteed to be a hex string representation of a 32-byte zero value.
|
|
56
|
+
*/
|
|
57
|
+
declare const zeroEncodedReferrer: `0x${string}`;
|
|
58
|
+
/**
|
|
59
|
+
* Build an {@link EncodedReferrer} value for the given {@link Address}
|
|
60
|
+
* according to the subjective referrer encoding used for ENS Holiday Awards.
|
|
61
|
+
*/
|
|
62
|
+
declare function buildEncodedReferrer(address: Address): EncodedReferrer;
|
|
63
|
+
/**
|
|
64
|
+
* Decode an {@link EncodedReferrer} value into a checksummed {@link Address}
|
|
65
|
+
* according to the subjective referrer encoding used for ENS Holiday Awards.
|
|
66
|
+
*
|
|
67
|
+
* @param encodedReferrer - The "raw" {@link EncodedReferrer} value to decode.
|
|
68
|
+
* @returns The decoded referrer checksummed address.
|
|
69
|
+
* @throws when encodedReferrer value is not represented by
|
|
70
|
+
* {@link ENCODED_REFERRER_BYTE_LENGTH} bytes.
|
|
71
|
+
* @throws when decodedReferrer is not a valid EVM address.
|
|
72
|
+
*/
|
|
73
|
+
declare function decodeEncodedReferrer(encodedReferrer: EncodedReferrer): Address;
|
|
74
|
+
/**
|
|
75
|
+
* Build a URL to the official ENS manager app
|
|
76
|
+
* where the given {@link Address} is set as the referrer.
|
|
77
|
+
*/
|
|
78
|
+
declare function buildEnsReferralUrl(address: Address): URL;
|
|
79
|
+
|
|
80
|
+
export { ENCODED_REFERRER_BYTE_LENGTH, ENCODED_REFERRER_BYTE_OFFSET, ENS_HOLIDAY_AWARDS_END_DATE, ENS_HOLIDAY_AWARDS_START_DATE, type EncodedReferrer, type UnixTimestamp, buildEncodedReferrer, buildEnsReferralUrl, decodeEncodedReferrer, encodedReferrerPadding, zeroEncodedReferrer };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Hex, Address } from 'viem';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Unix timestamp value
|
|
5
|
+
*
|
|
6
|
+
* Represents the number of seconds that have elapsed
|
|
7
|
+
* since January 1, 1970 (midnight UTC/GMT).
|
|
8
|
+
*
|
|
9
|
+
* Guaranteed to be an integer. May be zero or negative to represent a time at or
|
|
10
|
+
* before Jan 1, 1970.
|
|
11
|
+
*/
|
|
12
|
+
type UnixTimestamp = number;
|
|
13
|
+
/**
|
|
14
|
+
* Start date for the ENS Holiday Awards referral program.
|
|
15
|
+
* 2025-12-01T00:00:00Z (December 1, 2025 at 00:00:00 UTC)
|
|
16
|
+
*/
|
|
17
|
+
declare const ENS_HOLIDAY_AWARDS_START_DATE: UnixTimestamp;
|
|
18
|
+
/**
|
|
19
|
+
* End date for the ENS Holiday Awards referral program.
|
|
20
|
+
* 2025-12-31T23:59:59Z (December 31, 2025 at 23:59:59 UTC)
|
|
21
|
+
*/
|
|
22
|
+
declare const ENS_HOLIDAY_AWARDS_END_DATE: UnixTimestamp;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Encoded Referrer
|
|
26
|
+
*
|
|
27
|
+
* Represents a "raw" ENS referrer value.
|
|
28
|
+
*
|
|
29
|
+
* Guaranteed to be a hex string representation of a 32-byte value.
|
|
30
|
+
* For ENS Holiday Awards a correctly encoded referrer is
|
|
31
|
+
* a left-padded lowercase EVM address.
|
|
32
|
+
*/
|
|
33
|
+
type EncodedReferrer = Hex;
|
|
34
|
+
/**
|
|
35
|
+
* Encoded Referrer byte offset for ENS Holiday Awards.
|
|
36
|
+
*
|
|
37
|
+
* The count of left-padded bytes in an {@link EncodedReferrer} value for ENS Holiday Awards.
|
|
38
|
+
*/
|
|
39
|
+
declare const ENCODED_REFERRER_BYTE_OFFSET = 12;
|
|
40
|
+
/**
|
|
41
|
+
* Encoded Referrer byte length
|
|
42
|
+
*
|
|
43
|
+
* The count of bytes the {@link EncodedReferrer} value consists of.
|
|
44
|
+
*/
|
|
45
|
+
declare const ENCODED_REFERRER_BYTE_LENGTH = 32;
|
|
46
|
+
/**
|
|
47
|
+
* Encoded Referrer Padding for ENS Holiday Awards
|
|
48
|
+
*
|
|
49
|
+
* The initial bytes of correctly encoded referrer value for ENS Holiday Awards.
|
|
50
|
+
*/
|
|
51
|
+
declare const encodedReferrerPadding: `0x${string}`;
|
|
52
|
+
/**
|
|
53
|
+
* Zero Encoded Referrer
|
|
54
|
+
*
|
|
55
|
+
* Guaranteed to be a hex string representation of a 32-byte zero value.
|
|
56
|
+
*/
|
|
57
|
+
declare const zeroEncodedReferrer: `0x${string}`;
|
|
58
|
+
/**
|
|
59
|
+
* Build an {@link EncodedReferrer} value for the given {@link Address}
|
|
60
|
+
* according to the subjective referrer encoding used for ENS Holiday Awards.
|
|
61
|
+
*/
|
|
62
|
+
declare function buildEncodedReferrer(address: Address): EncodedReferrer;
|
|
63
|
+
/**
|
|
64
|
+
* Decode an {@link EncodedReferrer} value into a checksummed {@link Address}
|
|
65
|
+
* according to the subjective referrer encoding used for ENS Holiday Awards.
|
|
66
|
+
*
|
|
67
|
+
* @param encodedReferrer - The "raw" {@link EncodedReferrer} value to decode.
|
|
68
|
+
* @returns The decoded referrer checksummed address.
|
|
69
|
+
* @throws when encodedReferrer value is not represented by
|
|
70
|
+
* {@link ENCODED_REFERRER_BYTE_LENGTH} bytes.
|
|
71
|
+
* @throws when decodedReferrer is not a valid EVM address.
|
|
72
|
+
*/
|
|
73
|
+
declare function decodeEncodedReferrer(encodedReferrer: EncodedReferrer): Address;
|
|
74
|
+
/**
|
|
75
|
+
* Build a URL to the official ENS manager app
|
|
76
|
+
* where the given {@link Address} is set as the referrer.
|
|
77
|
+
*/
|
|
78
|
+
declare function buildEnsReferralUrl(address: Address): URL;
|
|
79
|
+
|
|
80
|
+
export { ENCODED_REFERRER_BYTE_LENGTH, ENCODED_REFERRER_BYTE_OFFSET, ENS_HOLIDAY_AWARDS_END_DATE, ENS_HOLIDAY_AWARDS_START_DATE, type EncodedReferrer, type UnixTimestamp, buildEncodedReferrer, buildEnsReferralUrl, decodeEncodedReferrer, encodedReferrerPadding, zeroEncodedReferrer };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// src/constants.ts
|
|
2
|
+
var ENS_HOLIDAY_AWARDS_START_DATE = 1764547200;
|
|
3
|
+
var ENS_HOLIDAY_AWARDS_END_DATE = 1767225599;
|
|
4
|
+
|
|
5
|
+
// src/referrer.ts
|
|
6
|
+
import { getAddress, pad, size, slice, zeroAddress } from "viem";
|
|
7
|
+
var ENCODED_REFERRER_BYTE_OFFSET = 12;
|
|
8
|
+
var ENCODED_REFERRER_BYTE_LENGTH = 32;
|
|
9
|
+
var encodedReferrerPadding = pad("0x", {
|
|
10
|
+
size: ENCODED_REFERRER_BYTE_OFFSET,
|
|
11
|
+
dir: "left"
|
|
12
|
+
});
|
|
13
|
+
var zeroEncodedReferrer = pad("0x", {
|
|
14
|
+
size: ENCODED_REFERRER_BYTE_LENGTH,
|
|
15
|
+
dir: "left"
|
|
16
|
+
});
|
|
17
|
+
function buildEncodedReferrer(address) {
|
|
18
|
+
const lowercaseAddress = address.toLowerCase();
|
|
19
|
+
return pad(lowercaseAddress, { size: ENCODED_REFERRER_BYTE_LENGTH, dir: "left" });
|
|
20
|
+
}
|
|
21
|
+
function decodeEncodedReferrer(encodedReferrer) {
|
|
22
|
+
if (size(encodedReferrer) !== ENCODED_REFERRER_BYTE_LENGTH) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
`Encoded referrer value must be represented by ${ENCODED_REFERRER_BYTE_LENGTH} bytes.`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
const padding = slice(encodedReferrer, 0, ENCODED_REFERRER_BYTE_OFFSET);
|
|
28
|
+
if (padding !== encodedReferrerPadding) {
|
|
29
|
+
return zeroAddress;
|
|
30
|
+
}
|
|
31
|
+
const decodedReferrer = slice(encodedReferrer, ENCODED_REFERRER_BYTE_OFFSET);
|
|
32
|
+
try {
|
|
33
|
+
return getAddress(decodedReferrer);
|
|
34
|
+
} catch {
|
|
35
|
+
throw new Error(`Decoded referrer value must be a valid EVM address.`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function buildEnsReferralUrl(address) {
|
|
39
|
+
const ensAppUrl = new URL("https://app.ens.domains");
|
|
40
|
+
ensAppUrl.searchParams.set("referrer", getAddress(address));
|
|
41
|
+
return ensAppUrl;
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
ENCODED_REFERRER_BYTE_LENGTH,
|
|
45
|
+
ENCODED_REFERRER_BYTE_OFFSET,
|
|
46
|
+
ENS_HOLIDAY_AWARDS_END_DATE,
|
|
47
|
+
ENS_HOLIDAY_AWARDS_START_DATE,
|
|
48
|
+
buildEncodedReferrer,
|
|
49
|
+
buildEnsReferralUrl,
|
|
50
|
+
decodeEncodedReferrer,
|
|
51
|
+
encodedReferrerPadding,
|
|
52
|
+
zeroEncodedReferrer
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/referrer.ts"],"sourcesContent":["/**\n * Unix timestamp value\n *\n * Represents the number of seconds that have elapsed\n * since January 1, 1970 (midnight UTC/GMT).\n *\n * Guaranteed to be an integer. May be zero or negative to represent a time at or\n * before Jan 1, 1970.\n */\nexport type UnixTimestamp = number;\n\n/**\n * Start date for the ENS Holiday Awards referral program.\n * 2025-12-01T00:00:00Z (December 1, 2025 at 00:00:00 UTC)\n */\nexport const ENS_HOLIDAY_AWARDS_START_DATE: UnixTimestamp = 1764547200;\n\n/**\n * End date for the ENS Holiday Awards referral program.\n * 2025-12-31T23:59:59Z (December 31, 2025 at 23:59:59 UTC)\n */\nexport const ENS_HOLIDAY_AWARDS_END_DATE: UnixTimestamp = 1767225599;\n","import { type Address, getAddress, type Hex, pad, size, slice, zeroAddress } from \"viem\";\n\n/**\n * Encoded Referrer\n *\n * Represents a \"raw\" ENS referrer value.\n *\n * Guaranteed to be a hex string representation of a 32-byte value.\n * For ENS Holiday Awards a correctly encoded referrer is\n * a left-padded lowercase EVM address.\n */\nexport type EncodedReferrer = Hex;\n\n/**\n * Encoded Referrer byte offset for ENS Holiday Awards.\n *\n * The count of left-padded bytes in an {@link EncodedReferrer} value for ENS Holiday Awards.\n */\nexport const ENCODED_REFERRER_BYTE_OFFSET = 12;\n\n/**\n * Encoded Referrer byte length\n *\n * The count of bytes the {@link EncodedReferrer} value consists of.\n */\nexport const ENCODED_REFERRER_BYTE_LENGTH = 32;\n\n/**\n * Encoded Referrer Padding for ENS Holiday Awards\n *\n * The initial bytes of correctly encoded referrer value for ENS Holiday Awards.\n */\nexport const encodedReferrerPadding = pad(\"0x\", {\n size: ENCODED_REFERRER_BYTE_OFFSET,\n dir: \"left\",\n});\n\n/**\n * Zero Encoded Referrer\n *\n * Guaranteed to be a hex string representation of a 32-byte zero value.\n */\nexport const zeroEncodedReferrer = pad(\"0x\", {\n size: ENCODED_REFERRER_BYTE_LENGTH,\n dir: \"left\",\n});\n\n/**\n * Build an {@link EncodedReferrer} value for the given {@link Address}\n * according to the subjective referrer encoding used for ENS Holiday Awards.\n */\nexport function buildEncodedReferrer(address: Address): EncodedReferrer {\n const lowercaseAddress = address.toLowerCase() as Address;\n\n return pad(lowercaseAddress, { size: ENCODED_REFERRER_BYTE_LENGTH, dir: \"left\" });\n}\n\n/**\n * Decode an {@link EncodedReferrer} value into a checksummed {@link Address}\n * according to the subjective referrer encoding used for ENS Holiday Awards.\n *\n * @param encodedReferrer - The \"raw\" {@link EncodedReferrer} value to decode.\n * @returns The decoded referrer checksummed address.\n * @throws when encodedReferrer value is not represented by\n * {@link ENCODED_REFERRER_BYTE_LENGTH} bytes.\n * @throws when decodedReferrer is not a valid EVM address.\n */\nexport function decodeEncodedReferrer(encodedReferrer: EncodedReferrer): Address {\n // Invariant: encoded referrer must be of expected size\n if (size(encodedReferrer) !== ENCODED_REFERRER_BYTE_LENGTH) {\n throw new Error(\n `Encoded referrer value must be represented by ${ENCODED_REFERRER_BYTE_LENGTH} bytes.`,\n );\n }\n\n const padding = slice(encodedReferrer, 0, ENCODED_REFERRER_BYTE_OFFSET);\n\n // return zero address if the padding of encoded referrer is not correct\n // for ENS Holiday Awards\n if (padding !== encodedReferrerPadding) {\n return zeroAddress;\n }\n\n const decodedReferrer = slice(encodedReferrer, ENCODED_REFERRER_BYTE_OFFSET);\n\n try {\n // return checksummed address\n return getAddress(decodedReferrer);\n } catch {\n throw new Error(`Decoded referrer value must be a valid EVM address.`);\n }\n}\n\n/**\n * Build a URL to the official ENS manager app\n * where the given {@link Address} is set as the referrer.\n */\nexport function buildEnsReferralUrl(address: Address): URL {\n const ensAppUrl = new URL(\"https://app.ens.domains\");\n\n ensAppUrl.searchParams.set(\"referrer\", getAddress(address));\n\n return ensAppUrl;\n}\n"],"mappings":";AAeO,IAAM,gCAA+C;AAMrD,IAAM,8BAA6C;;;ACrB1D,SAAuB,YAAsB,KAAK,MAAM,OAAO,mBAAmB;AAkB3E,IAAM,+BAA+B;AAOrC,IAAM,+BAA+B;AAOrC,IAAM,yBAAyB,IAAI,MAAM;AAAA,EAC9C,MAAM;AAAA,EACN,KAAK;AACP,CAAC;AAOM,IAAM,sBAAsB,IAAI,MAAM;AAAA,EAC3C,MAAM;AAAA,EACN,KAAK;AACP,CAAC;AAMM,SAAS,qBAAqB,SAAmC;AACtE,QAAM,mBAAmB,QAAQ,YAAY;AAE7C,SAAO,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,KAAK,OAAO,CAAC;AAClF;AAYO,SAAS,sBAAsB,iBAA2C;AAE/E,MAAI,KAAK,eAAe,MAAM,8BAA8B;AAC1D,UAAM,IAAI;AAAA,MACR,iDAAiD,4BAA4B;AAAA,IAC/E;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,iBAAiB,GAAG,4BAA4B;AAItE,MAAI,YAAY,wBAAwB;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,MAAM,iBAAiB,4BAA4B;AAE3E,MAAI;AAEF,WAAO,WAAW,eAAe;AAAA,EACnC,QAAQ;AACN,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AACF;AAMO,SAAS,oBAAoB,SAAuB;AACzD,QAAM,YAAY,IAAI,IAAI,yBAAyB;AAEnD,YAAU,aAAa,IAAI,YAAY,WAAW,OAAO,CAAC;AAE1D,SAAO;AACT;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@namehash/ens-referrals",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Utilities for ENS Referrals.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/namehash/ensnode.git",
|
|
10
|
+
"directory": "packages/ens-referrals"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/namehash/ensnode/tree/main/packages/ens-referrals",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"ENS",
|
|
15
|
+
"Referrals"
|
|
16
|
+
],
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"default": "./dist/index.cjs",
|
|
23
|
+
"import": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"viem": "^2.22.13"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^22.14.0",
|
|
35
|
+
"tsup": "^8.3.6",
|
|
36
|
+
"typescript": "^5.7.3",
|
|
37
|
+
"viem": "^2.22.13",
|
|
38
|
+
"vitest": "^4.0.2",
|
|
39
|
+
"@ensnode/shared-configs": "1.0.0"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"prepublish": "tsup",
|
|
43
|
+
"test": "vitest",
|
|
44
|
+
"typecheck": "tsc --noEmit"
|
|
45
|
+
},
|
|
46
|
+
"main": "./dist/index.cjs",
|
|
47
|
+
"module": "./dist/index.js",
|
|
48
|
+
"types": "./dist/index.d.ts"
|
|
49
|
+
}
|