Readme

DM Me!

Ever wanted to message someone about their val but you couldn't find their contact info?

Want to allow folks on Val Town to contact you without exposing your email address?

Boy do I have the over-engineered solution for you!

This is a userspace, authenticated protocol for Val Town direct messages.

Protocol

Expose a dm function on your namespace that that accepts messages and some authentication data (described below). The easiest way to accomplish this is to fork this val.

What you choose to do with direct messages is totally up to you. At the moment, I email myself your message and save it to a private array val. You could forward it along to yourself some other way, batch up messages to get a daily summary email if you're Mr. Popular, or send them to /dev/null if you're Mr. Antisocial.

Authentication

This protocol uses my Val Town public key auth scheme, so you'll need to follow the first two steps of that blog post – (1) generate a keypair and (2) publish your public key – to authenticate to this function.

Usage

You can call this function via the @stevekrouse.runValAPIAuth helper:

@stevekrouse.runValAPIAuth({ val: "@stevekrouse.dm", args: ["hi steve!"], keys: @me.exportedKeys, });

Example: https://www.val.town/v/stevekrouseTest.untitled_tealMinnow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { email } from "https://esm.town/v/std/email?v=9";
import { dms } from "https://esm.town/v/stevekrouse/dms";
import { verifyAPIAuth } from "https://esm.town/v/stevekrouse/verifyAPIAuth";
export async function dm(message, auth) {
let { handle, error } = await verifyAPIAuth(auth);
if (!handle)
return error;
dms.push({ handle, message });
await email({
text: message,
subject: `New message from @${handle}`,
});
return "Thanks for your message :)";
}
Val Town is a social website to write and deploy JavaScript.
Build APIs and schedule functions from your browser.
Comments
Nobody has commented on this val yet: be the first!
October 23, 2023