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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/dts/FedimintWallet.d.ts +56 -1
  2. package/dist/dts/FedimintWallet.d.ts.map +1 -1
  3. package/dist/dts/services/BalanceService.d.ts +2 -21
  4. package/dist/dts/services/BalanceService.d.ts.map +1 -1
  5. package/dist/dts/services/FederationService.d.ts +1 -1
  6. package/dist/dts/services/FederationService.d.ts.map +1 -1
  7. package/dist/dts/services/LightningService.d.ts +11 -2
  8. package/dist/dts/services/LightningService.d.ts.map +1 -1
  9. package/dist/dts/services/MintService.d.ts +13 -6
  10. package/dist/dts/services/MintService.d.ts.map +1 -1
  11. package/dist/dts/services/RecoveryService.d.ts +1 -1
  12. package/dist/dts/services/RecoveryService.d.ts.map +1 -1
  13. package/dist/dts/services/WalletService.d.ts +8 -0
  14. package/dist/dts/services/WalletService.d.ts.map +1 -0
  15. package/dist/dts/services/index.d.ts +1 -0
  16. package/dist/dts/services/index.d.ts.map +1 -1
  17. package/dist/dts/types/utils.d.ts +8 -1
  18. package/dist/dts/types/utils.d.ts.map +1 -1
  19. package/dist/dts/types/wallet.d.ts +20 -9
  20. package/dist/dts/types/wallet.d.ts.map +1 -1
  21. package/dist/dts/types/worker.d.ts +1 -1
  22. package/dist/dts/types/worker.d.ts.map +1 -1
  23. package/dist/dts/worker/WorkerClient.d.ts +1 -1
  24. package/dist/dts/worker/WorkerClient.d.ts.map +1 -1
  25. package/dist/index.d.ts +114 -38
  26. package/dist/index.js +1 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/worker.js +1 -1
  29. package/dist/worker.js.map +1 -1
  30. package/package.json +8 -8
  31. package/src/FedimintWallet.test.ts +13 -0
  32. package/src/FedimintWallet.ts +69 -0
  33. package/src/services/BalanceService.ts +5 -26
  34. package/src/services/FederationService.ts +9 -7
  35. package/src/services/LightningService.ts +81 -65
  36. package/src/services/MintService.test.ts +41 -0
  37. package/src/services/MintService.ts +41 -25
  38. package/src/services/RecoveryService.ts +9 -7
  39. package/src/services/WalletService.test.ts +24 -0
  40. package/src/services/WalletService.ts +10 -0
  41. package/src/services/index.ts +1 -0
  42. package/src/test/TestingService.ts +5 -4
  43. package/src/test/fixtures.ts +6 -0
  44. package/src/types/utils.ts +5 -1
  45. package/src/types/wallet.ts +39 -9
  46. package/src/types/worker.ts +3 -0
  47. package/src/worker/WorkerClient.ts +8 -9
  48. package/src/worker/worker.js +62 -0
@@ -1,7 +1,11 @@
1
- import { MSats, Duration, JSONValue } from './utils'
1
+ import { MSats, Duration, JSONValue, JSONObject } from './utils'
2
2
 
3
- const MODULE_KINDS = ['', 'ln', 'mint'] as const
3
+ const MODULE_KINDS = ['', 'ln', 'mint', 'wallet'] as const
4
4
  type ModuleKind = (typeof MODULE_KINDS)[number]
5
+
6
+ // TODO: Define the structure of FederationConfig
7
+ type FederationConfig = JSONObject
8
+
5
9
  type GatewayInfo = {
6
10
  gateway_id: string
7
11
  api: string
@@ -80,19 +84,41 @@ type StreamResult<T extends JSONValue> =
80
84
 
81
85
  type CancelFunction = () => void
82
86
 
83
- type ReissueExternalNotesState =
87
+ type ReissueExternalNotesState = 'Created' | 'Issuing' | 'Done'
88
+ // | { Failed: { error: string } }
89
+
90
+ type MintSpendNotesResponse = Array<string>
91
+
92
+ type SpendNotesState =
84
93
  | 'Created'
85
- | 'Issuing'
86
- | 'Done'
87
- | { Failed: { error: string } }
94
+ | 'UserCanceledProcessing'
95
+ | 'UserCanceledSuccess'
96
+ | 'UserCanceledFailure'
97
+ | 'Success'
98
+ | 'Refunded'
99
+
100
+ type TxOutputSummary = {
101
+ outpoint: {
102
+ txid: string
103
+ vout: number
104
+ }
105
+ amount: number
106
+ }
88
107
 
89
- type MintSpendNotesResponse = {
90
- notes: string
91
- operation_id: string
108
+ type WalletSummary = {
109
+ spendable_utxos: TxOutputSummary[]
110
+ unsigned_peg_out_txos: TxOutputSummary[]
111
+ unsigned_change_utxos: TxOutputSummary[]
112
+ unconfirmed_peg_out_txos: TxOutputSummary[]
113
+ unconfirmed_change_utxos: TxOutputSummary[]
92
114
  }
93
115
 
116
+ /** Keys are powers of 2 */
117
+ type NoteCountByDenomination = Record<number, number>
118
+
94
119
  export {
95
120
  LightningGateway,
121
+ FederationConfig,
96
122
  RouteHint,
97
123
  FeeToAmount,
98
124
  OutgoingLightningPayment,
@@ -108,4 +134,8 @@ export {
108
134
  CancelFunction,
109
135
  ReissueExternalNotesState,
110
136
  MintSpendNotesResponse,
137
+ SpendNotesState,
138
+ WalletSummary,
139
+ TxOutputSummary,
140
+ NoteCountByDenomination,
111
141
  }
@@ -8,6 +8,9 @@ const WorkerMessageTypes = [
8
8
  'error',
9
9
  'unsubscribe',
10
10
  'cleanup',
11
+ 'parseInviteCode',
12
+ 'parseBolt11Invoice',
13
+ 'previewFederation',
11
14
  ] as const
12
15
 
13
16
  export type WorkerMessageType = (typeof WorkerMessageTypes)[number]
@@ -69,8 +69,8 @@ export class WorkerClient {
69
69
  sendSingleMessage<
70
70
  Response extends JSONValue = JSONValue,
71
71
  Payload extends JSONValue = JSONValue,
72
- >(type: WorkerMessageType, payload?: Payload): Promise<Response> {
73
- return new Promise((resolve, reject) => {
72
+ >(type: WorkerMessageType, payload?: Payload) {
73
+ return new Promise<Response>((resolve, reject) => {
74
74
  const requestId = ++this.requestCounter
75
75
  logger.debug('WorkerClient - sendSingleMessage', requestId, type, payload)
76
76
  this.requestCallbacks.set(
@@ -179,7 +179,7 @@ export class WorkerClient {
179
179
  onEnd: () => void = () => {},
180
180
  unsubscribePromise: Promise<void>,
181
181
  // Unsubscribe function
182
- ): Promise<void> {
182
+ ) {
183
183
  // await this.openPromise
184
184
  // if (!this.worker || !this._isOpen)
185
185
  // throw new Error('FedimintWallet is not open')
@@ -209,13 +209,12 @@ export class WorkerClient {
209
209
  })
210
210
  }
211
211
 
212
- rpcSingle<Response extends JSONValue = JSONValue>(
213
- module: ModuleKind,
214
- method: string,
215
- body: JSONValue,
216
- ): Promise<Response> {
212
+ rpcSingle<
213
+ Response extends JSONValue = JSONValue,
214
+ Error extends string = string,
215
+ >(module: ModuleKind, method: string, body: JSONValue) {
217
216
  logger.debug('WorkerClient - rpcSingle', module, method, body)
218
- return new Promise((resolve, reject) => {
217
+ return new Promise<Response>((resolve, reject) => {
219
218
  this.rpcStream<Response>(module, method, body, resolve, reject)
220
219
  })
221
220
  }
@@ -17,6 +17,17 @@ const handleFree = (requestId) => {
17
17
 
18
18
  console.log('Worker - init')
19
19
 
20
+ /**
21
+ * Type definitions for the worker messages
22
+ *
23
+ * @typedef {import('../types/worker').WorkerMessageType} WorkerMessageType
24
+ * @typedef {{
25
+ * type: WorkerMessageType
26
+ * payload: any
27
+ * requestId: number
28
+ * }} WorkerMessage
29
+ * @param {{data: WorkerMessage}} event
30
+ */
20
31
  self.onmessage = async (event) => {
21
32
  const { type, payload, requestId } = event.data
22
33
 
@@ -45,6 +56,23 @@ self.onmessage = async (event) => {
45
56
  } catch (e) {
46
57
  self.postMessage({ type: 'error', error: e.message, requestId })
47
58
  }
59
+ } else if (type === 'previewFederation') {
60
+ const { inviteCode } = payload
61
+ try {
62
+ client = await WasmClient.preview_federation(inviteCode)
63
+ const parsed = JSON.parse(client)
64
+ self.postMessage({
65
+ type: 'previewFederation',
66
+ data: {
67
+ success: !!client,
68
+ config: parsed.config,
69
+ federation_id: parsed.federation_id,
70
+ },
71
+ requestId,
72
+ })
73
+ } catch (e) {
74
+ self.postMessage({ type: 'error', error: e.message, requestId })
75
+ }
48
76
  } else if (type === 'rpc') {
49
77
  const { module, method, body } = payload
50
78
  console.log('RPC received', module, method, body)
@@ -89,6 +117,40 @@ self.onmessage = async (event) => {
89
117
  requestId,
90
118
  })
91
119
  close()
120
+ } else if (type === 'parseInviteCode') {
121
+ const { inviteCode } = payload
122
+ try {
123
+ const res = WasmClient.parse_invite_code(inviteCode)
124
+ const parsedRes = JSON.parse(res)
125
+ self.postMessage({
126
+ type: 'parseInviteCode',
127
+ data: parsedRes,
128
+ requestId,
129
+ })
130
+ } catch (error) {
131
+ self.postMessage({
132
+ type: 'error',
133
+ error: `Failed to parse invite code: ${error.message}`,
134
+ requestId,
135
+ })
136
+ }
137
+ } else if (type === 'parseBolt11Invoice') {
138
+ const { invoiceStr } = payload
139
+ try {
140
+ const res = WasmClient.parse_bolt11_invoice(invoiceStr)
141
+ const parsedRes = JSON.parse(res)
142
+ self.postMessage({
143
+ type: 'parseBolt11Invoice',
144
+ data: parsedRes,
145
+ requestId,
146
+ })
147
+ } catch (error) {
148
+ self.postMessage({
149
+ type: 'error',
150
+ error: `Failed to parse invoice: ${error.message}`,
151
+ requestId,
152
+ })
153
+ }
92
154
  } else {
93
155
  self.postMessage({
94
156
  type: 'error',