2import { hasValTownStyleGuideUpdated } from "https://esm.town/v/stevekrouse/hasValTownStyleGuideUpdated";
3
4export async function valTownStyleGuideUpdated({ lastRunAt }) {
5 if (await hasValTownStyleGuideUpdated(lastRunAt))
6 email({
1export function githubNormalizedJsonString(payload: object) {
2 // GitHub sends its JSON with an indentation of 2 spaces and a line break at the end
3 const payloadString = JSON.stringify(payload, null, 2) + "\n";
1// Times how long an execution takes
2// usage: @stevekrouse.panphoraDistanceTimed
3export async function timed(f) {
4 const start = Date.now();
5 const res = await f();
26 }
27 console.log(
28 `average e2e user function time: ${
29 (userFuncTimes.reduce((a, b) => a + b, 0) / count).toFixed(0)
30 }ms (fastest was ${
1export function add(...args) {
2 return args.reduce((a, b) => a + b, 0);
3}
3import { verifyAPIAuth } from "https://esm.town/v/stevekrouse/verifyAPIAuth";
4
5export async function dm(message, auth) {
6 let { handle, error } = await verifyAPIAuth(auth);
7 if (!handle)
1import { fetchJSON } from "https://esm.town/v/stevekrouse/fetchJSON";
2
3export function weatherGovGrid({ lat, lon }): Promise<WeatherData> {
4 return fetchJSON(
5 `https://api.weather.gov/points/${lat},${lon}`,
3import { whoami } from "https://esm.town/v/stevekrouse/whoami";
4
5export async function r2(key, value?, keys?) {
6 // GET
7 if (value === undefined) {
2import { fetchJSON } from "https://esm.town/v/stevekrouse/fetchJSON";
3
4export async function runAllTests2({ names }: { names: string[] }) {
5 return names.map((name) =>
6 fetchJSON(`${TEST_API}/eval/@stevekrouse.${name}()`)
1import { fetchJSON } from "https://esm.town/v/stevekrouse/fetchJSON";
2
3export function discordMessages({ botToken, channelId }) {
4 return fetchJSON(
5 `https://discord.com/api/channels/${channelId}/messages`,