diff --git a/bun.lockb b/bun.lockb index 4efdcff..9e97eb2 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 4b41963..83e53d3 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "typescript": "^5.3.2" }, "dependencies": { - "@cashu/cashu-ts": "^1.2.1", + "@cashu/cashu-ts": "^2.0.0", "@nostr-dev-kit/ndk": "^2.10.7" } } diff --git a/src/cashu.ts b/src/cashu.ts index fa303f7..a3080b8 100644 --- a/src/cashu.ts +++ b/src/cashu.ts @@ -1,6 +1,6 @@ -import {CashuMint, CashuWallet, getDecodedToken, getEncodedToken, type Proof} from "@cashu/cashu-ts"; -import type {TokenEntry} from "@cashu/cashu-ts"; -import {getMailSubscriptionDurationForSats} from "./general.ts"; +import { CashuMint, CashuWallet, getDecodedToken, getEncodedToken } from "@cashu/cashu-ts"; +import type { Token } from "@cashu/cashu-ts"; +import { getMailSubscriptionDurationForSats } from "./general.ts"; class InvalidTokenException extends Error { constructor(message: string) { @@ -20,29 +20,29 @@ export class TokenInfo { ] as const; private static readonly MIN_AMOUNT = 21 as const; - public readonly tokens: TokenEntry[]; + public readonly token: Token; public readonly amount: number; - public readonly mint: string; - public readonly proofs: Proof[]; + + get mint() { + return this.token.mint; + } + + get proofs() { + return this.token.proofs; + } constructor(protected readonly tokenString: string) { - const decodedTokenData = getDecodedToken(tokenString); - const tokens = decodedTokenData.token; - const amount = tokens.flatMap(t => t.proofs).reduce((c, x) => c + x.amount, 0); + const token = getDecodedToken(tokenString); - if(decodedTokenData.token.length === 0) - throw new InvalidTokenException('Invalid token format. We only accept tokens with at least one proof'); - if (tokens.slice(1).some(t => t.mint !== tokens[0].mint)) - throw new InvalidTokenException('Invalid token format. We only accept tokens with the same mint'); - if (!TokenInfo.ALLOWED_MINTS.includes(tokens[0].mint)) + const amount = token.proofs.reduce((c, x) => c + x.amount, 0); + + if (!TokenInfo.ALLOWED_MINTS.includes(token.mint)) throw new InvalidTokenException('Unsupported mint'); if (amount < TokenInfo.MIN_AMOUNT) throw new InvalidTokenException(`Invalid amount. Minimum required: ${TokenInfo.MIN_AMOUNT} sats`); - this.tokens = tokens; + this.token = token; this.amount = amount; - this.mint = tokens[0].mint; - this.proofs = tokens.flatMap(t => t.proofs); } async receive(): Promise { @@ -50,10 +50,8 @@ export class TokenInfo { const wallet = new CashuWallet(mint); const newToken = await wallet.receive(this.tokenString); return getEncodedToken({ - token: [{ - mint: this.mint, - proofs: newToken - }] + mint: this.mint, + proofs: newToken }); } }