@fedimint/core-web 0.0.7 → 0.0.9
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/wallet.d.ts +4 -3
- package/dist/dts/types/wallet.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 +9 -8
- 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/BalanceService.test.ts +1 -1
- package/src/services/FederationService.test.ts +1 -1
- package/src/services/LightningService.test.ts +24 -30
- package/src/services/LightningService.ts +22 -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} +26 -5
- package/src/types/wallet.ts +2 -5
- 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;IAUpC,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAe,EACrD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAe7C,cAAc,CACZ,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAe,EACjD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAc7C,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAe,EACrD,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAe;IAcvC,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"}
|
|
@@ -22,8 +22,9 @@ type OutgoingLightningPayment = {
|
|
|
22
22
|
fee: MSats;
|
|
23
23
|
};
|
|
24
24
|
type PayType = {
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
lightning: string;
|
|
26
|
+
} | {
|
|
27
|
+
internal: string;
|
|
27
28
|
};
|
|
28
29
|
type LnPayState = 'created' | 'canceled' | {
|
|
29
30
|
funded: {
|
|
@@ -34,7 +35,7 @@ type LnPayState = 'created' | 'canceled' | {
|
|
|
34
35
|
error_reason: string;
|
|
35
36
|
};
|
|
36
37
|
} | 'awaiting_change' | {
|
|
37
|
-
|
|
38
|
+
success: {
|
|
38
39
|
preimage: string;
|
|
39
40
|
};
|
|
40
41
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/types/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEpD,QAAA,MAAM,YAAY,6BAA8B,CAAA;AAChD,KAAK,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAC/C,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,SAAS,EAAE,CAAA;IACxB,IAAI,EAAE,WAAW,CAAA;CAClB,CAAA;AACD,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,WAAW,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,QAAQ,CAAA;CACd,CAAA;AAED,KAAK,SAAS,GAAG,EAEhB,CAAA;AAED,KAAK,WAAW,GAAG,EAElB,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC9B,YAAY,EAAE,OAAO,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,KAAK,CAAA;CACX,CAAA;AAED,KAAK,OAAO,GAAG;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/types/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEpD,QAAA,MAAM,YAAY,6BAA8B,CAAA;AAChD,KAAK,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAC/C,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,SAAS,EAAE,CAAA;IACxB,IAAI,EAAE,WAAW,CAAA;CAClB,CAAA;AACD,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,WAAW,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,QAAQ,CAAA;CACd,CAAA;AAED,KAAK,SAAS,GAAG,EAEhB,CAAA;AAED,KAAK,WAAW,GAAG,EAElB,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC9B,YAAY,EAAE,OAAO,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,KAAK,CAAA;CACX,CAAA;AAED,KAAK,OAAO,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3D,KAAK,UAAU,GACX,SAAS,GACT,UAAU,GACV;IAAE,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACpC;IAAE,kBAAkB,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAChD,iBAAiB,GACjB;IAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjC;IAAE,QAAQ,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvC;IAAE,gBAAgB,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAEnD,KAAK,cAAc,GACf,SAAS,GACT;IAAE,mBAAmB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC7D;IAAE,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAChC,QAAQ,GACR,gBAAgB,GAChB,SAAS,CAAA;AAEb,KAAK,oBAAoB,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,KAAK,CAAA;IACX,GAAG,EAAE,KAAK,CAAA;CACX,CAAA;AAED,KAAK,aAAa,CAAC,CAAC,SAAS,SAAS,IAAI;IACxC,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,KAAK,CAAA;IACZ,GAAG,EAAE,KAAK,CAAA;CACX,CAAA;AAED,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,KAAK,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,IACjC,aAAa,CAAC,CAAC,CAAC,GAChB,WAAW,GACX,SAAS,CAAA;AAEb,KAAK,cAAc,GAAG,MAAM,IAAI,CAAA;AAEhC,KAAK,yBAAyB,GAC1B,SAAS,GACT,SAAS,GACT,MAAM,GACN;IAAE,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAEjC,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,wBAAwB,EACxB,OAAO,EACP,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,cAAc,EACd,yBAAyB,EACzB,sBAAsB,GACvB,CAAA"}
|
|
@@ -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
|
@@ -37,8 +37,9 @@ type OutgoingLightningPayment = {
|
|
|
37
37
|
fee: MSats;
|
|
38
38
|
};
|
|
39
39
|
type PayType = {
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
lightning: string;
|
|
41
|
+
} | {
|
|
42
|
+
internal: string;
|
|
42
43
|
};
|
|
43
44
|
type LnPayState = 'created' | 'canceled' | {
|
|
44
45
|
funded: {
|
|
@@ -49,7 +50,7 @@ type LnPayState = 'created' | 'canceled' | {
|
|
|
49
50
|
error_reason: string;
|
|
50
51
|
};
|
|
51
52
|
} | 'awaiting_change' | {
|
|
52
|
-
|
|
53
|
+
success: {
|
|
53
54
|
preimage: string;
|
|
54
55
|
};
|
|
55
56
|
} | {
|
|
@@ -103,7 +104,7 @@ type MintSpendNotesResponse = {
|
|
|
103
104
|
};
|
|
104
105
|
//# sourceMappingURL=wallet.d.ts.map
|
|
105
106
|
|
|
106
|
-
declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe"];
|
|
107
|
+
declare const WorkerMessageTypes: readonly ["init", "initialized", "rpc", "log", "open", "join", "error", "unsubscribe", "cleanup"];
|
|
107
108
|
type WorkerMessageType = (typeof WorkerMessageTypes)[number];
|
|
108
109
|
|
|
109
110
|
declare class WorkerClient {
|
|
@@ -144,7 +145,7 @@ declare class WorkerClient {
|
|
|
144
145
|
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
146
|
private _rpcStreamInner;
|
|
146
147
|
rpcSingle<Response extends JSONValue = JSONValue>(module: ModuleKind, method: string, body: JSONValue): Promise<Response>;
|
|
147
|
-
cleanup(): void
|
|
148
|
+
cleanup(): Promise<void>;
|
|
148
149
|
_getRequestCounter(): number;
|
|
149
150
|
_getRequestCallbackMap(): Map<number, (value: any) => void>;
|
|
150
151
|
}
|
|
@@ -155,7 +156,7 @@ declare class MintService {
|
|
|
155
156
|
redeemEcash(notes: string): Promise<void>;
|
|
156
157
|
reissueExternalNotes(oobNotes: string, extraMeta?: JSONObject): Promise<string>;
|
|
157
158
|
subscribeReissueExternalNotes(operationId: string, onSuccess?: (state: JSONValue) => void, onError?: (error: string) => void): CancelFunction;
|
|
158
|
-
spendNotes(minAmount: MSats, tryCancelAfter?: number | Duration, //
|
|
159
|
+
spendNotes(minAmount: MSats, tryCancelAfter?: number | Duration, // defaults to 1 day
|
|
159
160
|
includeInvite?: boolean, extraMeta?: JSONValue): Promise<MintSpendNotesResponse>;
|
|
160
161
|
parseNotes(oobNotes: string): Promise<MSats>;
|
|
161
162
|
tryCancelSpendNotes(operationId: string): Promise<void>;
|
|
@@ -200,7 +201,7 @@ declare class LightningService {
|
|
|
200
201
|
private client;
|
|
201
202
|
constructor(client: WorkerClient);
|
|
202
203
|
createInvoice(amount: MSats, description: string, expiryTime?: number, // in seconds
|
|
203
|
-
|
|
204
|
+
gatewayInfo?: GatewayInfo, extraMeta?: JSONObject): Promise<CreateBolt11Response>;
|
|
204
205
|
createInvoiceTweaked(amount: MSats, description: string, tweakKey: string, index: number, expiryTime?: number, // in seconds
|
|
205
206
|
gatewayInfo?: GatewayInfo, extraMeta?: JSONObject): Promise<CreateBolt11Response>;
|
|
206
207
|
scanReceivesForTweaks(tweakKey: string, indices: number[], extraMeta?: JSONObject): Promise<string[]>;
|
|
@@ -281,7 +282,7 @@ declare class FedimintWallet {
|
|
|
281
282
|
initialize(): Promise<void>;
|
|
282
283
|
waitForOpen(): Promise<void>;
|
|
283
284
|
open(clientName?: string): Promise<boolean>;
|
|
284
|
-
joinFederation(inviteCode: string, clientName?: string): Promise<
|
|
285
|
+
joinFederation(inviteCode: string, clientName?: string): Promise<boolean>;
|
|
285
286
|
/**
|
|
286
287
|
* This should ONLY be called when UNLOADING the wallet client.
|
|
287
288
|
* 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() {
|
|
@@ -11,7 +11,7 @@ beforeAll(async () => {
|
|
|
11
11
|
expect(wallet).toBeDefined()
|
|
12
12
|
await expect(
|
|
13
13
|
wallet.joinFederation(wallet.testing.TESTING_INVITE, randomTestingId),
|
|
14
|
-
).resolves.
|
|
14
|
+
).resolves.toBe(true)
|
|
15
15
|
expect(wallet.isOpen()).toBe(true)
|
|
16
16
|
|
|
17
17
|
// Cleanup after all tests
|
|
@@ -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', {
|
|
@@ -88,6 +88,7 @@ export class LightningService {
|
|
|
88
88
|
})
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
// TODO: Document
|
|
91
92
|
subscribeLnClaim(
|
|
92
93
|
operationId: string,
|
|
93
94
|
onSuccess: (state: LnReceiveState) => void = () => {},
|
|
@@ -104,6 +105,8 @@ export class LightningService {
|
|
|
104
105
|
return unsubscribe
|
|
105
106
|
}
|
|
106
107
|
|
|
108
|
+
// TODO: Document (for external payments only)
|
|
109
|
+
// TODO: Make this work for BOTH internal and external payments
|
|
107
110
|
subscribeLnPay(
|
|
108
111
|
operationId: string,
|
|
109
112
|
onSuccess: (state: LnPayState) => void = () => {},
|
|
@@ -120,6 +123,7 @@ export class LightningService {
|
|
|
120
123
|
return unsubscribe
|
|
121
124
|
}
|
|
122
125
|
|
|
126
|
+
// TODO: Document
|
|
123
127
|
subscribeLnReceive(
|
|
124
128
|
operationId: string,
|
|
125
129
|
onSuccess: (state: LnReceiveState) => void = () => {},
|
|
@@ -136,19 +140,29 @@ export class LightningService {
|
|
|
136
140
|
return unsubscribe
|
|
137
141
|
}
|
|
138
142
|
|
|
143
|
+
// TODO: Document
|
|
139
144
|
async waitForReceive(operationId: string): Promise<LnReceiveState> {
|
|
140
145
|
return new Promise((resolve, reject) => {
|
|
141
|
-
|
|
146
|
+
let unsubscribe: () => void
|
|
147
|
+
const timeoutId = setTimeout(() => {
|
|
148
|
+
reject(new Error('Timeout waiting for receive'))
|
|
149
|
+
}, 15000)
|
|
150
|
+
|
|
151
|
+
unsubscribe = this.subscribeLnReceive(
|
|
142
152
|
operationId,
|
|
143
153
|
(res) => {
|
|
144
|
-
if (res === 'claimed')
|
|
154
|
+
if (res === 'claimed') {
|
|
155
|
+
clearTimeout(timeoutId)
|
|
156
|
+
unsubscribe()
|
|
157
|
+
resolve(res)
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
(error) => {
|
|
161
|
+
clearTimeout(timeoutId)
|
|
162
|
+
unsubscribe()
|
|
163
|
+
reject(error)
|
|
145
164
|
},
|
|
146
|
-
reject,
|
|
147
165
|
)
|
|
148
|
-
setTimeout(() => {
|
|
149
|
-
unsubscribe()
|
|
150
|
-
reject(new Error('Timeout waiting for receive'))
|
|
151
|
-
}, 10000)
|
|
152
166
|
})
|
|
153
167
|
}
|
|
154
168
|
|
|
@@ -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(
|
|
15
|
-
).resolves.
|
|
18
|
+
wallet.joinFederation(inviteCode, randomTestingId),
|
|
19
|
+
).resolves.toBe(true)
|
|
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/wallet.ts
CHANGED
|
@@ -30,10 +30,7 @@ type OutgoingLightningPayment = {
|
|
|
30
30
|
fee: MSats
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
type PayType = {
|
|
34
|
-
type: 'Internal' | 'Lightning'
|
|
35
|
-
operation_id: string
|
|
36
|
-
}
|
|
33
|
+
type PayType = { lightning: string } | { internal: string }
|
|
37
34
|
|
|
38
35
|
type LnPayState =
|
|
39
36
|
| 'created'
|
|
@@ -41,7 +38,7 @@ type LnPayState =
|
|
|
41
38
|
| { funded: { block_height: number } }
|
|
42
39
|
| { waiting_for_refund: { error_reason: string } }
|
|
43
40
|
| 'awaiting_change'
|
|
44
|
-
| {
|
|
41
|
+
| { success: { preimage: string } }
|
|
45
42
|
| { refunded: { gateway_error: string } }
|
|
46
43
|
| { unexpected_error: { error_message: string } }
|
|
47
44
|
|
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 = (
|