@1sat/connect 0.0.4 → 0.0.5

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/dist/errors.d.ts CHANGED
@@ -17,6 +17,11 @@ export declare const ErrorCodes: {
17
17
  readonly TIMEOUT: 4008;
18
18
  readonly NETWORK_ERROR: 4009;
19
19
  readonly ORIGIN_NOT_ALLOWED: 4010;
20
+ readonly TRANSPORT_UNAVAILABLE: 4011;
21
+ readonly FALLBACK_REQUIRED: 4012;
22
+ readonly AUTHORIZATION_TIMEOUT: 4013;
23
+ readonly STATE_MISMATCH: 4014;
24
+ readonly CODE_REPLAY: 4015;
20
25
  };
21
26
  export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
22
27
  /**
@@ -53,6 +58,21 @@ export declare class PopupClosedError extends OneSatError {
53
58
  export declare class TimeoutError extends OneSatError {
54
59
  constructor(message?: string);
55
60
  }
61
+ export declare class TransportUnavailableError extends OneSatError {
62
+ constructor(message?: string, data?: unknown);
63
+ }
64
+ export declare class FallbackRequiredError extends OneSatError {
65
+ constructor(message?: string, data?: unknown);
66
+ }
67
+ export declare class AuthorizationTimeoutError extends OneSatError {
68
+ constructor(message?: string, data?: unknown);
69
+ }
70
+ export declare class StateMismatchError extends OneSatError {
71
+ constructor(message?: string, data?: unknown);
72
+ }
73
+ export declare class CodeReplayError extends OneSatError {
74
+ constructor(message?: string, data?: unknown);
75
+ }
56
76
  /**
57
77
  * Create an error from an error response
58
78
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAmBb,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAA;AAEpE;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;gBAEX,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAO5D,MAAM;;;;;CAON;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACrC,OAAO,SAA8B;CAIjD;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACrC,OAAO,SAAqB;CAIxC;AAED,qBAAa,uBAAwB,SAAQ,WAAW;gBAC3C,OAAO,SAA4B;CAI/C;AAED,qBAAa,sBAAuB,SAAQ,WAAW;gBAC1C,OAAO,SAAuB;CAI1C;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACrC,OAAO,SAAqC;CAIxD;AAED,qBAAa,gBAAiB,SAAQ,WAAW;gBACpC,OAAO,SAAmD;CAItE;AAED,qBAAa,YAAa,SAAQ,WAAW;gBAChC,OAAO,SAAsB;CAIzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,GAAG,WAAW,CAmBd"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;CAwBb,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAA;AAEpE;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;gBAEX,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAO5D,MAAM;;;;;CAON;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACrC,OAAO,SAA8B;CAIjD;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACrC,OAAO,SAAqB;CAIxC;AAED,qBAAa,uBAAwB,SAAQ,WAAW;gBAC3C,OAAO,SAA4B;CAI/C;AAED,qBAAa,sBAAuB,SAAQ,WAAW;gBAC1C,OAAO,SAAuB;CAI1C;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACrC,OAAO,SAAqC;CAIxD;AAED,qBAAa,gBAAiB,SAAQ,WAAW;gBACpC,OAAO,SAAmD;CAItE;AAED,qBAAa,YAAa,SAAQ,WAAW;gBAChC,OAAO,SAAsB;CAIzC;AAED,qBAAa,yBAA0B,SAAQ,WAAW;gBAExD,OAAO,SAA8C,EACrD,IAAI,CAAC,EAAE,OAAO;CAKf;AAED,qBAAa,qBAAsB,SAAQ,WAAW;gBAEpD,OAAO,SAA+C,EACtD,IAAI,CAAC,EAAE,OAAO;CAKf;AAED,qBAAa,yBAA0B,SAAQ,WAAW;gBAC7C,OAAO,SAAiC,EAAE,IAAI,CAAC,EAAE,OAAO;CAIpE;AAED,qBAAa,kBAAmB,SAAQ,WAAW;gBACtC,OAAO,SAAiC,EAAE,IAAI,CAAC,EAAE,OAAO;CAIpE;AAED,qBAAa,eAAgB,SAAQ,WAAW;gBAE9C,OAAO,SAA6C,EACpD,IAAI,CAAC,EAAE,OAAO;CAKf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,GAAG,WAAW,CA6Bd"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  import type { OneSatConfig, OneSatProvider } from './types';
2
- export type { ConnectResult, OneSatConfig, OneSatProvider, OneSatEvent, EventHandler, RpcMethod, SignTransactionRequest, SignTransactionResult, SignMessageResult, InscribeRequest, InscribeResult, SendOrdinalsRequest, SendResult, CreateListingRequest, ListingResult, PurchaseListingRequest, CancelListingRequest, TransferTokenRequest, BalanceResult, OrdinalOutput, TokenOutput, Utxo, ListOptions, } from './types';
2
+ export type { ConnectResult, OneSatConfig, OneSatProvider, OneSatEvent, EventHandler, TransportMode, MobileFallbackMode, CWIHandshakeReason, CWIWalletStatus, CWITransportName, CWITransportConfig, CWIState, CWIRequestMessage, CWIResponseMessage, CWIStateMessage, CWITransportEvent, CWITransportEventHandler, CWITransport, RpcMethod, SignTransactionRequest, SignTransactionResult, SignMessageResult, InscribeRequest, InscribeResult, SendOrdinalsRequest, SendResult, CreateListingRequest, ListingResult, PurchaseListingRequest, CancelListingRequest, TransferTokenRequest, BalanceResult, OrdinalOutput, TokenOutput, Utxo, ListOptions, } from './types';
3
3
  export { RpcMethods } from './types';
4
- export { ErrorCodes, type ErrorCode, OneSatError, UserRejectedError, WalletLockedError, WalletNotConnectedError, InsufficientFundsError, PopupBlockedError, PopupClosedError, TimeoutError, fromErrorResponse, } from './errors';
4
+ export { ErrorCodes, type ErrorCode, OneSatError, UserRejectedError, WalletLockedError, WalletNotConnectedError, InsufficientFundsError, PopupBlockedError, PopupClosedError, TimeoutError, TransportUnavailableError, FallbackRequiredError, AuthorizationTimeoutError, StateMismatchError, CodeReplayError, fromErrorResponse, } from './errors';
5
5
  export { PROTOCOL_VERSION, MessageTypes, type MessageType, type BaseMessage, type RequestMessage, type ResponseMessage, type ProtocolMessage, createRequest, createResponse, createErrorResponse, isValidMessage, isResponse, } from './messages';
6
6
  export { saveConnection, loadConnection, clearConnection, hasStoredConnection, type StoredConnection, } from './storage';
7
7
  export { parsePopupParams, sendResponse, sendErrorResponse, rejectRequest, walletLockedError, walletNotConnectedError, closePopup, isPopupContext, getPopupContext, type PopupParams, } from './wallet';
8
8
  export { OneSatBrowserProvider } from './provider';
9
9
  export { PopupManager, type PopupConfig, type PendingRequest } from './popup';
10
+ export { AutoTransport, EmbedTransport, RedirectTransport, createAutoTransport, createEmbedTransport, createRedirectTransport, } from './transport';
10
11
  /**
11
12
  * Check if the OneSat provider is injected by browser extension
12
13
  * Extensions inject window.onesat with isOneSat: true
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAG3D,YAAY,EACX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,WAAW,EACX,IAAI,EACJ,WAAW,GACX,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,EACN,UAAU,EACV,KAAK,SAAS,EACd,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,GACjB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACN,gBAAgB,EAChB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,GACV,MAAM,YAAY,CAAA;AAGnB,OAAO,EACN,cAAc,EACd,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,KAAK,gBAAgB,GACrB,MAAM,WAAW,CAAA;AAGlB,OAAO,EACN,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,eAAe,EACf,KAAK,WAAW,GAChB,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7E;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAK9D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAgBlE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAE/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAuBrE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAG3D,YAAY,EACX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACZ,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,WAAW,EACX,IAAI,EACJ,WAAW,GACX,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,EACN,UAAU,EACV,KAAK,SAAS,EACd,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GACjB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACN,gBAAgB,EAChB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,GACV,MAAM,YAAY,CAAA;AAGnB,OAAO,EACN,cAAc,EACd,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,KAAK,gBAAgB,GACrB,MAAM,WAAW,CAAA;AAGlB,OAAO,EACN,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,eAAe,EACf,KAAK,WAAW,GAChB,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7E,OAAO,EACN,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACvB,MAAM,aAAa,CAAA;AAEpB;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAK9D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAgBlE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAE/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAuBrE"}
package/dist/index.js CHANGED
@@ -16,7 +16,7 @@ var __toESM = (mod, isNodeMode, target) => {
16
16
  };
17
17
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
18
18
 
19
- // ../../node_modules/eventemitter3/index.js
19
+ // ../../node_modules/.bun/eventemitter3@5.0.4/node_modules/eventemitter3/index.js
20
20
  var require_eventemitter3 = __commonJS((exports, module) => {
21
21
  var has = Object.prototype.hasOwnProperty;
22
22
  var prefix = "~";
@@ -194,7 +194,7 @@ var require_eventemitter3 = __commonJS((exports, module) => {
194
194
  }
195
195
  });
196
196
 
197
- // ../../node_modules/eventemitter3/index.mjs
197
+ // ../../node_modules/.bun/eventemitter3@5.0.4/node_modules/eventemitter3/index.mjs
198
198
  var import__ = __toESM(require_eventemitter3(), 1);
199
199
  var eventemitter3_default = import__.default;
200
200
 
@@ -214,7 +214,12 @@ var ErrorCodes = {
214
214
  POPUP_CLOSED: 4007,
215
215
  TIMEOUT: 4008,
216
216
  NETWORK_ERROR: 4009,
217
- ORIGIN_NOT_ALLOWED: 4010
217
+ ORIGIN_NOT_ALLOWED: 4010,
218
+ TRANSPORT_UNAVAILABLE: 4011,
219
+ FALLBACK_REQUIRED: 4012,
220
+ AUTHORIZATION_TIMEOUT: 4013,
221
+ STATE_MISMATCH: 4014,
222
+ CODE_REPLAY: 4015
218
223
  };
219
224
 
220
225
  class OneSatError extends Error {
@@ -283,6 +288,41 @@ class TimeoutError extends OneSatError {
283
288
  this.name = "TimeoutError";
284
289
  }
285
290
  }
291
+
292
+ class TransportUnavailableError extends OneSatError {
293
+ constructor(message = "No available transport for wallet request", data) {
294
+ super(ErrorCodes.TRANSPORT_UNAVAILABLE, message, data);
295
+ this.name = "TransportUnavailableError";
296
+ }
297
+ }
298
+
299
+ class FallbackRequiredError extends OneSatError {
300
+ constructor(message = "Embed transport requires redirect fallback", data) {
301
+ super(ErrorCodes.FALLBACK_REQUIRED, message, data);
302
+ this.name = "FallbackRequiredError";
303
+ }
304
+ }
305
+
306
+ class AuthorizationTimeoutError extends OneSatError {
307
+ constructor(message = "Authorization flow timed out", data) {
308
+ super(ErrorCodes.AUTHORIZATION_TIMEOUT, message, data);
309
+ this.name = "AuthorizationTimeoutError";
310
+ }
311
+ }
312
+
313
+ class StateMismatchError extends OneSatError {
314
+ constructor(message = "Authorization state mismatch", data) {
315
+ super(ErrorCodes.STATE_MISMATCH, message, data);
316
+ this.name = "StateMismatchError";
317
+ }
318
+ }
319
+
320
+ class CodeReplayError extends OneSatError {
321
+ constructor(message = "Authorization code has already been used", data) {
322
+ super(ErrorCodes.CODE_REPLAY, message, data);
323
+ this.name = "CodeReplayError";
324
+ }
325
+ }
286
326
  function fromErrorResponse(error) {
287
327
  switch (error.code) {
288
328
  case ErrorCodes.USER_REJECTED:
@@ -299,6 +339,16 @@ function fromErrorResponse(error) {
299
339
  return new PopupClosedError(error.message);
300
340
  case ErrorCodes.TIMEOUT:
301
341
  return new TimeoutError(error.message);
342
+ case ErrorCodes.TRANSPORT_UNAVAILABLE:
343
+ return new TransportUnavailableError(error.message, error.data);
344
+ case ErrorCodes.FALLBACK_REQUIRED:
345
+ return new FallbackRequiredError(error.message, error.data);
346
+ case ErrorCodes.AUTHORIZATION_TIMEOUT:
347
+ return new AuthorizationTimeoutError(error.message, error.data);
348
+ case ErrorCodes.STATE_MISMATCH:
349
+ return new StateMismatchError(error.message, error.data);
350
+ case ErrorCodes.CODE_REPLAY:
351
+ return new CodeReplayError(error.message, error.data);
302
352
  default:
303
353
  return new OneSatError(error.code, error.message, error.data);
304
354
  }
@@ -716,6 +766,675 @@ function getPopupContext(searchParams) {
716
766
  }
717
767
  return { requestId, origin, method, appName, params };
718
768
  }
769
+ // src/transport.ts
770
+ var DEFAULT_WALLET_URL = "https://1sat.market";
771
+ var DEFAULT_IFRAME_PATH = "/wallet/cwi";
772
+ var DEFAULT_AUTHORIZE_INIT_PATH = "/api/cwi/authorize/init";
773
+ var DEFAULT_TOKEN_PATH = "/api/cwi/token";
774
+ var DEFAULT_REQUEST_TIMEOUT_MS = 120000;
775
+ var DEFAULT_DESKTOP_HANDSHAKE_TIMEOUT_MS = 1800;
776
+ var DEFAULT_MOBILE_HANDSHAKE_TIMEOUT_MS = 900;
777
+ var DEFAULT_DESKTOP_MAX_RETRIES = 2;
778
+ var DEFAULT_MOBILE_MAX_RETRIES = 1;
779
+ var REDIRECT_PENDING_KEY = "onesat:cwi:redirect:pending";
780
+ var isRecord = (value) => typeof value === "object" && value !== null;
781
+ var isLikelyMobileRuntime = () => {
782
+ if (typeof navigator === "undefined")
783
+ return false;
784
+ if ("userAgentData" in navigator && typeof navigator.userAgentData === "object" && navigator.userAgentData !== null && "mobile" in navigator.userAgentData) {
785
+ const maybeMobile = navigator.userAgentData.mobile;
786
+ if (typeof maybeMobile === "boolean") {
787
+ return maybeMobile;
788
+ }
789
+ }
790
+ const userAgent = navigator.userAgent ?? "";
791
+ return /Android|iPhone|iPad|iPod|Mobile/i.test(userAgent);
792
+ };
793
+ var createId = () => {
794
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
795
+ return crypto.randomUUID();
796
+ }
797
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 14)}`;
798
+ };
799
+ var base64UrlEncodeBytes = (input) => {
800
+ let binary = "";
801
+ for (const byte of input) {
802
+ binary += String.fromCharCode(byte);
803
+ }
804
+ return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
805
+ };
806
+ var randomBase64Url = (length = 64) => {
807
+ const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
808
+ if (typeof crypto !== "undefined" && typeof crypto.getRandomValues === "function") {
809
+ const bytes = new Uint8Array(length);
810
+ crypto.getRandomValues(bytes);
811
+ return Array.from(bytes, (byte) => charset[byte % charset.length]).join("");
812
+ }
813
+ return Array.from({ length }, () => {
814
+ const index = Math.floor(Math.random() * charset.length);
815
+ return charset[index];
816
+ }).join("");
817
+ };
818
+ var computeS256 = async (verifier) => {
819
+ if (typeof crypto === "undefined" || typeof crypto.subtle === "undefined" || typeof TextEncoder === "undefined") {
820
+ return verifier;
821
+ }
822
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(verifier));
823
+ return base64UrlEncodeBytes(new Uint8Array(digest));
824
+ };
825
+ var toSearchParams = (searchParams) => {
826
+ if (searchParams instanceof URLSearchParams) {
827
+ return searchParams;
828
+ }
829
+ if (typeof searchParams === "string") {
830
+ const trimmed = searchParams.startsWith("?") ? searchParams.slice(1) : searchParams;
831
+ return new URLSearchParams(trimmed);
832
+ }
833
+ if (typeof window !== "undefined") {
834
+ return new URLSearchParams(window.location.search);
835
+ }
836
+ return new URLSearchParams;
837
+ };
838
+ var normalizeReason = (value) => {
839
+ if (value === "channel_unavailable" || value === "wallet_tab_unreachable" || value === "wallet_locked") {
840
+ return value;
841
+ }
842
+ return;
843
+ };
844
+ var normalizeState = (state) => ({
845
+ status: state.status === "checking" || state.status === "locked" || state.status === "unlocked" || state.status === "no-wallet" ? state.status : undefined,
846
+ hasPermission: typeof state.hasPermission === "boolean" ? state.hasPermission : undefined,
847
+ transport: state.transport === "embed" ? "embed" : undefined,
848
+ fallbackRecommended: typeof state.fallbackRecommended === "boolean" ? state.fallbackRecommended : undefined,
849
+ reason: normalizeReason(state.reason)
850
+ });
851
+ var isCWIStateMessage = (value) => {
852
+ if (!isRecord(value))
853
+ return false;
854
+ if (value.type !== "CWI")
855
+ return false;
856
+ if (!isRecord(value.cwiState))
857
+ return false;
858
+ return true;
859
+ };
860
+ var isCWIResponseMessage = (value) => {
861
+ if (!isRecord(value))
862
+ return false;
863
+ if (value.type !== "CWI")
864
+ return false;
865
+ if (value.isInvocation !== false)
866
+ return false;
867
+ if (typeof value.id !== "string")
868
+ return false;
869
+ return true;
870
+ };
871
+ var toCWIError = (message) => new OneSatError(ErrorCodes.INTERNAL_ERROR, message.description ?? "Wallet request failed", { code: message.code });
872
+ var extractErrorDescription = (value) => {
873
+ if (!isRecord(value))
874
+ return;
875
+ const description = value.error_description;
876
+ if (typeof description === "string" && description.length > 0) {
877
+ return description;
878
+ }
879
+ const fallback = value.error;
880
+ if (typeof fallback === "string" && fallback.length > 0) {
881
+ return fallback;
882
+ }
883
+ return;
884
+ };
885
+ var emitTransportEvent = (emitter, event) => {
886
+ emitter.emit("transport", event);
887
+ };
888
+ var withFetchTimeout = async (input, init, timeoutMs, onTimeout) => {
889
+ const controller = new AbortController;
890
+ const timeoutId = setTimeout(() => {
891
+ controller.abort();
892
+ }, timeoutMs);
893
+ try {
894
+ return await fetch(input, {
895
+ ...init,
896
+ signal: controller.signal
897
+ });
898
+ } catch (error) {
899
+ if (error instanceof Error && error.name === "AbortError") {
900
+ throw onTimeout();
901
+ }
902
+ throw error;
903
+ } finally {
904
+ clearTimeout(timeoutId);
905
+ }
906
+ };
907
+
908
+ class EmbedTransport {
909
+ mode = "embed";
910
+ walletOrigin;
911
+ iframeUrl;
912
+ requestTimeoutMs;
913
+ handshakeTimeoutMs;
914
+ iframe = null;
915
+ pendingInvocations = new Map;
916
+ stateWaiters = new Set;
917
+ lastState = null;
918
+ events = new eventemitter3_default;
919
+ isDestroyed = false;
920
+ constructor(config) {
921
+ const walletUrl = config?.walletUrl ?? DEFAULT_WALLET_URL;
922
+ const iframePath = config?.iframePath ?? DEFAULT_IFRAME_PATH;
923
+ this.walletOrigin = new URL(walletUrl).origin;
924
+ this.iframeUrl = new URL(iframePath, walletUrl).toString();
925
+ this.requestTimeoutMs = config?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MS;
926
+ this.handshakeTimeoutMs = config?.handshakeTimeoutMs ?? (isLikelyMobileRuntime() ? DEFAULT_MOBILE_HANDSHAKE_TIMEOUT_MS : DEFAULT_DESKTOP_HANDSHAKE_TIMEOUT_MS);
927
+ if (typeof window !== "undefined") {
928
+ window.addEventListener("message", this.handleMessage);
929
+ }
930
+ }
931
+ handleMessage = (event) => {
932
+ if (this.isDestroyed)
933
+ return;
934
+ if (event.origin !== this.walletOrigin)
935
+ return;
936
+ if (!this.iframe || event.source !== this.iframe.contentWindow)
937
+ return;
938
+ if (isCWIStateMessage(event.data)) {
939
+ const state = normalizeState(event.data.cwiState);
940
+ this.lastState = state;
941
+ this.resolveStateWaiters(state);
942
+ this.updateIframeVisibility(state.hasPermission === true);
943
+ if (state.fallbackRecommended) {
944
+ emitTransportEvent(this.events, {
945
+ type: "fallback",
946
+ transport: "embed",
947
+ reason: state.reason ?? "channel_unavailable"
948
+ });
949
+ }
950
+ return;
951
+ }
952
+ if (!isCWIResponseMessage(event.data))
953
+ return;
954
+ const pending = this.pendingInvocations.get(event.data.id);
955
+ if (!pending)
956
+ return;
957
+ this.pendingInvocations.delete(event.data.id);
958
+ clearTimeout(pending.timeoutId);
959
+ if (event.data.status === "error") {
960
+ pending.reject(toCWIError(event.data));
961
+ return;
962
+ }
963
+ pending.resolve(event.data.result);
964
+ };
965
+ ensureIframe() {
966
+ if (typeof window === "undefined" || typeof document === "undefined") {
967
+ throw new TransportUnavailableError("Embed transport requires a browser");
968
+ }
969
+ if (this.iframe?.contentWindow) {
970
+ return this.iframe;
971
+ }
972
+ const iframe = document.createElement("iframe");
973
+ iframe.src = this.iframeUrl;
974
+ iframe.setAttribute("aria-hidden", "true");
975
+ iframe.style.position = "fixed";
976
+ iframe.style.top = "0";
977
+ iframe.style.left = "0";
978
+ iframe.style.width = "0";
979
+ iframe.style.height = "0";
980
+ iframe.style.border = "0";
981
+ iframe.style.opacity = "0";
982
+ iframe.style.pointerEvents = "none";
983
+ const parent = document.body ?? document.documentElement;
984
+ if (!parent) {
985
+ throw new TransportUnavailableError("Unable to mount CWI iframe in document");
986
+ }
987
+ parent.appendChild(iframe);
988
+ this.iframe = iframe;
989
+ this.updateIframeVisibility(false);
990
+ return iframe;
991
+ }
992
+ updateIframeVisibility(showPermission) {
993
+ const iframe = this.iframe;
994
+ if (!iframe)
995
+ return;
996
+ iframe.style.zIndex = "2147483647";
997
+ if (showPermission) {
998
+ iframe.style.width = "100%";
999
+ iframe.style.height = "100%";
1000
+ iframe.style.opacity = "1";
1001
+ iframe.style.pointerEvents = "auto";
1002
+ return;
1003
+ }
1004
+ iframe.style.width = "0";
1005
+ iframe.style.height = "0";
1006
+ iframe.style.opacity = "0";
1007
+ iframe.style.pointerEvents = "none";
1008
+ }
1009
+ resolveStateWaiters(state) {
1010
+ for (const waiter of this.stateWaiters) {
1011
+ clearTimeout(waiter.timeoutId);
1012
+ waiter.resolve(state);
1013
+ }
1014
+ this.stateWaiters.clear();
1015
+ }
1016
+ async waitForState(timeoutMs) {
1017
+ if (this.lastState) {
1018
+ return this.lastState;
1019
+ }
1020
+ return new Promise((resolve, reject) => {
1021
+ const waiter = {
1022
+ resolve,
1023
+ reject,
1024
+ timeoutId: setTimeout(() => {
1025
+ this.stateWaiters.delete(waiter);
1026
+ reject(new AuthorizationTimeoutError("Embed handshake timed out"));
1027
+ }, timeoutMs)
1028
+ };
1029
+ this.stateWaiters.add(waiter);
1030
+ });
1031
+ }
1032
+ async handshake(timeoutMs = this.handshakeTimeoutMs) {
1033
+ this.ensureIframe();
1034
+ const state = await this.waitForState(timeoutMs);
1035
+ if (state.fallbackRecommended) {
1036
+ throw new FallbackRequiredError(`Embed fallback recommended${state.reason ? ` (${state.reason})` : ""}`, { reason: state.reason });
1037
+ }
1038
+ return state;
1039
+ }
1040
+ async invoke(call, args) {
1041
+ if (typeof call !== "string" || call.length === 0) {
1042
+ throw new OneSatError(ErrorCodes.INVALID_REQUEST, "Invalid CWI call");
1043
+ }
1044
+ await this.handshake();
1045
+ const iframe = this.ensureIframe();
1046
+ const target = iframe.contentWindow;
1047
+ if (!target) {
1048
+ throw new TransportUnavailableError("CWI iframe is not reachable");
1049
+ }
1050
+ const requestId = createId();
1051
+ const request = {
1052
+ type: "CWI",
1053
+ isInvocation: true,
1054
+ id: requestId,
1055
+ call,
1056
+ args
1057
+ };
1058
+ return new Promise((resolve, reject) => {
1059
+ const timeoutId = setTimeout(() => {
1060
+ this.pendingInvocations.delete(requestId);
1061
+ reject(new AuthorizationTimeoutError(`CWI request timed out: ${call}`));
1062
+ }, this.requestTimeoutMs);
1063
+ this.pendingInvocations.set(requestId, {
1064
+ resolve,
1065
+ reject,
1066
+ timeoutId
1067
+ });
1068
+ try {
1069
+ target.postMessage(request, this.walletOrigin);
1070
+ emitTransportEvent(this.events, {
1071
+ type: "selected",
1072
+ transport: "embed"
1073
+ });
1074
+ } catch (error) {
1075
+ clearTimeout(timeoutId);
1076
+ this.pendingInvocations.delete(requestId);
1077
+ reject(new TransportUnavailableError("Failed to post message to CWI iframe", {
1078
+ cause: error instanceof Error ? error.message : String(error)
1079
+ }));
1080
+ }
1081
+ });
1082
+ }
1083
+ async resume() {
1084
+ return null;
1085
+ }
1086
+ on(event, handler) {
1087
+ this.events.on(event, handler);
1088
+ }
1089
+ off(event, handler) {
1090
+ this.events.off(event, handler);
1091
+ }
1092
+ destroy() {
1093
+ if (this.isDestroyed)
1094
+ return;
1095
+ this.isDestroyed = true;
1096
+ if (typeof window !== "undefined") {
1097
+ window.removeEventListener("message", this.handleMessage);
1098
+ }
1099
+ for (const pending of this.pendingInvocations.values()) {
1100
+ clearTimeout(pending.timeoutId);
1101
+ pending.reject(new TransportUnavailableError("Embed transport destroyed"));
1102
+ }
1103
+ this.pendingInvocations.clear();
1104
+ for (const waiter of this.stateWaiters) {
1105
+ clearTimeout(waiter.timeoutId);
1106
+ waiter.reject(new TransportUnavailableError("Embed transport destroyed"));
1107
+ }
1108
+ this.stateWaiters.clear();
1109
+ const iframe = this.iframe;
1110
+ if (iframe?.parentNode) {
1111
+ iframe.parentNode.removeChild(iframe);
1112
+ }
1113
+ this.iframe = null;
1114
+ }
1115
+ }
1116
+
1117
+ class RedirectTransport {
1118
+ mode = "redirect";
1119
+ authorizeInitUrl;
1120
+ tokenUrl;
1121
+ redirectUri;
1122
+ timeoutMs;
1123
+ events = new eventemitter3_default;
1124
+ constructor(config) {
1125
+ const walletUrl = config?.walletUrl ?? DEFAULT_WALLET_URL;
1126
+ const authorizeInitPath = config?.authorizeInitPath ?? DEFAULT_AUTHORIZE_INIT_PATH;
1127
+ const tokenPath = config?.tokenPath ?? DEFAULT_TOKEN_PATH;
1128
+ this.authorizeInitUrl = new URL(authorizeInitPath, walletUrl).toString();
1129
+ this.tokenUrl = new URL(tokenPath, walletUrl).toString();
1130
+ this.timeoutMs = config?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MS;
1131
+ if (config?.redirectUri) {
1132
+ this.redirectUri = config.redirectUri;
1133
+ } else if (typeof window !== "undefined") {
1134
+ this.redirectUri = `${window.location.origin}${window.location.pathname}`;
1135
+ } else {
1136
+ this.redirectUri = null;
1137
+ }
1138
+ }
1139
+ savePendingSession(session) {
1140
+ if (typeof sessionStorage === "undefined")
1141
+ return;
1142
+ sessionStorage.setItem(REDIRECT_PENDING_KEY, JSON.stringify(session));
1143
+ }
1144
+ loadPendingSession() {
1145
+ if (typeof sessionStorage === "undefined")
1146
+ return null;
1147
+ const raw = sessionStorage.getItem(REDIRECT_PENDING_KEY);
1148
+ if (!raw)
1149
+ return null;
1150
+ try {
1151
+ const parsed = JSON.parse(raw);
1152
+ if (typeof parsed.state !== "string" || typeof parsed.codeVerifier !== "string" || typeof parsed.redirectUri !== "string" || typeof parsed.createdAt !== "number") {
1153
+ return null;
1154
+ }
1155
+ return parsed;
1156
+ } catch {
1157
+ return null;
1158
+ }
1159
+ }
1160
+ clearPendingSession() {
1161
+ if (typeof sessionStorage === "undefined")
1162
+ return;
1163
+ sessionStorage.removeItem(REDIRECT_PENDING_KEY);
1164
+ }
1165
+ clearAuthQueryParams() {
1166
+ if (typeof window === "undefined" || typeof history === "undefined")
1167
+ return;
1168
+ const url = new URL(window.location.href);
1169
+ let changed = false;
1170
+ for (const key of ["code", "state", "error", "error_description"]) {
1171
+ if (url.searchParams.has(key)) {
1172
+ url.searchParams.delete(key);
1173
+ changed = true;
1174
+ }
1175
+ }
1176
+ if (changed) {
1177
+ history.replaceState(history.state, "", url.toString());
1178
+ }
1179
+ }
1180
+ async initializeAuthorization(call, args) {
1181
+ if (typeof window === "undefined") {
1182
+ throw new TransportUnavailableError("Redirect transport requires a browser");
1183
+ }
1184
+ if (!this.redirectUri) {
1185
+ throw new TransportUnavailableError("redirectUri is required for redirect fallback");
1186
+ }
1187
+ const state = randomBase64Url(48);
1188
+ const nonce = randomBase64Url(48);
1189
+ const verifier = randomBase64Url(64);
1190
+ const hasSubtle = typeof crypto !== "undefined" && typeof crypto.subtle !== "undefined" && typeof TextEncoder !== "undefined";
1191
+ const method = hasSubtle ? "S256" : "plain";
1192
+ const codeChallenge = await computeS256(verifier);
1193
+ const body = {
1194
+ call,
1195
+ args: args ?? {},
1196
+ redirect_uri: this.redirectUri,
1197
+ state,
1198
+ nonce,
1199
+ code_challenge: codeChallenge,
1200
+ code_challenge_method: method
1201
+ };
1202
+ const response = await withFetchTimeout(this.authorizeInitUrl, {
1203
+ method: "POST",
1204
+ headers: { "content-type": "application/json" },
1205
+ body: JSON.stringify(body),
1206
+ credentials: "omit"
1207
+ }, this.timeoutMs, () => new AuthorizationTimeoutError("authorize/init timed out"));
1208
+ const payload = await response.json().catch(() => ({}));
1209
+ if (!response.ok || !isRecord(payload)) {
1210
+ const description = extractErrorDescription(payload) ?? "Failed to initialize redirect authorization";
1211
+ throw new OneSatError(ErrorCodes.INVALID_REQUEST, description, payload);
1212
+ }
1213
+ const authorizeUrl = payload.authorizeUrl;
1214
+ if (typeof authorizeUrl !== "string" || authorizeUrl.length === 0) {
1215
+ throw new TransportUnavailableError("authorize/init did not return authorizeUrl");
1216
+ }
1217
+ return {
1218
+ authorizeUrl,
1219
+ session: {
1220
+ state,
1221
+ codeVerifier: verifier,
1222
+ redirectUri: this.redirectUri,
1223
+ createdAt: Date.now()
1224
+ }
1225
+ };
1226
+ }
1227
+ async invoke(call, args) {
1228
+ if (typeof call !== "string" || call.length === 0) {
1229
+ throw new OneSatError(ErrorCodes.INVALID_REQUEST, "Invalid CWI call");
1230
+ }
1231
+ if (typeof window === "undefined") {
1232
+ throw new TransportUnavailableError("Redirect transport requires a browser");
1233
+ }
1234
+ const { authorizeUrl, session } = await this.initializeAuthorization(call, args);
1235
+ this.savePendingSession(session);
1236
+ emitTransportEvent(this.events, {
1237
+ type: "selected",
1238
+ transport: "redirect"
1239
+ });
1240
+ window.location.assign(authorizeUrl);
1241
+ return new Promise(() => {});
1242
+ }
1243
+ async exchangeCode(code, session) {
1244
+ const response = await withFetchTimeout(this.tokenUrl, {
1245
+ method: "POST",
1246
+ headers: { "content-type": "application/json" },
1247
+ body: JSON.stringify({
1248
+ code,
1249
+ code_verifier: session.codeVerifier,
1250
+ redirect_uri: session.redirectUri
1251
+ }),
1252
+ credentials: "omit"
1253
+ }, this.timeoutMs, () => new AuthorizationTimeoutError("token exchange timed out"));
1254
+ const payload = await response.json().catch(() => ({}));
1255
+ if (!response.ok || !isRecord(payload)) {
1256
+ const description = extractErrorDescription(payload) ?? "Authorization code exchange failed";
1257
+ if (/already_consumed|replay|consumed/i.test(description)) {
1258
+ throw new CodeReplayError(description);
1259
+ }
1260
+ throw new OneSatError(ErrorCodes.INTERNAL_ERROR, description, payload);
1261
+ }
1262
+ if ("error" in payload) {
1263
+ const description = extractErrorDescription(payload) ?? "Authorization request failed";
1264
+ if (/already_consumed|replay|consumed/i.test(description)) {
1265
+ throw new CodeReplayError(description);
1266
+ }
1267
+ throw new OneSatError(ErrorCodes.INTERNAL_ERROR, description, payload);
1268
+ }
1269
+ return payload.result;
1270
+ }
1271
+ async resume(searchParams) {
1272
+ const params = toSearchParams(searchParams);
1273
+ const code = params.get("code");
1274
+ const state = params.get("state");
1275
+ const error = params.get("error");
1276
+ const errorDescription = params.get("error_description");
1277
+ if (!code && !error) {
1278
+ return null;
1279
+ }
1280
+ const session = this.loadPendingSession();
1281
+ if (!session || !state || state !== session.state) {
1282
+ this.clearPendingSession();
1283
+ this.clearAuthQueryParams();
1284
+ throw new StateMismatchError("Redirect callback state mismatch");
1285
+ }
1286
+ if (error) {
1287
+ this.clearPendingSession();
1288
+ this.clearAuthQueryParams();
1289
+ const payload = {
1290
+ error,
1291
+ error_description: errorDescription ?? undefined
1292
+ };
1293
+ if (error === "access_denied") {
1294
+ throw new OneSatError(ErrorCodes.USER_REJECTED, errorDescription ?? "User denied authorization", payload);
1295
+ }
1296
+ throw new OneSatError(ErrorCodes.INTERNAL_ERROR, errorDescription ?? `Authorization callback error: ${error}`, payload);
1297
+ }
1298
+ if (!code) {
1299
+ this.clearPendingSession();
1300
+ this.clearAuthQueryParams();
1301
+ throw new TransportUnavailableError("Redirect callback missing authorization code");
1302
+ }
1303
+ const result = await this.exchangeCode(code, session);
1304
+ this.clearPendingSession();
1305
+ this.clearAuthQueryParams();
1306
+ return result;
1307
+ }
1308
+ on(event, handler) {
1309
+ this.events.on(event, handler);
1310
+ }
1311
+ off(event, handler) {
1312
+ this.events.off(event, handler);
1313
+ }
1314
+ destroy() {
1315
+ this.clearPendingSession();
1316
+ }
1317
+ }
1318
+
1319
+ class AutoTransport {
1320
+ mode = "auto";
1321
+ embed;
1322
+ redirect;
1323
+ events = new eventemitter3_default;
1324
+ selectedTransport = null;
1325
+ mobileFallback;
1326
+ maxEmbedRetries;
1327
+ constructor(config) {
1328
+ const isMobile = isLikelyMobileRuntime();
1329
+ this.mobileFallback = config?.mobileFallback ?? (isMobile ? "auto" : "embed-only");
1330
+ const handshakeTimeoutMs = config?.handshakeTimeoutMs ?? (isMobile ? DEFAULT_MOBILE_HANDSHAKE_TIMEOUT_MS : DEFAULT_DESKTOP_HANDSHAKE_TIMEOUT_MS);
1331
+ this.maxEmbedRetries = Math.max(1, config?.maxEmbedRetries ?? (isMobile ? DEFAULT_MOBILE_MAX_RETRIES : DEFAULT_DESKTOP_MAX_RETRIES));
1332
+ this.embed = new EmbedTransport({
1333
+ ...config,
1334
+ handshakeTimeoutMs
1335
+ });
1336
+ this.redirect = new RedirectTransport(config);
1337
+ }
1338
+ selectTransport(transport, reason, kind = "selected") {
1339
+ if (this.selectedTransport === transport && kind === "selected")
1340
+ return;
1341
+ const previous = this.selectedTransport;
1342
+ this.selectedTransport = transport;
1343
+ emitTransportEvent(this.events, {
1344
+ type: kind,
1345
+ transport,
1346
+ previousTransport: previous ?? undefined,
1347
+ reason
1348
+ });
1349
+ }
1350
+ shouldTryRedirect() {
1351
+ return this.mobileFallback !== "embed-only";
1352
+ }
1353
+ shouldUseRedirectDirectly() {
1354
+ return this.mobileFallback === "redirect";
1355
+ }
1356
+ shouldRetryEmbed(error) {
1357
+ return error instanceof AuthorizationTimeoutError || error instanceof TransportUnavailableError;
1358
+ }
1359
+ shouldFallbackToRedirect(error) {
1360
+ return error instanceof FallbackRequiredError || error instanceof AuthorizationTimeoutError || error instanceof TransportUnavailableError;
1361
+ }
1362
+ toFallbackReason(error) {
1363
+ if (error instanceof FallbackRequiredError) {
1364
+ const data = error.data;
1365
+ if (isRecord(data)) {
1366
+ const reason = normalizeReason(data.reason);
1367
+ if (reason) {
1368
+ return reason;
1369
+ }
1370
+ }
1371
+ return "channel_unavailable";
1372
+ }
1373
+ if (error instanceof AuthorizationTimeoutError) {
1374
+ return "wallet_tab_unreachable";
1375
+ }
1376
+ return "channel_unavailable";
1377
+ }
1378
+ async invoke(call, args) {
1379
+ if (this.selectedTransport === "redirect" || this.shouldUseRedirectDirectly()) {
1380
+ this.selectTransport("redirect", this.shouldUseRedirectDirectly() ? "mobile_fallback_redirect" : undefined);
1381
+ return this.redirect.invoke(call, args);
1382
+ }
1383
+ try {
1384
+ const result = await this.embed.invoke(call, args);
1385
+ this.selectTransport("embed");
1386
+ return result;
1387
+ } catch (error) {
1388
+ let resolvedError = error instanceof Error ? error : new TransportUnavailableError(String(error));
1389
+ if (this.selectedTransport !== "embed" && this.shouldRetryEmbed(resolvedError) && this.maxEmbedRetries > 1) {
1390
+ for (let attempt = 2;attempt <= this.maxEmbedRetries; attempt += 1) {
1391
+ try {
1392
+ const result = await this.embed.invoke(call, args);
1393
+ this.selectTransport("embed", `embed_retry_${attempt}`);
1394
+ return result;
1395
+ } catch (retryError) {
1396
+ if (!(retryError instanceof Error)) {
1397
+ throw retryError;
1398
+ }
1399
+ resolvedError = retryError;
1400
+ if (!this.shouldRetryEmbed(retryError)) {
1401
+ break;
1402
+ }
1403
+ }
1404
+ }
1405
+ }
1406
+ if (!this.shouldFallbackToRedirect(resolvedError)) {
1407
+ throw resolvedError;
1408
+ }
1409
+ if (!this.shouldTryRedirect()) {
1410
+ throw resolvedError;
1411
+ }
1412
+ const reason = this.toFallbackReason(resolvedError);
1413
+ this.selectTransport("redirect", reason, "fallback");
1414
+ return this.redirect.invoke(call, args);
1415
+ }
1416
+ }
1417
+ async resume(searchParams) {
1418
+ const result = await this.redirect.resume(searchParams);
1419
+ if (result !== null) {
1420
+ this.selectTransport("redirect", "redirect_callback");
1421
+ }
1422
+ return result;
1423
+ }
1424
+ on(event, handler) {
1425
+ this.events.on(event, handler);
1426
+ }
1427
+ off(event, handler) {
1428
+ this.events.off(event, handler);
1429
+ }
1430
+ destroy() {
1431
+ this.embed.destroy();
1432
+ this.redirect.destroy();
1433
+ }
1434
+ }
1435
+ var createEmbedTransport = (config) => new EmbedTransport(config);
1436
+ var createRedirectTransport = (config) => new RedirectTransport(config);
1437
+ var createAutoTransport = (config) => new AutoTransport(config);
719
1438
 
720
1439
  // src/index.ts
721
1440
  function isOneSatInjected() {
@@ -786,15 +1505,21 @@ export {
786
1505
  fromErrorResponse,
787
1506
  createResponse,
788
1507
  createRequest,
1508
+ createRedirectTransport,
789
1509
  createOneSat,
790
1510
  createErrorResponse,
1511
+ createEmbedTransport,
1512
+ createAutoTransport,
791
1513
  closePopup,
792
1514
  clearConnection,
793
1515
  WalletNotConnectedError,
794
1516
  WalletLockedError,
795
1517
  UserRejectedError,
1518
+ TransportUnavailableError,
796
1519
  TimeoutError,
1520
+ StateMismatchError,
797
1521
  RpcMethods,
1522
+ RedirectTransport,
798
1523
  PopupManager,
799
1524
  PopupClosedError,
800
1525
  PopupBlockedError,
@@ -803,5 +1528,10 @@ export {
803
1528
  OneSatBrowserProvider,
804
1529
  MessageTypes,
805
1530
  InsufficientFundsError,
806
- ErrorCodes
1531
+ FallbackRequiredError,
1532
+ ErrorCodes,
1533
+ EmbedTransport,
1534
+ CodeReplayError,
1535
+ AutoTransport,
1536
+ AuthorizationTimeoutError
807
1537
  };
@@ -0,0 +1,71 @@
1
+ import type { CWIState, CWITransport, CWITransportConfig, CWITransportEventHandler } from './types';
2
+ export declare class EmbedTransport implements CWITransport {
3
+ readonly mode: "embed";
4
+ private walletOrigin;
5
+ private iframeUrl;
6
+ private requestTimeoutMs;
7
+ private handshakeTimeoutMs;
8
+ private iframe;
9
+ private pendingInvocations;
10
+ private stateWaiters;
11
+ private lastState;
12
+ private events;
13
+ private isDestroyed;
14
+ constructor(config?: CWITransportConfig);
15
+ private handleMessage;
16
+ private ensureIframe;
17
+ private updateIframeVisibility;
18
+ private resolveStateWaiters;
19
+ private waitForState;
20
+ handshake(timeoutMs?: number): Promise<CWIState>;
21
+ invoke<TResult = unknown>(call: string, args?: unknown): Promise<TResult>;
22
+ resume<TResult = unknown>(): Promise<TResult | null>;
23
+ on(event: 'transport', handler: CWITransportEventHandler): void;
24
+ off(event: 'transport', handler: CWITransportEventHandler): void;
25
+ destroy(): void;
26
+ }
27
+ export declare class RedirectTransport implements CWITransport {
28
+ readonly mode: "redirect";
29
+ private authorizeInitUrl;
30
+ private tokenUrl;
31
+ private redirectUri;
32
+ private timeoutMs;
33
+ private events;
34
+ constructor(config?: CWITransportConfig);
35
+ private savePendingSession;
36
+ private loadPendingSession;
37
+ private clearPendingSession;
38
+ private clearAuthQueryParams;
39
+ private initializeAuthorization;
40
+ invoke<TResult = unknown>(call: string, args?: unknown): Promise<TResult>;
41
+ private exchangeCode;
42
+ resume<TResult = unknown>(searchParams?: URLSearchParams | string): Promise<TResult | null>;
43
+ on(event: 'transport', handler: CWITransportEventHandler): void;
44
+ off(event: 'transport', handler: CWITransportEventHandler): void;
45
+ destroy(): void;
46
+ }
47
+ export declare class AutoTransport implements CWITransport {
48
+ readonly mode: "auto";
49
+ private embed;
50
+ private redirect;
51
+ private events;
52
+ private selectedTransport;
53
+ private mobileFallback;
54
+ private maxEmbedRetries;
55
+ constructor(config?: CWITransportConfig);
56
+ private selectTransport;
57
+ private shouldTryRedirect;
58
+ private shouldUseRedirectDirectly;
59
+ private shouldRetryEmbed;
60
+ private shouldFallbackToRedirect;
61
+ private toFallbackReason;
62
+ invoke<TResult = unknown>(call: string, args?: unknown): Promise<TResult>;
63
+ resume<TResult = unknown>(searchParams?: URLSearchParams | string): Promise<TResult | null>;
64
+ on(event: 'transport', handler: CWITransportEventHandler): void;
65
+ off(event: 'transport', handler: CWITransportEventHandler): void;
66
+ destroy(): void;
67
+ }
68
+ export declare const createEmbedTransport: (config?: CWITransportConfig) => EmbedTransport;
69
+ export declare const createRedirectTransport: (config?: CWITransportConfig) => RedirectTransport;
70
+ export declare const createAutoTransport: (config?: CWITransportConfig) => AutoTransport;
71
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -19,6 +19,36 @@ export interface OneSatConfig {
19
19
  /** Network to use (default: main) */
20
20
  network?: 'main' | 'test';
21
21
  }
22
+ /** Transport mode for CWI requests */
23
+ export type TransportMode = 'popup' | 'embed' | 'redirect' | 'auto';
24
+ /** Mobile fallback strategy for CWI transport negotiation */
25
+ export type MobileFallbackMode = 'auto' | 'redirect' | 'embed-only';
26
+ /**
27
+ * Configuration options for CWI transport implementations
28
+ */
29
+ export interface CWITransportConfig {
30
+ /** Base URL for wallet host (default: https://1sat.market) */
31
+ walletUrl?: string;
32
+ /** Embed iframe path (default: /wallet/cwi) */
33
+ iframePath?: string;
34
+ /** Redirect authorize init endpoint path (default: /api/cwi/authorize/init) */
35
+ authorizeInitPath?: string;
36
+ /** Redirect token exchange endpoint path (default: /api/cwi/token) */
37
+ tokenPath?: string;
38
+ /** dApp callback URI for redirect flow */
39
+ redirectUri?: string;
40
+ /** Request timeout in milliseconds */
41
+ timeout?: number;
42
+ /** Embed handshake timeout in milliseconds */
43
+ handshakeTimeoutMs?: number;
44
+ /** Max embed retries before redirect fallback */
45
+ maxEmbedRetries?: number;
46
+ /** Mobile fallback strategy (default: auto) */
47
+ mobileFallback?: MobileFallbackMode;
48
+ }
49
+ /** CWI handshake reason codes from the wallet iframe */
50
+ export type CWIHandshakeReason = 'channel_unavailable' | 'wallet_tab_unreachable' | 'wallet_locked';
51
+ export type CWIWalletStatus = 'checking' | 'locked' | 'unlocked' | 'no-wallet';
22
52
  /**
23
53
  * RPC method names for wallet communication
24
54
  */
@@ -39,6 +69,60 @@ export declare const RpcMethods: {
39
69
  readonly GET_UTXOS: "getUtxos";
40
70
  };
41
71
  export type RpcMethod = (typeof RpcMethods)[keyof typeof RpcMethods];
72
+ export type CWITransportName = 'embed' | 'redirect';
73
+ /** State signal posted by wallet CWI iframe */
74
+ export interface CWIState {
75
+ status?: CWIWalletStatus;
76
+ hasPermission?: boolean;
77
+ transport?: 'embed';
78
+ fallbackRecommended?: boolean;
79
+ reason?: CWIHandshakeReason;
80
+ }
81
+ /** CWI invocation request sent from dApp to iframe */
82
+ export interface CWIRequestMessage {
83
+ type: 'CWI';
84
+ isInvocation: true;
85
+ id: string;
86
+ call: string;
87
+ args?: unknown;
88
+ }
89
+ /** CWI invocation response sent from iframe to dApp */
90
+ export interface CWIResponseMessage {
91
+ type: 'CWI';
92
+ isInvocation: false;
93
+ id: string;
94
+ result?: unknown;
95
+ status?: 'error';
96
+ description?: string;
97
+ code?: number;
98
+ }
99
+ /** CWI state updates posted by wallet iframe */
100
+ export interface CWIStateMessage {
101
+ type: 'CWI';
102
+ cwiState: CWIState;
103
+ }
104
+ /** Transport events for telemetry and UX signaling */
105
+ export interface CWITransportEvent {
106
+ type: 'selected' | 'fallback';
107
+ transport: CWITransportName;
108
+ previousTransport?: CWITransportName;
109
+ reason?: string;
110
+ }
111
+ export type CWITransportEventHandler = (event: CWITransportEvent) => void;
112
+ /**
113
+ * Generic CWI transport interface
114
+ *
115
+ * - `invoke` executes a CWI call
116
+ * - `resume` completes redirect callback (returns null when no callback is present)
117
+ */
118
+ export interface CWITransport {
119
+ readonly mode: TransportMode;
120
+ invoke<TResult = unknown>(call: string, args?: unknown): Promise<TResult>;
121
+ resume<TResult = unknown>(searchParams?: URLSearchParams | string): Promise<TResult | null>;
122
+ on(event: 'transport', handler: CWITransportEventHandler): void;
123
+ off(event: 'transport', handler: CWITransportEventHandler): void;
124
+ destroy(): void;
125
+ }
42
126
  /**
43
127
  * Request to sign a transaction
44
128
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1sat/connect",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "Connection layer for 1Sat wallet - popup flow, events, session management",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",