@ledgerhq/ledger-trust-service 0.3.15-nightly.3 → 0.4.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +11 -18
- package/lib/hedera.integ.test.d.ts +2 -0
- package/lib/hedera.integ.test.d.ts.map +1 -0
- package/lib/hedera.integ.test.js +15 -0
- package/lib/hedera.integ.test.js.map +1 -0
- package/lib/hedera.test.d.ts +2 -0
- package/lib/hedera.test.d.ts.map +1 -0
- package/lib/hedera.test.js +57 -0
- package/lib/hedera.test.js.map +1 -0
- package/lib/solana.integ.test.d.ts +2 -0
- package/lib/solana.integ.test.d.ts.map +1 -0
- package/lib/solana.integ.test.js +28 -0
- package/lib/solana.integ.test.js.map +1 -0
- package/lib/solana.test.d.ts +2 -0
- package/lib/solana.test.d.ts.map +1 -0
- package/lib/solana.test.js +106 -0
- package/lib/solana.test.js.map +1 -0
- package/lib-es/hedera.integ.test.d.ts +2 -0
- package/lib-es/hedera.integ.test.d.ts.map +1 -0
- package/lib-es/hedera.integ.test.js +13 -0
- package/lib-es/hedera.integ.test.js.map +1 -0
- package/lib-es/hedera.test.d.ts +2 -0
- package/lib-es/hedera.test.d.ts.map +1 -0
- package/lib-es/hedera.test.js +52 -0
- package/lib-es/hedera.test.js.map +1 -0
- package/lib-es/solana.integ.test.d.ts +2 -0
- package/lib-es/solana.integ.test.d.ts.map +1 -0
- package/lib-es/solana.integ.test.js +26 -0
- package/lib-es/solana.integ.test.js.map +1 -0
- package/lib-es/solana.test.d.ts +2 -0
- package/lib-es/solana.test.d.ts.map +1 -0
- package/lib-es/solana.test.js +101 -0
- package/lib-es/solana.test.js.map +1 -0
- package/package.json +3 -3
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/ledger-trust-service@0.
|
|
2
|
+
> @ledgerhq/ledger-trust-service@0.4.0 build /home/runner/work/ledger-live/ledger-live/libs/ledger-services/trust
|
|
3
3
|
> tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es
|
|
4
4
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,35 +1,28 @@
|
|
|
1
1
|
# @ledgerhq/ledger-trust-service
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 0.4.0
|
|
4
4
|
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
- Updated dependencies [[`cbc0648`](https://github.com/LedgerHQ/ledger-live/commit/cbc064885d8e0459e40d327a2e5389204b3ec705)]:
|
|
8
|
-
- @ledgerhq/live-env@2.19.0-nightly.2
|
|
9
|
-
- @ledgerhq/live-network@2.0.20-nightly.3
|
|
5
|
+
### Minor Changes
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
- [#10972](https://github.com/LedgerHQ/ledger-live/pull/10972) [`f077f72`](https://github.com/LedgerHQ/ledger-live/commit/f077f7205667f4f7b82ae7584e80964c5ac7601a) Thanks [@scavassa-yld](https://github.com/scavassa-yld)! - support for Hedera swaps
|
|
12
8
|
|
|
13
9
|
### Patch Changes
|
|
14
10
|
|
|
15
|
-
- Updated dependencies [[`
|
|
16
|
-
- @ledgerhq/live-env@2.19.0
|
|
17
|
-
- @ledgerhq/live-network@2.0.20
|
|
18
|
-
|
|
19
|
-
## 0.3.15-nightly.1
|
|
11
|
+
- Updated dependencies [[`f1f3845`](https://github.com/LedgerHQ/ledger-live/commit/f1f3845942e4cbce9c585dc65f6170ddbc319f19)]:
|
|
12
|
+
- @ledgerhq/live-env@2.19.0
|
|
13
|
+
- @ledgerhq/live-network@2.0.20
|
|
20
14
|
|
|
21
|
-
|
|
15
|
+
## 0.4.0-next.0
|
|
22
16
|
|
|
23
|
-
|
|
24
|
-
- @ledgerhq/live-network@2.0.20-nightly.1
|
|
17
|
+
### Minor Changes
|
|
25
18
|
|
|
26
|
-
|
|
19
|
+
- [#10972](https://github.com/LedgerHQ/ledger-live/pull/10972) [`f077f72`](https://github.com/LedgerHQ/ledger-live/commit/f077f7205667f4f7b82ae7584e80964c5ac7601a) Thanks [@scavassa-yld](https://github.com/scavassa-yld)! - support for Hedera swaps
|
|
27
20
|
|
|
28
21
|
### Patch Changes
|
|
29
22
|
|
|
30
23
|
- Updated dependencies [[`f1f3845`](https://github.com/LedgerHQ/ledger-live/commit/f1f3845942e4cbce9c585dc65f6170ddbc319f19)]:
|
|
31
|
-
- @ledgerhq/live-env@2.19.0-
|
|
32
|
-
- @ledgerhq/live-network@2.0.20-
|
|
24
|
+
- @ledgerhq/live-env@2.19.0-next.0
|
|
25
|
+
- @ledgerhq/live-network@2.0.20-next.0
|
|
33
26
|
|
|
34
27
|
## 0.3.14
|
|
35
28
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hedera.integ.test.d.ts","sourceRoot":"","sources":["../src/hedera.integ.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const hedera_1 = require("./hedera");
|
|
4
|
+
describe("getPublicKey", () => {
|
|
5
|
+
it("returns expected public key info", async () => {
|
|
6
|
+
// When
|
|
7
|
+
const result = await (0, hedera_1.getPublicKey)("0.0.751515", "1", "test");
|
|
8
|
+
// Then
|
|
9
|
+
expect(result).toEqual(expect.objectContaining({
|
|
10
|
+
account: "0.0.751515",
|
|
11
|
+
key: "0xe645c093bab64b4d076e82a85fd11bbfac24af0d827e7dafa8c49e04395970eb",
|
|
12
|
+
}));
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=hedera.integ.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hedera.integ.test.js","sourceRoot":"","sources":["../src/hedera.integ.test.ts"],"names":[],"mappings":";;AAAA,qCAAwC;AAExC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAE7D,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,MAAM,CAAC,gBAAgB,CAAC;YACtB,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,oEAAoE;SAC1E,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hedera.test.d.ts","sourceRoot":"","sources":["../src/hedera.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const live_network_1 = __importDefault(require("@ledgerhq/live-network"));
|
|
7
|
+
const hedera_1 = require("./hedera");
|
|
8
|
+
jest.mock("@ledgerhq/live-network");
|
|
9
|
+
describe("hedera", () => {
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
jest.resetModules();
|
|
12
|
+
jest.clearAllMocks();
|
|
13
|
+
});
|
|
14
|
+
describe("getPublicKey", () => {
|
|
15
|
+
it.each([
|
|
16
|
+
["prod", "https://nft.api.live.ledger.com"],
|
|
17
|
+
[undefined, "https://nft.api.live.ledger.com"],
|
|
18
|
+
["test", "https://nft.api.live.ledger-test.com"],
|
|
19
|
+
])("fetch the correct %s service environment", async (env, baseUrl) => {
|
|
20
|
+
// Given
|
|
21
|
+
const accountId = "HEDERA_ACCOUNT_ID";
|
|
22
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
23
|
+
const mockResponse = {};
|
|
24
|
+
live_network_1.default.mockResolvedValue({ data: mockResponse });
|
|
25
|
+
// When
|
|
26
|
+
await (0, hedera_1.getPublicKey)(accountId, challenge, env);
|
|
27
|
+
// Then
|
|
28
|
+
expect(live_network_1.default).toHaveBeenCalledWith({
|
|
29
|
+
method: "GET",
|
|
30
|
+
url: `${baseUrl}/v2/hedera/pubkey/${accountId}?challenge=${challenge}`,
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
it("transforms data as expected", async () => {
|
|
34
|
+
// Given
|
|
35
|
+
const accountId = "HEDERA_ACCOUNT_ID";
|
|
36
|
+
const publicKey = "HEDERA_PUBLIC_KEY";
|
|
37
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
38
|
+
const mockResponse = {
|
|
39
|
+
descriptorType: "TrustedDomainName",
|
|
40
|
+
descriptorVersion: 3,
|
|
41
|
+
account: accountId,
|
|
42
|
+
key: publicKey,
|
|
43
|
+
signedDescriptor: "SIGNATURE",
|
|
44
|
+
};
|
|
45
|
+
live_network_1.default.mockResolvedValue({ data: mockResponse });
|
|
46
|
+
// When
|
|
47
|
+
const result = await (0, hedera_1.getPublicKey)(accountId, challenge);
|
|
48
|
+
// Then
|
|
49
|
+
expect(result).toEqual({
|
|
50
|
+
accountId,
|
|
51
|
+
publicKey,
|
|
52
|
+
signedDescriptor: "SIGNATURE",
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=hedera.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hedera.test.js","sourceRoot":"","sources":["../src/hedera.test.ts"],"names":[],"mappings":";;;;;AAAA,0EAA6C;AAC7C,qCAAwC;AAExC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAEpC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,IAAI,CAAC;YACN,CAAC,MAAM,EAAE,iCAAiC,CAAC;YAC3C,CAAC,SAAS,EAAE,iCAAiC,CAAC;YAC9C,CAAC,MAAM,EAAE,sCAAsC,CAAC;SACjD,CAAC,CAAC,0CAA0C,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACpE,QAAQ;YACR,MAAM,SAAS,GAAG,mBAAmB,CAAC;YACtC,MAAM,SAAS,GAAG,oBAAoB,CAAC;YACvC,MAAM,YAAY,GAAG,EAAE,CAAC;YACvB,sBAAqB,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAEjE,OAAO;YACP,MAAM,IAAA,qBAAY,EAAC,SAAS,EAAE,SAAS,EAAE,GAAsB,CAAC,CAAC;YAEjE,OAAO;YACP,MAAM,CAAC,sBAAO,CAAC,CAAC,oBAAoB,CAAC;gBACnC,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,GAAG,OAAO,qBAAqB,SAAS,cAAc,SAAS,EAAE;aACvE,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,QAAQ;YACR,MAAM,SAAS,GAAG,mBAAmB,CAAC;YACtC,MAAM,SAAS,GAAG,mBAAmB,CAAC;YACtC,MAAM,SAAS,GAAG,oBAAoB,CAAC;YACvC,MAAM,YAAY,GAAG;gBACnB,cAAc,EAAE,mBAAmB;gBACnC,iBAAiB,EAAE,CAAC;gBACpB,OAAO,EAAE,SAAS;gBAClB,GAAG,EAAE,SAAS;gBACd,gBAAgB,EAAE,WAAW;aAC9B,CAAC;YACD,sBAAqB,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAEjE,OAAO;YACP,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAExD,OAAO;YACP,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,SAAS;gBACT,gBAAgB,EAAE,WAAW;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.integ.test.d.ts","sourceRoot":"","sources":["../src/solana.integ.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const solana_1 = require("./solana");
|
|
4
|
+
describe("getOwnerAddress", () => {
|
|
5
|
+
it("returns expected ATA info", async () => {
|
|
6
|
+
// When
|
|
7
|
+
const result = await (0, solana_1.getOwnerAddress)("EQ96zptNAWwM23m5v2ByChCMTFu6zUmJgRtUrQV1uYNM", "", "test");
|
|
8
|
+
// Then
|
|
9
|
+
expect(result).toEqual(expect.objectContaining({
|
|
10
|
+
tokenAccount: "EQ96zptNAWwM23m5v2ByChCMTFu6zUmJgRtUrQV1uYNM",
|
|
11
|
+
owner: "AS1kiySqqS6Tvv3KmBsr8Zbg4DUo5fDxDD9v1dF1TVYr",
|
|
12
|
+
contract: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
13
|
+
}));
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
describe("computedTokenAddress", () => {
|
|
17
|
+
it("returns expected ATA info", async () => {
|
|
18
|
+
// When
|
|
19
|
+
const result = await (0, solana_1.computedTokenAddress)("DHTPaexpcpK58w4UpvoLnFH55jfwJdpg4R73mUwryZU8", "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU", "", "test");
|
|
20
|
+
// Then
|
|
21
|
+
expect(result).toEqual(expect.objectContaining({
|
|
22
|
+
tokenAccount: "GizbHjLkKspW5XzkUsWKSoWW3VwBJMYi39NwCmppsbRs",
|
|
23
|
+
owner: "DHTPaexpcpK58w4UpvoLnFH55jfwJdpg4R73mUwryZU8",
|
|
24
|
+
contract: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
|
|
25
|
+
}));
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=solana.integ.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.integ.test.js","sourceRoot":"","sources":["../src/solana.integ.test.ts"],"names":[],"mappings":";;AAAA,qCAAiE;AAEjE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAe,EAClC,8CAA8C,EAC9C,EAAE,EACF,MAAM,CACP,CAAC;QAEF,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,MAAM,CAAC,gBAAgB,CAAC;YACtB,YAAY,EAAE,8CAA8C;YAC5D,KAAK,EAAE,8CAA8C;YACrD,QAAQ,EAAE,8CAA8C;SACzD,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAoB,EACvC,8CAA8C,EAC9C,8CAA8C,EAC9C,EAAE,EACF,MAAM,CACP,CAAC;QAEF,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,MAAM,CAAC,gBAAgB,CAAC;YACtB,YAAY,EAAE,8CAA8C;YAC5D,KAAK,EAAE,8CAA8C;YACrD,QAAQ,EAAE,8CAA8C;SACzD,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.test.d.ts","sourceRoot":"","sources":["../src/solana.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const solana_1 = require("./solana");
|
|
7
|
+
const live_network_1 = __importDefault(require("@ledgerhq/live-network"));
|
|
8
|
+
jest.mock("@ledgerhq/live-network");
|
|
9
|
+
describe("solana", () => {
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
jest.resetModules();
|
|
12
|
+
jest.clearAllMocks();
|
|
13
|
+
});
|
|
14
|
+
describe("getOwnerAddress", () => {
|
|
15
|
+
it.each([
|
|
16
|
+
["prod", "https://nft.api.live.ledger.com"],
|
|
17
|
+
[undefined, "https://nft.api.live.ledger.com"],
|
|
18
|
+
["test", "https://nft.api.live.ledger-test.com"],
|
|
19
|
+
])("fetch the correct %s service environement", async (env, baseUrl) => {
|
|
20
|
+
// Given
|
|
21
|
+
const ownerAddress = "SOL_ADDR";
|
|
22
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
23
|
+
const mockResponse = {};
|
|
24
|
+
live_network_1.default.mockResolvedValue({ data: mockResponse });
|
|
25
|
+
// When
|
|
26
|
+
await (0, solana_1.getOwnerAddress)(ownerAddress, challenge, env);
|
|
27
|
+
// Then
|
|
28
|
+
expect(live_network_1.default).toHaveBeenCalledWith({
|
|
29
|
+
method: "GET",
|
|
30
|
+
url: `${baseUrl}/v2/solana/owner/${ownerAddress}?challenge=${challenge}`,
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
it("transforms data as expected", async () => {
|
|
34
|
+
// Given
|
|
35
|
+
const ownerAddress = "SOL_ADDR";
|
|
36
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
37
|
+
const mintAddress = "MINT_ADDR";
|
|
38
|
+
const tokenAddress = "TOKEN_ADDR";
|
|
39
|
+
const mockResponse = {
|
|
40
|
+
descriptorType: "TrustedName",
|
|
41
|
+
descriptorVersion: 2,
|
|
42
|
+
tokenAccount: tokenAddress,
|
|
43
|
+
owner: ownerAddress,
|
|
44
|
+
contract: mintAddress,
|
|
45
|
+
signedDescriptor: "SIGNATURE",
|
|
46
|
+
};
|
|
47
|
+
live_network_1.default.mockResolvedValue({ data: mockResponse });
|
|
48
|
+
// When
|
|
49
|
+
const result = await (0, solana_1.getOwnerAddress)(ownerAddress, challenge);
|
|
50
|
+
// Then
|
|
51
|
+
expect(result).toEqual({
|
|
52
|
+
contract: mintAddress,
|
|
53
|
+
owner: ownerAddress,
|
|
54
|
+
tokenAccount: tokenAddress,
|
|
55
|
+
signedDescriptor: "SIGNATURE",
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe("computedTokenAddress", () => {
|
|
60
|
+
it.each([
|
|
61
|
+
["prod", "https://nft.api.live.ledger.com"],
|
|
62
|
+
[undefined, "https://nft.api.live.ledger.com"],
|
|
63
|
+
["test", "https://nft.api.live.ledger-test.com"],
|
|
64
|
+
])("fetch the correct %s service environement", async (env, baseUrl) => {
|
|
65
|
+
// Given
|
|
66
|
+
const ownerAddress = "SOL_ADDR";
|
|
67
|
+
const mintAddress = "MINT_ADDR";
|
|
68
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
69
|
+
const mockResponse = {};
|
|
70
|
+
live_network_1.default.mockResolvedValue({ data: mockResponse });
|
|
71
|
+
// When
|
|
72
|
+
await (0, solana_1.computedTokenAddress)(ownerAddress, mintAddress, challenge, env);
|
|
73
|
+
// Then
|
|
74
|
+
expect(live_network_1.default).toHaveBeenCalledWith({
|
|
75
|
+
method: "GET",
|
|
76
|
+
url: `${baseUrl}/v2/solana/computed-token-account/${ownerAddress}/${mintAddress}?challenge=${challenge}`,
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
it("transforms data as expected", async () => {
|
|
80
|
+
// Given
|
|
81
|
+
const ownerAddress = "SOL_ADDR";
|
|
82
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
83
|
+
const mintAddress = "MINT_ADDR";
|
|
84
|
+
const tokenAddress = "TOKEN_ADDR";
|
|
85
|
+
const mockResponse = {
|
|
86
|
+
descriptorType: "TrustedName",
|
|
87
|
+
descriptorVersion: 2,
|
|
88
|
+
tokenAccount: tokenAddress,
|
|
89
|
+
owner: ownerAddress,
|
|
90
|
+
contract: mintAddress,
|
|
91
|
+
signedDescriptor: "SIGNATURE",
|
|
92
|
+
};
|
|
93
|
+
live_network_1.default.mockResolvedValue({ data: mockResponse });
|
|
94
|
+
// When
|
|
95
|
+
const result = await (0, solana_1.computedTokenAddress)(ownerAddress, mintAddress, challenge);
|
|
96
|
+
// Then
|
|
97
|
+
expect(result).toEqual({
|
|
98
|
+
contract: mintAddress,
|
|
99
|
+
owner: ownerAddress,
|
|
100
|
+
tokenAccount: tokenAddress,
|
|
101
|
+
signedDescriptor: "SIGNATURE",
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=solana.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.test.js","sourceRoot":"","sources":["../src/solana.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hedera.integ.test.d.ts","sourceRoot":"","sources":["../src/hedera.integ.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { getPublicKey } from "./hedera";
|
|
2
|
+
describe("getPublicKey", () => {
|
|
3
|
+
it("returns expected public key info", async () => {
|
|
4
|
+
// When
|
|
5
|
+
const result = await getPublicKey("0.0.751515", "1", "test");
|
|
6
|
+
// Then
|
|
7
|
+
expect(result).toEqual(expect.objectContaining({
|
|
8
|
+
account: "0.0.751515",
|
|
9
|
+
key: "0xe645c093bab64b4d076e82a85fd11bbfac24af0d827e7dafa8c49e04395970eb",
|
|
10
|
+
}));
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=hedera.integ.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hedera.integ.test.js","sourceRoot":"","sources":["../src/hedera.integ.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAE7D,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,MAAM,CAAC,gBAAgB,CAAC;YACtB,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,oEAAoE;SAC1E,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hedera.test.d.ts","sourceRoot":"","sources":["../src/hedera.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import network from "@ledgerhq/live-network";
|
|
2
|
+
import { getPublicKey } from "./hedera";
|
|
3
|
+
jest.mock("@ledgerhq/live-network");
|
|
4
|
+
describe("hedera", () => {
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
jest.resetModules();
|
|
7
|
+
jest.clearAllMocks();
|
|
8
|
+
});
|
|
9
|
+
describe("getPublicKey", () => {
|
|
10
|
+
it.each([
|
|
11
|
+
["prod", "https://nft.api.live.ledger.com"],
|
|
12
|
+
[undefined, "https://nft.api.live.ledger.com"],
|
|
13
|
+
["test", "https://nft.api.live.ledger-test.com"],
|
|
14
|
+
])("fetch the correct %s service environment", async (env, baseUrl) => {
|
|
15
|
+
// Given
|
|
16
|
+
const accountId = "HEDERA_ACCOUNT_ID";
|
|
17
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
18
|
+
const mockResponse = {};
|
|
19
|
+
network.mockResolvedValue({ data: mockResponse });
|
|
20
|
+
// When
|
|
21
|
+
await getPublicKey(accountId, challenge, env);
|
|
22
|
+
// Then
|
|
23
|
+
expect(network).toHaveBeenCalledWith({
|
|
24
|
+
method: "GET",
|
|
25
|
+
url: `${baseUrl}/v2/hedera/pubkey/${accountId}?challenge=${challenge}`,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
it("transforms data as expected", async () => {
|
|
29
|
+
// Given
|
|
30
|
+
const accountId = "HEDERA_ACCOUNT_ID";
|
|
31
|
+
const publicKey = "HEDERA_PUBLIC_KEY";
|
|
32
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
33
|
+
const mockResponse = {
|
|
34
|
+
descriptorType: "TrustedDomainName",
|
|
35
|
+
descriptorVersion: 3,
|
|
36
|
+
account: accountId,
|
|
37
|
+
key: publicKey,
|
|
38
|
+
signedDescriptor: "SIGNATURE",
|
|
39
|
+
};
|
|
40
|
+
network.mockResolvedValue({ data: mockResponse });
|
|
41
|
+
// When
|
|
42
|
+
const result = await getPublicKey(accountId, challenge);
|
|
43
|
+
// Then
|
|
44
|
+
expect(result).toEqual({
|
|
45
|
+
accountId,
|
|
46
|
+
publicKey,
|
|
47
|
+
signedDescriptor: "SIGNATURE",
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=hedera.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hedera.test.js","sourceRoot":"","sources":["../src/hedera.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAEpC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,IAAI,CAAC;YACN,CAAC,MAAM,EAAE,iCAAiC,CAAC;YAC3C,CAAC,SAAS,EAAE,iCAAiC,CAAC;YAC9C,CAAC,MAAM,EAAE,sCAAsC,CAAC;SACjD,CAAC,CAAC,0CAA0C,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACpE,QAAQ;YACR,MAAM,SAAS,GAAG,mBAAmB,CAAC;YACtC,MAAM,SAAS,GAAG,oBAAoB,CAAC;YACvC,MAAM,YAAY,GAAG,EAAE,CAAC;YACvB,OAAqB,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAEjE,OAAO;YACP,MAAM,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,GAAsB,CAAC,CAAC;YAEjE,OAAO;YACP,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC;gBACnC,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,GAAG,OAAO,qBAAqB,SAAS,cAAc,SAAS,EAAE;aACvE,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,QAAQ;YACR,MAAM,SAAS,GAAG,mBAAmB,CAAC;YACtC,MAAM,SAAS,GAAG,mBAAmB,CAAC;YACtC,MAAM,SAAS,GAAG,oBAAoB,CAAC;YACvC,MAAM,YAAY,GAAG;gBACnB,cAAc,EAAE,mBAAmB;gBACnC,iBAAiB,EAAE,CAAC;gBACpB,OAAO,EAAE,SAAS;gBAClB,GAAG,EAAE,SAAS;gBACd,gBAAgB,EAAE,WAAW;aAC9B,CAAC;YACD,OAAqB,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAEjE,OAAO;YACP,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAExD,OAAO;YACP,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS;gBACT,SAAS;gBACT,gBAAgB,EAAE,WAAW;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.integ.test.d.ts","sourceRoot":"","sources":["../src/solana.integ.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { computedTokenAddress, getOwnerAddress } from "./solana";
|
|
2
|
+
describe("getOwnerAddress", () => {
|
|
3
|
+
it("returns expected ATA info", async () => {
|
|
4
|
+
// When
|
|
5
|
+
const result = await getOwnerAddress("EQ96zptNAWwM23m5v2ByChCMTFu6zUmJgRtUrQV1uYNM", "", "test");
|
|
6
|
+
// Then
|
|
7
|
+
expect(result).toEqual(expect.objectContaining({
|
|
8
|
+
tokenAccount: "EQ96zptNAWwM23m5v2ByChCMTFu6zUmJgRtUrQV1uYNM",
|
|
9
|
+
owner: "AS1kiySqqS6Tvv3KmBsr8Zbg4DUo5fDxDD9v1dF1TVYr",
|
|
10
|
+
contract: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
11
|
+
}));
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
describe("computedTokenAddress", () => {
|
|
15
|
+
it("returns expected ATA info", async () => {
|
|
16
|
+
// When
|
|
17
|
+
const result = await computedTokenAddress("DHTPaexpcpK58w4UpvoLnFH55jfwJdpg4R73mUwryZU8", "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU", "", "test");
|
|
18
|
+
// Then
|
|
19
|
+
expect(result).toEqual(expect.objectContaining({
|
|
20
|
+
tokenAccount: "GizbHjLkKspW5XzkUsWKSoWW3VwBJMYi39NwCmppsbRs",
|
|
21
|
+
owner: "DHTPaexpcpK58w4UpvoLnFH55jfwJdpg4R73mUwryZU8",
|
|
22
|
+
contract: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
|
|
23
|
+
}));
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=solana.integ.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.integ.test.js","sourceRoot":"","sources":["../src/solana.integ.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEjE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,8CAA8C,EAC9C,EAAE,EACF,MAAM,CACP,CAAC;QAEF,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,MAAM,CAAC,gBAAgB,CAAC;YACtB,YAAY,EAAE,8CAA8C;YAC5D,KAAK,EAAE,8CAA8C;YACrD,QAAQ,EAAE,8CAA8C;SACzD,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,8CAA8C,EAC9C,8CAA8C,EAC9C,EAAE,EACF,MAAM,CACP,CAAC;QAEF,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,MAAM,CAAC,gBAAgB,CAAC;YACtB,YAAY,EAAE,8CAA8C;YAC5D,KAAK,EAAE,8CAA8C;YACrD,QAAQ,EAAE,8CAA8C;SACzD,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.test.d.ts","sourceRoot":"","sources":["../src/solana.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { computedTokenAddress, getOwnerAddress } from "./solana";
|
|
2
|
+
import network from "@ledgerhq/live-network";
|
|
3
|
+
jest.mock("@ledgerhq/live-network");
|
|
4
|
+
describe("solana", () => {
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
jest.resetModules();
|
|
7
|
+
jest.clearAllMocks();
|
|
8
|
+
});
|
|
9
|
+
describe("getOwnerAddress", () => {
|
|
10
|
+
it.each([
|
|
11
|
+
["prod", "https://nft.api.live.ledger.com"],
|
|
12
|
+
[undefined, "https://nft.api.live.ledger.com"],
|
|
13
|
+
["test", "https://nft.api.live.ledger-test.com"],
|
|
14
|
+
])("fetch the correct %s service environement", async (env, baseUrl) => {
|
|
15
|
+
// Given
|
|
16
|
+
const ownerAddress = "SOL_ADDR";
|
|
17
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
18
|
+
const mockResponse = {};
|
|
19
|
+
network.mockResolvedValue({ data: mockResponse });
|
|
20
|
+
// When
|
|
21
|
+
await getOwnerAddress(ownerAddress, challenge, env);
|
|
22
|
+
// Then
|
|
23
|
+
expect(network).toHaveBeenCalledWith({
|
|
24
|
+
method: "GET",
|
|
25
|
+
url: `${baseUrl}/v2/solana/owner/${ownerAddress}?challenge=${challenge}`,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
it("transforms data as expected", async () => {
|
|
29
|
+
// Given
|
|
30
|
+
const ownerAddress = "SOL_ADDR";
|
|
31
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
32
|
+
const mintAddress = "MINT_ADDR";
|
|
33
|
+
const tokenAddress = "TOKEN_ADDR";
|
|
34
|
+
const mockResponse = {
|
|
35
|
+
descriptorType: "TrustedName",
|
|
36
|
+
descriptorVersion: 2,
|
|
37
|
+
tokenAccount: tokenAddress,
|
|
38
|
+
owner: ownerAddress,
|
|
39
|
+
contract: mintAddress,
|
|
40
|
+
signedDescriptor: "SIGNATURE",
|
|
41
|
+
};
|
|
42
|
+
network.mockResolvedValue({ data: mockResponse });
|
|
43
|
+
// When
|
|
44
|
+
const result = await getOwnerAddress(ownerAddress, challenge);
|
|
45
|
+
// Then
|
|
46
|
+
expect(result).toEqual({
|
|
47
|
+
contract: mintAddress,
|
|
48
|
+
owner: ownerAddress,
|
|
49
|
+
tokenAccount: tokenAddress,
|
|
50
|
+
signedDescriptor: "SIGNATURE",
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe("computedTokenAddress", () => {
|
|
55
|
+
it.each([
|
|
56
|
+
["prod", "https://nft.api.live.ledger.com"],
|
|
57
|
+
[undefined, "https://nft.api.live.ledger.com"],
|
|
58
|
+
["test", "https://nft.api.live.ledger-test.com"],
|
|
59
|
+
])("fetch the correct %s service environement", async (env, baseUrl) => {
|
|
60
|
+
// Given
|
|
61
|
+
const ownerAddress = "SOL_ADDR";
|
|
62
|
+
const mintAddress = "MINT_ADDR";
|
|
63
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
64
|
+
const mockResponse = {};
|
|
65
|
+
network.mockResolvedValue({ data: mockResponse });
|
|
66
|
+
// When
|
|
67
|
+
await computedTokenAddress(ownerAddress, mintAddress, challenge, env);
|
|
68
|
+
// Then
|
|
69
|
+
expect(network).toHaveBeenCalledWith({
|
|
70
|
+
method: "GET",
|
|
71
|
+
url: `${baseUrl}/v2/solana/computed-token-account/${ownerAddress}/${mintAddress}?challenge=${challenge}`,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
it("transforms data as expected", async () => {
|
|
75
|
+
// Given
|
|
76
|
+
const ownerAddress = "SOL_ADDR";
|
|
77
|
+
const challenge = "WHATEVER_CHALLENGE";
|
|
78
|
+
const mintAddress = "MINT_ADDR";
|
|
79
|
+
const tokenAddress = "TOKEN_ADDR";
|
|
80
|
+
const mockResponse = {
|
|
81
|
+
descriptorType: "TrustedName",
|
|
82
|
+
descriptorVersion: 2,
|
|
83
|
+
tokenAccount: tokenAddress,
|
|
84
|
+
owner: ownerAddress,
|
|
85
|
+
contract: mintAddress,
|
|
86
|
+
signedDescriptor: "SIGNATURE",
|
|
87
|
+
};
|
|
88
|
+
network.mockResolvedValue({ data: mockResponse });
|
|
89
|
+
// When
|
|
90
|
+
const result = await computedTokenAddress(ownerAddress, mintAddress, challenge);
|
|
91
|
+
// Then
|
|
92
|
+
expect(result).toEqual({
|
|
93
|
+
contract: mintAddress,
|
|
94
|
+
owner: ownerAddress,
|
|
95
|
+
tokenAccount: tokenAddress,
|
|
96
|
+
signedDescriptor: "SIGNATURE",
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=solana.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana.test.js","sourceRoot":"","sources":["../src/solana.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/ledger-trust-service",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Ledger Trust service client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
},
|
|
56
56
|
"license": "Apache-2.0",
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@ledgerhq/live-env": "2.19.0
|
|
59
|
-
"@ledgerhq/live-network": "2.0.20
|
|
58
|
+
"@ledgerhq/live-env": "2.19.0",
|
|
59
|
+
"@ledgerhq/live-network": "2.0.20"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@types/jest": "^29.5.10",
|