@formo/analytics 1.20.0 → 1.22.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.
@@ -1,4 +1,40 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
2
38
  var __rest = (this && this.__rest) || function (s, e) {
3
39
  var t = {};
4
40
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -32,20 +68,31 @@ var EventManager = /** @class */ (function () {
32
68
  * @param event Incoming event data
33
69
  */
34
70
  EventManager.prototype.addEvent = function (event, address, userId) {
35
- var callback = event.callback, _event = __rest(event, ["callback"]);
36
- var formoEvent = this.eventFactory.create(_event, address, userId);
37
- // Check if the final event has a blocked address - don't queue it
38
- if (formoEvent.address && (0, address_1.isBlockedAddress)(formoEvent.address)) {
39
- logger_1.logger.warn("Event blocked: Address ".concat(formoEvent.address, " is in the blocked list and cannot emit events"));
40
- return;
41
- }
42
- this.eventQueue.enqueue(formoEvent, function (err, _, data) {
43
- if (err) {
44
- logger_1.logger.error("Error sending events:", err);
45
- }
46
- else
47
- logger_1.logger.info("Events sent successfully: ".concat(data.length, " events"));
48
- callback === null || callback === void 0 ? void 0 : callback(err, _, data);
71
+ return __awaiter(this, void 0, void 0, function () {
72
+ var callback, _event, formoEvent;
73
+ return __generator(this, function (_a) {
74
+ switch (_a.label) {
75
+ case 0:
76
+ callback = event.callback, _event = __rest(event, ["callback"]);
77
+ return [4 /*yield*/, this.eventFactory.create(_event, address, userId)];
78
+ case 1:
79
+ formoEvent = _a.sent();
80
+ // Check if the final event has a blocked address - don't queue it
81
+ if (formoEvent.address && (0, address_1.isBlockedAddress)(formoEvent.address)) {
82
+ logger_1.logger.warn("Event blocked: Address ".concat(formoEvent.address, " is in the blocked list and cannot emit events"));
83
+ return [2 /*return*/];
84
+ }
85
+ this.eventQueue.enqueue(formoEvent, function (err, _, data) {
86
+ if (err) {
87
+ logger_1.logger.error("Error sending events:", err);
88
+ }
89
+ else
90
+ logger_1.logger.info("Events sent successfully: ".concat(data.length, " events"));
91
+ callback === null || callback === void 0 ? void 0 : callback(err, _, data);
92
+ });
93
+ return [2 /*return*/];
94
+ }
95
+ });
49
96
  });
50
97
  };
51
98
  return EventManager;
@@ -1,8 +1,8 @@
1
1
  import { Address, APIEvent, IFormoEvent } from "../../types";
2
2
  export interface IEventManager {
3
- addEvent(event: APIEvent, address?: Address, userId?: string): void;
3
+ addEvent(event: APIEvent, address?: Address, userId?: string): Promise<void>;
4
4
  }
5
5
  export interface IEventFactory {
6
- create(event: APIEvent, address?: Address, userId?: string): IFormoEvent;
6
+ create(event: APIEvent, address?: Address, userId?: string): Promise<IFormoEvent>;
7
7
  }
8
8
  //# sourceMappingURL=type.d.ts.map
@@ -1,2 +1,2 @@
1
- export declare const version = "1.20.0";
1
+ export declare const version = "1.22.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
4
  // Generated by genversion.
5
- exports.version = '1.20.0';
5
+ exports.version = '1.22.0';
6
6
  //# sourceMappingURL=version.js.map
@@ -63,9 +63,48 @@ export interface TrackingOptions {
63
63
  excludePaths?: string[];
64
64
  excludeChains?: ChainID[];
65
65
  }
66
+ /**
67
+ * Configuration options for controlling wallet event autocapture
68
+ * All events are enabled by default unless explicitly set to false
69
+ */
70
+ export interface AutocaptureOptions {
71
+ /**
72
+ * Track wallet connect events
73
+ * @default true
74
+ */
75
+ connect?: boolean;
76
+ /**
77
+ * Track wallet disconnect events
78
+ * @default true
79
+ */
80
+ disconnect?: boolean;
81
+ /**
82
+ * Track wallet signature events (personal_sign, eth_signTypedData_v4)
83
+ * @default true
84
+ */
85
+ signature?: boolean;
86
+ /**
87
+ * Track wallet transaction events (eth_sendTransaction)
88
+ * @default true
89
+ */
90
+ transaction?: boolean;
91
+ /**
92
+ * Track wallet chain change events
93
+ * @default true
94
+ */
95
+ chain?: boolean;
96
+ }
66
97
  export interface Options {
67
98
  provider?: EIP1193Provider;
68
99
  tracking?: boolean | TrackingOptions;
100
+ /**
101
+ * Control wallet event autocapture
102
+ * - `false`: Disable all wallet autocapture
103
+ * - `true`: Enable all wallet events (default)
104
+ * - `AutocaptureOptions`: Granular control over specific events
105
+ * @default true
106
+ */
107
+ autocapture?: boolean | AutocaptureOptions;
69
108
  flushAt?: number;
70
109
  flushInterval?: number;
71
110
  retryCount?: number;
@@ -224,6 +224,12 @@ export declare class FormoAnalytics implements IFormoAnalytics {
224
224
  * @returns {boolean} True if tracking should be enabled
225
225
  */
226
226
  private shouldTrack;
227
+ /**
228
+ * Check if a specific wallet event type is enabled for autocapture
229
+ * @param eventType The wallet event type to check
230
+ * @returns {boolean} True if the event type should be autocaptured
231
+ */
232
+ private isAutocaptureEnabled;
227
233
  /**
228
234
  * Get provider information for a given provider
229
235
  * @param provider The provider to get info for