@garydevenay/emporion 0.0.2 → 0.0.3

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 (45) hide show
  1. package/README.md +213 -5
  2. package/dist/src/cli.js +1195 -182
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/context-store.d.ts +22 -0
  5. package/dist/src/context-store.js +133 -0
  6. package/dist/src/context-store.js.map +1 -0
  7. package/dist/src/daemon.d.ts +2 -0
  8. package/dist/src/daemon.js.map +1 -1
  9. package/dist/src/errors.d.ts +8 -0
  10. package/dist/src/errors.js +8 -0
  11. package/dist/src/errors.js.map +1 -1
  12. package/dist/src/experience/deals-store.d.ts +37 -0
  13. package/dist/src/experience/deals-store.js +96 -0
  14. package/dist/src/experience/deals-store.js.map +1 -0
  15. package/dist/src/index.d.ts +5 -0
  16. package/dist/src/index.js +4 -0
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/wallet/config-store.d.ts +16 -0
  19. package/dist/src/wallet/config-store.js +180 -0
  20. package/dist/src/wallet/config-store.js.map +1 -0
  21. package/dist/src/wallet/index.d.ts +3 -0
  22. package/dist/src/wallet/index.js +4 -0
  23. package/dist/src/wallet/index.js.map +1 -0
  24. package/dist/src/wallet/ledger.d.ts +50 -0
  25. package/dist/src/wallet/ledger.js +340 -0
  26. package/dist/src/wallet/ledger.js.map +1 -0
  27. package/dist/src/wallet/nostr-nwc-adapter.d.ts +40 -0
  28. package/dist/src/wallet/nostr-nwc-adapter.js +506 -0
  29. package/dist/src/wallet/nostr-nwc-adapter.js.map +1 -0
  30. package/dist/src/wallet/nwc-adapter.d.ts +20 -0
  31. package/dist/src/wallet/nwc-adapter.js +233 -0
  32. package/dist/src/wallet/nwc-adapter.js.map +1 -0
  33. package/dist/src/wallet/service.d.ts +42 -0
  34. package/dist/src/wallet/service.js +390 -0
  35. package/dist/src/wallet/service.js.map +1 -0
  36. package/dist/src/wallet/types.d.ts +140 -0
  37. package/dist/src/wallet/types.js +2 -0
  38. package/dist/src/wallet/types.js.map +1 -0
  39. package/dist/test/experience.test.d.ts +1 -0
  40. package/dist/test/experience.test.js +232 -0
  41. package/dist/test/experience.test.js.map +1 -0
  42. package/dist/test/wallet.test.d.ts +1 -0
  43. package/dist/test/wallet.test.js +853 -0
  44. package/dist/test/wallet.test.js.map +1 -0
  45. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,+BAA+B,EAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EAexB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type AutoSettleRecord, type InvoiceRecord, type InvoiceStatus, type PaymentRecord, type PaymentStatus, type WalletLedgerListFilters, type WalletLedgerSnapshot, type WalletNetwork } from "./types.js";
2
+ export declare class WalletLedger {
3
+ private readonly ledgerPath;
4
+ private readonly invoices;
5
+ private readonly payments;
6
+ private readonly autoSettles;
7
+ private readonly autoSettleIndex;
8
+ private constructor();
9
+ static create(dataDir: string): Promise<WalletLedger>;
10
+ snapshot(): WalletLedgerSnapshot;
11
+ list(filters: WalletLedgerListFilters): unknown[];
12
+ getPendingCounts(): {
13
+ pendingInvoices: number;
14
+ pendingPayments: number;
15
+ };
16
+ listPendingInvoices(): InvoiceRecord[];
17
+ listPendingPayments(): PaymentRecord[];
18
+ getInvoiceByExternalRef(externalRef: string): InvoiceRecord | undefined;
19
+ getPaymentByExternalRef(externalRef: string): PaymentRecord | undefined;
20
+ addInvoice(input: {
21
+ amount: number;
22
+ memo?: string;
23
+ network: WalletNetwork;
24
+ externalRef: string;
25
+ bolt11: string;
26
+ status: InvoiceStatus;
27
+ expiresAt?: string;
28
+ now: string;
29
+ }): Promise<InvoiceRecord>;
30
+ transitionInvoice(invoiceId: string, status: InvoiceStatus, now: string): Promise<InvoiceRecord>;
31
+ addPayment(input: {
32
+ sourceRef: string;
33
+ amount: number;
34
+ fee: number;
35
+ externalRef: string;
36
+ status: PaymentStatus;
37
+ failureReason?: string;
38
+ now: string;
39
+ }): Promise<PaymentRecord>;
40
+ transitionPayment(paymentId: string, status: PaymentStatus, now: string, options?: {
41
+ fee?: number;
42
+ failureReason?: string;
43
+ }): Promise<PaymentRecord>;
44
+ hasAutoSettle(eventId: string, lightningReference: string): boolean;
45
+ addAutoSettle(record: Omit<AutoSettleRecord, "id" | "createdAt"> & {
46
+ createdAt: string;
47
+ }): Promise<AutoSettleRecord>;
48
+ private load;
49
+ private persist;
50
+ }
@@ -0,0 +1,340 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { WalletUnavailableError } from "../errors.js";
5
+ import { getWalletRuntimeDir } from "./config-store.js";
6
+ const LEDGER_FILE = "ledger.v1.json";
7
+ function ensureArray(value, fieldName) {
8
+ if (!Array.isArray(value)) {
9
+ throw new WalletUnavailableError(`${fieldName} must be an array`);
10
+ }
11
+ return value;
12
+ }
13
+ function parseInvoice(value) {
14
+ if (typeof value !== "object" || value === null) {
15
+ throw new WalletUnavailableError("Invalid invoice record in wallet ledger");
16
+ }
17
+ const entry = value;
18
+ const status = entry.status;
19
+ if (status !== "created" && status !== "paid" && status !== "expired" && status !== "canceled") {
20
+ throw new WalletUnavailableError("Invalid invoice status in wallet ledger");
21
+ }
22
+ if (typeof entry.id !== "string" || typeof entry.externalRef !== "string" || typeof entry.bolt11 !== "string") {
23
+ throw new WalletUnavailableError("Invalid invoice identity fields in wallet ledger");
24
+ }
25
+ if (!Number.isInteger(entry.amount) || entry.amount < 0) {
26
+ throw new WalletUnavailableError("Invalid invoice amount in wallet ledger");
27
+ }
28
+ if (entry.network !== "bitcoin") {
29
+ throw new WalletUnavailableError("Invalid invoice network in wallet ledger");
30
+ }
31
+ if (typeof entry.createdAt !== "string" || typeof entry.updatedAt !== "string") {
32
+ throw new WalletUnavailableError("Invalid invoice timestamps in wallet ledger");
33
+ }
34
+ const amount = entry.amount;
35
+ const memo = typeof entry.memo === "string" ? entry.memo : undefined;
36
+ const expiresAt = typeof entry.expiresAt === "string" ? entry.expiresAt : undefined;
37
+ return {
38
+ id: entry.id,
39
+ amount,
40
+ network: "bitcoin",
41
+ externalRef: entry.externalRef,
42
+ bolt11: entry.bolt11,
43
+ status,
44
+ createdAt: entry.createdAt,
45
+ updatedAt: entry.updatedAt,
46
+ ...(memo ? { memo } : {}),
47
+ ...(expiresAt ? { expiresAt } : {})
48
+ };
49
+ }
50
+ function parsePayment(value) {
51
+ if (typeof value !== "object" || value === null) {
52
+ throw new WalletUnavailableError("Invalid payment record in wallet ledger");
53
+ }
54
+ const entry = value;
55
+ const status = entry.status;
56
+ if (status !== "pending" && status !== "succeeded" && status !== "failed") {
57
+ throw new WalletUnavailableError("Invalid payment status in wallet ledger");
58
+ }
59
+ if (typeof entry.id !== "string" ||
60
+ typeof entry.sourceRef !== "string" ||
61
+ typeof entry.externalRef !== "string" ||
62
+ typeof entry.createdAt !== "string" ||
63
+ typeof entry.updatedAt !== "string") {
64
+ throw new WalletUnavailableError("Invalid payment identity fields in wallet ledger");
65
+ }
66
+ if (!Number.isInteger(entry.amount) || !Number.isInteger(entry.fee)) {
67
+ throw new WalletUnavailableError("Invalid payment amount/fee in wallet ledger");
68
+ }
69
+ const amount = entry.amount;
70
+ const fee = entry.fee;
71
+ const failureReason = typeof entry.failureReason === "string" ? entry.failureReason : undefined;
72
+ return {
73
+ id: entry.id,
74
+ sourceRef: entry.sourceRef,
75
+ amount,
76
+ fee,
77
+ externalRef: entry.externalRef,
78
+ status,
79
+ createdAt: entry.createdAt,
80
+ updatedAt: entry.updatedAt,
81
+ ...(failureReason ? { failureReason } : {})
82
+ };
83
+ }
84
+ function parseAutoSettle(value) {
85
+ if (typeof value !== "object" || value === null) {
86
+ throw new WalletUnavailableError("Invalid auto-settle record in wallet ledger");
87
+ }
88
+ const entry = value;
89
+ if (typeof entry.id !== "string" ||
90
+ typeof entry.triggerObjectId !== "string" ||
91
+ typeof entry.eventId !== "string" ||
92
+ typeof entry.lightningReference !== "string" ||
93
+ typeof entry.createdAt !== "string") {
94
+ throw new WalletUnavailableError("Invalid auto-settle identity fields in wallet ledger");
95
+ }
96
+ if (entry.triggerObjectKind !== "offer" && entry.triggerObjectKind !== "bid" && entry.triggerObjectKind !== "agreement") {
97
+ throw new WalletUnavailableError("Invalid auto-settle trigger kind in wallet ledger");
98
+ }
99
+ if (entry.action !== "pay-bolt11") {
100
+ throw new WalletUnavailableError("Invalid auto-settle action in wallet ledger");
101
+ }
102
+ if (entry.result !== "succeeded" && entry.result !== "failed" && entry.result !== "skipped") {
103
+ throw new WalletUnavailableError("Invalid auto-settle result in wallet ledger");
104
+ }
105
+ const detail = typeof entry.detail === "string" ? entry.detail : undefined;
106
+ const paymentId = typeof entry.paymentId === "string" ? entry.paymentId : undefined;
107
+ return {
108
+ id: entry.id,
109
+ triggerObjectKind: entry.triggerObjectKind,
110
+ triggerObjectId: entry.triggerObjectId,
111
+ eventId: entry.eventId,
112
+ lightningReference: entry.lightningReference,
113
+ action: "pay-bolt11",
114
+ result: entry.result,
115
+ createdAt: entry.createdAt,
116
+ ...(detail ? { detail } : {}),
117
+ ...(paymentId ? { paymentId } : {})
118
+ };
119
+ }
120
+ function canTransitionInvoice(current, next) {
121
+ if (current === next) {
122
+ return true;
123
+ }
124
+ if (current !== "created") {
125
+ return false;
126
+ }
127
+ return next === "paid" || next === "expired" || next === "canceled";
128
+ }
129
+ function canTransitionPayment(current, next) {
130
+ if (current === next) {
131
+ return true;
132
+ }
133
+ return current === "pending" && (next === "succeeded" || next === "failed");
134
+ }
135
+ function dedupeKey(eventId, lightningReference) {
136
+ return `${eventId}:${lightningReference}`;
137
+ }
138
+ export class WalletLedger {
139
+ ledgerPath;
140
+ invoices = new Map();
141
+ payments = new Map();
142
+ autoSettles = new Map();
143
+ autoSettleIndex = new Map();
144
+ constructor(dataDir) {
145
+ this.ledgerPath = path.join(getWalletRuntimeDir(dataDir), LEDGER_FILE);
146
+ }
147
+ static async create(dataDir) {
148
+ const ledger = new WalletLedger(dataDir);
149
+ await ledger.load();
150
+ return ledger;
151
+ }
152
+ snapshot() {
153
+ return {
154
+ invoices: [...this.invoices.values()].sort((left, right) => left.createdAt.localeCompare(right.createdAt)),
155
+ payments: [...this.payments.values()].sort((left, right) => left.createdAt.localeCompare(right.createdAt)),
156
+ autoSettles: [...this.autoSettles.values()].sort((left, right) => left.createdAt.localeCompare(right.createdAt))
157
+ };
158
+ }
159
+ list(filters) {
160
+ const snapshot = this.snapshot();
161
+ if (filters.kind === "invoice") {
162
+ return filters.status ? snapshot.invoices.filter((entry) => entry.status === filters.status) : snapshot.invoices;
163
+ }
164
+ if (filters.kind === "payment") {
165
+ return filters.status ? snapshot.payments.filter((entry) => entry.status === filters.status) : snapshot.payments;
166
+ }
167
+ if (filters.kind === "auto-settle") {
168
+ return filters.status ? snapshot.autoSettles.filter((entry) => entry.result === filters.status) : snapshot.autoSettles;
169
+ }
170
+ return [...snapshot.invoices, ...snapshot.payments, ...snapshot.autoSettles];
171
+ }
172
+ getPendingCounts() {
173
+ let pendingInvoices = 0;
174
+ let pendingPayments = 0;
175
+ for (const invoice of this.invoices.values()) {
176
+ if (invoice.status === "created") {
177
+ pendingInvoices += 1;
178
+ }
179
+ }
180
+ for (const payment of this.payments.values()) {
181
+ if (payment.status === "pending") {
182
+ pendingPayments += 1;
183
+ }
184
+ }
185
+ return { pendingInvoices, pendingPayments };
186
+ }
187
+ listPendingInvoices() {
188
+ return [...this.invoices.values()].filter((entry) => entry.status === "created");
189
+ }
190
+ listPendingPayments() {
191
+ return [...this.payments.values()].filter((entry) => entry.status === "pending");
192
+ }
193
+ getInvoiceByExternalRef(externalRef) {
194
+ return [...this.invoices.values()].find((entry) => entry.externalRef === externalRef);
195
+ }
196
+ getPaymentByExternalRef(externalRef) {
197
+ return [...this.payments.values()].find((entry) => entry.externalRef === externalRef);
198
+ }
199
+ async addInvoice(input) {
200
+ const record = {
201
+ id: randomUUID(),
202
+ amount: input.amount,
203
+ network: input.network,
204
+ externalRef: input.externalRef,
205
+ bolt11: input.bolt11,
206
+ status: input.status,
207
+ createdAt: input.now,
208
+ updatedAt: input.now,
209
+ ...(input.memo ? { memo: input.memo } : {}),
210
+ ...(input.expiresAt ? { expiresAt: input.expiresAt } : {})
211
+ };
212
+ this.invoices.set(record.id, record);
213
+ await this.persist();
214
+ return record;
215
+ }
216
+ async transitionInvoice(invoiceId, status, now) {
217
+ const existing = this.invoices.get(invoiceId);
218
+ if (!existing) {
219
+ throw new WalletUnavailableError(`Unknown invoice record: ${invoiceId}`);
220
+ }
221
+ if (!canTransitionInvoice(existing.status, status)) {
222
+ throw new WalletUnavailableError(`Invalid invoice status transition: ${existing.status} -> ${status}`);
223
+ }
224
+ if (existing.status === status) {
225
+ return existing;
226
+ }
227
+ const next = {
228
+ ...existing,
229
+ status,
230
+ updatedAt: now
231
+ };
232
+ this.invoices.set(invoiceId, next);
233
+ await this.persist();
234
+ return next;
235
+ }
236
+ async addPayment(input) {
237
+ const record = {
238
+ id: randomUUID(),
239
+ sourceRef: input.sourceRef,
240
+ amount: input.amount,
241
+ fee: input.fee,
242
+ externalRef: input.externalRef,
243
+ status: input.status,
244
+ createdAt: input.now,
245
+ updatedAt: input.now,
246
+ ...(input.failureReason ? { failureReason: input.failureReason } : {})
247
+ };
248
+ this.payments.set(record.id, record);
249
+ await this.persist();
250
+ return record;
251
+ }
252
+ async transitionPayment(paymentId, status, now, options) {
253
+ const existing = this.payments.get(paymentId);
254
+ if (!existing) {
255
+ throw new WalletUnavailableError(`Unknown payment record: ${paymentId}`);
256
+ }
257
+ if (!canTransitionPayment(existing.status, status)) {
258
+ throw new WalletUnavailableError(`Invalid payment status transition: ${existing.status} -> ${status}`);
259
+ }
260
+ if (existing.status === status &&
261
+ options?.fee === undefined &&
262
+ options?.failureReason === undefined) {
263
+ return existing;
264
+ }
265
+ const next = {
266
+ ...existing,
267
+ status,
268
+ fee: options?.fee ?? existing.fee,
269
+ updatedAt: now,
270
+ ...((options?.failureReason ?? existing.failureReason)
271
+ ? { failureReason: options?.failureReason ?? existing.failureReason }
272
+ : {})
273
+ };
274
+ this.payments.set(paymentId, next);
275
+ await this.persist();
276
+ return next;
277
+ }
278
+ hasAutoSettle(eventId, lightningReference) {
279
+ return this.autoSettleIndex.has(dedupeKey(eventId, lightningReference));
280
+ }
281
+ async addAutoSettle(record) {
282
+ const key = dedupeKey(record.eventId, record.lightningReference);
283
+ const existing = this.autoSettleIndex.get(key);
284
+ if (existing) {
285
+ return existing;
286
+ }
287
+ const next = {
288
+ ...record,
289
+ id: randomUUID()
290
+ };
291
+ this.autoSettles.set(next.id, next);
292
+ this.autoSettleIndex.set(key, next);
293
+ await this.persist();
294
+ return next;
295
+ }
296
+ async load() {
297
+ await mkdir(path.dirname(this.ledgerPath), { recursive: true });
298
+ try {
299
+ const raw = await readFile(this.ledgerPath, "utf8");
300
+ const parsed = JSON.parse(raw);
301
+ if (parsed.version !== 1) {
302
+ throw new WalletUnavailableError("Wallet ledger version is invalid");
303
+ }
304
+ for (const invoice of ensureArray(parsed.invoices, "wallet ledger invoices")) {
305
+ const parsedInvoice = parseInvoice(invoice);
306
+ this.invoices.set(parsedInvoice.id, parsedInvoice);
307
+ }
308
+ for (const payment of ensureArray(parsed.payments, "wallet ledger payments")) {
309
+ const parsedPayment = parsePayment(payment);
310
+ this.payments.set(parsedPayment.id, parsedPayment);
311
+ }
312
+ for (const autoSettle of ensureArray(parsed.autoSettles, "wallet ledger autoSettles")) {
313
+ const parsedAutoSettle = parseAutoSettle(autoSettle);
314
+ this.autoSettles.set(parsedAutoSettle.id, parsedAutoSettle);
315
+ this.autoSettleIndex.set(dedupeKey(parsedAutoSettle.eventId, parsedAutoSettle.lightningReference), parsedAutoSettle);
316
+ }
317
+ }
318
+ catch (error) {
319
+ if (error instanceof WalletUnavailableError) {
320
+ throw error;
321
+ }
322
+ const message = error instanceof Error ? error.message : String(error);
323
+ if (message.includes("ENOENT")) {
324
+ await this.persist();
325
+ return;
326
+ }
327
+ throw new WalletUnavailableError(`Failed to load wallet ledger: ${message}`, { cause: error });
328
+ }
329
+ }
330
+ async persist() {
331
+ const document = {
332
+ version: 1,
333
+ invoices: [...this.invoices.values()],
334
+ payments: [...this.payments.values()],
335
+ autoSettles: [...this.autoSettles.values()]
336
+ };
337
+ await writeFile(this.ledgerPath, `${JSON.stringify(document, null, 2)}\n`, "utf8");
338
+ }
339
+ }
340
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/wallet/ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { CreateInvoiceInput, PayInvoiceInput, WalletAdapter, WalletAdapterCreateInvoiceResult, WalletAdapterPayInvoiceResult } from "./types.js";
2
+ interface ParsedNostrWalletConnect {
3
+ walletPubkey: string;
4
+ relays: string[];
5
+ secret: string;
6
+ }
7
+ interface NostrNwcResponse {
8
+ result_type?: unknown;
9
+ result?: unknown;
10
+ error?: {
11
+ code?: unknown;
12
+ message?: unknown;
13
+ };
14
+ }
15
+ export interface NostrNwcClient {
16
+ request(method: string, params: Record<string, unknown>): Promise<NostrNwcResponse>;
17
+ close(): void;
18
+ }
19
+ export declare function isNostrWalletConnectUri(connectionUri: string): boolean;
20
+ export declare function parseNostrWalletConnectConnectionUri(connectionUri: string): ParsedNostrWalletConnect;
21
+ export declare function parseNostrWalletConnectMetadata(connectionUri: string): {
22
+ endpoint: string;
23
+ };
24
+ export declare class NostrWalletConnectAdapter implements WalletAdapter {
25
+ private readonly client;
26
+ constructor(connectionUri: string, options?: {
27
+ timeoutMs?: number;
28
+ client?: NostrNwcClient;
29
+ });
30
+ createInvoice(input: CreateInvoiceInput): Promise<WalletAdapterCreateInvoiceResult>;
31
+ payInvoice(input: PayInvoiceInput): Promise<WalletAdapterPayInvoiceResult>;
32
+ getInvoiceStatus(externalRef: string): Promise<"created" | "paid" | "expired" | "canceled">;
33
+ getPaymentStatus(externalRef: string): Promise<{
34
+ status: "pending" | "succeeded" | "failed";
35
+ feeSats?: number;
36
+ failureReason?: string;
37
+ }>;
38
+ disconnect(): Promise<void>;
39
+ }
40
+ export {};