- {
- userContext.features.enableContainerCopy && userContext.apiType === "SQL" ? (
-
- ) : (
-
- )
- }
+ {userContext.features.enableContainerCopy && userContext.apiType === "SQL" ? (
+
+ ) : (
+
+ )}
diff --git a/src/Utils/AuthorizationUtils.test.ts b/src/Utils/AuthorizationUtils.test.ts
index bc47c7a5f..650f2ed17 100644
--- a/src/Utils/AuthorizationUtils.test.ts
+++ b/src/Utils/AuthorizationUtils.test.ts
@@ -8,6 +8,7 @@ describe("AuthorizationUtils", () => {
const setAadDataPlane = (enabled: boolean) => {
updateUserContext({
features: {
+ enableContainerCopy: false,
enableAadDataPlane: enabled,
canExceedMaximumValue: false,
cosmosdb: false,
diff --git a/src/Utils/CopyJobAuthUtils.ts b/src/Utils/CopyJobAuthUtils.ts
index f18212741..19e8f5b18 100644
--- a/src/Utils/CopyJobAuthUtils.ts
+++ b/src/Utils/CopyJobAuthUtils.ts
@@ -1,9 +1,12 @@
import { userContext } from "UserContext";
export function getCopyJobAuthorizationHeader(token: string = ""): Headers {
- const headers = new Headers();
- const authToken = token ? `Bearer ${token}` : userContext.authorizationToken;
- headers.append("Authorization", authToken);
- headers.append("Content-Type", "application/json");
- return headers;
-}
\ No newline at end of file
+ if (!token && !userContext.authorizationToken) {
+ throw new Error("Authorization token is missing");
+ }
+ const headers = new Headers();
+ const authToken = token ? `Bearer ${token}` : userContext.authorizationToken ?? "";
+ headers.append("Authorization", authToken);
+ headers.append("Content-Type", "application/json");
+ return headers;
+}
diff --git a/src/Utils/arm/RbacUtils.ts b/src/Utils/arm/RbacUtils.ts
index 1ee14007d..aff39e389 100644
--- a/src/Utils/arm/RbacUtils.ts
+++ b/src/Utils/arm/RbacUtils.ts
@@ -3,117 +3,118 @@ import { armRequest } from "Utils/arm/request";
import { getCopyJobAuthorizationHeader } from "../CopyJobAuthUtils";
export type FetchAccountDetailsParams = {
- subscriptionId: string;
- resourceGroupName: string;
- accountName: string;
+ subscriptionId: string;
+ resourceGroupName: string;
+ accountName: string;
};
export type RoleAssignmentPropertiesType = {
- roleDefinitionId: string;
- principalId: string;
- scope: string;
+ roleDefinitionId: string;
+ principalId: string;
+ scope: string;
};
export type RoleAssignmentType = {
- id: string;
- name: string;
- properties: RoleAssignmentPropertiesType;
- type: string;
+ id: string;
+ name: string;
+ properties: RoleAssignmentPropertiesType;
+ type: string;
};
type RoleDefinitionDataActions = {
- dataActions: string[];
+ dataActions: string[];
};
export type RoleDefinitionType = {
- assignableScopes: string[];
- id: string;
- name: string;
- permissions: RoleDefinitionDataActions[];
- resourceGroup: string;
- roleName: string;
- type: string;
- typePropertiesType: string;
+ assignableScopes: string[];
+ id: string;
+ name: string;
+ permissions: RoleDefinitionDataActions[];
+ resourceGroup: string;
+ roleName: string;
+ type: string;
+ typePropertiesType: string;
};
const apiVersion = "2025-04-15";
const getArmBaseUrl = (): string => {
- const base = configContext.ARM_ENDPOINT;
- return base.endsWith("/") ? base.slice(0, -1) : base;
+ const base = configContext.ARM_ENDPOINT;
+ return base.endsWith("/") ? base.slice(0, -1) : base;
};
-const buildArmUrl = (path: string): string =>
- `${getArmBaseUrl()}${path}?api-version=${apiVersion}`;
+const buildArmUrl = (path: string): string => `${getArmBaseUrl()}${path}?api-version=${apiVersion}`;
const handleResponse = async (response: Response, context: string) => {
- if (!response.ok) {
- const body = await response.text().catch(() => "");
- throw new Error(
- `Failed to fetch ${context}. Status: ${response.status}. ${body || ""}`
- );
- }
- return response.json();
+ if (!response.ok) {
+ const body = await response.text().catch(() => "");
+ throw new Error(`Failed to fetch ${context}. Status: ${response.status}. ${body || ""}`);
+ }
+ return response.json();
};
export const fetchRoleAssignments = async (
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string,
- principalId: string
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+ principalId: string,
): Promise
=> {
- const uri = buildArmUrl(
- `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/sqlRoleAssignments`
- );
+ const uri = buildArmUrl(
+ `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/sqlRoleAssignments`,
+ );
- const response = await fetch(uri, { method: "GET", headers: getCopyJobAuthorizationHeader() });
- const data = await handleResponse(response, "role assignments");
+ const response = await fetch(uri, { method: "GET", headers: getCopyJobAuthorizationHeader() });
+ const data = await handleResponse(response, "role assignments");
- return (data.value || []).filter(
- (assignment: RoleAssignmentType) =>
- assignment?.properties?.principalId === principalId
- );
+ return (data.value || []).filter(
+ (assignment: RoleAssignmentType) => assignment?.properties?.principalId === principalId,
+ );
};
-export const fetchRoleDefinitions = async (
- roleAssignments: RoleAssignmentType[]
-): Promise => {
- const roleDefinitionIds = roleAssignments.map(assignment => assignment.properties.roleDefinitionId);
- const uniqueRoleDefinitionIds = Array.from(new Set(roleDefinitionIds));
+export const fetchRoleDefinitions = async (roleAssignments: RoleAssignmentType[]): Promise => {
+ const roleDefinitionIds = roleAssignments.map((assignment) => assignment.properties.roleDefinitionId);
+ const uniqueRoleDefinitionIds = Array.from(new Set(roleDefinitionIds));
- const headers = getCopyJobAuthorizationHeader();
- const roleDefinitionUris = uniqueRoleDefinitionIds.map((id) => buildArmUrl(id));
+ const headers = getCopyJobAuthorizationHeader();
+ const roleDefinitionUris = uniqueRoleDefinitionIds.map((id) => buildArmUrl(id));
- const promises = roleDefinitionUris.map((url) => fetch(url, { method: "GET", headers }));
- const responses = await Promise.all(promises);
+ const promises = roleDefinitionUris.map((url) => fetch(url, { method: "GET", headers }));
+ const responses = await Promise.all(promises);
- const roleDefinitions = await Promise.all(
- responses.map((res, i) => handleResponse(res, `role definition ${uniqueRoleDefinitionIds[i]}`))
- );
+ const roleDefinitions = await Promise.all(
+ responses.map((res, i) => handleResponse(res, `role definition ${uniqueRoleDefinitionIds[i]}`)),
+ );
- return roleDefinitions;
+ return roleDefinitions;
};
export const assignRole = async (
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string,
- principalId: string
-): Promise => {
- const accountScope = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}`;
- const roleDefinitionId = `${accountScope}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000001`;
- const roleAssignmentName = crypto.randomUUID();
- const path = `${accountScope}/sqlRoleAssignments/${roleAssignmentName}`;
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+ principalId: string,
+): Promise => {
+ if (!principalId) {
+ return null;
+ }
+ const accountScope = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}`;
+ const roleDefinitionId = `${accountScope}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000001`;
+ const roleAssignmentName = crypto.randomUUID();
+ const path = `${accountScope}/sqlRoleAssignments/${roleAssignmentName}`;
- const body = {
- properties: {
- roleDefinitionId,
- scope: `${accountScope}/`,
- principalId
- }
- };
- const response: RoleAssignmentType = await armRequest({
- host: configContext.ARM_ENDPOINT, path, method: "PUT", apiVersion, body
- });
- return response;
+ const body = {
+ properties: {
+ roleDefinitionId,
+ scope: `${accountScope}/`,
+ principalId,
+ },
+ };
+ const response: RoleAssignmentType = await armRequest({
+ host: configContext.ARM_ENDPOINT,
+ path,
+ method: "PUT",
+ apiVersion,
+ body,
+ });
+ return response;
};
diff --git a/src/Utils/arm/databaseAccountUtils.ts b/src/Utils/arm/databaseAccountUtils.ts
index be160f5ba..e696c84f5 100644
--- a/src/Utils/arm/databaseAccountUtils.ts
+++ b/src/Utils/arm/databaseAccountUtils.ts
@@ -4,35 +4,34 @@ import { configContext } from "../../ConfigContext";
const apiVersion = "2025-04-15";
export type FetchAccountDetailsParams = {
- subscriptionId: string;
- resourceGroupName: string;
- accountName: string;
+ subscriptionId: string;
+ resourceGroupName: string;
+ accountName: string;
};
const buildUrl = (params: FetchAccountDetailsParams): string => {
- const { subscriptionId, resourceGroupName, accountName } = params;
+ const { subscriptionId, resourceGroupName, accountName } = params;
- let armEndpoint = configContext.ARM_ENDPOINT;
- if (armEndpoint.endsWith("/")) {
- armEndpoint = armEndpoint.slice(0, -1);
- }
- return `${armEndpoint}/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}?api-version=${apiVersion}`;
-}
-
-export async function fetchDatabaseAccount(
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string
-) {
- const headers = new Headers();
- headers.append("Authorization", userContext.authorizationToken);
- headers.append("Content-Type", "application/json");
- const uri = buildUrl({ subscriptionId, resourceGroupName, accountName });
- const response = await fetch(uri, { method: "GET", headers: headers });
-
- if (!response.ok) {
- throw new Error(`Error fetching database account: ${response.statusText}`);
- }
- const account: DatabaseAccount = await response.json();
- return account;
+ let armEndpoint = configContext.ARM_ENDPOINT;
+ if (armEndpoint.endsWith("/")) {
+ armEndpoint = armEndpoint.slice(0, -1);
+ }
+ return `${armEndpoint}/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}?api-version=${apiVersion}`;
+};
+
+export async function fetchDatabaseAccount(subscriptionId: string, resourceGroupName: string, accountName: string) {
+ if (!userContext.authorizationToken) {
+ return Promise.reject("Authorization token is missing");
+ }
+ const headers = new Headers();
+ headers.append("Authorization", userContext.authorizationToken);
+ headers.append("Content-Type", "application/json");
+ const uri = buildUrl({ subscriptionId, resourceGroupName, accountName });
+ const response = await fetch(uri, { method: "GET", headers: headers });
+
+ if (!response.ok) {
+ throw new Error(`Error fetching database account: ${response.statusText}`);
+ }
+ const account: DatabaseAccount = await response.json();
+ return account;
}
diff --git a/src/Utils/arm/generatedClients/dataTransferService/dataTransferJobs.ts b/src/Utils/arm/generatedClients/dataTransferService/dataTransferJobs.ts
index 7cf57d0d2..a6168aba1 100644
--- a/src/Utils/arm/generatedClients/dataTransferService/dataTransferJobs.ts
+++ b/src/Utils/arm/generatedClients/dataTransferService/dataTransferJobs.ts
@@ -83,7 +83,7 @@ export async function listByDatabaseAccount(
subscriptionId: string,
resourceGroupName: string,
accountName: string,
- signal?: AbortSignal
+ signal?: AbortSignal,
): Promise {
const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/dataTransferJobs`;
return armRequest({ host: configContext.ARM_ENDPOINT, path, method: "GET", apiVersion, signal });
diff --git a/src/Utils/arm/generatedClients/dataTransferService/types.ts b/src/Utils/arm/generatedClients/dataTransferService/types.ts
index 44ced9687..8807b6873 100644
--- a/src/Utils/arm/generatedClients/dataTransferService/types.ts
+++ b/src/Utils/arm/generatedClients/dataTransferService/types.ts
@@ -8,107 +8,106 @@
/* Base class for all DataTransfer source/sink */
export interface DataTransferDataSourceSink {
- /* undocumented */
- component: "CosmosDBCassandra" | "CosmosDBMongo" | "CosmosDBMongoVCore" | "CosmosDBSql" | "AzureBlobStorage";
+ /* undocumented */
+ component: "CosmosDBCassandra" | "CosmosDBMongo" | "CosmosDBMongoVCore" | "CosmosDBSql" | "AzureBlobStorage";
}
/* A base CosmosDB data source/sink */
export type BaseCosmosDataTransferDataSourceSink = DataTransferDataSourceSink & {
- /* undocumented */
- remoteAccountName?: string;
+ /* undocumented */
+ remoteAccountName?: string;
};
/* A CosmosDB Cassandra API data source/sink */
export type CosmosCassandraDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & {
- /* undocumented */
- keyspaceName: string;
- /* undocumented */
- tableName: string;
+ /* undocumented */
+ keyspaceName: string;
+ /* undocumented */
+ tableName: string;
};
/* A CosmosDB Mongo API data source/sink */
export type CosmosMongoDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & {
- /* undocumented */
- databaseName: string;
- /* undocumented */
- collectionName: string;
+ /* undocumented */
+ databaseName: string;
+ /* undocumented */
+ collectionName: string;
};
/* A CosmosDB Mongo vCore API data source/sink */
export type CosmosMongoVCoreDataTransferDataSourceSink = DataTransferDataSourceSink & {
- /* undocumented */
- databaseName: string;
- /* undocumented */
- collectionName: string;
- /* undocumented */
- hostName?: string;
- /* undocumented */
- connectionStringKeyVaultUri?: string;
+ /* undocumented */
+ databaseName: string;
+ /* undocumented */
+ collectionName: string;
+ /* undocumented */
+ hostName?: string;
+ /* undocumented */
+ connectionStringKeyVaultUri?: string;
};
-
/* A CosmosDB No Sql API data source/sink */
export type CosmosSqlDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & {
- /* undocumented */
- databaseName: string;
- /* undocumented */
- containerName: string;
+ /* undocumented */
+ databaseName: string;
+ /* undocumented */
+ containerName: string;
};
/* An Azure Blob Storage data source/sink */
export type AzureBlobDataTransferDataSourceSink = DataTransferDataSourceSink & {
- /* undocumented */
- containerName: string;
- /* undocumented */
- endpointUrl?: string;
+ /* undocumented */
+ containerName: string;
+ /* undocumented */
+ endpointUrl?: string;
};
/* The properties of a DataTransfer Job */
export interface DataTransferJobProperties {
- /* Job Name */
- readonly jobName?: string;
- /* Source DataStore details */
- source: DataTransferDataSourceSink;
+ /* Job Name */
+ readonly jobName?: string;
+ /* Source DataStore details */
+ source: DataTransferDataSourceSink;
- /* Destination DataStore details */
- destination: DataTransferDataSourceSink;
+ /* Destination DataStore details */
+ destination: DataTransferDataSourceSink;
- /* Job Status */
- readonly status?: string;
- /* Processed Count. */
- readonly processedCount?: number
- /* Total Count. */
- readonly totalCount?: number;
- /* Last Updated Time (ISO-8601 format). */
- readonly lastUpdatedUtcTime?: string;
- /* Worker count */
- workerCount?: number;
- /* Error response for Faulted job */
- readonly error?: unknown;
+ /* Job Status */
+ readonly status?: string;
+ /* Processed Count. */
+ readonly processedCount?: number;
+ /* Total Count. */
+ readonly totalCount?: number;
+ /* Last Updated Time (ISO-8601 format). */
+ readonly lastUpdatedUtcTime?: string;
+ /* Worker count */
+ workerCount?: number;
+ /* Error response for Faulted job */
+ readonly error?: unknown;
- /* Total Duration of Job */
- readonly duration?: string
- /* Mode of job execution */
- mode?: "Offline" | "Online";
+ /* Total Duration of Job */
+ readonly duration?: string;
+ /* Mode of job execution */
+ mode?: "Offline" | "Online";
}
/* Parameters to create Data Transfer Job */
export type CreateJobRequest = unknown & {
- /* Data Transfer Create Job Properties */
- properties: DataTransferJobProperties;
+ /* Data Transfer Create Job Properties */
+ properties: DataTransferJobProperties;
};
/* A Cosmos DB Data Transfer Job */
export type DataTransferJobGetResults = unknown & {
- /* undocumented */
- properties?: DataTransferJobProperties;
+ /* undocumented */
+ properties?: DataTransferJobProperties;
};
/* The List operation response, that contains the Data Transfer jobs and their properties. */
export interface DataTransferJobFeedResults {
- /* List of Data Transfer jobs and their properties. */
- readonly value?: DataTransferJobGetResults[];
+ /* List of Data Transfer jobs and their properties. */
+ readonly value?: DataTransferJobGetResults[];
- /* URL to get the next set of Data Transfer job list results if there are any. */
- readonly nextLink?: string;
+ /* URL to get the next set of Data Transfer job list results if there are any. */
+ readonly nextLink?: string;
}
diff --git a/src/Utils/arm/identityUtils.ts b/src/Utils/arm/identityUtils.ts
index be6969f0b..48700ea1f 100644
--- a/src/Utils/arm/identityUtils.ts
+++ b/src/Utils/arm/identityUtils.ts
@@ -6,51 +6,52 @@ import { armRequest } from "./request";
const apiVersion = "2025-04-15";
const updateIdentity = async (
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string,
- body: object
-): Promise => {
- const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}`;
- const response: { status: string } = await armRequest({
- host: configContext.ARM_ENDPOINT, path, method: "PATCH", apiVersion, body
- });
- if (response.status === "Succeeded") {
- const account = await fetchDatabaseAccount(subscriptionId, resourceGroupName, accountName);
- return account;
- }
- return null;
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+ body: object,
+): Promise => {
+ const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}`;
+ const response: { status: string } = await armRequest({
+ host: configContext.ARM_ENDPOINT,
+ path,
+ method: "PATCH",
+ apiVersion,
+ body,
+ });
+ if (response.status === "Succeeded") {
+ const account = await fetchDatabaseAccount(subscriptionId, resourceGroupName, accountName);
+ return account;
+ }
+ return null;
};
const updateSystemIdentity = async (
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string
-): Promise => {
- const body = {
- identity: {
- type: "SystemAssigned"
- }
- };
- const updatedAccount = await updateIdentity(subscriptionId, resourceGroupName, accountName, body);
- return updatedAccount;
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+): Promise => {
+ const body = {
+ identity: {
+ type: "SystemAssigned",
+ },
+ };
+ const updatedAccount = await updateIdentity(subscriptionId, resourceGroupName, accountName, body);
+ return updatedAccount;
};
const updateDefaultIdentity = async (
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string
-): Promise => {
- const body = {
- properties: {
- defaultIdentity: "SystemAssignedIdentity"
- }
- };
- const updatedAccount = await updateIdentity(subscriptionId, resourceGroupName, accountName, body);
- return updatedAccount;
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+): Promise => {
+ const body = {
+ properties: {
+ defaultIdentity: "SystemAssignedIdentity",
+ },
+ };
+ const updatedAccount = await updateIdentity(subscriptionId, resourceGroupName, accountName, body);
+ return updatedAccount;
};
-
-
export { updateDefaultIdentity, updateSystemIdentity };
-
diff --git a/src/Utils/arm/request.ts b/src/Utils/arm/request.ts
index c9627ca1a..3471fb67b 100644
--- a/src/Utils/arm/request.ts
+++ b/src/Utils/arm/request.ts
@@ -83,7 +83,7 @@ export async function armRequestWithoutPolling({
method,
headers,
body: requestBody ? JSON.stringify(requestBody) : undefined,
- signal
+ signal,
});
if (!response.ok) {
@@ -119,7 +119,7 @@ export async function armRequest({
queryParams,
contentType,
customHeaders,
- signal
+ signal,
}: Options): Promise {
const armRequestResult = await armRequestWithoutPolling({
host,
@@ -130,7 +130,7 @@ export async function armRequest({
queryParams,
contentType,
customHeaders,
- signal
+ signal,
});
const operationStatusUrl = armRequestResult.operationStatusUrl;
if (operationStatusUrl) {
diff --git a/src/hooks/useDataContainers.tsx b/src/hooks/useDataContainers.tsx
index d79a94fcc..ecd6e55e1 100644
--- a/src/hooks/useDataContainers.tsx
+++ b/src/hooks/useDataContainers.tsx
@@ -7,76 +7,69 @@ import { getCopyJobAuthorizationHeader } from "../Utils/CopyJobAuthUtils";
const apiVersion = "2023-09-15";
export interface FetchDataContainersListParams {
- subscriptionId: string;
- resourceGroupName: string;
- databaseName: string;
- accountName: string;
- apiType?: ApiType;
+ subscriptionId: string;
+ resourceGroupName: string;
+ databaseName: string;
+ accountName: string;
+ apiType?: ApiType;
}
const buildReadDataContainersListUrl = (params: FetchDataContainersListParams): string => {
- const { subscriptionId, resourceGroupName, accountName, databaseName, apiType } = params;
- const databaseEndpoint = getDatabaseEndpoint(apiType);
- const collectionEndpoint = getCollectionEndpoint(apiType);
+ const { subscriptionId, resourceGroupName, accountName, databaseName, apiType } = params;
+ const databaseEndpoint = getDatabaseEndpoint(apiType);
+ const collectionEndpoint = getCollectionEndpoint(apiType);
- let armEndpoint = configContext.ARM_ENDPOINT;
- if (armEndpoint.endsWith("/")) {
- armEndpoint = armEndpoint.slice(0, -1);
- }
- return `${armEndpoint}/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/${databaseEndpoint}/${databaseName}/${collectionEndpoint}?api-version=${apiVersion}`;
-}
+ let armEndpoint = configContext.ARM_ENDPOINT;
+ if (armEndpoint.endsWith("/")) {
+ armEndpoint = armEndpoint.slice(0, -1);
+ }
+ return `${armEndpoint}/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/${databaseEndpoint}/${databaseName}/${collectionEndpoint}?api-version=${apiVersion}`;
+};
const fetchDataContainersList = async (
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string,
- databaseName: string,
- apiType: ApiType
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+ databaseName: string,
+ apiType: ApiType,
): Promise => {
- const uri = buildReadDataContainersListUrl({
- subscriptionId,
- resourceGroupName,
- accountName,
- databaseName,
- apiType
- });
- const headers = getCopyJobAuthorizationHeader();
+ const uri = buildReadDataContainersListUrl({
+ subscriptionId,
+ resourceGroupName,
+ accountName,
+ databaseName,
+ apiType,
+ });
+ const headers = getCopyJobAuthorizationHeader();
- const response = await fetch(uri, {
- method: "GET",
- headers: headers
- });
+ const response = await fetch(uri, {
+ method: "GET",
+ headers: headers,
+ });
- if (!response.ok) {
- throw new Error("Failed to fetch containers");
- }
+ if (!response.ok) {
+ throw new Error("Failed to fetch containers");
+ }
- const data = await response.json();
- return data.value;
+ const data = await response.json();
+ return data.value;
};
export function useDataContainers(
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string,
- databaseName: string,
- apiType: ApiType
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+ databaseName: string,
+ apiType: ApiType,
): DatabaseModel[] | undefined {
- const { data } = useSWR(
- () => (
- subscriptionId && resourceGroupName && accountName && databaseName && apiType ? [
- "fetchContainersLinkedToDatabases",
- subscriptionId, resourceGroupName, accountName, databaseName, apiType
- ] : undefined
- ),
- (_, subscriptionId, resourceGroupName, accountName, databaseName, apiType) => fetchDataContainersList(
- subscriptionId,
- resourceGroupName,
- accountName,
- databaseName,
- apiType
- ),
- );
+ const { data } = useSWR(
+ () =>
+ subscriptionId && resourceGroupName && accountName && databaseName && apiType
+ ? ["fetchContainersLinkedToDatabases", subscriptionId, resourceGroupName, accountName, databaseName, apiType]
+ : undefined,
+ (_, subscriptionId, resourceGroupName, accountName, databaseName, apiType) =>
+ fetchDataContainersList(subscriptionId, resourceGroupName, accountName, databaseName, apiType),
+ );
- return data;
-}
\ No newline at end of file
+ return data;
+}
diff --git a/src/hooks/useDatabaseAccounts.tsx b/src/hooks/useDatabaseAccounts.tsx
index efa36137a..18474b6fc 100644
--- a/src/hooks/useDatabaseAccounts.tsx
+++ b/src/hooks/useDatabaseAccounts.tsx
@@ -11,7 +11,10 @@ interface AccountListResult {
value: DatabaseAccount[];
}
-export async function fetchDatabaseAccounts(subscriptionId: string, accessToken: string = ""): Promise {
+export async function fetchDatabaseAccounts(
+ subscriptionId: string,
+ accessToken: string = "",
+): Promise {
if (!accessToken && !userContext.authorizationToken) {
return [];
}
@@ -61,15 +64,15 @@ export async function fetchDatabaseAccountsFromGraph(
subscriptions: [subscriptionId],
...(skipToken
? {
- options: {
- $skipToken: skipToken,
- } as QueryRequestOptions,
- }
+ options: {
+ $skipToken: skipToken,
+ } as QueryRequestOptions,
+ }
: {
- options: {
- $top: 150,
- } as QueryRequestOptions,
- }),
+ options: {
+ $top: 150,
+ } as QueryRequestOptions,
+ }),
};
const response = await fetch(managementResourceGraphAPIURL, {
diff --git a/src/hooks/useDatabases.tsx b/src/hooks/useDatabases.tsx
index a9f0237c3..c0d77b8e0 100644
--- a/src/hooks/useDatabases.tsx
+++ b/src/hooks/useDatabases.tsx
@@ -7,60 +7,59 @@ import { getCopyJobAuthorizationHeader } from "../Utils/CopyJobAuthUtils";
const apiVersion = "2023-09-15";
export interface FetchDatabasesListParams {
- subscriptionId: string;
- resourceGroupName: string;
- accountName: string;
- apiType?: ApiType;
+ subscriptionId: string;
+ resourceGroupName: string;
+ accountName: string;
+ apiType?: ApiType;
}
const buildReadDatabasesListUrl = (params: FetchDatabasesListParams): string => {
- const { subscriptionId, resourceGroupName, accountName, apiType } = params;
- const databaseEndpoint = getDatabaseEndpoint(apiType);
+ const { subscriptionId, resourceGroupName, accountName, apiType } = params;
+ const databaseEndpoint = getDatabaseEndpoint(apiType);
- let armEndpoint = configContext.ARM_ENDPOINT;
- if (armEndpoint.endsWith("/")) {
- armEndpoint = armEndpoint.slice(0, -1);
- }
- return `${armEndpoint}/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/${databaseEndpoint}?api-version=${apiVersion}`;
-}
+ let armEndpoint = configContext.ARM_ENDPOINT;
+ if (armEndpoint.endsWith("/")) {
+ armEndpoint = armEndpoint.slice(0, -1);
+ }
+ return `${armEndpoint}/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/${databaseEndpoint}?api-version=${apiVersion}`;
+};
-const fetchDatabasesList = async (subscriptionId: string, resourceGroupName: string, accountName: string, apiType: ApiType): Promise => {
- const uri = buildReadDatabasesListUrl({ subscriptionId, resourceGroupName, accountName, apiType });
- const headers = getCopyJobAuthorizationHeader();
+const fetchDatabasesList = async (
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+ apiType: ApiType,
+): Promise => {
+ const uri = buildReadDatabasesListUrl({ subscriptionId, resourceGroupName, accountName, apiType });
+ const headers = getCopyJobAuthorizationHeader();
- const response = await fetch(uri, {
- method: "GET",
- headers: headers
- });
+ const response = await fetch(uri, {
+ method: "GET",
+ headers: headers,
+ });
- if (!response.ok) {
- throw new Error("Failed to fetch databases");
- }
+ if (!response.ok) {
+ throw new Error("Failed to fetch databases");
+ }
- const data = await response.json();
- return data.value;
+ const data = await response.json();
+ return data.value;
};
export function useDatabases(
- subscriptionId: string,
- resourceGroupName: string,
- accountName: string,
- apiType: ApiType
+ subscriptionId: string,
+ resourceGroupName: string,
+ accountName: string,
+ apiType: ApiType,
): DatabaseModel[] | undefined {
- const { data } = useSWR(
- () => (
- subscriptionId && resourceGroupName && accountName && apiType ? [
- "fetchDatabasesLinkedToResource",
- subscriptionId, resourceGroupName, accountName, apiType
- ] : undefined
- ),
- (_, subscriptionId, resourceGroupName, accountName, apiType) => fetchDatabasesList(
- subscriptionId,
- resourceGroupName,
- accountName,
- apiType
- ),
- );
+ const { data } = useSWR(
+ () =>
+ subscriptionId && resourceGroupName && accountName && apiType
+ ? ["fetchDatabasesLinkedToResource", subscriptionId, resourceGroupName, accountName, apiType]
+ : undefined,
+ (_, subscriptionId, resourceGroupName, accountName, apiType) =>
+ fetchDatabasesList(subscriptionId, resourceGroupName, accountName, apiType),
+ );
- return data;
-}
\ No newline at end of file
+ return data;
+}