Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import z from "zod";
import { NoThrow } from "./NoThrow";
const ElevenLabsFirebaseJWTSchema = z
.object({
workspace_id: z.string(),
workspace_user_id: z.string(),
user_id: z.string(),
email: z.string(),
email_verified: z.boolean(),
})
.transform(
({
workspace_id: workspaceID,
workspace_user_id: workspaceUserID,
user_id: userID,
email_verified: emailVerified,
...rest
}) => ({
workspaceID,
workspaceUserID,
userID,
emailVerified,
...rest,
}),
);
export async function decodeElevenLabsFirebaseJWTPayload(jwt: string) {
const parts = jwt.split(".");
Iif (parts.length !== 3) {
return NoThrow.error(
new Error(
`Invalid jwt format; Expected '<header>.<payload>.<signature>', where 'header', 'payload', and 'signature' are base64 strings`,
),
);
}
const payloadBase64 = parts[1];
let payloadString: string;
try {
payloadString = atob(payloadBase64);
} catch (error) {
return NoThrow.error(new Error("Error while decoding base64", { cause: error }));
}
let payloadObject: unknown;
try {
payloadObject = JSON.parse(payloadString);
} catch (error) {
return NoThrow.error(new Error("Error while parsing (JSON) payload string", { cause: error }));
}
const payloadResult = await ElevenLabsFirebaseJWTSchema.safeParseAsync(payloadObject);
Iif (!payloadResult.success) {
return NoThrow.error(payloadResult.error);
}
return NoThrow.success(payloadResult.data);
}
|