fork
Configure Feed
Select the types of activity you want to include in your feed.
Live video on the AT Protocol
fork
Configure Feed
Select the types of activity you want to include in your feed.
1import admin from "firebase-admin";
2import fs from "fs";
3
4const serviceAccount = JSON.parse(
5 fs.readFileSync(`${process.env.AQKEYS}/firebase-admin.json`, "utf8"),
6);
7
8admin.initializeApp({
9 credential: admin.credential.cert(serviceAccount),
10});
11
12// const tokens = JSON.parse(process.argv.slice(2))
13// console.log(tokens)
14// process.exit(0)
15
16// curl -H "Authorization: Bearer $SP_ADMIN" https://stream.place/api/notification
17
18const delay = (ms) => new Promise((r) => setTimeout(r, ms));
19const blast = async (body) => {
20 const tokensRes = await fetch("https://stream.place/api/notification", {
21 headers: {
22 Authorization: `Bearer ${process.env.SP_ADMIN}`,
23 },
24 });
25 const fullTokens = await tokensRes.json();
26 const tokens = fullTokens.map((t) => t.Token);
27 const notification = {
28 tokens: tokens,
29 notification: {
30 title: "🔴 @iame.li is LIVE!",
31 body: body,
32 // imageUrl: "https://my-cdn.com/app-logo.png",
33 },
34 apns: {
35 headers: {
36 "apns-priority": "10",
37 },
38 payload: {
39 aps: {
40 sound: "default",
41 },
42 },
43 },
44 android: {
45 priority: "high",
46 notification: {
47 sound: "default",
48 },
49 },
50 priority: "high",
51 };
52 console.log(JSON.stringify(notification.notification, null, 2));
53 // console.log("launching in 5 sec")
54 // await delay(5000)
55 const res = await admin.messaging().sendEachForMulticast(notification);
56 console.log(JSON.stringify(res));
57};
58export default blast;
59
60import { resolve } from "path";
61import { fileURLToPath } from "url";
62
63const pathToThisFile = resolve(fileURLToPath(import.meta.url));
64const pathPassedToNode = resolve(process.argv[1]);
65const isThisFileBeingRunViaCLI = pathToThisFile.includes(pathPassedToNode);
66if (isThisFileBeingRunViaCLI) {
67 blast(process.argv[2]);
68}