diff --git a/bun.lockb b/bun.lockb index 9e97eb2..4efdcff 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 83e53d3..4b41963 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "typescript": "^5.3.2" }, "dependencies": { - "@cashu/cashu-ts": "^2.0.0", + "@cashu/cashu-ts": "^1.2.1", "@nostr-dev-kit/ndk": "^2.10.7" } } diff --git a/src/cashu.ts b/src/cashu.ts index a3080b8..0a8cbc2 100644 --- a/src/cashu.ts +++ b/src/cashu.ts @@ -1,6 +1,6 @@ -import { CashuMint, CashuWallet, getDecodedToken, getEncodedToken } from "@cashu/cashu-ts"; -import type { Token } from "@cashu/cashu-ts"; -import { getMailSubscriptionDurationForSats } from "./general.ts"; +import {getDecodedToken, type Proof} from "@cashu/cashu-ts"; +import type {TokenEntry} from "@cashu/cashu-ts"; +import {getMailSubscriptionDurationForSats} from "./general.ts"; class InvalidTokenException extends Error { constructor(message: string) { @@ -20,39 +20,29 @@ export class TokenInfo { ] as const; private static readonly MIN_AMOUNT = 21 as const; - public readonly token: Token; + public readonly tokens: TokenEntry[]; public readonly amount: number; - - get mint() { - return this.token.mint; - } - - get proofs() { - return this.token.proofs; - } + public readonly mint: string; + public readonly proofs: Proof[]; constructor(protected readonly tokenString: string) { - const token = getDecodedToken(tokenString); + const decodedTokenData = getDecodedToken(tokenString); + const tokens = decodedTokenData.token; + const amount = tokens.flatMap(t => t.proofs).reduce((c, x) => c + x.amount, 0); - const amount = token.proofs.reduce((c, x) => c + x.amount, 0); - - if (!TokenInfo.ALLOWED_MINTS.includes(token.mint)) + 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)) throw new InvalidTokenException('Unsupported mint'); if (amount < TokenInfo.MIN_AMOUNT) throw new InvalidTokenException(`Invalid amount. Minimum required: ${TokenInfo.MIN_AMOUNT} sats`); - this.token = token; + this.tokens = tokens; this.amount = amount; - } - - async receive(): Promise { - const mint = new CashuMint(this.mint); - const wallet = new CashuWallet(mint); - const newToken = await wallet.receive(this.tokenString); - return getEncodedToken({ - mint: this.mint, - proofs: newToken - }); + this.mint = tokens[0].mint; + this.proofs = tokens.flatMap(t => t.proofs); } } diff --git a/src/index.ts b/src/index.ts index 6549f29..08492a2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -export * from "./cashu.ts"; -export * from "./general.ts"; +export * from "./cashu"; +export * from "./general"; export * from "./nostr.ts"; export * from "./email.ts"; \ No newline at end of file diff --git a/src/nostr.ts b/src/nostr.ts index af68454..4b4cd80 100644 --- a/src/nostr.ts +++ b/src/nostr.ts @@ -1,7 +1,6 @@ import NDK, {NDKEvent, NDKPrivateKeySigner, NDKUser} from "@nostr-dev-kit/ndk"; import {generateSecretKey} from "nostr-tools"; import {randomTimeUpTo2DaysInThePast} from "./general.ts"; -import {decode as nip19Decode, npubEncode} from "nostr-tools/nip19"; export async function encryptEventForRecipient( ndk: NDK, @@ -26,14 +25,3 @@ export async function encryptEventForRecipient( giftWrap.ndk = ndk; return giftWrap; } - -export function npubToPubKeyString(npub: string) { - const decoded = nip19Decode(npub); - if (decoded.type !== 'npub') - throw new Error('Invalid npub'); - return decoded.data; -} - -export function pubKeyStringToNpub(pubKey: string) { - return npubEncode(pubKey); -}