@fedimint/core-web 0.0.7 → 0.0.8
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/dts/FedimintWallet.d.ts +1 -1
- package/dist/dts/FedimintWallet.d.ts.map +1 -1
- package/dist/dts/services/LightningService.d.ts +1 -1
- package/dist/dts/services/LightningService.d.ts.map +1 -1
- package/dist/dts/services/MintService.d.ts +1 -1
- package/dist/dts/services/MintService.d.ts.map +1 -1
- package/dist/dts/types/worker.d.ts +1 -1
- package/dist/dts/types/worker.d.ts.map +1 -1
- package/dist/dts/worker/WorkerClient.d.ts +1 -1
- package/dist/dts/worker/WorkerClient.d.ts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/worker.js +1 -1
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
- package/src/FedimintWallet.test.ts +43 -60
- package/src/FedimintWallet.ts +14 -8
- package/src/services/FederationService.test.ts +1 -1
- package/src/services/LightningService.test.ts +24 -30
- package/src/services/LightningService.ts +17 -8
- package/src/services/MintService.test.ts +8 -1
- package/src/services/MintService.ts +3 -4
- package/src/test/TestFedimintWallet.ts +10 -1
- package/src/test/TestingService.ts +49 -30
- package/src/test/fixtures.test.ts +18 -0
- package/src/test/{setupTests.ts → fixtures.ts} +25 -4
- package/src/types/worker.ts +1 -0
- package/src/worker/WorkerClient.test.ts +6 -0
- package/src/worker/WorkerClient.ts +3 -2
- package/src/worker/worker.js +9 -0
- package/src/worker/worker.test.ts +1 -1
|
@@ -43,7 +43,7 @@ export declare class FedimintWallet {
|
|
|
43
43
|
initialize(): Promise<void>;
|
|
44
44
|
waitForOpen(): Promise<void>;
|
|
45
45
|
open(clientName?: string): Promise<boolean>;
|
|
46
|
-
joinFederation(inviteCode: string, clientName?: string): Promise<
|
|
46
|
+
joinFederation(inviteCode: string, clientName?: string): Promise<boolean>;
|
|
47
47
|
/**
|
|
48
48
|
* This should ONLY be called when UNLOADING the wallet client.
|
|
49
49
|
* After this call, the FedimintWallet instance should be discarded.
|
|
@@ -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;AAItD,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;
|
|
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;AAItD,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;CAI5B"}
|
|
@@ -4,7 +4,7 @@ export declare class LightningService {
|
|
|
4
4
|
private client;
|
|
5
5
|
constructor(client: WorkerClient);
|
|
6
6
|
createInvoice(amount: MSats, description: string, expiryTime?: number, // in seconds
|
|
7
|
-
|
|
7
|
+
gatewayInfo?: GatewayInfo, extraMeta?: JSONObject): Promise<CreateBolt11Response>;
|
|
8
8
|
createInvoiceTweaked(amount: MSats, description: string, tweakKey: string, index: number, expiryTime?: number, // in seconds
|
|
9
9
|
gatewayInfo?: GatewayInfo, extraMeta?: JSONObject): Promise<CreateBolt11Response>;
|
|
10
10
|
scanReceivesForTweaks(tweakKey: string, indices: number[], extraMeta?: JSONObject): Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightningService.d.ts","sourceRoot":"","sources":["../../../src/services/LightningService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,KAAK,EACL,wBAAwB,EACzB,MAAM,UAAU,CAAA;AAEjB,qBAAa,gBAAgB;IACf,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,aAAa,CACjB,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa;IAClC,
|
|
1
|
+
{"version":3,"file":"LightningService.d.ts","sourceRoot":"","sources":["../../../src/services/LightningService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,KAAK,EACL,wBAAwB,EACzB,MAAM,UAAU,CAAA;AAEjB,qBAAa,gBAAgB;IACf,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,aAAa,CACjB,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa;IAClC,WAAW,CAAC,EAAE,WAAW,EACzB,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,oBAAoB,CAAC;IAW1B,oBAAoB,CACxB,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa;IAClC,WAAW,CAAC,EAAE,WAAW,EACzB,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,oBAAoB,CAAC;IAkB1B,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC;YAQN,sBAAsB;IAM9B,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,EACzB,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,wBAAwB,CAAC;IASpC,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAe,EACrD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAa7C,cAAc,CACZ,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAe,EACjD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAa7C,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAe,EACrD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAavC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAyB5D,UAAU,CACd,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,aAAa,GAAE,OAAe,GAC7B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAO7B,YAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI3C,kBAAkB,IAAI,OAAO,CAAC,SAAS,CAAC;CAG/C"}
|
|
@@ -6,7 +6,7 @@ export declare class MintService {
|
|
|
6
6
|
redeemEcash(notes: string): Promise<void>;
|
|
7
7
|
reissueExternalNotes(oobNotes: string, extraMeta?: JSONObject): Promise<string>;
|
|
8
8
|
subscribeReissueExternalNotes(operationId: string, onSuccess?: (state: JSONValue) => void, onError?: (error: string) => void): import("../types").CancelFunction;
|
|
9
|
-
spendNotes(minAmount: MSats, tryCancelAfter?: number | Duration, //
|
|
9
|
+
spendNotes(minAmount: MSats, tryCancelAfter?: number | Duration, // defaults to 1 day
|
|
10
10
|
includeInvite?: boolean, extraMeta?: JSONValue): Promise<MintSpendNotesResponse>;
|
|
11
11
|
parseNotes(oobNotes: string): Promise<MSats>;
|
|
12
12
|
tryCancelSpendNotes(operationId: string): Promise<void>;
|
|
@@ -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,EACT,sBAAsB,EACtB,KAAK,EAEN,MAAM,UAAU,CAAA;AAEjB,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzC,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,UAAe,GACzB,OAAO,CAAC,MAAM,CAAC;IAOlB,6BAA6B,CAC3B,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAe,EAChD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAavC,UAAU,CACd,SAAS,EAAE,KAAK,
|
|
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,EACT,sBAAsB,EACtB,KAAK,EAEN,MAAM,UAAU,CAAA;AAEjB,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzC,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,UAAe,GACzB,OAAO,CAAC,MAAM,CAAC;IAOlB,6BAA6B,CAC3B,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAe,EAChD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAavC,UAAU,CACd,SAAS,EAAE,KAAK,EAIhB,cAAc,GAAE,MAAM,GAAG,QAAoB,EAAE,oBAAoB;IACnE,aAAa,GAAE,OAAe,EAC9B,SAAS,GAAE,SAAc,GACxB,OAAO,CAAC,sBAAsB,CAAC;IAyB5B,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAM5C,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,mBAAmB,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAe,EAChD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAavC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAKnE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe"];
|
|
1
|
+
declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe", "cleanup"];
|
|
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,
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/types/worker.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,kBAAkB,mGAUd,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA"}
|
|
@@ -37,7 +37,7 @@ export declare class WorkerClient {
|
|
|
37
37
|
rpcStream<Response extends JSONValue = JSONValue, Body extends JSONValue = JSONValue>(module: ModuleKind, method: string, body: Body, onSuccess: (res: Response) => void, onError: (res: StreamError['error']) => void, onEnd?: () => void): CancelFunction;
|
|
38
38
|
private _rpcStreamInner;
|
|
39
39
|
rpcSingle<Response extends JSONValue = JSONValue>(module: ModuleKind, method: string, body: JSONValue): Promise<Response>;
|
|
40
|
-
cleanup(): void
|
|
40
|
+
cleanup(): Promise<void>;
|
|
41
41
|
_getRequestCounter(): number;
|
|
42
42
|
_getRequestCallbackMap(): Map<number, (value: any) => void>;
|
|
43
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerClient.d.ts","sourceRoot":"","sources":["../../../src/worker/WorkerClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EAEX,iBAAiB,EAClB,MAAM,UAAU,CAAA;AAKjB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,WAAW,CAA0C;;IAc7D,UAAU;IAMV,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,mBAAmB;IAuB3B,iBAAiB,CACf,QAAQ,SAAS,SAAS,GAAG,SAAS,EACtC,OAAO,SAAS,SAAS,GAAG,SAAS,EACrC,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IA2BhE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,SAAS,CACP,QAAQ,SAAS,SAAS,GAAG,SAAS,EACtC,IAAI,SAAS,SAAS,GAAG,SAAS,EAElC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,EAClC,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,EAC5C,KAAK,GAAE,MAAM,IAAe,GAC3B,cAAc;YAoCH,eAAe;IA2C7B,SAAS,CAAC,QAAQ,SAAS,SAAS,GAAG,SAAS,EAC9C,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkerClient.d.ts","sourceRoot":"","sources":["../../../src/worker/WorkerClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EAEX,iBAAiB,EAClB,MAAM,UAAU,CAAA;AAKjB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,WAAW,CAA0C;;IAc7D,UAAU;IAMV,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,mBAAmB;IAuB3B,iBAAiB,CACf,QAAQ,SAAS,SAAS,GAAG,SAAS,EACtC,OAAO,SAAS,SAAS,GAAG,SAAS,EACrC,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IA2BhE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,SAAS,CACP,QAAQ,SAAS,SAAS,GAAG,SAAS,EACtC,IAAI,SAAS,SAAS,GAAG,SAAS,EAElC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,EAClC,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,EAC5C,KAAK,GAAE,MAAM,IAAe,GAC3B,cAAc;YAoCH,eAAe;IA2C7B,SAAS,CAAC,QAAQ,SAAS,SAAS,GAAG,SAAS,EAC9C,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,QAAQ,CAAC;IAOd,OAAO;IAQb,kBAAkB;IAGlB,sBAAsB,wBA1N6B,GAAG,KAAK,IAAI;CA6NhE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -103,7 +103,7 @@ type MintSpendNotesResponse = {
|
|
|
103
103
|
};
|
|
104
104
|
//# sourceMappingURL=wallet.d.ts.map
|
|
105
105
|
|
|
106
|
-
declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe"];
|
|
106
|
+
declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe", "cleanup"];
|
|
107
107
|
type WorkerMessageType = (typeof WorkerMessageTypes)[number];
|
|
108
108
|
|
|
109
109
|
declare class WorkerClient {
|
|
@@ -144,7 +144,7 @@ declare class WorkerClient {
|
|
|
144
144
|
rpcStream<Response extends JSONValue = JSONValue, Body extends JSONValue = JSONValue>(module: ModuleKind, method: string, body: Body, onSuccess: (res: Response) => void, onError: (res: StreamError['error']) => void, onEnd?: () => void): CancelFunction;
|
|
145
145
|
private _rpcStreamInner;
|
|
146
146
|
rpcSingle<Response extends JSONValue = JSONValue>(module: ModuleKind, method: string, body: JSONValue): Promise<Response>;
|
|
147
|
-
cleanup(): void
|
|
147
|
+
cleanup(): Promise<void>;
|
|
148
148
|
_getRequestCounter(): number;
|
|
149
149
|
_getRequestCallbackMap(): Map<number, (value: any) => void>;
|
|
150
150
|
}
|
|
@@ -155,7 +155,7 @@ declare class MintService {
|
|
|
155
155
|
redeemEcash(notes: string): Promise<void>;
|
|
156
156
|
reissueExternalNotes(oobNotes: string, extraMeta?: JSONObject): Promise<string>;
|
|
157
157
|
subscribeReissueExternalNotes(operationId: string, onSuccess?: (state: JSONValue) => void, onError?: (error: string) => void): CancelFunction;
|
|
158
|
-
spendNotes(minAmount: MSats, tryCancelAfter?: number | Duration, //
|
|
158
|
+
spendNotes(minAmount: MSats, tryCancelAfter?: number | Duration, // defaults to 1 day
|
|
159
159
|
includeInvite?: boolean, extraMeta?: JSONValue): Promise<MintSpendNotesResponse>;
|
|
160
160
|
parseNotes(oobNotes: string): Promise<MSats>;
|
|
161
161
|
tryCancelSpendNotes(operationId: string): Promise<void>;
|
|
@@ -200,7 +200,7 @@ declare class LightningService {
|
|
|
200
200
|
private client;
|
|
201
201
|
constructor(client: WorkerClient);
|
|
202
202
|
createInvoice(amount: MSats, description: string, expiryTime?: number, // in seconds
|
|
203
|
-
|
|
203
|
+
gatewayInfo?: GatewayInfo, extraMeta?: JSONObject): Promise<CreateBolt11Response>;
|
|
204
204
|
createInvoiceTweaked(amount: MSats, description: string, tweakKey: string, index: number, expiryTime?: number, // in seconds
|
|
205
205
|
gatewayInfo?: GatewayInfo, extraMeta?: JSONObject): Promise<CreateBolt11Response>;
|
|
206
206
|
scanReceivesForTweaks(tweakKey: string, indices: number[], extraMeta?: JSONObject): Promise<string[]>;
|
|
@@ -281,7 +281,7 @@ declare class FedimintWallet {
|
|
|
281
281
|
initialize(): Promise<void>;
|
|
282
282
|
waitForOpen(): Promise<void>;
|
|
283
283
|
open(clientName?: string): Promise<boolean>;
|
|
284
|
-
joinFederation(inviteCode: string, clientName?: string): Promise<
|
|
284
|
+
joinFederation(inviteCode: string, clientName?: string): Promise<boolean>;
|
|
285
285
|
/**
|
|
286
286
|
* This should ONLY be called when UNLOADING the wallet client.
|
|
287
287
|
* After this call, the FedimintWallet instance should be discarded.
|
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 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
|
|
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){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",{min_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})}}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??{}})}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)}subscribeLnReceive(e,t=()=>{},i=()=>{}){return this.client.rpcStream("ln","subscribe_ln_receive",{operation_id:e},t,i)}async waitForReceive(e){return new Promise(((t,i)=>{let n;const s=setTimeout((()=>{i(new Error("Timeout waiting for receive"))}),15e3);n=this.subscribeLnReceive(e,(e=>{"claimed"===e&&(clearTimeout(s),n(),t(e))}),(e=>{clearTimeout(s),n(),i(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){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 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),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}.`)}}export{l 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","terminate","clear","_getRequestCounter","_getRequestCallbackMap","MintService","client","redeemEcash","notes","oob_notes","extra_meta","reissueExternalNotes","oobNotes","extraMeta","subscribeReissueExternalNotes","operationId","operation_id","spendNotes","minAmount","tryCancelAfter","includeInvite","duration","nanos","secs","res","min_amount","try_cancel_after","include_invite","parseNotes","tryCancelSpendNotes","subscribeSpendNotes","awaitSpendOobRefund","BalanceService","getBalance","subscribeBalance","parseInt","LightningService","createInvoice","amount","description","expiryTime","gatewayInfo","gateway","_getDefaultGatewayInfo","expiry_time","createInvoiceTweaked","tweakKey","index","user_key","scanReceivesForTweaks","indices","updateGatewayCache","gateways","listGateways","payInvoice","invoice","maybe_gateway","subscribeLnClaim","subscribeLnPay","subscribeLnReceive","waitForReceive","Error","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","success","joinFederation","inviteCode","isOpen","setLogLevel"],"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/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","minAmount","tryCancelAfter","includeInvite","duration","nanos","secs","res","min_amount","try_cancel_after","include_invite","parseNotes","tryCancelSpendNotes","subscribeSpendNotes","awaitSpendOobRefund","BalanceService","getBalance","subscribeBalance","parseInt","LightningService","createInvoice","amount","description","expiryTime","gatewayInfo","gateway","_getDefaultGatewayInfo","expiry_time","createInvoiceTweaked","tweakKey","index","user_key","scanReceivesForTweaks","indices","updateGatewayCache","gateways","listGateways","payInvoice","invoice","maybe_gateway","subscribeLnClaim","subscribeLnPay","subscribeLnReceive","waitForReceive","timeoutId","Error","clearTimeout","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","success","joinFederation","inviteCode","e","isOpen","setLogLevel"],"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:n,requestId:
|
|
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:n,requestId:a}=o.data;try{if("init"===r)e=(await import("@fedimint/fedimint-client-wasm-bundler")).WasmClient,self.postMessage({type:"initialized",data:{},requestId:a});else if("open"===r){const{clientName:t}=n;s=await e.open(t)||null,self.postMessage({type:"open",data:{success:!!s},requestId:a})}else if("join"===r){const{inviteCode:t,clientName:o}=n;try{s=await e.join_federation(o,t),self.postMessage({type:"join",data:{success:!!s},requestId:a})}catch(e){self.postMessage({type:"error",error:e.message,requestId:a})}}else if("rpc"===r){const{module:e,method:o,body:r}=n;if(console.log("RPC received",e,o,r),!s)return void self.postMessage({type:"error",error:"WasmClient not initialized",requestId:a});const i=await s.rpc(e,o,JSON.stringify(r),(e=>{console.log("RPC response",a,e);const s=JSON.parse(e);if(self.postMessage({type:"rpcResponse",requestId:a,...s}),void 0!==s.end){const e=t.get(a);e?.free()}}));t.set(a,i)}else if("unsubscribe"===r){const e=t.get(a);e&&(e.cancel(),e.free(),t.delete(a))}else"cleanup"===r?(console.log("cleanup message received"),s?.free(),self.postMessage({type:"cleanup",data:{},requestId:a}),close()):self.postMessage({type:"error",error:"Unknown message type",requestId:a})}catch(e){console.error("ERROR",e),self.postMessage({type:"error",error:e,requestId:a})}};
|
|
2
2
|
//# sourceMappingURL=worker.js.map
|
package/dist/worker.js.map
CHANGED
|
@@ -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 {\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"],"mappings":"AAIAA,WAAWC,0BAA4B,CAAEC,kBAAoBC,GAAQA,KAGrE,IAAIC,EAAa,KAEbC,EAAS,KAEb,MAAMC,EAAkB,IAAIC,IAM5BC,QAAQC,IAAI,iBAEZC,KAAKC,UAAYC,MAAOC,IACtB,MAAMC,KAAEA,EAAIC,QAAEA,EAAOC,UAAEA,GAAcH,EAAMI,KAE3C,IACE,GAAa,SAATH,EACFV,SAAoBc,OAAO,2CACxBd,WACHM,KAAKS,YAAY,CAAEL,KAAM,cAAeG,KAAM,CAAA,EAAID,mBAC7C,GAAa,SAATF,EAAiB,CAC1B,MAAMM,WAAEA,GAAeL,EACvBV,QAAgBD,EAAWiB,KAAKD,IAAgB,KAChDV,KAAKS,YAAY,CACfL,KAAM,OACNG,KAAM,CAAEK,UAAWjB,GACnBW,aAER,MAAW,GAAa,SAATF,EAAiB,CAC1B,MAAMS,WAAEA,EAAYH,WAAYI,GAAmBT,EACnD,IACEV,QAAeD,EAAWqB,gBAAgBD,EAAgBD,GAC1Db,KAAKS,YAAY,CACfL,KAAM,OACNG,KAAM,CAAEK,UAAWjB,GACnBW,aAEH,CAAC,MAAOU,GACPhB,KAAKS,YAAY,CAAEL,KAAM,QAASa,MAAOD,EAAEE,QAASZ,aACrD,CACP,MAAW,GAAa,QAATF,EAAgB,CACzB,MAAMe,OAAEA,EAAMC,OAAEA,EAAMC,KAAEA,GAAShB,EAEjC,GADAP,QAAQC,IAAI,eAAgBoB,EAAQC,EAAQC,IACvC1B,EAMH,YALAK,KAAKS,YAAY,CACfL,KAAM,QACNa,MAAO,6BACPX,cAIJ,MAAMgB,QAAkB3B,EAAO4B,IAC7BJ,EACAC,EACAI,KAAKC,UAAUJ,IACdK,IACC5B,QAAQC,IAAI,eAAgBO,EAAWoB,GACvC,MAAMnB,EAAOiB,KAAKG,MAAMD,GAGxB,GAFA1B,KAAKS,YAAY,CAAEL,KAAM,cAAeE,eAAcC,SAErCqB,IAAbrB,EAAKsB,IAAmB,CAE1B,MAAMC,EAASlC,EAAgBmC,IAAIzB,GACnCwB,GAAQE,MACT,KAGLpC,EAAgBqC,IAAI3B,EAAWgB,EACrC,MAAW,GAAa,gBAATlB,EAAwB,CACjC,MAAMkB,EAAY1B,EAAgBmC,IAAIzB,GAClCgB,IACFA,EAAUY,SACVZ,EAAUU,OACVpC,EAAgBuC,OAAO7B,GAE/B,
|
|
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 {\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"],"mappings":"AAIAA,WAAWC,0BAA4B,CAAEC,kBAAoBC,GAAQA,KAGrE,IAAIC,EAAa,KAEbC,EAAS,KAEb,MAAMC,EAAkB,IAAIC,IAM5BC,QAAQC,IAAI,iBAEZC,KAAKC,UAAYC,MAAOC,IACtB,MAAMC,KAAEA,EAAIC,QAAEA,EAAOC,UAAEA,GAAcH,EAAMI,KAE3C,IACE,GAAa,SAATH,EACFV,SAAoBc,OAAO,2CACxBd,WACHM,KAAKS,YAAY,CAAEL,KAAM,cAAeG,KAAM,CAAA,EAAID,mBAC7C,GAAa,SAATF,EAAiB,CAC1B,MAAMM,WAAEA,GAAeL,EACvBV,QAAgBD,EAAWiB,KAAKD,IAAgB,KAChDV,KAAKS,YAAY,CACfL,KAAM,OACNG,KAAM,CAAEK,UAAWjB,GACnBW,aAER,MAAW,GAAa,SAATF,EAAiB,CAC1B,MAAMS,WAAEA,EAAYH,WAAYI,GAAmBT,EACnD,IACEV,QAAeD,EAAWqB,gBAAgBD,EAAgBD,GAC1Db,KAAKS,YAAY,CACfL,KAAM,OACNG,KAAM,CAAEK,UAAWjB,GACnBW,aAEH,CAAC,MAAOU,GACPhB,KAAKS,YAAY,CAAEL,KAAM,QAASa,MAAOD,EAAEE,QAASZ,aACrD,CACP,MAAW,GAAa,QAATF,EAAgB,CACzB,MAAMe,OAAEA,EAAMC,OAAEA,EAAMC,KAAEA,GAAShB,EAEjC,GADAP,QAAQC,IAAI,eAAgBoB,EAAQC,EAAQC,IACvC1B,EAMH,YALAK,KAAKS,YAAY,CACfL,KAAM,QACNa,MAAO,6BACPX,cAIJ,MAAMgB,QAAkB3B,EAAO4B,IAC7BJ,EACAC,EACAI,KAAKC,UAAUJ,IACdK,IACC5B,QAAQC,IAAI,eAAgBO,EAAWoB,GACvC,MAAMnB,EAAOiB,KAAKG,MAAMD,GAGxB,GAFA1B,KAAKS,YAAY,CAAEL,KAAM,cAAeE,eAAcC,SAErCqB,IAAbrB,EAAKsB,IAAmB,CAE1B,MAAMC,EAASlC,EAAgBmC,IAAIzB,GACnCwB,GAAQE,MACT,KAGLpC,EAAgBqC,IAAI3B,EAAWgB,EACrC,MAAW,GAAa,gBAATlB,EAAwB,CACjC,MAAMkB,EAAY1B,EAAgBmC,IAAIzB,GAClCgB,IACFA,EAAUY,SACVZ,EAAUU,OACVpC,EAAgBuC,OAAO7B,GAE/B,KAAwB,YAATF,GACTN,QAAQC,IAAI,4BACZJ,GAAQqC,OACRhC,KAAKS,YAAY,CACfL,KAAM,UACNG,KAAM,CAAE,EACRD,cAEF8B,SAEApC,KAAKS,YAAY,CACfL,KAAM,QACNa,MAAO,uBACPX,aAGL,CAAC,MAAOU,GACPlB,QAAQmB,MAAM,QAASD,GACvBhB,KAAKS,YAAY,CAAEL,KAAM,QAASa,MAAOD,EAAGV,aAC7C"}
|
package/package.json
CHANGED
|
@@ -1,75 +1,58 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { beforeAll } from 'vitest'
|
|
1
|
+
import { expect } from 'vitest'
|
|
2
|
+
import { walletTest } from './test/fixtures'
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
let wallet: TestFedimintWallet
|
|
7
|
-
|
|
8
|
-
beforeAll(() => {
|
|
9
|
-
randomTestingId = Math.random().toString(36).substring(2, 15)
|
|
10
|
-
wallet = new TestFedimintWallet()
|
|
11
|
-
expect(wallet.testing).toBeDefined()
|
|
12
|
-
expect(wallet.testing.getRequestCounter()).toBe(1)
|
|
4
|
+
walletTest('get invite code from devimint', async ({ wallet }) => {
|
|
13
5
|
expect(wallet).toBeDefined()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return async () => {
|
|
17
|
-
// clear up browser resources
|
|
18
|
-
await wallet.cleanup()
|
|
19
|
-
// remove the wallet db
|
|
20
|
-
indexedDB.deleteDatabase(randomTestingId)
|
|
21
|
-
// swap out the randomTestingId for a new one, to avoid raciness
|
|
22
|
-
randomTestingId = Math.random().toString(36).substring(2, 15)
|
|
23
|
-
}
|
|
6
|
+
const inviteCode = await wallet.testing.getInviteCode()
|
|
7
|
+
expect(inviteCode).toBeDefined()
|
|
24
8
|
})
|
|
25
9
|
|
|
26
|
-
|
|
27
|
-
expect(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// because no federations have been joined
|
|
31
|
-
await expect(wallet.open(randomTestingId)).resolves.toBe(false)
|
|
32
|
-
const beforeJoin = wallet.testing.getRequestCounter()
|
|
33
|
-
await expect(
|
|
34
|
-
wallet.joinFederation(wallet.testing.TESTING_INVITE, randomTestingId),
|
|
35
|
-
).resolves.toBeUndefined()
|
|
36
|
-
expect(wallet.testing.getRequestCounter()).toBe(beforeJoin + 1)
|
|
37
|
-
expect(wallet.isOpen()).toBe(true)
|
|
38
|
-
await expect(wallet.waitForOpen()).resolves.toBeUndefined()
|
|
10
|
+
walletTest('fund wallet with devimint', async ({ fundedWallet }) => {
|
|
11
|
+
expect(fundedWallet).toBeDefined()
|
|
12
|
+
const balance = await fundedWallet.balance.getBalance()
|
|
13
|
+
expect(balance).toBeGreaterThan(0)
|
|
39
14
|
})
|
|
40
15
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
})
|
|
65
|
-
|
|
16
|
+
walletTest(
|
|
17
|
+
'Error on open & join if wallet is already open',
|
|
18
|
+
async ({ wallet }) => {
|
|
19
|
+
expect(wallet).toBeDefined()
|
|
20
|
+
expect(wallet.isOpen()).toBe(true)
|
|
21
|
+
|
|
22
|
+
// Test opening an already open wallet
|
|
23
|
+
try {
|
|
24
|
+
await wallet.open()
|
|
25
|
+
expect.unreachable(
|
|
26
|
+
'Opening a wallet should fail on an already open wallet',
|
|
27
|
+
)
|
|
28
|
+
} catch (error) {
|
|
29
|
+
expect(error).toBeInstanceOf(Error)
|
|
30
|
+
expect((error as Error).message).toBe(
|
|
31
|
+
'The FedimintWallet is already open.',
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Test joining federation on an already open wallet
|
|
36
|
+
try {
|
|
37
|
+
await wallet.joinFederation(wallet.testing.TESTING_INVITE)
|
|
38
|
+
expect.unreachable('Joining a federation should fail on an open wallet')
|
|
39
|
+
} catch (error) {
|
|
40
|
+
expect(error).toBeInstanceOf(Error)
|
|
41
|
+
expect((error as Error).message).toBe(
|
|
42
|
+
'The FedimintWallet is already open. You can only call `joinFederation` on closed clients.',
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
walletTest('getConfig', async ({ wallet }) => {
|
|
66
49
|
expect(wallet).toBeDefined()
|
|
67
50
|
expect(wallet.isOpen()).toBe(true)
|
|
68
51
|
const config = await wallet.federation.getConfig()
|
|
69
52
|
expect(config).toBeDefined()
|
|
70
53
|
})
|
|
71
54
|
|
|
72
|
-
|
|
55
|
+
walletTest('empty getBalance', async ({ wallet }) => {
|
|
73
56
|
expect(wallet).toBeDefined()
|
|
74
57
|
expect(wallet.isOpen()).toBe(true)
|
|
75
58
|
await expect(wallet.waitForOpen()).resolves.toBeUndefined()
|
package/src/FedimintWallet.ts
CHANGED
|
@@ -105,13 +105,19 @@ export class FedimintWallet {
|
|
|
105
105
|
throw new Error(
|
|
106
106
|
'The FedimintWallet is already open. You can only call `joinFederation` on closed clients.',
|
|
107
107
|
)
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
108
|
+
try {
|
|
109
|
+
const response = await this._client.sendSingleMessage<{
|
|
110
|
+
success: boolean
|
|
111
|
+
}>('join', { inviteCode, clientName })
|
|
112
|
+
if (response.success) {
|
|
113
|
+
this._isOpen = true
|
|
114
|
+
this._resolveOpen()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return response.success
|
|
118
|
+
} catch (e) {
|
|
119
|
+
logger.error('Error joining federation', e)
|
|
120
|
+
return false
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
123
|
|
|
@@ -122,7 +128,7 @@ export class FedimintWallet {
|
|
|
122
128
|
async cleanup() {
|
|
123
129
|
this._openPromise = undefined
|
|
124
130
|
this._isOpen = false
|
|
125
|
-
this._client.cleanup()
|
|
131
|
+
await this._client.cleanup()
|
|
126
132
|
}
|
|
127
133
|
|
|
128
134
|
isOpen() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { expect } from 'vitest'
|
|
2
|
-
import { walletTest } from '../test/setupTests'
|
|
3
2
|
import { keyPair } from '../test/crypto'
|
|
3
|
+
import { walletTest } from '../test/fixtures'
|
|
4
4
|
|
|
5
5
|
walletTest(
|
|
6
6
|
'createInvoice should create a bolt11 invoice',
|
|
@@ -21,7 +21,7 @@ walletTest(
|
|
|
21
21
|
|
|
22
22
|
// Test with expiry time
|
|
23
23
|
await expect(
|
|
24
|
-
wallet.lightning.createInvoice(100, 'test', 1000
|
|
24
|
+
wallet.lightning.createInvoice(100, 'test', 1000),
|
|
25
25
|
).resolves.toBeDefined()
|
|
26
26
|
},
|
|
27
27
|
)
|
|
@@ -30,7 +30,7 @@ walletTest('createInvoice with expiry', async ({ wallet }) => {
|
|
|
30
30
|
expect(wallet).toBeDefined()
|
|
31
31
|
expect(wallet.isOpen()).toBe(true)
|
|
32
32
|
|
|
33
|
-
const invoice = await wallet.lightning.createInvoice(100, 'test', 1000
|
|
33
|
+
const invoice = await wallet.lightning.createInvoice(100, 'test', 1000)
|
|
34
34
|
expect(invoice).toBeDefined()
|
|
35
35
|
expect(invoice).toMatchObject({
|
|
36
36
|
invoice: expect.any(String),
|
|
@@ -48,11 +48,7 @@ walletTest(
|
|
|
48
48
|
const gateways = await wallet.lightning.listGateways()
|
|
49
49
|
expect(wallet.testing.getRequestCounter()).toBe(counterBefore + 1)
|
|
50
50
|
expect(gateways).toBeDefined()
|
|
51
|
-
expect(gateways).toMatchObject(
|
|
52
|
-
{
|
|
53
|
-
info: expect.any(Object),
|
|
54
|
-
},
|
|
55
|
-
])
|
|
51
|
+
expect(gateways).toMatchObject(expect.any(Array))
|
|
56
52
|
},
|
|
57
53
|
)
|
|
58
54
|
|
|
@@ -116,31 +112,25 @@ walletTest(
|
|
|
116
112
|
|
|
117
113
|
walletTest(
|
|
118
114
|
'payInvoice should pay a bolt11 invoice',
|
|
119
|
-
{ timeout:
|
|
120
|
-
async ({
|
|
121
|
-
expect(
|
|
122
|
-
expect(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
wallet.testing.payWithFaucet(invoice.invoice),
|
|
132
|
-
).resolves.toBeDefined()
|
|
133
|
-
await wallet.lightning.waitForReceive(invoice.operation_id)
|
|
134
|
-
// Wait for balance to fully update
|
|
135
|
-
await new Promise((resolve) => setTimeout(resolve, 1000))
|
|
136
|
-
const externalInvoice = await wallet.testing.getExternalInvoice(10)
|
|
137
|
-
const payment = await wallet.lightning.payInvoice(externalInvoice.pr)
|
|
138
|
-
expect(payment).toBeDefined()
|
|
115
|
+
{ timeout: 20_000 },
|
|
116
|
+
async ({ fundedWallet }) => {
|
|
117
|
+
expect(fundedWallet).toBeDefined()
|
|
118
|
+
expect(fundedWallet.isOpen()).toBe(true)
|
|
119
|
+
const initialBalance = await fundedWallet.balance.getBalance()
|
|
120
|
+
expect(initialBalance).toBeGreaterThan(0)
|
|
121
|
+
const externalInvoice = await fundedWallet.testing.createFaucetInvoice(1)
|
|
122
|
+
const gatewayInfo = await fundedWallet.testing.getFaucetGatewayInfo()
|
|
123
|
+
const payment = await fundedWallet.lightning.payInvoice(
|
|
124
|
+
externalInvoice,
|
|
125
|
+
gatewayInfo,
|
|
126
|
+
)
|
|
139
127
|
expect(payment).toMatchObject({
|
|
140
128
|
contract_id: expect.any(String),
|
|
141
129
|
fee: expect.any(Number),
|
|
142
130
|
payment_type: expect.any(Object),
|
|
143
131
|
})
|
|
132
|
+
const finalBalance = await fundedWallet.balance.getBalance()
|
|
133
|
+
expect(finalBalance).toBeLessThan(initialBalance)
|
|
144
134
|
},
|
|
145
135
|
)
|
|
146
136
|
|
|
@@ -170,7 +160,7 @@ walletTest(
|
|
|
170
160
|
)
|
|
171
161
|
|
|
172
162
|
walletTest(
|
|
173
|
-
'scanReceivesForTweaks should return the operation id
|
|
163
|
+
'scanReceivesForTweaks should return the operation id',
|
|
174
164
|
async ({ wallet }) => {
|
|
175
165
|
expect(wallet).toBeDefined()
|
|
176
166
|
expect(wallet.isOpen()).toBe(true)
|
|
@@ -179,15 +169,19 @@ walletTest(
|
|
|
179
169
|
const { publicKey, secretKey } = keyPair()
|
|
180
170
|
const tweak = 1
|
|
181
171
|
|
|
172
|
+
const gatewayInfo = await wallet.testing.getFaucetGatewayInfo()
|
|
173
|
+
|
|
182
174
|
// Create an invoice paying to the tweaked public key
|
|
183
175
|
const invoice = await wallet.lightning.createInvoiceTweaked(
|
|
184
176
|
1000,
|
|
185
177
|
'test tweaked',
|
|
186
178
|
publicKey,
|
|
187
179
|
tweak,
|
|
180
|
+
undefined,
|
|
181
|
+
gatewayInfo,
|
|
188
182
|
)
|
|
189
183
|
await expect(
|
|
190
|
-
wallet.testing.
|
|
184
|
+
wallet.testing.payFaucetInvoice(invoice.invoice),
|
|
191
185
|
).resolves.toBeDefined()
|
|
192
186
|
|
|
193
187
|
// Scan for the receive
|
|
@@ -18,8 +18,8 @@ export class LightningService {
|
|
|
18
18
|
amount: MSats,
|
|
19
19
|
description: string,
|
|
20
20
|
expiryTime?: number, // in seconds
|
|
21
|
-
extraMeta?: JSONObject,
|
|
22
21
|
gatewayInfo?: GatewayInfo,
|
|
22
|
+
extraMeta?: JSONObject,
|
|
23
23
|
): Promise<CreateBolt11Response> {
|
|
24
24
|
const gateway = gatewayInfo ?? (await this._getDefaultGatewayInfo())
|
|
25
25
|
return await this.client.rpcSingle('ln', 'create_bolt11_invoice', {
|
|
@@ -138,17 +138,26 @@ export class LightningService {
|
|
|
138
138
|
|
|
139
139
|
async waitForReceive(operationId: string): Promise<LnReceiveState> {
|
|
140
140
|
return new Promise((resolve, reject) => {
|
|
141
|
-
|
|
141
|
+
let unsubscribe: () => void
|
|
142
|
+
const timeoutId = setTimeout(() => {
|
|
143
|
+
reject(new Error('Timeout waiting for receive'))
|
|
144
|
+
}, 15000)
|
|
145
|
+
|
|
146
|
+
unsubscribe = this.subscribeLnReceive(
|
|
142
147
|
operationId,
|
|
143
148
|
(res) => {
|
|
144
|
-
if (res === 'claimed')
|
|
149
|
+
if (res === 'claimed') {
|
|
150
|
+
clearTimeout(timeoutId)
|
|
151
|
+
unsubscribe()
|
|
152
|
+
resolve(res)
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
(error) => {
|
|
156
|
+
clearTimeout(timeoutId)
|
|
157
|
+
unsubscribe()
|
|
158
|
+
reject(error)
|
|
145
159
|
},
|
|
146
|
-
reject,
|
|
147
160
|
)
|
|
148
|
-
setTimeout(() => {
|
|
149
|
-
unsubscribe()
|
|
150
|
-
reject(new Error('Timeout waiting for receive'))
|
|
151
|
-
}, 10000)
|
|
152
161
|
})
|
|
153
162
|
}
|
|
154
163
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expect } from 'vitest'
|
|
2
|
-
import { walletTest } from '../test/
|
|
2
|
+
import { walletTest } from '../test/fixtures'
|
|
3
3
|
|
|
4
4
|
walletTest('redeemEcash should error on invalid ecash', async ({ wallet }) => {
|
|
5
5
|
expect(wallet).toBeDefined()
|
|
@@ -24,3 +24,10 @@ walletTest('spendNotes should throw if wallet is empty', async ({ wallet }) => {
|
|
|
24
24
|
|
|
25
25
|
await expect(wallet.mint.spendNotes(100)).rejects.toThrow()
|
|
26
26
|
})
|
|
27
|
+
|
|
28
|
+
walletTest('parseNotes should parse notes', async ({ wallet }) => {
|
|
29
|
+
expect(wallet).toBeDefined()
|
|
30
|
+
expect(wallet.isOpen()).toBe(true)
|
|
31
|
+
|
|
32
|
+
await expect(wallet.mint.reissueExternalNotes('test')).rejects.toThrow()
|
|
33
|
+
})
|
|
@@ -47,10 +47,9 @@ export class MintService {
|
|
|
47
47
|
async spendNotes(
|
|
48
48
|
minAmount: MSats,
|
|
49
49
|
// Tells the wallet to automatically try to cancel the spend if it hasn't completed
|
|
50
|
-
// after the specified number of
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
tryCancelAfter: number | Duration = 0, // in seconds or Duration object
|
|
50
|
+
// after the specified number of seconds. If the receiver has already redeemed
|
|
51
|
+
// the notes at this time, the notes will not be cancelled.
|
|
52
|
+
tryCancelAfter: number | Duration = 3600 * 24, // defaults to 1 day
|
|
54
53
|
includeInvite: boolean = false,
|
|
55
54
|
extraMeta: JSONValue = {},
|
|
56
55
|
): Promise<MintSpendNotesResponse> {
|
|
@@ -7,7 +7,16 @@ export class TestFedimintWallet extends FedimintWallet {
|
|
|
7
7
|
|
|
8
8
|
constructor() {
|
|
9
9
|
super()
|
|
10
|
-
this.testing = new TestingService(this.getWorkerClient())
|
|
10
|
+
this.testing = new TestingService(this.getWorkerClient(), this.lightning)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async fundWallet(amount: number) {
|
|
14
|
+
const info = await this.testing.getFaucetGatewayInfo()
|
|
15
|
+
const invoice = await this.lightning.createInvoice(amount, '', 1000, info)
|
|
16
|
+
await Promise.all([
|
|
17
|
+
this.testing.payFaucetInvoice(invoice.invoice),
|
|
18
|
+
this.lightning.waitForReceive(invoice.operation_id),
|
|
19
|
+
])
|
|
11
20
|
}
|
|
12
21
|
|
|
13
22
|
// Method to expose the WorkerClient
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LightningService } from '../services'
|
|
1
2
|
import { WorkerClient } from '../worker'
|
|
2
3
|
|
|
3
4
|
export const TESTING_INVITE =
|
|
@@ -7,7 +8,10 @@ export const TESTING_INVITE =
|
|
|
7
8
|
// of the WorkerClient. It is not intended for use in production.
|
|
8
9
|
export class TestingService {
|
|
9
10
|
public TESTING_INVITE: string
|
|
10
|
-
constructor(
|
|
11
|
+
constructor(
|
|
12
|
+
private client: WorkerClient,
|
|
13
|
+
private lightning: LightningService,
|
|
14
|
+
) {
|
|
11
15
|
// Solo Mint on mutinynet
|
|
12
16
|
this.TESTING_INVITE = TESTING_INVITE
|
|
13
17
|
}
|
|
@@ -20,40 +24,55 @@ export class TestingService {
|
|
|
20
24
|
return this.client._getRequestCallbackMap()
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
async
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
async getInviteCode() {
|
|
28
|
+
const res = await fetch('http://localhost:15243/connect-string')
|
|
29
|
+
if (res.ok) {
|
|
30
|
+
return await res.text()
|
|
31
|
+
} else {
|
|
32
|
+
throw new Error(`Failed to get invite code: ${await res.text()}`)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
28
35
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
private async getFaucetGatewayApi() {
|
|
37
|
+
const res = await fetch('http://localhost:15243/gateway-api')
|
|
38
|
+
if (res.ok) {
|
|
39
|
+
return await res.text()
|
|
40
|
+
} else {
|
|
41
|
+
throw new Error(`Failed to get gateway: ${await res.text()}`)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async getFaucetGatewayInfo() {
|
|
46
|
+
const gateways = await this.lightning.listGateways()
|
|
47
|
+
const api = await this.getFaucetGatewayApi()
|
|
48
|
+
const gateway = gateways.find((g) => g.info.api === api)
|
|
49
|
+
if (!gateway) {
|
|
50
|
+
throw new Error(`Gateway not found: ${api}`)
|
|
51
|
+
}
|
|
52
|
+
return gateway.info
|
|
53
|
+
}
|
|
34
54
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
55
|
+
async payFaucetInvoice(invoice: string) {
|
|
56
|
+
const res = await fetch('http://localhost:15243/pay', {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
body: invoice,
|
|
59
|
+
})
|
|
60
|
+
if (res.ok) {
|
|
61
|
+
return await res.text()
|
|
62
|
+
} else {
|
|
63
|
+
throw new Error(`Failed to pay faucet invoice: ${await res.text()}`)
|
|
39
64
|
}
|
|
40
65
|
}
|
|
41
66
|
|
|
42
|
-
async
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return await response.json()
|
|
54
|
-
} catch (error) {
|
|
55
|
-
console.error('Error getting external invoice', error)
|
|
56
|
-
throw error
|
|
67
|
+
async createFaucetInvoice(amount: number) {
|
|
68
|
+
const res = await fetch('http://localhost:15243/invoice', {
|
|
69
|
+
method: 'POST',
|
|
70
|
+
body: amount.toString(),
|
|
71
|
+
})
|
|
72
|
+
if (res.ok) {
|
|
73
|
+
return await res.text()
|
|
74
|
+
} else {
|
|
75
|
+
throw new Error(`Failed to generate faucet invoice: ${await res.text()}`)
|
|
57
76
|
}
|
|
58
77
|
}
|
|
59
78
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { expect } from 'vitest'
|
|
2
|
+
import { walletTest } from './fixtures'
|
|
3
|
+
|
|
4
|
+
walletTest('Fund wallet 1', async ({ fundedWallet }) => {
|
|
5
|
+
expect(fundedWallet).toBeDefined()
|
|
6
|
+
})
|
|
7
|
+
|
|
8
|
+
walletTest('Fund wallet 2', async ({ fundedWallet }) => {
|
|
9
|
+
expect(fundedWallet).toBeDefined()
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
walletTest('Fund wallet 3', async ({ fundedWallet }) => {
|
|
13
|
+
expect(fundedWallet).toBeDefined()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
walletTest('Fund wallet 4', async ({ fundedWallet }) => {
|
|
17
|
+
expect(fundedWallet).toBeDefined()
|
|
18
|
+
})
|
|
@@ -1,24 +1,40 @@
|
|
|
1
1
|
import { expect, test } from 'vitest'
|
|
2
2
|
import { TestFedimintWallet } from './TestFedimintWallet'
|
|
3
|
+
import { WorkerClient } from '../worker/WorkerClient'
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Adds Fixtures for setting up and tearing down a test FedimintWallet instance
|
|
6
7
|
*/
|
|
7
|
-
export const walletTest = test.extend<{
|
|
8
|
+
export const walletTest = test.extend<{
|
|
9
|
+
wallet: TestFedimintWallet
|
|
10
|
+
fundedWallet: TestFedimintWallet
|
|
11
|
+
}>({
|
|
8
12
|
wallet: async ({}, use) => {
|
|
9
13
|
const randomTestingId = Math.random().toString(36).substring(2, 15)
|
|
10
14
|
const wallet = new TestFedimintWallet()
|
|
11
15
|
expect(wallet).toBeDefined()
|
|
12
|
-
|
|
16
|
+
const inviteCode = await wallet.testing.getInviteCode()
|
|
13
17
|
await expect(
|
|
14
|
-
wallet.joinFederation(
|
|
18
|
+
wallet.joinFederation(inviteCode, randomTestingId),
|
|
15
19
|
).resolves.toBeUndefined()
|
|
20
|
+
|
|
16
21
|
await use(wallet)
|
|
17
22
|
|
|
18
23
|
// clear up browser resources
|
|
19
24
|
await wallet.cleanup()
|
|
25
|
+
|
|
20
26
|
// remove the wallet db
|
|
21
|
-
|
|
27
|
+
await new Promise((resolve) => {
|
|
28
|
+
const request = indexedDB.deleteDatabase(randomTestingId)
|
|
29
|
+
request.onsuccess = resolve
|
|
30
|
+
request.onerror = resolve
|
|
31
|
+
request.onblocked = resolve
|
|
32
|
+
})
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
fundedWallet: async ({ wallet }, use) => {
|
|
36
|
+
await wallet.fundWallet(10_000)
|
|
37
|
+
await use(wallet)
|
|
22
38
|
},
|
|
23
39
|
})
|
|
24
40
|
|
|
@@ -28,6 +44,7 @@ export const walletTest = test.extend<{ wallet: TestFedimintWallet }>({
|
|
|
28
44
|
export const workerTest = test.extend<{
|
|
29
45
|
worker: Worker
|
|
30
46
|
clientName: string
|
|
47
|
+
workerClient: WorkerClient
|
|
31
48
|
}>({
|
|
32
49
|
worker: async ({}, use) => {
|
|
33
50
|
const worker = new Worker(new URL('../worker/worker.js', import.meta.url), {
|
|
@@ -40,4 +57,8 @@ export const workerTest = test.extend<{
|
|
|
40
57
|
const randomTestingId = Math.random().toString(36).substring(2, 15)
|
|
41
58
|
await use(randomTestingId)
|
|
42
59
|
},
|
|
60
|
+
workerClient: async ({}, use) => {
|
|
61
|
+
const workerClient = new WorkerClient()
|
|
62
|
+
await use(workerClient)
|
|
63
|
+
},
|
|
43
64
|
})
|
package/src/types/worker.ts
CHANGED
|
@@ -220,8 +220,9 @@ export class WorkerClient {
|
|
|
220
220
|
})
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
cleanup() {
|
|
224
|
-
this.
|
|
223
|
+
async cleanup() {
|
|
224
|
+
await this.sendSingleMessage('cleanup')
|
|
225
|
+
this.requestCounter = 0
|
|
225
226
|
this.initPromise = undefined
|
|
226
227
|
this.requestCallbacks.clear()
|
|
227
228
|
}
|
package/src/worker/worker.js
CHANGED
|
@@ -80,6 +80,15 @@ self.onmessage = async (event) => {
|
|
|
80
80
|
rpcHandle.free()
|
|
81
81
|
streamCancelMap.delete(requestId)
|
|
82
82
|
}
|
|
83
|
+
} else if (type === 'cleanup') {
|
|
84
|
+
console.log('cleanup message received')
|
|
85
|
+
client?.free()
|
|
86
|
+
self.postMessage({
|
|
87
|
+
type: 'cleanup',
|
|
88
|
+
data: {},
|
|
89
|
+
requestId,
|
|
90
|
+
})
|
|
91
|
+
close()
|
|
83
92
|
} else {
|
|
84
93
|
self.postMessage({
|
|
85
94
|
type: 'error',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { expect } from 'vitest'
|
|
2
2
|
import { TESTING_INVITE } from '../test/TestingService'
|
|
3
|
-
import { workerTest } from '../test/setupTests'
|
|
4
3
|
import { JSONObject } from '../types'
|
|
4
|
+
import { workerTest } from '../test/fixtures'
|
|
5
5
|
|
|
6
6
|
// Waits for a message of a given type from the worker
|
|
7
7
|
const waitForWorkerResponse = (
|