@fastnear/api 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.
@@ -0,0 +1,174 @@
1
+ /* ⋈ 🏃🏻💨 FastNEAR API - ESM (@fastnear/api version 0.6.3) */
2
+ /* https://www.npmjs.com/package/@fastnear/api/v/0.6.3 */
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+ import {
6
+ lsSet,
7
+ lsGet,
8
+ publicKeyFromPrivate
9
+ } from "@fastnear/utils";
10
+ import { WalletAdapter } from "@fastnear/wallet-adapter";
11
+ const WIDGET_URL = "https://wallet-adapter.fastnear.com";
12
+ const DEFAULT_NETWORK_ID = "mainnet";
13
+ const NETWORKS = {
14
+ testnet: {
15
+ networkId: "testnet",
16
+ nodeUrl: "https://rpc.testnet.fastnear.com/"
17
+ },
18
+ mainnet: {
19
+ networkId: "mainnet",
20
+ nodeUrl: "https://rpc.mainnet.fastnear.com/"
21
+ }
22
+ };
23
+ let _config = lsGet("config") || {
24
+ ...NETWORKS[DEFAULT_NETWORK_ID]
25
+ };
26
+ let _state = lsGet("state") || {};
27
+ const onAdapterStateUpdate = /* @__PURE__ */ __name((state) => {
28
+ console.log("Adapter state update:", state);
29
+ const { accountId, lastWalletId, privateKey } = state;
30
+ updateState({
31
+ accountId: accountId || void 0,
32
+ lastWalletId: lastWalletId || void 0,
33
+ ...privateKey ? { privateKey } : {}
34
+ });
35
+ }, "onAdapterStateUpdate");
36
+ const getWalletAdapterState = /* @__PURE__ */ __name(() => {
37
+ return {
38
+ publicKey: _state.publicKey,
39
+ accountId: _state.accountId,
40
+ lastWalletId: _state.lastWalletId,
41
+ networkId: DEFAULT_NETWORK_ID
42
+ };
43
+ }, "getWalletAdapterState");
44
+ let _adapter = new WalletAdapter({
45
+ onStateUpdate: onAdapterStateUpdate,
46
+ lastState: getWalletAdapterState(),
47
+ widgetUrl: WIDGET_URL
48
+ });
49
+ try {
50
+ _state.publicKey = _state.privateKey ? publicKeyFromPrivate(_state.privateKey) : null;
51
+ } catch (e) {
52
+ console.error("Error parsing private key:", e);
53
+ _state.privateKey = null;
54
+ lsSet("nonce", null);
55
+ }
56
+ let _txHistory = lsGet("txHistory") || {};
57
+ const _eventListeners = {
58
+ account: /* @__PURE__ */ new Set(),
59
+ tx: /* @__PURE__ */ new Set()
60
+ };
61
+ const _unbroadcastedEvents = {
62
+ account: [],
63
+ tx: []
64
+ };
65
+ const updateState = /* @__PURE__ */ __name((newState) => {
66
+ const oldState = _state;
67
+ _state = { ..._state, ...newState };
68
+ lsSet("state", {
69
+ accountId: _state.accountId,
70
+ privateKey: _state.privateKey,
71
+ lastWalletId: _state.lastWalletId,
72
+ accessKeyContractId: _state.accessKeyContractId
73
+ });
74
+ if (newState.hasOwnProperty("privateKey") && newState.privateKey !== oldState.privateKey) {
75
+ _state.publicKey = newState.privateKey ? publicKeyFromPrivate(newState.privateKey) : null;
76
+ lsSet("nonce", null);
77
+ }
78
+ if (newState.accountId !== oldState.accountId) {
79
+ notifyAccountListeners(newState.accountId);
80
+ }
81
+ if (newState.hasOwnProperty("lastWalletId") && newState.lastWalletId !== oldState.lastWalletId || newState.hasOwnProperty("accountId") && newState.accountId !== oldState.accountId || newState.hasOwnProperty("privateKey") && newState.privateKey !== oldState.privateKey) {
82
+ _adapter.setState(getWalletAdapterState());
83
+ }
84
+ }, "updateState");
85
+ const updateTxHistory = /* @__PURE__ */ __name((txStatus) => {
86
+ const txId = txStatus.txId;
87
+ _txHistory[txId] = {
88
+ ..._txHistory[txId] || {},
89
+ ...txStatus,
90
+ updateTimestamp: Date.now()
91
+ };
92
+ lsSet("txHistory", _txHistory);
93
+ notifyTxListeners(_txHistory[txId]);
94
+ }, "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
+ const getConfig = /* @__PURE__ */ __name(() => {
138
+ return _config;
139
+ }, "getConfig");
140
+ const getTxHistory = /* @__PURE__ */ __name(() => {
141
+ return _txHistory;
142
+ }, "getTxHistory");
143
+ const setConfig = /* @__PURE__ */ __name((newConf) => {
144
+ _config = { ...NETWORKS[newConf.networkId], ...newConf };
145
+ lsSet("config", _config);
146
+ }, "setConfig");
147
+ const resetTxHistory = /* @__PURE__ */ __name(() => {
148
+ _txHistory = {};
149
+ lsSet("txHistory", _txHistory);
150
+ }, "resetTxHistory");
151
+ export {
152
+ DEFAULT_NETWORK_ID,
153
+ NETWORKS,
154
+ WIDGET_URL,
155
+ _adapter,
156
+ _config,
157
+ _eventListeners,
158
+ _state,
159
+ _txHistory,
160
+ _unbroadcastedEvents,
161
+ getConfig,
162
+ getTxHistory,
163
+ getWalletAdapterState,
164
+ notifyAccountListeners,
165
+ notifyTxListeners,
166
+ onAccount,
167
+ onAdapterStateUpdate,
168
+ onTx,
169
+ resetTxHistory,
170
+ setConfig,
171
+ updateState,
172
+ updateTxHistory
173
+ };
174
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/state.ts"],"sourcesContent":["import {\n lsSet,\n lsGet,\n publicKeyFromPrivate,\n} from \"@fastnear/utils\";\nimport {WalletAdapter} from \"@fastnear/wallet-adapter\";\n\nexport const WIDGET_URL = \"https://wallet-adapter.fastnear.com\";\n\nexport const DEFAULT_NETWORK_ID = \"mainnet\";\nexport const NETWORKS = {\n testnet: {\n networkId: \"testnet\",\n nodeUrl: \"https://rpc.testnet.fastnear.com/\",\n },\n mainnet: {\n networkId: \"mainnet\",\n nodeUrl: \"https://rpc.mainnet.fastnear.com/\",\n },\n};\n\nexport interface NetworkConfig {\n networkId: string;\n nodeUrl?: string;\n walletUrl?: string;\n helperUrl?: string;\n explorerUrl?: string;\n\n [key: string]: any;\n}\n\nexport interface AppState {\n accountId?: string | null;\n privateKey?: string | null;\n lastWalletId?: string | null;\n publicKey?: string | null;\n accessKeyContractId?: string | null;\n\n [key: string]: any;\n}\n\nexport interface TxStatus {\n txId: string;\n updateTimestamp?: number;\n\n [key: string]: any;\n}\n\nexport type TxHistory = Record<string, TxStatus>;\n\nexport interface EventListeners {\n account: Set<(accountId: string) => void>;\n tx: Set<(tx: TxStatus) => void>;\n}\n\nexport interface UnbroadcastedEvents {\n account: string[];\n tx: TxStatus[];\n}\n\nexport interface WalletAdapterState {\n publicKey?: string | null;\n privateKey?: string | null;\n accountId?: string | null;\n lastWalletId?: string | null;\n networkId: string;\n}\n\n\n// Load config from localStorage or default to the network's config\nexport let _config: NetworkConfig = lsGet(\"config\") || {\n ...NETWORKS[DEFAULT_NETWORK_ID]\n};\n\n// Load application state from localStorage\nexport let _state: AppState = lsGet(\"state\") || {};\n\n// Triggered by the wallet adapter\nexport const onAdapterStateUpdate = (state: WalletAdapterState) => {\n console.log(\"Adapter state update:\", state);\n const { accountId, lastWalletId, privateKey } = state;\n updateState({\n accountId: accountId || undefined,\n lastWalletId: lastWalletId || undefined,\n ...(privateKey ? { privateKey } : {}),\n });\n}\n\nexport const getWalletAdapterState = (): WalletAdapterState => {\n return {\n publicKey: _state.publicKey,\n accountId: _state.accountId,\n lastWalletId: _state.lastWalletId,\n networkId: DEFAULT_NETWORK_ID,\n };\n}\n\n// We can create an adapter instance here\nexport let _adapter = new WalletAdapter({\n onStateUpdate: onAdapterStateUpdate,\n lastState: getWalletAdapterState(),\n widgetUrl: WIDGET_URL,\n});\n\n// Attempt to set publicKey if we have a privateKey\ntry {\n _state.publicKey = _state.privateKey\n ? publicKeyFromPrivate(_state.privateKey)\n : null;\n} catch (e) {\n console.error(\"Error parsing private key:\", e);\n _state.privateKey = null;\n lsSet(\"nonce\", null);\n}\n\n// Transaction history\nexport let _txHistory: TxHistory = lsGet(\"txHistory\") || {};\n\n// Event listeners\nexport const _eventListeners: EventListeners = {\n account: new Set(),\n tx: new Set(),\n};\n\nexport const _unbroadcastedEvents: UnbroadcastedEvents = {\n account: [],\n tx: [],\n};\n\n// Mutators\n// @todo: in favor of limiting when out of alpha\n// but haven't given it enough thought ~ mike\nexport const updateState = (newState: Partial<AppState>) => {\n const oldState = _state;\n _state = {..._state, ...newState};\n\n lsSet(\"state\", {\n accountId: _state.accountId,\n privateKey: _state.privateKey,\n lastWalletId: _state.lastWalletId,\n accessKeyContractId: _state.accessKeyContractId,\n });\n\n if (\n newState.hasOwnProperty(\"privateKey\") &&\n newState.privateKey !== oldState.privateKey\n ) {\n _state.publicKey = newState.privateKey\n ? publicKeyFromPrivate(newState.privateKey as string)\n : null;\n lsSet(\"nonce\", null);\n }\n\n if (newState.accountId !== oldState.accountId) {\n notifyAccountListeners(newState.accountId as string);\n }\n\n if (\n (newState.hasOwnProperty(\"lastWalletId\") &&\n newState.lastWalletId !== oldState.lastWalletId) ||\n (newState.hasOwnProperty(\"accountId\") &&\n newState.accountId !== oldState.accountId) ||\n (newState.hasOwnProperty(\"privateKey\") &&\n newState.privateKey !== oldState.privateKey)\n ) {\n _adapter.setState(getWalletAdapterState());\n }\n}\n\nexport const updateTxHistory = (txStatus: TxStatus) => {\n const txId = txStatus.txId;\n _txHistory[txId] = {\n ...(_txHistory[txId] || {}),\n ...txStatus,\n updateTimestamp: Date.now(),\n };\n lsSet(\"txHistory\", _txHistory);\n notifyTxListeners(_txHistory[txId]);\n}\n\n\n\n// Event Notifiers\nexport const notifyAccountListeners = (accountId: string) => {\n if (_eventListeners.account.size === 0) {\n _unbroadcastedEvents.account.push(accountId);\n return;\n }\n _eventListeners.account.forEach((callback) => {\n try {\n callback(accountId);\n } catch (e) {\n console.error(e);\n }\n });\n}\n\nexport const notifyTxListeners = (tx: TxStatus) => {\n if (_eventListeners.tx.size === 0) {\n _unbroadcastedEvents.tx.push(tx);\n return;\n }\n _eventListeners.tx.forEach((callback) => {\n try {\n callback(tx);\n } catch (e) {\n console.error(e);\n }\n });\n}\n\n// Event Handlers\nexport const onAccount = (callback: (accountId: string) => void) => {\n _eventListeners.account.add(callback);\n if (_unbroadcastedEvents.account.length > 0) {\n const events = _unbroadcastedEvents.account;\n _unbroadcastedEvents.account = [];\n events.forEach(notifyAccountListeners);\n }\n};\n\nexport const onTx = (callback: (tx: TxStatus) => void): void => {\n _eventListeners.tx.add(callback);\n if (_unbroadcastedEvents.tx.length > 0) {\n const events = _unbroadcastedEvents.tx;\n _unbroadcastedEvents.tx = [];\n events.forEach(notifyTxListeners);\n }\n};\n\nexport const getConfig = (): NetworkConfig => {\n return _config;\n}\n\nexport const getTxHistory = (): TxHistory => {\n return _txHistory;\n}\n\n// Exposed \"write\" functions\nexport const setConfig = (newConf: NetworkConfig): void => {\n _config = { ...NETWORKS[newConf.networkId], ...newConf };\n lsSet(\"config\", _config);\n}\n\nexport const resetTxHistory = (): void => {\n _txHistory = {};\n lsSet(\"txHistory\", _txHistory);\n}\n"],"mappings":"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","names":[]}