@fastnear/api 0.7.2 → 0.9.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/near.js CHANGED
@@ -1,5 +1,5 @@
1
- /* ⋈ 🏃🏻💨 FastNEAR API - ESM (@fastnear/api version 0.7.0) */
2
- /* https://www.npmjs.com/package/@fastnear/api/v/0.7.0 */
1
+ /* ⋈ 🏃🏻💨 FastNEAR API - ESM (@fastnear/api version 0.8.0) */
2
+ /* https://www.npmjs.com/package/@fastnear/api/v/0.8.0 */
3
3
  var __defProp = Object.defineProperty;
4
4
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
5
  import Big from "big.js";
@@ -25,7 +25,7 @@ import {
25
25
  DEFAULT_NETWORK_ID,
26
26
  NETWORKS,
27
27
  getTxHistory,
28
- updateState,
28
+ update,
29
29
  updateTxHistory
30
30
  } from "./state.js";
31
31
  import {
@@ -35,6 +35,7 @@ import {
35
35
  } from "./state.js";
36
36
  import { sha256 } from "@noble/hashes/sha2";
37
37
  import * as reExportAllUtils from "@fastnear/utils";
38
+ import * as stateExports from "./state.js";
38
39
  Big.DP = 27;
39
40
  const MaxBlockDelayMs = 1e3 * 60 * 60 * 6;
40
41
  function withBlockId(params, blockId) {
@@ -44,7 +45,7 @@ function withBlockId(params, blockId) {
44
45
  return blockId ? { ...params, block_id: blockId } : { ...params, finality: "optimistic" };
45
46
  }
46
47
  __name(withBlockId, "withBlockId");
47
- async function queryRpc(method, params) {
48
+ async function sendRpc(method, params) {
48
49
  const config2 = getConfig();
49
50
  if (!config2?.nodeUrl) {
50
51
  throw new Error("fastnear: getConfig() returned invalid config: missing nodeUrl.");
@@ -63,17 +64,17 @@ async function queryRpc(method, params) {
63
64
  if (result.error) {
64
65
  throw new Error(JSON.stringify(result.error));
65
66
  }
66
- return result.result;
67
+ return result;
67
68
  }
68
- __name(queryRpc, "queryRpc");
69
+ __name(sendRpc, "sendRpc");
69
70
  function afterTxSent(txId) {
70
71
  const txHistory = getTxHistory();
71
- queryRpc("tx", {
72
+ sendRpc("tx", {
72
73
  tx_hash: txHistory[txId]?.txHash,
73
74
  sender_account_id: txHistory[txId]?.tx?.signerId,
74
75
  wait_until: "EXECUTED_OPTIMISTIC"
75
76
  }).then((result) => {
76
- const successValue = result?.status?.SuccessValue;
77
+ const successValue = result?.result?.status?.SuccessValue;
77
78
  updateTxHistory({
78
79
  txId,
79
80
  status: "Executed",
@@ -94,7 +95,7 @@ __name(afterTxSent, "afterTxSent");
94
95
  async function sendTxToRpc(signedTxBase64, waitUntil, txId) {
95
96
  waitUntil = waitUntil || "INCLUDED";
96
97
  try {
97
- const sendTxRes = await queryRpc("send_tx", {
98
+ const sendTxRes = await sendRpc("send_tx", {
98
99
  signed_tx_base64: signedTxBase64,
99
100
  wait_until: waitUntil
100
101
  });
@@ -125,7 +126,7 @@ const config = /* @__PURE__ */ __name((newConfig) => {
125
126
  if (newConfig) {
126
127
  if (newConfig.networkId && current.networkId !== newConfig.networkId) {
127
128
  setConfig(newConfig.networkId);
128
- updateState({ accountId: null, privateKey: null, lastWalletId: null });
129
+ update({ accountId: null, privateKey: null, lastWalletId: null });
129
130
  lsSet("block", null);
130
131
  resetTxHistory();
131
132
  }
@@ -139,9 +140,32 @@ const authStatus = /* @__PURE__ */ __name(() => {
139
140
  }
140
141
  return "SignedIn";
141
142
  }, "authStatus");
143
+ const getPublicKeyForContract = /* @__PURE__ */ __name((opts) => {
144
+ return publicKey();
145
+ }, "getPublicKeyForContract");
146
+ const selected = /* @__PURE__ */ __name(() => {
147
+ const network = getConfig().networkId;
148
+ const nodeUrl = getConfig().nodeUrl;
149
+ const walletUrl = getConfig().walletUrl;
150
+ const helperUrl = getConfig().helperUrl;
151
+ const explorerUrl = getConfig().explorerUrl;
152
+ const account = accountId();
153
+ const contract = _state.accessKeyContractId;
154
+ const publicKey2 = getPublicKeyForContract();
155
+ return {
156
+ network,
157
+ nodeUrl,
158
+ walletUrl,
159
+ helperUrl,
160
+ explorerUrl,
161
+ account,
162
+ contract,
163
+ publicKey: publicKey2
164
+ };
165
+ }, "selected");
142
166
  const requestSignIn = /* @__PURE__ */ __name(async ({ contractId }) => {
143
167
  const privateKey = privateKeyFromRandom();
144
- updateState({ accessKeyContractId: contractId, accountId: null, privateKey });
168
+ update({ accessKeyContractId: contractId, accountId: null, privateKey });
145
169
  const pubKey = publicKeyFromPrivate(privateKey);
146
170
  const result = await _adapter.signIn({
147
171
  networkId: getConfig().networkId,
@@ -158,7 +182,7 @@ const requestSignIn = /* @__PURE__ */ __name(async ({ contractId }) => {
158
182
  }, 100);
159
183
  }
160
184
  } else if (result.accountId) {
161
- updateState({ accountId: result.accountId });
185
+ update({ accountId: result.accountId });
162
186
  }
163
187
  }, "requestSignIn");
164
188
  const view = /* @__PURE__ */ __name(async ({
@@ -169,7 +193,7 @@ const view = /* @__PURE__ */ __name(async ({
169
193
  blockId
170
194
  }) => {
171
195
  const encodedArgs = argsBase64 || (args ? toBase64(JSON.stringify(args)) : "");
172
- const result = await queryRpc(
196
+ const queryResult = await sendRpc(
173
197
  "query",
174
198
  withBlockId(
175
199
  {
@@ -181,26 +205,26 @@ const view = /* @__PURE__ */ __name(async ({
181
205
  blockId
182
206
  )
183
207
  );
184
- return parseJsonFromBytes(result.result);
208
+ return parseJsonFromBytes(queryResult.result.result);
185
209
  }, "view");
186
210
  const queryAccount = /* @__PURE__ */ __name(async ({
187
211
  accountId: accountId2,
188
212
  blockId
189
213
  }) => {
190
- return queryRpc(
214
+ return sendRpc(
191
215
  "query",
192
216
  withBlockId({ request_type: "view_account", account_id: accountId2 }, blockId)
193
217
  );
194
218
  }, "queryAccount");
195
219
  const queryBlock = /* @__PURE__ */ __name(async ({ blockId }) => {
196
- return queryRpc("block", withBlockId({}, blockId));
220
+ return sendRpc("block", withBlockId({}, blockId));
197
221
  }, "queryBlock");
198
222
  const queryAccessKey = /* @__PURE__ */ __name(async ({
199
223
  accountId: accountId2,
200
224
  publicKey: publicKey2,
201
225
  blockId
202
226
  }) => {
203
- return queryRpc(
227
+ return sendRpc(
204
228
  "query",
205
229
  withBlockId(
206
230
  { request_type: "view_access_key", account_id: accountId2, public_key: publicKey2 },
@@ -209,13 +233,13 @@ const queryAccessKey = /* @__PURE__ */ __name(async ({
209
233
  );
210
234
  }, "queryAccessKey");
211
235
  const queryTx = /* @__PURE__ */ __name(async ({ txHash, accountId: accountId2 }) => {
212
- return queryRpc("tx", [txHash, accountId2]);
236
+ return sendRpc("tx", [txHash, accountId2]);
213
237
  }, "queryTx");
214
238
  const localTxHistory = /* @__PURE__ */ __name(() => {
215
239
  return getTxHistory();
216
240
  }, "localTxHistory");
217
241
  const signOut = /* @__PURE__ */ __name(() => {
218
- updateState({ accountId: null, privateKey: null, contractId: null });
242
+ update({ accountId: null, privateKey: null, contractId: null });
219
243
  setConfig(NETWORKS[DEFAULT_NETWORK_ID]);
220
244
  }, "signOut");
221
245
  const sendTx = /* @__PURE__ */ __name(async ({
@@ -233,6 +257,14 @@ const sendTx = /* @__PURE__ */ __name(async ({
233
257
  updateTxHistory({ status: "Pending", txId, tx: jsonTx, finalState: false });
234
258
  const url = new URL(typeof window !== "undefined" ? window.location.href : "");
235
259
  url.searchParams.set("txIds", txId);
260
+ const existingParams = new URLSearchParams(window.location.search);
261
+ existingParams.forEach((value, key) => {
262
+ if (!url.searchParams.has(key)) {
263
+ url.searchParams.set(key, value);
264
+ }
265
+ });
266
+ url.searchParams.delete("errorCode");
267
+ url.searchParams.delete("errorMessage");
236
268
  try {
237
269
  const result = await _adapter.sendTransactions({
238
270
  transactions: [jsonTx],
@@ -279,10 +311,10 @@ const sendTx = /* @__PURE__ */ __name(async ({
279
311
  let nonce = lsGet("nonce");
280
312
  if (nonce == null) {
281
313
  const accessKey = await queryAccessKey({ accountId: signerId, publicKey: publicKey2 });
282
- if (accessKey.error) {
283
- throw new Error(`Access key error: ${accessKey.error} when attempting to get nonce for ${signerId} for public key ${publicKey2}`);
314
+ if (accessKey.result.error) {
315
+ throw new Error(`Access key error: ${accessKey.result.error} when attempting to get nonce for ${signerId} for public key ${publicKey2}`);
284
316
  }
285
- nonce = accessKey.nonce;
317
+ nonce = accessKey.result.nonce;
286
318
  lsSet("nonce", nonce);
287
319
  }
288
320
  let lastKnownBlock = lsGet("block");
@@ -290,15 +322,15 @@ const sendTx = /* @__PURE__ */ __name(async ({
290
322
  const latestBlock = await queryBlock({ blockId: "final" });
291
323
  lastKnownBlock = {
292
324
  header: {
293
- prev_hash: latestBlock.header.prev_hash,
294
- timestamp_nanosec: latestBlock.header.timestamp_nanosec
325
+ hash: latestBlock.result.header.hash,
326
+ timestamp_nanosec: latestBlock.result.header.timestamp_nanosec
295
327
  }
296
328
  };
297
329
  lsSet("block", lastKnownBlock);
298
330
  }
299
331
  nonce += 1;
300
332
  lsSet("nonce", nonce);
301
- const blockHash = lastKnownBlock.header.prev_hash;
333
+ const blockHash = lastKnownBlock.header.hash;
302
334
  const plainTransactionObj = {
303
335
  signerId,
304
336
  publicKey: publicKey2,
@@ -338,6 +370,12 @@ for (const key in reExportAllUtils) {
338
370
  exp.utils[key] = reExportAllUtils[key];
339
371
  }
340
372
  const utils = exp.utils;
373
+ const state = {};
374
+ for (const key in stateExports) {
375
+ state[key] = stateExports[key];
376
+ }
377
+ const event = state["events"];
378
+ delete state["events"];
341
379
  try {
342
380
  if (typeof window !== "undefined") {
343
381
  const url = new URL(window.location.href);
@@ -345,16 +383,22 @@ try {
345
383
  const pubKey = url.searchParams.get("public_key");
346
384
  const errCode = url.searchParams.get("errorCode");
347
385
  const errMsg = url.searchParams.get("errorMessage");
386
+ const decodedErrMsg = errMsg ? decodeURIComponent(errMsg) : null;
348
387
  const txHashes = url.searchParams.get("transactionHashes");
349
388
  const txIds = url.searchParams.get("txIds");
350
389
  if (errCode || errMsg) {
351
- console.warn(new Error(`Wallet error: ${errCode} ${errMsg}`));
390
+ console.warn(new Error(`Wallet raises:
391
+ code: ${errCode}
392
+ message: ${decodedErrMsg}`));
352
393
  }
353
394
  if (accId && pubKey) {
354
395
  if (pubKey === _state.publicKey) {
355
- updateState({ accountId: accId });
396
+ update({ accountId: accId });
356
397
  } else {
357
- console.error(new Error("Public key mismatch from wallet redirect"), pubKey, _state.publicKey);
398
+ if (authStatus() === "SignedIn") {
399
+ console.warn("Public key mismatch from wallet redirect", pubKey, _state.publicKey);
400
+ }
401
+ url.searchParams.delete("public_key");
358
402
  }
359
403
  }
360
404
  if (txHashes || txIds) {
@@ -378,14 +422,6 @@ try {
378
422
  console.error(new Error("Transaction hash mismatch from wallet redirect"), idArr, hashArr);
379
423
  }
380
424
  }
381
- url.searchParams.delete("account_id");
382
- url.searchParams.delete("public_key");
383
- url.searchParams.delete("errorCode");
384
- url.searchParams.delete("errorMessage");
385
- url.searchParams.delete("all_keys");
386
- url.searchParams.delete("transactionHashes");
387
- url.searchParams.delete("txIds");
388
- window.history.replaceState({}, "", url.toString());
389
425
  }
390
426
  } catch (e) {
391
427
  console.error("Error handling wallet redirect:", e);
@@ -457,19 +493,23 @@ export {
457
493
  afterTxSent,
458
494
  authStatus,
459
495
  config,
496
+ event,
460
497
  exp,
461
498
  generateTxId,
499
+ getPublicKeyForContract,
462
500
  localTxHistory,
463
501
  publicKey,
464
502
  queryAccessKey,
465
503
  queryAccount,
466
504
  queryBlock,
467
- queryRpc,
468
505
  queryTx,
469
506
  requestSignIn,
507
+ selected,
508
+ sendRpc,
470
509
  sendTx,
471
510
  sendTxToRpc,
472
511
  signOut,
512
+ state,
473
513
  utils,
474
514
  view,
475
515
  withBlockId
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/near.ts"],"sourcesContent":["import Big from \"big.js\";\nimport {\n lsSet,\n lsGet,\n tryParseJson,\n fromBase64,\n toBase64,\n canSignWithLAK,\n toBase58,\n parseJsonFromBytes,\n signHash,\n publicKeyFromPrivate,\n privateKeyFromRandom,\n serializeTransaction,\n serializeSignedTransaction, bytesToBase64, PlainTransaction,\n} from \"@fastnear/utils\";\n\nimport {\n _adapter,\n _state,\n DEFAULT_NETWORK_ID,\n NETWORKS,\n getTxHistory,\n updateState,\n updateTxHistory,\n} from \"./state.js\";\n\nimport {\n getConfig,\n setConfig,\n resetTxHistory,\n} from \"./state.js\";\n\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport * as reExportAllUtils from \"@fastnear/utils\";\n\nBig.DP = 27;\nexport const MaxBlockDelayMs = 1000 * 60 * 60 * 6; // 6 hours\n\ninterface AccessKeyWithError {\n nonce: number;\n permission?: any;\n error?: string;\n}\n\ninterface WalletTxResult {\n url?: string;\n outcomes?: Array<{ transaction: { hash: string } }>;\n rejected?: boolean;\n error?: string;\n}\n\ninterface BlockView {\n header: {\n prev_hash: string;\n timestamp_nanosec: string;\n };\n}\n\nexport function withBlockId(params: Record<string, any>, blockId?: string) {\n if (blockId === \"final\" || blockId === \"optimistic\") {\n return { ...params, finality: blockId };\n }\n return blockId ? { ...params, block_id: blockId } : { ...params, finality: \"optimistic\" };\n}\n\nexport async function queryRpc(method: string, params: Record<string, any> | any[]) {\n const config = getConfig();\n if (!config?.nodeUrl) {\n throw new Error(\"fastnear: getConfig() returned invalid config: missing nodeUrl.\");\n }\n const response = await fetch(config.nodeUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: `fastnear-${Date.now()}`,\n method,\n params,\n }),\n });\n const result = await response.json();\n if (result.error) {\n throw new Error(JSON.stringify(result.error));\n }\n return result.result;\n}\n\nexport function afterTxSent(txId: string) {\n const txHistory = getTxHistory();\n queryRpc(\"tx\", {\n tx_hash: txHistory[txId]?.txHash,\n sender_account_id: txHistory[txId]?.tx?.signerId,\n wait_until: \"EXECUTED_OPTIMISTIC\",\n })\n .then((result) => {\n const successValue = result?.status?.SuccessValue;\n updateTxHistory({\n txId,\n status: \"Executed\",\n result,\n successValue: successValue ? tryParseJson(fromBase64(successValue)) : undefined,\n finalState: true,\n });\n })\n .catch((error) => {\n updateTxHistory({\n txId,\n status: \"ErrorAfterIncluded\",\n error: tryParseJson(error.message) ?? error.message,\n finalState: true,\n });\n });\n}\n\nexport async function sendTxToRpc(signedTxBase64: string, waitUntil: string | undefined, txId: string) {\n // default to \"INCLUDED\"\n // see options: https://docs.near.org/api/rpc/transactions#tx-status-result\n waitUntil = waitUntil || \"INCLUDED\";\n\n try {\n const sendTxRes = await queryRpc(\"send_tx\", {\n signed_tx_base64: signedTxBase64,\n wait_until: waitUntil,\n });\n\n updateTxHistory({ txId, status: \"Included\", finalState: false });\n afterTxSent(txId);\n\n return sendTxRes;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n updateTxHistory({\n txId,\n status: \"Error\",\n error: tryParseJson(errorMessage) ?? errorMessage,\n finalState: false,\n });\n throw new Error(errorMessage);\n }\n}\n\nexport interface AccessKeyView {\n nonce: number;\n permission: any;\n}\n\n/**\n * Generates a mock transaction ID.\n *\n * This function creates a pseudo-unique transaction ID for testing or\n * non-production use. It combines the current timestamp with a\n * random component for uniqueness.\n *\n * **Note:** This is not cryptographically secure and should not be used\n * for actual transaction processing.\n *\n * @returns {string} A mock transaction ID in the format `tx-{timestamp}-{random}`\n */\nexport function generateTxId(): string {\n const randomPart = crypto.getRandomValues(new Uint32Array(2)).join(\"\");\n return `tx-${Date.now()}-${parseInt(randomPart, 10).toString(36)}`;\n}\n\nexport const accountId = () => _state.accountId;\nexport const publicKey = () => _state.publicKey;\n\nexport const config = (newConfig?: Record<string, any>) => {\n const current = getConfig();\n if (newConfig) {\n if (newConfig.networkId && current.networkId !== newConfig.networkId) {\n setConfig(newConfig.networkId);\n updateState({ accountId: null, privateKey: null, lastWalletId: null });\n lsSet(\"block\", null);\n resetTxHistory();\n }\n setConfig({ ...getConfig(), ...newConfig });\n }\n return getConfig();\n};\n\nexport const authStatus = (): string | Record<string, any> => {\n if (!_state.accountId) {\n return \"SignedOut\";\n }\n return \"SignedIn\";\n};\n\nexport const requestSignIn = async ({ contractId }: { contractId: string }) => {\n const privateKey = privateKeyFromRandom();\n updateState({ accessKeyContractId: contractId, accountId: null, privateKey });\n const pubKey = publicKeyFromPrivate(privateKey);\n\n const result = await _adapter.signIn({\n networkId: getConfig().networkId,\n contractId,\n publicKey: pubKey,\n });\n\n if (result.error) {\n throw new Error(`Wallet error: ${result.error}`);\n }\n if (result.url) {\n if (typeof window !== \"undefined\") {\n setTimeout(() => {\n window.location.href = result.url;\n }, 100);\n }\n } else if (result.accountId) {\n updateState({ accountId: result.accountId });\n }\n};\n\nexport const view = async ({\n contractId,\n methodName,\n args,\n argsBase64,\n blockId,\n }: {\n contractId: string;\n methodName: string;\n args?: any;\n argsBase64?: string;\n blockId?: string;\n}) => {\n const encodedArgs = argsBase64 || (args ? toBase64(JSON.stringify(args)) : \"\");\n const result = await queryRpc(\n \"query\",\n withBlockId(\n {\n request_type: \"call_function\",\n account_id: contractId,\n method_name: methodName,\n args_base64: encodedArgs,\n },\n blockId\n )\n );\n return parseJsonFromBytes(result.result);\n};\n\nexport const queryAccount = async ({\n accountId,\n blockId,\n }: {\n accountId: string;\n blockId?: string;\n}) => {\n return queryRpc(\n \"query\",\n withBlockId({ request_type: \"view_account\", account_id: accountId }, blockId)\n );\n};\n\nexport const queryBlock = async ({ blockId }: { blockId?: string }): Promise<BlockView> => {\n return queryRpc(\"block\", withBlockId({}, blockId));\n};\n\nexport const queryAccessKey = async ({\n accountId,\n publicKey,\n blockId,\n }: {\n accountId: string;\n publicKey: string;\n blockId?: string;\n}): Promise<AccessKeyWithError> => {\n return queryRpc(\n \"query\",\n withBlockId(\n { request_type: \"view_access_key\", account_id: accountId, public_key: publicKey },\n blockId\n )\n );\n};\n\nexport const queryTx = async ({ txHash, accountId }: { txHash: string; accountId: string }) => {\n return queryRpc(\"tx\", [txHash, accountId]);\n};\n\nexport const localTxHistory = () => {\n return getTxHistory();\n};\n\nexport const signOut = () => {\n updateState({ accountId: null, privateKey: null, contractId: null });\n setConfig(NETWORKS[DEFAULT_NETWORK_ID]);\n};\n\nexport const sendTx = async ({\n receiverId,\n actions,\n waitUntil,\n }: {\n receiverId: string;\n actions: any[];\n waitUntil?: string;\n}) => {\n const signerId = _state.accountId;\n if (!signerId) throw new Error(\"Must sign in\");\n\n const publicKey = _state.publicKey ?? \"\";\n const privKey = _state.privateKey;\n // this generates a mock transaction ID so we can keep track of each tx\n const txId = generateTxId();\n\n if (!privKey || receiverId !== _state.accessKeyContractId || !canSignWithLAK(actions)) {\n const jsonTx = { signerId, receiverId, actions };\n updateTxHistory({ status: \"Pending\", txId, tx: jsonTx, finalState: false });\n\n const url = new URL(typeof window !== \"undefined\" ? window.location.href : \"\");\n url.searchParams.set(\"txIds\", txId);\n\n try {\n const result: WalletTxResult = await _adapter.sendTransactions({\n transactions: [jsonTx],\n callbackUrl: url.toString(),\n });\n\n if (result.url) {\n if (typeof window !== \"undefined\") {\n setTimeout(() => {\n window.location.href = result.url!;\n }, 100);\n }\n } else if (result.outcomes?.length) {\n result.outcomes.forEach((r) =>\n updateTxHistory({\n txId,\n status: \"Executed\",\n result: r,\n txHash: r.transaction.hash,\n finalState: true,\n })\n );\n } else if (result.rejected) {\n updateTxHistory({ txId, status: \"RejectedByUser\", finalState: true });\n } else if (result.error) {\n updateTxHistory({\n txId,\n status: \"Error\",\n error: tryParseJson(result.error),\n finalState: true,\n });\n }\n\n return result;\n } catch (err) {\n console.error('fastnear: error sending tx using adapter:', err)\n updateTxHistory({\n txId,\n status: \"Error\",\n error: tryParseJson((err as Error).message),\n finalState: true,\n });\n\n return Promise.reject(err);\n }\n }\n\n //\n let nonce = lsGet(\"nonce\") as number | null;\n if (nonce == null) {\n const accessKey = await queryAccessKey({ accountId: signerId, publicKey: publicKey });\n if (accessKey.error) {\n throw new Error(`Access key error: ${accessKey.error} when attempting to get nonce for ${signerId} for public key ${publicKey}`);\n }\n nonce = accessKey.nonce;\n lsSet(\"nonce\", nonce);\n }\n\n let lastKnownBlock = lsGet(\"block\") as BlockView | null;\n if (\n !lastKnownBlock ||\n parseFloat(lastKnownBlock.header.timestamp_nanosec) / 1e6 + MaxBlockDelayMs < Date.now()\n ) {\n const latestBlock = await queryBlock({ blockId: \"final\" });\n lastKnownBlock = {\n header: {\n prev_hash: latestBlock.header.prev_hash,\n timestamp_nanosec: latestBlock.header.timestamp_nanosec,\n },\n };\n lsSet(\"block\", lastKnownBlock);\n }\n\n nonce += 1;\n lsSet(\"nonce\", nonce);\n\n const blockHash = lastKnownBlock.header.prev_hash;\n\n const plainTransactionObj: PlainTransaction = {\n signerId,\n publicKey,\n nonce,\n receiverId,\n blockHash,\n actions,\n };\n\n const txBytes = serializeTransaction(plainTransactionObj);\n const txHashBytes = sha256(txBytes);\n const txHash58 = toBase58(txHashBytes);\n\n const signatureBase58 = signHash(txHashBytes, privKey, { returnBase58: true });\n const signedTransactionBytes = serializeSignedTransaction(plainTransactionObj, signatureBase58);\n const signedTxBase64 = bytesToBase64(signedTransactionBytes);\n\n updateTxHistory({\n status: \"Pending\",\n txId,\n tx: plainTransactionObj,\n signature: signatureBase58,\n signedTxBase64,\n txHash: txHash58,\n finalState: false,\n });\n\n try {\n return await sendTxToRpc(signedTxBase64, waitUntil, txId);\n } catch (error) {\n console.error(\"Error Sending Transaction:\", error, plainTransactionObj, signedTxBase64);\n }\n};\n\n// exports\nexport const exp = {\n utils: {}, // we will map this in a moment, giving keys, for IDE hints\n borsh: reExportAllUtils.exp.borsh,\n borshSchema: reExportAllUtils.exp.borshSchema.getBorshSchema(),\n};\n\nfor (const key in reExportAllUtils) {\n exp.utils[key] = reExportAllUtils[key];\n}\n\nexport const utils = exp.utils;\n\n// Wallet redirect handling\ntry {\n if (typeof window !== \"undefined\") {\n const url = new URL(window.location.href);\n const accId = url.searchParams.get(\"account_id\");\n const pubKey = url.searchParams.get(\"public_key\");\n const errCode = url.searchParams.get(\"errorCode\");\n const errMsg = url.searchParams.get(\"errorMessage\");\n const txHashes = url.searchParams.get(\"transactionHashes\");\n const txIds = url.searchParams.get(\"txIds\");\n\n if (errCode || errMsg) {\n console.warn(new Error(`Wallet error: ${errCode} ${errMsg}`));\n }\n\n if (accId && pubKey) {\n if (pubKey === _state.publicKey) {\n updateState({ accountId: accId });\n } else {\n console.error(new Error(\"Public key mismatch from wallet redirect\"), pubKey, _state.publicKey);\n }\n }\n\n if (txHashes || txIds) {\n const hashArr = txHashes ? txHashes.split(\",\") : [];\n const idArr = txIds ? txIds.split(\",\") : [];\n if (idArr.length > hashArr.length) {\n idArr.forEach((id) => {\n updateTxHistory({ txId: id, status: \"RejectedByUser\", finalState: true });\n });\n } else if (idArr.length === hashArr.length) {\n idArr.forEach((id, i) => {\n updateTxHistory({\n txId: id,\n status: \"PendingGotTxHash\",\n txHash: hashArr[i],\n finalState: false,\n });\n afterTxSent(id);\n });\n } else {\n console.error(new Error(\"Transaction hash mismatch from wallet redirect\"), idArr, hashArr);\n }\n }\n\n url.searchParams.delete(\"account_id\");\n url.searchParams.delete(\"public_key\");\n url.searchParams.delete(\"errorCode\");\n url.searchParams.delete(\"errorMessage\");\n url.searchParams.delete(\"all_keys\");\n url.searchParams.delete(\"transactionHashes\");\n url.searchParams.delete(\"txIds\");\n window.history.replaceState({}, \"\", url.toString());\n }\n} catch (e) {\n console.error(\"Error handling wallet redirect:\", e);\n}\n\n// action helpers\nexport const actions = {\n functionCall: ({\n methodName,\n gas,\n deposit,\n args,\n argsBase64,\n }: {\n methodName: string;\n gas?: string;\n deposit?: string;\n args?: Record<string, any>;\n argsBase64?: string;\n }) => ({\n type: \"FunctionCall\",\n methodName,\n args,\n argsBase64,\n gas,\n deposit,\n }),\n\n transfer: (yoctoAmount: string) => ({\n type: \"Transfer\",\n deposit: yoctoAmount,\n }),\n\n stakeNEAR: ({amount, publicKey}: { amount: string; publicKey: string }) => ({\n type: \"Stake\",\n stake: amount,\n publicKey,\n }),\n\n addFullAccessKey: ({publicKey}: { publicKey: string }) => ({\n type: \"AddKey\",\n publicKey: publicKey,\n accessKey: {permission: \"FullAccess\"},\n }),\n\n addLimitedAccessKey: ({\n publicKey,\n allowance,\n accountId,\n methodNames,\n }: {\n publicKey: string;\n allowance: string;\n accountId: string;\n methodNames: string[];\n }) => ({\n type: \"AddKey\",\n publicKey: publicKey,\n accessKey: {\n permission: \"FunctionCall\",\n allowance,\n receiverId: accountId,\n methodNames,\n },\n }),\n\n deleteKey: ({publicKey}: { publicKey: string }) => ({\n type: \"DeleteKey\",\n publicKey,\n }),\n\n deleteAccount: ({beneficiaryId}: { beneficiaryId: string }) => ({\n type: \"DeleteAccount\",\n beneficiaryId,\n }),\n\n createAccount: () => ({\n type: \"CreateAccount\",\n }),\n\n deployContract: ({codeBase64}: { codeBase64: string }) => ({\n type: \"DeployContract\",\n codeBase64,\n }),\n};\n"],"mappings":"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","names":["config","accountId","publicKey","actions"]}
1
+ {"version":3,"sources":["../../src/near.ts"],"sourcesContent":["import Big from \"big.js\";\nimport {\n lsSet,\n lsGet,\n tryParseJson,\n fromBase64,\n toBase64,\n canSignWithLAK,\n toBase58,\n parseJsonFromBytes,\n signHash,\n publicKeyFromPrivate,\n privateKeyFromRandom,\n serializeTransaction,\n serializeSignedTransaction, bytesToBase64, PlainTransaction,\n} from \"@fastnear/utils\";\n\nimport {\n _adapter,\n _state,\n DEFAULT_NETWORK_ID,\n NETWORKS,\n getTxHistory,\n update,\n updateTxHistory,\n} from \"./state.js\";\n\nimport {\n getConfig,\n setConfig,\n resetTxHistory,\n} from \"./state.js\";\n\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport * as reExportAllUtils from \"@fastnear/utils\";\nimport * as stateExports from \"./state.js\";\n\nBig.DP = 27;\nexport const MaxBlockDelayMs = 1000 * 60 * 60 * 6; // 6 hours\n\nexport interface AccessKeyWithError {\n result: {\n nonce: number;\n permission?: any;\n error?: string;\n }\n}\n\nexport interface WalletTxResult {\n url?: string;\n outcomes?: Array<{ transaction: { hash: string } }>;\n rejected?: boolean;\n error?: string;\n}\n\nexport interface BlockView {\n result: {\n header: {\n hash: string;\n timestamp_nanosec: string;\n }\n }\n}\n\n// The structure it's saved to in storage\nexport interface LastKnownBlock {\n header: {\n hash: string;\n timestamp_nanosec: string;\n }\n}\n\nexport function withBlockId(params: Record<string, any>, blockId?: string) {\n if (blockId === \"final\" || blockId === \"optimistic\") {\n return { ...params, finality: blockId };\n }\n return blockId ? { ...params, block_id: blockId } : { ...params, finality: \"optimistic\" };\n}\n\nexport async function sendRpc(method: string, params: Record<string, any> | any[]) {\n const config = getConfig();\n if (!config?.nodeUrl) {\n throw new Error(\"fastnear: getConfig() returned invalid config: missing nodeUrl.\");\n }\n const response = await fetch(config.nodeUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: `fastnear-${Date.now()}`,\n method,\n params,\n }),\n });\n const result = await response.json();\n if (result.error) {\n throw new Error(JSON.stringify(result.error));\n }\n return result;\n}\n\nexport function afterTxSent(txId: string) {\n const txHistory = getTxHistory();\n sendRpc(\"tx\", {\n tx_hash: txHistory[txId]?.txHash,\n sender_account_id: txHistory[txId]?.tx?.signerId,\n wait_until: \"EXECUTED_OPTIMISTIC\",\n })\n .then( result => {\n const successValue = result?.result?.status?.SuccessValue;\n updateTxHistory({\n txId,\n status: \"Executed\",\n result,\n successValue: successValue ? tryParseJson(fromBase64(successValue)) : undefined,\n finalState: true,\n });\n })\n .catch((error) => {\n updateTxHistory({\n txId,\n status: \"ErrorAfterIncluded\",\n error: tryParseJson(error.message) ?? error.message,\n finalState: true,\n });\n });\n}\n\nexport async function sendTxToRpc(signedTxBase64: string, waitUntil: string | undefined, txId: string) {\n // default to \"INCLUDED\"\n // see options: https://docs.near.org/api/rpc/transactions#tx-status-result\n waitUntil = waitUntil || \"INCLUDED\";\n\n try {\n const sendTxRes = await sendRpc(\"send_tx\", {\n signed_tx_base64: signedTxBase64,\n wait_until: waitUntil,\n });\n\n updateTxHistory({ txId, status: \"Included\", finalState: false });\n afterTxSent(txId);\n\n return sendTxRes;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n updateTxHistory({\n txId,\n status: \"Error\",\n error: tryParseJson(errorMessage) ?? errorMessage,\n finalState: false,\n });\n throw new Error(errorMessage);\n }\n}\n\nexport interface AccessKeyView {\n nonce: number;\n permission: any;\n}\n\n/**\n * Generates a mock transaction ID.\n *\n * This function creates a pseudo-unique transaction ID for testing or\n * non-production use. It combines the current timestamp with a\n * random component for uniqueness.\n *\n * **Note:** This is not cryptographically secure and should not be used\n * for actual transaction processing.\n *\n * @returns {string} A mock transaction ID in the format `tx-{timestamp}-{random}`\n */\nexport function generateTxId(): string {\n const randomPart = crypto.getRandomValues(new Uint32Array(2)).join(\"\");\n return `tx-${Date.now()}-${parseInt(randomPart, 10).toString(36)}`;\n}\n\nexport const accountId = () => _state.accountId;\nexport const publicKey = () => _state.publicKey;\n\nexport const config = (newConfig?: Record<string, any>) => {\n const current = getConfig();\n if (newConfig) {\n if (newConfig.networkId && current.networkId !== newConfig.networkId) {\n setConfig(newConfig.networkId);\n update({ accountId: null, privateKey: null, lastWalletId: null });\n lsSet(\"block\", null);\n resetTxHistory();\n }\n setConfig({ ...getConfig(), ...newConfig });\n }\n return getConfig();\n};\n\nexport const authStatus = (): string | Record<string, any> => {\n if (!_state.accountId) {\n return \"SignedOut\";\n }\n return \"SignedIn\";\n};\n\n// this is an intentional stub\n// and it's probably partially done, to help ease future features\n// for now we'll assume each web end user has one keypair in storage\n// for every contract they wish to interact with\n// later, it may be prudent to hold multiple, but until then this function\n// just returns the access key as if it were among others in the array.\n// we're pretending like we really thought about which access key we're returning\n// based on the opts argument. this allows us to fill this logic in later.\nexport const getPublicKeyForContract = (opts?: any) => {\n return publicKey();\n}\n\n// returns details on the selected:\n// network, wallet, and explorer details as well as\n// sending account, contract, and selected public key\nexport const selected = () => {\n const network = getConfig().networkId;\n const nodeUrl = getConfig().nodeUrl;\n const walletUrl = getConfig().walletUrl;\n const helperUrl = getConfig().helperUrl;\n const explorerUrl = getConfig().explorerUrl;\n\n const account = accountId();\n const contract = _state.accessKeyContractId;\n const publicKey = getPublicKeyForContract();\n\n return {\n network,\n nodeUrl,\n walletUrl,\n helperUrl,\n explorerUrl,\n account,\n contract,\n publicKey\n }\n}\n\nexport const requestSignIn = async ({ contractId }: { contractId: string }) => {\n const privateKey = privateKeyFromRandom();\n update({ accessKeyContractId: contractId, accountId: null, privateKey });\n const pubKey = publicKeyFromPrivate(privateKey);\n\n const result = await _adapter.signIn({\n networkId: getConfig().networkId,\n contractId,\n publicKey: pubKey,\n });\n\n if (result.error) {\n throw new Error(`Wallet error: ${result.error}`);\n }\n if (result.url) {\n if (typeof window !== \"undefined\") {\n setTimeout(() => {\n window.location.href = result.url;\n }, 100);\n }\n } else if (result.accountId) {\n update({ accountId: result.accountId });\n }\n};\n\nexport const view = async ({\n contractId,\n methodName,\n args,\n argsBase64,\n blockId,\n }: {\n contractId: string;\n methodName: string;\n args?: any;\n argsBase64?: string;\n blockId?: string;\n}) => {\n const encodedArgs = argsBase64 || (args ? toBase64(JSON.stringify(args)) : \"\");\n const queryResult = await sendRpc(\n \"query\",\n withBlockId(\n {\n request_type: \"call_function\",\n account_id: contractId,\n method_name: methodName,\n args_base64: encodedArgs,\n },\n blockId\n )\n );\n\n return parseJsonFromBytes(queryResult.result.result);\n};\n\nexport const queryAccount = async ({\n accountId,\n blockId,\n }: {\n accountId: string;\n blockId?: string;\n}) => {\n return sendRpc(\n \"query\",\n withBlockId({ request_type: \"view_account\", account_id: accountId }, blockId)\n );\n};\n\nexport const queryBlock = async ({ blockId }: { blockId?: string }): Promise<BlockView> => {\n return sendRpc(\"block\", withBlockId({}, blockId));\n};\n\nexport const queryAccessKey = async ({\n accountId,\n publicKey,\n blockId,\n }: {\n accountId: string;\n publicKey: string;\n blockId?: string;\n}): Promise<AccessKeyWithError> => {\n return sendRpc(\n \"query\",\n withBlockId(\n { request_type: \"view_access_key\", account_id: accountId, public_key: publicKey },\n blockId\n )\n );\n};\n\nexport const queryTx = async ({ txHash, accountId }: { txHash: string; accountId: string }) => {\n return sendRpc(\"tx\", [txHash, accountId]);\n};\n\nexport const localTxHistory = () => {\n return getTxHistory();\n};\n\nexport const signOut = () => {\n update({ accountId: null, privateKey: null, contractId: null });\n setConfig(NETWORKS[DEFAULT_NETWORK_ID]);\n};\n\nexport const sendTx = async ({\n receiverId,\n actions,\n waitUntil,\n }: {\n receiverId: string;\n actions: any[];\n waitUntil?: string;\n}) => {\n const signerId = _state.accountId;\n if (!signerId) throw new Error(\"Must sign in\");\n\n const publicKey = _state.publicKey ?? \"\";\n const privKey = _state.privateKey;\n // this generates a mock transaction ID so we can keep track of each tx\n const txId = generateTxId();\n\n if (!privKey || receiverId !== _state.accessKeyContractId || !canSignWithLAK(actions)) {\n const jsonTx = { signerId, receiverId, actions };\n updateTxHistory({ status: \"Pending\", txId, tx: jsonTx, finalState: false });\n\n const url = new URL(typeof window !== \"undefined\" ? window.location.href : \"\");\n url.searchParams.set(\"txIds\", txId);\n\n // preserve existing url params\n const existingParams = new URLSearchParams(window.location.search);\n existingParams.forEach((value, key) => {\n if (!url.searchParams.has(key)) {\n url.searchParams.set(key, value);\n }\n });\n\n // we're wanting to preserve URL params that we send in\n // but make sure we're not feeding back error params\n // from a previous failure\n\n url.searchParams.delete(\"errorCode\");\n url.searchParams.delete(\"errorMessage\");\n\n try {\n const result: WalletTxResult = await _adapter.sendTransactions({\n transactions: [jsonTx],\n callbackUrl: url.toString(),\n });\n\n if (result.url) {\n if (typeof window !== \"undefined\") {\n setTimeout(() => {\n window.location.href = result.url!;\n }, 100);\n }\n } else if (result.outcomes?.length) {\n result.outcomes.forEach((r) =>\n updateTxHistory({\n txId,\n status: \"Executed\",\n result: r,\n txHash: r.transaction.hash,\n finalState: true,\n })\n );\n } else if (result.rejected) {\n updateTxHistory({ txId, status: \"RejectedByUser\", finalState: true });\n } else if (result.error) {\n updateTxHistory({\n txId,\n status: \"Error\",\n error: tryParseJson(result.error),\n finalState: true,\n });\n }\n\n return result;\n } catch (err) {\n console.error('fastnear: error sending tx using adapter:', err)\n updateTxHistory({\n txId,\n status: \"Error\",\n error: tryParseJson((err as Error).message),\n finalState: true,\n });\n\n return Promise.reject(err);\n }\n }\n\n let nonce = lsGet(\"nonce\") as number | null;\n if (nonce == null) {\n const accessKey = await queryAccessKey({ accountId: signerId, publicKey: publicKey });\n if (accessKey.result.error) {\n throw new Error(`Access key error: ${accessKey.result.error} when attempting to get nonce for ${signerId} for public key ${publicKey}`);\n }\n nonce = accessKey.result.nonce;\n lsSet(\"nonce\", nonce);\n }\n\n let lastKnownBlock = lsGet(\"block\") as LastKnownBlock | null;\n if (\n !lastKnownBlock ||\n parseFloat(lastKnownBlock.header.timestamp_nanosec) / 1e6 + MaxBlockDelayMs < Date.now()\n ) {\n const latestBlock = await queryBlock({ blockId: \"final\" });\n lastKnownBlock = {\n header: {\n hash: latestBlock.result.header.hash,\n timestamp_nanosec: latestBlock.result.header.timestamp_nanosec,\n },\n };\n lsSet(\"block\", lastKnownBlock);\n }\n\n nonce += 1;\n lsSet(\"nonce\", nonce);\n\n const blockHash = lastKnownBlock.header.hash;\n\n const plainTransactionObj: PlainTransaction = {\n signerId,\n publicKey,\n nonce,\n receiverId,\n blockHash,\n actions,\n };\n\n const txBytes = serializeTransaction(plainTransactionObj);\n const txHashBytes = sha256(txBytes);\n const txHash58 = toBase58(txHashBytes);\n\n const signatureBase58 = signHash(txHashBytes, privKey, { returnBase58: true });\n const signedTransactionBytes = serializeSignedTransaction(plainTransactionObj, signatureBase58);\n const signedTxBase64 = bytesToBase64(signedTransactionBytes);\n\n updateTxHistory({\n status: \"Pending\",\n txId,\n tx: plainTransactionObj,\n signature: signatureBase58,\n signedTxBase64,\n txHash: txHash58,\n finalState: false,\n });\n\n try {\n return await sendTxToRpc(signedTxBase64, waitUntil, txId);\n } catch (error) {\n console.error(\"Error Sending Transaction:\", error, plainTransactionObj, signedTxBase64);\n }\n};\n\n// exports\nexport const exp = {\n utils: {}, // we will map this in a moment, giving keys, for IDE hints\n borsh: reExportAllUtils.exp.borsh,\n borshSchema: reExportAllUtils.exp.borshSchema.getBorshSchema(),\n};\n\nfor (const key in reExportAllUtils) {\n exp.utils[key] = reExportAllUtils[key];\n}\n\n// devx\nexport const utils = exp.utils;\n\nexport const state = {}\n\nfor (const key in stateExports) {\n state[key] = stateExports[key];\n}\n\n// devx\n\nexport const event = state['events'];\ndelete state['events'];\n\n// Wallet redirect handling\ntry {\n if (typeof window !== \"undefined\") {\n const url = new URL(window.location.href);\n const accId = url.searchParams.get(\"account_id\");\n const pubKey = url.searchParams.get(\"public_key\");\n const errCode = url.searchParams.get(\"errorCode\");\n const errMsg = url.searchParams.get(\"errorMessage\");\n const decodedErrMsg = errMsg ? decodeURIComponent(errMsg) : null;\n\n const txHashes = url.searchParams.get(\"transactionHashes\");\n const txIds = url.searchParams.get(\"txIds\");\n\n if (errCode || errMsg) {\n console.warn(new Error(`Wallet raises:\\ncode: ${errCode}\\nmessage: ${decodedErrMsg}`));\n }\n\n if (accId && pubKey) {\n if (pubKey === _state.publicKey) {\n update({ accountId: accId });\n } else {\n // it's possible the end user has a URL param that's old. we'll remove the public_key param\n // if logged out, no need to throw warning\n if (authStatus() === \"SignedIn\") {\n console.warn(\"Public key mismatch from wallet redirect\", pubKey, _state.publicKey);\n }\n url.searchParams.delete(\"public_key\");\n }\n }\n\n if (txHashes || txIds) {\n const hashArr = txHashes ? txHashes.split(\",\") : [];\n const idArr = txIds ? txIds.split(\",\") : [];\n if (idArr.length > hashArr.length) {\n idArr.forEach((id) => {\n updateTxHistory({ txId: id, status: \"RejectedByUser\", finalState: true });\n });\n } else if (idArr.length === hashArr.length) {\n idArr.forEach((id, i) => {\n updateTxHistory({\n txId: id,\n status: \"PendingGotTxHash\",\n txHash: hashArr[i],\n finalState: false,\n });\n afterTxSent(id);\n });\n } else {\n console.error(new Error(\"Transaction hash mismatch from wallet redirect\"), idArr, hashArr);\n }\n }\n\n // we can consider removing these, but want to be careful because\n // it can be helpful for a dev to have a URL they can debug with\n // we won't want to remove information\n\n // pretty sure txIds can go, especially if you can tell it's been more than 5 minutes or something\n // public_key sometimes confuses it, so this might only be needed when adding a new access key\n // and perhaps once we've confirmed that the transaction hashes are getting saved to storage\n // (not sure about that section of code) then we can get rid of the transactionHashes, too\n\n // I'd like to keep this for posterity. for a bit.\n\n // url.searchParams.delete(\"account_id\");\n // url.searchParams.delete(\"public_key\");\n // url.searchParams.delete(\"txIds\");\n // url.searchParams.delete(\"errorCode\");\n // url.searchParams.delete(\"errorMessage\");\n // url.searchParams.delete(\"all_keys\");\n // url.searchParams.delete(\"transactionHashes\");\n // window.history.replaceState({}, \"\", url.toString());\n }\n} catch (e) {\n console.error(\"Error handling wallet redirect:\", e);\n}\n\n// action helpers\nexport const actions = {\n functionCall: ({\n methodName,\n gas,\n deposit,\n args,\n argsBase64,\n }: {\n methodName: string;\n gas?: string;\n deposit?: string;\n args?: Record<string, any>;\n argsBase64?: string;\n }) => ({\n type: \"FunctionCall\",\n methodName,\n args,\n argsBase64,\n gas,\n deposit,\n }),\n\n transfer: (yoctoAmount: string) => ({\n type: \"Transfer\",\n deposit: yoctoAmount,\n }),\n\n stakeNEAR: ({amount, publicKey}: { amount: string; publicKey: string }) => ({\n type: \"Stake\",\n stake: amount,\n publicKey,\n }),\n\n addFullAccessKey: ({publicKey}: { publicKey: string }) => ({\n type: \"AddKey\",\n publicKey: publicKey,\n accessKey: {permission: \"FullAccess\"},\n }),\n\n addLimitedAccessKey: ({\n publicKey,\n allowance,\n accountId,\n methodNames,\n }: {\n publicKey: string;\n allowance: string;\n accountId: string;\n methodNames: string[];\n }) => ({\n type: \"AddKey\",\n publicKey: publicKey,\n accessKey: {\n permission: \"FunctionCall\",\n allowance,\n receiverId: accountId,\n methodNames,\n },\n }),\n\n deleteKey: ({publicKey}: { publicKey: string }) => ({\n type: \"DeleteKey\",\n publicKey,\n }),\n\n deleteAccount: ({beneficiaryId}: { beneficiaryId: string }) => ({\n type: \"DeleteAccount\",\n beneficiaryId,\n }),\n\n createAccount: () => ({\n type: \"CreateAccount\",\n }),\n\n deployContract: ({codeBase64}: { codeBase64: string }) => ({\n type: \"DeployContract\",\n codeBase64,\n }),\n};\n"],"mappings":"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","names":["config","publicKey","accountId","actions"]}
package/dist/esm/state.js CHANGED
@@ -1,5 +1,5 @@
1
- /* ⋈ 🏃🏻💨 FastNEAR API - ESM (@fastnear/api version 0.7.0) */
2
- /* https://www.npmjs.com/package/@fastnear/api/v/0.7.0 */
1
+ /* ⋈ 🏃🏻💨 FastNEAR API - ESM (@fastnear/api version 0.8.0) */
2
+ /* https://www.npmjs.com/package/@fastnear/api/v/0.8.0 */
3
3
  var __defProp = Object.defineProperty;
4
4
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
5
  import {
@@ -8,7 +8,7 @@ import {
8
8
  publicKeyFromPrivate
9
9
  } from "@fastnear/utils";
10
10
  import { WalletAdapter } from "@fastnear/wallet-adapter";
11
- const WIDGET_URL = "https://wallet-adapter.fastnear.com";
11
+ const WIDGET_URL = "https://js.cdn.fastnear.com";
12
12
  const DEFAULT_NETWORK_ID = "mainnet";
13
13
  const NETWORKS = {
14
14
  testnet: {
@@ -27,7 +27,7 @@ let _state = lsGet("state") || {};
27
27
  const onAdapterStateUpdate = /* @__PURE__ */ __name((state) => {
28
28
  console.log("Adapter state update:", state);
29
29
  const { accountId, lastWalletId, privateKey } = state;
30
- updateState({
30
+ update({
31
31
  accountId: accountId || void 0,
32
32
  lastWalletId: lastWalletId || void 0,
33
33
  ...privateKey ? { privateKey } : {}
@@ -54,15 +54,59 @@ try {
54
54
  lsSet("nonce", null);
55
55
  }
56
56
  let _txHistory = lsGet("txHistory") || {};
57
- const _eventListeners = {
58
- account: /* @__PURE__ */ new Set(),
59
- tx: /* @__PURE__ */ new Set()
60
- };
61
57
  const _unbroadcastedEvents = {
62
58
  account: [],
63
59
  tx: []
64
60
  };
65
- const updateState = /* @__PURE__ */ __name((newState) => {
61
+ const events = {
62
+ _eventListeners: {
63
+ account: /* @__PURE__ */ new Set(),
64
+ tx: /* @__PURE__ */ new Set()
65
+ },
66
+ notifyAccountListeners: /* @__PURE__ */ __name((accountId) => {
67
+ if (events._eventListeners.account.size === 0) {
68
+ _unbroadcastedEvents.account.push(accountId);
69
+ return;
70
+ }
71
+ events._eventListeners.account.forEach((callback) => {
72
+ try {
73
+ callback(accountId);
74
+ } catch (e) {
75
+ console.error(e);
76
+ }
77
+ });
78
+ }, "notifyAccountListeners"),
79
+ notifyTxListeners: /* @__PURE__ */ __name((tx) => {
80
+ if (events._eventListeners.tx.size === 0) {
81
+ _unbroadcastedEvents.tx.push(tx);
82
+ return;
83
+ }
84
+ events._eventListeners.tx.forEach((callback) => {
85
+ try {
86
+ callback(tx);
87
+ } catch (e) {
88
+ console.error(e);
89
+ }
90
+ });
91
+ }, "notifyTxListeners"),
92
+ onAccount: /* @__PURE__ */ __name((callback) => {
93
+ events._eventListeners.account.add(callback);
94
+ if (_unbroadcastedEvents.account.length > 0) {
95
+ const accountEvent = _unbroadcastedEvents.account;
96
+ _unbroadcastedEvents.account = [];
97
+ accountEvent.forEach(events.notifyAccountListeners);
98
+ }
99
+ }, "onAccount"),
100
+ onTx: /* @__PURE__ */ __name((callback) => {
101
+ events._eventListeners.tx.add(callback);
102
+ if (_unbroadcastedEvents.tx.length > 0) {
103
+ const txEvent = _unbroadcastedEvents.tx;
104
+ _unbroadcastedEvents.tx = [];
105
+ txEvent.forEach(events.notifyTxListeners);
106
+ }
107
+ }, "onTx")
108
+ };
109
+ const update = /* @__PURE__ */ __name((newState) => {
66
110
  const oldState = _state;
67
111
  _state = { ..._state, ...newState };
68
112
  lsSet("state", {
@@ -76,12 +120,12 @@ const updateState = /* @__PURE__ */ __name((newState) => {
76
120
  lsSet("nonce", null);
77
121
  }
78
122
  if (newState.accountId !== oldState.accountId) {
79
- notifyAccountListeners(newState.accountId);
123
+ events.notifyAccountListeners(newState.accountId);
80
124
  }
81
125
  if (newState.hasOwnProperty("lastWalletId") && newState.lastWalletId !== oldState.lastWalletId || newState.hasOwnProperty("accountId") && newState.accountId !== oldState.accountId || newState.hasOwnProperty("privateKey") && newState.privateKey !== oldState.privateKey) {
82
126
  _adapter.setState(getWalletAdapterState());
83
127
  }
84
- }, "updateState");
128
+ }, "update");
85
129
  const updateTxHistory = /* @__PURE__ */ __name((txStatus) => {
86
130
  const txId = txStatus.txId;
87
131
  _txHistory[txId] = {
@@ -90,50 +134,8 @@ const updateTxHistory = /* @__PURE__ */ __name((txStatus) => {
90
134
  updateTimestamp: Date.now()
91
135
  };
92
136
  lsSet("txHistory", _txHistory);
93
- notifyTxListeners(_txHistory[txId]);
137
+ events.notifyTxListeners(_txHistory[txId]);
94
138
  }, "updateTxHistory");
95
- const notifyAccountListeners = /* @__PURE__ */ __name((accountId) => {
96
- if (_eventListeners.account.size === 0) {
97
- _unbroadcastedEvents.account.push(accountId);
98
- return;
99
- }
100
- _eventListeners.account.forEach((callback) => {
101
- try {
102
- callback(accountId);
103
- } catch (e) {
104
- console.error(e);
105
- }
106
- });
107
- }, "notifyAccountListeners");
108
- const notifyTxListeners = /* @__PURE__ */ __name((tx) => {
109
- if (_eventListeners.tx.size === 0) {
110
- _unbroadcastedEvents.tx.push(tx);
111
- return;
112
- }
113
- _eventListeners.tx.forEach((callback) => {
114
- try {
115
- callback(tx);
116
- } catch (e) {
117
- console.error(e);
118
- }
119
- });
120
- }, "notifyTxListeners");
121
- const onAccount = /* @__PURE__ */ __name((callback) => {
122
- _eventListeners.account.add(callback);
123
- if (_unbroadcastedEvents.account.length > 0) {
124
- const events = _unbroadcastedEvents.account;
125
- _unbroadcastedEvents.account = [];
126
- events.forEach(notifyAccountListeners);
127
- }
128
- }, "onAccount");
129
- const onTx = /* @__PURE__ */ __name((callback) => {
130
- _eventListeners.tx.add(callback);
131
- if (_unbroadcastedEvents.tx.length > 0) {
132
- const events = _unbroadcastedEvents.tx;
133
- _unbroadcastedEvents.tx = [];
134
- events.forEach(notifyTxListeners);
135
- }
136
- }, "onTx");
137
139
  const getConfig = /* @__PURE__ */ __name(() => {
138
140
  return _config;
139
141
  }, "getConfig");
@@ -154,21 +156,17 @@ export {
154
156
  WIDGET_URL,
155
157
  _adapter,
156
158
  _config,
157
- _eventListeners,
158
159
  _state,
159
160
  _txHistory,
160
161
  _unbroadcastedEvents,
162
+ events,
161
163
  getConfig,
162
164
  getTxHistory,
163
165
  getWalletAdapterState,
164
- notifyAccountListeners,
165
- notifyTxListeners,
166
- onAccount,
167
166
  onAdapterStateUpdate,
168
- onTx,
169
167
  resetTxHistory,
170
168
  setConfig,
171
- updateState,
169
+ update,
172
170
  updateTxHistory
173
171
  };
174
172
  //# sourceMappingURL=state.js.map