@hypawave/sdk 0.1.0

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.
@@ -0,0 +1,315 @@
1
+ interface HypawaveConfig {
2
+ apiKey: string;
3
+ baseUrl?: string;
4
+ timeout?: number;
5
+ }
6
+ interface CreateInvoiceParams {
7
+ client_email: string;
8
+ client_first_name: string;
9
+ client_last_name: string;
10
+ amount: number;
11
+ due_date: string;
12
+ company_name?: string;
13
+ description?: string;
14
+ currency?: string;
15
+ expires_in?: "1h" | "24h" | "7d" | null;
16
+ expires_at?: string | null;
17
+ creator_first_name?: string;
18
+ creator_last_name?: string;
19
+ creator_company_name?: string;
20
+ creator_fingerprint?: string;
21
+ /**
22
+ * Optional override for the Lightning payment destination (Lightning Address
23
+ * or LNURL-pay URL). Defaults to the API key owner's stored `lightning_address`.
24
+ * Override supports marketplace routing (per-invoice seller), multi-wallet
25
+ * owners, and pass-through flows where the agent facilitates for a third
26
+ * party. Funds always flow wallet-to-wallet — Hypawave remains non-custodial.
27
+ */
28
+ payment_destination?: string;
29
+ execution_webhook?: string;
30
+ }
31
+ interface CreateInvoiceResponse {
32
+ ok: true;
33
+ invoice_id: number;
34
+ access_token: string;
35
+ payment_url: string;
36
+ stream_id: string;
37
+ amount: number;
38
+ currency: string;
39
+ sats: number;
40
+ btc_usd_rate: number;
41
+ expires_at: string | null;
42
+ }
43
+ interface BalanceResponse {
44
+ available_sats: number;
45
+ fiat_equivalent: number;
46
+ currency: string;
47
+ btc_price: number;
48
+ has_outstanding_fee: boolean;
49
+ }
50
+ /**
51
+ * Top-ups are fee-settlement only. The server always mints a bolt11 for
52
+ * exactly the amount owed — callers cannot specify an amount. This interface
53
+ * is kept as an empty object for call-site stability.
54
+ */
55
+ type TopupParams = Record<string, never>;
56
+ interface TopupResponse {
57
+ ok: true;
58
+ bolt11: string;
59
+ payment_hash: string;
60
+ /** Exact owed amount the server quoted. */
61
+ amount_sats: number;
62
+ expires_at: string | null;
63
+ /** True if an existing pending top-up was returned instead of a fresh one. */
64
+ reused?: boolean;
65
+ }
66
+ interface UnlockStatusResponse {
67
+ unlocked: Record<string, boolean>;
68
+ statuses: Record<string, {
69
+ unlocked: boolean;
70
+ status: string;
71
+ failure_reason: string | null;
72
+ settlement_proof: {
73
+ payment_hash: string | null;
74
+ preimage: string | null;
75
+ settled_at: string | null;
76
+ } | null;
77
+ }>;
78
+ }
79
+ interface GetKeyResponse {
80
+ encryption_key: string;
81
+ iv_hex: string;
82
+ downloads_used: number;
83
+ max_downloads: number;
84
+ reclaim_window_hours: number;
85
+ }
86
+ interface ApiKeyInfo {
87
+ id: string;
88
+ key_prefix: string;
89
+ mode: "test" | "live";
90
+ label: string | null;
91
+ created_at: string;
92
+ revoked_at: string | null;
93
+ last_used_at: string | null;
94
+ }
95
+ interface UploadUrlParams {
96
+ fileName: string;
97
+ contentType: string;
98
+ fileSize?: number;
99
+ }
100
+ interface UploadUrlResponse {
101
+ signedUrl: string;
102
+ objectKey: string;
103
+ }
104
+ interface StoreFileParams {
105
+ invoice_id: number;
106
+ file_name: string;
107
+ encrypted_file_url: string;
108
+ iv_hex: string;
109
+ key_hash?: string;
110
+ size?: number;
111
+ }
112
+ interface StoreFileResponse {
113
+ ok: true;
114
+ id: string;
115
+ }
116
+ interface StoreFileKeyParams {
117
+ invoice_file_id: string;
118
+ key_b64: string;
119
+ }
120
+ interface ListInvoicesParams {
121
+ limit?: number;
122
+ offset?: number;
123
+ status?: "paid" | "not_paid" | "expired";
124
+ }
125
+ interface InvoiceItem {
126
+ invoice_id: number;
127
+ stream_id: string | null;
128
+ amount: number;
129
+ currency: string;
130
+ description: string | null;
131
+ status: "paid" | "pending" | "expired";
132
+ payment_destination: string | null;
133
+ access_token: string | null;
134
+ payment_url: string | null;
135
+ client_email: string | null;
136
+ client_first_name: string | null;
137
+ client_last_name: string | null;
138
+ created_at: string;
139
+ due_date: string;
140
+ expires_at: string | null;
141
+ has_file: boolean;
142
+ payment_hash: string | null;
143
+ preimage: string | null;
144
+ paid_at: string | null;
145
+ }
146
+ interface InvoiceFilesResponse {
147
+ files: Record<number, {
148
+ id: string;
149
+ encrypted_file_url: string;
150
+ file_name: string;
151
+ }[]>;
152
+ }
153
+ interface DownloadUrlResponse {
154
+ downloadUrl: string;
155
+ }
156
+ interface ListInvoicesResponse {
157
+ invoices: InvoiceItem[];
158
+ has_more: boolean;
159
+ }
160
+ interface GetBolt11Response {
161
+ pr: string;
162
+ routes: unknown[];
163
+ terms_hash: string;
164
+ }
165
+ interface ConfirmPaymentParams {
166
+ payment_hash: string;
167
+ preimage: string;
168
+ terms_hash?: string;
169
+ }
170
+ interface ConfirmPaymentResponse {
171
+ ok: true;
172
+ already_settled: boolean;
173
+ }
174
+ interface ReceiptResponse {
175
+ receipt: {
176
+ invoice_id: number;
177
+ status: "settled";
178
+ amount: number;
179
+ currency: string;
180
+ amount_sats: number | null;
181
+ description: string | null;
182
+ creator: {
183
+ first_name: string | null;
184
+ last_name: string | null;
185
+ company: string | null;
186
+ };
187
+ created_at: string;
188
+ settled_at: string | null;
189
+ expires_at: string | null;
190
+ payment_hash: string | null;
191
+ preimage: string | null;
192
+ receipt_verified: boolean;
193
+ has_files: boolean;
194
+ file_count: number;
195
+ };
196
+ }
197
+ interface PublicSettingsResponse {
198
+ min_topup_sats: number;
199
+ min_topup_usd: number | null;
200
+ fee_percent: number;
201
+ min_invoice_usd: number;
202
+ max_invoice_usd: number;
203
+ max_file_size_mb: number;
204
+ max_files_per_invoice: number;
205
+ btc_usd_price: number | null;
206
+ }
207
+ interface PaymentPayload {
208
+ protocol: "hypawave/v1";
209
+ invoice_id: number;
210
+ amount: number;
211
+ currency: string;
212
+ sats: number;
213
+ btc_usd_rate: number;
214
+ description: string | null;
215
+ expires_at: string | null;
216
+ bolt11_url: string;
217
+ confirm_url: string;
218
+ payment_url: string;
219
+ spec_url: string;
220
+ instructions_url: string;
221
+ }
222
+ interface OfferDownloadUrlParams {
223
+ offer_file_id: string;
224
+ claim_token?: string;
225
+ preimage?: string;
226
+ }
227
+ interface WalletCapabilities {
228
+ returnsPreimage: true | false | "conditional";
229
+ }
230
+ interface WalletAdapter {
231
+ capabilities: WalletCapabilities;
232
+ payInvoice(bolt11: string): Promise<{
233
+ payment_hash: string;
234
+ preimage: string;
235
+ fees_paid_msat?: number;
236
+ raw?: unknown;
237
+ }>;
238
+ }
239
+ interface PayAndConfirmParams {
240
+ invoiceId: number;
241
+ accessToken: string;
242
+ wallet: WalletAdapter;
243
+ allowConditionalPreimage?: boolean;
244
+ }
245
+ interface PayAndConfirmResult {
246
+ payment_hash: string;
247
+ preimage: string;
248
+ terms_hash: string;
249
+ fees_paid_msat?: number;
250
+ confirmation: ConfirmPaymentResponse;
251
+ }
252
+ interface HypawaveError {
253
+ error: string;
254
+ message?: string;
255
+ field?: string;
256
+ }
257
+
258
+ declare class Hypawave {
259
+ private readonly apiKey;
260
+ private readonly baseUrl;
261
+ private readonly timeout;
262
+ constructor(config: HypawaveConfig);
263
+ private request;
264
+ createInvoice(params: CreateInvoiceParams): Promise<CreateInvoiceResponse>;
265
+ getBolt11(accessToken: string): Promise<GetBolt11Response>;
266
+ confirmPayment(invoiceId: number, params: ConfirmPaymentParams): Promise<ConfirmPaymentResponse>;
267
+ getPaymentPayload(params: CreateInvoiceParams, response: CreateInvoiceResponse): PaymentPayload;
268
+ getBalance(currency?: string): Promise<BalanceResponse>;
269
+ /**
270
+ * Request a fee-settlement top-up invoice. The server mints a bolt11 for
271
+ * exactly the amount owed — balance can never exceed 0. No arguments are
272
+ * needed; any amount fields in a passed params object are ignored.
273
+ *
274
+ * Throws API errors:
275
+ * - topup_not_needed — balance is already ≥ 0
276
+ * - duplicate_topup — a pending top-up invoice already exists
277
+ */
278
+ topup(_params?: TopupParams): Promise<TopupResponse>;
279
+ getUnlockStatus(invoiceIds: number[]): Promise<UnlockStatusResponse>;
280
+ getKey(invoiceFileId: string, token?: string): Promise<GetKeyResponse>;
281
+ getUploadUrl(params: UploadUrlParams): Promise<UploadUrlResponse>;
282
+ storeFile(params: StoreFileParams): Promise<StoreFileResponse>;
283
+ storeFileKey(params: StoreFileKeyParams): Promise<{
284
+ ok: true;
285
+ }>;
286
+ listInvoices(params?: ListInvoicesParams): Promise<ListInvoicesResponse>;
287
+ getInvoiceFiles(invoiceIds: number[], token?: string): Promise<InvoiceFilesResponse>;
288
+ getDownloadUrl(invoiceFileId: string, token?: string): Promise<DownloadUrlResponse>;
289
+ getOfferDownloadUrl(paymentIntentId: string, params: OfferDownloadUrlParams): Promise<DownloadUrlResponse>;
290
+ getReceipt(invoiceId: number): Promise<ReceiptResponse>;
291
+ getPayerReceipt(invoiceId: number, preimage: string): Promise<ReceiptResponse>;
292
+ getSettings(): Promise<PublicSettingsResponse>;
293
+ waitForSettlement(invoiceId: number, options?: {
294
+ pollInterval?: number;
295
+ timeout?: number;
296
+ }): Promise<UnlockStatusResponse["statuses"][string]>;
297
+ payAndConfirm(params: PayAndConfirmParams): Promise<PayAndConfirmResult>;
298
+ }
299
+
300
+ declare class HypawaveAPIError extends Error {
301
+ readonly status: number;
302
+ readonly code: string;
303
+ readonly field?: string;
304
+ constructor(status: number, body: {
305
+ error: string;
306
+ message?: string;
307
+ field?: string;
308
+ });
309
+ get isAuth(): boolean;
310
+ get isRateLimit(): boolean;
311
+ get isValidation(): boolean;
312
+ get isOutstandingFee(): boolean;
313
+ }
314
+
315
+ export { type ApiKeyInfo, type BalanceResponse, type ConfirmPaymentParams, type ConfirmPaymentResponse, type CreateInvoiceParams, type CreateInvoiceResponse, type DownloadUrlResponse, type GetBolt11Response, type GetKeyResponse, Hypawave, HypawaveAPIError, type HypawaveConfig, type HypawaveError, type InvoiceFilesResponse, type InvoiceItem, type ListInvoicesParams, type ListInvoicesResponse, type OfferDownloadUrlParams, type PayAndConfirmParams, type PayAndConfirmResult, type PaymentPayload, type PublicSettingsResponse, type ReceiptResponse, type StoreFileKeyParams, type StoreFileParams, type StoreFileResponse, type TopupParams, type TopupResponse, type UnlockStatusResponse, type UploadUrlParams, type UploadUrlResponse, type WalletAdapter, type WalletCapabilities };
@@ -0,0 +1,315 @@
1
+ interface HypawaveConfig {
2
+ apiKey: string;
3
+ baseUrl?: string;
4
+ timeout?: number;
5
+ }
6
+ interface CreateInvoiceParams {
7
+ client_email: string;
8
+ client_first_name: string;
9
+ client_last_name: string;
10
+ amount: number;
11
+ due_date: string;
12
+ company_name?: string;
13
+ description?: string;
14
+ currency?: string;
15
+ expires_in?: "1h" | "24h" | "7d" | null;
16
+ expires_at?: string | null;
17
+ creator_first_name?: string;
18
+ creator_last_name?: string;
19
+ creator_company_name?: string;
20
+ creator_fingerprint?: string;
21
+ /**
22
+ * Optional override for the Lightning payment destination (Lightning Address
23
+ * or LNURL-pay URL). Defaults to the API key owner's stored `lightning_address`.
24
+ * Override supports marketplace routing (per-invoice seller), multi-wallet
25
+ * owners, and pass-through flows where the agent facilitates for a third
26
+ * party. Funds always flow wallet-to-wallet — Hypawave remains non-custodial.
27
+ */
28
+ payment_destination?: string;
29
+ execution_webhook?: string;
30
+ }
31
+ interface CreateInvoiceResponse {
32
+ ok: true;
33
+ invoice_id: number;
34
+ access_token: string;
35
+ payment_url: string;
36
+ stream_id: string;
37
+ amount: number;
38
+ currency: string;
39
+ sats: number;
40
+ btc_usd_rate: number;
41
+ expires_at: string | null;
42
+ }
43
+ interface BalanceResponse {
44
+ available_sats: number;
45
+ fiat_equivalent: number;
46
+ currency: string;
47
+ btc_price: number;
48
+ has_outstanding_fee: boolean;
49
+ }
50
+ /**
51
+ * Top-ups are fee-settlement only. The server always mints a bolt11 for
52
+ * exactly the amount owed — callers cannot specify an amount. This interface
53
+ * is kept as an empty object for call-site stability.
54
+ */
55
+ type TopupParams = Record<string, never>;
56
+ interface TopupResponse {
57
+ ok: true;
58
+ bolt11: string;
59
+ payment_hash: string;
60
+ /** Exact owed amount the server quoted. */
61
+ amount_sats: number;
62
+ expires_at: string | null;
63
+ /** True if an existing pending top-up was returned instead of a fresh one. */
64
+ reused?: boolean;
65
+ }
66
+ interface UnlockStatusResponse {
67
+ unlocked: Record<string, boolean>;
68
+ statuses: Record<string, {
69
+ unlocked: boolean;
70
+ status: string;
71
+ failure_reason: string | null;
72
+ settlement_proof: {
73
+ payment_hash: string | null;
74
+ preimage: string | null;
75
+ settled_at: string | null;
76
+ } | null;
77
+ }>;
78
+ }
79
+ interface GetKeyResponse {
80
+ encryption_key: string;
81
+ iv_hex: string;
82
+ downloads_used: number;
83
+ max_downloads: number;
84
+ reclaim_window_hours: number;
85
+ }
86
+ interface ApiKeyInfo {
87
+ id: string;
88
+ key_prefix: string;
89
+ mode: "test" | "live";
90
+ label: string | null;
91
+ created_at: string;
92
+ revoked_at: string | null;
93
+ last_used_at: string | null;
94
+ }
95
+ interface UploadUrlParams {
96
+ fileName: string;
97
+ contentType: string;
98
+ fileSize?: number;
99
+ }
100
+ interface UploadUrlResponse {
101
+ signedUrl: string;
102
+ objectKey: string;
103
+ }
104
+ interface StoreFileParams {
105
+ invoice_id: number;
106
+ file_name: string;
107
+ encrypted_file_url: string;
108
+ iv_hex: string;
109
+ key_hash?: string;
110
+ size?: number;
111
+ }
112
+ interface StoreFileResponse {
113
+ ok: true;
114
+ id: string;
115
+ }
116
+ interface StoreFileKeyParams {
117
+ invoice_file_id: string;
118
+ key_b64: string;
119
+ }
120
+ interface ListInvoicesParams {
121
+ limit?: number;
122
+ offset?: number;
123
+ status?: "paid" | "not_paid" | "expired";
124
+ }
125
+ interface InvoiceItem {
126
+ invoice_id: number;
127
+ stream_id: string | null;
128
+ amount: number;
129
+ currency: string;
130
+ description: string | null;
131
+ status: "paid" | "pending" | "expired";
132
+ payment_destination: string | null;
133
+ access_token: string | null;
134
+ payment_url: string | null;
135
+ client_email: string | null;
136
+ client_first_name: string | null;
137
+ client_last_name: string | null;
138
+ created_at: string;
139
+ due_date: string;
140
+ expires_at: string | null;
141
+ has_file: boolean;
142
+ payment_hash: string | null;
143
+ preimage: string | null;
144
+ paid_at: string | null;
145
+ }
146
+ interface InvoiceFilesResponse {
147
+ files: Record<number, {
148
+ id: string;
149
+ encrypted_file_url: string;
150
+ file_name: string;
151
+ }[]>;
152
+ }
153
+ interface DownloadUrlResponse {
154
+ downloadUrl: string;
155
+ }
156
+ interface ListInvoicesResponse {
157
+ invoices: InvoiceItem[];
158
+ has_more: boolean;
159
+ }
160
+ interface GetBolt11Response {
161
+ pr: string;
162
+ routes: unknown[];
163
+ terms_hash: string;
164
+ }
165
+ interface ConfirmPaymentParams {
166
+ payment_hash: string;
167
+ preimage: string;
168
+ terms_hash?: string;
169
+ }
170
+ interface ConfirmPaymentResponse {
171
+ ok: true;
172
+ already_settled: boolean;
173
+ }
174
+ interface ReceiptResponse {
175
+ receipt: {
176
+ invoice_id: number;
177
+ status: "settled";
178
+ amount: number;
179
+ currency: string;
180
+ amount_sats: number | null;
181
+ description: string | null;
182
+ creator: {
183
+ first_name: string | null;
184
+ last_name: string | null;
185
+ company: string | null;
186
+ };
187
+ created_at: string;
188
+ settled_at: string | null;
189
+ expires_at: string | null;
190
+ payment_hash: string | null;
191
+ preimage: string | null;
192
+ receipt_verified: boolean;
193
+ has_files: boolean;
194
+ file_count: number;
195
+ };
196
+ }
197
+ interface PublicSettingsResponse {
198
+ min_topup_sats: number;
199
+ min_topup_usd: number | null;
200
+ fee_percent: number;
201
+ min_invoice_usd: number;
202
+ max_invoice_usd: number;
203
+ max_file_size_mb: number;
204
+ max_files_per_invoice: number;
205
+ btc_usd_price: number | null;
206
+ }
207
+ interface PaymentPayload {
208
+ protocol: "hypawave/v1";
209
+ invoice_id: number;
210
+ amount: number;
211
+ currency: string;
212
+ sats: number;
213
+ btc_usd_rate: number;
214
+ description: string | null;
215
+ expires_at: string | null;
216
+ bolt11_url: string;
217
+ confirm_url: string;
218
+ payment_url: string;
219
+ spec_url: string;
220
+ instructions_url: string;
221
+ }
222
+ interface OfferDownloadUrlParams {
223
+ offer_file_id: string;
224
+ claim_token?: string;
225
+ preimage?: string;
226
+ }
227
+ interface WalletCapabilities {
228
+ returnsPreimage: true | false | "conditional";
229
+ }
230
+ interface WalletAdapter {
231
+ capabilities: WalletCapabilities;
232
+ payInvoice(bolt11: string): Promise<{
233
+ payment_hash: string;
234
+ preimage: string;
235
+ fees_paid_msat?: number;
236
+ raw?: unknown;
237
+ }>;
238
+ }
239
+ interface PayAndConfirmParams {
240
+ invoiceId: number;
241
+ accessToken: string;
242
+ wallet: WalletAdapter;
243
+ allowConditionalPreimage?: boolean;
244
+ }
245
+ interface PayAndConfirmResult {
246
+ payment_hash: string;
247
+ preimage: string;
248
+ terms_hash: string;
249
+ fees_paid_msat?: number;
250
+ confirmation: ConfirmPaymentResponse;
251
+ }
252
+ interface HypawaveError {
253
+ error: string;
254
+ message?: string;
255
+ field?: string;
256
+ }
257
+
258
+ declare class Hypawave {
259
+ private readonly apiKey;
260
+ private readonly baseUrl;
261
+ private readonly timeout;
262
+ constructor(config: HypawaveConfig);
263
+ private request;
264
+ createInvoice(params: CreateInvoiceParams): Promise<CreateInvoiceResponse>;
265
+ getBolt11(accessToken: string): Promise<GetBolt11Response>;
266
+ confirmPayment(invoiceId: number, params: ConfirmPaymentParams): Promise<ConfirmPaymentResponse>;
267
+ getPaymentPayload(params: CreateInvoiceParams, response: CreateInvoiceResponse): PaymentPayload;
268
+ getBalance(currency?: string): Promise<BalanceResponse>;
269
+ /**
270
+ * Request a fee-settlement top-up invoice. The server mints a bolt11 for
271
+ * exactly the amount owed — balance can never exceed 0. No arguments are
272
+ * needed; any amount fields in a passed params object are ignored.
273
+ *
274
+ * Throws API errors:
275
+ * - topup_not_needed — balance is already ≥ 0
276
+ * - duplicate_topup — a pending top-up invoice already exists
277
+ */
278
+ topup(_params?: TopupParams): Promise<TopupResponse>;
279
+ getUnlockStatus(invoiceIds: number[]): Promise<UnlockStatusResponse>;
280
+ getKey(invoiceFileId: string, token?: string): Promise<GetKeyResponse>;
281
+ getUploadUrl(params: UploadUrlParams): Promise<UploadUrlResponse>;
282
+ storeFile(params: StoreFileParams): Promise<StoreFileResponse>;
283
+ storeFileKey(params: StoreFileKeyParams): Promise<{
284
+ ok: true;
285
+ }>;
286
+ listInvoices(params?: ListInvoicesParams): Promise<ListInvoicesResponse>;
287
+ getInvoiceFiles(invoiceIds: number[], token?: string): Promise<InvoiceFilesResponse>;
288
+ getDownloadUrl(invoiceFileId: string, token?: string): Promise<DownloadUrlResponse>;
289
+ getOfferDownloadUrl(paymentIntentId: string, params: OfferDownloadUrlParams): Promise<DownloadUrlResponse>;
290
+ getReceipt(invoiceId: number): Promise<ReceiptResponse>;
291
+ getPayerReceipt(invoiceId: number, preimage: string): Promise<ReceiptResponse>;
292
+ getSettings(): Promise<PublicSettingsResponse>;
293
+ waitForSettlement(invoiceId: number, options?: {
294
+ pollInterval?: number;
295
+ timeout?: number;
296
+ }): Promise<UnlockStatusResponse["statuses"][string]>;
297
+ payAndConfirm(params: PayAndConfirmParams): Promise<PayAndConfirmResult>;
298
+ }
299
+
300
+ declare class HypawaveAPIError extends Error {
301
+ readonly status: number;
302
+ readonly code: string;
303
+ readonly field?: string;
304
+ constructor(status: number, body: {
305
+ error: string;
306
+ message?: string;
307
+ field?: string;
308
+ });
309
+ get isAuth(): boolean;
310
+ get isRateLimit(): boolean;
311
+ get isValidation(): boolean;
312
+ get isOutstandingFee(): boolean;
313
+ }
314
+
315
+ export { type ApiKeyInfo, type BalanceResponse, type ConfirmPaymentParams, type ConfirmPaymentResponse, type CreateInvoiceParams, type CreateInvoiceResponse, type DownloadUrlResponse, type GetBolt11Response, type GetKeyResponse, Hypawave, HypawaveAPIError, type HypawaveConfig, type HypawaveError, type InvoiceFilesResponse, type InvoiceItem, type ListInvoicesParams, type ListInvoicesResponse, type OfferDownloadUrlParams, type PayAndConfirmParams, type PayAndConfirmResult, type PaymentPayload, type PublicSettingsResponse, type ReceiptResponse, type StoreFileKeyParams, type StoreFileParams, type StoreFileResponse, type TopupParams, type TopupResponse, type UnlockStatusResponse, type UploadUrlParams, type UploadUrlResponse, type WalletAdapter, type WalletCapabilities };