@ledgerhq/domain-service 0.2.1-next.0 → 0.2.1-next.1

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.
Files changed (54) hide show
  1. package/lib/hooks/index.d.ts +10 -0
  2. package/lib/hooks/index.d.ts.map +1 -0
  3. package/lib/hooks/index.js +182 -0
  4. package/lib/hooks/index.js.map +1 -0
  5. package/lib/hooks/logic.d.ts +4 -0
  6. package/lib/hooks/logic.d.ts.map +1 -0
  7. package/lib/hooks/logic.js +21 -0
  8. package/lib/hooks/logic.js.map +1 -0
  9. package/lib/hooks/types.d.ts +27 -0
  10. package/lib/hooks/types.d.ts.map +1 -0
  11. package/lib/hooks/types.js +3 -0
  12. package/lib/hooks/types.js.map +1 -0
  13. package/lib/index.d.ts +1 -0
  14. package/lib/index.d.ts.map +1 -1
  15. package/lib/index.js +1 -0
  16. package/lib/index.js.map +1 -1
  17. package/lib/resolvers/index.d.ts +5 -14
  18. package/lib/resolvers/index.d.ts.map +1 -1
  19. package/lib/resolvers/index.js +30 -7
  20. package/lib/resolvers/index.js.map +1 -1
  21. package/lib/types.d.ts +2 -1
  22. package/lib/types.d.ts.map +1 -1
  23. package/lib-es/hooks/index.d.ts +10 -0
  24. package/lib-es/hooks/index.d.ts.map +1 -0
  25. package/lib-es/hooks/index.js +154 -0
  26. package/lib-es/hooks/index.js.map +1 -0
  27. package/lib-es/hooks/logic.d.ts +4 -0
  28. package/lib-es/hooks/logic.d.ts.map +1 -0
  29. package/lib-es/hooks/logic.js +16 -0
  30. package/lib-es/hooks/logic.js.map +1 -0
  31. package/lib-es/hooks/types.d.ts +27 -0
  32. package/lib-es/hooks/types.d.ts.map +1 -0
  33. package/lib-es/hooks/types.js +2 -0
  34. package/lib-es/hooks/types.js.map +1 -0
  35. package/lib-es/index.d.ts +1 -0
  36. package/lib-es/index.d.ts.map +1 -1
  37. package/lib-es/index.js +1 -0
  38. package/lib-es/index.js.map +1 -1
  39. package/lib-es/resolvers/index.d.ts +5 -14
  40. package/lib-es/resolvers/index.d.ts.map +1 -1
  41. package/lib-es/resolvers/index.js +30 -7
  42. package/lib-es/resolvers/index.js.map +1 -1
  43. package/lib-es/types.d.ts +2 -1
  44. package/lib-es/types.d.ts.map +1 -1
  45. package/package.json +12 -3
  46. package/src/__tests__/functionnal/domain-service.react.test.tsx +147 -0
  47. package/src/__tests__/tsconfig.json +10 -0
  48. package/src/__tests__/unit/resolvers.unit.test.ts +19 -7
  49. package/src/hooks/index.tsx +131 -0
  50. package/src/hooks/logic.ts +22 -0
  51. package/src/hooks/types.ts +35 -0
  52. package/src/index.ts +1 -0
  53. package/src/resolvers/index.ts +37 -20
  54. package/src/types.ts +6 -2
@@ -0,0 +1,154 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __read = (this && this.__read) || function (o, n) {
49
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
50
+ if (!m) return o;
51
+ var i = m.call(o), r, ar = [], e;
52
+ try {
53
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
54
+ }
55
+ catch (error) { e = { error: error }; }
56
+ finally {
57
+ try {
58
+ if (r && !r.done && (m = i["return"])) m.call(i);
59
+ }
60
+ finally { if (e) throw e.error; }
61
+ }
62
+ return ar;
63
+ };
64
+ import React, { createContext, useContext, useEffect, useMemo, useState, } from "react";
65
+ import { resolveAddress, resolveDomain } from "../resolvers";
66
+ import { isOutdated } from "./logic";
67
+ var DomainServiceContext = createContext({
68
+ cache: {},
69
+ loadDomainServiceAPI: function () { return Promise.resolve(); },
70
+ clearCache: function () { }
71
+ });
72
+ export var useDomain = function (addressOrDomain, registry) {
73
+ var addressOrDomainLC = addressOrDomain.toLowerCase();
74
+ var _a = useContext(DomainServiceContext), cache = _a.cache, loadDomainServiceAPI = _a.loadDomainServiceAPI;
75
+ var cachedData = addressOrDomain && cache[addressOrDomainLC];
76
+ useEffect(function () {
77
+ if (!cachedData || isOutdated(cachedData)) {
78
+ loadDomainServiceAPI(addressOrDomainLC, registry);
79
+ }
80
+ }, [loadDomainServiceAPI, addressOrDomainLC, cachedData]);
81
+ if (cachedData) {
82
+ return cachedData;
83
+ }
84
+ else if (!addressOrDomain) {
85
+ return {
86
+ status: "error",
87
+ error: new Error("No address or domain provided"),
88
+ updatedAt: Date.now()
89
+ };
90
+ }
91
+ return { status: "queued" };
92
+ };
93
+ export function DomainServiceProvider(_a) {
94
+ var _this = this;
95
+ var children = _a.children;
96
+ var _b = __read(useState({
97
+ cache: {}
98
+ }), 2), state = _b[0], setState = _b[1];
99
+ var api = useMemo(function () { return ({
100
+ loadDomainServiceAPI: function (addressOrDomain, registry) { return __awaiter(_this, void 0, void 0, function () {
101
+ var resolutions_1, error_1;
102
+ return __generator(this, function (_a) {
103
+ switch (_a.label) {
104
+ case 0:
105
+ setState(function (oldState) {
106
+ var _a;
107
+ return (__assign(__assign({}, oldState), { cache: __assign(__assign({}, oldState.cache), (_a = {}, _a[addressOrDomain] = {
108
+ status: "loading"
109
+ }, _a)) }));
110
+ });
111
+ _a.label = 1;
112
+ case 1:
113
+ _a.trys.push([1, 3, , 4]);
114
+ return [4 /*yield*/, Promise.all([
115
+ resolveDomain(addressOrDomain, registry),
116
+ resolveAddress(addressOrDomain, registry),
117
+ ]).then(function (res) { return res.flat(); })];
118
+ case 2:
119
+ resolutions_1 = _a.sent();
120
+ if (resolutions_1.length) {
121
+ setState(function (oldState) {
122
+ var _a;
123
+ return (__assign(__assign({}, oldState), { cache: __assign(__assign({}, oldState.cache), (_a = {}, _a[addressOrDomain] = {
124
+ status: "loaded",
125
+ resolutions: resolutions_1,
126
+ updatedAt: Date.now()
127
+ }, _a)) }));
128
+ });
129
+ return [2 /*return*/];
130
+ }
131
+ throw new Error("no resolution for " + addressOrDomain);
132
+ case 3:
133
+ error_1 = _a.sent();
134
+ setState(function (oldState) {
135
+ var _a;
136
+ return (__assign(__assign({}, oldState), { cache: __assign(__assign({}, oldState.cache), (_a = {}, _a[addressOrDomain] = {
137
+ status: "error",
138
+ error: error_1,
139
+ updatedAt: Date.now()
140
+ }, _a)) }));
141
+ });
142
+ return [3 /*break*/, 4];
143
+ case 4: return [2 /*return*/];
144
+ }
145
+ });
146
+ }); },
147
+ clearCache: function () {
148
+ setState(function (oldState) { return (__assign(__assign({}, oldState), { cache: {} })); });
149
+ }
150
+ }); }, []);
151
+ var value = __assign(__assign({}, state), api);
152
+ return (React.createElement(DomainServiceContext.Provider, { value: value }, children));
153
+ }
154
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DomainServiceResponseLoaded, DomainServiceStatus } from "./types";
2
+ export declare function isOutdated(resource: DomainServiceStatus): boolean;
3
+ export declare const isLoaded: (domain: DomainServiceStatus) => domain is DomainServiceResponseLoaded;
4
+ //# sourceMappingURL=logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../src/hooks/logic.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAG3E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAYjE;AAED,eAAO,MAAM,QAAQ,WACX,mBAAmB,0CACyC,CAAC"}
@@ -0,0 +1,16 @@
1
+ // Handle lifecycle of cached data.
2
+ // Expiration date depend on the resource's status.
3
+ export function isOutdated(resource) {
4
+ var now = Date.now();
5
+ switch (resource.status) {
6
+ case "loaded": {
7
+ return now - resource.updatedAt > 60 * 1000; // 1 minute
8
+ }
9
+ case "error": {
10
+ return now - resource.updatedAt > 30 * 1000; // 30 seconds
11
+ }
12
+ }
13
+ return false;
14
+ }
15
+ export var isLoaded = function (domain) { return domain.status === "loaded"; };
16
+ //# sourceMappingURL=logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logic.js","sourceRoot":"","sources":["../../src/hooks/logic.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAInC,mDAAmD;AACnD,MAAM,UAAU,UAAU,CAAC,QAA6B;IACtD,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,QAAQ,QAAQ,CAAC,MAAM,EAAE;QACvB,KAAK,QAAQ,CAAC,CAAC;YACb,OAAO,GAAG,GAAG,QAAQ,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;SACzD;QACD,KAAK,OAAO,CAAC,CAAC;YACZ,OAAO,GAAG,GAAG,QAAQ,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;SAC3D;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,IAAM,QAAQ,GAAG,UACtB,MAA2B,IACe,OAAA,MAAM,CAAC,MAAM,KAAK,QAAQ,EAA1B,CAA0B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { DomainServiceResolution, SupportedRegistries } from "../types";
2
+ export type DomainServiceResponseLoaded = {
3
+ status: "loaded";
4
+ resolutions: DomainServiceResolution[];
5
+ updatedAt: number;
6
+ };
7
+ export type DomainServiceResponseQueued = {
8
+ status: "queued";
9
+ };
10
+ export type DomainServiceResponseLoading = {
11
+ status: "loading";
12
+ };
13
+ export type DomainServiceResponseError = {
14
+ status: "error";
15
+ error: any;
16
+ updatedAt: number;
17
+ };
18
+ export type DomainServiceStatus = DomainServiceResponseQueued | DomainServiceResponseLoading | DomainServiceResponseLoaded | DomainServiceResponseError;
19
+ export type DomainServiceContextState = {
20
+ cache: Record<string, DomainServiceStatus>;
21
+ };
22
+ export type DomainServiceContextAPI = {
23
+ loadDomainServiceAPI: (domainOrAddress: string, registry?: SupportedRegistries) => Promise<void>;
24
+ clearCache: () => void;
25
+ };
26
+ export type DomainServiceContextType = DomainServiceContextState & DomainServiceContextAPI;
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAExE,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,QAAQ,CAAC;IACjB,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,2BAA2B,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAC/D,MAAM,MAAM,4BAA4B,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AACjE,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,2BAA2B,GAC3B,4BAA4B,GAC5B,2BAA2B,GAC3B,0BAA0B,CAAC;AAE/B,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,oBAAoB,EAAE,CACpB,eAAe,EAAE,MAAM,EACvB,QAAQ,CAAC,EAAE,mBAAmB,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,GAC9D,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":""}
package/lib-es/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./registries";
2
2
  export * from "./resolvers";
3
3
  export * from "./signers";
4
+ export * from "./hooks";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
package/lib-es/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./registries";
2
2
  export * from "./resolvers";
3
3
  export * from "./signers";
4
+ export * from "./hooks";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
@@ -1,25 +1,16 @@
1
- import { SupportedRegistries } from "../types";
2
- type DomainResolutionResponse = {
3
- registry: SupportedRegistries;
4
- address: string;
5
- };
1
+ import { DomainServiceResolution, SupportedRegistries } from "../types";
6
2
  /**
7
3
  * Get an array of addresses for a domain
8
4
  *
9
5
  * @param {string} domain
10
- * @returns {Promise<DomainResolutionResponse[]>}
6
+ * @returns {Promise<DomainServiceResolution[]>}
11
7
  */
12
- export declare const resolveDomain: (domain: string, registryName?: SupportedRegistries) => Promise<DomainResolutionResponse[]>;
13
- type AddressResolutionResponse = {
14
- registry: SupportedRegistries;
15
- domain: string;
16
- };
8
+ export declare const resolveDomain: (domain: string, registryName?: SupportedRegistries) => Promise<DomainServiceResolution[]>;
17
9
  /**
18
10
  * Get an array of domains for an address
19
11
  *
20
12
  * @param {string} address
21
- * @returns {Promise<AddressResolutionResponse[]>}
13
+ * @returns {Promise<DomainServiceResolution[]>}
22
14
  */
23
- export declare const resolveAddress: (address: string, registryName?: SupportedRegistries) => Promise<AddressResolutionResponse[]>;
24
- export {};
15
+ export declare const resolveAddress: (address: string, registryName?: SupportedRegistries) => Promise<DomainServiceResolution[]>;
25
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAO/C,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,WAChB,MAAM,iBACC,mBAAmB,KACjC,QAAQ,wBAAwB,EAAE,CAuCpC,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,YAChB,MAAM,iBACA,mBAAmB,KACjC,QAAQ,yBAAyB,EAAE,CAuCrC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAOxE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,WAChB,MAAM,iBACC,mBAAmB,KACjC,QAAQ,uBAAuB,EAAE,CAoDnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,YAChB,MAAM,iBACA,mBAAmB,KACjC,QAAQ,uBAAuB,EAAE,CAoDnC,CAAC"}
@@ -34,6 +34,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
34
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
35
  }
36
36
  };
37
+ import eip55 from "eip55";
37
38
  import { log } from "@ledgerhq/logs";
38
39
  import network from "@ledgerhq/live-common/network";
39
40
  import { getRegistries, getRegistriesForAddress, getRegistriesForDomain, } from "../registries";
@@ -41,7 +42,7 @@ import { getRegistries, getRegistriesForAddress, getRegistriesForDomain, } from
41
42
  * Get an array of addresses for a domain
42
43
  *
43
44
  * @param {string} domain
44
- * @returns {Promise<DomainResolutionResponse[]>}
45
+ * @returns {Promise<DomainServiceResolution[]>}
45
46
  */
46
47
  export var resolveDomain = function (domain, registryName) { return __awaiter(void 0, void 0, void 0, function () {
47
48
  var registries, responses;
@@ -56,7 +57,7 @@ export var resolveDomain = function (domain, registryName) { return __awaiter(vo
56
57
  return [4 /*yield*/, getRegistries()];
57
58
  case 1:
58
59
  registries_1 = _a.sent();
59
- registry = registries_1.find(function (r) { return r.name === registryName; });
60
+ registry = registries_1.find(function (r) { return r.name === registryName && r.patterns.forward.test(domain); });
60
61
  return [2 /*return*/, registry ? [registry] : []];
61
62
  case 2: return [2 /*return*/, getRegistriesForDomain(domain)];
62
63
  }
@@ -82,9 +83,20 @@ export var resolveDomain = function (domain, registryName) { return __awaiter(vo
82
83
  }
83
84
  return result;
84
85
  }
86
+ if (!promise.value.data)
87
+ return result;
88
+ var checksummedAddress = (function () {
89
+ try {
90
+ return eip55.encode(promise.value.data);
91
+ }
92
+ catch (e) {
93
+ return promise.value.data;
94
+ }
95
+ })();
85
96
  result.push({
86
97
  registry: registries[index].name,
87
- address: promise.value.data
98
+ address: checksummedAddress,
99
+ domain: domain
88
100
  });
89
101
  return result;
90
102
  }, []);
@@ -96,10 +108,10 @@ export var resolveDomain = function (domain, registryName) { return __awaiter(vo
96
108
  * Get an array of domains for an address
97
109
  *
98
110
  * @param {string} address
99
- * @returns {Promise<AddressResolutionResponse[]>}
111
+ * @returns {Promise<DomainServiceResolution[]>}
100
112
  */
101
113
  export var resolveAddress = function (address, registryName) { return __awaiter(void 0, void 0, void 0, function () {
102
- var registries, responses;
114
+ var registries, checksummedAddress, responses;
103
115
  return __generator(this, function (_a) {
104
116
  switch (_a.label) {
105
117
  case 0: return [4 /*yield*/, (function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -111,7 +123,7 @@ export var resolveAddress = function (address, registryName) { return __awaiter(
111
123
  return [4 /*yield*/, getRegistries()];
112
124
  case 1:
113
125
  registries_2 = _a.sent();
114
- registry = registries_2.find(function (r) { return r.name === registryName; });
126
+ registry = registries_2.find(function (r) { return r.name === registryName && r.patterns.reverse.test(address); });
115
127
  return [2 /*return*/, registry ? [registry] : []];
116
128
  case 2: return [2 /*return*/, getRegistriesForAddress(address)];
117
129
  }
@@ -119,6 +131,14 @@ export var resolveAddress = function (address, registryName) { return __awaiter(
119
131
  }); })()];
120
132
  case 1:
121
133
  registries = _a.sent();
134
+ checksummedAddress = (function () {
135
+ try {
136
+ return eip55.encode(address);
137
+ }
138
+ catch (e) {
139
+ return address;
140
+ }
141
+ })();
122
142
  responses = Promise.allSettled(registries.map(function (registry) {
123
143
  return network({
124
144
  method: "GET",
@@ -137,9 +157,12 @@ export var resolveAddress = function (address, registryName) { return __awaiter(
137
157
  }
138
158
  return result;
139
159
  }
160
+ if (!promise.value.data)
161
+ return result;
140
162
  result.push({
141
163
  registry: registries[index].name,
142
- domain: promise.value.data
164
+ domain: promise.value.data,
165
+ address: checksummedAddress
143
166
  });
144
167
  return result;
145
168
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"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"}
package/lib-es/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { CoinType } from "@ledgerhq/types-cryptoassets";
2
- export type SupportedRegistries = "ens";
2
+ import type { SupportedRegistries, DomainServiceResolution } from "@ledgerhq/types-live/lib/domain";
3
3
  export type Registry = {
4
4
  name: SupportedRegistries;
5
5
  resolvers: {
@@ -16,4 +16,5 @@ export type Registry = {
16
16
  };
17
17
  coinTypes: CoinType[];
18
18
  };
19
+ export { SupportedRegistries, DomainServiceResolution };
19
20
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ledgerhq/domain-service",
3
3
  "description": "Ledger service responsible for domain handling",
4
- "version": "0.2.1-next.0",
4
+ "version": "0.2.1-next.1",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -54,13 +54,21 @@
54
54
  "src"
55
55
  ],
56
56
  "dependencies": {
57
+ "eip55": "^2.1.0",
58
+ "react": "^17.0.2",
59
+ "react-dom": "^17.0.2",
57
60
  "@ledgerhq/cryptoassets": "^9.2.0-next.0",
58
61
  "@ledgerhq/errors": "^6.12.4-next.0",
59
- "@ledgerhq/live-common": "^29.2.0-next.0",
60
- "@ledgerhq/logs": "^6.10.1"
62
+ "@ledgerhq/live-common": "^29.2.0-next.1",
63
+ "@ledgerhq/logs": "^6.10.1",
64
+ "@ledgerhq/types-live": "^6.31.0"
61
65
  },
62
66
  "devDependencies": {
67
+ "@testing-library/jest-dom": "^5.16.5",
68
+ "@testing-library/react": "12",
69
+ "@testing-library/react-hooks": "^4.0.1",
63
70
  "@types/jest": "^28.1.3",
71
+ "@types/testing-library__jest-dom": "^5.14.5",
64
72
  "@typescript-eslint/eslint-plugin": "^5.46.1",
65
73
  "@typescript-eslint/parser": "^5.46.1",
66
74
  "cross-env": "^7.0.3",
@@ -73,6 +81,7 @@
73
81
  "jest": "^28.1.3",
74
82
  "jest-environment-jsdom": "^28.1.3",
75
83
  "prettier": "^2.8.1",
84
+ "react-test-renderer": "^17.0.2",
76
85
  "ts-jest": "^28.0.8",
77
86
  "typescript": "^4.9.5",
78
87
  "@ledgerhq/types-cryptoassets": "^7.0.0"
@@ -0,0 +1,147 @@
1
+ import React from "react";
2
+ import "@testing-library/jest-dom";
3
+ import { renderHook } from "@testing-library/react-hooks";
4
+ import { render, screen, waitFor } from "@testing-library/react";
5
+ import { DomainServiceProvider, useDomain } from "../../hooks";
6
+ import { resolveAddress, resolveDomain } from "../../resolvers";
7
+ import { DomainServiceResolution } from "../../types";
8
+
9
+ jest.mock("../../resolvers");
10
+
11
+ const mockedResolvedDomain = jest.mocked(resolveDomain, true);
12
+ const mockedResolvedAddress = jest.mocked(resolveAddress, true);
13
+
14
+ const resolutionKeys: (keyof DomainServiceResolution)[] = [
15
+ "registry",
16
+ "address",
17
+ "domain",
18
+ ];
19
+
20
+ const CustomTest = ({ str }: { str: string }) => {
21
+ const result = useDomain(str);
22
+ const { status } = result;
23
+
24
+ return (
25
+ <div>
26
+ <div data-testid="status">{status}</div>
27
+ {status === "loaded" && (
28
+ <div data-testid="resolutions">
29
+ {result.resolutions.map((resolution, index) => (
30
+ <React.Fragment key={index}>
31
+ <div data-testid={`${index}-registry`}>{resolution.registry}</div>
32
+ <div data-testid={`${index}-address`}>{resolution.address}</div>
33
+ <div data-testid={`${index}-domain`}>{resolution.domain}</div>
34
+ </React.Fragment>
35
+ ))}
36
+ </div>
37
+ )}
38
+ </div>
39
+ );
40
+ };
41
+
42
+ describe("useNamingService", () => {
43
+ test("should be an error", async () => {
44
+ mockedResolvedDomain.mockImplementation(async () => {
45
+ return [];
46
+ });
47
+
48
+ mockedResolvedAddress.mockImplementation(async () => {
49
+ return [];
50
+ });
51
+
52
+ render(
53
+ <DomainServiceProvider>
54
+ <CustomTest str="notavalideth" />
55
+ </DomainServiceProvider>
56
+ );
57
+
58
+ await waitFor(() => {
59
+ expect(screen.getByTestId("status").textContent).not.toBe("loading");
60
+ });
61
+
62
+ // this test should be first otherwise mock call will be more than 0
63
+ expect(screen.getByTestId("status").textContent).toBe("error");
64
+ });
65
+
66
+ test("should be queue", () => {
67
+ const { result } = renderHook(useDomain, {
68
+ initialProps: "vitalik.eth",
69
+ });
70
+
71
+ expect(result.current.status).toBe("queued");
72
+ });
73
+
74
+ test("success forward", async () => {
75
+ const resolutions: DomainServiceResolution[] = [
76
+ {
77
+ address: "forced mocked address",
78
+ registry: "ens",
79
+ domain: "vitalik.eth",
80
+ },
81
+ ];
82
+ mockedResolvedDomain.mockImplementation(async () => resolutions);
83
+
84
+ render(
85
+ <DomainServiceProvider>
86
+ <CustomTest str="vitalik.eth" />
87
+ </DomainServiceProvider>
88
+ );
89
+
90
+ await waitFor(
91
+ () => {
92
+ expect(screen.getByTestId("status").textContent).toBe("loaded");
93
+ },
94
+ { timeout: 5000 }
95
+ );
96
+
97
+ expect(screen.getByTestId("status").textContent).toBe("loaded");
98
+ expect(screen.getByTestId("resolutions")).toBeInTheDocument();
99
+ resolutions.forEach((resolution, index) => {
100
+ resolutionKeys.forEach((field) => {
101
+ expect(screen.getByTestId("resolutions")).toContainElement(
102
+ screen.getByTestId(`${index}-${field}`)
103
+ );
104
+ expect(screen.getByTestId(`${index}-${field}`).textContent).toBe(
105
+ resolution[field]
106
+ );
107
+ });
108
+ });
109
+ });
110
+
111
+ test("success reverse", async () => {
112
+ const reverseResolutions: DomainServiceResolution[] = [
113
+ {
114
+ domain: "vitalik.eth",
115
+ registry: "ens",
116
+ address: "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
117
+ },
118
+ ];
119
+ mockedResolvedDomain.mockImplementation(async () => {
120
+ return [];
121
+ });
122
+ mockedResolvedAddress.mockImplementation(async () => reverseResolutions);
123
+
124
+ render(
125
+ <DomainServiceProvider>
126
+ <CustomTest str="0xd8da6bf26964af9d7eed9e03e53415d37aa96045" />
127
+ </DomainServiceProvider>
128
+ );
129
+
130
+ await waitFor(() => {
131
+ expect(screen.getByTestId("status").textContent).toBe("loaded");
132
+ });
133
+
134
+ expect(screen.getByTestId("status").textContent).toBe("loaded");
135
+ expect(screen.getByTestId("resolutions")).toBeInTheDocument();
136
+ reverseResolutions.forEach((resolution, index) => {
137
+ resolutionKeys.forEach((field) => {
138
+ expect(screen.getByTestId("resolutions")).toContainElement(
139
+ screen.getByTestId(`${index}-${field}`)
140
+ );
141
+ expect(screen.getByTestId(`${index}-${field}`).textContent).toBe(
142
+ resolution[field]
143
+ );
144
+ });
145
+ });
146
+ });
147
+ });
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../tsconfig.json",
3
+ "compilerOptions": {
4
+ "noEmit": true,
5
+ "rootDir": "../",
6
+ "jsx": "react",
7
+ "esModuleInterop": true,
8
+ "lib": ["es2020", "dom"]
9
+ }
10
+ }