@formo/analytics 1.29.0 → 1.30.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.
Files changed (48) hide show
  1. package/dist/cjs/src/FormoAnalytics.d.ts +52 -3
  2. package/dist/cjs/src/FormoAnalytics.js +262 -51
  3. package/dist/cjs/src/constants/base.d.ts +9 -0
  4. package/dist/cjs/src/constants/base.js +10 -1
  5. package/dist/cjs/src/constants/config.d.ts +3 -58
  6. package/dist/cjs/src/constants/config.js +3 -73
  7. package/dist/cjs/src/event/EventFactory.d.ts +1 -1
  8. package/dist/cjs/src/event/EventFactory.js +12 -6
  9. package/dist/cjs/src/event/EventManager.d.ts +2 -0
  10. package/dist/cjs/src/event/EventManager.js +4 -0
  11. package/dist/cjs/src/event/type.d.ts +1 -0
  12. package/dist/cjs/src/event/utils.js +1 -1
  13. package/dist/cjs/src/queue/EventQueue.d.ts +8 -0
  14. package/dist/cjs/src/queue/EventQueue.js +52 -6
  15. package/dist/cjs/src/queue/type.d.ts +1 -0
  16. package/dist/cjs/src/session/index.js +16 -8
  17. package/dist/cjs/src/storage/cookiePolicy.d.ts +16 -0
  18. package/dist/cjs/src/storage/cookiePolicy.js +19 -0
  19. package/dist/cjs/src/types/base.d.ts +0 -1
  20. package/dist/cjs/src/types/events.d.ts +0 -1
  21. package/dist/cjs/src/version.d.ts +1 -1
  22. package/dist/cjs/src/version.js +1 -1
  23. package/dist/cjs/src/wagmi/WagmiEventHandler.js +38 -15
  24. package/dist/esm/src/FormoAnalytics.d.ts +52 -3
  25. package/dist/esm/src/FormoAnalytics.js +265 -54
  26. package/dist/esm/src/constants/base.d.ts +9 -0
  27. package/dist/esm/src/constants/base.js +9 -0
  28. package/dist/esm/src/constants/config.d.ts +3 -58
  29. package/dist/esm/src/constants/config.js +3 -73
  30. package/dist/esm/src/event/EventFactory.d.ts +1 -1
  31. package/dist/esm/src/event/EventFactory.js +12 -6
  32. package/dist/esm/src/event/EventManager.d.ts +2 -0
  33. package/dist/esm/src/event/EventManager.js +4 -0
  34. package/dist/esm/src/event/type.d.ts +1 -0
  35. package/dist/esm/src/event/utils.js +2 -2
  36. package/dist/esm/src/queue/EventQueue.d.ts +8 -0
  37. package/dist/esm/src/queue/EventQueue.js +52 -6
  38. package/dist/esm/src/queue/type.d.ts +1 -0
  39. package/dist/esm/src/session/index.js +16 -8
  40. package/dist/esm/src/storage/cookiePolicy.d.ts +16 -0
  41. package/dist/esm/src/storage/cookiePolicy.js +18 -0
  42. package/dist/esm/src/types/base.d.ts +0 -1
  43. package/dist/esm/src/types/events.d.ts +0 -1
  44. package/dist/esm/src/version.d.ts +1 -1
  45. package/dist/esm/src/version.js +1 -1
  46. package/dist/esm/src/wagmi/WagmiEventHandler.js +38 -15
  47. package/dist/index.umd.min.js +1 -1
  48. package/package.json +13 -23
@@ -76,7 +76,6 @@ export interface SignatureAPIEvent {
76
76
  chainId: ChainID;
77
77
  address: Address;
78
78
  message: string;
79
- signatureHash?: string;
80
79
  }
81
80
  export interface ConnectAPIEvent {
82
81
  type: "connect";
@@ -1,2 +1,2 @@
1
- export declare const version = "1.29.0";
1
+ export declare const version = "1.30.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // This file is auto-generated by scripts/update-version.js during npm version
2
2
  // Do not edit manually - it will be overwritten
3
- export var version = '1.29.0';
3
+ export var version = '1.30.0';
4
4
  //# sourceMappingURL=version.js.map
@@ -170,6 +170,11 @@ var WagmiEventHandler = /** @class */ (function () {
170
170
  chainId: chainId,
171
171
  });
172
172
  if (!(status === "disconnected" && prevStatus === "connected")) return [3 /*break*/, 4];
173
+ // Clear central chain state regardless of autocapture so a later
174
+ // event can't carry a stale excluded/!excluded chainId.
175
+ this.formo.syncWalletState({
176
+ chainId: this.trackingState.lastChainId,
177
+ });
173
178
  if (!this.formo.isAutocaptureEnabled("disconnect")) return [3 /*break*/, 3];
174
179
  return [4 /*yield*/, this.formo.disconnect({
175
180
  chainId: this.trackingState.lastChainId,
@@ -187,6 +192,9 @@ var WagmiEventHandler = /** @class */ (function () {
187
192
  if (!(address && chainId !== undefined)) return [3 /*break*/, 6];
188
193
  this.trackingState.lastAddress = address;
189
194
  this.trackingState.lastChainId = chainId;
195
+ // Sync central state unconditionally so tracking.excludeChains
196
+ // is enforced even when connect autocapture is disabled.
197
+ this.formo.syncWalletState({ chainId: chainId, address: address });
190
198
  if (!this.formo.isAutocaptureEnabled("connect")) return [3 /*break*/, 6];
191
199
  connectorName = this.getConnectorName(state);
192
200
  return [4 /*yield*/, this.formo.connect({ chainId: chainId, address: address }, __assign({}, (connectorName && { providerName: connectorName })))];
@@ -235,6 +243,9 @@ var WagmiEventHandler = /** @class */ (function () {
235
243
  address: address,
236
244
  });
237
245
  this.trackingState.lastChainId = chainId;
246
+ // Sync central state unconditionally so a chain switch to an
247
+ // excluded chain is honored even when chain autocapture is disabled.
248
+ this.formo.syncWalletState({ chainId: chainId, address: address });
238
249
  if (!this.formo.isAutocaptureEnabled("chain")) return [3 /*break*/, 4];
239
250
  _a.label = 1;
240
251
  case 1:
@@ -356,14 +367,21 @@ var WagmiEventHandler = /** @class */ (function () {
356
367
  logger.warn("WagmiEventHandler: Transaction receipt query but no hash found");
357
368
  return;
358
369
  }
359
- // Retrieve stored transaction details from BROADCASTED event
360
- // Normalize hash to lowercase for consistent lookup
370
+ // Retrieve stored transaction details from the BROADCASTED event.
371
+ // Normalize hash to lowercase for consistent lookup.
361
372
  var normalizedHash = transactionHash.toLowerCase();
362
373
  var pendingTx = this.pendingTransactions.get(normalizedHash);
363
- // Use the original sender address from BROADCASTED event if available,
364
- // otherwise fall back to current connected address.
365
- // This handles wallet switches between broadcast and confirmation.
366
- var address = (pendingTx === null || pendingTx === void 0 ? void 0 : pendingTx.address) || this.trackingState.lastAddress;
374
+ // Only emit receipt-derived events for a hash we actually observed
375
+ // being broadcast through this handler. The QueryClient is supplied
376
+ // by the host app and its cache can be written by app code or other
377
+ // deps, so without this gate a forged waitForTransactionReceipt
378
+ // entry could fabricate a confirmed/reverted transaction for an
379
+ // arbitrary hash. No pendingTx → not our broadcast → ignore.
380
+ if (!pendingTx) {
381
+ logger.debug("WagmiEventHandler: Receipt for unobserved tx hash; ignoring", { transactionHash: transactionHash });
382
+ return;
383
+ }
384
+ var address = pendingTx.address;
367
385
  if (!address) {
368
386
  logger.warn("WagmiEventHandler: Transaction receipt query but no address available");
369
387
  return;
@@ -371,9 +389,13 @@ var WagmiEventHandler = /** @class */ (function () {
371
389
  try {
372
390
  // Extract receipt data
373
391
  var receipt = state.data;
374
- // Determine transaction status from receipt
375
- // receipt.status is 'success' or 'reverted' in viem
376
- var txStatus = (receipt === null || receipt === void 0 ? void 0 : receipt.status) === "reverted"
392
+ // Only act on an explicit on-chain outcome. A missing/unknown
393
+ // status must NOT be treated as a confirmation.
394
+ if ((receipt === null || receipt === void 0 ? void 0 : receipt.status) !== "success" && (receipt === null || receipt === void 0 ? void 0 : receipt.status) !== "reverted") {
395
+ logger.debug("WagmiEventHandler: Receipt without explicit success/reverted status; ignoring", { transactionHash: transactionHash, status: receipt === null || receipt === void 0 ? void 0 : receipt.status });
396
+ return;
397
+ }
398
+ var txStatus = receipt.status === "reverted"
377
399
  ? TransactionStatus.REVERTED
378
400
  : TransactionStatus.CONFIRMED;
379
401
  logger.info("WagmiEventHandler: Tracking transaction confirmation", {
@@ -452,15 +474,13 @@ var WagmiEventHandler = /** @class */ (function () {
452
474
  return;
453
475
  }
454
476
  try {
455
- // Map Wagmi mutation status to Formo signature status
477
+ // Map Wagmi mutation status to Formo signature status.
456
478
  var status_1;
457
- var signatureHash = void 0;
458
479
  if (state.status === "pending") {
459
480
  status_1 = SignatureStatus.REQUESTED;
460
481
  }
461
482
  else if (state.status === "success") {
462
483
  status_1 = SignatureStatus.CONFIRMED;
463
- signatureHash = state.data;
464
484
  }
465
485
  else if (state.status === "error") {
466
486
  status_1 = SignatureStatus.REJECTED;
@@ -468,13 +488,11 @@ var WagmiEventHandler = /** @class */ (function () {
468
488
  else {
469
489
  return; // Ignore idle state
470
490
  }
471
- // Extract message from variables
472
491
  var message = void 0;
473
492
  if (mutationType === "signMessage") {
474
493
  message = variables.message || "";
475
494
  }
476
495
  else {
477
- // For signTypedData, stringify the typed data
478
496
  message = JSON.stringify(variables.message || variables.types || {});
479
497
  }
480
498
  logger.info("WagmiEventHandler: Tracking signature event", {
@@ -483,7 +501,12 @@ var WagmiEventHandler = /** @class */ (function () {
483
501
  address: address,
484
502
  chainId: chainId,
485
503
  });
486
- this.formo.signature(__assign({ status: status_1, chainId: chainId, address: address, message: message }, (signatureHash && { signatureHash: signatureHash })));
504
+ this.formo.signature({
505
+ status: status_1,
506
+ chainId: chainId,
507
+ address: address,
508
+ message: message,
509
+ });
487
510
  }
488
511
  catch (error) {
489
512
  logger.error("WagmiEventHandler: Error handling signature mutation:", error);