@fastnear/utils 0.9.12 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/crypto.cjs +38 -9
- package/dist/cjs/crypto.cjs.map +1 -1
- package/dist/cjs/index.cjs +3 -3
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +12 -4
- package/dist/cjs/misc.cjs +34 -29
- package/dist/cjs/misc.cjs.map +1 -1
- package/dist/cjs/storage.cjs +2 -2
- package/dist/cjs/transaction.cjs +22 -32
- package/dist/cjs/transaction.cjs.map +1 -1
- package/dist/esm/crypto.js +37 -9
- package/dist/esm/crypto.js.map +1 -1
- package/dist/esm/index.d.ts +12 -4
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/misc.js +34 -19
- package/dist/esm/misc.js.map +1 -1
- package/dist/esm/storage.js +2 -2
- package/dist/esm/transaction.js +23 -33
- package/dist/esm/transaction.js.map +1 -1
- package/dist/umd/browser.global.js +1523 -1082
- package/dist/umd/browser.global.js.map +1 -1
- package/package.json +4 -5
package/dist/cjs/crypto.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/utils/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.0) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/utils/v/0.10.0 */
|
|
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) =>
|
|
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
|
|
54
|
-
|
|
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
|
|
59
|
-
|
|
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,
|
package/dist/cjs/crypto.cjs.map
CHANGED
|
@@ -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
|
|
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"]}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/utils/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.0) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/utils/v/0.10.0 */
|
|
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: {
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -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":[]}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -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.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/utils/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.0) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/utils/v/0.10.0 */
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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 (
|
|
125
|
+
return scaleDecimal(amount, 0);
|
|
121
126
|
}
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
|
-
return (
|
|
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" && (
|
|
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:
|
package/dist/cjs/misc.cjs.map
CHANGED
|
@@ -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
|
|
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"]}
|
package/dist/cjs/storage.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/utils/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.0) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/utils/v/0.10.0 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/cjs/transaction.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/utils/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Utils - CJS (@fastnear/utils version 0.10.0) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/utils/v/0.10.0 */
|
|
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
|
|
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\
|
|
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"]}
|
package/dist/esm/crypto.js
CHANGED
|
@@ -1,34 +1,61 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Utils - ESM (@fastnear/utils version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/utils/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Utils - ESM (@fastnear/utils version 0.10.0) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/utils/v/0.10.0 */
|
|
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) =>
|
|
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
|
|
26
|
-
|
|
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
|
|
31
|
-
|
|
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,
|
package/dist/esm/crypto.js.map
CHANGED
|
@@ -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
|
|
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"]}
|