From 6cc92a3ffbccf3bc4e745a985dffc15536a13f4b Mon Sep 17 00:00:00 2001 From: Martin Dimitrov Date: Fri, 24 Oct 2025 17:43:27 -0700 Subject: [PATCH] remove separate info response --- .../src/functions/api/door/info.ts | 40 ++++++------------- .../doorman-api/tst/integ-staging.test.ts | 12 +++--- .../src/functions/buzzer-activated.ts | 4 +- .../doorman-client/src/utils/DoormanUtils.ts | 8 ++-- .../doorman-client/src/utils/TwimlUtils.ts | 7 ++-- 5 files changed, 27 insertions(+), 44 deletions(-) diff --git a/packages/doorman-api/src/functions/api/door/info.ts b/packages/doorman-api/src/functions/api/door/info.ts index f17e7d5..182a364 100644 --- a/packages/doorman-api/src/functions/api/door/info.ts +++ b/packages/doorman-api/src/functions/api/door/info.ts @@ -26,15 +26,11 @@ export const InfoRequestSchema = z.object({ export type InfoRequest = z.infer; export type InfoRequestTwilio = ServerlessEventObject & BaseEvent; -export const InfoResponseClientSchema = DoorConfigSchema +export const InfoResponseSchema = DoorConfigSchema .omit({ PK: true, SK: true, pin: true }) - .extend({ door: z.string() }); + .extend({ door: z.string(), status: z.nativeEnum(DoorStatus), id: z.string() }); -export type InfoResponseClient = z.infer; - -export const InfoResponseUISchema = InfoResponseClientSchema.extend({ id: z.string(), status: z.nativeEnum(DoorStatus) }); - -export type InfoResponseUI = z.infer; +export type InfoResponse = z.infer; export const handler: ServerlessFunctionSignature = withMetrics("info", async (context, event, callback, metricsRegistry) => { const response = new Twilio.Response(); @@ -66,29 +62,17 @@ export const handler: ServerlessFunctionSignature { expect(buzzerActivatedResp).not.toContain("fail fast callback"); // door should now be closed - const infoResp = await fetch(baseUrl + `/api/door/info?door=${doorName}`).then(res => res.json()) as InfoResponseUI; + const infoResp = await fetch(baseUrl + `/api/door/info?door=${doorName}`).then(res => res.json()) as InfoResponse; expect(infoResp.status).toBe(DoorStatus.CLOSED); }); }); @@ -48,7 +48,7 @@ describe("onboardingflag door should exist", () => { const authResp = await fetch(baseUrl + `/api/door/info?door=${ONBOARDING_DOOR_NAME}`); expect(authResp.status).toBe(200); - const door = (await authResp.json()) as InfoResponseUI; + const door = (await authResp.json()) as InfoResponse; expect(door.timeout).toBe(15 * 60); // this may be flaky, it would fail when a user is onboarding and we are deploying @@ -59,11 +59,11 @@ describe("onboardingflag door should exist", () => { let authResp = await fetch(baseUrl + `/api/door/auth?door=${ONBOARDING_DOOR_NAME}&key=${ONBOARDING_DOOR_PIN}`); expect(authResp.status).toBe(200); - let statusResp = await fetch(baseUrl + `/api/door/info?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as InfoResponseUI; + let statusResp = await fetch(baseUrl + `/api/door/info?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as InfoResponse; expect(statusResp.status).toBe(DoorStatus.OPEN); // open again - statusResp = await fetch(baseUrl + `/api/door/info?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as InfoResponseUI; + statusResp = await fetch(baseUrl + `/api/door/info?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as InfoResponse; expect(statusResp.status).toBe(DoorStatus.OPEN); // close it @@ -71,7 +71,7 @@ describe("onboardingflag door should exist", () => { expect(authResp.status).toBe(200); // door should now be closed - const infoResp = await fetch(baseUrl + `/api/door/info?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as InfoResponseUI; + const infoResp = await fetch(baseUrl + `/api/door/info?door=${ONBOARDING_DOOR_NAME}`).then(res => res.json()) as InfoResponse; expect(infoResp.status).toBe(DoorStatus.CLOSED); }) }); diff --git a/packages/doorman-client/src/functions/buzzer-activated.ts b/packages/doorman-client/src/functions/buzzer-activated.ts index d353b8c..a380e04 100644 --- a/packages/doorman-client/src/functions/buzzer-activated.ts +++ b/packages/doorman-client/src/functions/buzzer-activated.ts @@ -14,7 +14,7 @@ import { TwilioContext } from '../types/TwilioContext'; import VoiceResponse from 'twilio/lib/twiml/VoiceResponse'; import { DoorStatus } from '../../../doorman-api/src/types/DoorStatus'; import { StatusResponse } from '../../../doorman-api/src/functions/api/door/status'; -import { InfoResponseClient } from '../../../doorman-api/src/functions/api/door/info'; +import { InfoResponse } from '../../../doorman-api/src/functions/api/door/info'; import { getMetricFromRegistry, withMetrics } from '../../../doorman-api/src/common/DoormanHandler'; import { Counter, Summary } from 'prom-client'; import { BuzzerActivatedMetrics, registerMetrics } from '../metrics/BuzzerActivatedMetrics'; @@ -27,7 +27,7 @@ export const handler: ServerlessFunctionSignature { +export async function getConfig(context: TwilioContext, buzzer: string): Promise { return await fetch(context.DOORMAN_URL + `/api/door/info?buzzer=${buzzer}`) .then(res => res.json()) .catch(err => { return undefined; - }) as InfoResponseClient; + }) as InfoResponse; } export async function tryLogCallerForOnboarding(context: TwilioContext, caller: string): Promise { @@ -31,6 +31,6 @@ export async function notifyDiscord(context: TwilioContext, msg: string[], u: st return res; } -export async function notifyAllDiscord(context: TwilioContext, config: InfoResponseClient, msg: string, metricsRegistry: Registry, optionalJsonStr: string = "") { +export async function notifyAllDiscord(context: TwilioContext, config: InfoResponse, msg: string, metricsRegistry: Registry, optionalJsonStr: string = "") { return notifyDiscord(context, config.discordUsers.map(() => msg), config.discordUsers, config.discordUsers.map(() => optionalJsonStr), metricsRegistry); } \ No newline at end of file diff --git a/packages/doorman-client/src/utils/TwimlUtils.ts b/packages/doorman-client/src/utils/TwimlUtils.ts index dfaf54c..e34022b 100644 --- a/packages/doorman-client/src/utils/TwimlUtils.ts +++ b/packages/doorman-client/src/utils/TwimlUtils.ts @@ -1,7 +1,7 @@ import VoiceResponse from 'twilio/lib/twiml/VoiceResponse'; -import { InfoResponseClient } from '../../../doorman-api/src/functions/api/door/info'; +import { InfoResponse } from '../../../doorman-api/src/functions/api/door/info'; -export function doorOpenTwiml(config: InfoResponseClient): VoiceResponse { +export function doorOpenTwiml(config: InfoResponse): VoiceResponse { const twiml = new Twilio.twiml.VoiceResponse(); // play audio @@ -20,7 +20,7 @@ export function doorOpenTwiml(config: InfoResponseClient): VoiceResponse { return twiml; } -export function dialFallbackTwiml(config: InfoResponseClient): VoiceResponse { +export function dialFallbackTwiml(config: InfoResponse): VoiceResponse { const twiml = new Twilio.twiml.VoiceResponse(); let dial = twiml.dial({ @@ -67,4 +67,3 @@ export function doorOnboardTwiml(otp: string): VoiceResponse { // @ts-ignore return twiml; } -