@fedimint/core-web 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/FedimintWallet.d.ts +42 -65
- package/dist/FedimintWallet.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/BalanceService.d.ts +34 -0
- package/dist/services/BalanceService.d.ts.map +1 -0
- package/dist/services/FederationService.d.ts +11 -0
- package/dist/services/FederationService.d.ts.map +1 -0
- package/dist/services/LightningService.d.ts +18 -0
- package/dist/services/LightningService.d.ts.map +1 -0
- package/dist/services/MintService.d.ts +15 -0
- package/dist/services/MintService.d.ts.map +1 -0
- package/dist/services/RecoveryService.d.ts +13 -0
- package/dist/services/RecoveryService.d.ts.map +1 -0
- package/dist/services/index.d.ts +6 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/types/wallet.d.ts +16 -11
- package/dist/types/wallet.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/worker/WorkerClient.d.ts +44 -0
- package/dist/worker/WorkerClient.d.ts.map +1 -0
- package/dist/worker/index.d.ts +2 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker.js +1 -1
- package/dist/worker.js.map +1 -1
- package/package.json +9 -9
- package/src/FedimintWallet.test.ts +77 -0
- package/src/FedimintWallet.ts +91 -466
- package/src/services/BalanceService.test.ts +50 -0
- package/src/services/BalanceService.ts +50 -0
- package/src/services/FederationService.test.ts +58 -0
- package/src/services/FederationService.ts +22 -0
- package/src/services/LightningService.test.ts +168 -0
- package/src/services/LightningService.ts +144 -0
- package/src/services/MintService.test.ts +19 -0
- package/src/services/MintService.ts +96 -0
- package/src/services/RecoveryService.ts +26 -0
- package/src/services/index.ts +5 -0
- package/src/test/TestFedimintWallet.ts +17 -0
- package/src/test/TestingService.ts +59 -0
- package/src/test/setupTests.ts +43 -0
- package/src/types/wallet.ts +20 -13
- package/src/utils/logger.ts +61 -0
- package/src/worker/WorkerClient.ts +229 -0
- package/src/worker/index.ts +1 -0
- package/src/worker/worker.js +96 -0
- package/src/worker/worker.test.ts +90 -0
- package/node_modules/fedimint-client-wasm/fedimint_client_wasm.d.ts +0 -49
- package/node_modules/fedimint-client-wasm/fedimint_client_wasm.js +0 -4
- package/node_modules/fedimint-client-wasm/fedimint_client_wasm_bg.js +0 -1411
- package/node_modules/fedimint-client-wasm/fedimint_client_wasm_bg.wasm +0 -0
- package/node_modules/fedimint-client-wasm/package.json +0 -26
- package/src/worker.js +0 -80
- package/wasm/fedimint_client_wasm.d.ts +0 -49
- package/wasm/fedimint_client_wasm.js +0 -4
- package/wasm/fedimint_client_wasm_bg.js +0 -1411
- package/wasm/fedimint_client_wasm_bg.wasm +0 -0
- package/wasm/fedimint_client_wasm_bg.wasm.d.ts +0 -110
- package/wasm/package.json +0 -26
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sources":["../src/worker.js"],"sourcesContent":["//
|
|
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,MACMN,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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedimint/core-web",
|
|
3
3
|
"description": "Library for building web apps with a fedimint client",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.5",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/fedimint/fedimint-web-sdk.git",
|
|
@@ -9,19 +9,18 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
12
|
-
"src"
|
|
13
|
-
|
|
12
|
+
"src"
|
|
13
|
+
],
|
|
14
|
+
"sideEffects": [
|
|
15
|
+
"./dist/worker.js",
|
|
16
|
+
"./dist/index.js"
|
|
14
17
|
],
|
|
15
|
-
"sideEffects": false,
|
|
16
18
|
"type": "module",
|
|
17
19
|
"main": "./dist/index.js",
|
|
18
20
|
"types": "./dist/index.d.ts",
|
|
19
21
|
"dependencies": {
|
|
20
|
-
"fedimint-client-wasm": "
|
|
22
|
+
"@fedimint/fedimint-client-wasm-bundler": "0.0.1"
|
|
21
23
|
},
|
|
22
|
-
"bundledDependencies": [
|
|
23
|
-
"fedimint-client-wasm"
|
|
24
|
-
],
|
|
25
24
|
"devDependencies": {
|
|
26
25
|
"@rollup/plugin-terser": "^0.4.4",
|
|
27
26
|
"@rollup/plugin-typescript": "^11.1.6",
|
|
@@ -35,6 +34,7 @@
|
|
|
35
34
|
"build": "rollup --config",
|
|
36
35
|
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
37
36
|
"clean:deep": "pnpm run clean && rm -rf node_modules",
|
|
38
|
-
"typecheck": "tsc --noEmit"
|
|
37
|
+
"typecheck": "tsc --noEmit",
|
|
38
|
+
"typedoc": "typedoc"
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { test, expect } from 'vitest'
|
|
2
|
+
import { TestFedimintWallet } from './test/TestFedimintWallet'
|
|
3
|
+
import { beforeAll } from 'vitest'
|
|
4
|
+
|
|
5
|
+
let randomTestingId: string
|
|
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)
|
|
13
|
+
expect(wallet).toBeDefined()
|
|
14
|
+
|
|
15
|
+
// Cleanup after all tests
|
|
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
|
+
}
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
test('initial open & join', async () => {
|
|
27
|
+
expect(wallet).toBeDefined()
|
|
28
|
+
expect(wallet.isOpen()).toBe(false)
|
|
29
|
+
// On initial open, it should return false
|
|
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()
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
test('Error on open & join if wallet is already open', async () => {
|
|
42
|
+
expect(wallet).toBeDefined()
|
|
43
|
+
expect(wallet.isOpen()).toBe(true)
|
|
44
|
+
|
|
45
|
+
// Test opening an already open wallet
|
|
46
|
+
try {
|
|
47
|
+
await wallet.open(randomTestingId)
|
|
48
|
+
expect.unreachable('Opening a wallet should fail on an already open wallet')
|
|
49
|
+
} catch (error) {
|
|
50
|
+
expect(error).toBeInstanceOf(Error)
|
|
51
|
+
expect((error as Error).message).toBe('The FedimintWallet is already open.')
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Test joining federation on an already open wallet
|
|
55
|
+
try {
|
|
56
|
+
await wallet.joinFederation(wallet.testing.TESTING_INVITE, randomTestingId)
|
|
57
|
+
expect.unreachable('Joining a federation should fail on an open wallet')
|
|
58
|
+
} catch (error) {
|
|
59
|
+
expect(error).toBeInstanceOf(Error)
|
|
60
|
+
expect((error as Error).message).toBe(
|
|
61
|
+
'The FedimintWallet is already open. You can only call `joinFederation` on closed clients.',
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
test('getConfig', async () => {
|
|
66
|
+
expect(wallet).toBeDefined()
|
|
67
|
+
expect(wallet.isOpen()).toBe(true)
|
|
68
|
+
const config = await wallet.federation.getConfig()
|
|
69
|
+
expect(config).toBeDefined()
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
test('empty getBalance', async () => {
|
|
73
|
+
expect(wallet).toBeDefined()
|
|
74
|
+
expect(wallet.isOpen()).toBe(true)
|
|
75
|
+
await expect(wallet.waitForOpen()).resolves.toBeUndefined()
|
|
76
|
+
await expect(wallet.balance.getBalance()).resolves.toEqual(0)
|
|
77
|
+
})
|