index.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: "https://lenderfriend-fed55.firebaseio.com",
});

const accessCode = require('./method');

/**
 * Create a new one-time invite code
 *
 * @function
 *
 * @requires module:method/create
 *
 * @param  {object} data - Wrapper object for data
 * @param  {string} data.uid - Referrer’s Firebase User ID, e.g. hk_wx5555556.
 *
 * @return {object} Data object of Generated one-time invite code.
 * Including inviteCode, description, expiration, and quota
 *
 * @example
 * createInviteCode({
 *   uid: "hk_wx5555556",
 * });
 */
exports.createInviteCode = functions.region('asia-east2').https
    .onCall(({uid}) => {
      return accessCode.create(uid);
    });

/**
 * Consume an invite code
 *
 * @function
 *
 * @requires module:method/use
 *
 * @param  {object} data - Wrapper object for data
 * @param  {string} data.uid - Referee’s Firebase User ID, e.g. hk_wx5555556.
 * @param  {string} data.inviteCode - The invite code
 *
 * @return {boolean} Return true if invite code has been consumed successfully.
 *
 * @example
 * useInviteCode({
 *   uid: "hk_wx5555556",
 *   inviteCode: "ENRICH",
 * });
 */
exports.useInviteCode = functions.region('asia-east2').https
    .onCall(({uid, inviteCode}) => {
      return accessCode.use(uid, inviteCode);
    });

/**
 * Purge all invite codes that are past their expiration for a month.
 * Runs daily at 12 midnight Hong Kong time.
 *
 * @requires module:method/purge
 *
 * @return {null} Always returns null
 */
exports.purgeInviteCode = functions.region('asia-east2').pubsub
  .schedule('every day 00:00')
  .timeZone('Asia/Hong_Kong')
  .onRun(accessCode.purge);