41 lines
1021 B
TypeScript
41 lines
1021 B
TypeScript
import { z } from "zod";
|
|
import { DynaBridgeEntity } from 'dynabridge';
|
|
|
|
export const LOCK_STATUS_SK = "lock";
|
|
|
|
export const LockStatusSchema = z.object({
|
|
// keys
|
|
PK: z.string(), // door name
|
|
SK: z.literal(LOCK_STATUS_SK).default(LOCK_STATUS_SK),
|
|
|
|
TTL: z.number(),
|
|
fingerprint: z.string(),
|
|
});
|
|
|
|
export const getLockStatusID = (door: string): string[] => {
|
|
return [door, LOCK_STATUS_SK];
|
|
}
|
|
|
|
export type LockStatus = z.infer<typeof LockStatusSchema>;
|
|
|
|
export const LockStatusEntity: DynaBridgeEntity<LockStatus> = {
|
|
tableName: "doorman",
|
|
id: ["PK", "SK"],
|
|
};
|
|
|
|
export const isLockOpen = (lock?: LockStatus) => {
|
|
// ttl is a UTC ms time for how long it is unlocked
|
|
const ttl = lock?.TTL || 0;
|
|
|
|
return parseInt("" + ttl) > Date.now();
|
|
};
|
|
|
|
export const createLockStatusWithTimeout = (door: string, timeoutSeconds: number, fingerprint: any): LockStatus => {
|
|
return {
|
|
PK: door,
|
|
SK: LOCK_STATUS_SK,
|
|
TTL: Date.now() + timeoutSeconds * 1000,
|
|
fingerprint: JSON.stringify(fingerprint),
|
|
};
|
|
};
|