Compare commits
	
		
			6 commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d5e91a356d | |||
| c1d309ba09 | |||
| 03163e9f4a | |||
| 3bbeb113a7 | |||
| 4a177547fb | |||
| 8aa8c2752b | 
					 5 changed files with 47 additions and 19 deletions
				
			
		
							
								
								
									
										
											BIN
										
									
								
								bun.lockb
									
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bun.lockb
									
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -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"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										48
									
								
								src/cashu.ts
									
										
									
									
									
								
							
							
						
						
									
										48
									
								
								src/cashu.ts
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
import {getDecodedToken} from "@cashu/cashu-ts";
 | 
			
		||||
import type {Proof, 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,23 +20,39 @@ export class TokenInfo {
 | 
			
		|||
  ] as const;
 | 
			
		||||
  private static readonly MIN_AMOUNT = 21 as const;
 | 
			
		||||
 | 
			
		||||
  public readonly token: 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);
 | 
			
		||||
    if (decodedTokenData.unit !== 'sat' || decodedTokenData.token.length !== 1)
 | 
			
		||||
      throw new InvalidTokenException('Invalid token format. We only accept a single token denominated in sats');
 | 
			
		||||
    this.token = decodedTokenData.token[0];
 | 
			
		||||
    this.amount = this.token.proofs.reduce((c, x) => c + x.amount, 0);
 | 
			
		||||
    if (this.amount < TokenInfo.MIN_AMOUNT)
 | 
			
		||||
      throw new InvalidTokenException(`Invalid amount. Minimum required: ${TokenInfo.MIN_AMOUNT} sats`);
 | 
			
		||||
    if (!TokenInfo.ALLOWED_MINTS.includes(this.token.mint))
 | 
			
		||||
    const token = getDecodedToken(tokenString);
 | 
			
		||||
 | 
			
		||||
    const amount = token.proofs.reduce((c, x) => c + x.amount, 0);
 | 
			
		||||
 | 
			
		||||
    if (!TokenInfo.ALLOWED_MINTS.includes(token.mint))
 | 
			
		||||
      throw new InvalidTokenException('Unsupported mint');
 | 
			
		||||
    this.mint = this.token.mint;
 | 
			
		||||
    this.proofs = this.token.proofs;
 | 
			
		||||
    if (amount < TokenInfo.MIN_AMOUNT)
 | 
			
		||||
      throw new InvalidTokenException(`Invalid amount. Minimum required: ${TokenInfo.MIN_AMOUNT} sats`);
 | 
			
		||||
 | 
			
		||||
    this.token = token;
 | 
			
		||||
    this.amount = amount;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  async receive(): Promise<string> {
 | 
			
		||||
    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
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
export * from "./cashu";
 | 
			
		||||
export * from "./general";
 | 
			
		||||
export * from "./cashu.ts";
 | 
			
		||||
export * from "./general.ts";
 | 
			
		||||
export * from "./nostr.ts";
 | 
			
		||||
export * from "./email.ts";
 | 
			
		||||
							
								
								
									
										12
									
								
								src/nostr.ts
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/nostr.ts
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
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,
 | 
			
		||||
| 
						 | 
				
			
			@ -25,3 +26,14 @@ 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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue