@shadow-corp/nearconnect 1.0.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/README.md +546 -0
- package/build/InjectedWallet.d.ts +22 -0
- package/build/InjectedWallet.js +58 -0
- package/build/InjectedWallet.js.map +1 -0
- package/build/NearConnector.d.ts +151 -0
- package/build/NearConnector.js +536 -0
- package/build/NearConnector.js.map +1 -0
- package/build/ParentFrameWallet.d.ts +22 -0
- package/build/ParentFrameWallet.js +66 -0
- package/build/ParentFrameWallet.js.map +1 -0
- package/build/SandboxedWallet/code.d.ts +7 -0
- package/build/SandboxedWallet/code.js +324 -0
- package/build/SandboxedWallet/code.js.map +1 -0
- package/build/SandboxedWallet/executor.d.ts +23 -0
- package/build/SandboxedWallet/executor.js +338 -0
- package/build/SandboxedWallet/executor.js.map +1 -0
- package/build/SandboxedWallet/iframe.d.ts +18 -0
- package/build/SandboxedWallet/iframe.js +78 -0
- package/build/SandboxedWallet/iframe.js.map +1 -0
- package/build/SandboxedWallet/index.d.ts +24 -0
- package/build/SandboxedWallet/index.js +54 -0
- package/build/SandboxedWallet/index.js.map +1 -0
- package/build/actions/index.d.ts +3 -0
- package/build/actions/index.js +105 -0
- package/build/actions/index.js.map +1 -0
- package/build/actions/types.d.ts +76 -0
- package/build/actions/types.js +3 -0
- package/build/actions/types.js.map +1 -0
- package/build/connection/health.d.ts +213 -0
- package/build/connection/health.js +391 -0
- package/build/connection/health.js.map +1 -0
- package/build/connection/index.d.ts +4 -0
- package/build/connection/index.js +48 -0
- package/build/connection/index.js.map +1 -0
- package/build/connection/reconnect.d.ts +261 -0
- package/build/connection/reconnect.js +454 -0
- package/build/connection/reconnect.js.map +1 -0
- package/build/connection/retry.d.ts +187 -0
- package/build/connection/retry.js +427 -0
- package/build/connection/retry.js.map +1 -0
- package/build/connection/state.d.ts +222 -0
- package/build/connection/state.js +431 -0
- package/build/connection/state.js.map +1 -0
- package/build/errors.d.ts +177 -0
- package/build/errors.js +546 -0
- package/build/errors.js.map +1 -0
- package/build/hardware/errors.d.ts +36 -0
- package/build/hardware/errors.js +127 -0
- package/build/hardware/errors.js.map +1 -0
- package/build/hardware/index.d.ts +7 -0
- package/build/hardware/index.js +39 -0
- package/build/hardware/index.js.map +1 -0
- package/build/hardware/near-app.d.ts +95 -0
- package/build/hardware/near-app.js +291 -0
- package/build/hardware/near-app.js.map +1 -0
- package/build/hardware/transport.d.ts +94 -0
- package/build/hardware/transport.js +267 -0
- package/build/hardware/transport.js.map +1 -0
- package/build/hardware/types.d.ts +98 -0
- package/build/hardware/types.js +72 -0
- package/build/hardware/types.js.map +1 -0
- package/build/helpers/analytics.d.ts +191 -0
- package/build/helpers/analytics.js +304 -0
- package/build/helpers/analytics.js.map +1 -0
- package/build/helpers/base58.d.ts +6 -0
- package/build/helpers/base58.js +47 -0
- package/build/helpers/base58.js.map +1 -0
- package/build/helpers/events.d.ts +42 -0
- package/build/helpers/events.js +68 -0
- package/build/helpers/events.js.map +1 -0
- package/build/helpers/html.d.ts +8 -0
- package/build/helpers/html.js +30 -0
- package/build/helpers/html.js.map +1 -0
- package/build/helpers/indexdb.d.ts +14 -0
- package/build/helpers/indexdb.js +166 -0
- package/build/helpers/indexdb.js.map +1 -0
- package/build/helpers/manifest.d.ts +147 -0
- package/build/helpers/manifest.js +329 -0
- package/build/helpers/manifest.js.map +1 -0
- package/build/helpers/queue.d.ts +11 -0
- package/build/helpers/queue.js +48 -0
- package/build/helpers/queue.js.map +1 -0
- package/build/helpers/session.d.ts +119 -0
- package/build/helpers/session.js +289 -0
- package/build/helpers/session.js.map +1 -0
- package/build/helpers/simulation.d.ts +128 -0
- package/build/helpers/simulation.js +441 -0
- package/build/helpers/simulation.js.map +1 -0
- package/build/helpers/storage.d.ts +58 -0
- package/build/helpers/storage.js +190 -0
- package/build/helpers/storage.js.map +1 -0
- package/build/helpers/trust.d.ts +157 -0
- package/build/helpers/trust.js +340 -0
- package/build/helpers/trust.js.map +1 -0
- package/build/helpers/url.d.ts +1 -0
- package/build/helpers/url.js +13 -0
- package/build/helpers/url.js.map +1 -0
- package/build/helpers/uuid.d.ts +1 -0
- package/build/helpers/uuid.js +14 -0
- package/build/helpers/uuid.js.map +1 -0
- package/build/index.d.ts +21 -0
- package/build/index.js +167 -0
- package/build/index.js.map +1 -0
- package/build/popups/IframeWalletPopup.d.ts +16 -0
- package/build/popups/IframeWalletPopup.js +38 -0
- package/build/popups/IframeWalletPopup.js.map +1 -0
- package/build/popups/NearWalletsPopup.d.ts +25 -0
- package/build/popups/NearWalletsPopup.js +153 -0
- package/build/popups/NearWalletsPopup.js.map +1 -0
- package/build/popups/Popup.d.ts +22 -0
- package/build/popups/Popup.js +94 -0
- package/build/popups/Popup.js.map +1 -0
- package/build/popups/styles.d.ts +1 -0
- package/build/popups/styles.js +257 -0
- package/build/popups/styles.js.map +1 -0
- package/build/security/audit-log.d.ts +123 -0
- package/build/security/audit-log.js +268 -0
- package/build/security/audit-log.js.map +1 -0
- package/build/security/csp.d.ts +68 -0
- package/build/security/csp.js +328 -0
- package/build/security/csp.js.map +1 -0
- package/build/security/index.d.ts +10 -0
- package/build/security/index.js +42 -0
- package/build/security/index.js.map +1 -0
- package/build/security/origin-guard.d.ts +90 -0
- package/build/security/origin-guard.js +244 -0
- package/build/security/origin-guard.js.map +1 -0
- package/build/security/rate-limiter.d.ts +84 -0
- package/build/security/rate-limiter.js +212 -0
- package/build/security/rate-limiter.js.map +1 -0
- package/build/security/secure-storage.d.ts +77 -0
- package/build/security/secure-storage.js +242 -0
- package/build/security/secure-storage.js.map +1 -0
- package/build/security/transaction-guard.d.ts +71 -0
- package/build/security/transaction-guard.js +239 -0
- package/build/security/transaction-guard.js.map +1 -0
- package/build/types.d.ts +508 -0
- package/build/types.js +3 -0
- package/build/types.js.map +1 -0
- package/build/ui/AccountSwitcherModal.d.ts +53 -0
- package/build/ui/AccountSwitcherModal.js +239 -0
- package/build/ui/AccountSwitcherModal.js.map +1 -0
- package/build/ui/Modal.d.ts +84 -0
- package/build/ui/Modal.js +278 -0
- package/build/ui/Modal.js.map +1 -0
- package/build/ui/TransactionModal.d.ts +84 -0
- package/build/ui/TransactionModal.js +406 -0
- package/build/ui/TransactionModal.js.map +1 -0
- package/build/ui/WalletSelectorModal.d.ts +97 -0
- package/build/ui/WalletSelectorModal.js +481 -0
- package/build/ui/WalletSelectorModal.js.map +1 -0
- package/build/ui/icons.d.ts +19 -0
- package/build/ui/icons.js +65 -0
- package/build/ui/icons.js.map +1 -0
- package/build/ui/index.d.ts +10 -0
- package/build/ui/index.js +31 -0
- package/build/ui/index.js.map +1 -0
- package/build/ui/styles.d.ts +5 -0
- package/build/ui/styles.js +973 -0
- package/build/ui/styles.js.map +1 -0
- package/build/ui/theme.d.ts +133 -0
- package/build/ui/theme.js +204 -0
- package/build/ui/theme.js.map +1 -0
- package/build/wallets/external/index.d.ts +4 -0
- package/build/wallets/external/index.js +9 -0
- package/build/wallets/external/index.js.map +1 -0
- package/build/wallets/external/manager.d.ts +152 -0
- package/build/wallets/external/manager.js +586 -0
- package/build/wallets/external/manager.js.map +1 -0
- package/build/wallets/privileged/index.d.ts +5 -0
- package/build/wallets/privileged/index.js +12 -0
- package/build/wallets/privileged/index.js.map +1 -0
- package/build/wallets/privileged/ledger.d.ts +132 -0
- package/build/wallets/privileged/ledger.js +563 -0
- package/build/wallets/privileged/ledger.js.map +1 -0
- package/build/wallets/privileged/manager.d.ts +54 -0
- package/build/wallets/privileged/manager.js +174 -0
- package/build/wallets/privileged/manager.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { EventMap, Account, Network } from "../types";
|
|
2
|
+
import { WalletError } from "../errors";
|
|
3
|
+
/**
|
|
4
|
+
* Analytics event types that can be tracked
|
|
5
|
+
*/
|
|
6
|
+
export type AnalyticsEventType = "wallet_connect_started" | "wallet_connect_success" | "wallet_connect_failed" | "wallet_disconnect" | "transaction_started" | "transaction_success" | "transaction_failed" | "transaction_rejected" | "message_sign_started" | "message_sign_success" | "message_sign_failed" | "account_switched" | "account_added" | "account_removed" | "network_switched" | "session_restored" | "session_expired" | "modal_opened" | "modal_closed" | "error";
|
|
7
|
+
/**
|
|
8
|
+
* Base analytics event payload
|
|
9
|
+
*/
|
|
10
|
+
export interface AnalyticsEvent {
|
|
11
|
+
type: AnalyticsEventType;
|
|
12
|
+
timestamp: number;
|
|
13
|
+
sessionId?: string;
|
|
14
|
+
network?: Network;
|
|
15
|
+
walletId?: string;
|
|
16
|
+
walletName?: string;
|
|
17
|
+
accountId?: string;
|
|
18
|
+
metadata?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Wallet connect event
|
|
22
|
+
*/
|
|
23
|
+
export interface WalletConnectEvent extends AnalyticsEvent {
|
|
24
|
+
type: "wallet_connect_started" | "wallet_connect_success" | "wallet_connect_failed";
|
|
25
|
+
accounts?: Account[];
|
|
26
|
+
duration?: number;
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Transaction event
|
|
31
|
+
*/
|
|
32
|
+
export interface TransactionEvent extends AnalyticsEvent {
|
|
33
|
+
type: "transaction_started" | "transaction_success" | "transaction_failed" | "transaction_rejected";
|
|
34
|
+
receiverId?: string;
|
|
35
|
+
methodName?: string;
|
|
36
|
+
txHash?: string;
|
|
37
|
+
gasUsed?: string;
|
|
38
|
+
deposit?: string;
|
|
39
|
+
duration?: number;
|
|
40
|
+
error?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Analytics adapter interface - implement to send events to your analytics service
|
|
44
|
+
*/
|
|
45
|
+
export interface AnalyticsAdapter {
|
|
46
|
+
/**
|
|
47
|
+
* Track an analytics event
|
|
48
|
+
*/
|
|
49
|
+
track(event: AnalyticsEvent): void | Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Identify a user (optional)
|
|
52
|
+
*/
|
|
53
|
+
identify?(userId: string, traits?: Record<string, unknown>): void | Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Flush any pending events (optional)
|
|
56
|
+
*/
|
|
57
|
+
flush?(): void | Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Console adapter for debugging
|
|
61
|
+
*/
|
|
62
|
+
export declare class ConsoleAnalyticsAdapter implements AnalyticsAdapter {
|
|
63
|
+
private prefix;
|
|
64
|
+
constructor(prefix?: string);
|
|
65
|
+
track(event: AnalyticsEvent): void;
|
|
66
|
+
identify(userId: string, traits?: Record<string, unknown>): void;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* No-op adapter (default)
|
|
70
|
+
*/
|
|
71
|
+
export declare class NoopAnalyticsAdapter implements AnalyticsAdapter {
|
|
72
|
+
track(): void;
|
|
73
|
+
identify(): void;
|
|
74
|
+
flush(): void;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Batching adapter that collects events and sends them in batches
|
|
78
|
+
*/
|
|
79
|
+
export declare class BatchingAnalyticsAdapter implements AnalyticsAdapter {
|
|
80
|
+
private adapter;
|
|
81
|
+
private queue;
|
|
82
|
+
private batchSize;
|
|
83
|
+
private flushInterval;
|
|
84
|
+
private timer;
|
|
85
|
+
constructor(adapter: AnalyticsAdapter, options?: {
|
|
86
|
+
batchSize?: number;
|
|
87
|
+
flushInterval?: number;
|
|
88
|
+
});
|
|
89
|
+
track(event: AnalyticsEvent): void;
|
|
90
|
+
flush(): Promise<void>;
|
|
91
|
+
destroy(): void;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Analytics options
|
|
95
|
+
*/
|
|
96
|
+
export interface AnalyticsOptions {
|
|
97
|
+
adapter?: AnalyticsAdapter;
|
|
98
|
+
sessionId?: string;
|
|
99
|
+
defaultMetadata?: Record<string, unknown>;
|
|
100
|
+
enabled?: boolean;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Analytics manager for tracking wallet events
|
|
104
|
+
*/
|
|
105
|
+
export declare class Analytics {
|
|
106
|
+
private adapter;
|
|
107
|
+
private sessionId;
|
|
108
|
+
private defaultMetadata;
|
|
109
|
+
private enabled;
|
|
110
|
+
private timers;
|
|
111
|
+
constructor(options?: AnalyticsOptions);
|
|
112
|
+
private generateSessionId;
|
|
113
|
+
/**
|
|
114
|
+
* Track a generic event
|
|
115
|
+
*/
|
|
116
|
+
track(type: AnalyticsEventType, data?: Partial<Omit<AnalyticsEvent, "type" | "timestamp" | "sessionId">>): void;
|
|
117
|
+
/**
|
|
118
|
+
* Start a timer for duration tracking
|
|
119
|
+
*/
|
|
120
|
+
startTimer(key: string): void;
|
|
121
|
+
/**
|
|
122
|
+
* Get elapsed time and clear timer
|
|
123
|
+
*/
|
|
124
|
+
endTimer(key: string): number | undefined;
|
|
125
|
+
/**
|
|
126
|
+
* Track wallet connection start
|
|
127
|
+
*/
|
|
128
|
+
trackConnectStarted(walletId: string, walletName?: string, network?: Network): void;
|
|
129
|
+
/**
|
|
130
|
+
* Track successful wallet connection
|
|
131
|
+
*/
|
|
132
|
+
trackConnectSuccess(walletId: string, accounts: Account[], walletName?: string, network?: Network): void;
|
|
133
|
+
/**
|
|
134
|
+
* Track failed wallet connection
|
|
135
|
+
*/
|
|
136
|
+
trackConnectFailed(walletId: string, error: Error | WalletError, walletName?: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* Track wallet disconnect
|
|
139
|
+
*/
|
|
140
|
+
trackDisconnect(walletId?: string, accountId?: string): void;
|
|
141
|
+
/**
|
|
142
|
+
* Track transaction start
|
|
143
|
+
*/
|
|
144
|
+
trackTransactionStarted(walletId: string, receiverId: string, methodName?: string, deposit?: string): void;
|
|
145
|
+
/**
|
|
146
|
+
* Track successful transaction
|
|
147
|
+
*/
|
|
148
|
+
trackTransactionSuccess(walletId: string, receiverId: string, txHash?: string, methodName?: string): void;
|
|
149
|
+
/**
|
|
150
|
+
* Track failed transaction
|
|
151
|
+
*/
|
|
152
|
+
trackTransactionFailed(walletId: string, receiverId: string, error: Error | WalletError, methodName?: string): void;
|
|
153
|
+
/**
|
|
154
|
+
* Track rejected transaction
|
|
155
|
+
*/
|
|
156
|
+
trackTransactionRejected(walletId: string, receiverId: string, methodName?: string): void;
|
|
157
|
+
/**
|
|
158
|
+
* Track account switch
|
|
159
|
+
*/
|
|
160
|
+
trackAccountSwitched(accountId: string, previousAccountId?: string | null, walletId?: string): void;
|
|
161
|
+
/**
|
|
162
|
+
* Track network switch
|
|
163
|
+
*/
|
|
164
|
+
trackNetworkSwitched(network: Network, previousNetwork?: Network): void;
|
|
165
|
+
/**
|
|
166
|
+
* Track error
|
|
167
|
+
*/
|
|
168
|
+
trackError(error: Error | WalletError, context?: string): void;
|
|
169
|
+
/**
|
|
170
|
+
* Identify user
|
|
171
|
+
*/
|
|
172
|
+
identify(accountId: string, traits?: Record<string, unknown>): void;
|
|
173
|
+
/**
|
|
174
|
+
* Flush pending events
|
|
175
|
+
*/
|
|
176
|
+
flush(): void;
|
|
177
|
+
/**
|
|
178
|
+
* Set enabled state
|
|
179
|
+
*/
|
|
180
|
+
setEnabled(enabled: boolean): void;
|
|
181
|
+
/**
|
|
182
|
+
* Update default metadata
|
|
183
|
+
*/
|
|
184
|
+
setDefaultMetadata(metadata: Record<string, unknown>): void;
|
|
185
|
+
/**
|
|
186
|
+
* Create event handlers for NearConnector events
|
|
187
|
+
*/
|
|
188
|
+
createEventHandlers(): Partial<{
|
|
189
|
+
[K in keyof EventMap]: (payload: EventMap[K]) => void;
|
|
190
|
+
}>;
|
|
191
|
+
}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Analytics = exports.BatchingAnalyticsAdapter = exports.NoopAnalyticsAdapter = exports.ConsoleAnalyticsAdapter = void 0;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
/**
|
|
6
|
+
* Console adapter for debugging
|
|
7
|
+
*/
|
|
8
|
+
class ConsoleAnalyticsAdapter {
|
|
9
|
+
prefix;
|
|
10
|
+
constructor(prefix = "[Analytics]") {
|
|
11
|
+
this.prefix = prefix;
|
|
12
|
+
}
|
|
13
|
+
track(event) {
|
|
14
|
+
console.log(this.prefix, event.type, event);
|
|
15
|
+
}
|
|
16
|
+
identify(userId, traits) {
|
|
17
|
+
console.log(this.prefix, "identify", userId, traits);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.ConsoleAnalyticsAdapter = ConsoleAnalyticsAdapter;
|
|
21
|
+
/**
|
|
22
|
+
* No-op adapter (default)
|
|
23
|
+
*/
|
|
24
|
+
class NoopAnalyticsAdapter {
|
|
25
|
+
track() { }
|
|
26
|
+
identify() { }
|
|
27
|
+
flush() { }
|
|
28
|
+
}
|
|
29
|
+
exports.NoopAnalyticsAdapter = NoopAnalyticsAdapter;
|
|
30
|
+
/**
|
|
31
|
+
* Batching adapter that collects events and sends them in batches
|
|
32
|
+
*/
|
|
33
|
+
class BatchingAnalyticsAdapter {
|
|
34
|
+
adapter;
|
|
35
|
+
queue = [];
|
|
36
|
+
batchSize;
|
|
37
|
+
flushInterval;
|
|
38
|
+
timer = null;
|
|
39
|
+
constructor(adapter, options = {}) {
|
|
40
|
+
this.adapter = adapter;
|
|
41
|
+
this.batchSize = options.batchSize ?? 10;
|
|
42
|
+
this.flushInterval = options.flushInterval ?? 5000;
|
|
43
|
+
if (typeof window !== "undefined") {
|
|
44
|
+
this.timer = setInterval(() => this.flush(), this.flushInterval);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
track(event) {
|
|
48
|
+
this.queue.push(event);
|
|
49
|
+
if (this.queue.length >= this.batchSize) {
|
|
50
|
+
this.flush();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async flush() {
|
|
54
|
+
if (this.queue.length === 0)
|
|
55
|
+
return;
|
|
56
|
+
const events = [...this.queue];
|
|
57
|
+
this.queue = [];
|
|
58
|
+
for (const event of events) {
|
|
59
|
+
await this.adapter.track(event);
|
|
60
|
+
}
|
|
61
|
+
await this.adapter.flush?.();
|
|
62
|
+
}
|
|
63
|
+
destroy() {
|
|
64
|
+
if (this.timer) {
|
|
65
|
+
clearInterval(this.timer);
|
|
66
|
+
this.timer = null;
|
|
67
|
+
}
|
|
68
|
+
this.flush();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.BatchingAnalyticsAdapter = BatchingAnalyticsAdapter;
|
|
72
|
+
/**
|
|
73
|
+
* Analytics manager for tracking wallet events
|
|
74
|
+
*/
|
|
75
|
+
class Analytics {
|
|
76
|
+
adapter;
|
|
77
|
+
sessionId;
|
|
78
|
+
defaultMetadata;
|
|
79
|
+
enabled;
|
|
80
|
+
timers = new Map();
|
|
81
|
+
constructor(options = {}) {
|
|
82
|
+
this.adapter = options.adapter ?? new NoopAnalyticsAdapter();
|
|
83
|
+
this.sessionId = options.sessionId ?? this.generateSessionId();
|
|
84
|
+
this.defaultMetadata = options.defaultMetadata ?? {};
|
|
85
|
+
this.enabled = options.enabled ?? true;
|
|
86
|
+
}
|
|
87
|
+
generateSessionId() {
|
|
88
|
+
return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Track a generic event
|
|
92
|
+
*/
|
|
93
|
+
track(type, data = {}) {
|
|
94
|
+
if (!this.enabled)
|
|
95
|
+
return;
|
|
96
|
+
const event = {
|
|
97
|
+
type,
|
|
98
|
+
timestamp: Date.now(),
|
|
99
|
+
sessionId: this.sessionId,
|
|
100
|
+
metadata: { ...this.defaultMetadata, ...data.metadata },
|
|
101
|
+
...data,
|
|
102
|
+
};
|
|
103
|
+
this.adapter.track(event);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Start a timer for duration tracking
|
|
107
|
+
*/
|
|
108
|
+
startTimer(key) {
|
|
109
|
+
this.timers.set(key, Date.now());
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get elapsed time and clear timer
|
|
113
|
+
*/
|
|
114
|
+
endTimer(key) {
|
|
115
|
+
const start = this.timers.get(key);
|
|
116
|
+
if (!start)
|
|
117
|
+
return undefined;
|
|
118
|
+
this.timers.delete(key);
|
|
119
|
+
return Date.now() - start;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Track wallet connection start
|
|
123
|
+
*/
|
|
124
|
+
trackConnectStarted(walletId, walletName, network) {
|
|
125
|
+
this.startTimer(`connect:${walletId}`);
|
|
126
|
+
this.track("wallet_connect_started", { walletId, walletName, network });
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Track successful wallet connection
|
|
130
|
+
*/
|
|
131
|
+
trackConnectSuccess(walletId, accounts, walletName, network) {
|
|
132
|
+
const duration = this.endTimer(`connect:${walletId}`);
|
|
133
|
+
this.track("wallet_connect_success", {
|
|
134
|
+
walletId,
|
|
135
|
+
walletName,
|
|
136
|
+
network,
|
|
137
|
+
accountId: accounts[0]?.accountId,
|
|
138
|
+
metadata: { accountCount: accounts.length, duration },
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Track failed wallet connection
|
|
143
|
+
*/
|
|
144
|
+
trackConnectFailed(walletId, error, walletName) {
|
|
145
|
+
const duration = this.endTimer(`connect:${walletId}`);
|
|
146
|
+
this.track("wallet_connect_failed", {
|
|
147
|
+
walletId,
|
|
148
|
+
walletName,
|
|
149
|
+
metadata: {
|
|
150
|
+
error: error.message,
|
|
151
|
+
errorCode: error instanceof errors_1.WalletError ? error.code : undefined,
|
|
152
|
+
duration,
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Track wallet disconnect
|
|
158
|
+
*/
|
|
159
|
+
trackDisconnect(walletId, accountId) {
|
|
160
|
+
this.track("wallet_disconnect", { walletId, accountId });
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Track transaction start
|
|
164
|
+
*/
|
|
165
|
+
trackTransactionStarted(walletId, receiverId, methodName, deposit) {
|
|
166
|
+
const key = `tx:${walletId}:${receiverId}:${methodName}`;
|
|
167
|
+
this.startTimer(key);
|
|
168
|
+
this.track("transaction_started", {
|
|
169
|
+
walletId,
|
|
170
|
+
metadata: { receiverId, methodName, deposit },
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Track successful transaction
|
|
175
|
+
*/
|
|
176
|
+
trackTransactionSuccess(walletId, receiverId, txHash, methodName) {
|
|
177
|
+
const key = `tx:${walletId}:${receiverId}:${methodName}`;
|
|
178
|
+
const duration = this.endTimer(key);
|
|
179
|
+
this.track("transaction_success", {
|
|
180
|
+
walletId,
|
|
181
|
+
metadata: { receiverId, methodName, txHash, duration },
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Track failed transaction
|
|
186
|
+
*/
|
|
187
|
+
trackTransactionFailed(walletId, receiverId, error, methodName) {
|
|
188
|
+
const key = `tx:${walletId}:${receiverId}:${methodName}`;
|
|
189
|
+
const duration = this.endTimer(key);
|
|
190
|
+
this.track("transaction_failed", {
|
|
191
|
+
walletId,
|
|
192
|
+
metadata: {
|
|
193
|
+
receiverId,
|
|
194
|
+
methodName,
|
|
195
|
+
error: error.message,
|
|
196
|
+
errorCode: error instanceof errors_1.WalletError ? error.code : undefined,
|
|
197
|
+
duration,
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Track rejected transaction
|
|
203
|
+
*/
|
|
204
|
+
trackTransactionRejected(walletId, receiverId, methodName) {
|
|
205
|
+
const key = `tx:${walletId}:${receiverId}:${methodName}`;
|
|
206
|
+
const duration = this.endTimer(key);
|
|
207
|
+
this.track("transaction_rejected", {
|
|
208
|
+
walletId,
|
|
209
|
+
metadata: { receiverId, methodName, duration },
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Track account switch
|
|
214
|
+
*/
|
|
215
|
+
trackAccountSwitched(accountId, previousAccountId, walletId) {
|
|
216
|
+
this.track("account_switched", {
|
|
217
|
+
accountId,
|
|
218
|
+
walletId,
|
|
219
|
+
metadata: { previousAccountId },
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Track network switch
|
|
224
|
+
*/
|
|
225
|
+
trackNetworkSwitched(network, previousNetwork) {
|
|
226
|
+
this.track("network_switched", {
|
|
227
|
+
network,
|
|
228
|
+
metadata: { previousNetwork },
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Track error
|
|
233
|
+
*/
|
|
234
|
+
trackError(error, context) {
|
|
235
|
+
this.track("error", {
|
|
236
|
+
metadata: {
|
|
237
|
+
error: error.message,
|
|
238
|
+
errorCode: error instanceof errors_1.WalletError ? error.code : undefined,
|
|
239
|
+
context,
|
|
240
|
+
stack: error.stack,
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Identify user
|
|
246
|
+
*/
|
|
247
|
+
identify(accountId, traits) {
|
|
248
|
+
if (!this.enabled)
|
|
249
|
+
return;
|
|
250
|
+
this.adapter.identify?.(accountId, traits);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Flush pending events
|
|
254
|
+
*/
|
|
255
|
+
flush() {
|
|
256
|
+
this.adapter.flush?.();
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Set enabled state
|
|
260
|
+
*/
|
|
261
|
+
setEnabled(enabled) {
|
|
262
|
+
this.enabled = enabled;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Update default metadata
|
|
266
|
+
*/
|
|
267
|
+
setDefaultMetadata(metadata) {
|
|
268
|
+
this.defaultMetadata = { ...this.defaultMetadata, ...metadata };
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Create event handlers for NearConnector events
|
|
272
|
+
*/
|
|
273
|
+
createEventHandlers() {
|
|
274
|
+
return {
|
|
275
|
+
"wallet:signIn": ({ wallet, accounts }) => {
|
|
276
|
+
this.trackConnectSuccess(wallet.manifest.id, accounts, wallet.manifest.name);
|
|
277
|
+
},
|
|
278
|
+
"wallet:signOut": () => {
|
|
279
|
+
this.trackDisconnect();
|
|
280
|
+
},
|
|
281
|
+
"wallet:error": ({ error, walletId, action }) => {
|
|
282
|
+
this.trackError(error, `${action}:${walletId}`);
|
|
283
|
+
},
|
|
284
|
+
"account:switched": ({ account, previousAccountId }) => {
|
|
285
|
+
this.trackAccountSwitched(account.accountId, previousAccountId);
|
|
286
|
+
},
|
|
287
|
+
"session:restored": ({ session }) => {
|
|
288
|
+
this.track("session_restored", {
|
|
289
|
+
walletId: session.walletId,
|
|
290
|
+
accountId: session.accounts[0]?.accountId,
|
|
291
|
+
network: session.network,
|
|
292
|
+
});
|
|
293
|
+
},
|
|
294
|
+
"session:expired": ({ session }) => {
|
|
295
|
+
this.track("session_expired", {
|
|
296
|
+
walletId: session.walletId,
|
|
297
|
+
accountId: session.accounts[0]?.accountId,
|
|
298
|
+
});
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
exports.Analytics = Analytics;
|
|
304
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/helpers/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encodeBase58 = encodeBase58;
|
|
4
|
+
// Base58 alphabet (Bitcoin)
|
|
5
|
+
const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
6
|
+
/**
|
|
7
|
+
* Encodes a Uint8Array into a base58 string.
|
|
8
|
+
* @param {Uint8Array} bytes
|
|
9
|
+
* @returns {string}
|
|
10
|
+
*/
|
|
11
|
+
function encodeBase58(bytes) {
|
|
12
|
+
if (bytes.length === 0)
|
|
13
|
+
return "";
|
|
14
|
+
// Count leading zeros.
|
|
15
|
+
let zeros = 0;
|
|
16
|
+
let i = 0;
|
|
17
|
+
while (i < bytes.length && bytes[i] === 0) {
|
|
18
|
+
zeros++;
|
|
19
|
+
i++;
|
|
20
|
+
}
|
|
21
|
+
// Convert byte array to base58 digits (big-endian).
|
|
22
|
+
let digits = [0];
|
|
23
|
+
for (; i < bytes.length; i++) {
|
|
24
|
+
let carry = bytes[i];
|
|
25
|
+
for (let j = 0; j < digits.length; ++j) {
|
|
26
|
+
carry += digits[j] << 8;
|
|
27
|
+
digits[j] = carry % 58;
|
|
28
|
+
carry = (carry / 58) | 0;
|
|
29
|
+
}
|
|
30
|
+
while (carry > 0) {
|
|
31
|
+
digits.push(carry % 58);
|
|
32
|
+
carry = (carry / 58) | 0;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Add leading zeros in base58.
|
|
36
|
+
while (digits.length > 0 && digits[digits.length - 1] === 0)
|
|
37
|
+
digits.pop();
|
|
38
|
+
let result = "";
|
|
39
|
+
for (let k = 0; k < zeros; k++) {
|
|
40
|
+
result += BASE58_ALPHABET[0];
|
|
41
|
+
}
|
|
42
|
+
for (let q = digits.length - 1; q >= 0; --q) {
|
|
43
|
+
result += BASE58_ALPHABET[digits[q]];
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=base58.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base58.js","sourceRoot":"","sources":["../../src/helpers/base58.ts"],"names":[],"mappings":";;AAQA,oCAqCC;AA7CD,4BAA4B;AAC5B,MAAM,eAAe,GAAG,4DAA4D,CAAC;AAErF;;;;GAIG;AACH,SAAgB,YAAY,CAAC,KAAiB;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,uBAAuB;IACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,KAAK,EAAE,CAAC;QACR,CAAC,EAAE,CAAC;IACN,CAAC;IAED,oDAAoD;IACpD,IAAI,MAAM,GAAa,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACvC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACxB,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;QAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IAE1E,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic event emitter class for handling typed events and their callbacks
|
|
3
|
+
* @template T Record type containing event names as keys and their payload types as values
|
|
4
|
+
*/
|
|
5
|
+
export declare class EventEmitter<T extends Record<string, any>> {
|
|
6
|
+
/** Internal storage for event callbacks */
|
|
7
|
+
private events;
|
|
8
|
+
/**
|
|
9
|
+
* Subscribe to an event
|
|
10
|
+
* @template K Event name type
|
|
11
|
+
* @param event Name of the event to subscribe to
|
|
12
|
+
* @param callback Function to be called when event is emitted
|
|
13
|
+
*/
|
|
14
|
+
on<K extends keyof T>(event: K, callback: (payload: T[K]) => void): void;
|
|
15
|
+
/**
|
|
16
|
+
* Emit an event with payload
|
|
17
|
+
* @template K Event name type
|
|
18
|
+
* @param event Name of the event to emit
|
|
19
|
+
* @param payload Data to pass to event handlers
|
|
20
|
+
*/
|
|
21
|
+
emit<K extends keyof T>(event: K, payload: T[K]): void;
|
|
22
|
+
/**
|
|
23
|
+
* Unsubscribe from an event
|
|
24
|
+
* @template K Event name type
|
|
25
|
+
* @param event Name of the event to unsubscribe from
|
|
26
|
+
* @param callback Function to remove from event handlers
|
|
27
|
+
*/
|
|
28
|
+
off<K extends keyof T>(event: K, callback: (payload: T[K]) => void): void;
|
|
29
|
+
/**
|
|
30
|
+
* Subscribe to an event for a single emission
|
|
31
|
+
* @template K Event name type
|
|
32
|
+
* @param event Name of the event to subscribe to
|
|
33
|
+
* @param callback Function to be called when event is emitted
|
|
34
|
+
*/
|
|
35
|
+
once<K extends keyof T>(event: K, callback: (payload: T[K]) => void): void;
|
|
36
|
+
/**
|
|
37
|
+
* Remove all event listeners
|
|
38
|
+
* @template K Event name type
|
|
39
|
+
* @param event Optional event name to remove listeners for. If not provided, removes all listeners for all events
|
|
40
|
+
*/
|
|
41
|
+
removeAllListeners<K extends keyof T>(event?: K): void;
|
|
42
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventEmitter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Generic event emitter class for handling typed events and their callbacks
|
|
6
|
+
* @template T Record type containing event names as keys and their payload types as values
|
|
7
|
+
*/
|
|
8
|
+
class EventEmitter {
|
|
9
|
+
/** Internal storage for event callbacks */
|
|
10
|
+
events = {};
|
|
11
|
+
/**
|
|
12
|
+
* Subscribe to an event
|
|
13
|
+
* @template K Event name type
|
|
14
|
+
* @param event Name of the event to subscribe to
|
|
15
|
+
* @param callback Function to be called when event is emitted
|
|
16
|
+
*/
|
|
17
|
+
on(event, callback) {
|
|
18
|
+
if (!this.events[event])
|
|
19
|
+
this.events[event] = [];
|
|
20
|
+
this.events[event].push(callback);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Emit an event with payload
|
|
24
|
+
* @template K Event name type
|
|
25
|
+
* @param event Name of the event to emit
|
|
26
|
+
* @param payload Data to pass to event handlers
|
|
27
|
+
*/
|
|
28
|
+
emit(event, payload) {
|
|
29
|
+
this.events[event]?.forEach((cb) => cb(payload));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Unsubscribe from an event
|
|
33
|
+
* @template K Event name type
|
|
34
|
+
* @param event Name of the event to unsubscribe from
|
|
35
|
+
* @param callback Function to remove from event handlers
|
|
36
|
+
*/
|
|
37
|
+
off(event, callback) {
|
|
38
|
+
this.events[event] = this.events[event]?.filter((cb) => cb !== callback);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Subscribe to an event for a single emission
|
|
42
|
+
* @template K Event name type
|
|
43
|
+
* @param event Name of the event to subscribe to
|
|
44
|
+
* @param callback Function to be called when event is emitted
|
|
45
|
+
*/
|
|
46
|
+
once(event, callback) {
|
|
47
|
+
const onceWrapper = (payload) => {
|
|
48
|
+
callback(payload);
|
|
49
|
+
this.off(event, onceWrapper);
|
|
50
|
+
};
|
|
51
|
+
this.on(event, onceWrapper);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Remove all event listeners
|
|
55
|
+
* @template K Event name type
|
|
56
|
+
* @param event Optional event name to remove listeners for. If not provided, removes all listeners for all events
|
|
57
|
+
*/
|
|
58
|
+
removeAllListeners(event) {
|
|
59
|
+
if (event) {
|
|
60
|
+
delete this.events[event];
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.events = {};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.EventEmitter = EventEmitter;
|
|
68
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/helpers/events.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,YAAY;IACvB,2CAA2C;IACnC,MAAM,GAA4D,EAAE,CAAC;IAE7E;;;;;OAKG;IACH,EAAE,CAAoB,KAAQ,EAAE,QAAiC;QAC/D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAoB,KAAQ,EAAE,OAAa;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAoB,KAAQ,EAAE,QAAiC;QAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAoB,KAAQ,EAAE,QAAiC;QACjE,MAAM,WAAW,GAAG,CAAC,OAAa,EAAE,EAAE;YACpC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAoB,KAAS;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;CACF;AA7DD,oCA6DC"}
|