mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
refactor: create walletSchema and use it where required
This commit is contained in:
parent
1ff6511b39
commit
89840eb279
3 changed files with 20 additions and 17 deletions
|
|
@ -1,13 +1,13 @@
|
||||||
import { Env as HonoEnv, Hono } from '@hono/hono';
|
import { Env as HonoEnv, Hono } from '@hono/hono';
|
||||||
import { NostrSigner, NSchema as n, NSecSigner, NStore } from '@nostrify/nostrify';
|
import { NostrSigner, NSecSigner, NStore } from '@nostrify/nostrify';
|
||||||
import { generateSecretKey, getPublicKey } from 'nostr-tools';
|
import { generateSecretKey, getPublicKey } from 'nostr-tools';
|
||||||
import { bytesToString, stringToBytes } from '@scure/base';
|
import { bytesToString, stringToBytes } from '@scure/base';
|
||||||
import { assertEquals, assertExists } from '@std/assert';
|
import { assertEquals, assertExists } from '@std/assert';
|
||||||
import { z } from 'zod';
|
|
||||||
|
|
||||||
import { createTestDB } from '@/test.ts';
|
import { createTestDB } from '@/test.ts';
|
||||||
|
|
||||||
import cashuApp from '@/controllers/api/cashu.ts';
|
import cashuApp from '@/controllers/api/cashu.ts';
|
||||||
|
import { walletSchema } from '@/schema.ts';
|
||||||
|
|
||||||
interface AppEnv extends HonoEnv {
|
interface AppEnv extends HonoEnv {
|
||||||
Variables: {
|
Variables: {
|
||||||
|
|
@ -29,13 +29,6 @@ Deno.test('PUT /wallet must be successful', {
|
||||||
const signer = new NSecSigner(sk);
|
const signer = new NSecSigner(sk);
|
||||||
const nostrPrivateKey = bytesToString('hex', sk);
|
const nostrPrivateKey = bytesToString('hex', sk);
|
||||||
|
|
||||||
const expectedResponseSchema = z.object({
|
|
||||||
pubkey_p2pk: n.id(),
|
|
||||||
mints: z.array(z.string()).nonempty(),
|
|
||||||
relays: z.array(z.string()).nonempty(),
|
|
||||||
balance: z.number(),
|
|
||||||
});
|
|
||||||
|
|
||||||
const app = new Hono<AppEnv>().use(
|
const app = new Hono<AppEnv>().use(
|
||||||
async (c, next) => {
|
async (c, next) => {
|
||||||
c.set('signer', signer);
|
c.set('signer', signer);
|
||||||
|
|
@ -68,7 +61,7 @@ Deno.test('PUT /wallet must be successful', {
|
||||||
assertExists(wallet);
|
assertExists(wallet);
|
||||||
assertEquals(wallet.kind, 17375);
|
assertEquals(wallet.kind, 17375);
|
||||||
|
|
||||||
const { data, success } = expectedResponseSchema.safeParse(await response.json());
|
const { data, success } = walletSchema.safeParse(await response.json());
|
||||||
|
|
||||||
assertEquals(success, true);
|
assertEquals(success, true);
|
||||||
if (!data) return; // get rid of typescript error possibly undefined
|
if (!data) return; // get rid of typescript error possibly undefined
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,9 @@ import { errorJson } from '@/utils/log.ts';
|
||||||
import { signerMiddleware } from '@/middleware/signerMiddleware.ts';
|
import { signerMiddleware } from '@/middleware/signerMiddleware.ts';
|
||||||
import { requireNip44Signer } from '@/middleware/requireSigner.ts';
|
import { requireNip44Signer } from '@/middleware/requireSigner.ts';
|
||||||
import { storeMiddleware } from '@/middleware/storeMiddleware.ts';
|
import { storeMiddleware } from '@/middleware/storeMiddleware.ts';
|
||||||
|
import { walletSchema } from '@/schema.ts';
|
||||||
|
|
||||||
|
type Wallet = z.infer<typeof walletSchema>;
|
||||||
|
|
||||||
const app = new Hono().use('*', storeMiddleware, signerMiddleware);
|
const app = new Hono().use('*', storeMiddleware, signerMiddleware);
|
||||||
|
|
||||||
|
|
@ -34,13 +37,6 @@ const app = new Hono().use('*', storeMiddleware, signerMiddleware);
|
||||||
/* PUT /api/v1/ditto/cashu/wallet -> Wallet */
|
/* PUT /api/v1/ditto/cashu/wallet -> Wallet */
|
||||||
/* DELETE /api/v1/ditto/cashu/wallet -> 204 */
|
/* DELETE /api/v1/ditto/cashu/wallet -> 204 */
|
||||||
|
|
||||||
export interface Wallet {
|
|
||||||
pubkey_p2pk: string;
|
|
||||||
mints: string[];
|
|
||||||
relays: string[];
|
|
||||||
balance: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Nutzap {
|
interface Nutzap {
|
||||||
amount: number;
|
amount: number;
|
||||||
event_id?: string;
|
event_id?: string;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import ISO6391, { LanguageCode } from 'iso-639-1';
|
import ISO6391, { LanguageCode } from 'iso-639-1';
|
||||||
|
import { NSchema as n } from '@nostrify/nostrify';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
/** Validates individual items in an array, dropping any that aren't valid. */
|
/** Validates individual items in an array, dropping any that aren't valid. */
|
||||||
|
|
@ -80,6 +81,18 @@ const sizesSchema = z.string().refine((value) =>
|
||||||
value.split(' ').every((v) => /^[1-9]\d{0,3}[xX][1-9]\d{0,3}$/.test(v))
|
value.split(' ').every((v) => /^[1-9]\d{0,3}[xX][1-9]\d{0,3}$/.test(v))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/** Ditto Cashu wallet */
|
||||||
|
const walletSchema = z.object({
|
||||||
|
pubkey_p2pk: n.id(),
|
||||||
|
mints: z.array(z.string().url()).nonempty().transform((val) => {
|
||||||
|
return [...new Set(val)];
|
||||||
|
}),
|
||||||
|
relays: z.array(z.string()).nonempty().transform((val) => {
|
||||||
|
return [...new Set(val)];
|
||||||
|
}),
|
||||||
|
balance: z.number(),
|
||||||
|
});
|
||||||
|
|
||||||
export {
|
export {
|
||||||
booleanParamSchema,
|
booleanParamSchema,
|
||||||
decode64Schema,
|
decode64Schema,
|
||||||
|
|
@ -91,5 +104,6 @@ export {
|
||||||
percentageSchema,
|
percentageSchema,
|
||||||
safeUrlSchema,
|
safeUrlSchema,
|
||||||
sizesSchema,
|
sizesSchema,
|
||||||
|
walletSchema,
|
||||||
wsUrlSchema,
|
wsUrlSchema,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue