pollo/app/routes/api.ably.tsx

55 lines
1.8 KiB
TypeScript

import { getAuth } from "@clerk/remix/ssr.server";
import { LoaderFunctionArgs, json } from "@remix-run/node";
import { AblyTokenResponse } from "~/services/types";
// Get Room List
export async function loader({ context, params, request }: LoaderFunctionArgs) {
const { userId } = await getAuth({ context, params, request });
if (!userId) {
return json("Not Signed In!", {
status: 403,
statusText: "UNAUTHORIZED!",
});
}
if (!process.env.ABLY_API_KEY) {
return new Response(
`Missing ABLY_API_KEY environment variable.
If you're running locally, please ensure you have a ./.env file with a value for ABLY_API_KEY=your-key.
If you're running in Netlify, make sure you've configured env variable ABLY_API_KEY.
Please see README.md for more details on configuring your Ably API Key.`,
{
status: 500,
statusText: `Missing ABLY_API_KEY environment variable.
If you're running locally, please ensure you have a ./.env file with a value for ABLY_API_KEY=your-key.
If you're running in Netlify, make sure you've configured env variable ABLY_API_KEY.
Please see README.md for more details on configuring your Ably API Key.`,
}
);
}
const keyName = process.env.ABLY_API_KEY!.split(":")[0];
const tokenResponse = await fetch(
`https://rest.ably.io/keys/${keyName}/requestToken`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Basic ${btoa(process.env.ABLY_API_KEY!)}`,
},
body: JSON.stringify({
keyName,
clientId: userId,
timestamp: Date.now(),
}),
}
);
const tokenResponseData = (await tokenResponse.json()) as AblyTokenResponse;
return json(tokenResponseData, {
status: 200,
statusText: "SUCCESS",
});
}