From cd66234af7769b27d071bfa5903111f3d91974c8 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 22 Sep 2024 17:35:04 -0500 Subject: [PATCH] Ugrade to Deno 2.0 --- .gitlab-ci.yml | 2 +- scripts/db-export.ts | 2 +- src/pipeline.test.ts | 125 ----------------------------------- src/storages/EventsDB.ts | 16 ++--- src/workers/policy.ts | 2 +- src/workers/policy.worker.ts | 2 +- 6 files changed, 12 insertions(+), 137 deletions(-) delete mode 100644 src/pipeline.test.ts diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 48c5b253..d25f61ba 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: denoland/deno:1.46.3 +image: denoland/deno:2.0.0-rc.4 default: interruptible: true diff --git a/scripts/db-export.ts b/scripts/db-export.ts index 71939105..780a5ebc 100644 --- a/scripts/db-export.ts +++ b/scripts/db-export.ts @@ -102,7 +102,7 @@ async function exportEvents(args: ExportFilter) { let filter: NostrFilter = {}; try { filter = buildFilter(args); - } catch (e) { + } catch (e: any) { die(1, e.message || e.toString()); } diff --git a/src/pipeline.test.ts b/src/pipeline.test.ts deleted file mode 100644 index 76b1fe51..00000000 --- a/src/pipeline.test.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { assertEquals } from '@std/assert'; -import { generateSecretKey } from 'nostr-tools'; - -import { createTestDB, genEvent } from '@/test.ts'; -import { handleZaps } from '@/pipeline.ts'; - -Deno.test('store one zap receipt in nostr_events; convert it into event_zaps table format and store it', async () => { - await using db = await createTestDB(); - const kysely = db.kysely; - - const sk = generateSecretKey(); - - const event = genEvent({ - 'id': '67b48a14fb66c60c8f9070bdeb37afdfcc3d08ad01989460448e4081eddda446', - 'pubkey': '9630f464cca6a5147aa8a35f0bcdd3ce485324e732fd39e09233b1d848238f31', - 'created_at': 1674164545, - 'kind': 9735, - 'tags': [ - ['p', '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245'], - ['P', '97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322'], - ['e', '3624762a1274dd9636e0c552b53086d70bc88c165bc4dc0f9e836a1eaf86c3b8'], - [ - 'bolt11', - 'lnbc10u1p3unwfusp5t9r3yymhpfqculx78u027lxspgxcr2n2987mx2j55nnfs95nxnzqpp5jmrh92pfld78spqs78v9euf2385t83uvpwk9ldrlvf6ch7tpascqhp5zvkrmemgth3tufcvflmzjzfvjt023nazlhljz2n9hattj4f8jq8qxqyjw5qcqpjrzjqtc4fc44feggv7065fqe5m4ytjarg3repr5j9el35xhmtfexc42yczarjuqqfzqqqqqqqqlgqqqqqqgq9q9qxpqysgq079nkq507a5tw7xgttmj4u990j7wfggtrasah5gd4ywfr2pjcn29383tphp4t48gquelz9z78p4cq7ml3nrrphw5w6eckhjwmhezhnqpy6gyf0', - ], - [ - 'description', - '{"pubkey":"97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322","content":"","id":"d9cc14d50fcb8c27539aacf776882942c1a11ea4472f8cdec1dea82fab66279d","created_at":1674164539,"sig":"77127f636577e9029276be060332ea565deaf89ff215a494ccff16ae3f757065e2bc59b2e8c113dd407917a010b3abd36c8d7ad84c0e3ab7dab3a0b0caa9835d","kind":9734,"tags":[["e","3624762a1274dd9636e0c552b53086d70bc88c165bc4dc0f9e836a1eaf86c3b8"],["p","32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"],["relays","wss://relay.damus.io","wss://nostr-relay.wlvs.space","wss://nostr.fmt.wiz.biz","wss://relay.nostr.bg","wss://nostr.oxtr.dev","wss://nostr.v0l.io","wss://brb.io","wss://nostr.bitcoiner.social","ws://monad.jb55.com:8080","wss://relay.snort.social"]]}', - ], - ['preimage', '5d006d2cf1e73c7148e7519a4c68adc81642ce0e25a432b2434c99f97344c15f'], - ], - 'content': '', - }, sk); - - await db.store.event(event); - - await handleZaps(kysely, event); - await handleZaps(kysely, event); - - const zapReceipts = await db.store.query([{}]); - const customEventZaps = await kysely.selectFrom('event_zaps').selectAll().execute(); - - assertEquals(zapReceipts.length, 1); // basic check - assertEquals(customEventZaps.length, 1); // basic check - - const expected = { - receipt_id: event.id, - target_event_id: '3624762a1274dd9636e0c552b53086d70bc88c165bc4dc0f9e836a1eaf86c3b8', - sender_pubkey: '97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322', - amount_millisats: 1000000, - comment: '', - }; - - assertEquals(customEventZaps[0], expected); -}); - -// The function tests below only handle the edge cases and don't assert anything -// If no error happens = ok - -Deno.test('zap receipt does not have a "description" tag', async () => { - await using db = await createTestDB(); - const kysely = db.kysely; - - const sk = generateSecretKey(); - - const event = genEvent({ kind: 9735 }, sk); - - await handleZaps(kysely, event); - - // no error happened = ok -}); - -Deno.test('zap receipt does not have a zap request stringified value in the "description" tag', async () => { - await using db = await createTestDB(); - const kysely = db.kysely; - - const sk = generateSecretKey(); - - const event = genEvent({ kind: 9735, tags: [['description', 'yolo']] }, sk); - - await handleZaps(kysely, event); - - // no error happened = ok -}); - -Deno.test('zap receipt does not have a "bolt11" tag', async () => { - await using db = await createTestDB(); - const kysely = db.kysely; - - const sk = generateSecretKey(); - - const event = genEvent({ - kind: 9735, - tags: [[ - 'description', - '{"pubkey":"97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322","content":"","id":"d9cc14d50fcb8c27539aacf776882942c1a11ea4472f8cdec1dea82fab66279d","created_at":1674164539,"sig":"77127f636577e9029276be060332ea565deaf89ff215a494ccff16ae3f757065e2bc59b2e8c113dd407917a010b3abd36c8d7ad84c0e3ab7dab3a0b0caa9835d","kind":9734,"tags":[["e","3624762a1274dd9636e0c552b53086d70bc88c165bc4dc0f9e836a1eaf86c3b8"],["p","32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"],["relays","wss://relay.damus.io","wss://nostr-relay.wlvs.space","wss://nostr.fmt.wiz.biz","wss://relay.nostr.bg","wss://nostr.oxtr.dev","wss://nostr.v0l.io","wss://brb.io","wss://nostr.bitcoiner.social","ws://monad.jb55.com:8080","wss://relay.snort.social"]]}', - ]], - }, sk); - - await handleZaps(kysely, event); - - // no error happened = ok -}); - -Deno.test('zap request inside zap receipt does not have an "e" tag', async () => { - await using db = await createTestDB(); - const kysely = db.kysely; - - const sk = generateSecretKey(); - - const event = genEvent({ - kind: 9735, - tags: [[ - 'bolt11', - 'lnbc10u1p3unwfusp5t9r3yymhpfqculx78u027lxspgxcr2n2987mx2j55nnfs95nxnzqpp5jmrh92pfld78spqs78v9euf2385t83uvpwk9ldrlvf6ch7tpascqhp5zvkrmemgth3tufcvflmzjzfvjt023nazlhljz2n9hattj4f8jq8qxqyjw5qcqpjrzjqtc4fc44feggv7065fqe5m4ytjarg3repr5j9el35xhmtfexc42yczarjuqqfzqqqqqqqqlgqqqqqqgq9q9qxpqysgq079nkq507a5tw7xgttmj4u990j7wfggtrasah5gd4ywfr2pjcn29383tphp4t48gquelz9z78p4cq7ml3nrrphw5w6eckhjwmhezhnqpy6gyf0', - ], [ - 'description', - '{"pubkey":"97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322","content":"","id":"d9cc14d50fcb8c27539aacf776882942c1a11ea4472f8cdec1dea82fab66279d","created_at":1674164539,"sig":"77127f636577e9029276be060332ea565deaf89ff215a494ccff16ae3f757065e2bc59b2e8c113dd407917a010b3abd36c8d7ad84c0e3ab7dab3a0b0caa9835d","kind":9734,"tags":[["p","32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"],["relays","wss://relay.damus.io","wss://nostr-relay.wlvs.space","wss://nostr.fmt.wiz.biz","wss://relay.nostr.bg","wss://nostr.oxtr.dev","wss://nostr.v0l.io","wss://brb.io","wss://nostr.bitcoiner.social","ws://monad.jb55.com:8080","wss://relay.snort.social"]]}', - ]], - }, sk); - - await handleZaps(kysely, event); - - // no error happened = ok -}); diff --git a/src/storages/EventsDB.ts b/src/storages/EventsDB.ts index 7d61c2de..1bf3cd86 100644 --- a/src/storages/EventsDB.ts +++ b/src/storages/EventsDB.ts @@ -59,7 +59,7 @@ class EventsDB extends NPostgres { } /** Insert an event (and its tags) into the database. */ - async event(event: NostrEvent, opts: { signal?: AbortSignal; timeout?: number } = {}): Promise { + override async event(event: NostrEvent, opts: { signal?: AbortSignal; timeout?: number } = {}): Promise { event = purifyEvent(event); this.console.debug('EVENT', JSON.stringify(event)); dbEventsCounter.inc({ kind: event.kind }); @@ -72,7 +72,7 @@ class EventsDB extends NPostgres { try { await super.event(event, { ...opts, timeout: opts.timeout ?? this.opts.timeout }); - } catch (e) { + } catch (e: any) { if (e.message === 'Cannot add a deleted event') { throw new RelayError('blocked', 'event deleted by user'); } else if (e.message === 'Cannot replace an event with an older event') { @@ -144,7 +144,7 @@ class EventsDB extends NPostgres { } } - protected getFilterQuery(trx: Kysely, filter: NostrFilter) { + protected override getFilterQuery(trx: Kysely, filter: NostrFilter) { if (filter.search) { const tokens = NIP50.parseInput(filter.search); @@ -172,7 +172,7 @@ class EventsDB extends NPostgres { } /** Get events for filters from the database. */ - async query( + override async query( filters: NostrFilter[], opts: { signal?: AbortSignal; timeout?: number; limit?: number } = {}, ): Promise { @@ -200,13 +200,13 @@ class EventsDB extends NPostgres { } /** Delete events based on filters from the database. */ - async remove(filters: NostrFilter[], opts: { signal?: AbortSignal; timeout?: number } = {}): Promise { + override async remove(filters: NostrFilter[], opts: { signal?: AbortSignal; timeout?: number } = {}): Promise { this.console.debug('DELETE', JSON.stringify(filters)); return super.remove(filters, { ...opts, timeout: opts.timeout ?? this.opts.timeout }); } /** Get number of events that would be returned by filters. */ - async count( + override async count( filters: NostrFilter[], opts: { signal?: AbortSignal; timeout?: number } = {}, ): Promise<{ count: number; approximate: any }> { @@ -218,7 +218,7 @@ class EventsDB extends NPostgres { } /** Return only the tags that should be indexed. */ - static indexTags(event: NostrEvent): string[][] { + static override indexTags(event: NostrEvent): string[][] { const tagCounts: Record = {}; function getCount(name: string) { @@ -325,7 +325,7 @@ class EventsDB extends NPostgres { return filters; } - async transaction(callback: (store: NPostgres, kysely: Kysely) => Promise): Promise { + override async transaction(callback: (store: NPostgres, kysely: Kysely) => Promise): Promise { return super.transaction((store, kysely) => callback(store, kysely as unknown as Kysely)); } } diff --git a/src/workers/policy.ts b/src/workers/policy.ts index f86f9d9b..7bf3f7bf 100644 --- a/src/workers/policy.ts +++ b/src/workers/policy.ts @@ -31,7 +31,7 @@ try { adminPubkey: Conf.pubkey, }); console.debug(`Using custom policy: ${Conf.policy}`); -} catch (e) { +} catch (e: any) { if (e.message.includes('Module not found')) { console.debug('Custom policy not found '); } else { diff --git a/src/workers/policy.worker.ts b/src/workers/policy.worker.ts index 1d65f405..c7a16e30 100644 --- a/src/workers/policy.worker.ts +++ b/src/workers/policy.worker.ts @@ -45,7 +45,7 @@ export class CustomPolicy implements NPolicy { try { const Policy = (await import(path)).default; this.policy = new Policy({ store }); - } catch (e) { + } catch (e: any) { if (e.message.includes('Module not found')) { this.policy = new NoOpPolicy(); }