mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2026-01-01 07:11:23 +00:00
* Update contracts for new all resource messages * Add timestamp to token message signature * Reconstruct resource tree with databases and collections parsed from token dictionary keys * Create FabricDatabase and FabricCollection to turn off interaction * Remove unnecessary FabricCollection derived class * Handle resource tokens * Bug fix * Fix linting issues * Fix update document * Fix partitition keys * Remove special case for FabricDatabase tree node * Modify readCollections to follow normal flow with Fabric * Move fabric databases refresh to data access and remove special case in Explorer * Revert Explorer.tsx changes * Disable database context menu and delete container context menu * Remove create database/container button for Fabric * Fix format * Renew token logic * Parallelize read collections calls to speed up * Disable readDatabaseOffer, because it is too slow for now * Reduce TOKEN_VALIDITY_MS a bit to make sure renewal happens before expiration. Receving new tokens new refreshes databases * Add container element for Main app in HTML * Do not handle "openTab" message anymore * Fix style of main div * Simplify conditional load of the fabric .css * Fix format * Fix tsc can't find dynamic less import --------- Co-authored-by: Armando Trejo Oliver <artrejo@microsoft.com>
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { sendCachedDataMessage } from "Common/MessageHandler";
|
|
import { FabricDatabaseConnectionInfo } from "Contracts/FabricContract";
|
|
import { MessageTypes } from "Contracts/MessageTypes";
|
|
import Explorer from "Explorer/Explorer";
|
|
import { updateUserContext } from "UserContext";
|
|
|
|
const TOKEN_VALIDITY_MS = (3600 - 600) * 1000; // 1 hour minus 10 minutes to be safe
|
|
let timeoutId: NodeJS.Timeout;
|
|
|
|
// Prevents multiple parallel requests
|
|
let isRequestPending = false;
|
|
|
|
export const requestDatabaseResourceTokens = (): void => {
|
|
if (isRequestPending) {
|
|
return;
|
|
}
|
|
|
|
// TODO Make Fabric return the message id so we can handle this promise
|
|
isRequestPending = true;
|
|
sendCachedDataMessage<FabricDatabaseConnectionInfo>(MessageTypes.GetAllResourceTokens, []);
|
|
};
|
|
|
|
export const handleRequestDatabaseResourceTokensResponse = (
|
|
explorer: Explorer,
|
|
fabricDatabaseConnectionInfo: FabricDatabaseConnectionInfo,
|
|
): void => {
|
|
isRequestPending = false;
|
|
updateUserContext({ fabricDatabaseConnectionInfo });
|
|
scheduleRefreshDatabaseResourceToken();
|
|
explorer.refreshAllDatabases();
|
|
};
|
|
|
|
/**
|
|
* Check token validity and schedule a refresh if necessary
|
|
* @param tokenTimestamp
|
|
* @returns
|
|
*/
|
|
export const scheduleRefreshDatabaseResourceToken = (): void => {
|
|
if (timeoutId !== undefined) {
|
|
clearTimeout(timeoutId);
|
|
timeoutId = undefined;
|
|
}
|
|
|
|
timeoutId = setTimeout(() => {
|
|
requestDatabaseResourceTokens();
|
|
}, TOKEN_VALIDITY_MS);
|
|
};
|
|
|
|
export const checkDatabaseResourceTokensValidity = (tokenTimestamp: number): void => {
|
|
if (tokenTimestamp + TOKEN_VALIDITY_MS < Date.now()) {
|
|
requestDatabaseResourceTokens();
|
|
}
|
|
};
|