diff --git a/src/features/channel/channel-form.schema.ts b/src/features/channel/channel-form.schema.ts index cffa66ae..8e445d06 100644 --- a/src/features/channel/channel-form.schema.ts +++ b/src/features/channel/channel-form.schema.ts @@ -18,7 +18,7 @@ const BaseChannelFormSchema = z.object({ name: z .string() .min(5, "Name must be at least 5 characters long") - .max(40, "Name e at most 40 characters long"), + .max(40, "Name must be at most 40 characters long"), enabled: z.boolean().default(true), }); diff --git a/src/features/channel/storages/Blob.schema.ts b/src/features/channel/storages/Blob.schema.ts index 9bd3715f..a0dcda4c 100644 --- a/src/features/channel/storages/Blob.schema.ts +++ b/src/features/channel/storages/Blob.schema.ts @@ -5,7 +5,7 @@ export const BlobChannelConfigSchema = z.object({ accountKey: z.string().optional(), connectionString: z.string().optional(), containerName: z.string().min(1, "Container name is required"), - endpointUrl: z.string().optional(), + endpointUrl: z.string().url("Endpoint URL must be a valid URL").optional(), }).refine( (data) => data.accountKey || data.connectionString, {message: "Either account key or connection string is required"} diff --git a/src/features/channel/storages/Blob.ts b/src/features/channel/storages/Blob.ts index bfec8267..0ed81ee6 100644 --- a/src/features/channel/storages/Blob.ts +++ b/src/features/channel/storages/Blob.ts @@ -128,11 +128,14 @@ export async function pingBlob(config: BlobConfig): Promise { provider: "blob", response: "Container does not exist" }; - const key = `${BASE_DIR}ping.txt`; + const key = `${BASE_DIR}ping-${Date.now()}-${Math.random().toString(36).slice(2)}.txt`; const blockBlobClient = containerClient.getBlockBlobClient(key); - await blockBlobClient.upload(Buffer.from("ping"), 4); - await blockBlobClient.download(); - await blockBlobClient.delete(); + try { + await blockBlobClient.upload(Buffer.from("ping"), 4); + await blockBlobClient.download(); + } finally { + await blockBlobClient.delete().catch(() => undefined); + } return { success: true,