@haneullabs/signers 0.1.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 (88) hide show
  1. package/CHANGELOG.md +555 -0
  2. package/README.md +200 -0
  3. package/aws/package.json +6 -0
  4. package/dist/cjs/aws/aws-client.d.ts +43 -0
  5. package/dist/cjs/aws/aws-client.js +79 -0
  6. package/dist/cjs/aws/aws-client.js.map +7 -0
  7. package/dist/cjs/aws/aws-kms-signer.d.ts +61 -0
  8. package/dist/cjs/aws/aws-kms-signer.js +114 -0
  9. package/dist/cjs/aws/aws-kms-signer.js.map +7 -0
  10. package/dist/cjs/aws/aws4fetch.d.ts +125 -0
  11. package/dist/cjs/aws/aws4fetch.js +382 -0
  12. package/dist/cjs/aws/aws4fetch.js.map +7 -0
  13. package/dist/cjs/aws/index.d.ts +5 -0
  14. package/dist/cjs/aws/index.js +25 -0
  15. package/dist/cjs/aws/index.js.map +7 -0
  16. package/dist/cjs/gcp/gcp-kms-client.d.ts +68 -0
  17. package/dist/cjs/gcp/gcp-kms-client.js +147 -0
  18. package/dist/cjs/gcp/gcp-kms-client.js.map +7 -0
  19. package/dist/cjs/gcp/index.d.ts +4 -0
  20. package/dist/cjs/gcp/index.js +25 -0
  21. package/dist/cjs/gcp/index.js.map +7 -0
  22. package/dist/cjs/ledger/bcs.d.ts +14 -0
  23. package/dist/cjs/ledger/bcs.js +85 -0
  24. package/dist/cjs/ledger/bcs.js.map +7 -0
  25. package/dist/cjs/ledger/index.d.ts +66 -0
  26. package/dist/cjs/ledger/index.js +158 -0
  27. package/dist/cjs/ledger/index.js.map +7 -0
  28. package/dist/cjs/ledger/objects.d.ts +5 -0
  29. package/dist/cjs/ledger/objects.js +60 -0
  30. package/dist/cjs/ledger/objects.js.map +7 -0
  31. package/dist/cjs/package.json +5 -0
  32. package/dist/cjs/utils/utils.d.ts +18 -0
  33. package/dist/cjs/utils/utils.js +85 -0
  34. package/dist/cjs/utils/utils.js.map +7 -0
  35. package/dist/cjs/webcrypto/index.d.ts +26 -0
  36. package/dist/cjs/webcrypto/index.js +112 -0
  37. package/dist/cjs/webcrypto/index.js.map +7 -0
  38. package/dist/esm/aws/aws-client.d.ts +43 -0
  39. package/dist/esm/aws/aws-client.js +59 -0
  40. package/dist/esm/aws/aws-client.js.map +7 -0
  41. package/dist/esm/aws/aws-kms-signer.d.ts +61 -0
  42. package/dist/esm/aws/aws-kms-signer.js +94 -0
  43. package/dist/esm/aws/aws-kms-signer.js.map +7 -0
  44. package/dist/esm/aws/aws4fetch.d.ts +125 -0
  45. package/dist/esm/aws/aws4fetch.js +362 -0
  46. package/dist/esm/aws/aws4fetch.js.map +7 -0
  47. package/dist/esm/aws/index.d.ts +5 -0
  48. package/dist/esm/aws/index.js +5 -0
  49. package/dist/esm/aws/index.js.map +7 -0
  50. package/dist/esm/gcp/gcp-kms-client.d.ts +68 -0
  51. package/dist/esm/gcp/gcp-kms-client.js +127 -0
  52. package/dist/esm/gcp/gcp-kms-client.js.map +7 -0
  53. package/dist/esm/gcp/index.d.ts +4 -0
  54. package/dist/esm/gcp/index.js +5 -0
  55. package/dist/esm/gcp/index.js.map +7 -0
  56. package/dist/esm/ledger/bcs.d.ts +14 -0
  57. package/dist/esm/ledger/bcs.js +70 -0
  58. package/dist/esm/ledger/bcs.js.map +7 -0
  59. package/dist/esm/ledger/index.d.ts +66 -0
  60. package/dist/esm/ledger/index.js +138 -0
  61. package/dist/esm/ledger/index.js.map +7 -0
  62. package/dist/esm/ledger/objects.d.ts +5 -0
  63. package/dist/esm/ledger/objects.js +40 -0
  64. package/dist/esm/ledger/objects.js.map +7 -0
  65. package/dist/esm/package.json +5 -0
  66. package/dist/esm/utils/utils.d.ts +18 -0
  67. package/dist/esm/utils/utils.js +65 -0
  68. package/dist/esm/utils/utils.js.map +7 -0
  69. package/dist/esm/webcrypto/index.d.ts +26 -0
  70. package/dist/esm/webcrypto/index.js +92 -0
  71. package/dist/esm/webcrypto/index.js.map +7 -0
  72. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  73. package/dist/tsconfig.tsbuildinfo +1 -0
  74. package/gcp/package.json +6 -0
  75. package/ledger/package.json +6 -0
  76. package/package.json +76 -0
  77. package/src/aws/aws-client.ts +107 -0
  78. package/src/aws/aws-kms-signer.ts +111 -0
  79. package/src/aws/aws4fetch.ts +502 -0
  80. package/src/aws/index.ts +9 -0
  81. package/src/gcp/gcp-kms-client.ts +165 -0
  82. package/src/gcp/index.ts +9 -0
  83. package/src/ledger/bcs.ts +87 -0
  84. package/src/ledger/index.ts +164 -0
  85. package/src/ledger/objects.ts +56 -0
  86. package/src/utils/utils.ts +119 -0
  87. package/src/webcrypto/index.ts +108 -0
  88. package/webcrypto/package.json +6 -0
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
23
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
24
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
25
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
26
+ var gcp_kms_client_exports = {};
27
+ __export(gcp_kms_client_exports, {
28
+ GcpKmsSigner: () => GcpKmsSigner
29
+ });
30
+ module.exports = __toCommonJS(gcp_kms_client_exports);
31
+ var import_kms = require("@google-cloud/kms");
32
+ var import_cryptography = require("@haneullabs/haneul/cryptography");
33
+ var import_secp256k1 = require("@haneullabs/haneul/keypairs/secp256k1");
34
+ var import_secp256r1 = require("@haneullabs/haneul/keypairs/secp256r1");
35
+ var import_utils = require("@haneullabs/haneul/utils");
36
+ var import_utils2 = require("../utils/utils.js");
37
+ var _publicKey, _client, _versionName;
38
+ const _GcpKmsSigner = class _GcpKmsSigner extends import_cryptography.Signer {
39
+ /**
40
+ * Creates an instance of GcpKmsSigner. It's expected to call the static `fromOptions`
41
+ * or `fromVersionName` method to create an instance.
42
+ * For example:
43
+ * ```
44
+ * const signer = await GcpKmsSigner.fromVersionName(versionName);
45
+ * ```
46
+ * @throws Will throw an error if required GCP credentials are not provided.
47
+ */
48
+ constructor({ versionName, client, publicKey }) {
49
+ super();
50
+ __privateAdd(this, _publicKey);
51
+ /** GCP KMS client instance */
52
+ __privateAdd(this, _client);
53
+ /** GCP KMS version name (generated from `client.cryptoKeyVersionPath()`) */
54
+ __privateAdd(this, _versionName);
55
+ if (!versionName) throw new Error("Version name is required");
56
+ __privateSet(this, _client, client);
57
+ __privateSet(this, _versionName, versionName);
58
+ __privateSet(this, _publicKey, publicKey);
59
+ }
60
+ /**
61
+ * Retrieves the key scheme used by this signer.
62
+ * @returns GCP supports only `Secp256k1` and `Secp256r1` schemes.
63
+ */
64
+ getKeyScheme() {
65
+ return import_cryptography.SIGNATURE_FLAG_TO_SCHEME[__privateGet(this, _publicKey).flag()];
66
+ }
67
+ /**
68
+ * Retrieves the public key associated with this signer.
69
+ * @returns The Secp256k1PublicKey instance.
70
+ * @throws Will throw an error if the public key has not been initialized.
71
+ */
72
+ getPublicKey() {
73
+ return __privateGet(this, _publicKey);
74
+ }
75
+ /**
76
+ * Signs the given data using GCP KMS.
77
+ * @param bytes - The data to be signed as a Uint8Array.
78
+ * @returns A promise that resolves to the signature as a Uint8Array.
79
+ * @throws Will throw an error if the public key is not initialized or if signing fails.
80
+ */
81
+ async sign(bytes) {
82
+ const [signResponse] = await __privateGet(this, _client).asymmetricSign({
83
+ name: __privateGet(this, _versionName),
84
+ data: bytes
85
+ });
86
+ if (!signResponse.signature) {
87
+ throw new Error("No signature returned from GCP KMS");
88
+ }
89
+ return (0, import_utils2.getConcatenatedSignature)(signResponse.signature, this.getKeyScheme());
90
+ }
91
+ /**
92
+ * Synchronous signing is not supported by GCP KMS.
93
+ * @throws Always throws an error indicating synchronous signing is unsupported.
94
+ * @deprecated use `sign` instead
95
+ */
96
+ signData() {
97
+ throw new Error("GCP Signer does not support sync signing");
98
+ }
99
+ /**
100
+ * Creates a GCP KMS signer from the provided options.
101
+ * Expects the credentials file to be set as an env variable
102
+ * (GOOGLE_APPLICATION_CREDENTIALS).
103
+ */
104
+ static async fromOptions(options) {
105
+ const client = new import_kms.KeyManagementServiceClient();
106
+ const versionName = client.cryptoKeyVersionPath(
107
+ options.projectId,
108
+ options.location,
109
+ options.keyRing,
110
+ options.cryptoKey,
111
+ options.cryptoKeyVersion
112
+ );
113
+ return new _GcpKmsSigner({
114
+ versionName,
115
+ client,
116
+ publicKey: await getPublicKey(client, versionName)
117
+ });
118
+ }
119
+ static async fromVersionName(versionName) {
120
+ const client = new import_kms.KeyManagementServiceClient();
121
+ return new _GcpKmsSigner({
122
+ versionName,
123
+ client,
124
+ publicKey: await getPublicKey(client, versionName)
125
+ });
126
+ }
127
+ };
128
+ _publicKey = new WeakMap();
129
+ _client = new WeakMap();
130
+ _versionName = new WeakMap();
131
+ let GcpKmsSigner = _GcpKmsSigner;
132
+ async function getPublicKey(client, versionName) {
133
+ const [publicKey] = await client.getPublicKey({ name: versionName });
134
+ const { algorithm, pem } = publicKey;
135
+ if (!pem) throw new Error("No PEM key returned from GCP KMS");
136
+ const base64 = pem.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "").replace(/\s/g, "");
137
+ const compressedKey = (0, import_utils2.publicKeyFromDER)((0, import_utils.fromBase64)(base64));
138
+ switch (algorithm) {
139
+ case "EC_SIGN_SECP256K1_SHA256":
140
+ return new import_secp256k1.Secp256k1PublicKey(compressedKey);
141
+ case "EC_SIGN_P256_SHA256":
142
+ return new import_secp256r1.Secp256r1PublicKey(compressedKey);
143
+ default:
144
+ throw new Error(`Unsupported algorithm: ${algorithm}`);
145
+ }
146
+ }
147
+ //# sourceMappingURL=gcp-kms-client.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/gcp/gcp-kms-client.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\nimport { KeyManagementServiceClient } from '@google-cloud/kms';\nimport type { PublicKey, SignatureFlag } from '@haneullabs/haneul/cryptography';\nimport { SIGNATURE_FLAG_TO_SCHEME, Signer } from '@haneullabs/haneul/cryptography';\nimport { Secp256k1PublicKey } from '@haneullabs/haneul/keypairs/secp256k1';\nimport { Secp256r1PublicKey } from '@haneullabs/haneul/keypairs/secp256r1';\nimport { fromBase64 } from '@haneullabs/haneul/utils';\n\nimport { getConcatenatedSignature, publicKeyFromDER } from '../utils/utils.js';\n\n/**\n * Configuration options for initializing the GcpKmsSigner.\n */\nexport interface GcpKmsSignerOptions {\n\t/** The version name generated from `client.cryptoKeyVersionPath()` */\n\tversionName: string;\n\t/** Options for setting up the GCP KMS client */\n\tclient: KeyManagementServiceClient;\n\t/** Public key */\n\tpublicKey: PublicKey;\n}\n\n/**\n * GCP KMS Signer integrates GCP Key Management Service (KMS) with the Haneul blockchain\n * to provide signing capabilities using GCP-managed cryptographic keys.\n */\nexport class GcpKmsSigner extends Signer {\n\t#publicKey: PublicKey;\n\t/** GCP KMS client instance */\n\t#client: KeyManagementServiceClient;\n\t/** GCP KMS version name (generated from `client.cryptoKeyVersionPath()`) */\n\t#versionName: string;\n\n\t/**\n\t * Creates an instance of GcpKmsSigner. It's expected to call the static `fromOptions`\n\t * or `fromVersionName` method to create an instance.\n\t * For example:\n\t * ```\n\t * const signer = await GcpKmsSigner.fromVersionName(versionName);\n\t * ```\n\t * @throws Will throw an error if required GCP credentials are not provided.\n\t */\n\tconstructor({ versionName, client, publicKey }: GcpKmsSignerOptions) {\n\t\tsuper();\n\t\tif (!versionName) throw new Error('Version name is required');\n\n\t\tthis.#client = client;\n\t\tthis.#versionName = versionName;\n\t\tthis.#publicKey = publicKey;\n\t}\n\n\t/**\n\t * Retrieves the key scheme used by this signer.\n\t * @returns GCP supports only `Secp256k1` and `Secp256r1` schemes.\n\t */\n\tgetKeyScheme() {\n\t\treturn SIGNATURE_FLAG_TO_SCHEME[this.#publicKey.flag() as SignatureFlag];\n\t}\n\n\t/**\n\t * Retrieves the public key associated with this signer.\n\t * @returns The Secp256k1PublicKey instance.\n\t * @throws Will throw an error if the public key has not been initialized.\n\t */\n\tgetPublicKey() {\n\t\treturn this.#publicKey;\n\t}\n\n\t/**\n\t * Signs the given data using GCP KMS.\n\t * @param bytes - The data to be signed as a Uint8Array.\n\t * @returns A promise that resolves to the signature as a Uint8Array.\n\t * @throws Will throw an error if the public key is not initialized or if signing fails.\n\t */\n\tasync sign(bytes: Uint8Array): Promise<Uint8Array<ArrayBuffer>> {\n\t\tconst [signResponse] = await this.#client.asymmetricSign({\n\t\t\tname: this.#versionName,\n\t\t\tdata: bytes,\n\t\t});\n\n\t\tif (!signResponse.signature) {\n\t\t\tthrow new Error('No signature returned from GCP KMS');\n\t\t}\n\n\t\treturn getConcatenatedSignature(signResponse.signature as Uint8Array, this.getKeyScheme());\n\t}\n\n\t/**\n\t * Synchronous signing is not supported by GCP KMS.\n\t * @throws Always throws an error indicating synchronous signing is unsupported.\n\t * @deprecated use `sign` instead\n\t */\n\tsignData(): never {\n\t\tthrow new Error('GCP Signer does not support sync signing');\n\t}\n\n\t/**\n\t * Creates a GCP KMS signer from the provided options.\n\t * Expects the credentials file to be set as an env variable\n\t * (GOOGLE_APPLICATION_CREDENTIALS).\n\t */\n\tstatic async fromOptions(options: {\n\t\tprojectId: string;\n\t\tlocation: string;\n\t\tkeyRing: string;\n\t\tcryptoKey: string;\n\t\tcryptoKeyVersion: string;\n\t}) {\n\t\tconst client = new KeyManagementServiceClient();\n\n\t\tconst versionName = client.cryptoKeyVersionPath(\n\t\t\toptions.projectId,\n\t\t\toptions.location,\n\t\t\toptions.keyRing,\n\t\t\toptions.cryptoKey,\n\t\t\toptions.cryptoKeyVersion,\n\t\t);\n\n\t\treturn new GcpKmsSigner({\n\t\t\tversionName,\n\t\t\tclient,\n\t\t\tpublicKey: await getPublicKey(client, versionName),\n\t\t});\n\t}\n\n\tstatic async fromVersionName(versionName: string) {\n\t\tconst client = new KeyManagementServiceClient();\n\t\treturn new GcpKmsSigner({\n\t\t\tversionName,\n\t\t\tclient,\n\t\t\tpublicKey: await getPublicKey(client, versionName),\n\t\t});\n\t}\n}\n\n/**\n * Retrieves the public key associated with the given version name.\n */\nasync function getPublicKey(\n\tclient: KeyManagementServiceClient,\n\tversionName: string,\n): Promise<PublicKey> {\n\tconst [publicKey] = await client.getPublicKey({ name: versionName });\n\n\tconst { algorithm, pem } = publicKey;\n\n\tif (!pem) throw new Error('No PEM key returned from GCP KMS');\n\n\tconst base64 = pem\n\t\t.replace('-----BEGIN PUBLIC KEY-----', '')\n\t\t.replace('-----END PUBLIC KEY-----', '')\n\t\t.replace(/\\s/g, '');\n\n\tconst compressedKey = publicKeyFromDER(fromBase64(base64));\n\n\tswitch (algorithm) {\n\t\tcase 'EC_SIGN_SECP256K1_SHA256':\n\t\t\treturn new Secp256k1PublicKey(compressedKey);\n\t\tcase 'EC_SIGN_P256_SHA256':\n\t\t\treturn new Secp256r1PublicKey(compressedKey);\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported algorithm: ${algorithm}`);\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,iBAA2C;AAE3C,0BAAiD;AACjD,uBAAmC;AACnC,uBAAmC;AACnC,mBAA2B;AAE3B,IAAAA,gBAA2D;AAT3D;AA2BO,MAAM,gBAAN,MAAM,sBAAqB,2BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBxC,YAAY,EAAE,aAAa,QAAQ,UAAU,GAAwB;AACpE,UAAM;AAhBP;AAEA;AAAA;AAEA;AAAA;AAaC,QAAI,CAAC,YAAa,OAAM,IAAI,MAAM,0BAA0B;AAE5D,uBAAK,SAAU;AACf,uBAAK,cAAe;AACpB,uBAAK,YAAa;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe;AACd,WAAO,6CAAyB,mBAAK,YAAW,KAAK,CAAkB;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe;AACd,WAAO,mBAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAK,OAAqD;AAC/D,UAAM,CAAC,YAAY,IAAI,MAAM,mBAAK,SAAQ,eAAe;AAAA,MACxD,MAAM,mBAAK;AAAA,MACX,MAAM;AAAA,IACP,CAAC;AAED,QAAI,CAAC,aAAa,WAAW;AAC5B,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACrD;AAEA,eAAO,wCAAyB,aAAa,WAAyB,KAAK,aAAa,CAAC;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAkB;AACjB,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,YAAY,SAMtB;AACF,UAAM,SAAS,IAAI,sCAA2B;AAE9C,UAAM,cAAc,OAAO;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACT;AAEA,WAAO,IAAI,cAAa;AAAA,MACvB;AAAA,MACA;AAAA,MACA,WAAW,MAAM,aAAa,QAAQ,WAAW;AAAA,IAClD,CAAC;AAAA,EACF;AAAA,EAEA,aAAa,gBAAgB,aAAqB;AACjD,UAAM,SAAS,IAAI,sCAA2B;AAC9C,WAAO,IAAI,cAAa;AAAA,MACvB;AAAA,MACA;AAAA,MACA,WAAW,MAAM,aAAa,QAAQ,WAAW;AAAA,IAClD,CAAC;AAAA,EACF;AACD;AA1GC;AAEA;AAEA;AALM,IAAM,eAAN;AAgHP,eAAe,aACd,QACA,aACqB;AACrB,QAAM,CAAC,SAAS,IAAI,MAAM,OAAO,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnE,QAAM,EAAE,WAAW,IAAI,IAAI;AAE3B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,kCAAkC;AAE5D,QAAM,SAAS,IACb,QAAQ,8BAA8B,EAAE,EACxC,QAAQ,4BAA4B,EAAE,EACtC,QAAQ,OAAO,EAAE;AAEnB,QAAM,oBAAgB,oCAAiB,yBAAW,MAAM,CAAC;AAEzD,UAAQ,WAAW;AAAA,IAClB,KAAK;AACJ,aAAO,IAAI,oCAAmB,aAAa;AAAA,IAC5C,KAAK;AACJ,aAAO,IAAI,oCAAmB,aAAa;AAAA,IAC5C;AACC,YAAM,IAAI,MAAM,0BAA0B,SAAS,EAAE;AAAA,EACvD;AACD;",
6
+ "names": ["import_utils"]
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { GcpKmsSignerOptions } from './gcp-kms-client.js';
2
+ import { GcpKmsSigner } from './gcp-kms-client.js';
3
+ export { GcpKmsSigner };
4
+ export type { GcpKmsSignerOptions };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var gcp_exports = {};
20
+ __export(gcp_exports, {
21
+ GcpKmsSigner: () => import_gcp_kms_client.GcpKmsSigner
22
+ });
23
+ module.exports = __toCommonJS(gcp_exports);
24
+ var import_gcp_kms_client = require("./gcp-kms-client.js");
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/gcp/index.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { GcpKmsSignerOptions } from './gcp-kms-client.js';\nimport { GcpKmsSigner } from './gcp-kms-client.js';\n\nexport { GcpKmsSigner };\n\nexport type { GcpKmsSignerOptions };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,4BAA6B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import type { ObjectOwner } from '@haneullabs/haneul/client';
2
+ export declare const HaneulMoveObject: import("@haneullabs/haneul/bcs").BcsStruct<{
3
+ data: import("@haneullabs/haneul/bcs").BcsEnum<{
4
+ MoveObject: import("@haneullabs/haneul/bcs").BcsStruct<{
5
+ type: import("@haneullabs/haneul/bcs").BcsType<any, string, string>;
6
+ hasPublicTransfer: import("@haneullabs/haneul/bcs").BcsType<boolean, boolean, "bool">;
7
+ version: import("@haneullabs/haneul/bcs").BcsType<string, string | number | bigint, "u64">;
8
+ contents: import("@haneullabs/haneul/bcs").BcsType<any, string, string>;
9
+ }, string>;
10
+ }, "Data">;
11
+ owner: import("@haneullabs/haneul/bcs").BcsType<any, ObjectOwner, string>;
12
+ previousTransaction: import("@haneullabs/haneul/bcs").BcsType<string, string, "ObjectDigest">;
13
+ storageRebate: import("@haneullabs/haneul/bcs").BcsType<string, string | number | bigint, "u64">;
14
+ }, string>;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var bcs_exports = {};
20
+ __export(bcs_exports, {
21
+ HaneulMoveObject: () => HaneulMoveObject
22
+ });
23
+ module.exports = __toCommonJS(bcs_exports);
24
+ var import_bcs = require("@haneullabs/haneul/bcs");
25
+ var import_utils = require("@haneullabs/haneul/utils");
26
+ const HANEUL_FRAMEWORK_ADDRESS = (0, import_utils.normalizeHaneulAddress)("0x2");
27
+ const HANEUL_SYSTEM_ADDRESS = (0, import_utils.normalizeHaneulAddress)("0x3");
28
+ const MoveObjectType = import_bcs.bcs.enum("MoveObjectType", {
29
+ Other: import_bcs.bcs.StructTag,
30
+ GasCoin: null,
31
+ StakedSui: null,
32
+ Coin: import_bcs.bcs.TypeTag
33
+ });
34
+ const HaneulMoveObject = import_bcs.bcs.struct("HaneulMoveObject", {
35
+ data: import_bcs.bcs.enum("Data", {
36
+ MoveObject: import_bcs.bcs.struct("MoveObject", {
37
+ type: MoveObjectType.transform({
38
+ input: (objectType) => {
39
+ const structTag = (0, import_utils.parseStructTag)(objectType);
40
+ if (structTag.address === HANEUL_FRAMEWORK_ADDRESS && structTag.module === "coin" && structTag.name === "Coin" && typeof structTag.typeParams[0] === "object") {
41
+ const innerStructTag = structTag.typeParams[0];
42
+ if (innerStructTag.address === HANEUL_FRAMEWORK_ADDRESS && innerStructTag.module === "haneul" && innerStructTag.name === "SUI") {
43
+ return { GasCoin: true, $kind: "GasCoin" };
44
+ }
45
+ return { Coin: (0, import_utils.normalizeStructTag)(innerStructTag), $kind: "Coin" };
46
+ } else if (structTag.address === HANEUL_SYSTEM_ADDRESS && structTag.module === "staking_pool" && structTag.name === "StakedSui") {
47
+ return { StakedSui: true, $kind: "StakedSui" };
48
+ }
49
+ return {
50
+ Other: {
51
+ ...structTag,
52
+ typeParams: structTag.typeParams.map((typeParam) => {
53
+ return import_bcs.TypeTagSerializer.parseFromStr((0, import_utils.normalizeStructTag)(typeParam));
54
+ })
55
+ },
56
+ $kind: "Other"
57
+ };
58
+ }
59
+ }),
60
+ hasPublicTransfer: import_bcs.bcs.bool(),
61
+ version: import_bcs.bcs.u64(),
62
+ contents: import_bcs.bcs.byteVector().transform({ input: import_utils.fromBase64 })
63
+ })
64
+ }),
65
+ owner: import_bcs.bcs.Owner.transform({
66
+ input: (objectOwner) => {
67
+ if (objectOwner === "Immutable") {
68
+ return { Immutable: null };
69
+ } else if ("Shared" in objectOwner) {
70
+ return { Shared: { initialSharedVersion: objectOwner.Shared.initial_shared_version } };
71
+ } else if ("ConsensusAddressOwner" in objectOwner) {
72
+ return {
73
+ ConsensusAddressOwner: {
74
+ owner: objectOwner.ConsensusAddressOwner.owner,
75
+ startVersion: objectOwner.ConsensusAddressOwner.start_version
76
+ }
77
+ };
78
+ }
79
+ return objectOwner;
80
+ }
81
+ }),
82
+ previousTransaction: import_bcs.bcs.ObjectDigest,
83
+ storageRebate: import_bcs.bcs.u64()
84
+ });
85
+ //# sourceMappingURL=bcs.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ledger/bcs.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs, TypeTagSerializer } from '@haneullabs/haneul/bcs';\nimport type { ObjectOwner } from '@haneullabs/haneul/client';\nimport {\n\tfromBase64,\n\tnormalizeStructTag,\n\tnormalizeHaneulAddress,\n\tparseStructTag,\n} from '@haneullabs/haneul/utils';\n\nconst HANEUL_FRAMEWORK_ADDRESS = normalizeHaneulAddress('0x2');\nconst HANEUL_SYSTEM_ADDRESS = normalizeHaneulAddress('0x3');\n\nconst MoveObjectType = bcs.enum('MoveObjectType', {\n\tOther: bcs.StructTag,\n\tGasCoin: null,\n\tStakedSui: null,\n\tCoin: bcs.TypeTag,\n});\n\nexport const HaneulMoveObject = bcs.struct('HaneulMoveObject', {\n\tdata: bcs.enum('Data', {\n\t\tMoveObject: bcs.struct('MoveObject', {\n\t\t\ttype: MoveObjectType.transform({\n\t\t\t\tinput: (objectType: string): typeof MoveObjectType.$inferType => {\n\t\t\t\t\tconst structTag = parseStructTag(objectType);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstructTag.address === HANEUL_FRAMEWORK_ADDRESS &&\n\t\t\t\t\t\tstructTag.module === 'coin' &&\n\t\t\t\t\t\tstructTag.name === 'Coin' &&\n\t\t\t\t\t\ttypeof structTag.typeParams[0] === 'object'\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst innerStructTag = structTag.typeParams[0];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tinnerStructTag.address === HANEUL_FRAMEWORK_ADDRESS &&\n\t\t\t\t\t\t\tinnerStructTag.module === 'haneul' &&\n\t\t\t\t\t\t\tinnerStructTag.name === 'SUI'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn { GasCoin: true, $kind: 'GasCoin' };\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { Coin: normalizeStructTag(innerStructTag), $kind: 'Coin' };\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tstructTag.address === HANEUL_SYSTEM_ADDRESS &&\n\t\t\t\t\t\tstructTag.module === 'staking_pool' &&\n\t\t\t\t\t\tstructTag.name === 'StakedSui'\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn { StakedSui: true, $kind: 'StakedSui' };\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tOther: {\n\t\t\t\t\t\t\t...structTag,\n\t\t\t\t\t\t\ttypeParams: structTag.typeParams.map((typeParam) => {\n\t\t\t\t\t\t\t\treturn TypeTagSerializer.parseFromStr(normalizeStructTag(typeParam));\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t$kind: 'Other',\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t}),\n\t\t\thasPublicTransfer: bcs.bool(),\n\t\t\tversion: bcs.u64(),\n\t\t\tcontents: bcs.byteVector().transform({ input: fromBase64 }),\n\t\t}),\n\t}),\n\towner: bcs.Owner.transform({\n\t\tinput: (objectOwner: ObjectOwner) => {\n\t\t\tif (objectOwner === 'Immutable') {\n\t\t\t\treturn { Immutable: null };\n\t\t\t} else if ('Shared' in objectOwner) {\n\t\t\t\treturn { Shared: { initialSharedVersion: objectOwner.Shared.initial_shared_version } };\n\t\t\t} else if ('ConsensusAddressOwner' in objectOwner) {\n\t\t\t\treturn {\n\t\t\t\t\tConsensusAddressOwner: {\n\t\t\t\t\t\towner: objectOwner.ConsensusAddressOwner.owner,\n\t\t\t\t\t\tstartVersion: objectOwner.ConsensusAddressOwner.start_version,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn objectOwner;\n\t\t},\n\t}),\n\tpreviousTransaction: bcs.ObjectDigest,\n\tstorageRebate: bcs.u64(),\n});\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iBAAuC;AAEvC,mBAKO;AAEP,MAAM,+BAA2B,qCAAuB,KAAK;AAC7D,MAAM,4BAAwB,qCAAuB,KAAK;AAE1D,MAAM,iBAAiB,eAAI,KAAK,kBAAkB;AAAA,EACjD,OAAO,eAAI;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM,eAAI;AACX,CAAC;AAEM,MAAM,mBAAmB,eAAI,OAAO,oBAAoB;AAAA,EAC9D,MAAM,eAAI,KAAK,QAAQ;AAAA,IACtB,YAAY,eAAI,OAAO,cAAc;AAAA,MACpC,MAAM,eAAe,UAAU;AAAA,QAC9B,OAAO,CAAC,eAAyD;AAChE,gBAAM,gBAAY,6BAAe,UAAU;AAE3C,cACC,UAAU,YAAY,4BACtB,UAAU,WAAW,UACrB,UAAU,SAAS,UACnB,OAAO,UAAU,WAAW,CAAC,MAAM,UAClC;AACD,kBAAM,iBAAiB,UAAU,WAAW,CAAC;AAC7C,gBACC,eAAe,YAAY,4BAC3B,eAAe,WAAW,YAC1B,eAAe,SAAS,OACvB;AACD,qBAAO,EAAE,SAAS,MAAM,OAAO,UAAU;AAAA,YAC1C;AACA,mBAAO,EAAE,UAAM,iCAAmB,cAAc,GAAG,OAAO,OAAO;AAAA,UAClE,WACC,UAAU,YAAY,yBACtB,UAAU,WAAW,kBACrB,UAAU,SAAS,aAClB;AACD,mBAAO,EAAE,WAAW,MAAM,OAAO,YAAY;AAAA,UAC9C;AACA,iBAAO;AAAA,YACN,OAAO;AAAA,cACN,GAAG;AAAA,cACH,YAAY,UAAU,WAAW,IAAI,CAAC,cAAc;AACnD,uBAAO,6BAAkB,iBAAa,iCAAmB,SAAS,CAAC;AAAA,cACpE,CAAC;AAAA,YACF;AAAA,YACA,OAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAC;AAAA,MACD,mBAAmB,eAAI,KAAK;AAAA,MAC5B,SAAS,eAAI,IAAI;AAAA,MACjB,UAAU,eAAI,WAAW,EAAE,UAAU,EAAE,OAAO,wBAAW,CAAC;AAAA,IAC3D,CAAC;AAAA,EACF,CAAC;AAAA,EACD,OAAO,eAAI,MAAM,UAAU;AAAA,IAC1B,OAAO,CAAC,gBAA6B;AACpC,UAAI,gBAAgB,aAAa;AAChC,eAAO,EAAE,WAAW,KAAK;AAAA,MAC1B,WAAW,YAAY,aAAa;AACnC,eAAO,EAAE,QAAQ,EAAE,sBAAsB,YAAY,OAAO,uBAAuB,EAAE;AAAA,MACtF,WAAW,2BAA2B,aAAa;AAClD,eAAO;AAAA,UACN,uBAAuB;AAAA,YACtB,OAAO,YAAY,sBAAsB;AAAA,YACzC,cAAc,YAAY,sBAAsB;AAAA,UACjD;AAAA,QACD;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAAA,EACD,CAAC;AAAA,EACD,qBAAqB,eAAI;AAAA,EACzB,eAAe,eAAI,IAAI;AACxB,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,66 @@
1
+ import type HaneulLedgerClient from '@haneullabs/ledgerjs-hw-app-haneul';
2
+ import type { HaneulClient } from '@haneullabs/haneul/client';
3
+ import type { SignatureWithBytes } from '@haneullabs/haneul/cryptography';
4
+ import { Signer } from '@haneullabs/haneul/cryptography';
5
+ import { Ed25519PublicKey } from '@haneullabs/haneul/keypairs/ed25519';
6
+ import type { Resolution } from '@haneullabs/ledgerjs-hw-app-haneul';
7
+ export { HaneulMoveObject } from './bcs.js';
8
+ export { getInputObjects } from './objects.js';
9
+ /**
10
+ * Configuration options for initializing the LedgerSigner.
11
+ */
12
+ export interface LedgerSignerOptions {
13
+ publicKey: Ed25519PublicKey;
14
+ derivationPath: string;
15
+ ledgerClient: HaneulLedgerClient;
16
+ haneulClient: HaneulClient;
17
+ }
18
+ /**
19
+ * Ledger integrates with the Haneul blockchain to provide signing capabilities using Ledger devices.
20
+ */
21
+ export declare class LedgerSigner extends Signer {
22
+ #private;
23
+ /**
24
+ * Creates an instance of LedgerSigner. It's expected to call the static `fromDerivationPath` method to create an instance.
25
+ * @example
26
+ * ```
27
+ * const signer = await LedgerSigner.fromDerivationPath(derivationPath, options);
28
+ * ```
29
+ */
30
+ constructor({ publicKey, derivationPath, ledgerClient, haneulClient }: LedgerSignerOptions);
31
+ /**
32
+ * Retrieves the key scheme used by this signer.
33
+ */
34
+ getKeyScheme(): "ED25519";
35
+ /**
36
+ * Retrieves the public key associated with this signer.
37
+ * @returns The Ed25519PublicKey instance.
38
+ */
39
+ getPublicKey(): Ed25519PublicKey;
40
+ /**
41
+ * Signs the provided transaction bytes.
42
+ * @returns The signed transaction bytes and signature.
43
+ */
44
+ signTransaction(bytes: Uint8Array, bcsObjects?: Uint8Array[], resolution?: Resolution): Promise<SignatureWithBytes>;
45
+ /**
46
+ * Signs the provided personal message.
47
+ * @returns The signed message bytes and signature.
48
+ */
49
+ signPersonalMessage(bytes: Uint8Array): Promise<SignatureWithBytes>;
50
+ /**
51
+ * Prepares the signer by fetching and setting the public key from a Ledger device.
52
+ * It is recommended to initialize an `LedgerSigner` instance using this function.
53
+ * @returns A promise that resolves once a `LedgerSigner` instance is prepared (public key is set).
54
+ */
55
+ static fromDerivationPath(derivationPath: string, ledgerClient: HaneulLedgerClient, haneulClient: HaneulClient): Promise<LedgerSigner>;
56
+ /**
57
+ * Generic signing is not supported by Ledger.
58
+ * @throws Always throws an error indicating generic signing is unsupported.
59
+ */
60
+ sign(): never;
61
+ /**
62
+ * Generic signing is not supported by Ledger.
63
+ * @throws Always throws an error indicating generic signing is unsupported.
64
+ */
65
+ signWithIntent(): never;
66
+ }
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
23
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
24
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
25
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
26
+ var ledger_exports = {};
27
+ __export(ledger_exports, {
28
+ HaneulMoveObject: () => import_bcs2.HaneulMoveObject,
29
+ LedgerSigner: () => LedgerSigner,
30
+ getInputObjects: () => import_objects2.getInputObjects
31
+ });
32
+ module.exports = __toCommonJS(ledger_exports);
33
+ var import_cryptography = require("@haneullabs/haneul/cryptography");
34
+ var import_ed25519 = require("@haneullabs/haneul/keypairs/ed25519");
35
+ var import_transactions = require("@haneullabs/haneul/transactions");
36
+ var import_utils = require("@haneullabs/haneul/utils");
37
+ var import_bcs = require("@haneullabs/haneul/bcs");
38
+ var import_objects = require("./objects.js");
39
+ var import_bcs2 = require("./bcs.js");
40
+ var import_objects2 = require("./objects.js");
41
+ var _derivationPath, _publicKey, _ledgerClient, _haneulClient;
42
+ const _LedgerSigner = class _LedgerSigner extends import_cryptography.Signer {
43
+ /**
44
+ * Creates an instance of LedgerSigner. It's expected to call the static `fromDerivationPath` method to create an instance.
45
+ * @example
46
+ * ```
47
+ * const signer = await LedgerSigner.fromDerivationPath(derivationPath, options);
48
+ * ```
49
+ */
50
+ constructor({ publicKey, derivationPath, ledgerClient, haneulClient }) {
51
+ super();
52
+ __privateAdd(this, _derivationPath);
53
+ __privateAdd(this, _publicKey);
54
+ __privateAdd(this, _ledgerClient);
55
+ __privateAdd(this, _haneulClient);
56
+ __privateSet(this, _publicKey, publicKey);
57
+ __privateSet(this, _derivationPath, derivationPath);
58
+ __privateSet(this, _ledgerClient, ledgerClient);
59
+ __privateSet(this, _haneulClient, haneulClient);
60
+ }
61
+ /**
62
+ * Retrieves the key scheme used by this signer.
63
+ */
64
+ getKeyScheme() {
65
+ return "ED25519";
66
+ }
67
+ /**
68
+ * Retrieves the public key associated with this signer.
69
+ * @returns The Ed25519PublicKey instance.
70
+ */
71
+ getPublicKey() {
72
+ return __privateGet(this, _publicKey);
73
+ }
74
+ /**
75
+ * Signs the provided transaction bytes.
76
+ * @returns The signed transaction bytes and signature.
77
+ */
78
+ async signTransaction(bytes, bcsObjects, resolution) {
79
+ const transactionOptions = bcsObjects ? { bcsObjects } : await (0, import_objects.getInputObjects)(import_transactions.Transaction.from(bytes), __privateGet(this, _haneulClient)).catch(() => ({
80
+ // Fail gracefully so network errors or serialization issues don't break transaction signing:
81
+ bcsObjects: []
82
+ }));
83
+ const intentMessage = (0, import_cryptography.messageWithIntent)("TransactionData", bytes);
84
+ const { signature } = await __privateGet(this, _ledgerClient).signTransaction(
85
+ __privateGet(this, _derivationPath),
86
+ intentMessage,
87
+ transactionOptions,
88
+ resolution
89
+ );
90
+ return {
91
+ bytes: (0, import_utils.toBase64)(bytes),
92
+ signature: (0, import_cryptography.toSerializedSignature)({
93
+ signature,
94
+ signatureScheme: this.getKeyScheme(),
95
+ publicKey: __privateGet(this, _publicKey)
96
+ })
97
+ };
98
+ }
99
+ /**
100
+ * Signs the provided personal message.
101
+ * @returns The signed message bytes and signature.
102
+ */
103
+ async signPersonalMessage(bytes) {
104
+ const intentMessage = (0, import_cryptography.messageWithIntent)(
105
+ "PersonalMessage",
106
+ import_bcs.bcs.byteVector().serialize(bytes).toBytes()
107
+ );
108
+ const { signature } = await __privateGet(this, _ledgerClient).signTransaction(
109
+ __privateGet(this, _derivationPath),
110
+ intentMessage
111
+ );
112
+ return {
113
+ bytes: (0, import_utils.toBase64)(bytes),
114
+ signature: (0, import_cryptography.toSerializedSignature)({
115
+ signature,
116
+ signatureScheme: this.getKeyScheme(),
117
+ publicKey: __privateGet(this, _publicKey)
118
+ })
119
+ };
120
+ }
121
+ /**
122
+ * Prepares the signer by fetching and setting the public key from a Ledger device.
123
+ * It is recommended to initialize an `LedgerSigner` instance using this function.
124
+ * @returns A promise that resolves once a `LedgerSigner` instance is prepared (public key is set).
125
+ */
126
+ static async fromDerivationPath(derivationPath, ledgerClient, haneulClient) {
127
+ const { publicKey } = await ledgerClient.getPublicKey(derivationPath);
128
+ if (!publicKey) {
129
+ throw new Error("Failed to get public key from Ledger.");
130
+ }
131
+ return new _LedgerSigner({
132
+ derivationPath,
133
+ publicKey: new import_ed25519.Ed25519PublicKey(publicKey),
134
+ ledgerClient,
135
+ haneulClient
136
+ });
137
+ }
138
+ /**
139
+ * Generic signing is not supported by Ledger.
140
+ * @throws Always throws an error indicating generic signing is unsupported.
141
+ */
142
+ sign() {
143
+ throw new Error("Ledger Signer does not support generic signing.");
144
+ }
145
+ /**
146
+ * Generic signing is not supported by Ledger.
147
+ * @throws Always throws an error indicating generic signing is unsupported.
148
+ */
149
+ signWithIntent() {
150
+ throw new Error("Ledger Signer does not support generic signing.");
151
+ }
152
+ };
153
+ _derivationPath = new WeakMap();
154
+ _publicKey = new WeakMap();
155
+ _ledgerClient = new WeakMap();
156
+ _haneulClient = new WeakMap();
157
+ let LedgerSigner = _LedgerSigner;
158
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ledger/index.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type HaneulLedgerClient from '@haneullabs/ledgerjs-hw-app-haneul';\nimport type { HaneulClient } from '@haneullabs/haneul/client';\nimport type { SignatureWithBytes } from '@haneullabs/haneul/cryptography';\nimport { messageWithIntent, Signer, toSerializedSignature } from '@haneullabs/haneul/cryptography';\nimport { Ed25519PublicKey } from '@haneullabs/haneul/keypairs/ed25519';\nimport { Transaction } from '@haneullabs/haneul/transactions';\nimport { toBase64 } from '@haneullabs/haneul/utils';\n\nimport { bcs } from '@haneullabs/haneul/bcs';\nimport { getInputObjects } from './objects.js';\nimport type { Resolution } from '@haneullabs/ledgerjs-hw-app-haneul';\n\nexport { HaneulMoveObject } from './bcs.js';\nexport { getInputObjects } from './objects.js';\n\n/**\n * Configuration options for initializing the LedgerSigner.\n */\nexport interface LedgerSignerOptions {\n\tpublicKey: Ed25519PublicKey;\n\tderivationPath: string;\n\tledgerClient: HaneulLedgerClient;\n\thaneulClient: HaneulClient;\n}\n\n/**\n * Ledger integrates with the Haneul blockchain to provide signing capabilities using Ledger devices.\n */\nexport class LedgerSigner extends Signer {\n\t#derivationPath: string;\n\t#publicKey: Ed25519PublicKey;\n\t#ledgerClient: HaneulLedgerClient;\n\t#haneulClient: HaneulClient;\n\n\t/**\n\t * Creates an instance of LedgerSigner. It's expected to call the static `fromDerivationPath` method to create an instance.\n\t * @example\n\t * ```\n\t * const signer = await LedgerSigner.fromDerivationPath(derivationPath, options);\n\t * ```\n\t */\n\tconstructor({ publicKey, derivationPath, ledgerClient, haneulClient }: LedgerSignerOptions) {\n\t\tsuper();\n\t\tthis.#publicKey = publicKey;\n\t\tthis.#derivationPath = derivationPath;\n\t\tthis.#ledgerClient = ledgerClient;\n\t\tthis.#haneulClient = haneulClient;\n\t}\n\n\t/**\n\t * Retrieves the key scheme used by this signer.\n\t */\n\toverride getKeyScheme() {\n\t\treturn 'ED25519' as const;\n\t}\n\n\t/**\n\t * Retrieves the public key associated with this signer.\n\t * @returns The Ed25519PublicKey instance.\n\t */\n\toverride getPublicKey() {\n\t\treturn this.#publicKey;\n\t}\n\n\t/**\n\t * Signs the provided transaction bytes.\n\t * @returns The signed transaction bytes and signature.\n\t */\n\toverride async signTransaction(\n\t\tbytes: Uint8Array,\n\t\tbcsObjects?: Uint8Array[],\n\t\tresolution?: Resolution,\n\t): Promise<SignatureWithBytes> {\n\t\tconst transactionOptions = bcsObjects\n\t\t\t? { bcsObjects }\n\t\t\t: await getInputObjects(Transaction.from(bytes), this.#haneulClient).catch(() => ({\n\t\t\t\t\t// Fail gracefully so network errors or serialization issues don't break transaction signing:\n\t\t\t\t\tbcsObjects: [],\n\t\t\t\t}));\n\n\t\tconst intentMessage = messageWithIntent('TransactionData', bytes);\n\t\tconst { signature } = await this.#ledgerClient.signTransaction(\n\t\t\tthis.#derivationPath,\n\t\t\tintentMessage,\n\t\t\ttransactionOptions,\n\t\t\tresolution,\n\t\t);\n\n\t\treturn {\n\t\t\tbytes: toBase64(bytes),\n\t\t\tsignature: toSerializedSignature({\n\t\t\t\tsignature,\n\t\t\t\tsignatureScheme: this.getKeyScheme(),\n\t\t\t\tpublicKey: this.#publicKey,\n\t\t\t}),\n\t\t};\n\t}\n\n\t/**\n\t * Signs the provided personal message.\n\t * @returns The signed message bytes and signature.\n\t */\n\toverride async signPersonalMessage(bytes: Uint8Array): Promise<SignatureWithBytes> {\n\t\tconst intentMessage = messageWithIntent(\n\t\t\t'PersonalMessage',\n\t\t\tbcs.byteVector().serialize(bytes).toBytes(),\n\t\t);\n\t\tconst { signature } = await this.#ledgerClient.signTransaction(\n\t\t\tthis.#derivationPath,\n\t\t\tintentMessage,\n\t\t);\n\n\t\treturn {\n\t\t\tbytes: toBase64(bytes),\n\t\t\tsignature: toSerializedSignature({\n\t\t\t\tsignature,\n\t\t\t\tsignatureScheme: this.getKeyScheme(),\n\t\t\t\tpublicKey: this.#publicKey,\n\t\t\t}),\n\t\t};\n\t}\n\n\t/**\n\t * Prepares the signer by fetching and setting the public key from a Ledger device.\n\t * It is recommended to initialize an `LedgerSigner` instance using this function.\n\t * @returns A promise that resolves once a `LedgerSigner` instance is prepared (public key is set).\n\t */\n\tstatic async fromDerivationPath(\n\t\tderivationPath: string,\n\t\tledgerClient: HaneulLedgerClient,\n\t\thaneulClient: HaneulClient,\n\t) {\n\t\tconst { publicKey } = await ledgerClient.getPublicKey(derivationPath);\n\t\tif (!publicKey) {\n\t\t\tthrow new Error('Failed to get public key from Ledger.');\n\t\t}\n\n\t\treturn new LedgerSigner({\n\t\t\tderivationPath,\n\t\t\tpublicKey: new Ed25519PublicKey(publicKey),\n\t\t\tledgerClient,\n\t\t\thaneulClient,\n\t\t});\n\t}\n\n\t/**\n\t * Generic signing is not supported by Ledger.\n\t * @throws Always throws an error indicating generic signing is unsupported.\n\t */\n\toverride sign(): never {\n\t\tthrow new Error('Ledger Signer does not support generic signing.');\n\t}\n\n\t/**\n\t * Generic signing is not supported by Ledger.\n\t * @throws Always throws an error indicating generic signing is unsupported.\n\t */\n\toverride signWithIntent(): never {\n\t\tthrow new Error('Ledger Signer does not support generic signing.');\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,0BAAiE;AACjE,qBAAiC;AACjC,0BAA4B;AAC5B,mBAAyB;AAEzB,iBAAoB;AACpB,qBAAgC;AAGhC,IAAAA,cAAiC;AACjC,IAAAC,kBAAgC;AAhBhC;AA+BO,MAAM,gBAAN,MAAM,sBAAqB,2BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaxC,YAAY,EAAE,WAAW,gBAAgB,cAAc,aAAa,GAAwB;AAC3F,UAAM;AAbP;AACA;AACA;AACA;AAWC,uBAAK,YAAa;AAClB,uBAAK,iBAAkB;AACvB,uBAAK,eAAgB;AACrB,uBAAK,eAAgB;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKS,eAAe;AACvB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMS,eAAe;AACvB,WAAO,mBAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAe,gBACd,OACA,YACA,YAC8B;AAC9B,UAAM,qBAAqB,aACxB,EAAE,WAAW,IACb,UAAM,gCAAgB,gCAAY,KAAK,KAAK,GAAG,mBAAK,cAAa,EAAE,MAAM,OAAO;AAAA;AAAA,MAEhF,YAAY,CAAC;AAAA,IACd,EAAE;AAEJ,UAAM,oBAAgB,uCAAkB,mBAAmB,KAAK;AAChE,UAAM,EAAE,UAAU,IAAI,MAAM,mBAAK,eAAc;AAAA,MAC9C,mBAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAEA,WAAO;AAAA,MACN,WAAO,uBAAS,KAAK;AAAA,MACrB,eAAW,2CAAsB;AAAA,QAChC;AAAA,QACA,iBAAiB,KAAK,aAAa;AAAA,QACnC,WAAW,mBAAK;AAAA,MACjB,CAAC;AAAA,IACF;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAe,oBAAoB,OAAgD;AAClF,UAAM,oBAAgB;AAAA,MACrB;AAAA,MACA,eAAI,WAAW,EAAE,UAAU,KAAK,EAAE,QAAQ;AAAA,IAC3C;AACA,UAAM,EAAE,UAAU,IAAI,MAAM,mBAAK,eAAc;AAAA,MAC9C,mBAAK;AAAA,MACL;AAAA,IACD;AAEA,WAAO;AAAA,MACN,WAAO,uBAAS,KAAK;AAAA,MACrB,eAAW,2CAAsB;AAAA,QAChC;AAAA,QACA,iBAAiB,KAAK,aAAa;AAAA,QACnC,WAAW,mBAAK;AAAA,MACjB,CAAC;AAAA,IACF;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,mBACZ,gBACA,cACA,cACC;AACD,UAAM,EAAE,UAAU,IAAI,MAAM,aAAa,aAAa,cAAc;AACpE,QAAI,CAAC,WAAW;AACf,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACxD;AAEA,WAAO,IAAI,cAAa;AAAA,MACvB;AAAA,MACA,WAAW,IAAI,gCAAiB,SAAS;AAAA,MACzC;AAAA,MACA;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMS,OAAc;AACtB,UAAM,IAAI,MAAM,iDAAiD;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMS,iBAAwB;AAChC,UAAM,IAAI,MAAM,iDAAiD;AAAA,EAClE;AACD;AAnIC;AACA;AACA;AACA;AAJM,IAAM,eAAN;",
6
+ "names": ["import_bcs", "import_objects"]
7
+ }
@@ -0,0 +1,5 @@
1
+ import type { Transaction } from '@haneullabs/haneul/transactions';
2
+ import type { HaneulClient } from '@haneullabs/haneul/client';
3
+ export declare const getInputObjects: (transaction: Transaction, client: HaneulClient) => Promise<{
4
+ bcsObjects: Uint8Array<ArrayBuffer>[];
5
+ }>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var objects_exports = {};
20
+ __export(objects_exports, {
21
+ getInputObjects: () => getInputObjects
22
+ });
23
+ module.exports = __toCommonJS(objects_exports);
24
+ var import_bcs = require("./bcs.js");
25
+ const getInputObjects = async (transaction, client) => {
26
+ const data = transaction.getData();
27
+ const gasObjectIds = data.gasData.payment?.map((object) => object.objectId) ?? [];
28
+ const inputObjectIds = data.inputs.map((input) => {
29
+ return input.$kind === "Object" && input.Object.$kind === "ImmOrOwnedObject" ? input.Object.ImmOrOwnedObject.objectId : null;
30
+ }).filter((objectId) => !!objectId);
31
+ const objects = await client.multiGetObjects({
32
+ ids: [...gasObjectIds, ...inputObjectIds],
33
+ options: {
34
+ showBcs: true,
35
+ showPreviousTransaction: true,
36
+ showStorageRebate: true,
37
+ showOwner: true
38
+ }
39
+ });
40
+ const bcsObjects = objects.map((object) => {
41
+ if (object.error || !object.data || object.data.bcs?.dataType !== "moveObject") {
42
+ return null;
43
+ }
44
+ return import_bcs.HaneulMoveObject.serialize({
45
+ data: {
46
+ MoveObject: {
47
+ type: object.data.bcs.type,
48
+ hasPublicTransfer: object.data.bcs.hasPublicTransfer,
49
+ version: object.data.bcs.version,
50
+ contents: object.data.bcs.bcsBytes
51
+ }
52
+ },
53
+ owner: object.data.owner,
54
+ previousTransaction: object.data.previousTransaction,
55
+ storageRebate: object.data.storageRebate
56
+ }).toBytes();
57
+ }).filter((bcsBytes) => !!bcsBytes);
58
+ return { bcsObjects };
59
+ };
60
+ //# sourceMappingURL=objects.js.map