@ledgerhq/ledger-key-ring-protocol 0.5.1-fix-build-number-pre.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 (179) hide show
  1. package/.eslintrc.js +33 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/CHANGELOG.md +299 -0
  4. package/LICENSE.txt +21 -0
  5. package/README.md +3 -0
  6. package/jest.config.js +13 -0
  7. package/lib/HWDeviceProvider.d.ts +25 -0
  8. package/lib/HWDeviceProvider.d.ts.map +1 -0
  9. package/lib/HWDeviceProvider.js +88 -0
  10. package/lib/HWDeviceProvider.js.map +1 -0
  11. package/lib/api.d.ts +77 -0
  12. package/lib/api.d.ts.map +1 -0
  13. package/lib/api.js +150 -0
  14. package/lib/api.js.map +1 -0
  15. package/lib/auth.d.ts +3 -0
  16. package/lib/auth.d.ts.map +1 -0
  17. package/lib/auth.js +79 -0
  18. package/lib/auth.js.map +1 -0
  19. package/lib/errors.d.ts +40 -0
  20. package/lib/errors.d.ts.map +1 -0
  21. package/lib/errors.js +18 -0
  22. package/lib/errors.js.map +1 -0
  23. package/lib/index.d.ts +6 -0
  24. package/lib/index.d.ts.map +1 -0
  25. package/lib/index.js +17 -0
  26. package/lib/index.js.map +1 -0
  27. package/lib/mockSdk.d.ts +22 -0
  28. package/lib/mockSdk.d.ts.map +1 -0
  29. package/lib/mockSdk.js +208 -0
  30. package/lib/mockSdk.js.map +1 -0
  31. package/lib/qrcode/cipher.d.ts +12 -0
  32. package/lib/qrcode/cipher.d.ts.map +1 -0
  33. package/lib/qrcode/cipher.js +52 -0
  34. package/lib/qrcode/cipher.js.map +1 -0
  35. package/lib/qrcode/cipher.test.d.ts +2 -0
  36. package/lib/qrcode/cipher.test.d.ts.map +1 -0
  37. package/lib/qrcode/cipher.test.js +31 -0
  38. package/lib/qrcode/cipher.test.js.map +1 -0
  39. package/lib/qrcode/index.d.ts +70 -0
  40. package/lib/qrcode/index.d.ts.map +1 -0
  41. package/lib/qrcode/index.js +309 -0
  42. package/lib/qrcode/index.js.map +1 -0
  43. package/lib/qrcode/index.test.d.ts +2 -0
  44. package/lib/qrcode/index.test.d.ts.map +1 -0
  45. package/lib/qrcode/index.test.js +131 -0
  46. package/lib/qrcode/index.test.js.map +1 -0
  47. package/lib/qrcode/types.d.ts +69 -0
  48. package/lib/qrcode/types.d.ts.map +1 -0
  49. package/lib/qrcode/types.js +3 -0
  50. package/lib/qrcode/types.js.map +1 -0
  51. package/lib/sdk.d.ts +31 -0
  52. package/lib/sdk.d.ts.map +1 -0
  53. package/lib/sdk.js +380 -0
  54. package/lib/sdk.js.map +1 -0
  55. package/lib/store.d.ts +71 -0
  56. package/lib/store.d.ts.map +1 -0
  57. package/lib/store.js +62 -0
  58. package/lib/store.js.map +1 -0
  59. package/lib/types.d.ts +181 -0
  60. package/lib/types.d.ts.map +1 -0
  61. package/lib/types.js +10 -0
  62. package/lib/types.js.map +1 -0
  63. package/lib-es/HWDeviceProvider.d.ts +25 -0
  64. package/lib-es/HWDeviceProvider.d.ts.map +1 -0
  65. package/lib-es/HWDeviceProvider.js +81 -0
  66. package/lib-es/HWDeviceProvider.js.map +1 -0
  67. package/lib-es/api.d.ts +77 -0
  68. package/lib-es/api.d.ts.map +1 -0
  69. package/lib-es/api.js +145 -0
  70. package/lib-es/api.js.map +1 -0
  71. package/lib-es/auth.d.ts +3 -0
  72. package/lib-es/auth.d.ts.map +1 -0
  73. package/lib-es/auth.js +75 -0
  74. package/lib-es/auth.js.map +1 -0
  75. package/lib-es/errors.d.ts +40 -0
  76. package/lib-es/errors.d.ts.map +1 -0
  77. package/lib-es/errors.js +15 -0
  78. package/lib-es/errors.js.map +1 -0
  79. package/lib-es/index.d.ts +6 -0
  80. package/lib-es/index.d.ts.map +1 -0
  81. package/lib-es/index.js +13 -0
  82. package/lib-es/index.js.map +1 -0
  83. package/lib-es/mockSdk.d.ts +22 -0
  84. package/lib-es/mockSdk.d.ts.map +1 -0
  85. package/lib-es/mockSdk.js +201 -0
  86. package/lib-es/mockSdk.js.map +1 -0
  87. package/lib-es/qrcode/cipher.d.ts +12 -0
  88. package/lib-es/qrcode/cipher.d.ts.map +1 -0
  89. package/lib-es/qrcode/cipher.js +44 -0
  90. package/lib-es/qrcode/cipher.js.map +1 -0
  91. package/lib-es/qrcode/cipher.test.d.ts +2 -0
  92. package/lib-es/qrcode/cipher.test.d.ts.map +1 -0
  93. package/lib-es/qrcode/cipher.test.js +29 -0
  94. package/lib-es/qrcode/cipher.test.js.map +1 -0
  95. package/lib-es/qrcode/index.d.ts +70 -0
  96. package/lib-es/qrcode/index.d.ts.map +1 -0
  97. package/lib-es/qrcode/index.js +301 -0
  98. package/lib-es/qrcode/index.js.map +1 -0
  99. package/lib-es/qrcode/index.test.d.ts +2 -0
  100. package/lib-es/qrcode/index.test.d.ts.map +1 -0
  101. package/lib-es/qrcode/index.test.js +126 -0
  102. package/lib-es/qrcode/index.test.js.map +1 -0
  103. package/lib-es/qrcode/types.d.ts +69 -0
  104. package/lib-es/qrcode/types.d.ts.map +1 -0
  105. package/lib-es/qrcode/types.js +2 -0
  106. package/lib-es/qrcode/types.js.map +1 -0
  107. package/lib-es/sdk.d.ts +31 -0
  108. package/lib-es/sdk.d.ts.map +1 -0
  109. package/lib-es/sdk.js +371 -0
  110. package/lib-es/sdk.js.map +1 -0
  111. package/lib-es/store.d.ts +71 -0
  112. package/lib-es/store.d.ts.map +1 -0
  113. package/lib-es/store.js +51 -0
  114. package/lib-es/store.js.map +1 -0
  115. package/lib-es/types.d.ts +181 -0
  116. package/lib-es/types.d.ts.map +1 -0
  117. package/lib-es/types.js +7 -0
  118. package/lib-es/types.js.map +1 -0
  119. package/mocks/scenarios/addSameMemberMultipleTimes.json +426 -0
  120. package/mocks/scenarios/create2trustchainInARow.json +616 -0
  121. package/mocks/scenarios/getOrCreateTransactionCases.json +591 -0
  122. package/mocks/scenarios/member3implicitlyAdded.json +648 -0
  123. package/mocks/scenarios/membersManySelfAdd.json +1427 -0
  124. package/mocks/scenarios/randomMemberTryToDestroy.json +371 -0
  125. package/mocks/scenarios/removeMemberWithTheWrongSeed.json +510 -0
  126. package/mocks/scenarios/removedMemberEjectedOnDeletedTrustchain.json +481 -0
  127. package/mocks/scenarios/removedMemberEjectedOnGetMembers.json +648 -0
  128. package/mocks/scenarios/removedMemberEjectedOnRestore.json +648 -0
  129. package/mocks/scenarios/removingAMemberCreatesAnInteraction.json +593 -0
  130. package/mocks/scenarios/removingYourselfIsForbidden.json +397 -0
  131. package/mocks/scenarios/success.json +978 -0
  132. package/mocks/scenarios/tokenExpires.json +371 -0
  133. package/mocks/scenarios/twoAddMembersFollowedByDeviceAdd.json +705 -0
  134. package/mocks/scenarios/userRefusesAuth.json +40 -0
  135. package/mocks/scenarios/userRefusesRemoveMember.json +542 -0
  136. package/package.json +91 -0
  137. package/scripts/README.md +15 -0
  138. package/scripts/e2e.ts +57 -0
  139. package/src/HWDeviceProvider.ts +105 -0
  140. package/src/__tests__/integration/mock.sdk.test.ts +47 -0
  141. package/src/__tests__/integration/sdk.test.ts +20 -0
  142. package/src/__tests__/tsconfig.json +8 -0
  143. package/src/__tests__/unit/sdk.test.ts +236 -0
  144. package/src/api.ts +202 -0
  145. package/src/auth.ts +81 -0
  146. package/src/errors.ts +18 -0
  147. package/src/index.ts +20 -0
  148. package/src/mockSdk.ts +253 -0
  149. package/src/qrcode/cipher.test.ts +30 -0
  150. package/src/qrcode/cipher.ts +61 -0
  151. package/src/qrcode/index.test.ts +138 -0
  152. package/src/qrcode/index.ts +394 -0
  153. package/src/qrcode/types.ts +70 -0
  154. package/src/sdk.ts +542 -0
  155. package/src/store.ts +99 -0
  156. package/src/types.ts +242 -0
  157. package/tests/scenarios/_template.ts +18 -0
  158. package/tests/scenarios/addSameMemberMultipleTimes.ts +20 -0
  159. package/tests/scenarios/create2trustchainInARow.ts +14 -0
  160. package/tests/scenarios/getOrCreateTransactionCases.ts +74 -0
  161. package/tests/scenarios/member3implicitlyAdded.ts +51 -0
  162. package/tests/scenarios/membersManySelfAdd.ts +18 -0
  163. package/tests/scenarios/randomMemberTryToDestroy.ts +23 -0
  164. package/tests/scenarios/removeMemberWithTheWrongSeed.ts +28 -0
  165. package/tests/scenarios/removedMemberEjectedOnDeletedTrustchain.ts +31 -0
  166. package/tests/scenarios/removedMemberEjectedOnGetMembers.ts +29 -0
  167. package/tests/scenarios/removedMemberEjectedOnRestore.ts +31 -0
  168. package/tests/scenarios/removingAMemberCreatesAnInteraction.ts +42 -0
  169. package/tests/scenarios/removingYourselfIsForbidden.ts +11 -0
  170. package/tests/scenarios/success.ts +94 -0
  171. package/tests/scenarios/tokenExpires.ts +20 -0
  172. package/tests/scenarios/twoAddMembersFollowedByDeviceAdd.ts +49 -0
  173. package/tests/scenarios/userRefusesAuth.ts +28 -0
  174. package/tests/scenarios/userRefusesRemoveMember.ts +66 -0
  175. package/tests/test-helpers/recordTrustchainSdkTests.ts +178 -0
  176. package/tests/test-helpers/replayTrustchainSdkTests.ts +141 -0
  177. package/tests/test-helpers/types.ts +45 -0
  178. package/tests/tsconfig.json +8 -0
  179. package/tsconfig.json +15 -0
package/lib/store.js ADDED
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.memberCredentialsSelector = exports.trustchainSelector = exports.trustchainStoreSelector = exports.setMemberCredentials = exports.setTrustchain = exports.resetTrustchainStore = exports.importTrustchainStoreState = exports.trustchainHandlers = exports.TrustchainHandlerType = exports.trustchainStoreActionTypePrefix = exports.getInitialStore = exports.INITIAL_STATE = void 0;
4
+ exports.INITIAL_STATE = {
5
+ trustchain: null,
6
+ memberCredentials: null,
7
+ };
8
+ const getInitialStore = () => {
9
+ return exports.INITIAL_STATE;
10
+ };
11
+ exports.getInitialStore = getInitialStore;
12
+ exports.trustchainStoreActionTypePrefix = "TRUSTCHAIN_STORE_";
13
+ var TrustchainHandlerType;
14
+ (function (TrustchainHandlerType) {
15
+ TrustchainHandlerType["TRUSTCHAIN_STORE_IMPORT_STATE"] = "TRUSTCHAIN_STORE_IMPORT_STATE";
16
+ TrustchainHandlerType["TRUSTCHAIN_STORE_RESET"] = "TRUSTCHAIN_STORE_RESET";
17
+ TrustchainHandlerType["TRUSTCHAIN_STORE_SET_TRUSTCHAIN"] = "TRUSTCHAIN_STORE_SET_TRUSTCHAIN";
18
+ TrustchainHandlerType["TRUSTCHAIN_STORE_SET_MEMBER_CREDENTIALS"] = "TRUSTCHAIN_STORE_SET_MEMBER_CREDENTIALS";
19
+ })(TrustchainHandlerType || (exports.TrustchainHandlerType = TrustchainHandlerType = {}));
20
+ exports.trustchainHandlers = {
21
+ TRUSTCHAIN_STORE_IMPORT_STATE: (_, { payload: { trustchain } }) => {
22
+ return trustchain;
23
+ },
24
+ TRUSTCHAIN_STORE_RESET: () => {
25
+ return Object.assign({}, (0, exports.getInitialStore)());
26
+ },
27
+ TRUSTCHAIN_STORE_SET_TRUSTCHAIN: (state, { payload: { trustchain } }) => {
28
+ return Object.assign(Object.assign({}, state), { trustchain });
29
+ },
30
+ TRUSTCHAIN_STORE_SET_MEMBER_CREDENTIALS: (state, { payload: { memberCredentials } }) => {
31
+ return Object.assign(Object.assign({}, state), { memberCredentials });
32
+ },
33
+ };
34
+ // actions
35
+ const importTrustchainStoreState = (trustchain) => ({
36
+ type: `${exports.trustchainStoreActionTypePrefix}IMPORT_STATE`,
37
+ payload: { trustchain },
38
+ });
39
+ exports.importTrustchainStoreState = importTrustchainStoreState;
40
+ const resetTrustchainStore = () => ({
41
+ type: `${exports.trustchainStoreActionTypePrefix}RESET`,
42
+ });
43
+ exports.resetTrustchainStore = resetTrustchainStore;
44
+ const setTrustchain = (trustchain) => ({
45
+ type: `${exports.trustchainStoreActionTypePrefix}SET_TRUSTCHAIN`,
46
+ payload: { trustchain },
47
+ });
48
+ exports.setTrustchain = setTrustchain;
49
+ const setMemberCredentials = (memberCredentials) => ({
50
+ type: `${exports.trustchainStoreActionTypePrefix}SET_MEMBER_CREDENTIALS`,
51
+ payload: { memberCredentials },
52
+ });
53
+ exports.setMemberCredentials = setMemberCredentials;
54
+ // Local Selectors
55
+ // FIXME: these are not actually local Selector, a localSelector takes a TrustchainStore in param. we will need to rework this.
56
+ const trustchainStoreSelector = (state) => state.trustchain;
57
+ exports.trustchainStoreSelector = trustchainStoreSelector;
58
+ const trustchainSelector = (state) => state.trustchain.trustchain;
59
+ exports.trustchainSelector = trustchainSelector;
60
+ const memberCredentialsSelector = (state) => state.trustchain.memberCredentials;
61
+ exports.memberCredentialsSelector = memberCredentialsSelector;
62
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":";;;AAaa,QAAA,aAAa,GAAoB;IAC5C,UAAU,EAAE,IAAI;IAChB,iBAAiB,EAAE,IAAI;CACxB,CAAC;AAEK,MAAM,eAAe,GAAG,GAAoB,EAAE;IACnD,OAAO,qBAAa,CAAC;AACvB,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEW,QAAA,+BAA+B,GAAG,mBAAmB,CAAC;AAEnE,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAC/B,wFAAgF,CAAA;IAChF,0EAAkE,CAAA;IAClE,4FAAoF,CAAA;IACpF,4GAAoG,CAAA;AACtG,CAAC,EALW,qBAAqB,qCAArB,qBAAqB,QAKhC;AAsBY,QAAA,kBAAkB,GAAuB;IACpD,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;QAChE,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,sBAAsB,EAAE,GAAoB,EAAE;QAC5C,yBAAY,IAAA,uBAAe,GAAE,EAAG;IAClC,CAAC;IACD,+BAA+B,EAAE,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;QACtE,uCAAY,KAAK,KAAE,UAAU,IAAG;IAClC,CAAC;IACD,uCAAuC,EAAE,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE;QACrF,uCAAY,KAAK,KAAE,iBAAiB,IAAG;IACzC,CAAC;CACF,CAAC;AAEF,UAAU;AAEH,MAAM,0BAA0B,GAAG,CAAC,UAA2B,EAAE,EAAE,CAAC,CAAC;IAC1E,IAAI,EAAE,GAAG,uCAA+B,cAAc;IACtD,OAAO,EAAE,EAAE,UAAU,EAAE;CACxB,CAAC,CAAC;AAHU,QAAA,0BAA0B,8BAGpC;AAEI,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,EAAE,GAAG,uCAA+B,OAAO;CAChD,CAAC,CAAC;AAFU,QAAA,oBAAoB,wBAE9B;AAEI,MAAM,aAAa,GAAG,CAAC,UAAsB,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,EAAE,GAAG,uCAA+B,gBAAgB;IACxD,OAAO,EAAE,EAAE,UAAU,EAAE;CACxB,CAAC,CAAC;AAHU,QAAA,aAAa,iBAGvB;AAEI,MAAM,oBAAoB,GAAG,CAAC,iBAAoC,EAAE,EAAE,CAAC,CAAC;IAC7E,IAAI,EAAE,GAAG,uCAA+B,wBAAwB;IAChE,OAAO,EAAE,EAAE,iBAAiB,EAAE;CAC/B,CAAC,CAAC;AAHU,QAAA,oBAAoB,wBAG9B;AAEH,kBAAkB;AAClB,+HAA+H;AAExH,MAAM,uBAAuB,GAAG,CAAC,KAAsC,EAAmB,EAAE,CACjG,KAAK,CAAC,UAAU,CAAC;AADN,QAAA,uBAAuB,2BACjB;AAEZ,MAAM,kBAAkB,GAAG,CAAC,KAAsC,EAAqB,EAAE,CAC9F,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;AADjB,QAAA,kBAAkB,sBACD;AAEvB,MAAM,yBAAyB,GAAG,CAAC,KAEzC,EAA4B,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC;AAFtD,QAAA,yBAAyB,6BAE6B"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,181 @@
1
+ import { Observable } from "rxjs";
2
+ import Transport from "@ledgerhq/hw-transport";
3
+ import { TrustchainsResponse } from "./api";
4
+ /**
5
+ * The JWT is a JSON Web Token that is used to authenticate the user.
6
+ */
7
+ export type JWT = {
8
+ accessToken: string;
9
+ permissions: {
10
+ [trustchainId: string]: {
11
+ [path: string]: string[];
12
+ };
13
+ };
14
+ };
15
+ /**
16
+ * A function which allow all interactions with the hardware device.
17
+ */
18
+ export type WithDevice = (deviceId: string, options?: {
19
+ openTimeoutMs?: number;
20
+ }) => <T>(fn: (transport: Transport) => Observable<T>) => Observable<T>;
21
+ /**
22
+ * A Trustchain contains the identifier and the contextual data we need to manage members and encrypt/decrypt data.
23
+ */
24
+ export type Trustchain = {
25
+ /**
26
+ * The immutable id of the trustchain root
27
+ */
28
+ rootId: string;
29
+ /**
30
+ * The secret used to encrypt/decrypt the wallet sync data
31
+ */
32
+ walletSyncEncryptionKey: string;
33
+ /**
34
+ * The derivation path on which the current walletSyncEncryptionKey value is stored
35
+ */
36
+ applicationPath: string;
37
+ };
38
+ /**
39
+ * The Trustchain member credentials are stored on each client, with the privatekey only known by the current client.
40
+ */
41
+ export type MemberCredentials = {
42
+ /**
43
+ * The public key of the member (in hexadecimal)
44
+ */
45
+ pubkey: string;
46
+ /**
47
+ * The private key of the member (in hexadecimal)
48
+ */
49
+ privatekey: string;
50
+ };
51
+ /**
52
+ * A member of the trustchain
53
+ */
54
+ export type TrustchainMember = {
55
+ /**
56
+ * The id of the member. It corresponds to the MemberCredentials.pubkey
57
+ */
58
+ id: string;
59
+ /**
60
+ * The name of the member as displayed in the UI
61
+ */
62
+ name: string;
63
+ /**
64
+ * a technical permissions of the member. it will often just be Permissions.OWNER
65
+ */
66
+ permissions: number;
67
+ };
68
+ /**
69
+ * The TrustchainSDKContext is a context that is used to initialize the TrustchainSDK.
70
+ */
71
+ export type TrustchainSDKContext = {
72
+ applicationId: number;
73
+ name: string;
74
+ apiBaseUrl: string;
75
+ };
76
+ /**
77
+ * provide global callbacks for specific lifecycles.
78
+ * this allows us to decouple trustchain with the rest of Ledger Live.
79
+ * For now, we only introduce very specific hooks we need.
80
+ */
81
+ export type TrustchainLifecycle = {
82
+ /**
83
+ * called when a trustchain rotation is occuring
84
+ * the first function is called when the rotation is starting
85
+ * the second function is called when the rotation is done.
86
+ *
87
+ * in that case, we typically want to delete all other resources depending on it.
88
+ * we do this with the existing jwt token before refreshing it.
89
+ */
90
+ onTrustchainRotation: (trustchainSdk: TrustchainSDK, oldTrustchain: Trustchain, memberCredentials: MemberCredentials) => Promise<(newTrustchain: Trustchain) => Promise<void>>;
91
+ };
92
+ export declare enum TrustchainResultType {
93
+ created = "created",
94
+ updated = "updated",
95
+ restored = "restored"
96
+ }
97
+ /**
98
+ * the trustchain with a result type indicating what happened during getOrCreateTrustchain
99
+ */
100
+ export type TrustchainResult = {
101
+ type: TrustchainResultType.created;
102
+ trustchain: Trustchain;
103
+ } | {
104
+ type: TrustchainResultType.updated;
105
+ trustchain: Trustchain;
106
+ } | {
107
+ type: TrustchainResultType.restored;
108
+ trustchain: Trustchain;
109
+ };
110
+ /**
111
+ * cache (default): the SDK will use the cached JWT if it's still valid, otherwise it will refresh it.
112
+ * refresh: the SDK will always refresh the JWT if possible.
113
+ * no-cache: the SDK will always request a new JWT.
114
+ */
115
+ export type AuthCachePolicy = "no-cache" | "refresh" | "cache";
116
+ /**
117
+ * The main interface for the UI to interact with the trustchain protocol.
118
+ *
119
+ * @example
120
+ *
121
+ * import { sdk } from "@ledgerhq/ledger-key-ring-protocol";
122
+ *
123
+ * sdk.getOrCreateTrustchain(deviceId, memberCredentials).then(trustchain => console.log(trustchain));
124
+ */
125
+ export interface TrustchainSDK {
126
+ /**
127
+ * Generate the live credentials that represents a Live instance, member of the trustchain.
128
+ * This method is expected to be used the first time Ledger Live is opened (if Live never generated them before) and then persisted over the future user sessions of Ledger Live in order for the member to be able to authenticate and manage the trustchain.
129
+ */
130
+ initMemberCredentials(): Promise<MemberCredentials>;
131
+ /**
132
+ * Access a JWT from the TrustchainSDK. manage the reauthentication if needed.
133
+ * A trustchain must have been created and the Live instance must have been added as a member.
134
+ * The returned token will typically be used for regular operations like wallet sync.
135
+ */
136
+ withAuth<T>(trustchain: Trustchain, memberCredentials: MemberCredentials, f: (jwt: JWT) => Promise<T>, policy?: AuthCachePolicy, ignorePermissionsChecks?: boolean): Promise<T>;
137
+ /**
138
+ * This method will either create the required trustchains (root and application) or restore them.
139
+ * The returned trustchain will be initialized on the root level and also will have the branch derivation corresponding to the contextual applicationId.
140
+ * It will also have the wallet sync encryption key initialized.
141
+ * The latest jwt is also returned because it was potentially updated during the process.
142
+ */
143
+ getOrCreateTrustchain(deviceId: string, memberCredentials: MemberCredentials, callbacks?: GetOrCreateTrustchainCallbacks, topic?: Uint8Array, currentTrustchain?: Trustchain): Promise<TrustchainResult>;
144
+ /**
145
+ * Restore the current trustchain encryption key, typically due to a key rotation.
146
+ */
147
+ restoreTrustchain(trustchain: Trustchain, memberCredentials: MemberCredentials): Promise<Trustchain>;
148
+ /**
149
+ * list the current members of the application trustchain
150
+ */
151
+ getMembers(trustchain: Trustchain, memberCredentials: MemberCredentials): Promise<TrustchainMember[]>;
152
+ /**
153
+ * remove a member from the application trustchain
154
+ */
155
+ removeMember(deviceId: string, trustchain: Trustchain, memberCredentials: MemberCredentials, member: TrustchainMember, callbacks?: TrustchainDeviceCallbacks): Promise<Trustchain>;
156
+ /**
157
+ * add a member to the application trustchain
158
+ */
159
+ addMember(trustchain: Trustchain, memberCredentials: MemberCredentials, member: TrustchainMember): Promise<void>;
160
+ /**
161
+ * destroy the trustchain
162
+ */
163
+ destroyTrustchain(trustchain: Trustchain, memberCredentials: MemberCredentials): Promise<void>;
164
+ /**
165
+ * encrypt data with the trustchain encryption key
166
+ */
167
+ encryptUserData(trustchain: Trustchain, obj: object): Promise<Uint8Array>;
168
+ /**
169
+ * decrypt data with the trustchain encryption key
170
+ */
171
+ decryptUserData(trustchain: Trustchain, data: Uint8Array): Promise<Uint8Array>;
172
+ invalidateJwt(): void;
173
+ }
174
+ export interface TrustchainDeviceCallbacks {
175
+ onStartRequestUserInteraction?: () => void;
176
+ onEndRequestUserInteraction?: () => void;
177
+ }
178
+ export interface GetOrCreateTrustchainCallbacks extends TrustchainDeviceCallbacks {
179
+ onInitialResponse?: (trustchains: TrustchainsResponse) => void;
180
+ }
181
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/lib/types.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrustchainResultType = void 0;
4
+ var TrustchainResultType;
5
+ (function (TrustchainResultType) {
6
+ TrustchainResultType["created"] = "created";
7
+ TrustchainResultType["updated"] = "updated";
8
+ TrustchainResultType["restored"] = "restored";
9
+ })(TrustchainResultType || (exports.TrustchainResultType = TrustchainResultType = {}));
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAwGA,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,2CAAmB,CAAA;IACnB,2CAAmB,CAAA;IACnB,6CAAqB,CAAA;AACvB,CAAC,EAJW,oBAAoB,oCAApB,oBAAoB,QAI/B"}
@@ -0,0 +1,25 @@
1
+ import { ApduDevice } from "@ledgerhq/hw-ledger-key-ring-protocol/ApduDevice";
2
+ import { AuthCachePolicy, JWT, TrustchainDeviceCallbacks, WithDevice } from "./types";
3
+ export declare class HWDeviceProvider {
4
+ /**
5
+ * TODO withDevice should be imported statically from @ledgerhq/live-common/hw/deviceAccess
6
+ *
7
+ * but ATM making @ledgerhq/live-common a dependency of @ledgerhq/ledger-key-ring-protocol causes:
8
+ * > Turbo error: Invalid package dependency graph: cyclic dependency detected:
9
+ * > @ledgerhq/ledger-key-ring-protocol,@ledgerhq/live-wallet,@ledgerhq/live-common
10
+ *
11
+ * Maybe hw/deviceAccess.ts and hw/index.ts could be moved to @ledgerhq/devices
12
+ * This would break the cyclic dependency as @ledgerhq/live-common would depend on @ledgerhq/devices
13
+ * but not the other way around.
14
+ */
15
+ private withDevice;
16
+ private jwt?;
17
+ private api;
18
+ constructor(apiBaseURL: string, withDevice: WithDevice);
19
+ withJwt<T>(deviceId: string, job: (jwt: JWT) => Promise<T>, policy?: AuthCachePolicy, callbacks?: TrustchainDeviceCallbacks): Promise<T>;
20
+ withHw<T>(deviceId: string, job: (hw: ApduDevice) => Promise<T>, callbacks?: TrustchainDeviceCallbacks): Promise<T>;
21
+ refreshJwt(deviceId: string, callbacks?: TrustchainDeviceCallbacks): Promise<void>;
22
+ clearJwt(): void;
23
+ private _authWithDevice;
24
+ }
25
+ //# sourceMappingURL=HWDeviceProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HWDeviceProvider.d.ts","sourceRoot":"","sources":["../src/HWDeviceProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kDAAkD,CAAC;AAK9E,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGtF,qBAAa,gBAAgB;IAC3B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAM;IAClB,OAAO,CAAC,GAAG,CAA4B;gBAE3B,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAK/C,OAAO,CAAC,CAAC,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7B,MAAM,CAAC,EAAE,eAAe,EACxB,SAAS,CAAC,EAAE,yBAAyB,GACpC,OAAO,CAAC,CAAC,CAAC;IAaA,MAAM,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EACnC,SAAS,CAAC,EAAE,yBAAyB,GACpC,OAAO,CAAC,CAAC,CAAC;IA0BA,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF,QAAQ;YAID,eAAe;CAiB9B"}
@@ -0,0 +1,81 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { from, lastValueFrom } from "rxjs";
11
+ import { UserRefusedOnDevice } from "@ledgerhq/errors";
12
+ import { StatusCodes, TransportStatusError } from "@ledgerhq/hw-transport";
13
+ import { crypto, device } from "@ledgerhq/hw-ledger-key-ring-protocol";
14
+ import getApi from "./api";
15
+ import { genericWithJWT } from "./auth";
16
+ import { TrustchainNotAllowed } from "./errors";
17
+ export class HWDeviceProvider {
18
+ constructor(apiBaseURL, withDevice) {
19
+ this.api = getApi(apiBaseURL);
20
+ this.withDevice = withDevice;
21
+ }
22
+ withJwt(deviceId, job, policy, callbacks) {
23
+ return genericWithJWT(jwt => {
24
+ this.jwt = jwt;
25
+ return job(jwt);
26
+ }, this.jwt, () => this._authWithDevice(deviceId, callbacks), (jwt) => this.api.refreshAuth(jwt), policy);
27
+ }
28
+ withHw(deviceId, job, callbacks) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ var _a, _b;
31
+ (_a = callbacks === null || callbacks === void 0 ? void 0 : callbacks.onStartRequestUserInteraction) === null || _a === void 0 ? void 0 : _a.call(callbacks);
32
+ const runWithDevice = this.withDevice(deviceId);
33
+ try {
34
+ return yield lastValueFrom(runWithDevice(transport => from(job(device.apdu(transport)))));
35
+ }
36
+ catch (error) {
37
+ if (!(error instanceof TransportStatusError)) {
38
+ throw error;
39
+ }
40
+ switch (error.statusCode) {
41
+ case StatusCodes.USER_REFUSED_ON_DEVICE:
42
+ case StatusCodes.CONDITIONS_OF_USE_NOT_SATISFIED:
43
+ throw new UserRefusedOnDevice();
44
+ case StatusCodes.TRUSTCHAIN_WRONG_SEED:
45
+ this.clearJwt();
46
+ throw new TrustchainNotAllowed();
47
+ default:
48
+ throw error;
49
+ }
50
+ }
51
+ finally {
52
+ (_b = callbacks === null || callbacks === void 0 ? void 0 : callbacks.onEndRequestUserInteraction) === null || _b === void 0 ? void 0 : _b.call(callbacks);
53
+ }
54
+ });
55
+ }
56
+ refreshJwt(deviceId, callbacks) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ this.jwt = yield this.withJwt(deviceId, this.api.refreshAuth, "cache", callbacks);
59
+ });
60
+ }
61
+ clearJwt() {
62
+ this.jwt = undefined;
63
+ }
64
+ _authWithDevice(deviceId, callbacks) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const challenge = yield this.api.getAuthenticationChallenge();
67
+ const data = crypto.from_hex(challenge.tlv);
68
+ const seedId = yield this.withHw(deviceId, hw => hw.getSeedId(data), callbacks);
69
+ const signature = crypto.to_hex(seedId.signature);
70
+ return this.api.postChallengeResponse({
71
+ challenge: challenge.json,
72
+ signature: {
73
+ credential: seedId.pubkeyCredential.toJSON(),
74
+ signature,
75
+ attestation: crypto.to_hex(seedId.attestationResult),
76
+ },
77
+ });
78
+ });
79
+ }
80
+ }
81
+ //# sourceMappingURL=HWDeviceProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HWDeviceProvider.js","sourceRoot":"","sources":["../src/HWDeviceProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { JWT } from "./types";
2
+ export type StatusAPIResponse = {
3
+ name: string;
4
+ version: string;
5
+ };
6
+ export type APIJWT = {
7
+ access_token: string;
8
+ permissions: {
9
+ [trustchainId: string]: {
10
+ [path: string]: string[];
11
+ };
12
+ };
13
+ };
14
+ export type Challenge = {
15
+ version: number;
16
+ challenge: {
17
+ data: string;
18
+ expiry: string;
19
+ };
20
+ host: string;
21
+ rp: {
22
+ credential: {
23
+ version: number;
24
+ curveId: number;
25
+ signAlgorithm: number;
26
+ publicKey: string;
27
+ };
28
+ signature: string;
29
+ }[];
30
+ protocolVersion: {
31
+ major: number;
32
+ minor: number;
33
+ patch: number;
34
+ };
35
+ };
36
+ export type ChallengeSignature = {
37
+ credential: {
38
+ version: number;
39
+ curveId: number;
40
+ signAlgorithm: number;
41
+ publicKey: string;
42
+ };
43
+ signature: string;
44
+ attestation: string;
45
+ };
46
+ export type TrustchainsResponse = {
47
+ [trustchainId: string]: {
48
+ [path: string]: string[];
49
+ };
50
+ };
51
+ export type TrustchainResponse = {
52
+ [key: string]: string;
53
+ };
54
+ export type PutCommandsRequest = {
55
+ path: string;
56
+ blocks: string[];
57
+ };
58
+ declare const getApi: (apiBaseURL: string) => {
59
+ getAuthenticationChallenge: () => Promise<{
60
+ json: Challenge;
61
+ tlv: string;
62
+ }>;
63
+ postChallengeResponse: (request: {
64
+ challenge: Challenge;
65
+ signature: ChallengeSignature;
66
+ }) => Promise<JWT>;
67
+ refreshAuth: (jwt: JWT) => Promise<JWT>;
68
+ getTrustchains: (jwt: JWT) => Promise<TrustchainsResponse>;
69
+ getTrustchain: (jwt: JWT, trustchain_id: string) => Promise<TrustchainResponse>;
70
+ postDerivation: (jwt: JWT, trustchain_id: string, commandStream: string) => Promise<void>;
71
+ postSeed: (jwt: JWT, commandStream: string) => Promise<void>;
72
+ putCommands: (jwt: JWT, trustchain_id: string, request: PutCommandsRequest) => Promise<void>;
73
+ deleteTrustchain: (jwt: JWT, trustchain_id: string) => Promise<void>;
74
+ fetchStatus: () => Promise<StatusAPIResponse>;
75
+ };
76
+ export default getApi;
77
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,CAAC,YAAY,EAAE,MAAM,GAAG;YACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;SAC1B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE;QACF,UAAU,EAAE;YACV,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,MAAM,CAAC;YACtB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,SAAS,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,eAAe,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,YAAY,EAAE,MAAM,GAAG;QACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,MAAM,eAAgB,MAAM;sCACa,QAAQ;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;qCAQxC;QAC5C,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,kBAAkB,CAAC;KAC/B,KAAG,QAAQ,GAAG,CAAC;uBAYgB,GAAG,KAAG,QAAQ,GAAG,CAAC;0BAcf,GAAG,KAAG,QAAQ,mBAAmB,CAAC;yBAWnC,GAAG,iBAAiB,MAAM,KAAG,QAAQ,kBAAkB,CAAC;0BAYnF,GAAG,iBACO,MAAM,iBACN,MAAM,KACpB,QAAQ,IAAI,CAAC;oBAYa,GAAG,iBAAiB,MAAM,KAAG,QAAQ,IAAI,CAAC;uBAahE,GAAG,iBACO,MAAM,WACZ,kBAAkB,KAC1B,QAAQ,IAAI,CAAC;4BAWqB,GAAG,iBAAiB,MAAM,KAAG,QAAQ,IAAI,CAAC;uBAUjD,QAAQ,iBAAiB,CAAC;CAoBzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/lib-es/api.js ADDED
@@ -0,0 +1,145 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import network from "@ledgerhq/live-network";
11
+ const getApi = (apiBaseURL) => {
12
+ function getAuthenticationChallenge() {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ const { data } = yield network({
15
+ url: `${apiBaseURL}/v1/challenge`,
16
+ method: "GET",
17
+ });
18
+ return data;
19
+ });
20
+ }
21
+ function postChallengeResponse(request) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const { data } = yield network({
24
+ url: `${apiBaseURL}/v1/authenticate`,
25
+ method: "POST",
26
+ data: request,
27
+ });
28
+ return {
29
+ accessToken: data.access_token,
30
+ permissions: data.permissions,
31
+ };
32
+ });
33
+ }
34
+ function refreshAuth(jwt) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const { data } = yield network({
37
+ url: `${apiBaseURL}/v1/refresh`,
38
+ method: "GET",
39
+ headers: {
40
+ Authorization: `Bearer ${jwt.accessToken}`,
41
+ },
42
+ });
43
+ return {
44
+ accessToken: data.access_token,
45
+ permissions: data.permissions,
46
+ };
47
+ });
48
+ }
49
+ function getTrustchains(jwt) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ const { data } = yield network({
52
+ url: `${apiBaseURL}/v1/trustchains`,
53
+ method: "GET",
54
+ headers: {
55
+ Authorization: `Bearer ${jwt.accessToken}`,
56
+ },
57
+ });
58
+ return data;
59
+ });
60
+ }
61
+ function getTrustchain(jwt, trustchain_id) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ const { data } = yield network({
64
+ url: `${apiBaseURL}/v1/trustchain/${trustchain_id}`,
65
+ method: "GET",
66
+ headers: {
67
+ Authorization: `Bearer ${jwt.accessToken}`,
68
+ },
69
+ });
70
+ return data;
71
+ });
72
+ }
73
+ function postDerivation(jwt, trustchain_id, commandStream) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ yield network({
76
+ url: `${apiBaseURL}/v1/trustchain/${trustchain_id}/derivation`,
77
+ method: "POST",
78
+ headers: {
79
+ Authorization: `Bearer ${jwt.accessToken}`,
80
+ "Content-Type": "application/json",
81
+ },
82
+ data: commandStream,
83
+ });
84
+ });
85
+ }
86
+ function postSeed(jwt, commandStream) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ yield network({
89
+ url: `${apiBaseURL}/v1/seed`,
90
+ method: "POST",
91
+ headers: {
92
+ "Content-Type": "application/json",
93
+ Authorization: `Bearer ${jwt.accessToken}`,
94
+ },
95
+ data: commandStream,
96
+ });
97
+ });
98
+ }
99
+ function putCommands(jwt, trustchain_id, request) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ yield network({
102
+ url: `${apiBaseURL}/v1/trustchain/${trustchain_id}/commands`,
103
+ method: "PUT",
104
+ headers: {
105
+ Authorization: `Bearer ${jwt.accessToken}`,
106
+ },
107
+ data: request,
108
+ });
109
+ });
110
+ }
111
+ function deleteTrustchain(jwt, trustchain_id) {
112
+ return __awaiter(this, void 0, void 0, function* () {
113
+ yield network({
114
+ url: `${apiBaseURL}/v1/trustchain/${trustchain_id}`,
115
+ method: "DELETE",
116
+ headers: {
117
+ Authorization: `Bearer ${jwt.accessToken}`,
118
+ },
119
+ });
120
+ });
121
+ }
122
+ function fetchStatus() {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ const { data } = yield network({
125
+ url: `${apiBaseURL}/_info`,
126
+ method: "GET",
127
+ });
128
+ return data;
129
+ });
130
+ }
131
+ return {
132
+ getAuthenticationChallenge,
133
+ postChallengeResponse,
134
+ refreshAuth,
135
+ getTrustchains,
136
+ getTrustchain,
137
+ postDerivation,
138
+ postSeed,
139
+ putCommands,
140
+ deleteTrustchain,
141
+ fetchStatus,
142
+ };
143
+ };
144
+ export default getApi;
145
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AuthCachePolicy, JWT } from "./types";
2
+ export declare function genericWithJWT<T>(job: (jwt: JWT) => Promise<T>, initialJWT: JWT | undefined, auth: () => Promise<JWT>, refreshAuth: (jw: JWT) => Promise<JWT>, policy?: AuthCachePolicy): Promise<T>;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAG/C,wBAAsB,cAAc,CAAC,CAAC,EACpC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7B,UAAU,EAAE,GAAG,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EACxB,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACtC,MAAM,GAAE,eAAyB,GAChC,OAAO,CAAC,CAAC,CAAC,CA2CZ"}