@metamask/connect-multichain 0.1.0 → 0.2.1

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 (83) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/dist/browser/es/connect-multichain.d.mts +67 -13
  3. package/dist/browser/es/connect-multichain.mjs +895 -384
  4. package/dist/browser/es/connect-multichain.mjs.map +1 -1
  5. package/dist/browser/es/metafile-esm.json +1 -1
  6. package/dist/browser/iife/connect-multichain.d.ts +67 -13
  7. package/dist/browser/iife/connect-multichain.js +21636 -14459
  8. package/dist/browser/iife/connect-multichain.js.map +1 -1
  9. package/dist/browser/iife/metafile-iife.json +1 -1
  10. package/dist/browser/umd/connect-multichain.d.ts +67 -13
  11. package/dist/browser/umd/connect-multichain.js +893 -382
  12. package/dist/browser/umd/connect-multichain.js.map +1 -1
  13. package/dist/browser/umd/metafile-cjs.json +1 -1
  14. package/dist/node/cjs/connect-multichain.d.ts +67 -13
  15. package/dist/node/cjs/connect-multichain.js +898 -385
  16. package/dist/node/cjs/connect-multichain.js.map +1 -1
  17. package/dist/node/cjs/metafile-cjs.json +1 -1
  18. package/dist/node/es/connect-multichain.d.mts +67 -13
  19. package/dist/node/es/connect-multichain.mjs +898 -387
  20. package/dist/node/es/connect-multichain.mjs.map +1 -1
  21. package/dist/node/es/metafile-esm.json +1 -1
  22. package/dist/react-native/es/connect-multichain.d.mts +67 -13
  23. package/dist/react-native/es/connect-multichain.mjs +897 -386
  24. package/dist/react-native/es/connect-multichain.mjs.map +1 -1
  25. package/dist/react-native/es/metafile-esm.json +1 -1
  26. package/dist/src/domain/events/index.d.ts +26 -0
  27. package/dist/src/domain/events/index.d.ts.map +1 -1
  28. package/dist/src/domain/events/index.js +35 -0
  29. package/dist/src/domain/events/index.js.map +1 -1
  30. package/dist/src/domain/multichain/index.d.ts +7 -5
  31. package/dist/src/domain/multichain/index.d.ts.map +1 -1
  32. package/dist/src/domain/multichain/index.js +2 -2
  33. package/dist/src/domain/multichain/index.js.map +1 -1
  34. package/dist/src/domain/multichain/types.d.ts +9 -7
  35. package/dist/src/domain/multichain/types.d.ts.map +1 -1
  36. package/dist/src/domain/platform/index.js +3 -3
  37. package/dist/src/domain/platform/index.js.map +1 -1
  38. package/dist/src/domain/ui/factory.d.ts +1 -1
  39. package/dist/src/domain/ui/factory.d.ts.map +1 -1
  40. package/dist/src/domain/utils/index.d.ts +1 -0
  41. package/dist/src/domain/utils/index.d.ts.map +1 -1
  42. package/dist/src/domain/utils/index.js +1 -0
  43. package/dist/src/domain/utils/index.js.map +1 -1
  44. package/dist/src/multichain/index.d.ts +5 -2
  45. package/dist/src/multichain/index.d.ts.map +1 -1
  46. package/dist/src/multichain/index.js +124 -38
  47. package/dist/src/multichain/index.js.map +1 -1
  48. package/dist/src/multichain/rpc/handlers/rpcClient.d.ts +2 -1
  49. package/dist/src/multichain/rpc/handlers/rpcClient.d.ts.map +1 -1
  50. package/dist/src/multichain/rpc/handlers/rpcClient.js +16 -17
  51. package/dist/src/multichain/rpc/handlers/rpcClient.js.map +1 -1
  52. package/dist/src/multichain/rpc/requestRouter.d.ts +1 -0
  53. package/dist/src/multichain/rpc/requestRouter.d.ts.map +1 -1
  54. package/dist/src/multichain/rpc/requestRouter.js +71 -15
  55. package/dist/src/multichain/rpc/requestRouter.js.map +1 -1
  56. package/dist/src/multichain/transports/constants.d.ts +3 -0
  57. package/dist/src/multichain/transports/constants.d.ts.map +1 -0
  58. package/dist/src/multichain/transports/constants.js +3 -0
  59. package/dist/src/multichain/transports/constants.js.map +1 -0
  60. package/dist/src/multichain/transports/default/index.d.ts +4 -0
  61. package/dist/src/multichain/transports/default/index.d.ts.map +1 -1
  62. package/dist/src/multichain/transports/default/index.js +137 -13
  63. package/dist/src/multichain/transports/default/index.js.map +1 -1
  64. package/dist/src/multichain/transports/mwp/index.d.ts +10 -1
  65. package/dist/src/multichain/transports/mwp/index.d.ts.map +1 -1
  66. package/dist/src/multichain/transports/mwp/index.js +138 -10
  67. package/dist/src/multichain/transports/mwp/index.js.map +1 -1
  68. package/dist/src/multichain/utils/analytics.d.ts +39 -0
  69. package/dist/src/multichain/utils/analytics.d.ts.map +1 -0
  70. package/dist/src/multichain/utils/analytics.js +83 -0
  71. package/dist/src/multichain/utils/analytics.js.map +1 -0
  72. package/dist/src/multichain/utils/index.d.ts +0 -1
  73. package/dist/src/multichain/utils/index.d.ts.map +1 -1
  74. package/dist/src/multichain/utils/index.js +1 -16
  75. package/dist/src/multichain/utils/index.js.map +1 -1
  76. package/dist/src/ui/index.d.ts +1 -1
  77. package/dist/src/ui/index.d.ts.map +1 -1
  78. package/dist/src/ui/index.js +35 -19
  79. package/dist/src/ui/index.js.map +1 -1
  80. package/dist/src/ui/modals/web/install.js +1 -1
  81. package/dist/src/ui/modals/web/install.js.map +1 -1
  82. package/dist/types/connect-multichain.d.ts +67 -13
  83. package/package.json +12 -9
@@ -1,5 +1,5 @@
1
1
  import debug from 'debug';
2
- import { SessionData, Transport, MultichainApiClient } from '@metamask/multichain-api-client';
2
+ import { SessionData, Transport, TransportRequest, TransportResponse, MultichainApiClient } from '@metamask/multichain-api-client';
3
3
  export { SessionData } from '@metamask/multichain-api-client';
4
4
  import { CaipAccountId, Json } from '@metamask/utils';
5
5
  import { SessionRequest } from '@metamask/mobile-wallet-protocol-core';
@@ -84,6 +84,32 @@ declare class EventEmitter<TEvents extends Record<string, unknown[]>> {
84
84
  * @param handler - The specific handler function to remove
85
85
  */
86
86
  off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void;
87
+ /**
88
+ * Removes a specific event handler for the specified event.
89
+ * Added for compatibility as some libraries use this method name.
90
+ *
91
+ * @template TEventName - The name of the event to remove the handler from (must be a key of TEvents)
92
+ * @param eventName - The name of the event to remove the handler from
93
+ * @param handler - The specific handler function to remove
94
+ */
95
+ removeListener<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void;
96
+ /**
97
+ * Registers an event handler for the specified event that will only be called once.
98
+ *
99
+ * @template TEventName - The name of the event to listen for (must be a key of TEvents)
100
+ * @param eventName - The name of the event to listen for
101
+ * @param handler - The function to call when the event is emitted (only once)
102
+ * @returns A function to remove the listener
103
+ */
104
+ once<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): () => void;
105
+ /**
106
+ * Returns the number of listeners registered for the specified event.
107
+ *
108
+ * @template TEventName - The name of the event to count listeners for (must be a key of TEvents)
109
+ * @param eventName - The name of the event to count listeners for
110
+ * @returns The number of listeners registered for the event
111
+ */
112
+ listenerCount<TEventName extends keyof TEvents & string>(eventName: TEventName): number;
87
113
  }
88
114
 
89
115
  type StoreOptions = Record<string, any>;
@@ -304,7 +330,7 @@ declare class ModalFactory<T extends FactoryModals = FactoryModals> {
304
330
  createUniversalLink(connectionRequest?: ConnectionRequest): string;
305
331
  private onCloseModal;
306
332
  private onStartDesktopOnboarding;
307
- renderInstallModal(preferDesktop: boolean, createConnectionRequest: () => Promise<ConnectionRequest>, successCallback: (error?: Error) => Promise<void>): Promise<void>;
333
+ renderInstallModal(showInstallModal: boolean, createConnectionRequest: () => Promise<ConnectionRequest>, successCallback: (error?: Error) => Promise<void>): Promise<void>;
308
334
  renderOTPCodeModal(createOTPCode: () => Promise<OTPCode>, successCallback: (error?: Error) => Promise<void>, updateOTPCode: (otpCode: OTPCode, modal: AbstractOTPCodeModal) => void): Promise<void>;
309
335
  }
310
336
 
@@ -361,11 +387,9 @@ type MultichainOptions = {
361
387
  /** Dapp identification and branding settings */
362
388
  dapp: DappSettings;
363
389
  /** Optional API configuration for external services */
364
- api?: {
365
- /** The Infura API key to use for RPC requests */
366
- infuraAPIKey?: string;
367
- /** A map of RPC URLs to use for read-only requests */
368
- readonlyRPCMap?: RpcUrlsMap;
390
+ api: {
391
+ /** A map of `caipChainIds` -> RPC Urls for all networks supported by the app*/
392
+ supportedNetworks: RpcUrlsMap;
369
393
  };
370
394
  /** Analytics configuration */
371
395
  analytics?: {
@@ -381,7 +405,7 @@ type MultichainOptions = {
381
405
  factory: ModalFactory;
382
406
  headless?: boolean;
383
407
  preferExtension?: boolean;
384
- preferDesktop?: boolean;
408
+ showInstallModal?: boolean;
385
409
  };
386
410
  mobile?: {
387
411
  preferredOpenLink?: (deeplink: string, target?: string) => void;
@@ -415,7 +439,11 @@ type ExtendedTransport = Omit<Transport, 'connect'> & {
415
439
  connect: (props?: {
416
440
  scopes: Scope[];
417
441
  caipAccountIds: CaipAccountId[];
442
+ forceRequest?: boolean;
418
443
  }) => Promise<void>;
444
+ sendEip1193Message: <TRequest extends TransportRequest, TResponse extends TransportResponse>(request: TRequest, options?: {
445
+ timeout?: number;
446
+ }) => Promise<TResponse>;
419
447
  };
420
448
 
421
449
  declare const infuraRpcUrls: RpcUrlsMap;
@@ -427,7 +455,7 @@ declare function getInfuraRpcUrls(infuraAPIKey: string): RpcUrlsMap;
427
455
  type SDKState = 'pending' | 'loaded' | 'disconnected' | 'connected' | 'connecting';
428
456
  declare enum TransportType {
429
457
  Browser = "browser",
430
- MPW = "mwp",
458
+ MWP = "mwp",
431
459
  UNKNOWN = "unknown"
432
460
  }
433
461
  /**
@@ -441,13 +469,14 @@ declare abstract class MultichainCore extends EventEmitter<SDKEvents> {
441
469
  abstract storage: StoreClient;
442
470
  abstract state: SDKState;
443
471
  abstract provider: MultichainApiClient<RPCAPI>;
444
- abstract transport: Transport;
472
+ abstract transport: ExtendedTransport;
473
+ abstract transportType: TransportType;
445
474
  /**
446
475
  * Establishes a connection to the multichain provider, or re-use existing session
447
476
  *
448
477
  * @returns Promise that resolves to the session data
449
478
  */
450
- abstract connect(scopes: Scope[], caipAccountIds: CaipAccountId[]): Promise<void>;
479
+ abstract connect(scopes: Scope[], caipAccountIds: CaipAccountId[], forceRequest?: boolean): Promise<void>;
451
480
  /**
452
481
  * Disconnects from the multichain provider.
453
482
  *
@@ -461,6 +490,7 @@ declare abstract class MultichainCore extends EventEmitter<SDKEvents> {
461
490
  * @returns Promise that resolves to the method result
462
491
  */
463
492
  abstract invokeMethod(options: InvokeMethodOptions): Promise<Json>;
493
+ abstract openDeeplinkIfNeeded(): void;
464
494
  constructor(options: MultichainOptions);
465
495
  }
466
496
  declare function getTransportType(type: string): TransportType;
@@ -534,7 +564,7 @@ type ModalFactoryOptions = Pick<MultichainOptions, 'mobile' | 'transport'> & {
534
564
  ui: {
535
565
  headless?: boolean;
536
566
  preferExtension?: boolean;
537
- preferDesktop?: boolean;
567
+ showInstallModal?: boolean;
538
568
  };
539
569
  onConnection: (transport: Transport, options: ModalFactoryConnectOptions) => Promise<void>;
540
570
  getCurrentSession: () => Promise<SessionData | undefined>;
@@ -573,6 +603,30 @@ declare abstract class Modal<Options, Data extends DataType = DataType> {
573
603
  set data(data: Data);
574
604
  }
575
605
 
606
+ /**
607
+ * Checks if an error represents a user rejection.
608
+ *
609
+ * @param error - The error object to check
610
+ * @returns True if the error indicates a user rejection, false otherwise
611
+ */
612
+ declare function isRejectionError(error: unknown): boolean;
613
+ /**
614
+ * Gets analytics properties specific to wallet action events.
615
+ *
616
+ * @param options - Multichain options containing dapp and analytics config
617
+ * @param storage - Storage client for getting anonymous ID
618
+ * @param invokeOptions - The invoke method options containing method and scope
619
+ * @returns Wallet action analytics properties
620
+ */
621
+ declare function getWalletActionAnalyticsProperties(options: MultichainOptions, storage: StoreClient, invokeOptions: InvokeMethodOptions): Promise<{
622
+ mmconnect_version: string;
623
+ dapp_id: string;
624
+ method: string;
625
+ integration_type: string;
626
+ caip_chain_id: string;
627
+ anon_id: string;
628
+ }>;
629
+
576
630
  /**
577
631
  * Returns the version of the Multichain SDK.
578
632
  *
@@ -582,4 +636,4 @@ declare function getVersion(): string;
582
636
 
583
637
  declare const createMetamaskConnect: CreateMultichainFN;
584
638
 
585
- export { type ConnectionRequest, type CreateMultichainFN, type DappSettings, type DataType, type DomainErrorCodes, type Enumerate, type ErrorCodeRange, type ErrorCodes, EventEmitter, type EventTypes, type ExtendedTransport, type InstallWidgetProps, type InvokeMethodOptions, type LoggerNameSpaces, Modal, type ModalFactoryConnectOptions, type ModalFactoryOptions, MultichainCore, type MultichainOptions, type NotificationCallback, type OTPCode, type OTPCodeWidgetProps, PlatformType, type QRLink, type RPCAPI, type RPCErrorCodes, RPCHttpErr, RPCInvokeMethodErr, RPCReadonlyRequestErr, RPCReadonlyResponseErr, type RPCResponse, RPC_HANDLED_METHODS, type RpcMethod, type RpcUrlsMap, type SDKEvents, type SDKState, SDK_HANDLED_METHODS, type Scope, type StorageErrorCodes, StoreAdapter, StoreClient, type StoreOptions, TransportType, createLogger, createMetamaskConnect, enableDebug, getInfuraRpcUrls, getPlatformType, getTransportType, getVersion, hasExtension, infuraRpcUrls, isEnabled, isMetamaskExtensionInstalled, isSecure };
639
+ export { type ConnectionRequest, type CreateMultichainFN, type DappSettings, type DataType, type DomainErrorCodes, type Enumerate, type ErrorCodeRange, type ErrorCodes, EventEmitter, type EventTypes, type ExtendedTransport, type InstallWidgetProps, type InvokeMethodOptions, type LoggerNameSpaces, Modal, type ModalFactoryConnectOptions, type ModalFactoryOptions, MultichainCore, type MultichainOptions, type NotificationCallback, type OTPCode, type OTPCodeWidgetProps, PlatformType, type QRLink, type RPCAPI, type RPCErrorCodes, RPCHttpErr, RPCInvokeMethodErr, RPCReadonlyRequestErr, RPCReadonlyResponseErr, type RPCResponse, RPC_HANDLED_METHODS, type RpcMethod, type RpcUrlsMap, type SDKEvents, type SDKState, SDK_HANDLED_METHODS, type Scope, type StorageErrorCodes, StoreAdapter, StoreClient, type StoreOptions, TransportType, createLogger, createMetamaskConnect, enableDebug, getInfuraRpcUrls, getPlatformType, getTransportType, getVersion, getWalletActionAnalyticsProperties, hasExtension, infuraRpcUrls, isEnabled, isMetamaskExtensionInstalled, isRejectionError, isSecure };