@cef-ebsi/cli 0.0.0-alpha.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 (159) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +32 -0
  3. package/bin/cli.js +13 -0
  4. package/dist/abi/pilot/DidRegistry-old.json +2192 -0
  5. package/dist/abi/pilot/DidRegistry.json +1081 -0
  6. package/dist/abi/pilot/DidRegistryV3.json +1081 -0
  7. package/dist/abi/pilot/SchemaSCRegistry.json +972 -0
  8. package/dist/abi/pilot/SchemaSCRegistryV2.json +473 -0
  9. package/dist/abi/pilot/Tar.json +1394 -0
  10. package/dist/abi/pilot/TarV3.json +1107 -0
  11. package/dist/abi/pilot/Timestamp.json +1091 -0
  12. package/dist/abi/pilot/TimestampV2.json +1127 -0
  13. package/dist/abi/pilot/Tir.json +896 -0
  14. package/dist/abi/pilot/TirV3.json +495 -0
  15. package/dist/abi/pilot/Tpr.json +1267 -0
  16. package/dist/abi/pilot/TprV2.json +888 -0
  17. package/dist/abi/test/DidRegistry-old.json +2192 -0
  18. package/dist/abi/test/DidRegistry.json +1081 -0
  19. package/dist/abi/test/DidRegistryV3.json +1088 -0
  20. package/dist/abi/test/SchemaSCRegistry.json +972 -0
  21. package/dist/abi/test/SchemaSCRegistryV2.json +473 -0
  22. package/dist/abi/test/Tar.json +1394 -0
  23. package/dist/abi/test/TarV3.json +1107 -0
  24. package/dist/abi/test/Timestamp.json +1091 -0
  25. package/dist/abi/test/TimestampV2.json +1127 -0
  26. package/dist/abi/test/Tir.json +896 -0
  27. package/dist/abi/test/TirV3.json +495 -0
  28. package/dist/abi/test/Tpr.json +1267 -0
  29. package/dist/abi/test/TprV2.json +888 -0
  30. package/dist/app.js +1205 -0
  31. package/dist/app.js.map +1 -0
  32. package/dist/buildParam/did.js +355 -0
  33. package/dist/buildParam/did.js.map +1 -0
  34. package/dist/buildParam/didOld.js +275 -0
  35. package/dist/buildParam/didOld.js.map +1 -0
  36. package/dist/buildParam/didV3.js +353 -0
  37. package/dist/buildParam/didV3.js.map +1 -0
  38. package/dist/buildParam/index.js +54 -0
  39. package/dist/buildParam/index.js.map +1 -0
  40. package/dist/buildParam/tar.js +240 -0
  41. package/dist/buildParam/tar.js.map +1 -0
  42. package/dist/buildParam/tarV3.js +193 -0
  43. package/dist/buildParam/tarV3.js.map +1 -0
  44. package/dist/buildParam/timestamp.js +323 -0
  45. package/dist/buildParam/timestamp.js.map +1 -0
  46. package/dist/buildParam/timestampV2.js +317 -0
  47. package/dist/buildParam/timestampV2.js.map +1 -0
  48. package/dist/buildParam/tir.js +200 -0
  49. package/dist/buildParam/tir.js.map +1 -0
  50. package/dist/buildParam/tirV3.js +104 -0
  51. package/dist/buildParam/tirV3.js.map +1 -0
  52. package/dist/buildParam/tpr.js +167 -0
  53. package/dist/buildParam/tpr.js.map +1 -0
  54. package/dist/buildParam/tprV2.js +82 -0
  55. package/dist/buildParam/tprV2.js.map +1 -0
  56. package/dist/buildParam/tsr.js +149 -0
  57. package/dist/buildParam/tsr.js.map +1 -0
  58. package/dist/buildParam/tsrV2.js +110 -0
  59. package/dist/buildParam/tsrV2.js.map +1 -0
  60. package/dist/cli.js +10 -0
  61. package/dist/cli.js.map +1 -0
  62. package/dist/commands/authorisation-v3.js +98 -0
  63. package/dist/commands/authorisation-v3.js.map +1 -0
  64. package/dist/commands/authorisation-v4.js +221 -0
  65. package/dist/commands/authorisation-v4.js.map +1 -0
  66. package/dist/commands/compute.js +374 -0
  67. package/dist/commands/compute.js.map +1 -0
  68. package/dist/commands/conformance-v3.js +745 -0
  69. package/dist/commands/conformance-v3.js.map +1 -0
  70. package/dist/commands/conformance-v4.js +767 -0
  71. package/dist/commands/conformance-v4.js.map +1 -0
  72. package/dist/commands/index.js +9 -0
  73. package/dist/commands/index.js.map +1 -0
  74. package/dist/commands/ledger-v3.js +189 -0
  75. package/dist/commands/ledger-v3.js.map +1 -0
  76. package/dist/commands/ledger-v4.js +188 -0
  77. package/dist/commands/ledger-v4.js.map +1 -0
  78. package/dist/commands/view.js +62 -0
  79. package/dist/commands/view.js.map +1 -0
  80. package/dist/config.js +910 -0
  81. package/dist/config.js.map +1 -0
  82. package/dist/index.js +7 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/interfaces/authorisation/authorisation.interface.js +2 -0
  85. package/dist/interfaces/authorisation/authorisation.interface.js.map +1 -0
  86. package/dist/interfaces/authorisation/index.js +2 -0
  87. package/dist/interfaces/authorisation/index.js.map +1 -0
  88. package/dist/interfaces/context.js +2 -0
  89. package/dist/interfaces/context.js.map +1 -0
  90. package/dist/interfaces/index.js +10 -0
  91. package/dist/interfaces/index.js.map +1 -0
  92. package/dist/interfaces/ledger/besu.interface.js +2 -0
  93. package/dist/interfaces/ledger/besu.interface.js.map +1 -0
  94. package/dist/interfaces/ledger/index.js +2 -0
  95. package/dist/interfaces/ledger/index.js.map +1 -0
  96. package/dist/interfaces/notifications/index.js +2 -0
  97. package/dist/interfaces/notifications/index.js.map +1 -0
  98. package/dist/interfaces/notifications/notifications.interface.js +2 -0
  99. package/dist/interfaces/notifications/notifications.interface.js.map +1 -0
  100. package/dist/interfaces/proxy-data-hub/attributes.interface.js +2 -0
  101. package/dist/interfaces/proxy-data-hub/attributes.interface.js.map +1 -0
  102. package/dist/interfaces/proxy-data-hub/index.js +2 -0
  103. package/dist/interfaces/proxy-data-hub/index.js.map +1 -0
  104. package/dist/interfaces/shared/index.js +5 -0
  105. package/dist/interfaces/shared/index.js.map +1 -0
  106. package/dist/interfaces/shared/jsonrpc.interface.js +2 -0
  107. package/dist/interfaces/shared/jsonrpc.interface.js.map +1 -0
  108. package/dist/interfaces/shared/paginated-list.interface.js +2 -0
  109. package/dist/interfaces/shared/paginated-list.interface.js.map +1 -0
  110. package/dist/interfaces/shared/unsigned-transaction.interface.js +2 -0
  111. package/dist/interfaces/shared/unsigned-transaction.interface.js.map +1 -0
  112. package/dist/interfaces/shared/utils.interface.js +2 -0
  113. package/dist/interfaces/shared/utils.interface.js.map +1 -0
  114. package/dist/interfaces/timestamp/hash-algorithms.interface.js +2 -0
  115. package/dist/interfaces/timestamp/hash-algorithms.interface.js.map +1 -0
  116. package/dist/interfaces/timestamp/index.js +4 -0
  117. package/dist/interfaces/timestamp/index.js.map +1 -0
  118. package/dist/interfaces/timestamp/records.interface.js +2 -0
  119. package/dist/interfaces/timestamp/records.interface.js.map +1 -0
  120. package/dist/interfaces/timestamp/timestamps.interface.js +2 -0
  121. package/dist/interfaces/timestamp/timestamps.interface.js.map +1 -0
  122. package/dist/interfaces/trusted-apps-registry/apps.interface.js +2 -0
  123. package/dist/interfaces/trusted-apps-registry/apps.interface.js.map +1 -0
  124. package/dist/interfaces/trusted-apps-registry/index.js +3 -0
  125. package/dist/interfaces/trusted-apps-registry/index.js.map +1 -0
  126. package/dist/interfaces/trusted-apps-registry/policies.interface.js +2 -0
  127. package/dist/interfaces/trusted-apps-registry/policies.interface.js.map +1 -0
  128. package/dist/interfaces/trusted-issuers-registry/index.js +2 -0
  129. package/dist/interfaces/trusted-issuers-registry/index.js.map +1 -0
  130. package/dist/interfaces/trusted-issuers-registry/issuers.interface.js +2 -0
  131. package/dist/interfaces/trusted-issuers-registry/issuers.interface.js.map +1 -0
  132. package/dist/interfaces/users-onboarding/authentication.js +2 -0
  133. package/dist/interfaces/users-onboarding/authentication.js.map +1 -0
  134. package/dist/interfaces/users-onboarding/index.js +2 -0
  135. package/dist/interfaces/users-onboarding/index.js.map +1 -0
  136. package/dist/programs/appRegistration.js +65 -0
  137. package/dist/programs/appRegistration.js.map +1 -0
  138. package/dist/tsconfig.tsbuildinfo +1 -0
  139. package/dist/utils/Client.js +176 -0
  140. package/dist/utils/Client.js.map +1 -0
  141. package/dist/utils/authorisation.js +118 -0
  142. package/dist/utils/authorisation.js.map +1 -0
  143. package/dist/utils/http.js +128 -0
  144. package/dist/utils/http.js.map +1 -0
  145. package/dist/utils/index.js +10 -0
  146. package/dist/utils/index.js.map +1 -0
  147. package/dist/utils/jsonrpc.js +33 -0
  148. package/dist/utils/jsonrpc.js.map +1 -0
  149. package/dist/utils/notification.js +51 -0
  150. package/dist/utils/notification.js.map +1 -0
  151. package/dist/utils/print.js +57 -0
  152. package/dist/utils/print.js.map +1 -0
  153. package/dist/utils/storage.js +97 -0
  154. package/dist/utils/storage.js.map +1 -0
  155. package/dist/utils/utils.js +161 -0
  156. package/dist/utils/utils.js.map +1 -0
  157. package/dist/utils/verifiablePresentation.js +43 -0
  158. package/dist/utils/verifiablePresentation.js.map +1 -0
  159. package/package.json +113 -0
@@ -0,0 +1,374 @@
1
+ import { randomUUID, randomBytes, createHash } from "node:crypto";
2
+ import { importJWK, SignJWT, base64url, calculateJwkThumbprint, } from "jose";
3
+ import { util } from "@cef-ebsi/ebsi-did-resolver";
4
+ import Joi from "joi";
5
+ import { decodeJWT } from "did-jwt";
6
+ import { Agent as SiopAgent, verifyJwtTar, } from "@cef-ebsi/siop-auth";
7
+ import { ValidationError, verifyCredentialJwt, } from "@cef-ebsi/verifiable-credential";
8
+ import { EbsiWallet } from "@cef-ebsi/wallet-lib";
9
+ import { formatEthersUnsignedTransaction, createVPJwt, removePrefix0x, yellow, red, computeSchemaId, getPublicKeyJwk, } from "../utils/index.js";
10
+ export function getUserPin(did) {
11
+ return createHash("sha256")
12
+ .update(did)
13
+ .digest()
14
+ .slice(-4)
15
+ .map((byte) => byte % 10)
16
+ .reduce((acc, digit) => `${acc}${digit}`, "");
17
+ }
18
+ export async function computeVerifyVcJwt(inputs, context, typeApis) {
19
+ const [vcJwt, expectedResult] = inputs;
20
+ let ebsiEnvConfig = {
21
+ didRegistry: `${context.config.api["did-new"].url}/identifiers`,
22
+ trustedIssuersRegistry: `${context.config.api["tir-new"].url}/issuers`,
23
+ trustedPoliciesRegistry: `${context.config.api["tpr-new"].url}/users`,
24
+ };
25
+ if (typeApis !== "new") {
26
+ ebsiEnvConfig = {
27
+ didRegistry: `${context.config.api.did.url}/identifiers`,
28
+ trustedIssuersRegistry: `${context.config.api.tir.url}/issuers`,
29
+ trustedPoliciesRegistry: `${context.config.api.tpr.url}/users`,
30
+ };
31
+ }
32
+ try {
33
+ await verifyCredentialJwt(vcJwt, {
34
+ ebsiAuthority: context.config.domain.replace(/^https?:\/\//, ""),
35
+ ebsiEnvConfig,
36
+ });
37
+ switch (expectedResult) {
38
+ case "expectRevoked": {
39
+ throw new Error("Credential is not revoked");
40
+ }
41
+ default:
42
+ return "Verifiable Credential is valid";
43
+ }
44
+ }
45
+ catch (error) {
46
+ if (expectedResult === "expectRevoked") {
47
+ if (error.message === "Credential is not revoked")
48
+ throw error;
49
+ if (error.message.includes("revoked")) {
50
+ return "Verifiable Credential is revoked";
51
+ }
52
+ }
53
+ throw error;
54
+ }
55
+ }
56
+ export async function compute(method, inputs, context) {
57
+ const { config, client } = context;
58
+ switch (method) {
59
+ case "signTransaction": {
60
+ const unsignedTransaction = inputs[0];
61
+ const uTx = formatEthersUnsignedTransaction(JSON.parse(JSON.stringify(unsignedTransaction)));
62
+ const sgnTx = await client.ethWallet.signTransaction(uTx);
63
+ yellow(sgnTx);
64
+ return sgnTx;
65
+ }
66
+ case "createPresentationJwt": {
67
+ const verifiableCredential = inputs[0];
68
+ const alg = inputs[1] || "ES256K";
69
+ const audience = inputs[2];
70
+ if (!verifiableCredential)
71
+ throw new Error("Verifiable Credential not defined");
72
+ const { jwtVp, payload } = await createVPJwt(client, alg, verifiableCredential, audience, config);
73
+ yellow({ jwtVp, payload });
74
+ return jwtVp;
75
+ }
76
+ case "createVcJwt": {
77
+ const payloadVc = inputs[0];
78
+ const payloadJwt = inputs[1];
79
+ const alg = (inputs[2] || "ES256K");
80
+ Joi.assert(alg, Joi.string().valid("ES256K", "ES256", "RS256", "EdDSA").required());
81
+ if (!client.keys[alg])
82
+ throw new Error(`There is no key defined for alg ${alg}`);
83
+ const privateKey = await importJWK(client.keys[alg].privateKeyJwk, alg);
84
+ const iat = Math.round(Date.now() / 1000);
85
+ const exp = iat + 365 * 24 * 3600;
86
+ const issuanceDate = `${new Date(iat * 1000)
87
+ .toISOString()
88
+ .slice(0, -5)}Z`;
89
+ const expirationDate = `${new Date(exp * 1000)
90
+ .toISOString()
91
+ .slice(0, -5)}Z`;
92
+ const jti = payloadVc.id || `urn:uuid:${randomUUID()}`;
93
+ const sub = payloadVc.credentialSubject?.id;
94
+ const payload = {
95
+ iat,
96
+ jti,
97
+ nbf: iat,
98
+ exp,
99
+ sub,
100
+ vc: {
101
+ "@context": ["https://www.w3.org/2018/credentials/v1"],
102
+ id: jti,
103
+ type: ["VerifiableCredential"],
104
+ issuer: client.did,
105
+ issuanceDate,
106
+ issued: issuanceDate,
107
+ validFrom: issuanceDate,
108
+ expirationDate,
109
+ ...payloadVc,
110
+ },
111
+ ...payloadJwt,
112
+ };
113
+ const vc = await new SignJWT(payload)
114
+ .setProtectedHeader({
115
+ alg,
116
+ typ: "JWT",
117
+ kid: client.keys[alg].kid,
118
+ ...(client.didVersion === 2 && {
119
+ jwk: client.keys[alg].publicKeyJwk,
120
+ }),
121
+ })
122
+ .setIssuer(client.did)
123
+ .sign(privateKey);
124
+ yellow(vc);
125
+ return vc;
126
+ }
127
+ case "signJwt": {
128
+ const [payload, alg, headers] = inputs;
129
+ const privateKey = await importJWK(client.keys[alg].privateKeyJwk, alg);
130
+ const jwt = await new SignJWT(payload)
131
+ .setProtectedHeader({
132
+ alg,
133
+ typ: "JWT",
134
+ kid: client.keys[alg].kid,
135
+ ...(client.didVersion === 2 && {
136
+ jwk: client.keys[alg].publicKeyJwk,
137
+ }),
138
+ ...headers,
139
+ })
140
+ .sign(privateKey);
141
+ yellow(jwt);
142
+ return jwt;
143
+ }
144
+ case "wait": {
145
+ const [seconds] = inputs;
146
+ const milliseconds = Math.round(Number(seconds) * 1000);
147
+ console.log(`waiting ${milliseconds / 1000} secons`);
148
+ await new Promise((r) => {
149
+ setTimeout(r, milliseconds);
150
+ });
151
+ return 0;
152
+ }
153
+ case "userPin": {
154
+ const [did] = inputs;
155
+ const userPin = getUserPin(did);
156
+ yellow(userPin);
157
+ return userPin;
158
+ }
159
+ case "schemaId": {
160
+ const [schema, base] = inputs;
161
+ const schemaId = await computeSchemaId(schema, base);
162
+ yellow(schemaId);
163
+ return schemaId;
164
+ }
165
+ case "checkStatusList2021CredentialSchema": {
166
+ const [credential] = inputs;
167
+ try {
168
+ Joi.assert(credential, Joi.object({
169
+ "@context": Joi.array()
170
+ .ordered(Joi.string()
171
+ .valid("https://www.w3.org/2018/credentials/v1")
172
+ .required(), Joi.string()
173
+ .valid("https://w3id.org/vc/status-list/2021/v1")
174
+ .required())
175
+ .items(Joi.string().uri())
176
+ .required(),
177
+ type: Joi.array()
178
+ .ordered(
179
+ // First item must be "VerifiableCredential"
180
+ Joi.string().valid("VerifiableCredential").required())
181
+ .items(
182
+ // "StatusList2021Credential" must be present
183
+ Joi.string().valid("StatusList2021Credential").required(), Joi.string())
184
+ .required(),
185
+ credentialSubject: Joi.object({
186
+ id: Joi.string().uri().required(),
187
+ type: Joi.string().valid("StatusList2021").required(),
188
+ statusPurpose: Joi.string()
189
+ .valid("revocation", "suspension")
190
+ .required(),
191
+ encodedList: Joi.string().required(),
192
+ })
193
+ .unknown(true)
194
+ .required(),
195
+ })
196
+ // Allow additional properties
197
+ .unknown(true));
198
+ yellow("StatusList2021 Credential Schema correct");
199
+ return true;
200
+ }
201
+ catch (error) {
202
+ red(error);
203
+ throw error;
204
+ }
205
+ }
206
+ case "verifyVcJwt-new": {
207
+ try {
208
+ const result = await computeVerifyVcJwt(inputs, context, "new");
209
+ yellow(result);
210
+ return result;
211
+ }
212
+ catch (error) {
213
+ if (error instanceof ValidationError) {
214
+ red(error.toJSON());
215
+ }
216
+ else {
217
+ red(error);
218
+ }
219
+ throw error;
220
+ }
221
+ }
222
+ case "verifyVcJwt": {
223
+ try {
224
+ const result = await computeVerifyVcJwt(inputs, context, "new");
225
+ yellow(result);
226
+ return result;
227
+ }
228
+ catch (error) {
229
+ if (error instanceof ValidationError) {
230
+ red(error.toJSON());
231
+ }
232
+ else {
233
+ red(error);
234
+ }
235
+ try {
236
+ const result2 = await computeVerifyVcJwt(inputs, context, "");
237
+ yellow(result2);
238
+ return result2;
239
+ }
240
+ catch (error2) {
241
+ if (error2 instanceof ValidationError) {
242
+ red(error2.toJSON());
243
+ }
244
+ else {
245
+ red(error2);
246
+ }
247
+ throw error2;
248
+ }
249
+ }
250
+ }
251
+ case "verifyAuthenticationRequest": {
252
+ const request = inputs[0];
253
+ Joi.assert(request, Joi.object({
254
+ client_id: Joi.string(),
255
+ request: Joi.string(),
256
+ }).unknown());
257
+ await verifyJwtTar(request.request, {
258
+ trustedAppsRegistry: `${config.api.tar.url}/apps`,
259
+ });
260
+ yellow("Authentication request OK");
261
+ return request.client_id;
262
+ }
263
+ case "verifySessionResponse": {
264
+ const nr = inputs[0];
265
+ Joi.assert(nr, Joi.object({
266
+ alg: Joi.string(),
267
+ nonce: Joi.string(),
268
+ response: Joi.object(),
269
+ }).unknown());
270
+ const key = client.keys[nr.alg];
271
+ if (!key)
272
+ throw new Error(`There is no key defined for alg ${nr.alg}`);
273
+ const accessToken = await SiopAgent.verifyAkeResponse(nr.response, {
274
+ nonce: nr.nonce,
275
+ privateEncryptionKeyJwk: key.privateKeyEncryptionJwk,
276
+ trustedAppsRegistry: `${config.api.tar.url}/apps`,
277
+ alg: nr.alg,
278
+ });
279
+ yellow(`Session Response OK. Access token: ${accessToken}`);
280
+ return accessToken;
281
+ }
282
+ case "did2": {
283
+ const [jwk] = inputs;
284
+ const did = EbsiWallet.createDid("NATURAL_PERSON", jwk);
285
+ yellow(did);
286
+ return did;
287
+ }
288
+ case "sha256": {
289
+ const [dataInput] = inputs;
290
+ const data = typeof dataInput === "object" ? JSON.stringify(dataInput) : dataInput;
291
+ return `0x${createHash("sha256")
292
+ .update(data, "utf8")
293
+ .digest()
294
+ .toString("hex")}`;
295
+ }
296
+ case "decodeJWT": {
297
+ const jwt = inputs[0];
298
+ Joi.assert(jwt, Joi.string());
299
+ const decoded = decodeJWT(jwt);
300
+ yellow(decoded);
301
+ return decoded;
302
+ }
303
+ case "decodeBase64": {
304
+ const enc = inputs[0];
305
+ const type = inputs[1] || "utf8";
306
+ Joi.assert(enc, Joi.string());
307
+ const buffer = Buffer.from(enc, "base64");
308
+ if (type === "buffer") {
309
+ console.log(buffer);
310
+ return buffer;
311
+ }
312
+ const decoded = buffer.toString("utf8");
313
+ yellow(decoded);
314
+ return decoded;
315
+ }
316
+ case "decodeBase64url": {
317
+ const enc = inputs[0];
318
+ Joi.assert(enc, Joi.string());
319
+ const decoded = base64url.decode(enc);
320
+ yellow(decoded);
321
+ return decoded;
322
+ }
323
+ case "decodeHex": {
324
+ const enc = inputs[0];
325
+ Joi.assert(enc, Joi.string());
326
+ const decoded = Buffer.from(removePrefix0x(enc), "hex").toString("utf8");
327
+ yellow(decoded);
328
+ return decoded;
329
+ }
330
+ case "randomID": {
331
+ return randomBytes(32).toString("hex");
332
+ }
333
+ case "subaccountDid": {
334
+ const [did] = inputs;
335
+ Joi.assert(did, Joi.string());
336
+ const subaccountMsiBytes = createHash("sha256")
337
+ .update(did, "utf8")
338
+ .digest()
339
+ .slice(0, 16);
340
+ const subaccount = util.createDid(subaccountMsiBytes);
341
+ yellow(subaccount);
342
+ return subaccount;
343
+ }
344
+ case "statusListIndex": {
345
+ const [did] = inputs;
346
+ Joi.assert(did, Joi.string());
347
+ const statusListIndex = (createHash("sha256")
348
+ .update(did, "utf8")
349
+ .digest()
350
+ .slice(0, 6)
351
+ .readUInt32BE() % 131072).toString();
352
+ yellow(statusListIndex);
353
+ return statusListIndex;
354
+ }
355
+ case "thumbprint": {
356
+ const [hexOrJwk] = inputs;
357
+ let publicKeyJwk;
358
+ if (typeof hexOrJwk === "string") {
359
+ publicKeyJwk = getPublicKeyJwk(hexOrJwk);
360
+ }
361
+ else {
362
+ publicKeyJwk = hexOrJwk;
363
+ }
364
+ const thumbprint = await calculateJwkThumbprint(publicKeyJwk, "sha256");
365
+ yellow(thumbprint);
366
+ return thumbprint;
367
+ }
368
+ default:
369
+ red(`Invalid method '${method}'`);
370
+ return 0;
371
+ }
372
+ }
373
+ export default compute;
374
+ //# sourceMappingURL=compute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute.js","sourceRoot":"","sources":["../../src/commands/compute.ts"],"names":[],"mappings":"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"}