@ledgerhq/domain-service 0.2.0-nightly.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.
Files changed (49) hide show
  1. package/lib/index.d.ts +4 -0
  2. package/lib/index.d.ts.map +1 -0
  3. package/lib/index.js +20 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/registries/index.d.ts +20 -0
  6. package/lib/registries/index.d.ts.map +1 -0
  7. package/lib/registries/index.js +105 -0
  8. package/lib/registries/index.js.map +1 -0
  9. package/lib/resolvers/index.d.ts +25 -0
  10. package/lib/resolvers/index.d.ts.map +1 -0
  11. package/lib/resolvers/index.js +158 -0
  12. package/lib/resolvers/index.js.map +1 -0
  13. package/lib/signers/index.d.ts +20 -0
  14. package/lib/signers/index.d.ts.map +1 -0
  15. package/lib/signers/index.js +128 -0
  16. package/lib/signers/index.js.map +1 -0
  17. package/lib/types.d.ts +19 -0
  18. package/lib/types.d.ts.map +1 -0
  19. package/lib/types.js +3 -0
  20. package/lib/types.js.map +1 -0
  21. package/lib-es/index.d.ts +4 -0
  22. package/lib-es/index.d.ts.map +1 -0
  23. package/lib-es/index.js +4 -0
  24. package/lib-es/index.js.map +1 -0
  25. package/lib-es/registries/index.d.ts +20 -0
  26. package/lib-es/registries/index.d.ts.map +1 -0
  27. package/lib-es/registries/index.js +99 -0
  28. package/lib-es/registries/index.js.map +1 -0
  29. package/lib-es/resolvers/index.d.ts +25 -0
  30. package/lib-es/resolvers/index.d.ts.map +1 -0
  31. package/lib-es/resolvers/index.js +150 -0
  32. package/lib-es/resolvers/index.js.map +1 -0
  33. package/lib-es/signers/index.d.ts +20 -0
  34. package/lib-es/signers/index.d.ts.map +1 -0
  35. package/lib-es/signers/index.js +120 -0
  36. package/lib-es/signers/index.js.map +1 -0
  37. package/lib-es/types.d.ts +19 -0
  38. package/lib-es/types.d.ts.map +1 -0
  39. package/lib-es/types.js +2 -0
  40. package/lib-es/types.js.map +1 -0
  41. package/package.json +89 -0
  42. package/src/__tests__/unit/registries.unit.test.ts +34 -0
  43. package/src/__tests__/unit/resolvers.unit.test.ts +72 -0
  44. package/src/__tests__/unit/signers.unit.test.ts +80 -0
  45. package/src/index.ts +3 -0
  46. package/src/registries/index.ts +61 -0
  47. package/src/resolvers/index.ts +118 -0
  48. package/src/signers/index.ts +78 -0
  49. package/src/types.ts +20 -0
package/lib/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./registries";
2
+ export * from "./resolvers";
3
+ export * from "./signers";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/lib/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ exports.__esModule = true;
17
+ __exportStar(require("./registries"), exports);
18
+ __exportStar(require("./resolvers"), exports);
19
+ __exportStar(require("./signers"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,8CAA4B;AAC5B,4CAA0B"}
@@ -0,0 +1,20 @@
1
+ import { Registry } from "../types";
2
+ /**
3
+ * Method is voluntarly made async so it can be replaced by a backend call once implemented
4
+ */
5
+ export declare const getRegistries: () => Promise<Registry[]>;
6
+ /**
7
+ * Get an array of registries compatible with a given domain
8
+ *
9
+ * @param {string} domain
10
+ * @returns {Promise<AddressResolutionResponse[]>}
11
+ */
12
+ export declare const getRegistriesForDomain: (domain: string) => Promise<Registry[]>;
13
+ /**
14
+ * Get an array of registries compatible with a given address
15
+ *
16
+ * @param {string} address
17
+ * @returns {Promise<AddressResolutionResponse[]>}
18
+ */
19
+ export declare const getRegistriesForAddress: (address: string) => Promise<Registry[]>;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registries/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAyBpC;;GAEG;AACH,eAAO,MAAM,aAAa,QAAa,QAAQ,QAAQ,EAAE,CAAe,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,WACzB,MAAM,KACb,QAAQ,QAAQ,EAAE,CAMpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YACzB,MAAM,KACd,QAAQ,QAAQ,EAAE,CAMpB,CAAC"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ exports.__esModule = true;
39
+ exports.getRegistriesForAddress = exports.getRegistriesForDomain = exports.getRegistries = void 0;
40
+ var REGISTRIES = [
41
+ {
42
+ name: "ens",
43
+ resolvers: {
44
+ forward: "https://explorers.api.live.ledger.com/blockchain/v4/eth/ens/resolve/{name}",
45
+ reverse: "https://explorers.api.live.ledger.com/blockchain/v4/eth/ens/reverse-resolve/{address}"
46
+ },
47
+ signatures: {
48
+ forward: "https://nft.api.live.ledger.com/v1/names/ens/forward/{name}?=challenge={challenge}",
49
+ reverse: "https://nft.api.live.ledger.com/v1/names/ens/reverse/{address}?=challenge={challenge}"
50
+ },
51
+ patterns: {
52
+ forward: new RegExp(".eth$"),
53
+ reverse: new RegExp("^0x[0-9a-fA-F]{40}$")
54
+ },
55
+ coinTypes: [60]
56
+ },
57
+ ];
58
+ /**
59
+ * Method is voluntarly made async so it can be replaced by a backend call once implemented
60
+ */
61
+ var getRegistries = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
62
+ return [2 /*return*/, REGISTRIES];
63
+ }); }); };
64
+ exports.getRegistries = getRegistries;
65
+ /**
66
+ * Get an array of registries compatible with a given domain
67
+ *
68
+ * @param {string} domain
69
+ * @returns {Promise<AddressResolutionResponse[]>}
70
+ */
71
+ var getRegistriesForDomain = function (domain) { return __awaiter(void 0, void 0, void 0, function () {
72
+ var registries;
73
+ return __generator(this, function (_a) {
74
+ switch (_a.label) {
75
+ case 0: return [4 /*yield*/, (0, exports.getRegistries)()];
76
+ case 1:
77
+ registries = _a.sent();
78
+ return [2 /*return*/, registries.filter(function (registry) {
79
+ return registry.patterns.forward.test(domain);
80
+ })];
81
+ }
82
+ });
83
+ }); };
84
+ exports.getRegistriesForDomain = getRegistriesForDomain;
85
+ /**
86
+ * Get an array of registries compatible with a given address
87
+ *
88
+ * @param {string} address
89
+ * @returns {Promise<AddressResolutionResponse[]>}
90
+ */
91
+ var getRegistriesForAddress = function (address) { return __awaiter(void 0, void 0, void 0, function () {
92
+ var registries;
93
+ return __generator(this, function (_a) {
94
+ switch (_a.label) {
95
+ case 0: return [4 /*yield*/, (0, exports.getRegistries)()];
96
+ case 1:
97
+ registries = _a.sent();
98
+ return [2 /*return*/, registries.filter(function (registry) {
99
+ return registry.patterns.reverse.test(address);
100
+ })];
101
+ }
102
+ });
103
+ }); };
104
+ exports.getRegistriesForAddress = getRegistriesForAddress;
105
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registries/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAM,UAAU,GAAe;IAC7B;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE;YACT,OAAO,EACL,4EAA4E;YAC9E,OAAO,EACL,uFAAuF;SAC1F;QACD,UAAU,EAAE;YACV,OAAO,EACL,oFAAoF;YACtF,OAAO,EACL,uFAAuF;SAC1F;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;YAC5B,OAAO,EAAE,IAAI,MAAM,CAAC,qBAAqB,CAAC;SAC3C;QACD,SAAS,EAAE,CAAC,EAAE,CAAC;KAChB;CACF,CAAC;AAEF;;GAEG;AACI,IAAM,aAAa,GAAG;IAAiC,sBAAA,UAAU,EAAA;SAAA,CAAC;AAA5D,QAAA,aAAa,iBAA+C;AAEzE;;;;;GAKG;AACI,IAAM,sBAAsB,GAAG,UACpC,MAAc;;;;oBAEK,qBAAM,IAAA,qBAAa,GAAE,EAAA;;gBAAlC,UAAU,GAAG,SAAqB;gBAExC,sBAAO,UAAU,CAAC,MAAM,CAAC,UAAC,QAAQ;wBAChC,OAAA,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAtC,CAAsC,CACvC,EAAC;;;KACH,CAAC;AARW,QAAA,sBAAsB,0BAQjC;AAEF;;;;;GAKG;AACI,IAAM,uBAAuB,GAAG,UACrC,OAAe;;;;oBAEI,qBAAM,IAAA,qBAAa,GAAE,EAAA;;gBAAlC,UAAU,GAAG,SAAqB;gBAExC,sBAAO,UAAU,CAAC,MAAM,CAAC,UAAC,QAAQ;wBAChC,OAAA,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAvC,CAAuC,CACxC,EAAC;;;KACH,CAAC;AARW,QAAA,uBAAuB,2BAQlC"}
@@ -0,0 +1,25 @@
1
+ import { SupportedRegistries } from "../types";
2
+ type DomainResolutionResponse = {
3
+ registry: SupportedRegistries;
4
+ address: string;
5
+ };
6
+ /**
7
+ * Get an array of addresses for a domain
8
+ *
9
+ * @param {string} domain
10
+ * @returns {Promise<DomainResolutionResponse[]>}
11
+ */
12
+ export declare const resolveDomain: (domain: string, registryName?: SupportedRegistries) => Promise<DomainResolutionResponse[]>;
13
+ type AddressResolutionResponse = {
14
+ registry: SupportedRegistries;
15
+ domain: string;
16
+ };
17
+ /**
18
+ * Get an array of domains for an address
19
+ *
20
+ * @param {string} address
21
+ * @returns {Promise<AddressResolutionResponse[]>}
22
+ */
23
+ export declare const resolveAddress: (address: string, registryName?: SupportedRegistries) => Promise<AddressResolutionResponse[]>;
24
+ export {};
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ exports.__esModule = true;
42
+ exports.resolveAddress = exports.resolveDomain = void 0;
43
+ var logs_1 = require("@ledgerhq/logs");
44
+ var network_1 = __importDefault(require("@ledgerhq/live-common/network"));
45
+ var registries_1 = require("../registries");
46
+ /**
47
+ * Get an array of addresses for a domain
48
+ *
49
+ * @param {string} domain
50
+ * @returns {Promise<DomainResolutionResponse[]>}
51
+ */
52
+ var resolveDomain = function (domain, registryName) { return __awaiter(void 0, void 0, void 0, function () {
53
+ var registries, responses;
54
+ return __generator(this, function (_a) {
55
+ switch (_a.label) {
56
+ case 0: return [4 /*yield*/, (function () { return __awaiter(void 0, void 0, void 0, function () {
57
+ var registries_2, registry;
58
+ return __generator(this, function (_a) {
59
+ switch (_a.label) {
60
+ case 0:
61
+ if (!registryName) return [3 /*break*/, 2];
62
+ return [4 /*yield*/, (0, registries_1.getRegistries)()];
63
+ case 1:
64
+ registries_2 = _a.sent();
65
+ registry = registries_2.find(function (r) { return r.name === registryName; });
66
+ return [2 /*return*/, registry ? [registry] : []];
67
+ case 2: return [2 /*return*/, (0, registries_1.getRegistriesForDomain)(domain)];
68
+ }
69
+ });
70
+ }); })()];
71
+ case 1:
72
+ registries = _a.sent();
73
+ responses = Promise.allSettled(registries.map(function (registry) {
74
+ return (0, network_1["default"])({
75
+ method: "GET",
76
+ url: registry.resolvers.forward.replace("{name}", domain)
77
+ });
78
+ }));
79
+ return [2 /*return*/, responses.then(function (promises) {
80
+ return promises.reduce(function (result, promise, index) {
81
+ if (promise.status !== "fulfilled") {
82
+ // ignore 404 error
83
+ if (promise.reason.response.status !== 404) {
84
+ (0, logs_1.log)("domain-service", "failed to resolve a domain", {
85
+ domain: domain,
86
+ error: promise.reason
87
+ });
88
+ }
89
+ return result;
90
+ }
91
+ result.push({
92
+ registry: registries[index].name,
93
+ address: promise.value.data
94
+ });
95
+ return result;
96
+ }, []);
97
+ })];
98
+ }
99
+ });
100
+ }); };
101
+ exports.resolveDomain = resolveDomain;
102
+ /**
103
+ * Get an array of domains for an address
104
+ *
105
+ * @param {string} address
106
+ * @returns {Promise<AddressResolutionResponse[]>}
107
+ */
108
+ var resolveAddress = function (address, registryName) { return __awaiter(void 0, void 0, void 0, function () {
109
+ var registries, responses;
110
+ return __generator(this, function (_a) {
111
+ switch (_a.label) {
112
+ case 0: return [4 /*yield*/, (function () { return __awaiter(void 0, void 0, void 0, function () {
113
+ var registries_3, registry;
114
+ return __generator(this, function (_a) {
115
+ switch (_a.label) {
116
+ case 0:
117
+ if (!registryName) return [3 /*break*/, 2];
118
+ return [4 /*yield*/, (0, registries_1.getRegistries)()];
119
+ case 1:
120
+ registries_3 = _a.sent();
121
+ registry = registries_3.find(function (r) { return r.name === registryName; });
122
+ return [2 /*return*/, registry ? [registry] : []];
123
+ case 2: return [2 /*return*/, (0, registries_1.getRegistriesForAddress)(address)];
124
+ }
125
+ });
126
+ }); })()];
127
+ case 1:
128
+ registries = _a.sent();
129
+ responses = Promise.allSettled(registries.map(function (registry) {
130
+ return (0, network_1["default"])({
131
+ method: "GET",
132
+ url: registry.resolvers.reverse.replace("{address}", address)
133
+ });
134
+ }));
135
+ return [2 /*return*/, responses.then(function (promises) {
136
+ return promises.reduce(function (result, promise, index) {
137
+ if (promise.status !== "fulfilled") {
138
+ // ignore 404 error
139
+ if (promise.reason.response.status !== 404) {
140
+ (0, logs_1.log)("domain-service", "failed to resolve a address", {
141
+ address: address,
142
+ error: promise.reason
143
+ });
144
+ }
145
+ return result;
146
+ }
147
+ result.push({
148
+ registry: registries[index].name,
149
+ domain: promise.value.data
150
+ });
151
+ return result;
152
+ }, []);
153
+ })];
154
+ }
155
+ });
156
+ }); };
157
+ exports.resolveAddress = resolveAddress;
158
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { SupportedRegistries } from "../types";
2
+ /**
3
+ * Get an APDU to sign a domain resolution on the nano
4
+ *
5
+ * @param {string} domain
6
+ * @param {SupportedRegistries} registryName
7
+ * @param {string} challenge
8
+ * @returns {Promise<AddressResolutionResponse[]>}
9
+ */
10
+ export declare const signDomainResolution: (domain: string, registryName: SupportedRegistries, challenge: string) => Promise<string | null>;
11
+ /**
12
+ * Get an APDU to sign an address resolve resolution on the nano
13
+ *
14
+ * @param {string} address
15
+ * @param {SupportedRegistries} registryName
16
+ * @param {string} challenge
17
+ * @returns {Promise<AddressResolutionResponse[]>}
18
+ */
19
+ export declare const signAddressResolution: (address: string, registryName: SupportedRegistries, challenge: string) => Promise<string | null>;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,WACvB,MAAM,gBACA,mBAAmB,aACtB,MAAM,KAChB,QAAQ,MAAM,GAAG,IAAI,CAuBvB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,YACvB,MAAM,gBACD,mBAAmB,aACtB,MAAM,KAChB,QAAQ,MAAM,GAAG,IAAI,CAuBvB,CAAC"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ exports.__esModule = true;
42
+ exports.signAddressResolution = exports.signDomainResolution = void 0;
43
+ var logs_1 = require("@ledgerhq/logs");
44
+ var network_1 = __importDefault(require("@ledgerhq/live-common/network"));
45
+ var registries_1 = require("../registries");
46
+ /**
47
+ * Get an APDU to sign a domain resolution on the nano
48
+ *
49
+ * @param {string} domain
50
+ * @param {SupportedRegistries} registryName
51
+ * @param {string} challenge
52
+ * @returns {Promise<AddressResolutionResponse[]>}
53
+ */
54
+ var signDomainResolution = function (domain, registryName, challenge) { return __awaiter(void 0, void 0, void 0, function () {
55
+ var registries, registry, url;
56
+ return __generator(this, function (_a) {
57
+ switch (_a.label) {
58
+ case 0: return [4 /*yield*/, (0, registries_1.getRegistries)()];
59
+ case 1:
60
+ registries = _a.sent();
61
+ registry = registries.find(function (r) { return r.name === registryName; });
62
+ if (!registry)
63
+ return [2 /*return*/, null];
64
+ url = registry.signatures.forward
65
+ .replace("{name}", domain)
66
+ .replace("{challenge}", challenge);
67
+ return [2 /*return*/, (0, network_1["default"])({
68
+ method: "GET",
69
+ url: url
70
+ })
71
+ .then(function (_a) {
72
+ var data = _a.data;
73
+ return data.payload;
74
+ })["catch"](function (error) {
75
+ if (error.status !== 404) {
76
+ (0, logs_1.log)("domain-service", "failed to get APDU for a domain", {
77
+ domain: domain,
78
+ error: error
79
+ });
80
+ }
81
+ return null;
82
+ })];
83
+ }
84
+ });
85
+ }); };
86
+ exports.signDomainResolution = signDomainResolution;
87
+ /**
88
+ * Get an APDU to sign an address resolve resolution on the nano
89
+ *
90
+ * @param {string} address
91
+ * @param {SupportedRegistries} registryName
92
+ * @param {string} challenge
93
+ * @returns {Promise<AddressResolutionResponse[]>}
94
+ */
95
+ var signAddressResolution = function (address, registryName, challenge) { return __awaiter(void 0, void 0, void 0, function () {
96
+ var registries, registry, url;
97
+ return __generator(this, function (_a) {
98
+ switch (_a.label) {
99
+ case 0: return [4 /*yield*/, (0, registries_1.getRegistries)()];
100
+ case 1:
101
+ registries = _a.sent();
102
+ registry = registries.find(function (r) { return r.name === registryName; });
103
+ if (!registry)
104
+ return [2 /*return*/, null];
105
+ url = registry.signatures.reverse
106
+ .replace("{address}", address)
107
+ .replace("{challenge}", challenge);
108
+ return [2 /*return*/, (0, network_1["default"])({
109
+ method: "GET",
110
+ url: url
111
+ })
112
+ .then(function (_a) {
113
+ var data = _a.data;
114
+ return data.payload;
115
+ })["catch"](function (error) {
116
+ if (error.status !== 404) {
117
+ (0, logs_1.log)("domain-service", "failed to get APDU for an address", {
118
+ address: address,
119
+ error: error
120
+ });
121
+ }
122
+ return null;
123
+ })];
124
+ }
125
+ });
126
+ }); };
127
+ exports.signAddressResolution = signAddressResolution;
128
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAqC;AACrC,0EAAoD;AAEpD,4CAA8C;AAE9C;;;;;;;GAOG;AACI,IAAM,oBAAoB,GAAG,UAClC,MAAc,EACd,YAAiC,EACjC,SAAiB;;;;oBAEE,qBAAM,IAAA,0BAAa,GAAE,EAAA;;gBAAlC,UAAU,GAAG,SAAqB;gBAClC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,YAAY,EAAvB,CAAuB,CAAC,CAAC;gBACjE,IAAI,CAAC,QAAQ;oBAAE,sBAAO,IAAI,EAAC;gBAErB,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO;qBACpC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;qBACzB,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;gBAErC,sBAAO,IAAA,oBAAO,EAAsB;wBAClC,MAAM,EAAE,KAAK;wBACb,GAAG,KAAA;qBACJ,CAAC;yBACC,IAAI,CAAC,UAAC,EAAQ;4BAAN,IAAI,UAAA;wBAAO,OAAA,IAAI,CAAC,OAAO;oBAAZ,CAAY,CAAC,CAChC,OAAK,CAAA,CAAC,UAAC,KAAK;wBACX,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;4BACxB,IAAA,UAAG,EAAC,gBAAgB,EAAE,iCAAiC,EAAE;gCACvD,MAAM,QAAA;gCACN,KAAK,OAAA;6BACN,CAAC,CAAC;yBACJ;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,EAAC;;;KACN,CAAC;AA3BW,QAAA,oBAAoB,wBA2B/B;AAEF;;;;;;;GAOG;AACI,IAAM,qBAAqB,GAAG,UACnC,OAAe,EACf,YAAiC,EACjC,SAAiB;;;;oBAEE,qBAAM,IAAA,0BAAa,GAAE,EAAA;;gBAAlC,UAAU,GAAG,SAAqB;gBAClC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,YAAY,EAAvB,CAAuB,CAAC,CAAC;gBACjE,IAAI,CAAC,QAAQ;oBAAE,sBAAO,IAAI,EAAC;gBAErB,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO;qBACpC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;qBAC7B,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;gBAErC,sBAAO,IAAA,oBAAO,EAAsB;wBAClC,MAAM,EAAE,KAAK;wBACb,GAAG,KAAA;qBACJ,CAAC;yBACC,IAAI,CAAC,UAAC,EAAQ;4BAAN,IAAI,UAAA;wBAAO,OAAA,IAAI,CAAC,OAAO;oBAAZ,CAAY,CAAC,CAChC,OAAK,CAAA,CAAC,UAAC,KAAK;wBACX,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;4BACxB,IAAA,UAAG,EAAC,gBAAgB,EAAE,mCAAmC,EAAE;gCACzD,OAAO,SAAA;gCACP,KAAK,OAAA;6BACN,CAAC,CAAC;yBACJ;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,EAAC;;;KACN,CAAC;AA3BW,QAAA,qBAAqB,yBA2BhC"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { CoinType } from "@ledgerhq/types-cryptoassets";
2
+ export type SupportedRegistries = "ens";
3
+ export type Registry = {
4
+ name: SupportedRegistries;
5
+ resolvers: {
6
+ forward: string;
7
+ reverse: string;
8
+ };
9
+ signatures: {
10
+ forward: string;
11
+ reverse: string;
12
+ };
13
+ patterns: {
14
+ forward: RegExp;
15
+ reverse: RegExp;
16
+ };
17
+ coinTypes: CoinType[];
18
+ };
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
package/lib/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from "./registries";
2
+ export * from "./resolvers";
3
+ export * from "./signers";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,4 @@
1
+ export * from "./registries";
2
+ export * from "./resolvers";
3
+ export * from "./signers";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,20 @@
1
+ import { Registry } from "../types";
2
+ /**
3
+ * Method is voluntarly made async so it can be replaced by a backend call once implemented
4
+ */
5
+ export declare const getRegistries: () => Promise<Registry[]>;
6
+ /**
7
+ * Get an array of registries compatible with a given domain
8
+ *
9
+ * @param {string} domain
10
+ * @returns {Promise<AddressResolutionResponse[]>}
11
+ */
12
+ export declare const getRegistriesForDomain: (domain: string) => Promise<Registry[]>;
13
+ /**
14
+ * Get an array of registries compatible with a given address
15
+ *
16
+ * @param {string} address
17
+ * @returns {Promise<AddressResolutionResponse[]>}
18
+ */
19
+ export declare const getRegistriesForAddress: (address: string) => Promise<Registry[]>;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registries/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAyBpC;;GAEG;AACH,eAAO,MAAM,aAAa,QAAa,QAAQ,QAAQ,EAAE,CAAe,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,WACzB,MAAM,KACb,QAAQ,QAAQ,EAAE,CAMpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YACzB,MAAM,KACd,QAAQ,QAAQ,EAAE,CAMpB,CAAC"}