setting up workspaces structure, but not moving files
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import * as functions from "firebase-functions";
|
||||
|
||||
export const agoraToken = functions.https.onCall((data, context) => {
|
||||
console.log(data);
|
||||
|
||||
console.log("user's id: " + context.auth?.uid);
|
||||
const channelName: string = data.channelName;
|
||||
|
||||
let token = getAgoraToken(channelName);
|
||||
|
||||
return { token };
|
||||
});
|
||||
|
||||
import { RtcTokenBuilder, RtcRole } from "agora-access-token";
|
||||
|
||||
function getAgoraToken(channelName: string) {
|
||||
// Rtc Examples
|
||||
const appID = "c8dfd65deb5c4741bd564085627139d0";
|
||||
const appCertificate = "aa57b809934b4efcb407cf30089d9f25";
|
||||
const uid = 0; // no need to use this as we have authenticated this user
|
||||
const role = RtcRole.PUBLISHER;
|
||||
|
||||
const expirationTimeInSeconds = 3600;
|
||||
|
||||
const currentTimestamp = Math.floor(Date.now() / 1000);
|
||||
|
||||
const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds;
|
||||
|
||||
// IMPORTANT! Build token with either the uid or with the user account. Comment out the option you do not want to use below.
|
||||
|
||||
// Build token with uid
|
||||
const tokenA = RtcTokenBuilder.buildTokenWithUid(
|
||||
appID,
|
||||
appCertificate,
|
||||
channelName,
|
||||
uid,
|
||||
role,
|
||||
privilegeExpiredTs
|
||||
);
|
||||
console.log("Token With Integer Number Uid: " + tokenA);
|
||||
|
||||
return tokenA;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import * as functions from "firebase-functions";
|
||||
import * as admin from "firebase-admin";
|
||||
|
||||
admin.initializeApp();
|
||||
|
||||
// // Start writing Firebase Functions
|
||||
// // https://firebase.google.com/docs/functions/typescript
|
||||
//
|
||||
export const helloWorld = functions.https.onRequest((request, response) => {
|
||||
functions.logger.info("Hello no!", { structuredData: true });
|
||||
response.send("Hello from woahhhhhh!");
|
||||
})
|
||||
|
||||
import { agoraToken } from "./agora";
|
||||
exports.agoraToken = agoraToken;
|
||||
|
||||
import { inviteUserToTeam } from "./notifications";
|
||||
exports.inviteUserToTeam = inviteUserToTeam;
|
||||
@@ -0,0 +1,103 @@
|
||||
/* eslint-disable no-unused-vars */
|
||||
import * as functions from "firebase-functions";
|
||||
import * as admin from "firebase-admin";
|
||||
import * as sgMail from "@sendgrid/mail";
|
||||
import { MailDataRequired } from "@sendgrid/mail";
|
||||
|
||||
sgMail.setApiKey(
|
||||
"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"
|
||||
);
|
||||
|
||||
enum SendgridTemplateId {
|
||||
inviteTeamMember = "d-4953372ac7b94d3fa9419bad4073840f",
|
||||
}
|
||||
|
||||
const SENDER_EMAIL = "[email protected]"
|
||||
|
||||
// class SendGridEmailMessage {
|
||||
// to: string;
|
||||
// from: string = "[email protected]"
|
||||
// templateId: SendgridTemplateId;
|
||||
// dynamic_template_data: {};
|
||||
|
||||
// constructor(
|
||||
// _to: string,
|
||||
// _templateId: SendgridTemplateId,
|
||||
// _templateData: {}
|
||||
// ) {
|
||||
// this.to = _to;
|
||||
// this.templateId = _templateId;
|
||||
// this.dynamic_template_data = _templateData;
|
||||
// }
|
||||
// }
|
||||
|
||||
type Team = {
|
||||
id: string;
|
||||
name: string;
|
||||
|
||||
status: string;
|
||||
|
||||
allowedUserCount: number;
|
||||
|
||||
companySite: string;
|
||||
|
||||
createdByUserId: string;
|
||||
}
|
||||
|
||||
type TeamMember = {
|
||||
id: string;
|
||||
userId: string;
|
||||
teamId: string;
|
||||
|
||||
inviteEmailAddress: string;
|
||||
invitedByUserId: string;
|
||||
|
||||
role: string
|
||||
status: string
|
||||
}
|
||||
|
||||
// onCreate of team invite to a member -> email
|
||||
export const inviteUserToTeam = functions.firestore
|
||||
.document("teamMembers/{teamMemberId}")
|
||||
.onCreate(async (snap, context) => {
|
||||
const newTeamMember = snap.data() as TeamMember;
|
||||
|
||||
if (!newTeamMember || !newTeamMember.inviteEmailAddress) {
|
||||
functions.logger.error("No team member email available")
|
||||
return
|
||||
}
|
||||
|
||||
// only if invited will be sending invite
|
||||
if (newTeamMember.status == "invited") {
|
||||
functions.logger.info(
|
||||
"New team member invited...sending email" +
|
||||
newTeamMember.inviteEmailAddress,
|
||||
{ structuredData: true }
|
||||
)
|
||||
|
||||
// get team information from team id
|
||||
const snapshot = await admin.firestore().collection("teams").doc(newTeamMember.teamId).get()
|
||||
if (!snapshot.exists) {
|
||||
functions.logger.error("No team exists")
|
||||
return
|
||||
}
|
||||
const team: Team = snapshot.data() as Team;
|
||||
|
||||
// send email to invited person, based on the email address
|
||||
const message: MailDataRequired = {
|
||||
from: SENDER_EMAIL,
|
||||
to: newTeamMember.inviteEmailAddress,
|
||||
templateId: SendgridTemplateId.inviteTeamMember,
|
||||
dynamicTemplateData: {
|
||||
teamName: team.name,
|
||||
subject: "Your Team is On Nirvana - " + team.name,
|
||||
joinTeamUrl: "https://usenirvana.com/teams/login",
|
||||
landingPageUrl: "https://usenirvana.com"
|
||||
}
|
||||
}
|
||||
|
||||
return await sgMail.send(message)
|
||||
}
|
||||
|
||||
return
|
||||
})
|
||||
Reference in New Issue
Block a user