@fastnear/utils 0.6.2 → 0.7.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/esm/index.js CHANGED
@@ -1,10 +1,19 @@
1
- /* ⋈ 🏃🏻💨 FastNEAR Utils - ESM (@fastnear/utils version 0.6.1) */
2
- /* https://www.npmjs.com/package/@fastnear/utils/v/0.6.1 */
1
+ /* ⋈ 🏃🏻💨 FastNEAR Utils - ESM (@fastnear/utils version 0.6.3) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.6.3 */
3
3
  export * from "./crypto.js";
4
4
  export * from "./transaction.js";
5
5
  export * from "./misc.js";
6
- import * as reExportBorshSchema from "@fastnear/borsh-schema";
6
+ export * from "./storage.js";
7
+ import { serialize, deserialize } from "borsh";
8
+ import * as borshSchema from "@fastnear/borsh-schema";
9
+ const exp = {
10
+ borsh: {
11
+ serialize,
12
+ deserialize
13
+ },
14
+ borshSchema
15
+ };
7
16
  export {
8
- reExportBorshSchema
17
+ exp
9
18
  };
10
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./crypto.js\";\nexport * from \"./transaction.js\";\nexport * from \"./misc.js\";\n\nexport * as reExportBorshSchema from \"@fastnear/borsh-schema\";\n"],"mappings":";;AAAA,cAAc;AACd,cAAc;AACd,cAAc;AAEd,YAAY,yBAAyB;","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 \"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,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,SAAS,WAAW,mBAAmB;AACvC,YAAY,iBAAiB;AAG7B,MAAM,MAAM;AAAA,EACV,OAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AAAA,EACA;AACF;","names":[]}
@@ -0,0 +1,148 @@
1
+ /* ⋈ 🏃🏻💨 FastNEAR Utils - ESM (@fastnear/utils version 0.6.3) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.6.3 */
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ import {
6
+ binary_to_base58 as toBase58,
7
+ base58_to_binary as fromBase58
8
+ } from "base58-js";
9
+ import Big from "big.js";
10
+ import {
11
+ encode as JsBase64Encode,
12
+ decode as JsBase64Decode,
13
+ fromUint8Array as JsBase64FromUint8Array,
14
+ toUint8Array as JsBase64ToUint8Array
15
+ } from "js-base64";
16
+ import { storage } from "./storage.js";
17
+ function toHex(data) {
18
+ return Array.from(data).map((b) => b.toString(16).padStart(2, "0")).join("");
19
+ }
20
+ __name(toHex, "toHex");
21
+ function fromHex(hex) {
22
+ if (hex.length % 2) throw new Error("Hex string must be even length");
23
+ const bytes = new Uint8Array(hex.length / 2);
24
+ for (let i = 0; i < hex.length; i += 2) {
25
+ bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);
26
+ }
27
+ return bytes;
28
+ }
29
+ __name(fromHex, "fromHex");
30
+ function base64ToBytes(b64Val) {
31
+ return JsBase64ToUint8Array(b64Val);
32
+ }
33
+ __name(base64ToBytes, "base64ToBytes");
34
+ function bytesToBase64(bytesArr) {
35
+ return JsBase64FromUint8Array(bytesArr);
36
+ }
37
+ __name(bytesToBase64, "bytesToBase64");
38
+ function toBase64(strVal) {
39
+ try {
40
+ return JsBase64Encode(strVal);
41
+ } catch (e) {
42
+ console.error("Issue base64 encoding", e);
43
+ return null;
44
+ }
45
+ }
46
+ __name(toBase64, "toBase64");
47
+ function fromBase64(strVal) {
48
+ try {
49
+ return JsBase64Decode(strVal);
50
+ } catch (e) {
51
+ console.error("Issue base64 decoding", e);
52
+ return null;
53
+ }
54
+ }
55
+ __name(fromBase64, "fromBase64");
56
+ function convertUnit(s, ...args) {
57
+ if (Array.isArray(s)) {
58
+ s = s.reduce((acc, part, i) => {
59
+ return acc + (args[i - 1] ?? "") + part;
60
+ });
61
+ }
62
+ if (typeof s == "string") {
63
+ const match = s.match(/([0-9.,_]+)\s*([a-zA-Z]+)?/);
64
+ if (match) {
65
+ const amount = match[1].replace(/[_,]/g, "");
66
+ const unitPart = match[2];
67
+ if (unitPart) {
68
+ switch (unitPart.toLowerCase()) {
69
+ case "near":
70
+ return Big(amount).mul(Big(10).pow(24)).toFixed(0);
71
+ case "tgas":
72
+ return Big(amount).mul(Big(10).pow(12)).toFixed(0);
73
+ case "ggas":
74
+ return Big(amount).mul(Big(10).pow(9)).toFixed(0);
75
+ case "gas":
76
+ case "yoctonear":
77
+ return Big(amount).toFixed(0);
78
+ default:
79
+ throw new Error(`Unknown unit: ${unitPart}`);
80
+ }
81
+ } else {
82
+ return Big(amount).toFixed(0);
83
+ }
84
+ }
85
+ }
86
+ return Big(`${s}`).toFixed(0);
87
+ }
88
+ __name(convertUnit, "convertUnit");
89
+ function lsSet(key, value) {
90
+ storage.set(key, value);
91
+ }
92
+ __name(lsSet, "lsSet");
93
+ function lsGet(key) {
94
+ return storage.get(key);
95
+ }
96
+ __name(lsGet, "lsGet");
97
+ function deepCopy(obj) {
98
+ return JSON.parse(JSON.stringify(obj));
99
+ }
100
+ __name(deepCopy, "deepCopy");
101
+ function tryParseJson(...args) {
102
+ try {
103
+ return JSON.parse(args[0]);
104
+ } catch {
105
+ if (args.length > 1) {
106
+ return args[1];
107
+ }
108
+ return args[0];
109
+ }
110
+ }
111
+ __name(tryParseJson, "tryParseJson");
112
+ function parseJsonFromBytes(bytes) {
113
+ try {
114
+ const decoder = new TextDecoder();
115
+ return JSON.parse(
116
+ decoder.decode(bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes))
117
+ );
118
+ } catch (e) {
119
+ try {
120
+ return bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
121
+ } catch (e2) {
122
+ return bytes;
123
+ }
124
+ }
125
+ }
126
+ __name(parseJsonFromBytes, "parseJsonFromBytes");
127
+ function canSignWithLAK(actions) {
128
+ return actions.length === 1 && actions[0].type === "FunctionCall" && Big(actions[0]?.deposit ?? "0").eq(0);
129
+ }
130
+ __name(canSignWithLAK, "canSignWithLAK");
131
+ export {
132
+ base64ToBytes,
133
+ bytesToBase64,
134
+ canSignWithLAK,
135
+ convertUnit,
136
+ deepCopy,
137
+ fromBase58,
138
+ fromBase64,
139
+ fromHex,
140
+ lsGet,
141
+ lsSet,
142
+ parseJsonFromBytes,
143
+ toBase58,
144
+ toBase64,
145
+ toHex,
146
+ tryParseJson
147
+ };
148
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +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 {Hex} from \"@noble/curves/abstract/utils\";\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\n// export function lsSet(key, value) {\n// if (value === null || value === undefined) {\n// localStorage.removeItem(LsPrefix + key);\n// } else {\n// localStorage.setItem(LsPrefix + key, JSON.stringify(value));\n// }\n// }\n//\n// export function lsGet(key) {\n// const value = localStorage.getItem(LsPrefix + key);\n// return tryParseJson(value, null);\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\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":["e"]}
@@ -0,0 +1,43 @@
1
+ /* ⋈ 🏃🏻💨 FastNEAR Utils - ESM (@fastnear/utils version 0.6.3) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.6.3 */
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ const LsPrefix = "__fastnear_";
6
+ const createDefaultStorage = /* @__PURE__ */ __name(() => typeof localStorage !== "undefined" ? localStorage : {
7
+ getItem: /* @__PURE__ */ __name((key) => memoryStore.get(key) || null, "getItem"),
8
+ setItem: /* @__PURE__ */ __name((key, value) => memoryStore.set(key, value), "setItem"),
9
+ removeItem: /* @__PURE__ */ __name((key) => memoryStore.delete(key), "removeItem"),
10
+ clear: /* @__PURE__ */ __name(() => memoryStore.clear(), "clear")
11
+ }, "createDefaultStorage");
12
+ const memoryStore = /* @__PURE__ */ new Map();
13
+ let storageBackend = createDefaultStorage();
14
+ const storage = {
15
+ setBackend: /* @__PURE__ */ __name((customBackend) => {
16
+ storageBackend = customBackend;
17
+ }, "setBackend"),
18
+ set: /* @__PURE__ */ __name((key, value) => {
19
+ if (value === null || value === void 0) {
20
+ storageBackend.removeItem(LsPrefix + key);
21
+ } else {
22
+ storageBackend.setItem(LsPrefix + key, JSON.stringify(value));
23
+ }
24
+ }, "set"),
25
+ get: /* @__PURE__ */ __name((key) => {
26
+ const value = storageBackend.getItem(LsPrefix + key);
27
+ if (value === null) return null;
28
+ try {
29
+ return JSON.parse(value);
30
+ } catch {
31
+ return value;
32
+ }
33
+ }, "get"),
34
+ remove: /* @__PURE__ */ __name((key) => storageBackend.removeItem(key), "remove"),
35
+ clear: /* @__PURE__ */ __name(() => storageBackend.clear(), "clear")
36
+ };
37
+ export {
38
+ LsPrefix,
39
+ createDefaultStorage,
40
+ memoryStore,
41
+ storage
42
+ };
43
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/storage.ts"],"sourcesContent":["export const LsPrefix = \"__fastnear_\";\n\nexport interface StorageBackend {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n clear(): void;\n}\n\n// Default: Use `localStorage` if available, otherwise an in-memory fallback\nexport const createDefaultStorage = (): StorageBackend =>\n typeof localStorage !== \"undefined\"\n ? localStorage\n : {\n getItem: (key) => memoryStore.get(key) || null,\n setItem: (key, value) => memoryStore.set(key, value),\n removeItem: (key) => memoryStore.delete(key),\n clear: () => memoryStore.clear(),\n };\n\nexport const memoryStore = new Map<string, string>(); // Internal memory storage\n\nlet storageBackend: StorageBackend = createDefaultStorage();\n\n// Functional storage module\nexport const storage = {\n setBackend: (customBackend: StorageBackend) => {\n storageBackend = customBackend;\n },\n\n set: (key: string, value: any) => {\n if (value === null || value === undefined) {\n storageBackend.removeItem(LsPrefix + key);\n } else {\n storageBackend.setItem(LsPrefix + key, JSON.stringify(value));\n }\n },\n\n get: (key: string): any => {\n const value = storageBackend.getItem(LsPrefix + key);\n if (value === null) return null;\n try {\n return JSON.parse(value);\n } catch {\n return value; // Return raw string if not JSON\n }\n },\n\n remove: (key: string) => storageBackend.removeItem(key),\n clear: () => storageBackend.clear(),\n};\n"],"mappings":";;;;AAAO,MAAM,WAAW;AAUjB,MAAM,uBAAuB,6BAClC,OAAO,iBAAiB,cACpB,eACA;AAAA,EACA,SAAS,wBAAC,QAAQ,YAAY,IAAI,GAAG,KAAK,MAAjC;AAAA,EACT,SAAS,wBAAC,KAAK,UAAU,YAAY,IAAI,KAAK,KAAK,GAA1C;AAAA,EACT,YAAY,wBAAC,QAAQ,YAAY,OAAO,GAAG,GAA/B;AAAA,EACZ,OAAO,6BAAM,YAAY,MAAM,GAAxB;AACT,GARgC;AAU7B,MAAM,cAAc,oBAAI,IAAoB;AAEnD,IAAI,iBAAiC,qBAAqB;AAGnD,MAAM,UAAU;AAAA,EACrB,YAAY,wBAAC,kBAAkC;AAC7C,qBAAiB;AAAA,EACnB,GAFY;AAAA,EAIZ,KAAK,wBAAC,KAAa,UAAe;AAChC,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,qBAAe,WAAW,WAAW,GAAG;AAAA,IAC1C,OAAO;AACL,qBAAe,QAAQ,WAAW,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9D;AAAA,EACF,GANK;AAAA,EAQL,KAAK,wBAAC,QAAqB;AACzB,UAAM,QAAQ,eAAe,QAAQ,WAAW,GAAG;AACnD,QAAI,UAAU,KAAM,QAAO;AAC3B,QAAI;AACF,aAAO,KAAK,MAAM,KAAK;AAAA,IACzB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,GARK;AAAA,EAUL,QAAQ,wBAAC,QAAgB,eAAe,WAAW,GAAG,GAA9C;AAAA,EACR,OAAO,6BAAM,eAAe,MAAM,GAA3B;AACT;","names":[]}
@@ -0,0 +1,169 @@
1
+ /* ⋈ 🏃🏻💨 FastNEAR Utils - ESM (@fastnear/utils version 0.6.3) */
2
+ /* https://www.npmjs.com/package/@fastnear/utils/v/0.6.3 */
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ import { serialize as borshSerialize } from "borsh";
6
+ import { keyFromString } from "./crypto.js";
7
+ import { fromBase58, fromBase64 } from "./misc.js";
8
+ import { getBorshSchema } from "@fastnear/borsh-schema";
9
+ const txToJson = /* @__PURE__ */ __name((tx) => {
10
+ return JSON.parse(JSON.stringify(
11
+ tx,
12
+ (key, value) => typeof value === "bigint" ? value.toString() : value
13
+ ));
14
+ }, "txToJson");
15
+ const txToJsonStringified = /* @__PURE__ */ __name((tx) => {
16
+ return JSON.stringify(txToJson(tx));
17
+ }, "txToJsonStringified");
18
+ function mapTransaction(jsonTransaction) {
19
+ return {
20
+ signerId: jsonTransaction.signerId,
21
+ publicKey: {
22
+ ed25519Key: {
23
+ data: keyFromString(jsonTransaction.publicKey)
24
+ }
25
+ },
26
+ nonce: BigInt(jsonTransaction.nonce),
27
+ receiverId: jsonTransaction.receiverId,
28
+ blockHash: fromBase58(jsonTransaction.blockHash),
29
+ actions: jsonTransaction.actions.map(mapAction)
30
+ };
31
+ }
32
+ __name(mapTransaction, "mapTransaction");
33
+ function serializeTransaction(jsonTransaction) {
34
+ console.log("fastnear: serializing transaction");
35
+ const transaction = mapTransaction(jsonTransaction);
36
+ console.log("fastnear: mapped transaction for borsh:", transaction);
37
+ return borshSerialize(SCHEMA.Transaction, transaction);
38
+ }
39
+ __name(serializeTransaction, "serializeTransaction");
40
+ function serializeSignedTransaction(jsonTransaction, signature) {
41
+ console.log("fastnear: Serializing Signed Transaction", jsonTransaction);
42
+ console.log("fastnear: signature", signature);
43
+ console.log("fastnear: signature length", fromBase58(signature).length);
44
+ const mappedSignedTx = mapTransaction(jsonTransaction);
45
+ console.log("fastnear: mapped (for borsh schema) signed transaction", mappedSignedTx);
46
+ const plainSignedTransaction = {
47
+ transaction: mappedSignedTx,
48
+ signature: {
49
+ ed25519Signature: {
50
+ data: fromBase58(signature)
51
+ }
52
+ }
53
+ };
54
+ const borshSignedTx = borshSerialize(SCHEMA.SignedTransaction, plainSignedTransaction, true);
55
+ console.log("fastnear: borsh-serialized signed transaction:", borshSignedTx);
56
+ return borshSignedTx;
57
+ }
58
+ __name(serializeSignedTransaction, "serializeSignedTransaction");
59
+ function mapAction(action) {
60
+ switch (action.type) {
61
+ case "CreateAccount": {
62
+ return {
63
+ createAccount: {}
64
+ };
65
+ }
66
+ case "DeployContract": {
67
+ return {
68
+ deployContract: {
69
+ code: fromBase64(action.codeBase64)
70
+ }
71
+ };
72
+ }
73
+ case "FunctionCall": {
74
+ const argsAsString = JSON.stringify(action.args);
75
+ const argsEncoded = new TextEncoder().encode(argsAsString);
76
+ return {
77
+ functionCall: {
78
+ methodName: action.methodName,
79
+ args: argsEncoded,
80
+ gas: BigInt(action.gas),
81
+ deposit: BigInt(action.deposit)
82
+ }
83
+ };
84
+ }
85
+ case "Transfer": {
86
+ return {
87
+ transfer: {
88
+ deposit: BigInt(action.deposit)
89
+ }
90
+ };
91
+ }
92
+ case "Stake": {
93
+ return {
94
+ stake: {
95
+ stake: BigInt(action.stake),
96
+ publicKey: {
97
+ ed25519Key: {
98
+ data: keyFromString(action.publicKey)
99
+ }
100
+ }
101
+ }
102
+ };
103
+ }
104
+ case "AddKey": {
105
+ return {
106
+ addKey: {
107
+ publicKey: {
108
+ ed25519Key: {
109
+ data: keyFromString(action.publicKey)
110
+ }
111
+ },
112
+ accessKey: {
113
+ nonce: BigInt(action.accessKey.nonce),
114
+ permission: action.accessKey.permission === "FullAccess" ? { fullAccess: {} } : {
115
+ functionCall: {
116
+ allowance: action.accessKey.allowance ? BigInt(action.accessKey.allowance) : null,
117
+ receiverId: action.accessKey.receiverId,
118
+ methodNames: action.accessKey.methodNames
119
+ }
120
+ }
121
+ }
122
+ }
123
+ };
124
+ }
125
+ case "DeleteKey": {
126
+ return {
127
+ deleteKey: {
128
+ publicKey: {
129
+ ed25519Key: {
130
+ data: keyFromString(action.publicKey)
131
+ }
132
+ }
133
+ }
134
+ };
135
+ }
136
+ case "DeleteAccount": {
137
+ return {
138
+ deleteAccount: {
139
+ beneficiaryId: action.beneficiaryId
140
+ }
141
+ };
142
+ }
143
+ case "SignedDelegate": {
144
+ return {
145
+ signedDelegate: {
146
+ delegateAction: mapAction(action.delegateAction),
147
+ signature: {
148
+ ed25519Signature: fromBase58(action.signature)
149
+ }
150
+ }
151
+ };
152
+ }
153
+ default: {
154
+ throw new Error("Not implemented action: " + action.type);
155
+ }
156
+ }
157
+ }
158
+ __name(mapAction, "mapAction");
159
+ const SCHEMA = getBorshSchema();
160
+ export {
161
+ SCHEMA,
162
+ mapAction,
163
+ mapTransaction,
164
+ serializeSignedTransaction,
165
+ serializeTransaction,
166
+ txToJson,
167
+ txToJsonStringified
168
+ };
169
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +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 { 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: fromBase64(action.codeBase64),\n },\n };\n }\n case \"FunctionCall\": {\n // turn JS object into json string\n const argsAsString = JSON.stringify(action.args)\n // an alternative to using NodeJS Buffer, TextEncoder can help but is limited\n const argsEncoded = new TextEncoder().encode(argsAsString)\n\n return {\n functionCall: {\n methodName: action.methodName,\n args: argsEncoded,\n gas: BigInt(action.gas),\n deposit: BigInt(action.deposit),\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":[]}