diff --git a/deno.json b/deno.json index b806a74..d3e5acd 100644 --- a/deno.json +++ b/deno.json @@ -9,7 +9,8 @@ "check": "deno check src/server.ts", "relays:sync": "deno run -A scripts/relays.ts sync", "nsec": "deno run scripts/nsec.ts", - "admin:event": "deno run -A scripts/admin-event.ts" + "admin:event": "deno run -A scripts/admin-event.ts", + "admin:role": "deno run -A scripts/admin-role.ts" }, "unstable": ["ffi", "kv"], "exclude": ["./public"], diff --git a/scripts/admin-role.ts b/scripts/admin-role.ts new file mode 100644 index 0000000..4fa212e --- /dev/null +++ b/scripts/admin-role.ts @@ -0,0 +1,37 @@ +import { NSchema } from '@nostrify/nostrify'; + +import { db } from '@/db.ts'; +import { Conf } from '@/config.ts'; +import { AdminSigner } from '@/signers/AdminSigner.ts'; +import { EventsDB } from '@/storages/events-db.ts'; +import { nostrNow } from '@/utils.ts'; + +const eventsDB = new EventsDB(db); + +const [pubkey, role] = Deno.args; + +if (!NSchema.id().safeParse(pubkey).success) { + console.error('Invalid pubkey'); + Deno.exit(1); +} + +if (!['admin', 'user'].includes(role)) { + console.error('Invalid role'); + Deno.exit(1); +} + +const event = await new AdminSigner().signEvent({ + kind: 30361, + tags: [ + ['d', pubkey], + ['role', role], + // NIP-31: https://github.com/nostr-protocol/nips/blob/master/31.md + ['alt', `User's account was updated by the admins of ${Conf.url.host}`], + ], + content: '', + created_at: nostrNow(), +}); + +await eventsDB.event(event); + +Deno.exit(0);