@fastnear/utils 0.9.13 → 0.10.2

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.
@@ -1,5 +1,5 @@
1
- /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.9.12) */
2
- /* https://www.npmjs.com/package/@fastnear/utils/v/0.9.12 */
1
+ /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.1) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.10.1 */
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -21,6 +21,7 @@ var __copyProps = (to, from, except, desc) => {
21
21
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
22
  var crypto_exports = {};
23
23
  __export(crypto_exports, {
24
+ curveFromKey: () => curveFromKey,
24
25
  keyFromString: () => keyFromString,
25
26
  keyToString: () => keyToString,
26
27
  privateKeyFromRandom: () => privateKeyFromRandom,
@@ -31,32 +32,59 @@ __export(crypto_exports, {
31
32
  });
32
33
  module.exports = __toCommonJS(crypto_exports);
33
34
  var import_ed25519 = require("@noble/curves/ed25519.js");
35
+ var import_secp256k1 = require("@noble/curves/secp256k1.js");
34
36
  var import_sha2 = require("@noble/hashes/sha2.js");
35
37
  var import_misc = require("./misc.js");
38
+ function curveFromKey(key) {
39
+ if (!key.includes(":")) return "ed25519";
40
+ const curve = key.split(":")[0];
41
+ if (curve === "ed25519" || curve === "secp256k1") return curve;
42
+ throw new Error(`Unsupported curve: ${curve}`);
43
+ }
44
+ __name(curveFromKey, "curveFromKey");
36
45
  const keyFromString = /* @__PURE__ */ __name((key) => (0, import_misc.fromBase58)(
37
46
  key.includes(":") ? (() => {
38
47
  const [curve, keyPart] = key.split(":");
39
- if (curve !== "ed25519") {
48
+ if (curve !== "ed25519" && curve !== "secp256k1") {
40
49
  throw new Error(`Unsupported curve: ${curve}`);
41
50
  }
42
51
  return keyPart;
43
52
  })() : key
44
53
  ), "keyFromString");
45
- const keyToString = /* @__PURE__ */ __name((key) => `ed25519:${(0, import_misc.toBase58)(key)}`, "keyToString");
54
+ const keyToString = /* @__PURE__ */ __name((key, curve = "ed25519") => `${curve}:${(0, import_misc.toBase58)(key)}`, "keyToString");
46
55
  function publicKeyFromPrivate(privateKey) {
56
+ const curve = curveFromKey(privateKey);
57
+ if (curve === "secp256k1") {
58
+ const secret2 = keyFromString(privateKey);
59
+ const fullPk = import_secp256k1.secp256k1.getPublicKey(secret2, false);
60
+ const publicKey2 = fullPk.slice(1);
61
+ return keyToString(publicKey2, "secp256k1");
62
+ }
47
63
  const secret = keyFromString(privateKey).slice(0, 32);
48
64
  const publicKey = import_ed25519.ed25519.getPublicKey(secret);
49
65
  return keyToString(publicKey);
50
66
  }
51
67
  __name(publicKeyFromPrivate, "publicKeyFromPrivate");
52
- function privateKeyFromRandom() {
53
- const privateKey = crypto.getRandomValues(new Uint8Array(64));
54
- return keyToString(privateKey);
68
+ function privateKeyFromRandom(curve = "ed25519") {
69
+ const size = curve === "secp256k1" ? 32 : 64;
70
+ const privateKey = crypto.getRandomValues(new Uint8Array(size));
71
+ return keyToString(privateKey, curve);
55
72
  }
56
73
  __name(privateKeyFromRandom, "privateKeyFromRandom");
57
74
  function signHash(hashBytes, privateKey, opts) {
58
- const secret = keyFromString(privateKey).slice(0, 32);
59
- const signature = import_ed25519.ed25519.sign(hashBytes, secret);
75
+ const curve = curveFromKey(privateKey);
76
+ let signature;
77
+ if (curve === "secp256k1") {
78
+ const secret = keyFromString(privateKey);
79
+ const raw = import_secp256k1.secp256k1.sign(hashBytes, secret, { prehash: false, format: "recovered" });
80
+ signature = new Uint8Array(65);
81
+ signature.set(raw.slice(1, 33), 0);
82
+ signature.set(raw.slice(33, 65), 32);
83
+ signature[64] = raw[0];
84
+ } else {
85
+ const secret = keyFromString(privateKey).slice(0, 32);
86
+ signature = import_ed25519.ed25519.sign(hashBytes, secret);
87
+ }
60
88
  if (opts?.returnBase58) {
61
89
  return (0, import_misc.toBase58)(signature);
62
90
  }
@@ -70,6 +98,7 @@ function signBytes(bytes, privateKey) {
70
98
  __name(signBytes, "signBytes");
71
99
  // Annotate the CommonJS export names for ESM import in node:
72
100
  0 && (module.exports = {
101
+ curveFromKey,
73
102
  keyFromString,
74
103
  keyToString,
75
104
  privateKeyFromRandom,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto.ts"],"sourcesContent":["import { ed25519 } from \"@noble/curves/ed25519.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { fromBase58, toBase58 } from \"./misc.js\";\n\nexport { sha256 };\n\nexport const keyFromString = (key) =>\n fromBase58(\n key.includes(\":\")\n ? (() => {\n const [curve, keyPart] = key.split(\":\");\n if (curve !== \"ed25519\") {\n throw new Error(`Unsupported curve: ${curve}`);\n }\n return keyPart;\n })()\n : key,\n );\n\nexport const keyToString = (key: Uint8Array) => `ed25519:${toBase58(key)}`;\n\nexport function publicKeyFromPrivate(privateKey: string) {\n const secret = keyFromString(privateKey).slice(0, 32);\n const publicKey = ed25519.getPublicKey(secret);\n return keyToString(publicKey);\n}\n\nexport function privateKeyFromRandom() {\n const privateKey = crypto.getRandomValues(new Uint8Array(64));\n return keyToString(privateKey);\n}\n\nexport function signHash(hashBytes: Uint8Array, privateKey: string, opts?: any): Uint8Array | string {\n const secret = keyFromString(privateKey).slice(0, 32);\n const signature = ed25519.sign(hashBytes, secret);\n\n if (opts?.returnBase58) {\n return toBase58(signature);\n }\n\n return signature;\n}\n\nexport function signBytes(bytes: Uint8Array, privateKey: string) {\n const hash = sha256(bytes);\n return signHash(hash, privateKey);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AACxB,kBAAuB;AACvB,kBAAqC;AAI9B,MAAM,gBAAgB,wBAAC,YAC5B;AAAA,EACE,IAAI,SAAS,GAAG,KACX,MAAM;AACL,UAAM,CAAC,OAAO,OAAO,IAAI,IAAI,MAAM,GAAG;AACtC,QAAI,UAAU,WAAW;AACvB,YAAM,IAAI,MAAM,sBAAsB,KAAK,EAAE;AAAA,IAC/C;AACA,WAAO;AAAA,EACT,GAAG,IACH;AACN,GAX2B;AAatB,MAAM,cAAc,wBAAC,QAAoB,eAAW,sBAAS,GAAG,CAAC,IAA7C;AAEpB,SAAS,qBAAqB,YAAoB;AACvD,QAAM,SAAS,cAAc,UAAU,EAAE,MAAM,GAAG,EAAE;AACpD,QAAM,YAAY,uBAAQ,aAAa,MAAM;AAC7C,SAAO,YAAY,SAAS;AAC9B;AAJgB;AAMT,SAAS,uBAAuB;AACrC,QAAM,aAAa,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;AAC5D,SAAO,YAAY,UAAU;AAC/B;AAHgB;AAKT,SAAS,SAAS,WAAuB,YAAoB,MAAiC;AACnG,QAAM,SAAS,cAAc,UAAU,EAAE,MAAM,GAAG,EAAE;AACpD,QAAM,YAAY,uBAAQ,KAAK,WAAW,MAAM;AAEhD,MAAI,MAAM,cAAc;AACtB,eAAO,sBAAS,SAAS;AAAA,EAC3B;AAEA,SAAO;AACT;AATgB;AAWT,SAAS,UAAU,OAAmB,YAAoB;AAC/D,QAAM,WAAO,oBAAO,KAAK;AACzB,SAAO,SAAS,MAAM,UAAU;AAClC;AAHgB;","names":[]}
1
+ {"version":3,"sources":["../../src/crypto.ts"],"sourcesContent":["import { ed25519 } from \"@noble/curves/ed25519.js\";\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { fromBase58, toBase58 } from \"./misc.js\";\n\nexport { sha256 };\n\nexport type KeyCurve = \"ed25519\" | \"secp256k1\";\n\nexport function curveFromKey(key: string): KeyCurve {\n if (!key.includes(\":\")) return \"ed25519\";\n const curve = key.split(\":\")[0];\n if (curve === \"ed25519\" || curve === \"secp256k1\") return curve;\n throw new Error(`Unsupported curve: ${curve}`);\n}\n\nexport const keyFromString = (key) =>\n fromBase58(\n key.includes(\":\")\n ? (() => {\n const [curve, keyPart] = key.split(\":\");\n if (curve !== \"ed25519\" && curve !== \"secp256k1\") {\n throw new Error(`Unsupported curve: ${curve}`);\n }\n return keyPart;\n })()\n : key,\n );\n\nexport const keyToString = (key: Uint8Array, curve: KeyCurve = \"ed25519\") =>\n `${curve}:${toBase58(key)}`;\n\nexport function publicKeyFromPrivate(privateKey: string) {\n const curve = curveFromKey(privateKey);\n if (curve === \"secp256k1\") {\n const secret = keyFromString(privateKey);\n const fullPk = secp256k1.getPublicKey(secret, false);\n // Strip the 0x04 prefix byte — NEAR stores 64 bytes (x‖y)\n const publicKey = fullPk.slice(1);\n return keyToString(publicKey, \"secp256k1\");\n }\n const secret = keyFromString(privateKey).slice(0, 32);\n const publicKey = ed25519.getPublicKey(secret);\n return keyToString(publicKey);\n}\n\nexport function privateKeyFromRandom(curve: KeyCurve = \"ed25519\") {\n const size = curve === \"secp256k1\" ? 32 : 64;\n const privateKey = crypto.getRandomValues(new Uint8Array(size));\n return keyToString(privateKey, curve);\n}\n\nexport function signHash(hashBytes: Uint8Array, privateKey: string, opts?: any): Uint8Array | string {\n const curve = curveFromKey(privateKey);\n\n let signature: Uint8Array;\n if (curve === \"secp256k1\") {\n const secret = keyFromString(privateKey);\n // 'recovered' format returns 65 bytes: [v(1), r(32), s(32)]\n const raw = secp256k1.sign(hashBytes, secret, { prehash: false, format: 'recovered' });\n // NEAR expects [r(32), s(32), v(1)]\n signature = new Uint8Array(65);\n signature.set(raw.slice(1, 33), 0); // r\n signature.set(raw.slice(33, 65), 32); // s\n signature[64] = raw[0]; // v\n } else {\n const secret = keyFromString(privateKey).slice(0, 32);\n signature = ed25519.sign(hashBytes, secret);\n }\n\n if (opts?.returnBase58) {\n return toBase58(signature);\n }\n\n return signature;\n}\n\nexport function signBytes(bytes: Uint8Array, privateKey: string) {\n const hash = sha256(bytes);\n return signHash(hash, privateKey);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AACxB,uBAA0B;AAC1B,kBAAuB;AACvB,kBAAqC;AAM9B,SAAS,aAAa,KAAuB;AAClD,MAAI,CAAC,IAAI,SAAS,GAAG,EAAG,QAAO;AAC/B,QAAM,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;AAC9B,MAAI,UAAU,aAAa,UAAU,YAAa,QAAO;AACzD,QAAM,IAAI,MAAM,sBAAsB,KAAK,EAAE;AAC/C;AALgB;AAOT,MAAM,gBAAgB,wBAAC,YAC5B;AAAA,EACE,IAAI,SAAS,GAAG,KACX,MAAM;AACL,UAAM,CAAC,OAAO,OAAO,IAAI,IAAI,MAAM,GAAG;AACtC,QAAI,UAAU,aAAa,UAAU,aAAa;AAChD,YAAM,IAAI,MAAM,sBAAsB,KAAK,EAAE;AAAA,IAC/C;AACA,WAAO;AAAA,EACT,GAAG,IACH;AACN,GAX2B;AAatB,MAAM,cAAc,wBAAC,KAAiB,QAAkB,cAC7D,GAAG,KAAK,QAAI,sBAAS,GAAG,CAAC,IADA;AAGpB,SAAS,qBAAqB,YAAoB;AACvD,QAAM,QAAQ,aAAa,UAAU;AACrC,MAAI,UAAU,aAAa;AACzB,UAAMA,UAAS,cAAc,UAAU;AACvC,UAAM,SAAS,2BAAU,aAAaA,SAAQ,KAAK;AAEnD,UAAMC,aAAY,OAAO,MAAM,CAAC;AAChC,WAAO,YAAYA,YAAW,WAAW;AAAA,EAC3C;AACA,QAAM,SAAS,cAAc,UAAU,EAAE,MAAM,GAAG,EAAE;AACpD,QAAM,YAAY,uBAAQ,aAAa,MAAM;AAC7C,SAAO,YAAY,SAAS;AAC9B;AAZgB;AAcT,SAAS,qBAAqB,QAAkB,WAAW;AAChE,QAAM,OAAO,UAAU,cAAc,KAAK;AAC1C,QAAM,aAAa,OAAO,gBAAgB,IAAI,WAAW,IAAI,CAAC;AAC9D,SAAO,YAAY,YAAY,KAAK;AACtC;AAJgB;AAMT,SAAS,SAAS,WAAuB,YAAoB,MAAiC;AACnG,QAAM,QAAQ,aAAa,UAAU;AAErC,MAAI;AACJ,MAAI,UAAU,aAAa;AACzB,UAAM,SAAS,cAAc,UAAU;AAEvC,UAAM,MAAM,2BAAU,KAAK,WAAW,QAAQ,EAAE,SAAS,OAAO,QAAQ,YAAY,CAAC;AAErF,gBAAY,IAAI,WAAW,EAAE;AAC7B,cAAU,IAAI,IAAI,MAAM,GAAG,EAAE,GAAG,CAAC;AACjC,cAAU,IAAI,IAAI,MAAM,IAAI,EAAE,GAAG,EAAE;AACnC,cAAU,EAAE,IAAI,IAAI,CAAC;AAAA,EACvB,OAAO;AACL,UAAM,SAAS,cAAc,UAAU,EAAE,MAAM,GAAG,EAAE;AACpD,gBAAY,uBAAQ,KAAK,WAAW,MAAM;AAAA,EAC5C;AAEA,MAAI,MAAM,cAAc;AACtB,eAAO,sBAAS,SAAS;AAAA,EAC3B;AAEA,SAAO;AACT;AAvBgB;AAyBT,SAAS,UAAU,OAAmB,YAAoB;AAC/D,QAAM,WAAO,oBAAO,KAAK;AACzB,SAAO,SAAS,MAAM,UAAU;AAClC;AAHgB;","names":["secret","publicKey"]}
@@ -1,5 +1,5 @@
1
- /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.9.12) */
2
- /* https://www.npmjs.com/package/@fastnear/utils/v/0.9.12 */
1
+ /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.1) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.10.1 */
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -38,7 +38,7 @@ __reExport(index_exports, require("./crypto.js"), module.exports);
38
38
  __reExport(index_exports, require("./transaction.js"), module.exports);
39
39
  __reExport(index_exports, require("./misc.js"), module.exports);
40
40
  __reExport(index_exports, require("./storage.js"), module.exports);
41
- var import_borsh = require("borsh");
41
+ var import_borsh = require("@fastnear/borsh");
42
42
  var borshSchema = __toESM(require("@fastnear/borsh-schema"), 1);
43
43
  const exp = {
44
44
  borsh: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./crypto.js\";\nexport * from \"./transaction.js\";\nexport * from \"./misc.js\";\nexport * from \"./storage.js\";\n\nimport { serialize, deserialize } from \"borsh\";\nimport * as borshSchema from \"@fastnear/borsh-schema\";\n\n// exports (or re-exports as well)\nconst exp = {\n borsh: {\n serialize,\n deserialize\n },\n borshSchema,\n}\n\nexport { exp }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,wBAAd;AACA,0BAAc,6BADd;AAEA,0BAAc,sBAFd;AAGA,0BAAc,yBAHd;AAKA,mBAAuC;AACvC,kBAA6B;AAG7B,MAAM,MAAM;AAAA,EACV,OAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AAAA,EACA;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./crypto.js\";\nexport * from \"./transaction.js\";\nexport * from \"./misc.js\";\nexport * from \"./storage.js\";\n\nimport { serialize, deserialize } from \"@fastnear/borsh\";\nimport * as borshSchema from \"@fastnear/borsh-schema\";\n\n// exports (or re-exports as well)\nconst exp = {\n borsh: {\n serialize,\n deserialize\n },\n borshSchema,\n}\n\nexport { exp }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,wBAAd;AACA,0BAAc,6BADd;AAEA,0BAAc,sBAFd;AAGA,0BAAc,yBAHd;AAKA,mBAAuC;AACvC,kBAA6B;AAG7B,MAAM,MAAM;AAAA,EACV,OAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AAAA,EACA;AACF;","names":[]}
@@ -1,12 +1,14 @@
1
- import { Schema, serialize, deserialize } from 'borsh';
1
+ import { Schema, serialize, deserialize } from '@fastnear/borsh';
2
2
  import * as borshSchema from '@fastnear/borsh-schema';
3
3
  export { sha256 } from '@noble/hashes/sha2.js';
4
4
  export { base58_to_binary as fromBase58, binary_to_base58 as toBase58 } from 'base58-js';
5
5
 
6
+ type KeyCurve = "ed25519" | "secp256k1";
7
+ declare function curveFromKey(key: string): KeyCurve;
6
8
  declare const keyFromString: (key: any) => Uint8Array<ArrayBufferLike>;
7
- declare const keyToString: (key: Uint8Array) => string;
9
+ declare const keyToString: (key: Uint8Array, curve?: KeyCurve) => string;
8
10
  declare function publicKeyFromPrivate(privateKey: string): string;
9
- declare function privateKeyFromRandom(): string;
11
+ declare function privateKeyFromRandom(curve?: KeyCurve): string;
10
12
  declare function signHash(hashBytes: Uint8Array, privateKey: string, opts?: any): Uint8Array | string;
11
13
  declare function signBytes(bytes: Uint8Array, privateKey: string): string | Uint8Array<ArrayBufferLike>;
12
14
 
@@ -27,9 +29,15 @@ declare const txToJsonStringified: (tx: PlainTransaction) => string;
27
29
  declare function mapTransaction(jsonTransaction: PlainTransaction): {
28
30
  signerId: string;
29
31
  publicKey: {
32
+ secp256k1Key: {
33
+ data: Uint8Array<ArrayBufferLike>;
34
+ };
35
+ ed25519Key?: undefined;
36
+ } | {
30
37
  ed25519Key: {
31
38
  data: Uint8Array<ArrayBufferLike>;
32
39
  };
40
+ secp256k1Key?: undefined;
33
41
  };
34
42
  nonce: bigint;
35
43
  receiverId: string;
@@ -115,4 +123,4 @@ declare const exp: {
115
123
  borshSchema: typeof borshSchema;
116
124
  };
117
125
 
118
- export { LsPrefix, type NEP413Message, type PlainSignedTransaction, type PlainTransaction, SCHEMA, type StorageBackend, base64ToBytes, bytesToBase64, canSignWithLAK, convertUnit, createDefaultStorage, deepCopy, exp, fromBase64, fromHex, keyFromString, keyToString, lsGet, lsSet, mapAction, mapTransaction, memoryStore, parseJsonFromBytes, privateKeyFromRandom, publicKeyFromPrivate, serializeSignedTransaction, serializeTransaction, signBytes, signHash, storage, toBase64, toHex, tryParseJson, txToJson, txToJsonStringified };
126
+ export { type KeyCurve, LsPrefix, type NEP413Message, type PlainSignedTransaction, type PlainTransaction, SCHEMA, type StorageBackend, base64ToBytes, bytesToBase64, canSignWithLAK, convertUnit, createDefaultStorage, curveFromKey, deepCopy, exp, fromBase64, fromHex, keyFromString, keyToString, lsGet, lsSet, mapAction, mapTransaction, memoryStore, parseJsonFromBytes, privateKeyFromRandom, publicKeyFromPrivate, serializeSignedTransaction, serializeTransaction, signBytes, signHash, storage, toBase64, toHex, tryParseJson, txToJson, txToJsonStringified };
package/dist/cjs/misc.cjs CHANGED
@@ -1,11 +1,9 @@
1
- /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.9.12) */
2
- /* https://www.npmjs.com/package/@fastnear/utils/v/0.9.12 */
1
+ /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.1) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.10.1 */
3
3
  "use strict";
4
- var __create = Object.create;
5
4
  var __defProp = Object.defineProperty;
6
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
8
- var __getProtoOf = Object.getPrototypeOf;
9
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
10
8
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
11
9
  var __export = (target, all) => {
@@ -20,14 +18,6 @@ var __copyProps = (to, from, except, desc) => {
20
18
  }
21
19
  return to;
22
20
  };
23
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
- // If the importer is in node compatibility mode or this is not an ESM
25
- // file that has been converted to a CommonJS file using a Babel-
26
- // compatible transform (i.e. "__esModule" has not been set), then set
27
- // "default" to the CommonJS "module.exports" for node compatibility.
28
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
- mod
30
- ));
31
21
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
22
  var misc_exports = {};
33
23
  __export(misc_exports, {
@@ -49,7 +39,6 @@ __export(misc_exports, {
49
39
  });
50
40
  module.exports = __toCommonJS(misc_exports);
51
41
  var import_base58_js = require("base58-js");
52
- var import_big = __toESM(require("big.js"), 1);
53
42
  var import_js_base64 = require("js-base64");
54
43
  var import_storage = require("./storage.js");
55
44
  function toHex(data) {
@@ -91,6 +80,32 @@ function fromBase64(strVal) {
91
80
  }
92
81
  }
93
82
  __name(fromBase64, "fromBase64");
83
+ const UNIT_DECIMALS = {
84
+ near: 24,
85
+ tgas: 12,
86
+ ggas: 9,
87
+ gas: 0,
88
+ yoctonear: 0
89
+ };
90
+ function scaleDecimal(amount, shift) {
91
+ const [whole, frac = ""] = amount.split(".");
92
+ if (shift >= 0) {
93
+ const padded = frac.padEnd(shift, "0").slice(0, shift);
94
+ const extra = frac.length > shift ? frac.slice(shift) : "";
95
+ if (extra && BigInt(extra) !== 0n) {
96
+ throw new Error(`Precision loss: "${amount}" has more than ${shift} decimal places`);
97
+ }
98
+ return BigInt(whole + padded).toString();
99
+ }
100
+ const divisor = 10n ** BigInt(-shift);
101
+ const bigVal = BigInt(whole);
102
+ const intPart = bigVal / divisor;
103
+ const remainder = bigVal % divisor;
104
+ if (remainder === 0n) return intPart.toString();
105
+ const fracStr = remainder.toString().padStart(-shift, "0").replace(/0+$/, "");
106
+ return `${intPart}.${fracStr}`;
107
+ }
108
+ __name(scaleDecimal, "scaleDecimal");
94
109
  function convertUnit(s, ...args) {
95
110
  if (Array.isArray(s)) {
96
111
  s = s.reduce((acc, part, i) => {
@@ -103,25 +118,15 @@ function convertUnit(s, ...args) {
103
118
  const amount = match[1].replace(/[_,]/g, "");
104
119
  const unitPart = match[2];
105
120
  if (unitPart) {
106
- switch (unitPart.toLowerCase()) {
107
- case "near":
108
- return (0, import_big.default)(amount).mul((0, import_big.default)(10).pow(24)).toFixed(0);
109
- case "tgas":
110
- return (0, import_big.default)(amount).mul((0, import_big.default)(10).pow(12)).toFixed(0);
111
- case "ggas":
112
- return (0, import_big.default)(amount).mul((0, import_big.default)(10).pow(9)).toFixed(0);
113
- case "gas":
114
- case "yoctonear":
115
- return (0, import_big.default)(amount).toFixed(0);
116
- default:
117
- throw new Error(`Unknown unit: ${unitPart}`);
118
- }
121
+ const decimals = UNIT_DECIMALS[unitPart.toLowerCase()];
122
+ if (decimals === void 0) throw new Error(`Unknown unit: ${unitPart}`);
123
+ return scaleDecimal(amount, decimals);
119
124
  } else {
120
- return (0, import_big.default)(amount).toFixed(0);
125
+ return scaleDecimal(amount, 0);
121
126
  }
122
127
  }
123
128
  }
124
- return (0, import_big.default)(`${s}`).toFixed(0);
129
+ return scaleDecimal(`${s}`, 0);
125
130
  }
126
131
  __name(convertUnit, "convertUnit");
127
132
  function lsSet(key, value) {
@@ -163,7 +168,7 @@ function parseJsonFromBytes(bytes) {
163
168
  }
164
169
  __name(parseJsonFromBytes, "parseJsonFromBytes");
165
170
  function canSignWithLAK(actions) {
166
- return actions.length === 1 && actions[0].type === "FunctionCall" && (0, import_big.default)(actions[0]?.deposit ?? "0").eq(0);
171
+ return actions.length === 1 && actions[0].type === "FunctionCall" && BigInt(actions[0]?.deposit ?? "0") === 0n;
167
172
  }
168
173
  __name(canSignWithLAK, "canSignWithLAK");
169
174
  // Annotate the CommonJS export names for ESM import in node:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/misc.ts"],"sourcesContent":["import {\n binary_to_base58 as toBase58,\n base58_to_binary as fromBase58,\n} from \"base58-js\";\nimport Big from \"big.js\";\nimport {\n encode as JsBase64Encode,\n decode as JsBase64Decode,\n fromUint8Array as JsBase64FromUint8Array,\n toUint8Array as JsBase64ToUint8Array\n} from 'js-base64';\nimport { storage } from \"./storage.js\";\n\nexport { toBase58, fromBase58 };\n\nexport function toHex(data: Uint8Array): string {\n return Array.from(data)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nexport function fromHex(hex: string): Uint8Array {\n if (hex.length % 2) throw new Error('Hex string must be even length');\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i/2] = parseInt(hex.slice(i, i + 2), 16);\n }\n return bytes;\n}\n\nexport function base64ToBytes(b64Val: string): Uint8Array {\n return JsBase64ToUint8Array(b64Val);\n}\n\nexport function bytesToBase64(bytesArr: Uint8Array): string {\n return JsBase64FromUint8Array(bytesArr);\n}\n\nexport function toBase64(strVal: string) {\n try {\n return JsBase64Encode(strVal);\n } catch (e) {\n console.error('Issue base64 encoding', e);\n return null;\n }\n}\n\nexport function fromBase64(strVal: string) {\n try {\n return JsBase64Decode(strVal);\n } catch (e) {\n console.error('Issue base64 decoding', e);\n return null;\n }\n}\n\nexport function convertUnit(s: string | TemplateStringsArray, ...args: any[]): string {\n // Reconstruct raw string from template literal\n if (Array.isArray(s)) {\n s = s.reduce((acc, part, i) => {\n return acc + (args[i - 1] ?? \"\") + part;\n });\n }\n // Convert from `100 NEAR` into yoctoNear\n if (typeof s == \"string\") {\n const match = s.match(/([0-9.,_]+)\\s*([a-zA-Z]+)?/);\n if (match) {\n const amount = match[1].replace(/[_,]/g, \"\");\n const unitPart = match[2];\n if (unitPart) {\n switch (unitPart.toLowerCase()) {\n case \"near\":\n return Big(amount).mul(Big(10).pow(24)).toFixed(0);\n case \"tgas\":\n return Big(amount).mul(Big(10).pow(12)).toFixed(0);\n case \"ggas\":\n return Big(amount).mul(Big(10).pow(9)).toFixed(0);\n case \"gas\":\n case \"yoctonear\":\n return Big(amount).toFixed(0);\n default:\n throw new Error(`Unknown unit: ${unitPart}`);\n }\n } else {\n return Big(amount).toFixed(0);\n }\n }\n }\n return Big(`${s}`).toFixed(0);\n}\n\nexport function lsSet(key: string, value: any) {\n storage.set(key, value);\n}\n\nexport function lsGet(key: string): any {\n return storage.get(key);\n}\n\nexport function deepCopy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\nexport function tryParseJson(...args) {\n try {\n return JSON.parse(args[0]);\n } catch {\n if (args.length > 1) {\n return args[1];\n }\n return args[0];\n }\n}\n\nexport function parseJsonFromBytes(bytes: Uint8Array) {\n try {\n const decoder = new TextDecoder();\n return JSON.parse(\n decoder.decode(bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes))\n );\n } catch (e) {\n try {\n return bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n } catch (e) {\n return bytes;\n }\n }\n}\n\n/**\n * NEP-413 standard message payload for wallet signing.\n */\nexport interface NEP413Message {\n message: string;\n nonce: Uint8Array;\n recipient: string;\n callbackUrl?: string | null;\n state?: string | null;\n}\n\nexport function canSignWithLAK(actions) {\n return (\n actions.length === 1 &&\n actions[0].type === \"FunctionCall\" &&\n Big(actions[0]?.deposit ?? \"0\").eq(0)\n );\n}\n"],"mappings":"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","names":["fromBase58","toBase58","JsBase64ToUint8Array","JsBase64FromUint8Array","JsBase64Encode","JsBase64Decode","Big","e"]}
1
+ {"version":3,"sources":["../../src/misc.ts"],"sourcesContent":["import {\n binary_to_base58 as toBase58,\n base58_to_binary as fromBase58,\n} from \"base58-js\";\nimport {\n encode as JsBase64Encode,\n decode as JsBase64Decode,\n fromUint8Array as JsBase64FromUint8Array,\n toUint8Array as JsBase64ToUint8Array\n} from 'js-base64';\nimport { storage } from \"./storage.js\";\n\nexport { toBase58, fromBase58 };\n\nexport function toHex(data: Uint8Array): string {\n return Array.from(data)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nexport function fromHex(hex: string): Uint8Array {\n if (hex.length % 2) throw new Error('Hex string must be even length');\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i/2] = parseInt(hex.slice(i, i + 2), 16);\n }\n return bytes;\n}\n\nexport function base64ToBytes(b64Val: string): Uint8Array {\n return JsBase64ToUint8Array(b64Val);\n}\n\nexport function bytesToBase64(bytesArr: Uint8Array): string {\n return JsBase64FromUint8Array(bytesArr);\n}\n\nexport function toBase64(strVal: string) {\n try {\n return JsBase64Encode(strVal);\n } catch (e) {\n console.error('Issue base64 encoding', e);\n return null;\n }\n}\n\nexport function fromBase64(strVal: string) {\n try {\n return JsBase64Decode(strVal);\n } catch (e) {\n console.error('Issue base64 decoding', e);\n return null;\n }\n}\n\nconst UNIT_DECIMALS: Record<string, number> = {\n near: 24,\n tgas: 12,\n ggas: 9,\n gas: 0,\n yoctonear: 0,\n};\n\n/**\n * Scale a decimal string by `shift` decimal places using BigInt.\n * Positive shift multiplies (e.g. NEAR → yoctoNEAR), zero shift truncates decimals.\n */\nfunction scaleDecimal(amount: string, shift: number): string {\n const [whole, frac = \"\"] = amount.split(\".\");\n if (shift >= 0) {\n // Pad fractional part to `shift` digits, then concatenate — this multiplies by 10^shift\n const padded = frac.padEnd(shift, \"0\").slice(0, shift);\n const extra = frac.length > shift ? frac.slice(shift) : \"\";\n if (extra && BigInt(extra) !== 0n) {\n throw new Error(`Precision loss: \"${amount}\" has more than ${shift} decimal places`);\n }\n return BigInt(whole + padded).toString();\n }\n // Negative shift: divide by 10^|shift| (shouldn't happen with current units)\n const divisor = 10n ** BigInt(-shift);\n const bigVal = BigInt(whole);\n const intPart = bigVal / divisor;\n const remainder = bigVal % divisor;\n if (remainder === 0n) return intPart.toString();\n const fracStr = remainder.toString().padStart(-shift, \"0\").replace(/0+$/, \"\");\n return `${intPart}.${fracStr}`;\n}\n\nexport function convertUnit(s: string | TemplateStringsArray, ...args: any[]): string {\n // Reconstruct raw string from template literal\n if (Array.isArray(s)) {\n s = s.reduce((acc, part, i) => {\n return acc + (args[i - 1] ?? \"\") + part;\n });\n }\n // Convert from `100 NEAR` into yoctoNear\n if (typeof s == \"string\") {\n const match = s.match(/([0-9.,_]+)\\s*([a-zA-Z]+)?/);\n if (match) {\n const amount = match[1].replace(/[_,]/g, \"\");\n const unitPart = match[2];\n if (unitPart) {\n const decimals = UNIT_DECIMALS[unitPart.toLowerCase()];\n if (decimals === undefined) throw new Error(`Unknown unit: ${unitPart}`);\n return scaleDecimal(amount, decimals);\n } else {\n // No unit — truncate any decimals\n return scaleDecimal(amount, 0);\n }\n }\n }\n return scaleDecimal(`${s}`, 0);\n}\n\nexport function lsSet(key: string, value: any) {\n storage.set(key, value);\n}\n\nexport function lsGet(key: string): any {\n return storage.get(key);\n}\n\nexport function deepCopy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\nexport function tryParseJson(...args) {\n try {\n return JSON.parse(args[0]);\n } catch {\n if (args.length > 1) {\n return args[1];\n }\n return args[0];\n }\n}\n\nexport function parseJsonFromBytes(bytes: Uint8Array) {\n try {\n const decoder = new TextDecoder();\n return JSON.parse(\n decoder.decode(bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes))\n );\n } catch (e) {\n try {\n return bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n } catch (e) {\n return bytes;\n }\n }\n}\n\n/**\n * NEP-413 standard message payload for wallet signing.\n */\nexport interface NEP413Message {\n message: string;\n nonce: Uint8Array;\n recipient: string;\n callbackUrl?: string | null;\n state?: string | null;\n}\n\nexport function canSignWithLAK(actions) {\n return (\n actions.length === 1 &&\n actions[0].type === \"FunctionCall\" &&\n BigInt(actions[0]?.deposit ?? \"0\") === 0n\n );\n}\n"],"mappings":"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","names":["fromBase58","toBase58","JsBase64ToUint8Array","JsBase64FromUint8Array","JsBase64Encode","JsBase64Decode","e"]}
@@ -1,5 +1,5 @@
1
- /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.9.12) */
2
- /* https://www.npmjs.com/package/@fastnear/utils/v/0.9.12 */
1
+ /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.1) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.10.1 */
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,5 +1,5 @@
1
- /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.9.12) */
2
- /* https://www.npmjs.com/package/@fastnear/utils/v/0.9.12 */
1
+ /* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.1) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.10.1 */
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -30,7 +30,7 @@ __export(transaction_exports, {
30
30
  txToJsonStringified: () => txToJsonStringified
31
31
  });
32
32
  module.exports = __toCommonJS(transaction_exports);
33
- var import_borsh = require("borsh");
33
+ var import_borsh = require("@fastnear/borsh");
34
34
  var import_crypto = require("./crypto.js");
35
35
  var import_misc = require("./misc.js");
36
36
  var import_borsh_schema = require("@fastnear/borsh-schema");
@@ -43,14 +43,22 @@ const txToJson = /* @__PURE__ */ __name((tx) => {
43
43
  const txToJsonStringified = /* @__PURE__ */ __name((tx) => {
44
44
  return JSON.stringify(txToJson(tx));
45
45
  }, "txToJsonStringified");
46
+ function mapPublicKey(keyString) {
47
+ const curve = (0, import_crypto.curveFromKey)(keyString);
48
+ const data = (0, import_crypto.keyFromString)(keyString);
49
+ return curve === "secp256k1" ? { secp256k1Key: { data } } : { ed25519Key: { data } };
50
+ }
51
+ __name(mapPublicKey, "mapPublicKey");
52
+ function mapSignature(sigBase58, signerKeyString) {
53
+ const curve = (0, import_crypto.curveFromKey)(signerKeyString);
54
+ const data = (0, import_misc.fromBase58)(sigBase58);
55
+ return curve === "secp256k1" ? { secp256k1Signature: { data } } : { ed25519Signature: { data } };
56
+ }
57
+ __name(mapSignature, "mapSignature");
46
58
  function mapTransaction(jsonTransaction) {
47
59
  return {
48
60
  signerId: jsonTransaction.signerId,
49
- publicKey: {
50
- ed25519Key: {
51
- data: (0, import_crypto.keyFromString)(jsonTransaction.publicKey)
52
- }
53
- },
61
+ publicKey: mapPublicKey(jsonTransaction.publicKey),
54
62
  nonce: BigInt(jsonTransaction.nonce),
55
63
  receiverId: jsonTransaction.receiverId,
56
64
  blockHash: (0, import_misc.fromBase58)(jsonTransaction.blockHash),
@@ -73,13 +81,9 @@ function serializeSignedTransaction(jsonTransaction, signature) {
73
81
  console.log("fastnear: mapped (for borsh schema) signed transaction", mappedSignedTx);
74
82
  const plainSignedTransaction = {
75
83
  transaction: mappedSignedTx,
76
- signature: {
77
- ed25519Signature: {
78
- data: (0, import_misc.fromBase58)(signature)
79
- }
80
- }
84
+ signature: mapSignature(signature, jsonTransaction.publicKey)
81
85
  };
82
- const borshSignedTx = (0, import_borsh.serialize)(SCHEMA.SignedTransaction, plainSignedTransaction, true);
86
+ const borshSignedTx = (0, import_borsh.serialize)(SCHEMA.SignedTransaction, plainSignedTransaction);
83
87
  console.log("fastnear: borsh-serialized signed transaction:", borshSignedTx);
84
88
  return borshSignedTx;
85
89
  }
@@ -119,22 +123,14 @@ function mapAction(action) {
119
123
  return {
120
124
  stake: {
121
125
  stake: BigInt(action.stake),
122
- publicKey: {
123
- ed25519Key: {
124
- data: (0, import_crypto.keyFromString)(action.publicKey)
125
- }
126
- }
126
+ publicKey: mapPublicKey(action.publicKey)
127
127
  }
128
128
  };
129
129
  }
130
130
  case "AddKey": {
131
131
  return {
132
132
  addKey: {
133
- publicKey: {
134
- ed25519Key: {
135
- data: (0, import_crypto.keyFromString)(action.publicKey)
136
- }
137
- },
133
+ publicKey: mapPublicKey(action.publicKey),
138
134
  accessKey: {
139
135
  nonce: BigInt(action.accessKey.nonce),
140
136
  permission: action.accessKey.permission === "FullAccess" ? { fullAccess: {} } : {
@@ -151,11 +147,7 @@ function mapAction(action) {
151
147
  case "DeleteKey": {
152
148
  return {
153
149
  deleteKey: {
154
- publicKey: {
155
- ed25519Key: {
156
- data: (0, import_crypto.keyFromString)(action.publicKey)
157
- }
158
- }
150
+ publicKey: mapPublicKey(action.publicKey)
159
151
  }
160
152
  };
161
153
  }
@@ -170,9 +162,7 @@ function mapAction(action) {
170
162
  return {
171
163
  signedDelegate: {
172
164
  delegateAction: mapAction(action.delegateAction),
173
- signature: {
174
- ed25519Signature: (0, import_misc.fromBase58)(action.signature)
175
- }
165
+ signature: mapSignature(action.signature, action.publicKey)
176
166
  }
177
167
  };
178
168
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transaction.ts"],"sourcesContent":["import { serialize as borshSerialize, deserialize as borshDeserialize, Schema } from \"borsh\";\nimport { keyFromString } from \"./crypto.js\";\nimport {base64ToBytes, fromBase58, fromBase64, toBase64} from \"./misc.js\";\nimport { getBorshSchema } from \"@fastnear/borsh-schema\";\n\nexport interface PlainTransaction {\n signerId: string;\n publicKey: string;\n nonce: string | bigint | number;\n receiverId: string;\n blockHash: string;\n actions: Array<any>;\n}\n\nexport interface PlainSignedTransaction {\n transaction: object;\n signature: object;\n}\n\n// Function to return a JSON-ready version of the transaction\nexport const txToJson = (tx: PlainTransaction): Record<string, any> => {\n return JSON.parse(JSON.stringify(tx, (key, value) =>\n typeof value === 'bigint' ? value.toString() : value\n ));\n};\n\n// dude let's make this better. head just couldn't find a good name\nexport const txToJsonStringified = (tx: PlainTransaction): string => {\n return JSON.stringify(txToJson(tx));\n}\n\nexport function mapTransaction(jsonTransaction: PlainTransaction) {\n return {\n signerId: jsonTransaction.signerId,\n publicKey: {\n ed25519Key: {\n data: keyFromString(jsonTransaction.publicKey)\n }\n },\n nonce: BigInt(jsonTransaction.nonce),\n receiverId: jsonTransaction.receiverId,\n blockHash: fromBase58(jsonTransaction.blockHash),\n actions: jsonTransaction.actions.map(mapAction)\n };\n}\n\nexport function serializeTransaction(jsonTransaction: PlainTransaction) {\n console.log(\"fastnear: serializing transaction\");\n\n const transaction = mapTransaction(jsonTransaction);\n console.log(\"fastnear: mapped transaction for borsh:\", transaction);\n\n return borshSerialize(SCHEMA.Transaction, transaction);\n}\n\nexport function serializeSignedTransaction(jsonTransaction: PlainTransaction, signature) {\n console.log(\"fastnear: Serializing Signed Transaction\", jsonTransaction);\n console.log('fastnear: signature', signature)\n console.log('fastnear: signature length', fromBase58(signature).length)\n\n const mappedSignedTx = mapTransaction(jsonTransaction)\n console.log('fastnear: mapped (for borsh schema) signed transaction', mappedSignedTx)\n\n const plainSignedTransaction: PlainSignedTransaction = {\n transaction: mappedSignedTx,\n signature: {\n ed25519Signature: {\n data: fromBase58(signature),\n },\n },\n };\n\n const borshSignedTx = borshSerialize(SCHEMA.SignedTransaction, plainSignedTransaction, true);\n console.log('fastnear: borsh-serialized signed transaction:', borshSignedTx);\n\n return borshSignedTx;\n}\n\nexport function mapAction(action: any): object {\n switch (action.type) {\n case \"CreateAccount\": {\n return {\n createAccount: {},\n };\n }\n case \"DeployContract\": {\n return {\n deployContract: {\n code: base64ToBytes(action.codeBase64),\n },\n };\n }\n case \"FunctionCall\": {\n return {\n functionCall: {\n methodName: action.methodName,\n args: (action.argsBase64 !== null && action.argsBase64 !== undefined) ?\n base64ToBytes(action.argsBase64) :\n (new TextEncoder().encode(JSON.stringify(action.args))),\n gas: BigInt(action.gas ?? \"300000000000000\"),\n deposit: BigInt(action.deposit ?? \"0\"),\n },\n };\n }\n case \"Transfer\": {\n return {\n transfer: {\n deposit: BigInt(action.deposit),\n },\n };\n }\n case \"Stake\": {\n return {\n stake: {\n stake: BigInt(action.stake),\n publicKey: {\n ed25519Key: {\n data: keyFromString(action.publicKey),\n },\n },\n },\n };\n }\n case \"AddKey\": {\n return {\n addKey: {\n publicKey: {\n ed25519Key: {\n data: keyFromString(action.publicKey),\n },\n },\n accessKey: {\n nonce: BigInt(action.accessKey.nonce),\n permission:\n action.accessKey.permission === \"FullAccess\"\n ? { fullAccess: {} }\n : {\n functionCall: {\n allowance: action.accessKey.allowance\n ? BigInt(action.accessKey.allowance)\n : null,\n receiverId: action.accessKey.receiverId,\n methodNames: action.accessKey.methodNames,\n },\n },\n },\n },\n };\n }\n case \"DeleteKey\": {\n return {\n deleteKey: {\n publicKey: {\n ed25519Key: {\n data: keyFromString(action.publicKey),\n },\n },\n },\n };\n }\n case \"DeleteAccount\": {\n return {\n deleteAccount: {\n beneficiaryId: action.beneficiaryId,\n },\n };\n }\n case \"SignedDelegate\": {\n return {\n signedDelegate: {\n delegateAction: mapAction(action.delegateAction),\n signature: {\n ed25519Signature: fromBase58(action.signature),\n },\n },\n };\n }\n default: {\n throw new Error(\"Not implemented action: \" + action.type);\n }\n }\n}\n\nexport const SCHEMA = getBorshSchema();\n"],"mappings":"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","names":["borshSerialize"]}
1
+ {"version":3,"sources":["../../src/transaction.ts"],"sourcesContent":["import { serialize as borshSerialize, deserialize as borshDeserialize, type Schema } from \"@fastnear/borsh\";\nimport { curveFromKey, keyFromString } from \"./crypto.js\";\nimport {base64ToBytes, fromBase58, fromBase64, toBase64} from \"./misc.js\";\nimport { getBorshSchema } from \"@fastnear/borsh-schema\";\n\nexport interface PlainTransaction {\n signerId: string;\n publicKey: string;\n nonce: string | bigint | number;\n receiverId: string;\n blockHash: string;\n actions: Array<any>;\n}\n\nexport interface PlainSignedTransaction {\n transaction: object;\n signature: object;\n}\n\n// Function to return a JSON-ready version of the transaction\nexport const txToJson = (tx: PlainTransaction): Record<string, any> => {\n return JSON.parse(JSON.stringify(tx, (key, value) =>\n typeof value === 'bigint' ? value.toString() : value\n ));\n};\n\n// dude let's make this better. head just couldn't find a good name\nexport const txToJsonStringified = (tx: PlainTransaction): string => {\n return JSON.stringify(txToJson(tx));\n}\n\nfunction mapPublicKey(keyString: string) {\n const curve = curveFromKey(keyString);\n const data = keyFromString(keyString);\n return curve === \"secp256k1\"\n ? { secp256k1Key: { data } }\n : { ed25519Key: { data } };\n}\n\nfunction mapSignature(sigBase58: string, signerKeyString: string) {\n const curve = curveFromKey(signerKeyString);\n const data = fromBase58(sigBase58);\n return curve === \"secp256k1\"\n ? { secp256k1Signature: { data } }\n : { ed25519Signature: { data } };\n}\n\nexport function mapTransaction(jsonTransaction: PlainTransaction) {\n return {\n signerId: jsonTransaction.signerId,\n publicKey: mapPublicKey(jsonTransaction.publicKey),\n nonce: BigInt(jsonTransaction.nonce),\n receiverId: jsonTransaction.receiverId,\n blockHash: fromBase58(jsonTransaction.blockHash),\n actions: jsonTransaction.actions.map(mapAction)\n };\n}\n\nexport function serializeTransaction(jsonTransaction: PlainTransaction) {\n console.log(\"fastnear: serializing transaction\");\n\n const transaction = mapTransaction(jsonTransaction);\n console.log(\"fastnear: mapped transaction for borsh:\", transaction);\n\n return borshSerialize(SCHEMA.Transaction, transaction);\n}\n\nexport function serializeSignedTransaction(jsonTransaction: PlainTransaction, signature) {\n console.log(\"fastnear: Serializing Signed Transaction\", jsonTransaction);\n console.log('fastnear: signature', signature)\n console.log('fastnear: signature length', fromBase58(signature).length)\n\n const mappedSignedTx = mapTransaction(jsonTransaction)\n console.log('fastnear: mapped (for borsh schema) signed transaction', mappedSignedTx)\n\n const plainSignedTransaction: PlainSignedTransaction = {\n transaction: mappedSignedTx,\n signature: mapSignature(signature, jsonTransaction.publicKey),\n };\n\n const borshSignedTx = borshSerialize(SCHEMA.SignedTransaction, plainSignedTransaction);\n console.log('fastnear: borsh-serialized signed transaction:', borshSignedTx);\n\n return borshSignedTx;\n}\n\nexport function mapAction(action: any): object {\n switch (action.type) {\n case \"CreateAccount\": {\n return {\n createAccount: {},\n };\n }\n case \"DeployContract\": {\n return {\n deployContract: {\n code: base64ToBytes(action.codeBase64),\n },\n };\n }\n case \"FunctionCall\": {\n return {\n functionCall: {\n methodName: action.methodName,\n args: (action.argsBase64 !== null && action.argsBase64 !== undefined) ?\n base64ToBytes(action.argsBase64) :\n (new TextEncoder().encode(JSON.stringify(action.args))),\n gas: BigInt(action.gas ?? \"300000000000000\"),\n deposit: BigInt(action.deposit ?? \"0\"),\n },\n };\n }\n case \"Transfer\": {\n return {\n transfer: {\n deposit: BigInt(action.deposit),\n },\n };\n }\n case \"Stake\": {\n return {\n stake: {\n stake: BigInt(action.stake),\n publicKey: mapPublicKey(action.publicKey),\n },\n };\n }\n case \"AddKey\": {\n return {\n addKey: {\n publicKey: mapPublicKey(action.publicKey),\n accessKey: {\n nonce: BigInt(action.accessKey.nonce),\n permission:\n action.accessKey.permission === \"FullAccess\"\n ? { fullAccess: {} }\n : {\n functionCall: {\n allowance: action.accessKey.allowance\n ? BigInt(action.accessKey.allowance)\n : null,\n receiverId: action.accessKey.receiverId,\n methodNames: action.accessKey.methodNames,\n },\n },\n },\n },\n };\n }\n case \"DeleteKey\": {\n return {\n deleteKey: {\n publicKey: mapPublicKey(action.publicKey),\n },\n };\n }\n case \"DeleteAccount\": {\n return {\n deleteAccount: {\n beneficiaryId: action.beneficiaryId,\n },\n };\n }\n case \"SignedDelegate\": {\n return {\n signedDelegate: {\n delegateAction: mapAction(action.delegateAction),\n signature: mapSignature(action.signature, action.publicKey),\n },\n };\n }\n default: {\n throw new Error(\"Not implemented action: \" + action.type);\n }\n }\n}\n\nexport const SCHEMA = getBorshSchema();\n"],"mappings":"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","names":["borshSerialize"]}
@@ -1,34 +1,61 @@
1
- /* ⋈ 🏃🏻💨 FastNear Utils - ESM (@fastnear/utils version 0.9.12) */
2
- /* https://www.npmjs.com/package/@fastnear/utils/v/0.9.12 */
1
+ /* ⋈ 🏃🏻💨 FastNear Utils - ESM (@fastnear/utils version 0.10.1) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.10.1 */
3
3
  var __defProp = Object.defineProperty;
4
4
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
5
  import { ed25519 } from "@noble/curves/ed25519.js";
6
+ import { secp256k1 } from "@noble/curves/secp256k1.js";
6
7
  import { sha256 } from "@noble/hashes/sha2.js";
7
8
  import { fromBase58, toBase58 } from "./misc.js";
9
+ function curveFromKey(key) {
10
+ if (!key.includes(":")) return "ed25519";
11
+ const curve = key.split(":")[0];
12
+ if (curve === "ed25519" || curve === "secp256k1") return curve;
13
+ throw new Error(`Unsupported curve: ${curve}`);
14
+ }
15
+ __name(curveFromKey, "curveFromKey");
8
16
  const keyFromString = /* @__PURE__ */ __name((key) => fromBase58(
9
17
  key.includes(":") ? (() => {
10
18
  const [curve, keyPart] = key.split(":");
11
- if (curve !== "ed25519") {
19
+ if (curve !== "ed25519" && curve !== "secp256k1") {
12
20
  throw new Error(`Unsupported curve: ${curve}`);
13
21
  }
14
22
  return keyPart;
15
23
  })() : key
16
24
  ), "keyFromString");
17
- const keyToString = /* @__PURE__ */ __name((key) => `ed25519:${toBase58(key)}`, "keyToString");
25
+ const keyToString = /* @__PURE__ */ __name((key, curve = "ed25519") => `${curve}:${toBase58(key)}`, "keyToString");
18
26
  function publicKeyFromPrivate(privateKey) {
27
+ const curve = curveFromKey(privateKey);
28
+ if (curve === "secp256k1") {
29
+ const secret2 = keyFromString(privateKey);
30
+ const fullPk = secp256k1.getPublicKey(secret2, false);
31
+ const publicKey2 = fullPk.slice(1);
32
+ return keyToString(publicKey2, "secp256k1");
33
+ }
19
34
  const secret = keyFromString(privateKey).slice(0, 32);
20
35
  const publicKey = ed25519.getPublicKey(secret);
21
36
  return keyToString(publicKey);
22
37
  }
23
38
  __name(publicKeyFromPrivate, "publicKeyFromPrivate");
24
- function privateKeyFromRandom() {
25
- const privateKey = crypto.getRandomValues(new Uint8Array(64));
26
- return keyToString(privateKey);
39
+ function privateKeyFromRandom(curve = "ed25519") {
40
+ const size = curve === "secp256k1" ? 32 : 64;
41
+ const privateKey = crypto.getRandomValues(new Uint8Array(size));
42
+ return keyToString(privateKey, curve);
27
43
  }
28
44
  __name(privateKeyFromRandom, "privateKeyFromRandom");
29
45
  function signHash(hashBytes, privateKey, opts) {
30
- const secret = keyFromString(privateKey).slice(0, 32);
31
- const signature = ed25519.sign(hashBytes, secret);
46
+ const curve = curveFromKey(privateKey);
47
+ let signature;
48
+ if (curve === "secp256k1") {
49
+ const secret = keyFromString(privateKey);
50
+ const raw = secp256k1.sign(hashBytes, secret, { prehash: false, format: "recovered" });
51
+ signature = new Uint8Array(65);
52
+ signature.set(raw.slice(1, 33), 0);
53
+ signature.set(raw.slice(33, 65), 32);
54
+ signature[64] = raw[0];
55
+ } else {
56
+ const secret = keyFromString(privateKey).slice(0, 32);
57
+ signature = ed25519.sign(hashBytes, secret);
58
+ }
32
59
  if (opts?.returnBase58) {
33
60
  return toBase58(signature);
34
61
  }
@@ -41,6 +68,7 @@ function signBytes(bytes, privateKey) {
41
68
  }
42
69
  __name(signBytes, "signBytes");
43
70
  export {
71
+ curveFromKey,
44
72
  keyFromString,
45
73
  keyToString,
46
74
  privateKeyFromRandom,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto.ts"],"sourcesContent":["import { ed25519 } from \"@noble/curves/ed25519.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { fromBase58, toBase58 } from \"./misc.js\";\n\nexport { sha256 };\n\nexport const keyFromString = (key) =>\n fromBase58(\n key.includes(\":\")\n ? (() => {\n const [curve, keyPart] = key.split(\":\");\n if (curve !== \"ed25519\") {\n throw new Error(`Unsupported curve: ${curve}`);\n }\n return keyPart;\n })()\n : key,\n );\n\nexport const keyToString = (key: Uint8Array) => `ed25519:${toBase58(key)}`;\n\nexport function publicKeyFromPrivate(privateKey: string) {\n const secret = keyFromString(privateKey).slice(0, 32);\n const publicKey = ed25519.getPublicKey(secret);\n return keyToString(publicKey);\n}\n\nexport function privateKeyFromRandom() {\n const privateKey = crypto.getRandomValues(new Uint8Array(64));\n return keyToString(privateKey);\n}\n\nexport function signHash(hashBytes: Uint8Array, privateKey: string, opts?: any): Uint8Array | string {\n const secret = keyFromString(privateKey).slice(0, 32);\n const signature = ed25519.sign(hashBytes, secret);\n\n if (opts?.returnBase58) {\n return toBase58(signature);\n }\n\n return signature;\n}\n\nexport function signBytes(bytes: Uint8Array, privateKey: string) {\n const hash = sha256(bytes);\n return signHash(hash, privateKey);\n}\n"],"mappings":";;;;AAAA,SAAS,eAAe;AACxB,SAAS,cAAc;AACvB,SAAS,YAAY,gBAAgB;AAI9B,MAAM,gBAAgB,wBAAC,QAC5B;AAAA,EACE,IAAI,SAAS,GAAG,KACX,MAAM;AACL,UAAM,CAAC,OAAO,OAAO,IAAI,IAAI,MAAM,GAAG;AACtC,QAAI,UAAU,WAAW;AACvB,YAAM,IAAI,MAAM,sBAAsB,KAAK,EAAE;AAAA,IAC/C;AACA,WAAO;AAAA,EACT,GAAG,IACH;AACN,GAX2B;AAatB,MAAM,cAAc,wBAAC,QAAoB,WAAW,SAAS,GAAG,CAAC,IAA7C;AAEpB,SAAS,qBAAqB,YAAoB;AACvD,QAAM,SAAS,cAAc,UAAU,EAAE,MAAM,GAAG,EAAE;AACpD,QAAM,YAAY,QAAQ,aAAa,MAAM;AAC7C,SAAO,YAAY,SAAS;AAC9B;AAJgB;AAMT,SAAS,uBAAuB;AACrC,QAAM,aAAa,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;AAC5D,SAAO,YAAY,UAAU;AAC/B;AAHgB;AAKT,SAAS,SAAS,WAAuB,YAAoB,MAAiC;AACnG,QAAM,SAAS,cAAc,UAAU,EAAE,MAAM,GAAG,EAAE;AACpD,QAAM,YAAY,QAAQ,KAAK,WAAW,MAAM;AAEhD,MAAI,MAAM,cAAc;AACtB,WAAO,SAAS,SAAS;AAAA,EAC3B;AAEA,SAAO;AACT;AATgB;AAWT,SAAS,UAAU,OAAmB,YAAoB;AAC/D,QAAM,OAAO,OAAO,KAAK;AACzB,SAAO,SAAS,MAAM,UAAU;AAClC;AAHgB;","names":[]}
1
+ {"version":3,"sources":["../../src/crypto.ts"],"sourcesContent":["import { ed25519 } from \"@noble/curves/ed25519.js\";\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { fromBase58, toBase58 } from \"./misc.js\";\n\nexport { sha256 };\n\nexport type KeyCurve = \"ed25519\" | \"secp256k1\";\n\nexport function curveFromKey(key: string): KeyCurve {\n if (!key.includes(\":\")) return \"ed25519\";\n const curve = key.split(\":\")[0];\n if (curve === \"ed25519\" || curve === \"secp256k1\") return curve;\n throw new Error(`Unsupported curve: ${curve}`);\n}\n\nexport const keyFromString = (key) =>\n fromBase58(\n key.includes(\":\")\n ? (() => {\n const [curve, keyPart] = key.split(\":\");\n if (curve !== \"ed25519\" && curve !== \"secp256k1\") {\n throw new Error(`Unsupported curve: ${curve}`);\n }\n return keyPart;\n })()\n : key,\n );\n\nexport const keyToString = (key: Uint8Array, curve: KeyCurve = \"ed25519\") =>\n `${curve}:${toBase58(key)}`;\n\nexport function publicKeyFromPrivate(privateKey: string) {\n const curve = curveFromKey(privateKey);\n if (curve === \"secp256k1\") {\n const secret = keyFromString(privateKey);\n const fullPk = secp256k1.getPublicKey(secret, false);\n // Strip the 0x04 prefix byte — NEAR stores 64 bytes (x‖y)\n const publicKey = fullPk.slice(1);\n return keyToString(publicKey, \"secp256k1\");\n }\n const secret = keyFromString(privateKey).slice(0, 32);\n const publicKey = ed25519.getPublicKey(secret);\n return keyToString(publicKey);\n}\n\nexport function privateKeyFromRandom(curve: KeyCurve = \"ed25519\") {\n const size = curve === \"secp256k1\" ? 32 : 64;\n const privateKey = crypto.getRandomValues(new Uint8Array(size));\n return keyToString(privateKey, curve);\n}\n\nexport function signHash(hashBytes: Uint8Array, privateKey: string, opts?: any): Uint8Array | string {\n const curve = curveFromKey(privateKey);\n\n let signature: Uint8Array;\n if (curve === \"secp256k1\") {\n const secret = keyFromString(privateKey);\n // 'recovered' format returns 65 bytes: [v(1), r(32), s(32)]\n const raw = secp256k1.sign(hashBytes, secret, { prehash: false, format: 'recovered' });\n // NEAR expects [r(32), s(32), v(1)]\n signature = new Uint8Array(65);\n signature.set(raw.slice(1, 33), 0); // r\n signature.set(raw.slice(33, 65), 32); // s\n signature[64] = raw[0]; // v\n } else {\n const secret = keyFromString(privateKey).slice(0, 32);\n signature = ed25519.sign(hashBytes, secret);\n }\n\n if (opts?.returnBase58) {\n return toBase58(signature);\n }\n\n return signature;\n}\n\nexport function signBytes(bytes: Uint8Array, privateKey: string) {\n const hash = sha256(bytes);\n return signHash(hash, privateKey);\n}\n"],"mappings":";;;;AAAA,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AACvB,SAAS,YAAY,gBAAgB;AAM9B,SAAS,aAAa,KAAuB;AAClD,MAAI,CAAC,IAAI,SAAS,GAAG,EAAG,QAAO;AAC/B,QAAM,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;AAC9B,MAAI,UAAU,aAAa,UAAU,YAAa,QAAO;AACzD,QAAM,IAAI,MAAM,sBAAsB,KAAK,EAAE;AAC/C;AALgB;AAOT,MAAM,gBAAgB,wBAAC,QAC5B;AAAA,EACE,IAAI,SAAS,GAAG,KACX,MAAM;AACL,UAAM,CAAC,OAAO,OAAO,IAAI,IAAI,MAAM,GAAG;AACtC,QAAI,UAAU,aAAa,UAAU,aAAa;AAChD,YAAM,IAAI,MAAM,sBAAsB,KAAK,EAAE;AAAA,IAC/C;AACA,WAAO;AAAA,EACT,GAAG,IACH;AACN,GAX2B;AAatB,MAAM,cAAc,wBAAC,KAAiB,QAAkB,cAC7D,GAAG,KAAK,IAAI,SAAS,GAAG,CAAC,IADA;AAGpB,SAAS,qBAAqB,YAAoB;AACvD,QAAM,QAAQ,aAAa,UAAU;AACrC,MAAI,UAAU,aAAa;AACzB,UAAMA,UAAS,cAAc,UAAU;AACvC,UAAM,SAAS,UAAU,aAAaA,SAAQ,KAAK;AAEnD,UAAMC,aAAY,OAAO,MAAM,CAAC;AAChC,WAAO,YAAYA,YAAW,WAAW;AAAA,EAC3C;AACA,QAAM,SAAS,cAAc,UAAU,EAAE,MAAM,GAAG,EAAE;AACpD,QAAM,YAAY,QAAQ,aAAa,MAAM;AAC7C,SAAO,YAAY,SAAS;AAC9B;AAZgB;AAcT,SAAS,qBAAqB,QAAkB,WAAW;AAChE,QAAM,OAAO,UAAU,cAAc,KAAK;AAC1C,QAAM,aAAa,OAAO,gBAAgB,IAAI,WAAW,IAAI,CAAC;AAC9D,SAAO,YAAY,YAAY,KAAK;AACtC;AAJgB;AAMT,SAAS,SAAS,WAAuB,YAAoB,MAAiC;AACnG,QAAM,QAAQ,aAAa,UAAU;AAErC,MAAI;AACJ,MAAI,UAAU,aAAa;AACzB,UAAM,SAAS,cAAc,UAAU;AAEvC,UAAM,MAAM,UAAU,KAAK,WAAW,QAAQ,EAAE,SAAS,OAAO,QAAQ,YAAY,CAAC;AAErF,gBAAY,IAAI,WAAW,EAAE;AAC7B,cAAU,IAAI,IAAI,MAAM,GAAG,EAAE,GAAG,CAAC;AACjC,cAAU,IAAI,IAAI,MAAM,IAAI,EAAE,GAAG,EAAE;AACnC,cAAU,EAAE,IAAI,IAAI,CAAC;AAAA,EACvB,OAAO;AACL,UAAM,SAAS,cAAc,UAAU,EAAE,MAAM,GAAG,EAAE;AACpD,gBAAY,QAAQ,KAAK,WAAW,MAAM;AAAA,EAC5C;AAEA,MAAI,MAAM,cAAc;AACtB,WAAO,SAAS,SAAS;AAAA,EAC3B;AAEA,SAAO;AACT;AAvBgB;AAyBT,SAAS,UAAU,OAAmB,YAAoB;AAC/D,QAAM,OAAO,OAAO,KAAK;AACzB,SAAO,SAAS,MAAM,UAAU;AAClC;AAHgB;","names":["secret","publicKey"]}