@fedimint/core-web 0.0.11 → 0.1.0-alex-cache-wasm-build

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,6 +1,6 @@
1
- import { BalanceService, MintService, LightningService, FederationService, RecoveryService } from './services';
1
+ import { BalanceService, MintService, LightningService, FederationService, RecoveryService, WalletService } from './services';
2
2
  import { type LogLevel } from './utils/logger';
3
- import { JSONValue } from './types';
3
+ import { FederationConfig, JSONValue } from './types';
4
4
  export declare class FedimintWallet {
5
5
  private _client;
6
6
  balance: BalanceService;
@@ -8,6 +8,7 @@ export declare class FedimintWallet {
8
8
  lightning: LightningService;
9
9
  federation: FederationService;
10
10
  recovery: RecoveryService;
11
+ wallet: WalletService;
11
12
  private _openPromise;
12
13
  private _resolveOpen;
13
14
  private _isOpen;
@@ -51,6 +52,10 @@ export declare class FedimintWallet {
51
52
  */
52
53
  cleanup(): Promise<void>;
53
54
  isOpen(): boolean;
55
+ previewFederation(inviteCode: string): Promise<{
56
+ config: FederationConfig;
57
+ federation_id: string;
58
+ }>;
54
59
  /**
55
60
  * Sets the log level for the library.
56
61
  * @param level The desired log level ('DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE').
@@ -1 +1 @@
1
- {"version":3,"file":"FedimintWallet.d.ts","sourceRoot":"","sources":["../../src/FedimintWallet.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAInC,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAc;IAEtB,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,EAAE,gBAAgB,CAAA;IAC3B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,QAAQ,EAAE,eAAe,CAAA;IAEhC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,OAAO,CAAiB;IAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;gBACS,IAAI,GAAE,OAAe;IAkB3B,UAAU;IAMV,WAAW;IAKX,IAAI,CAAC,UAAU,GAAE,MAA4B;IAc7C,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,MAA4B;IAwB1C;;;OAGG;IACG,OAAO;IAMb,MAAM;IAIN;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ;IAK3B;;;;;;;;;;;;;;;;;;OAkBG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM;cAE9B,MAAM;cACN,SAAS;mBACJ,MAAM;;IAKrB;;;;;;;;;;;;;;;;;;;OAmBG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM;cAEjC,MAAM;cACN,SAAS;mBACJ,MAAM;;CAItB"}
1
+ {"version":3,"file":"FedimintWallet.d.ts","sourceRoot":"","sources":["../../src/FedimintWallet.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAIrD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAc;IAEtB,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,EAAE,gBAAgB,CAAA;IAC3B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,QAAQ,EAAE,eAAe,CAAA;IACzB,MAAM,EAAE,aAAa,CAAA;IAE5B,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,OAAO,CAAiB;IAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;gBACS,IAAI,GAAE,OAAe;IAmB3B,UAAU;IAMV,WAAW;IAKX,IAAI,CAAC,UAAU,GAAE,MAA4B;IAc7C,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,MAA4B;IAwB1C;;;OAGG;IACG,OAAO;IAMb,MAAM;IAIA,iBAAiB,CAAC,UAAU,EAAE,MAAM;gBAE9B,gBAAgB;uBACT,MAAM;;IAKzB;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ;IAK3B;;;;;;;;;;;;;;;;;;OAkBG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM;cAE9B,MAAM;cACN,SAAS;mBACJ,MAAM;;IAKrB;;;;;;;;;;;;;;;;;;;OAmBG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM;cAEjC,MAAM;cACN,SAAS;mBACJ,MAAM;;CAItB"}
@@ -1,5 +1,5 @@
1
1
  import { WorkerClient } from '../worker';
2
- import type { Duration, JSONObject, JSONValue, ReissueExternalNotesState, SpendNotesState } from '../types';
2
+ import type { Duration, JSONObject, JSONValue, NoteCountByDenomination, ReissueExternalNotesState, SpendNotesState } from '../types';
3
3
  export declare class MintService {
4
4
  private client;
5
5
  constructor(client: WorkerClient);
@@ -18,5 +18,6 @@ export declare class MintService {
18
18
  tryCancelSpendNotes(operationId: string): Promise<void>;
19
19
  subscribeSpendNotes(operationId: string, onSuccess?: (state: SpendNotesState) => void, onError?: (error: string) => void): import("../types").CancelFunction;
20
20
  awaitSpendOobRefund(operationId: string): Promise<JSONValue>;
21
+ getNotesByDenomination(): Promise<NoteCountByDenomination>;
21
22
  }
22
23
  //# sourceMappingURL=MintService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MintService.d.ts","sourceRoot":"","sources":["../../../src/services/MintService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,SAAS,EAGT,yBAAyB,EACzB,eAAe,EAChB,MAAM,UAAU,CAAA;AAEjB,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAExC,2EAA2E;IACrE,WAAW,CAAC,KAAK,EAAE,MAAM;IAWzB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,UAAe;IAWvE,6BAA6B,CAC3B,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAe,EAChE,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAa7C,0EAA0E;IACpE,UAAU,CACd,WAAW,EAAE,MAAM,EAInB,cAAc,GAAE,MAAM,GAAG,QAAoB,EAAE,oBAAoB;IACnE,aAAa,GAAE,OAAe,EAC9B,SAAS,GAAE,SAAc;;;;IA0B3B,0EAA0E;IACpE,UAAU,CAAC,QAAQ,EAAE,MAAM;IAM3B,mBAAmB,CAAC,WAAW,EAAE,MAAM;IAM7C,mBAAmB,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAe,EACtD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAWvC,mBAAmB,CAAC,WAAW,EAAE,MAAM;CAK9C"}
1
+ {"version":3,"file":"MintService.d.ts","sourceRoot":"","sources":["../../../src/services/MintService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,SAAS,EAGT,uBAAuB,EACvB,yBAAyB,EACzB,eAAe,EAChB,MAAM,UAAU,CAAA;AAEjB,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAExC,2EAA2E;IACrE,WAAW,CAAC,KAAK,EAAE,MAAM;IAWzB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,UAAe;IAWvE,6BAA6B,CAC3B,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAe,EAChE,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAa7C,0EAA0E;IACpE,UAAU,CACd,WAAW,EAAE,MAAM,EAInB,cAAc,GAAE,MAAM,GAAG,QAAoB,EAAE,oBAAoB;IACnE,aAAa,GAAE,OAAe,EAC9B,SAAS,GAAE,SAAc;;;;IA0B3B,0EAA0E;IACpE,UAAU,CAAC,QAAQ,EAAE,MAAM;IAM3B,mBAAmB,CAAC,WAAW,EAAE,MAAM;IAM7C,mBAAmB,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAe,EACtD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAWvC,mBAAmB,CAAC,WAAW,EAAE,MAAM;IAMvC,sBAAsB;CAO7B"}
@@ -0,0 +1,8 @@
1
+ import { WalletSummary } from '../types';
2
+ import { WorkerClient } from '../worker';
3
+ export declare class WalletService {
4
+ private client;
5
+ constructor(client: WorkerClient);
6
+ getWalletSummary(): Promise<WalletSummary>;
7
+ }
8
+ //# sourceMappingURL=WalletService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletService.d.ts","sourceRoot":"","sources":["../../../src/services/WalletService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;CAGjD"}
@@ -3,4 +3,5 @@ export { BalanceService } from './BalanceService';
3
3
  export { LightningService } from './LightningService';
4
4
  export { RecoveryService } from './RecoveryService';
5
5
  export { FederationService } from './FederationService';
6
+ export { WalletService } from './WalletService';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
@@ -1,6 +1,7 @@
1
- import { MSats, Duration, JSONValue } from './utils';
2
- declare const MODULE_KINDS: readonly ["", "ln", "mint"];
1
+ import { MSats, Duration, JSONValue, JSONObject } from './utils';
2
+ declare const MODULE_KINDS: readonly ["", "ln", "mint", "wallet"];
3
3
  type ModuleKind = (typeof MODULE_KINDS)[number];
4
+ type FederationConfig = JSONObject;
4
5
  type GatewayInfo = {
5
6
  gateway_id: string;
6
7
  api: string;
@@ -81,5 +82,21 @@ type CancelFunction = () => void;
81
82
  type ReissueExternalNotesState = 'Created' | 'Issuing' | 'Done';
82
83
  type MintSpendNotesResponse = Array<string>;
83
84
  type SpendNotesState = 'Created' | 'UserCanceledProcessing' | 'UserCanceledSuccess' | 'UserCanceledFailure' | 'Success' | 'Refunded';
84
- export { LightningGateway, RouteHint, FeeToAmount, OutgoingLightningPayment, PayType, LnPayState, LnReceiveState, CreateBolt11Response, GatewayInfo, StreamError, StreamSuccess, StreamResult, ModuleKind, CancelFunction, ReissueExternalNotesState, MintSpendNotesResponse, SpendNotesState, };
85
+ type TxOutputSummary = {
86
+ outpoint: {
87
+ txid: string;
88
+ vout: number;
89
+ };
90
+ amount: number;
91
+ };
92
+ type WalletSummary = {
93
+ spendable_utxos: TxOutputSummary[];
94
+ unsigned_peg_out_txos: TxOutputSummary[];
95
+ unsigned_change_utxos: TxOutputSummary[];
96
+ unconfirmed_peg_out_txos: TxOutputSummary[];
97
+ unconfirmed_change_utxos: TxOutputSummary[];
98
+ };
99
+ /** Keys are powers of 2 */
100
+ type NoteCountByDenomination = Record<number, number>;
101
+ export { LightningGateway, FederationConfig, RouteHint, FeeToAmount, OutgoingLightningPayment, PayType, LnPayState, LnReceiveState, CreateBolt11Response, GatewayInfo, StreamError, StreamSuccess, StreamResult, ModuleKind, CancelFunction, ReissueExternalNotesState, MintSpendNotesResponse, SpendNotesState, WalletSummary, TxOutputSummary, NoteCountByDenomination, };
85
102
  //# sourceMappingURL=wallet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/types/wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/types/wallet.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe", "cleanup", "parseInviteCode", "parseBolt11Invoice"];
1
+ declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe", "cleanup", "parseInviteCode", "parseBolt11Invoice", "previewFederation"];
2
2
  export type WorkerMessageType = (typeof WorkerMessageTypes)[number];
3
3
  export {};
4
4
  //# sourceMappingURL=worker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/types/worker.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,kBAAkB,4IAYd,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/types/worker.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,kBAAkB,iKAad,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -21,8 +21,9 @@ type Result<T, U = string> = {
21
21
  };
22
22
  //# sourceMappingURL=utils.d.ts.map
23
23
 
24
- declare const MODULE_KINDS: readonly ["", "ln", "mint"];
24
+ declare const MODULE_KINDS: readonly ["", "ln", "mint", "wallet"];
25
25
  type ModuleKind = (typeof MODULE_KINDS)[number];
26
+ type FederationConfig = JSONObject;
26
27
  type GatewayInfo = {
27
28
  gateway_id: string;
28
29
  api: string;
@@ -103,9 +104,25 @@ type CancelFunction = () => void;
103
104
  type ReissueExternalNotesState = 'Created' | 'Issuing' | 'Done';
104
105
  type MintSpendNotesResponse = Array<string>;
105
106
  type SpendNotesState = 'Created' | 'UserCanceledProcessing' | 'UserCanceledSuccess' | 'UserCanceledFailure' | 'Success' | 'Refunded';
107
+ type TxOutputSummary = {
108
+ outpoint: {
109
+ txid: string;
110
+ vout: number;
111
+ };
112
+ amount: number;
113
+ };
114
+ type WalletSummary = {
115
+ spendable_utxos: TxOutputSummary[];
116
+ unsigned_peg_out_txos: TxOutputSummary[];
117
+ unsigned_change_utxos: TxOutputSummary[];
118
+ unconfirmed_peg_out_txos: TxOutputSummary[];
119
+ unconfirmed_change_utxos: TxOutputSummary[];
120
+ };
121
+ /** Keys are powers of 2 */
122
+ type NoteCountByDenomination = Record<number, number>;
106
123
  //# sourceMappingURL=wallet.d.ts.map
107
124
 
108
- declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe", "cleanup", "parseInviteCode", "parseBolt11Invoice"];
125
+ declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe", "cleanup", "parseInviteCode", "parseBolt11Invoice", "previewFederation"];
109
126
  type WorkerMessageType = (typeof WorkerMessageTypes)[number];
110
127
 
111
128
  declare class WorkerClient {
@@ -169,6 +186,7 @@ declare class MintService {
169
186
  tryCancelSpendNotes(operationId: string): Promise<void>;
170
187
  subscribeSpendNotes(operationId: string, onSuccess?: (state: SpendNotesState) => void, onError?: (error: string) => void): CancelFunction;
171
188
  awaitSpendOobRefund(operationId: string): Promise<JSONValue>;
189
+ getNotesByDenomination(): Promise<NoteCountByDenomination>;
172
190
  }
173
191
 
174
192
  /**
@@ -250,6 +268,12 @@ declare class FederationService {
250
268
  listOperations(): Promise<JSONValue[]>;
251
269
  }
252
270
 
271
+ declare class WalletService {
272
+ private client;
273
+ constructor(client: WorkerClient);
274
+ getWalletSummary(): Promise<WalletSummary>;
275
+ }
276
+
253
277
  declare const logLevels: readonly ["debug", "info", "warn", "error", "none"];
254
278
  type LogLevel = (typeof logLevels)[number];
255
279
 
@@ -260,6 +284,7 @@ declare class FedimintWallet {
260
284
  lightning: LightningService;
261
285
  federation: FederationService;
262
286
  recovery: RecoveryService;
287
+ wallet: WalletService;
263
288
  private _openPromise;
264
289
  private _resolveOpen;
265
290
  private _isOpen;
@@ -303,6 +328,10 @@ declare class FedimintWallet {
303
328
  */
304
329
  cleanup(): Promise<void>;
305
330
  isOpen(): boolean;
331
+ previewFederation(inviteCode: string): Promise<{
332
+ config: FederationConfig;
333
+ federation_id: string;
334
+ }>;
306
335
  /**
307
336
  * Sets the log level for the library.
308
337
  * @param level The desired log level ('DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE').
@@ -360,4 +389,4 @@ declare class FedimintWallet {
360
389
  }
361
390
 
362
391
  export { FedimintWallet };
363
- export type { Alias, CancelFunction, CreateBolt11Response, Duration, FeeToAmount, GatewayInfo, JSONObject, JSONValue, LightningGateway, LnPayState, LnReceiveState, MSats, MintSpendNotesResponse, ModuleKind, OutgoingLightningPayment, PayType, ReissueExternalNotesState, Resolve, Result, RouteHint, Sats, SpendNotesState, StreamError, StreamResult, StreamSuccess, WorkerMessageType };
392
+ export type { Alias, CancelFunction, CreateBolt11Response, Duration, FederationConfig, FeeToAmount, GatewayInfo, JSONObject, JSONValue, LightningGateway, LnPayState, LnReceiveState, MSats, MintSpendNotesResponse, ModuleKind, NoteCountByDenomination, OutgoingLightningPayment, PayType, ReissueExternalNotesState, Resolve, Result, RouteHint, Sats, SpendNotesState, StreamError, StreamResult, StreamSuccess, TxOutputSummary, WalletSummary, WorkerMessageType };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- const e=["debug","info","warn","error","none"];const t=new class{constructor(e="none"){this.level=e}setLevel(e){this.level=e}coerceLevel(t){return e.includes(t.toLocaleUpperCase())?t.toLocaleUpperCase():"info"}log(e,t,...i){const s=this.coerceLevel(e);if(!this.shouldLog(s))return;(0,console[s])(`[${s.toUpperCase()}] ${t}`,...i)}debug(e,...t){this.log("debug",e,...t)}info(e,...t){this.log("info",e,...t)}warn(e,...t){this.log("warn",e,...t)}error(e,...t){this.log("error",e,...t)}shouldLog(e){const t=["debug","info","warn","error","none"],i=t.indexOf(e);return t.indexOf(this.level)<=i&&"none"!==this.level&&"none"!==e}};class i{constructor(){this.requestCounter=0,this.requestCallbacks=new Map,this.initPromise=void 0,this.worker=new Worker(new URL("./worker.js",import.meta.url),{type:"module"}),this.worker.onmessage=this.handleWorkerMessage.bind(this),this.worker.onerror=this.handleWorkerError.bind(this),t.info("WorkerClient instantiated"),t.debug("WorkerClient",this.worker)}initialize(){return this.initPromise||(this.initPromise=this.sendSingleMessage("init")),this.initPromise}handleWorkerLogs(e){const{type:i,level:s,message:n,...r}=e.data;t.log(s,n,...r)}handleWorkerError(e){t.error("Worker error",e)}handleWorkerMessage(e){const{type:i,requestId:s,...n}=e.data;"log"===i&&this.handleWorkerLogs(e.data);const r=this.requestCallbacks.get(s);t.debug("WorkerClient - handleWorkerMessage",e.data),r?r(n):t.warn("WorkerClient - handleWorkerMessage - received message with no callback",s,e.data)}sendSingleMessage(e,i){return new Promise(((s,n)=>{const r=++this.requestCounter;t.debug("WorkerClient - sendSingleMessage",r,e,i),this.requestCallbacks.set(r,(e=>{this.requestCallbacks.delete(r),t.debug("WorkerClient - sendSingleMessage - response",r,e),e.data?s(e.data):e.error?n(e.error):t.warn("WorkerClient - sendSingleMessage - malformed response",r,e)})),this.worker.postMessage({type:e,payload:i,requestId:r})}))}rpcStream(e,i,s,n,r,a=()=>{}){const o=++this.requestCounter;t.debug("WorkerClient - rpcStream",o,e,i,s);let c=()=>{},l=!1;const u=new Promise((e=>{c=()=>{l?e():setTimeout((()=>c()),0)}}));return this._rpcStreamInner(o,e,i,s,n,r,a,u).then((()=>{l=!0})),c}async _rpcStreamInner(e,t,i,s,n,r,a=()=>{},o){this.requestCallbacks.set(e,(t=>{void 0!==t.error?r(t.error):void 0!==t.data?n(t.data):void 0!==t.end&&(this.requestCallbacks.delete(e),a())})),this.worker.postMessage({type:"rpc",payload:{module:t,method:i,body:s},requestId:e}),o.then((()=>{this.worker?.postMessage({type:"unsubscribe",requestId:e}),this.requestCallbacks.delete(e)}))}rpcSingle(e,i,s){return t.debug("WorkerClient - rpcSingle",e,i,s),new Promise(((t,n)=>{this.rpcStream(e,i,s,t,n)}))}async cleanup(){await this.sendSingleMessage("cleanup"),this.requestCounter=0,this.initPromise=void 0,this.requestCallbacks.clear()}_getRequestCounter(){return this.requestCounter}_getRequestCallbackMap(){return this.requestCallbacks}}class s{constructor(e){this.client=e}async redeemEcash(e){return await this.client.rpcSingle("mint","reissue_external_notes",{oob_notes:e,extra_meta:null})}async reissueExternalNotes(e,t={}){return await this.client.rpcSingle("mint","reissue_external_notes",{oob_notes:e,extra_meta:t})}subscribeReissueExternalNotes(e,t=()=>{},i=()=>{}){return this.client.rpcStream("mint","subscribe_reissue_external_notes",{operation_id:e},t,i)}async spendNotes(e,t=86400,i=!1,s={}){const n="number"==typeof t?{nanos:0,secs:t}:t,r=await this.client.rpcSingle("mint","spend_notes",{amount:e,try_cancel_after:n,include_invite:i,extra_meta:s});return{notes:r[1],operation_id:r[0]}}async parseNotes(e){return await this.client.rpcSingle("mint","validate_notes",{oob_notes:e})}async tryCancelSpendNotes(e){await this.client.rpcSingle("mint","try_cancel_spend_notes",{operation_id:e})}subscribeSpendNotes(e,t=()=>{},i=()=>{}){return this.client.rpcStream("mint","subscribe_spend_notes",{operation_id:e},(e=>t(e)),i)}async awaitSpendOobRefund(e){return await this.client.rpcSingle("mint","await_spend_oob_refund",{operation_id:e})}}class n{constructor(e){this.client=e}async getBalance(){return await this.client.rpcSingle("","get_balance",{})}subscribeBalance(e=()=>{},t=()=>{}){return this.client.rpcStream("","subscribe_balance_changes",{},(t=>e(parseInt(t))),t)}}class r{constructor(e){this.client=e}async createInvoice(e,t,i,s,n){const r=s??await this._getDefaultGatewayInfo();return await this.client.rpcSingle("ln","create_bolt11_invoice",{amount:e,description:t,expiry_time:i??null,extra_meta:n??{},gateway:r})}async createInvoiceTweaked(e,t,i,s,n,r,a){const o=r??await this._getDefaultGatewayInfo();return await this.client.rpcSingle("ln","create_bolt11_invoice_for_user_tweaked",{amount:e,description:t,expiry_time:n??null,user_key:i,index:s,extra_meta:a??{},gateway:o})}async scanReceivesForTweaks(e,t,i){return await this.client.rpcSingle("ln","scan_receive_for_user_tweaked",{user_key:e,indices:t,extra_meta:i??{}})}async _getDefaultGatewayInfo(){await this.updateGatewayCache();const e=await this.listGateways();return e[0]?.info}async payInvoice(e,t,i){const s=t??await this._getDefaultGatewayInfo();return await this.client.rpcSingle("ln","pay_bolt11_invoice",{maybe_gateway:s,invoice:e,extra_meta:i??{}})}async payInvoiceSync(e,t=1e4,i,s){return new Promise((async(n,r)=>{const{contract_id:a,fee:o}=await this.payInvoice(e,i,s),c=this.subscribeLnPay(a,(e=>{"string"!=typeof e&&"success"in e?(clearTimeout(l),c(),n({success:!0,data:{feeMsats:o,preimage:e.success.preimage}})):"string"!=typeof e&&"unexpected_error"in e&&r(new Error(e.unexpected_error.error_message))})),l=setTimeout((()=>{c(),n({success:!1,error:"Payment timeout"})}),t)}))}subscribeLnClaim(e,t=()=>{},i=()=>{}){return this.client.rpcStream("ln","subscribe_ln_claim",{operation_id:e},t,i)}subscribeLnPay(e,t=()=>{},i=()=>{}){return this.client.rpcStream("ln","subscribe_ln_pay",{operation_id:e},t,i)}async waitForPay(e){return new Promise(((t,i)=>{let s;const n=setTimeout((()=>{t({success:!1,error:"Waiting for receive timeout"})}),15e3);s=this.subscribeLnPay(e,(e=>{"string"!=typeof e&&"success"in e&&(clearTimeout(n),s(),t({success:!0,data:{preimage:e.success.preimage}}))}),(e=>{clearTimeout(n),s(),i(e)}))}))}subscribeLnReceive(e,t=()=>{},i=()=>{}){return this.client.rpcStream("ln","subscribe_ln_receive",{operation_id:e},t,i)}async waitForReceive(e,t=15e3){return new Promise(((i,s)=>{let n;const r=setTimeout((()=>{s(new Error("Timeout waiting for receive"))}),t);n=this.subscribeLnReceive(e,(e=>{"claimed"===e&&(clearTimeout(r),n(),i(e))}),(e=>{clearTimeout(r),n(),s(e)}))}))}async getGateway(e=null,t=!1){return await this.client.rpcSingle("ln","get_gateway",{gateway_id:e,force_internal:t})}async listGateways(){return await this.client.rpcSingle("ln","list_gateways",{})}async updateGatewayCache(){return await this.client.rpcSingle("ln","update_gateway_cache",{})}}class a{constructor(e){this.client=e}async hasPendingRecoveries(){return await this.client.rpcSingle("","has_pending_recoveries",{})}async waitForAllRecoveries(){await this.client.rpcSingle("","wait_for_all_recoveries",{})}subscribeToRecoveryProgress(e,t){return this.client.rpcStream("","subscribe_to_recovery_progress",{},e,t)}}class o{constructor(e){this.client=e}async getConfig(){return await this.client.rpcSingle("","get_config",{})}async getFederationId(){return await this.client.rpcSingle("","get_federation_id",{})}async getInviteCode(e=0){return await this.client.rpcSingle("","get_invite_code",{peer:e})}async listOperations(){return await this.client.rpcSingle("","list_operations",{})}}const c="fm-default";class l{constructor(e=!1){this._openPromise=void 0,this._resolveOpen=()=>{},this._isOpen=!1,this._openPromise=new Promise((e=>{this._resolveOpen=e})),this._client=new i,this.mint=new s(this._client),this.lightning=new r(this._client),this.balance=new n(this._client),this.federation=new o(this._client),this.recovery=new a(this._client),t.info("FedimintWallet instantiated"),e||this.initialize()}async initialize(){t.info("Initializing WorkerClient"),await this._client.initialize(),t.info("WorkerClient initialized")}async waitForOpen(){return this._isOpen?Promise.resolve():this._openPromise}async open(e=c){if(await this._client.initialize(),this._isOpen)throw new Error("The FedimintWallet is already open.");const{success:t}=await this._client.sendSingleMessage("open",{clientName:e});return t&&(this._isOpen=!!t,this._resolveOpen()),t}async joinFederation(e,i=c){if(await this._client.initialize(),this._isOpen)throw new Error("The FedimintWallet is already open. You can only call `joinFederation` on closed clients.");try{const t=await this._client.sendSingleMessage("join",{inviteCode:e,clientName:i});return t.success&&(this._isOpen=!0,this._resolveOpen()),t.success}catch(e){return t.error("Error joining federation",e),!1}}async cleanup(){this._openPromise=void 0,this._isOpen=!1,await this._client.cleanup()}isOpen(){return this._isOpen}setLogLevel(e){t.setLevel(e),t.info(`Log level set to ${e}.`)}async parseInviteCode(e){return await this._client.sendSingleMessage("parseInviteCode",{inviteCode:e})}async parseBolt11Invoice(e){return await this._client.sendSingleMessage("parseBolt11Invoice",{invoiceStr:e})}}export{l as FedimintWallet};
1
+ const e=["debug","info","warn","error","none"];const t=new class{constructor(e="none"){this.level=e}setLevel(e){this.level=e}coerceLevel(t){return e.includes(t.toLocaleUpperCase())?t.toLocaleUpperCase():"info"}log(e,t,...i){const n=this.coerceLevel(e);if(!this.shouldLog(n))return;(0,console[n])(`[${n.toUpperCase()}] ${t}`,...i)}debug(e,...t){this.log("debug",e,...t)}info(e,...t){this.log("info",e,...t)}warn(e,...t){this.log("warn",e,...t)}error(e,...t){this.log("error",e,...t)}shouldLog(e){const t=["debug","info","warn","error","none"],i=t.indexOf(e);return t.indexOf(this.level)<=i&&"none"!==this.level&&"none"!==e}};class i{constructor(){this.requestCounter=0,this.requestCallbacks=new Map,this.initPromise=void 0,this.worker=new Worker(new URL("./worker.js",import.meta.url),{type:"module"}),this.worker.onmessage=this.handleWorkerMessage.bind(this),this.worker.onerror=this.handleWorkerError.bind(this),t.info("WorkerClient instantiated"),t.debug("WorkerClient",this.worker)}initialize(){return this.initPromise||(this.initPromise=this.sendSingleMessage("init")),this.initPromise}handleWorkerLogs(e){const{type:i,level:n,message:s,...r}=e.data;t.log(n,s,...r)}handleWorkerError(e){t.error("Worker error",e)}handleWorkerMessage(e){const{type:i,requestId:n,...s}=e.data;"log"===i&&this.handleWorkerLogs(e.data);const r=this.requestCallbacks.get(n);t.debug("WorkerClient - handleWorkerMessage",e.data),r?r(s):t.warn("WorkerClient - handleWorkerMessage - received message with no callback",n,e.data)}sendSingleMessage(e,i){return new Promise(((n,s)=>{const r=++this.requestCounter;t.debug("WorkerClient - sendSingleMessage",r,e,i),this.requestCallbacks.set(r,(e=>{this.requestCallbacks.delete(r),t.debug("WorkerClient - sendSingleMessage - response",r,e),e.data?n(e.data):e.error?s(e.error):t.warn("WorkerClient - sendSingleMessage - malformed response",r,e)})),this.worker.postMessage({type:e,payload:i,requestId:r})}))}rpcStream(e,i,n,s,r,a=()=>{}){const o=++this.requestCounter;t.debug("WorkerClient - rpcStream",o,e,i,n);let c=()=>{},l=!1;const u=new Promise((e=>{c=()=>{l?e():setTimeout((()=>c()),0)}}));return this._rpcStreamInner(o,e,i,n,s,r,a,u).then((()=>{l=!0})),c}async _rpcStreamInner(e,t,i,n,s,r,a=()=>{},o){this.requestCallbacks.set(e,(t=>{void 0!==t.error?r(t.error):void 0!==t.data?s(t.data):void 0!==t.end&&(this.requestCallbacks.delete(e),a())})),this.worker.postMessage({type:"rpc",payload:{module:t,method:i,body:n},requestId:e}),o.then((()=>{this.worker?.postMessage({type:"unsubscribe",requestId:e}),this.requestCallbacks.delete(e)}))}rpcSingle(e,i,n){return t.debug("WorkerClient - rpcSingle",e,i,n),new Promise(((t,s)=>{this.rpcStream(e,i,n,t,s)}))}async cleanup(){await this.sendSingleMessage("cleanup"),this.requestCounter=0,this.initPromise=void 0,this.requestCallbacks.clear()}_getRequestCounter(){return this.requestCounter}_getRequestCallbackMap(){return this.requestCallbacks}}class n{constructor(e){this.client=e}async redeemEcash(e){return await this.client.rpcSingle("mint","reissue_external_notes",{oob_notes:e,extra_meta:null})}async reissueExternalNotes(e,t={}){return await this.client.rpcSingle("mint","reissue_external_notes",{oob_notes:e,extra_meta:t})}subscribeReissueExternalNotes(e,t=()=>{},i=()=>{}){return this.client.rpcStream("mint","subscribe_reissue_external_notes",{operation_id:e},t,i)}async spendNotes(e,t=86400,i=!1,n={}){const s="number"==typeof t?{nanos:0,secs:t}:t,r=await this.client.rpcSingle("mint","spend_notes",{amount:e,try_cancel_after:s,include_invite:i,extra_meta:n});return{notes:r[1],operation_id:r[0]}}async parseNotes(e){return await this.client.rpcSingle("mint","validate_notes",{oob_notes:e})}async tryCancelSpendNotes(e){await this.client.rpcSingle("mint","try_cancel_spend_notes",{operation_id:e})}subscribeSpendNotes(e,t=()=>{},i=()=>{}){return this.client.rpcStream("mint","subscribe_spend_notes",{operation_id:e},(e=>t(e)),i)}async awaitSpendOobRefund(e){return await this.client.rpcSingle("mint","await_spend_oob_refund",{operation_id:e})}async getNotesByDenomination(){return await this.client.rpcSingle("mint","note_counts_by_denomination",{})}}class s{constructor(e){this.client=e}async getBalance(){return await this.client.rpcSingle("","get_balance",{})}subscribeBalance(e=()=>{},t=()=>{}){return this.client.rpcStream("","subscribe_balance_changes",{},(t=>e(parseInt(t))),t)}}class r{constructor(e){this.client=e}async createInvoice(e,t,i,n,s){const r=n??await this._getDefaultGatewayInfo();return await this.client.rpcSingle("ln","create_bolt11_invoice",{amount:e,description:t,expiry_time:i??null,extra_meta:s??{},gateway:r})}async createInvoiceTweaked(e,t,i,n,s,r,a){const o=r??await this._getDefaultGatewayInfo();return await this.client.rpcSingle("ln","create_bolt11_invoice_for_user_tweaked",{amount:e,description:t,expiry_time:s??null,user_key:i,index:n,extra_meta:a??{},gateway:o})}async scanReceivesForTweaks(e,t,i){return await this.client.rpcSingle("ln","scan_receive_for_user_tweaked",{user_key:e,indices:t,extra_meta:i??{}})}async _getDefaultGatewayInfo(){await this.updateGatewayCache();const e=await this.listGateways();return e[0]?.info}async payInvoice(e,t,i){const n=t??await this._getDefaultGatewayInfo();return await this.client.rpcSingle("ln","pay_bolt11_invoice",{maybe_gateway:n,invoice:e,extra_meta:i??{}})}async payInvoiceSync(e,t=1e4,i,n){return new Promise((async(s,r)=>{const{contract_id:a,fee:o}=await this.payInvoice(e,i,n),c=this.subscribeLnPay(a,(e=>{"string"!=typeof e&&"success"in e?(clearTimeout(l),c(),s({success:!0,data:{feeMsats:o,preimage:e.success.preimage}})):"string"!=typeof e&&"unexpected_error"in e&&r(new Error(e.unexpected_error.error_message))})),l=setTimeout((()=>{c(),s({success:!1,error:"Payment timeout"})}),t)}))}subscribeLnClaim(e,t=()=>{},i=()=>{}){return this.client.rpcStream("ln","subscribe_ln_claim",{operation_id:e},t,i)}subscribeLnPay(e,t=()=>{},i=()=>{}){return this.client.rpcStream("ln","subscribe_ln_pay",{operation_id:e},t,i)}async waitForPay(e){return new Promise(((t,i)=>{let n;const s=setTimeout((()=>{t({success:!1,error:"Waiting for receive timeout"})}),15e3);n=this.subscribeLnPay(e,(e=>{"string"!=typeof e&&"success"in e&&(clearTimeout(s),n(),t({success:!0,data:{preimage:e.success.preimage}}))}),(e=>{clearTimeout(s),n(),i(e)}))}))}subscribeLnReceive(e,t=()=>{},i=()=>{}){return this.client.rpcStream("ln","subscribe_ln_receive",{operation_id:e},t,i)}async waitForReceive(e,t=15e3){return new Promise(((i,n)=>{let s;const r=setTimeout((()=>{n(new Error("Timeout waiting for receive"))}),t);s=this.subscribeLnReceive(e,(e=>{"claimed"===e&&(clearTimeout(r),s(),i(e))}),(e=>{clearTimeout(r),s(),n(e)}))}))}async getGateway(e=null,t=!1){return await this.client.rpcSingle("ln","get_gateway",{gateway_id:e,force_internal:t})}async listGateways(){return await this.client.rpcSingle("ln","list_gateways",{})}async updateGatewayCache(){return await this.client.rpcSingle("ln","update_gateway_cache",{})}}class a{constructor(e){this.client=e}async hasPendingRecoveries(){return await this.client.rpcSingle("","has_pending_recoveries",{})}async waitForAllRecoveries(){await this.client.rpcSingle("","wait_for_all_recoveries",{})}subscribeToRecoveryProgress(e,t){return this.client.rpcStream("","subscribe_to_recovery_progress",{},e,t)}}class o{constructor(e){this.client=e}async getConfig(){return await this.client.rpcSingle("","get_config",{})}async getFederationId(){return await this.client.rpcSingle("","get_federation_id",{})}async getInviteCode(e=0){return await this.client.rpcSingle("","get_invite_code",{peer:e})}async listOperations(){return await this.client.rpcSingle("","list_operations",{})}}class c{constructor(e){this.client=e}async getWalletSummary(){return await this.client.rpcSingle("wallet","get_wallet_summary",{})}}const l="fm-default";class u{constructor(e=!1){this._openPromise=void 0,this._resolveOpen=()=>{},this._isOpen=!1,this._openPromise=new Promise((e=>{this._resolveOpen=e})),this._client=new i,this.mint=new n(this._client),this.lightning=new r(this._client),this.balance=new s(this._client),this.federation=new o(this._client),this.recovery=new a(this._client),this.wallet=new c(this._client),t.info("FedimintWallet instantiated"),e||this.initialize()}async initialize(){t.info("Initializing WorkerClient"),await this._client.initialize(),t.info("WorkerClient initialized")}async waitForOpen(){return this._isOpen?Promise.resolve():this._openPromise}async open(e=l){if(await this._client.initialize(),this._isOpen)throw new Error("The FedimintWallet is already open.");const{success:t}=await this._client.sendSingleMessage("open",{clientName:e});return t&&(this._isOpen=!!t,this._resolveOpen()),t}async joinFederation(e,i=l){if(await this._client.initialize(),this._isOpen)throw new Error("The FedimintWallet is already open. You can only call `joinFederation` on closed clients.");try{const t=await this._client.sendSingleMessage("join",{inviteCode:e,clientName:i});return t.success&&(this._isOpen=!0,this._resolveOpen()),t.success}catch(e){return t.error("Error joining federation",e),!1}}async cleanup(){this._openPromise=void 0,this._isOpen=!1,await this._client.cleanup()}isOpen(){return this._isOpen}async previewFederation(e){return this._client.sendSingleMessage("previewFederation",{inviteCode:e})}setLogLevel(e){t.setLevel(e),t.info(`Log level set to ${e}.`)}async parseInviteCode(e){return await this._client.sendSingleMessage("parseInviteCode",{inviteCode:e})}async parseBolt11Invoice(e){return await this._client.sendSingleMessage("parseBolt11Invoice",{invoiceStr:e})}}export{u as FedimintWallet};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/logger.ts","../src/worker/WorkerClient.ts","../src/services/MintService.ts","../src/services/BalanceService.ts","../src/services/LightningService.ts","../src/services/RecoveryService.ts","../src/services/FederationService.ts","../src/FedimintWallet.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["logLevels","logger","constructor","level","this","setLevel","coerceLevel","includes","toLocaleUpperCase","log","message","args","logLevel","shouldLog","consoleFn","console","toUpperCase","debug","info","warn","error","messageLevel","levels","messageLevelIndex","indexOf","WorkerClient","requestCounter","requestCallbacks","Map","initPromise","undefined","worker","Worker","URL","url","type","onmessage","handleWorkerMessage","bind","onerror","handleWorkerError","initialize","sendSingleMessage","handleWorkerLogs","event","data","requestId","streamCallback","get","payload","Promise","resolve","reject","set","response","delete","postMessage","rpcStream","module","method","body","onSuccess","onError","onEnd","unsubscribe","isSubscribed","unsubscribePromise","setTimeout","_rpcStreamInner","then","end","rpcSingle","cleanup","clear","_getRequestCounter","_getRequestCallbackMap","MintService","client","redeemEcash","notes","oob_notes","extra_meta","reissueExternalNotes","oobNotes","extraMeta","subscribeReissueExternalNotes","operationId","operation_id","spendNotes","amountMsats","tryCancelAfter","includeInvite","duration","nanos","secs","res","amount","try_cancel_after","include_invite","parseNotes","tryCancelSpendNotes","subscribeSpendNotes","awaitSpendOobRefund","BalanceService","getBalance","subscribeBalance","parseInt","LightningService","createInvoice","description","expiryTime","gatewayInfo","gateway","_getDefaultGatewayInfo","expiry_time","createInvoiceTweaked","tweakKey","index","user_key","scanReceivesForTweaks","indices","updateGatewayCache","gateways","listGateways","payInvoice","invoice","maybe_gateway","payInvoiceSync","timeoutMs","async","contract_id","fee","subscribeLnPay","clearTimeout","timeoutId","success","feeMsats","preimage","Error","unexpected_error","error_message","subscribeLnClaim","waitForPay","subscribeLnReceive","waitForReceive","getGateway","gatewayId","forceInternal","gateway_id","force_internal","RecoveryService","hasPendingRecoveries","waitForAllRecoveries","subscribeToRecoveryProgress","FederationService","getConfig","getFederationId","getInviteCode","peer","listOperations","DEFAULT_CLIENT_NAME","FedimintWallet","lazy","_openPromise","_resolveOpen","_isOpen","_client","mint","lightning","balance","federation","recovery","waitForOpen","open","clientName","joinFederation","inviteCode","e","isOpen","setLogLevel","parseInviteCode","parseBolt11Invoice","invoiceStr"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/logger.ts","../src/worker/WorkerClient.ts","../src/services/MintService.ts","../src/services/BalanceService.ts","../src/services/LightningService.ts","../src/services/RecoveryService.ts","../src/services/FederationService.ts","../src/services/WalletService.ts","../src/FedimintWallet.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["logLevels","logger","constructor","level","this","setLevel","coerceLevel","includes","toLocaleUpperCase","log","message","args","logLevel","shouldLog","consoleFn","console","toUpperCase","debug","info","warn","error","messageLevel","levels","messageLevelIndex","indexOf","WorkerClient","requestCounter","requestCallbacks","Map","initPromise","undefined","worker","Worker","URL","url","type","onmessage","handleWorkerMessage","bind","onerror","handleWorkerError","initialize","sendSingleMessage","handleWorkerLogs","event","data","requestId","streamCallback","get","payload","Promise","resolve","reject","set","response","delete","postMessage","rpcStream","module","method","body","onSuccess","onError","onEnd","unsubscribe","isSubscribed","unsubscribePromise","setTimeout","_rpcStreamInner","then","end","rpcSingle","cleanup","clear","_getRequestCounter","_getRequestCallbackMap","MintService","client","redeemEcash","notes","oob_notes","extra_meta","reissueExternalNotes","oobNotes","extraMeta","subscribeReissueExternalNotes","operationId","operation_id","spendNotes","amountMsats","tryCancelAfter","includeInvite","duration","nanos","secs","res","amount","try_cancel_after","include_invite","parseNotes","tryCancelSpendNotes","subscribeSpendNotes","awaitSpendOobRefund","getNotesByDenomination","BalanceService","getBalance","subscribeBalance","parseInt","LightningService","createInvoice","description","expiryTime","gatewayInfo","gateway","_getDefaultGatewayInfo","expiry_time","createInvoiceTweaked","tweakKey","index","user_key","scanReceivesForTweaks","indices","updateGatewayCache","gateways","listGateways","payInvoice","invoice","maybe_gateway","payInvoiceSync","timeoutMs","async","contract_id","fee","subscribeLnPay","clearTimeout","timeoutId","success","feeMsats","preimage","Error","unexpected_error","error_message","subscribeLnClaim","waitForPay","subscribeLnReceive","waitForReceive","getGateway","gatewayId","forceInternal","gateway_id","force_internal","RecoveryService","hasPendingRecoveries","waitForAllRecoveries","subscribeToRecoveryProgress","FederationService","getConfig","getFederationId","getInviteCode","peer","listOperations","WalletService","getWalletSummary","DEFAULT_CLIENT_NAME","FedimintWallet","lazy","_openPromise","_resolveOpen","_isOpen","_client","mint","lightning","balance","federation","recovery","wallet","waitForOpen","open","clientName","joinFederation","inviteCode","e","isOpen","previewFederation","setLogLevel","parseInviteCode","parseBolt11Invoice","invoiceStr"],"mappings":"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"}
package/dist/worker.js CHANGED
@@ -1,2 +1,2 @@
1
- globalThis.__vitest_browser_runner__={wrapDynamicImport:e=>e()};let e=null,s=null;const t=new Map;console.log("Worker - init"),self.onmessage=async o=>{const{type:r,payload:a,requestId:n}=o.data;try{if("init"===r)e=(await import("@fedimint/fedimint-client-wasm-bundler")).WasmClient,self.postMessage({type:"initialized",data:{},requestId:n});else if("open"===r){const{clientName:t}=a;s=await e.open(t)||null,self.postMessage({type:"open",data:{success:!!s},requestId:n})}else if("join"===r){const{inviteCode:t,clientName:o}=a;try{s=await e.join_federation(o,t),self.postMessage({type:"join",data:{success:!!s},requestId:n})}catch(e){self.postMessage({type:"error",error:e.message,requestId:n})}}else if("rpc"===r){const{module:e,method:o,body:r}=a;if(console.log("RPC received",e,o,r),!s)return void self.postMessage({type:"error",error:"WasmClient not initialized",requestId:n});const i=await s.rpc(e,o,JSON.stringify(r),(e=>{console.log("RPC response",n,e);const s=JSON.parse(e);if(self.postMessage({type:"rpcResponse",requestId:n,...s}),void 0!==s.end){const e=t.get(n);e?.free()}}));t.set(n,i)}else if("unsubscribe"===r){const e=t.get(n);e&&(e.cancel(),e.free(),t.delete(n))}else if("cleanup"===r)console.log("cleanup message received"),s?.free(),self.postMessage({type:"cleanup",data:{},requestId:n}),close();else if("parseInviteCode"===r){const{inviteCode:s}=a;try{const t=e.parse_invite_code(s),o=JSON.parse(t);self.postMessage({type:"parseInviteCode",data:o,requestId:n})}catch(e){self.postMessage({type:"error",error:`Failed to parse invite code: ${e.message}`,requestId:n})}}else if("parseBolt11Invoice"===r){const{invoiceStr:s}=a;try{const t=e.parse_bolt11_invoice(s),o=JSON.parse(t);self.postMessage({type:"parseBolt11Invoice",data:o,requestId:n})}catch(e){self.postMessage({type:"error",error:`Failed to parse invoice: ${e.message}`,requestId:n})}}else self.postMessage({type:"error",error:"Unknown message type",requestId:n})}catch(e){console.error("ERROR",e),self.postMessage({type:"error",error:e,requestId:n})}};
1
+ globalThis.__vitest_browser_runner__={wrapDynamicImport:e=>e()};let e=null,s=null;const t=new Map;console.log("Worker - init"),self.onmessage=async r=>{const{type:o,payload:a,requestId:i}=r.data;try{if("init"===o)e=(await import("@fedimint/fedimint-client-wasm-bundler")).WasmClient,self.postMessage({type:"initialized",data:{},requestId:i});else if("open"===o){const{clientName:t}=a;s=await e.open(t)||null,self.postMessage({type:"open",data:{success:!!s},requestId:i})}else if("join"===o){const{inviteCode:t,clientName:r}=a;try{s=await e.join_federation(r,t),self.postMessage({type:"join",data:{success:!!s},requestId:i})}catch(e){self.postMessage({type:"error",error:e.message,requestId:i})}}else if("previewFederation"===o){const{inviteCode:t}=a;try{s=await e.preview_federation(t);const r=JSON.parse(s);self.postMessage({type:"previewFederation",data:{success:!!s,config:r.config,federation_id:r.federation_id},requestId:i})}catch(e){self.postMessage({type:"error",error:e.message,requestId:i})}}else if("rpc"===o){const{module:e,method:r,body:o}=a;if(console.log("RPC received",e,r,o),!s)return void self.postMessage({type:"error",error:"WasmClient not initialized",requestId:i});const n=await s.rpc(e,r,JSON.stringify(o),(e=>{console.log("RPC response",i,e);const s=JSON.parse(e);if(self.postMessage({type:"rpcResponse",requestId:i,...s}),void 0!==s.end){const e=t.get(i);e?.free()}}));t.set(i,n)}else if("unsubscribe"===o){const e=t.get(i);e&&(e.cancel(),e.free(),t.delete(i))}else if("cleanup"===o)console.log("cleanup message received"),s?.free(),self.postMessage({type:"cleanup",data:{},requestId:i}),close();else if("parseInviteCode"===o){const{inviteCode:s}=a;try{const t=e.parse_invite_code(s),r=JSON.parse(t);self.postMessage({type:"parseInviteCode",data:r,requestId:i})}catch(e){self.postMessage({type:"error",error:`Failed to parse invite code: ${e.message}`,requestId:i})}}else if("parseBolt11Invoice"===o){const{invoiceStr:s}=a;try{const t=e.parse_bolt11_invoice(s),r=JSON.parse(t);self.postMessage({type:"parseBolt11Invoice",data:r,requestId:i})}catch(e){self.postMessage({type:"error",error:`Failed to parse invoice: ${e.message}`,requestId:i})}}else self.postMessage({type:"error",error:"Unknown message type",requestId:i})}catch(e){console.error("ERROR",e),self.postMessage({type:"error",error:e,requestId:i})}};
2
2
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sources":["../src/worker/worker.js"],"sourcesContent":["// Web Worker for fedimint-client-wasm to run in the browser\n\n// HACK: Fixes vitest browser runner\n// TODO: remove once https://github.com/vitest-dev/vitest/pull/6569 lands in a release\nglobalThis.__vitest_browser_runner__ = { wrapDynamicImport: (foo) => foo() }\n\n// dynamically imported Constructor for WasmClient\nlet WasmClient = null\n// client instance\nlet client = null\n\nconst streamCancelMap = new Map()\n\nconst handleFree = (requestId) => {\n streamCancelMap.delete(requestId)\n}\n\nconsole.log('Worker - init')\n\nself.onmessage = async (event) => {\n const { type, payload, requestId } = event.data\n\n try {\n if (type === 'init') {\n WasmClient = (await import('@fedimint/fedimint-client-wasm-bundler'))\n .WasmClient\n self.postMessage({ type: 'initialized', data: {}, requestId })\n } else if (type === 'open') {\n const { clientName } = payload\n client = (await WasmClient.open(clientName)) || null\n self.postMessage({\n type: 'open',\n data: { success: !!client },\n requestId,\n })\n } else if (type === 'join') {\n const { inviteCode, clientName: joinClientName } = payload\n try {\n client = await WasmClient.join_federation(joinClientName, inviteCode)\n self.postMessage({\n type: 'join',\n data: { success: !!client },\n requestId,\n })\n } catch (e) {\n self.postMessage({ type: 'error', error: e.message, requestId })\n }\n } else if (type === 'rpc') {\n const { module, method, body } = payload\n console.log('RPC received', module, method, body)\n if (!client) {\n self.postMessage({\n type: 'error',\n error: 'WasmClient not initialized',\n requestId,\n })\n return\n }\n const rpcHandle = await client.rpc(\n module,\n method,\n JSON.stringify(body),\n (res) => {\n console.log('RPC response', requestId, res)\n const data = JSON.parse(res)\n self.postMessage({ type: 'rpcResponse', requestId, ...data })\n\n if (data.end !== undefined) {\n // Handle stream ending\n const handle = streamCancelMap.get(requestId)\n handle?.free()\n }\n },\n )\n streamCancelMap.set(requestId, rpcHandle)\n } else if (type === 'unsubscribe') {\n const rpcHandle = streamCancelMap.get(requestId)\n if (rpcHandle) {\n rpcHandle.cancel()\n rpcHandle.free()\n streamCancelMap.delete(requestId)\n }\n } else if (type === 'cleanup') {\n console.log('cleanup message received')\n client?.free()\n self.postMessage({\n type: 'cleanup',\n data: {},\n requestId,\n })\n close()\n } else if (type === 'parseInviteCode') {\n const { inviteCode } = payload\n try {\n const res = WasmClient.parse_invite_code(inviteCode)\n const parsedRes = JSON.parse(res)\n self.postMessage({\n type: 'parseInviteCode',\n data: parsedRes,\n requestId,\n })\n } catch (error) {\n self.postMessage({\n type: 'error',\n error: `Failed to parse invite code: ${error.message}`,\n requestId,\n })\n }\n } else if (type === 'parseBolt11Invoice') {\n const { invoiceStr } = payload\n try {\n const res = WasmClient.parse_bolt11_invoice(invoiceStr)\n const parsedRes = JSON.parse(res)\n self.postMessage({\n type: 'parseBolt11Invoice',\n data: parsedRes,\n requestId,\n })\n } catch (error) {\n self.postMessage({\n type: 'error',\n error: `Failed to parse invoice: ${error.message}`,\n requestId,\n })\n }\n } else {\n self.postMessage({\n type: 'error',\n error: 'Unknown message type',\n requestId,\n })\n }\n } catch (e) {\n console.error('ERROR', e)\n self.postMessage({ type: 'error', error: e, requestId })\n }\n}\n\n// self.postMessage({ type: 'init', data: {} })\n"],"names":["globalThis","__vitest_browser_runner__","wrapDynamicImport","foo","WasmClient","client","streamCancelMap","Map","console","log","self","onmessage","async","event","type","payload","requestId","data","import","postMessage","clientName","open","success","inviteCode","joinClientName","join_federation","e","error","message","module","method","body","rpcHandle","rpc","JSON","stringify","res","parse","undefined","end","handle","get","free","set","cancel","delete","close","parse_invite_code","parsedRes","invoiceStr","parse_bolt11_invoice"],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sources":["../src/worker/worker.js"],"sourcesContent":["// Web Worker for fedimint-client-wasm to run in the browser\n\n// HACK: Fixes vitest browser runner\n// TODO: remove once https://github.com/vitest-dev/vitest/pull/6569 lands in a release\nglobalThis.__vitest_browser_runner__ = { wrapDynamicImport: (foo) => foo() }\n\n// dynamically imported Constructor for WasmClient\nlet WasmClient = null\n// client instance\nlet client = null\n\nconst streamCancelMap = new Map()\n\nconst handleFree = (requestId) => {\n streamCancelMap.delete(requestId)\n}\n\nconsole.log('Worker - init')\n\n/**\n * Type definitions for the worker messages\n *\n * @typedef {import('../types/worker').WorkerMessageType} WorkerMessageType\n * @typedef {{\n * type: WorkerMessageType\n * payload: any\n * requestId: number\n * }} WorkerMessage\n * @param {{data: WorkerMessage}} event\n */\nself.onmessage = async (event) => {\n const { type, payload, requestId } = event.data\n\n try {\n if (type === 'init') {\n WasmClient = (await import('@fedimint/fedimint-client-wasm-bundler'))\n .WasmClient\n self.postMessage({ type: 'initialized', data: {}, requestId })\n } else if (type === 'open') {\n const { clientName } = payload\n client = (await WasmClient.open(clientName)) || null\n self.postMessage({\n type: 'open',\n data: { success: !!client },\n requestId,\n })\n } else if (type === 'join') {\n const { inviteCode, clientName: joinClientName } = payload\n try {\n client = await WasmClient.join_federation(joinClientName, inviteCode)\n self.postMessage({\n type: 'join',\n data: { success: !!client },\n requestId,\n })\n } catch (e) {\n self.postMessage({ type: 'error', error: e.message, requestId })\n }\n } else if (type === 'previewFederation') {\n const { inviteCode } = payload\n try {\n client = await WasmClient.preview_federation(inviteCode)\n const parsed = JSON.parse(client)\n self.postMessage({\n type: 'previewFederation',\n data: {\n success: !!client,\n config: parsed.config,\n federation_id: parsed.federation_id,\n },\n requestId,\n })\n } catch (e) {\n self.postMessage({ type: 'error', error: e.message, requestId })\n }\n } else if (type === 'rpc') {\n const { module, method, body } = payload\n console.log('RPC received', module, method, body)\n if (!client) {\n self.postMessage({\n type: 'error',\n error: 'WasmClient not initialized',\n requestId,\n })\n return\n }\n const rpcHandle = await client.rpc(\n module,\n method,\n JSON.stringify(body),\n (res) => {\n console.log('RPC response', requestId, res)\n const data = JSON.parse(res)\n self.postMessage({ type: 'rpcResponse', requestId, ...data })\n\n if (data.end !== undefined) {\n // Handle stream ending\n const handle = streamCancelMap.get(requestId)\n handle?.free()\n }\n },\n )\n streamCancelMap.set(requestId, rpcHandle)\n } else if (type === 'unsubscribe') {\n const rpcHandle = streamCancelMap.get(requestId)\n if (rpcHandle) {\n rpcHandle.cancel()\n rpcHandle.free()\n streamCancelMap.delete(requestId)\n }\n } else if (type === 'cleanup') {\n console.log('cleanup message received')\n client?.free()\n self.postMessage({\n type: 'cleanup',\n data: {},\n requestId,\n })\n close()\n } else if (type === 'parseInviteCode') {\n const { inviteCode } = payload\n try {\n const res = WasmClient.parse_invite_code(inviteCode)\n const parsedRes = JSON.parse(res)\n self.postMessage({\n type: 'parseInviteCode',\n data: parsedRes,\n requestId,\n })\n } catch (error) {\n self.postMessage({\n type: 'error',\n error: `Failed to parse invite code: ${error.message}`,\n requestId,\n })\n }\n } else if (type === 'parseBolt11Invoice') {\n const { invoiceStr } = payload\n try {\n const res = WasmClient.parse_bolt11_invoice(invoiceStr)\n const parsedRes = JSON.parse(res)\n self.postMessage({\n type: 'parseBolt11Invoice',\n data: parsedRes,\n requestId,\n })\n } catch (error) {\n self.postMessage({\n type: 'error',\n error: `Failed to parse invoice: ${error.message}`,\n requestId,\n })\n }\n } else {\n self.postMessage({\n type: 'error',\n error: 'Unknown message type',\n requestId,\n })\n }\n } catch (e) {\n console.error('ERROR', e)\n self.postMessage({ type: 'error', error: e, requestId })\n }\n}\n\n// self.postMessage({ type: 'init', data: {} })\n"],"names":["globalThis","__vitest_browser_runner__","wrapDynamicImport","foo","WasmClient","client","streamCancelMap","Map","console","log","self","onmessage","async","event","type","payload","requestId","data","import","postMessage","clientName","open","success","inviteCode","joinClientName","join_federation","e","error","message","preview_federation","parsed","JSON","parse","config","federation_id","module","method","body","rpcHandle","rpc","stringify","res","undefined","end","handle","get","free","set","cancel","delete","close","parse_invite_code","parsedRes","invoiceStr","parse_bolt11_invoice"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fedimint/core-web",
3
3
  "description": "Library for building web apps with a fedimint client",
4
- "version": "0.0.11",
4
+ "version": "0.1.0-alex-cache-wasm-build",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/fedimint/fedimint-web-sdk.git",
@@ -19,7 +19,7 @@
19
19
  "main": "./dist/index.js",
20
20
  "types": "./dist/index.d.ts",
21
21
  "dependencies": {
22
- "@fedimint/fedimint-client-wasm-bundler": "0.0.3"
22
+ "@fedimint/fedimint-client-wasm-bundler": "0.1.0-alex-cache-wasm-build"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@rollup/plugin-terser": "^0.4.4",
@@ -58,3 +58,16 @@ walletTest('empty getBalance', async ({ wallet }) => {
58
58
  await expect(wallet.waitForOpen()).resolves.toBeUndefined()
59
59
  await expect(wallet.balance.getBalance()).resolves.toEqual(0)
60
60
  })
61
+
62
+ walletTest('previewFederation', async ({ unopenedWallet }) => {
63
+ const preview = await unopenedWallet.previewFederation(
64
+ unopenedWallet.testing.TESTING_INVITE,
65
+ )
66
+ expect(preview).toBeDefined()
67
+ expect(preview.config).toBeDefined()
68
+ expect(preview.federation_id).toBeDefined()
69
+ expect(preview).toMatchObject({
70
+ config: expect.any(Object),
71
+ federation_id: expect.any(String),
72
+ })
73
+ })
@@ -5,9 +5,10 @@ import {
5
5
  LightningService,
6
6
  FederationService,
7
7
  RecoveryService,
8
+ WalletService,
8
9
  } from './services'
9
10
  import { logger, type LogLevel } from './utils/logger'
10
- import { JSONValue } from './types'
11
+ import { FederationConfig, JSONValue } from './types'
11
12
 
12
13
  const DEFAULT_CLIENT_NAME = 'fm-default' as const
13
14
 
@@ -19,6 +20,7 @@ export class FedimintWallet {
19
20
  public lightning: LightningService
20
21
  public federation: FederationService
21
22
  public recovery: RecoveryService
23
+ public wallet: WalletService
22
24
 
23
25
  private _openPromise: Promise<void> | undefined = undefined
24
26
  private _resolveOpen: () => void = () => {}
@@ -63,6 +65,7 @@ export class FedimintWallet {
63
65
  this.balance = new BalanceService(this._client)
64
66
  this.federation = new FederationService(this._client)
65
67
  this.recovery = new RecoveryService(this._client)
68
+ this.wallet = new WalletService(this._client)
66
69
 
67
70
  logger.info('FedimintWallet instantiated')
68
71
 
@@ -136,6 +139,14 @@ export class FedimintWallet {
136
139
  return this._isOpen
137
140
  }
138
141
 
142
+ async previewFederation(inviteCode: string) {
143
+ const response = this._client.sendSingleMessage<{
144
+ config: FederationConfig
145
+ federation_id: string
146
+ }>('previewFederation', { inviteCode })
147
+ return response
148
+ }
149
+
139
150
  /**
140
151
  * Sets the log level for the library.
141
152
  * @param level The desired log level ('DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE').
@@ -31,3 +31,44 @@ walletTest('parseNotes should parse notes', async ({ wallet }) => {
31
31
 
32
32
  await expect(wallet.mint.reissueExternalNotes('test')).rejects.toThrow()
33
33
  })
34
+
35
+ walletTest(
36
+ 'getNotesByDenomination should return empty object if wallet is empty',
37
+ async ({ wallet }) => {
38
+ expect(wallet).toBeDefined()
39
+ expect(wallet.isOpen()).toBe(true)
40
+
41
+ const notes = await wallet.mint.getNotesByDenomination()
42
+ const balance = await wallet.balance.getBalance()
43
+ expect(balance).toEqual(0)
44
+ expect(notes).toBeDefined()
45
+ expect(notes).toEqual({})
46
+ },
47
+ )
48
+
49
+ walletTest(
50
+ 'getNotesByDenomination should get notes by denomination',
51
+ async ({ fundedWallet }) => {
52
+ expect(fundedWallet).toBeDefined()
53
+ expect(fundedWallet.isOpen()).toBe(true)
54
+
55
+ const notes = await fundedWallet.mint.getNotesByDenomination()
56
+ const balance = await fundedWallet.balance.getBalance()
57
+ expect(balance).toEqual(10000)
58
+ expect(notes).toBeDefined()
59
+ expect(notes).toEqual({
60
+ '1': 2,
61
+ '1024': 3,
62
+ '128': 2,
63
+ '16': 3,
64
+ '2': 3,
65
+ '2048': 2,
66
+ '256': 3,
67
+ '32': 2,
68
+ '4': 2,
69
+ '512': 3,
70
+ '64': 2,
71
+ '8': 2,
72
+ })
73
+ },
74
+ )
@@ -5,6 +5,7 @@ import type {
5
5
  JSONValue,
6
6
  MintSpendNotesResponse,
7
7
  MSats,
8
+ NoteCountByDenomination,
8
9
  ReissueExternalNotesState,
9
10
  SpendNotesState,
10
11
  } from '../types'
@@ -117,4 +118,12 @@ export class MintService {
117
118
  operation_id: operationId,
118
119
  })
119
120
  }
121
+
122
+ async getNotesByDenomination() {
123
+ return await this.client.rpcSingle<NoteCountByDenomination>(
124
+ 'mint',
125
+ 'note_counts_by_denomination',
126
+ {},
127
+ )
128
+ }
120
129
  }
@@ -0,0 +1,24 @@
1
+ import { expect } from 'vitest'
2
+ import { walletTest } from '../test/fixtures'
3
+ import { TxOutputSummary, WalletSummary } from '../types'
4
+
5
+ walletTest(
6
+ 'getWalletSummary should return empty object if wallet is empty',
7
+ async ({ wallet }) => {
8
+ expect(wallet).toBeDefined()
9
+ expect(wallet.isOpen()).toBe(true)
10
+
11
+ const balance = await wallet.balance.getBalance()
12
+ expect(balance).toEqual(0)
13
+
14
+ const summary = await wallet.wallet.getWalletSummary()
15
+ const expectedSummary = {
16
+ spendable_utxos: expect.any(Array<TxOutputSummary>),
17
+ unsigned_peg_out_txos: expect.any(Array<TxOutputSummary>),
18
+ unsigned_change_utxos: expect.any(Array<TxOutputSummary>),
19
+ unconfirmed_peg_out_txos: expect.any(Array<TxOutputSummary>),
20
+ unconfirmed_change_utxos: expect.any(Array<TxOutputSummary>),
21
+ } satisfies WalletSummary
22
+ expect(summary).toEqual(expect.objectContaining(expectedSummary))
23
+ },
24
+ )
@@ -0,0 +1,10 @@
1
+ import { WalletSummary } from '../types'
2
+ import { WorkerClient } from '../worker'
3
+
4
+ export class WalletService {
5
+ constructor(private client: WorkerClient) {}
6
+
7
+ async getWalletSummary(): Promise<WalletSummary> {
8
+ return await this.client.rpcSingle('wallet', 'get_wallet_summary', {})
9
+ }
10
+ }
@@ -3,3 +3,4 @@ export { BalanceService } from './BalanceService'
3
3
  export { LightningService } from './LightningService'
4
4
  export { RecoveryService } from './RecoveryService'
5
5
  export { FederationService } from './FederationService'
6
+ export { WalletService } from './WalletService'
@@ -25,7 +25,7 @@ export class TestingService {
25
25
  }
26
26
 
27
27
  async getInviteCode() {
28
- const res = await fetch('http://localhost:15243/connect-string')
28
+ const res = await fetch(`${import.meta.env.FAUCET}/connect-string`)
29
29
  if (res.ok) {
30
30
  return await res.text()
31
31
  } else {
@@ -34,7 +34,7 @@ export class TestingService {
34
34
  }
35
35
 
36
36
  private async getFaucetGatewayApi() {
37
- const res = await fetch('http://localhost:15243/gateway-api')
37
+ const res = await fetch(`${import.meta.env.FAUCET}/gateway-api`)
38
38
  if (res.ok) {
39
39
  return await res.text()
40
40
  } else {
@@ -43,6 +43,7 @@ export class TestingService {
43
43
  }
44
44
 
45
45
  async getFaucetGatewayInfo() {
46
+ await this.lightning.updateGatewayCache()
46
47
  const gateways = await this.lightning.listGateways()
47
48
  const api = await this.getFaucetGatewayApi()
48
49
  const gateway = gateways.find((g) => g.info.api === api)
@@ -53,7 +54,7 @@ export class TestingService {
53
54
  }
54
55
 
55
56
  async payFaucetInvoice(invoice: string) {
56
- const res = await fetch('http://localhost:15243/pay', {
57
+ const res = await fetch(`${import.meta.env.FAUCET}/pay`, {
57
58
  method: 'POST',
58
59
  body: invoice,
59
60
  })
@@ -65,7 +66,7 @@ export class TestingService {
65
66
  }
66
67
 
67
68
  async createFaucetInvoice(amount: number) {
68
- const res = await fetch('http://localhost:15243/invoice', {
69
+ const res = await fetch(`${import.meta.env.FAUCET}/invoice`, {
69
70
  method: 'POST',
70
71
  body: amount.toString(),
71
72
  })
@@ -8,6 +8,7 @@ import { WorkerClient } from '../worker/WorkerClient'
8
8
  export const walletTest = test.extend<{
9
9
  wallet: TestFedimintWallet
10
10
  fundedWallet: TestFedimintWallet
11
+ unopenedWallet: TestFedimintWallet
11
12
  }>({
12
13
  wallet: async ({}, use) => {
13
14
  const randomTestingId = Math.random().toString(36).substring(2, 15)
@@ -36,6 +37,11 @@ export const walletTest = test.extend<{
36
37
  await wallet.fundWallet(10_000)
37
38
  await use(wallet)
38
39
  },
40
+ unopenedWallet: async ({}, use) => {
41
+ const wallet = new TestFedimintWallet()
42
+ await wallet.initialize()
43
+ await use(wallet)
44
+ },
39
45
  })
40
46
 
41
47
  /**
@@ -1,7 +1,11 @@
1
- import { MSats, Duration, JSONValue } from './utils'
1
+ import { MSats, Duration, JSONValue, JSONObject } from './utils'
2
2
 
3
- const MODULE_KINDS = ['', 'ln', 'mint'] as const
3
+ const MODULE_KINDS = ['', 'ln', 'mint', 'wallet'] as const
4
4
  type ModuleKind = (typeof MODULE_KINDS)[number]
5
+
6
+ // TODO: Define the structure of FederationConfig
7
+ type FederationConfig = JSONObject
8
+
5
9
  type GatewayInfo = {
6
10
  gateway_id: string
7
11
  api: string
@@ -93,8 +97,28 @@ type SpendNotesState =
93
97
  | 'Success'
94
98
  | 'Refunded'
95
99
 
100
+ type TxOutputSummary = {
101
+ outpoint: {
102
+ txid: string
103
+ vout: number
104
+ }
105
+ amount: number
106
+ }
107
+
108
+ type WalletSummary = {
109
+ spendable_utxos: TxOutputSummary[]
110
+ unsigned_peg_out_txos: TxOutputSummary[]
111
+ unsigned_change_utxos: TxOutputSummary[]
112
+ unconfirmed_peg_out_txos: TxOutputSummary[]
113
+ unconfirmed_change_utxos: TxOutputSummary[]
114
+ }
115
+
116
+ /** Keys are powers of 2 */
117
+ type NoteCountByDenomination = Record<number, number>
118
+
96
119
  export {
97
120
  LightningGateway,
121
+ FederationConfig,
98
122
  RouteHint,
99
123
  FeeToAmount,
100
124
  OutgoingLightningPayment,
@@ -111,4 +135,7 @@ export {
111
135
  ReissueExternalNotesState,
112
136
  MintSpendNotesResponse,
113
137
  SpendNotesState,
138
+ WalletSummary,
139
+ TxOutputSummary,
140
+ NoteCountByDenomination,
114
141
  }
@@ -10,6 +10,7 @@ const WorkerMessageTypes = [
10
10
  'cleanup',
11
11
  'parseInviteCode',
12
12
  'parseBolt11Invoice',
13
+ 'previewFederation',
13
14
  ] as const
14
15
 
15
16
  export type WorkerMessageType = (typeof WorkerMessageTypes)[number]
@@ -17,6 +17,17 @@ const handleFree = (requestId) => {
17
17
 
18
18
  console.log('Worker - init')
19
19
 
20
+ /**
21
+ * Type definitions for the worker messages
22
+ *
23
+ * @typedef {import('../types/worker').WorkerMessageType} WorkerMessageType
24
+ * @typedef {{
25
+ * type: WorkerMessageType
26
+ * payload: any
27
+ * requestId: number
28
+ * }} WorkerMessage
29
+ * @param {{data: WorkerMessage}} event
30
+ */
20
31
  self.onmessage = async (event) => {
21
32
  const { type, payload, requestId } = event.data
22
33
 
@@ -45,6 +56,23 @@ self.onmessage = async (event) => {
45
56
  } catch (e) {
46
57
  self.postMessage({ type: 'error', error: e.message, requestId })
47
58
  }
59
+ } else if (type === 'previewFederation') {
60
+ const { inviteCode } = payload
61
+ try {
62
+ client = await WasmClient.preview_federation(inviteCode)
63
+ const parsed = JSON.parse(client)
64
+ self.postMessage({
65
+ type: 'previewFederation',
66
+ data: {
67
+ success: !!client,
68
+ config: parsed.config,
69
+ federation_id: parsed.federation_id,
70
+ },
71
+ requestId,
72
+ })
73
+ } catch (e) {
74
+ self.postMessage({ type: 'error', error: e.message, requestId })
75
+ }
48
76
  } else if (type === 'rpc') {
49
77
  const { module, method, body } = payload
50
78
  console.log('RPC received', module, method, body)