@hasna/domains 0.0.34 → 0.0.36
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/README.md +75 -22
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/domain.d.ts.map +1 -1
- package/dist/cli/commands/owner.d.ts.map +1 -1
- package/dist/cli/commands/reconcile-expiry.d.ts +3 -0
- package/dist/cli/commands/reconcile-expiry.d.ts.map +1 -0
- package/dist/cli/index.js +31475 -44126
- package/dist/db/dns-tools.d.ts.map +1 -1
- package/dist/db/monitoring.d.ts +7 -1
- package/dist/db/monitoring.d.ts.map +1 -1
- package/dist/db/store.d.ts +42 -1
- package/dist/db/store.d.ts.map +1 -1
- package/dist/index.js +11717 -24922
- package/dist/lib/brandsight.d.ts.map +1 -1
- package/dist/lib/compact-output.d.ts +12 -1
- package/dist/lib/compact-output.d.ts.map +1 -1
- package/dist/lib/expiry-reconcile.d.ts +164 -0
- package/dist/lib/expiry-reconcile.d.ts.map +1 -0
- package/dist/lib/registrar.js +8 -2
- package/dist/mcp/index.js +33481 -46697
- package/dist/server/index.js +1 -1
- package/dist/test/fixtures/resolve-store-probe.d.ts +2 -0
- package/dist/test/fixtures/resolve-store-probe.d.ts.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/package.json +11 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brandsight.d.ts","sourceRoot":"","sources":["../../src/lib/brandsight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,gBAAgB,CAclB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,oBAAoB,CAUtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACtE;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC;IAC9D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAGlC,UAAU,CAAC,EAAE,MAAM;IACnB,YAAY,CAAC,EAAE,MAAM;gBAF5B,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,YAAY,CAAC,EAAE,MAAM,YAAA;CAK/B;AAMD,KAAK,OAAO,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAIvC,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAElD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAQlC;AAED,wBAAgB,SAAS,IAAI,gBAAgB,CAE5C;AAkRD,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYjF;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAYrH;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYjF;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYnF;AAMD,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"brandsight.d.ts","sourceRoot":"","sources":["../../src/lib/brandsight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,gBAAgB,CAclB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,oBAAoB,CAUtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACtE;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC;IAC9D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAGlC,UAAU,CAAC,EAAE,MAAM;IACnB,YAAY,CAAC,EAAE,MAAM;gBAF5B,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,YAAY,CAAC,EAAE,MAAM,YAAA;CAK/B;AAMD,KAAK,OAAO,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAIvC,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAElD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAQlC;AAED,wBAAgB,SAAS,IAAI,gBAAgB,CAE5C;AAkRD,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYjF;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAYrH;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYjF;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYnF;AAMD,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsCxF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQ/G;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAGlH;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2BvI;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAWhI;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAOpH;AAED,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAS/H;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,gBAAgB,EAAE,2BAA2B,EAC7D,OAAO,GAAE,OAAO,gBAAgB,EAAE,2BAAgC,EAClE,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwD/F;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAS7J;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAwB7G;AASD,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAS/H;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE;IAAE,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAAC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,kBAAkB,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAAC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,kBAAkB,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAAE,EACzV,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAmCjF;AAMD,OAAO,KAAK,EACV,YAAY,EAWb,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,YAAY,CA+FhF"}
|
|
@@ -9,19 +9,30 @@ export interface Page<T> {
|
|
|
9
9
|
offset: number;
|
|
10
10
|
hasMore: boolean;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Parse a --limit value.
|
|
14
|
+
*
|
|
15
|
+
* `maxLimit` caps the result. It defaults to MAX_LIST_LIMIT, which is a *display*
|
|
16
|
+
* bound for human output. Machine-readable output MUST pass `Infinity` instead:
|
|
17
|
+
* silently clamping a requested limit and then echoing the clamped value back as
|
|
18
|
+
* `limit` produces a response that is self-consistent with a request the caller
|
|
19
|
+
* never made, which is indistinguishable from a complete read.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseLimit(value: string | number | undefined, fallback?: number, maxLimit?: number): number;
|
|
13
22
|
export declare function parseOffset(value: string | number | undefined): number;
|
|
14
23
|
export declare function pageItems<T>(items: T[], options?: {
|
|
15
24
|
limit?: string | number;
|
|
16
25
|
offset?: string | number;
|
|
17
26
|
all?: boolean;
|
|
18
27
|
fallbackLimit?: number;
|
|
28
|
+
maxLimit?: number;
|
|
19
29
|
}): Page<T>;
|
|
20
30
|
export declare function pageItemsOrExit<T>(items: T[], options?: {
|
|
21
31
|
limit?: string | number;
|
|
22
32
|
offset?: string | number;
|
|
23
33
|
all?: boolean;
|
|
24
34
|
fallbackLimit?: number;
|
|
35
|
+
maxLimit?: number;
|
|
25
36
|
}): Page<T>;
|
|
26
37
|
export declare function truncateText(value: unknown, max?: number): string;
|
|
27
38
|
export declare function formatDate(value: string | null | undefined): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compact-output.d.ts","sourceRoot":"","sources":["../../src/lib/compact-output.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,UAAU,
|
|
1
|
+
{"version":3,"file":"compact-output.d.ts","sourceRoot":"","sources":["../../src/lib/compact-output.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAClC,QAAQ,SAAqB,EAC7B,QAAQ,GAAE,MAAuB,GAChC,MAAM,CAOR;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAOtE;AAED,wBAAgB,SAAS,CAAC,CAAC,EACzB,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL,IAAI,CAAC,CAAC,CAAC,CAcT;AAED,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL,IAAI,CAAC,CAAC,CAAC,CAOT;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,MAAM,CAI7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGnE;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC,EAC7E,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;CAAO,GACrD,MAAM,CAYR"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* expiry-reconcile — registry-vs-registrar expiry disagreement check.
|
|
3
|
+
*
|
|
4
|
+
* READ-ONLY. Issues only WHOIS port-43 queries and HTTP GET. Contains no
|
|
5
|
+
* mutation verb of any kind and never calls a renewal path.
|
|
6
|
+
*
|
|
7
|
+
* WHY THIS COMPARES REGISTRAR AGAINST REGISTRY, AND NOT AGAINST OUR OWN DB
|
|
8
|
+
* -----------------------------------------------------------------------
|
|
9
|
+
* `syncToLocalDb` in ./brandsight.ts copies the registrar's `expires` and
|
|
10
|
+
* `auto_renew` straight onto our row. Our `expires_at` is therefore a MIRROR of
|
|
11
|
+
* the registrar, so a DB-vs-registrar check is one system read twice: it agrees
|
|
12
|
+
* by construction and proves nothing. Only the registry can say when the name is
|
|
13
|
+
* actually deleted.
|
|
14
|
+
*
|
|
15
|
+
* That distinction is load-bearing rather than academic. A registrar record
|
|
16
|
+
* reading 2027 against a registry record reading 2026 is invisible to every
|
|
17
|
+
* dashboard we own, because every dashboard we own is downstream of the
|
|
18
|
+
* registrar. An alarm on our own `expires_at` is silent for this entire class.
|
|
19
|
+
*
|
|
20
|
+
* THREE OUTCOMES, and UNVERIFIABLE is never scored as MATCH:
|
|
21
|
+
* MATCH both sides published a date and they agree within TOL_DAYS
|
|
22
|
+
* MISMATCH both sides published a date and they disagree
|
|
23
|
+
* UNVERIFIABLE at least one side published nothing -> its own count
|
|
24
|
+
* NOT_AT_REGISTRY registry affirmatively does not know this name
|
|
25
|
+
*
|
|
26
|
+
* UNVERIFIABLE is split, because merging the split is how a false all-clear ships:
|
|
27
|
+
* EXPECTED registry policy publishes no expiry (.ro/.de), or the registrar
|
|
28
|
+
* row is CANCELLED with no expiry. A known, stable constant.
|
|
29
|
+
* UNEXPECTED transport failure, throttling, unparseable date, a missing expiry
|
|
30
|
+
* on a TLD that normally publishes one, or a registrar we cannot
|
|
31
|
+
* enumerate. THIS IS AN ALARM: coverage silently shrank, and a
|
|
32
|
+
* shrinking denominator is how "0 mismatches" gets published by a
|
|
33
|
+
* blind instrument.
|
|
34
|
+
*/
|
|
35
|
+
export declare const TOL_DAYS = 1;
|
|
36
|
+
export declare const STALE_SOON_DAYS = 45;
|
|
37
|
+
/**
|
|
38
|
+
* TLDs whose registry publishes NO expiry field as a matter of policy.
|
|
39
|
+
* Membership is a measured fact. A TLD in this set producing no expiry is
|
|
40
|
+
* EXPECTED; one NOT in it is a coverage regression.
|
|
41
|
+
*/
|
|
42
|
+
export declare const NO_EXPIRY_TLDS: Set<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Registrars we cannot enumerate an expiry from. A domain here is UNCHECKABLE
|
|
45
|
+
* and must never be scored as compliant.
|
|
46
|
+
*
|
|
47
|
+
* Cloudflare is declared `type: "dns"` in ./registrar.ts with no
|
|
48
|
+
* `createRegistrar`, and ./cloudflare.ts iterates zones while hardcoding
|
|
49
|
+
* `auto_renew: false`. So Cloudflare-registrar domains carry no usable expiry
|
|
50
|
+
* and are invisible to registrar enumeration. Reporting them as MATCH — or
|
|
51
|
+
* omitting them — is the failure this constant exists to prevent.
|
|
52
|
+
*/
|
|
53
|
+
export declare const UNENUMERABLE_REGISTRARS: Set<string>;
|
|
54
|
+
export type Subclass = "OK" | "TRANSPORT" | "THROTTLED" | "NOT_FOUND" | "NO_EXPIRY" | "BAD_DATE" | "NOT_MINE";
|
|
55
|
+
export type Verdict = "MATCH" | "MISMATCH" | "NOT_AT_REGISTRY" | "UNVERIFIABLE_EXPECTED" | "UNVERIFIABLE_UNEXPECTED";
|
|
56
|
+
/** Return an ISO yyyy-mm-dd date string, or null. null is a real answer and must never become today(). */
|
|
57
|
+
export declare function parseDate(s: string | null | undefined): string | null;
|
|
58
|
+
/** Whole days between two yyyy-mm-dd strings (a - b). */
|
|
59
|
+
export declare function daysBetween(a: string, b: string): number;
|
|
60
|
+
export interface RegistryReading {
|
|
61
|
+
date: string | null;
|
|
62
|
+
subclass: Subclass;
|
|
63
|
+
detail: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* CLASSIFIER — pure function of (domain, method, raw body, transport error).
|
|
67
|
+
* Pure so it can be replayed against retained bodies with no network at all.
|
|
68
|
+
*/
|
|
69
|
+
export declare function classifyRegistry(domain: string, method: "rdap" | "whois", raw: string | null, netErr: string | null): RegistryReading;
|
|
70
|
+
export interface VerdictInput {
|
|
71
|
+
domain: string;
|
|
72
|
+
tld: string;
|
|
73
|
+
registrarDate: string | null;
|
|
74
|
+
registrarName?: string | null;
|
|
75
|
+
status?: string | null;
|
|
76
|
+
reading: RegistryReading;
|
|
77
|
+
}
|
|
78
|
+
export interface VerdictResult {
|
|
79
|
+
verdict: Verdict;
|
|
80
|
+
why: string;
|
|
81
|
+
}
|
|
82
|
+
/** Fold the two sides into ONE outcome. UNVERIFIABLE never becomes MATCH. */
|
|
83
|
+
export declare function verdictFor(input: VerdictInput): VerdictResult;
|
|
84
|
+
export declare const FIXTURES: {
|
|
85
|
+
/** NIC.MD shape: registry says 2026, registrar record says 2027. */
|
|
86
|
+
readonly mismatchWhois: string;
|
|
87
|
+
/** RDAP shape where both sides agree. */
|
|
88
|
+
readonly matchRdap: string;
|
|
89
|
+
/** A complete DENIC answer that is only 39 bytes and publishes no expiry. */
|
|
90
|
+
readonly denicShort: "Domain: fixture-gamma.de\nStatus: connect\n";
|
|
91
|
+
readonly throttle: "<html><head><title>Access denied</title></head><body>error code: 1015</body></html>";
|
|
92
|
+
readonly truncated: "";
|
|
93
|
+
/**
|
|
94
|
+
* Real registry shape: a GOOD answer whose footer quotes a rate-limiting
|
|
95
|
+
* policy. Regression fixture for a defect the original check shipped, caught
|
|
96
|
+
* only by running against the population — 23 of 677 real bodies look like
|
|
97
|
+
* this, and a marker-first classifier scores every one of them as throttled.
|
|
98
|
+
*/
|
|
99
|
+
readonly boilerplateRateLimit: string;
|
|
100
|
+
};
|
|
101
|
+
export interface PrearmCase {
|
|
102
|
+
name: string;
|
|
103
|
+
passed: boolean;
|
|
104
|
+
got: string;
|
|
105
|
+
}
|
|
106
|
+
/** Every case asserts a VALUE, not merely that the call returned. */
|
|
107
|
+
export declare function prearm(): {
|
|
108
|
+
ok: boolean;
|
|
109
|
+
cases: PrearmCase[];
|
|
110
|
+
};
|
|
111
|
+
export interface RegistrarRow {
|
|
112
|
+
domain: string;
|
|
113
|
+
expiresAt?: string | null;
|
|
114
|
+
status?: string | null;
|
|
115
|
+
registrar?: string | null;
|
|
116
|
+
}
|
|
117
|
+
export interface ReconcileDeps {
|
|
118
|
+
/** Resolve a TLD to a registry endpoint, or null when no route is known. */
|
|
119
|
+
routeFor(tld: string): {
|
|
120
|
+
method: "rdap" | "whois";
|
|
121
|
+
endpoint: string;
|
|
122
|
+
} | null;
|
|
123
|
+
/** Fetch the raw registry body. Must not throw; report transport failure via netErr. */
|
|
124
|
+
fetchRegistry(domain: string, method: "rdap" | "whois", endpoint: string): Promise<{
|
|
125
|
+
raw: string | null;
|
|
126
|
+
netErr: string | null;
|
|
127
|
+
}>;
|
|
128
|
+
today?(): string;
|
|
129
|
+
}
|
|
130
|
+
export interface ReconcileRecord {
|
|
131
|
+
domain: string;
|
|
132
|
+
tld: string;
|
|
133
|
+
method: "rdap" | "whois" | "none";
|
|
134
|
+
verdict: Verdict;
|
|
135
|
+
subclass?: Subclass;
|
|
136
|
+
why: string;
|
|
137
|
+
registrar: string | null;
|
|
138
|
+
registry: string | null;
|
|
139
|
+
status?: string | null;
|
|
140
|
+
daysToRegistryExpiry?: number;
|
|
141
|
+
}
|
|
142
|
+
export interface ReconcileReport {
|
|
143
|
+
records: ReconcileRecord[];
|
|
144
|
+
tally: Record<Verdict, number>;
|
|
145
|
+
comparable: number;
|
|
146
|
+
expiringSoon: ReconcileRecord[];
|
|
147
|
+
exitCode: number;
|
|
148
|
+
}
|
|
149
|
+
/** Deduplicate registrar rows — marker paging is inclusive and yields repeats. */
|
|
150
|
+
export declare function dedupeRegistrarRows(rows: RegistrarRow[]): {
|
|
151
|
+
rows: RegistrarRow[];
|
|
152
|
+
dupesRemoved: number;
|
|
153
|
+
};
|
|
154
|
+
export declare function reconcileExpiry(rows: RegistrarRow[], deps: ReconcileDeps): Promise<ReconcileReport>;
|
|
155
|
+
/**
|
|
156
|
+
* Coverage regression against a prior run: a domain that WAS comparable and is
|
|
157
|
+
* now unverifiable. A shrinking denominator is how "0 mismatches" gets
|
|
158
|
+
* published by an instrument that has gone blind.
|
|
159
|
+
*/
|
|
160
|
+
export declare function coverageRegressions(current: ReconcileRecord[], baseline: Array<{
|
|
161
|
+
domain: string;
|
|
162
|
+
verdict: Verdict;
|
|
163
|
+
}>): string[];
|
|
164
|
+
//# sourceMappingURL=expiry-reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiry-reconcile.d.ts","sourceRoot":"","sources":["../../src/lib/expiry-reconcile.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/registrar.js
CHANGED
|
@@ -1599,6 +1599,7 @@ async function domainAvailability(domain, cfg, type, period = 1) {
|
|
|
1599
1599
|
async function listDomains(config) {
|
|
1600
1600
|
const cfg = requireDomainConfig(config);
|
|
1601
1601
|
const domains = [];
|
|
1602
|
+
const seenDomains = new Set;
|
|
1602
1603
|
const seenMarkers = new Set;
|
|
1603
1604
|
let marker;
|
|
1604
1605
|
while (true) {
|
|
@@ -1608,7 +1609,12 @@ async function listDomains(config) {
|
|
|
1608
1609
|
const batch = await domainApiRequest("GET", customerPath(cfg, `/domains?${params.toString()}`), cfg);
|
|
1609
1610
|
if (!Array.isArray(batch) || batch.length === 0)
|
|
1610
1611
|
break;
|
|
1611
|
-
|
|
1612
|
+
for (const normalized of batch.map(normalizeBrandsightDomain)) {
|
|
1613
|
+
if (!normalized.domain || seenDomains.has(normalized.domain))
|
|
1614
|
+
continue;
|
|
1615
|
+
seenDomains.add(normalized.domain);
|
|
1616
|
+
domains.push(normalized);
|
|
1617
|
+
}
|
|
1612
1618
|
if (batch.length < 500)
|
|
1613
1619
|
break;
|
|
1614
1620
|
const nextMarker = String(batch[batch.length - 1]?.domain ?? "");
|
|
@@ -1737,7 +1743,7 @@ async function getDnsRecords3(domain, config) {
|
|
|
1737
1743
|
records.push(...batch);
|
|
1738
1744
|
if (batch.length < limit)
|
|
1739
1745
|
break;
|
|
1740
|
-
offset
|
|
1746
|
+
offset += limit;
|
|
1741
1747
|
}
|
|
1742
1748
|
return records;
|
|
1743
1749
|
}
|