numbers.ts•1.97 kB
/**
 * Copyright (C) 2025 by Fonoster Inc (https://fonoster.com)
 * http://github.com/fonoster/fonoster
 *
 * This file is part of Fonoster
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *    https://opensource.org/licenses/MIT
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import isISO31661Alpha2 from "validator/lib/isISO31661Alpha2";
import { z } from "zod";
import { nameSchema } from "../common";
const sipUriRegex = /^sip:[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+$/;
const sipUriSchema = z.string().regex(sipUriRegex, "Invalid SIP URI");
const countryIsoCodeSchema = z.string().refine((val) => isISO31661Alpha2(val), {
  message: "Invalid country ISO code"
});
const createNumberRequestSchema = z
  .object({
    name: nameSchema,
    telUrl: z.string(),
    city: z.string(),
    country: z.string(),
    agentAor: sipUriSchema.optional(),
    appRef: z.string().optional(),
    countryIsoCode: countryIsoCodeSchema
  })
  .refine(
    ({ agentAor, appRef }) => !(agentAor !== undefined && appRef !== undefined),
    {
      message:
        "You can only provide one of the following fields: 'agentAor' or 'appRef'"
    }
  );
const updateNumberRequestSchema = z
  .object({
    name: nameSchema.optional(),
    agentAor: sipUriSchema.optional(),
    appRef: z.string().optional()
  })
  .refine(
    ({ agentAor, appRef }) => !(agentAor !== undefined && appRef !== undefined),
    {
      message:
        "You can only provide one of the following fields: 'agentAor' or 'appRef'"
    }
  );
export { createNumberRequestSchema, updateNumberRequestSchema };