@fluid-tools/fetch-tool 0.59.1000 → 0.59.2000-63294

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"fluidFetchMessages.js","sourceRoot":"","sources":["../src/fluidFetchMessages.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport fs from \"fs\";\nimport { assert } from \"@fluidframework/common-utils\";\nimport {\n IDocumentService,\n} from \"@fluidframework/driver-definitions\";\nimport {\n IClient,\n ISequencedDocumentMessage,\n MessageType,\n ScopeType,\n} from \"@fluidframework/protocol-definitions\";\nimport { printMessageStats } from \"./fluidAnalyzeMessages\";\nimport {\n connectToWebSocket,\n dumpMessages,\n dumpMessageStats,\n overWrite,\n paramActualFormatting,\n messageTypeFilter,\n} from \"./fluidFetchArgs\";\n\nfunction filenameFromIndex(index: number): string {\n return index === 0 ? \"\" : index.toString(); // support old tools...\n}\n\nlet firstAvailableDelta = 1;\nasync function* loadAllSequencedMessages(\n documentService?: IDocumentService,\n dir?: string,\n files?: string[]) {\n let lastSeq = 0;\n // flag for mismatch between last sequence number read and new one to be read\n let seqNumMismatch = false;\n\n // If we have local save, read ops from there first\n if (files !== undefined) {\n for (let i = 0; i < files.length; i++) {\n const file = filenameFromIndex(i);\n try {\n console.log(`reading messages${file}.json`);\n const fileContent = fs.readFileSync(`${dir}/messages${file}.json`, { encoding: \"utf-8\" });\n const messages: ISequencedDocumentMessage[] = JSON.parse(fileContent);\n // check if there is mismatch\n seqNumMismatch = messages[0].sequenceNumber !== lastSeq + 1;\n assert(!seqNumMismatch, 0x1b9 /* \"Unexpected value for sequence number of first message in file\" */);\n lastSeq = messages[messages.length - 1].sequenceNumber;\n yield messages;\n } catch (e) {\n if (seqNumMismatch) {\n if (overWrite) {\n // with overWrite option on, we will delete all exisintg message.json files\n for (let index = 0; index < files.length; index++) {\n const name = filenameFromIndex(index);\n fs.unlinkSync(`${dir}/messages${name}.json`);\n }\n break;\n }\n // prompt user to back up and delete existing files\n console.error(\"There are deleted ops in the document being requested,\" +\n \" please back up the existing messages.json file and delete it from its directory.\" +\n \" Then try fetch tool again.\");\n console.error(e);\n return;\n } else {\n console.error(`Error reading / parsing messages from ${files}`);\n console.error(e);\n return;\n }\n }\n }\n if (lastSeq !== 0) {\n console.log(`Read ${lastSeq} ops from local cache`);\n }\n }\n\n if (!documentService) {\n return;\n }\n\n const deltaStorage = await documentService.connectToDeltaStorage();\n\n let timeStart = Date.now();\n let requests = 0;\n let opsStorage = 0;\n\n // reading only 1 op to test if there is mismatch\n const teststream = deltaStorage.fetchMessages(\n lastSeq + 1,\n lastSeq + 2);\n\n let statusCode;\n let innerMostErrorCode;\n let response;\n\n try {\n await teststream.read();\n } catch (error) {\n statusCode = error.getTelemetryProperties().statusCode;\n innerMostErrorCode = error.getTelemetryProperties().innerMostErrorCode;\n // if there is gap between ops, catch the error and check it is the error we need\n if (statusCode !== 410 || innerMostErrorCode !== \"fluidDeltaDataNotAvailable\") {\n throw error;\n }\n // get firstAvailableDelta from the error response, and set current sequence number to that\n response = JSON.parse(error.getTelemetryProperties().response);\n firstAvailableDelta = response.error.firstAvailableDelta;\n lastSeq = firstAvailableDelta - 1;\n }\n\n // continue reading rest of the ops\n const stream = deltaStorage.fetchMessages(\n lastSeq + 1, // inclusive left\n undefined, // to\n );\n\n while (true) {\n const result = await stream.read();\n if (result.done) {\n break;\n }\n requests++;\n const messages = result.value;\n\n // Empty buckets should never be returned\n assert(messages.length !== 0, 0x1ba /* \"should not return empty buckets\" */);\n // console.log(`Loaded ops at ${messages[0].sequenceNumber}`);\n\n // This parsing of message contents happens in delta manager. But when we analyze messages\n // for message stats, we skip that path. So parsing of json contents needs to happen here.\n for (const message of messages) {\n if (typeof message.contents === \"string\"\n && message.contents !== \"\"\n && message.type !== MessageType.ClientLeave\n ) {\n message.contents = JSON.parse(message.contents);\n }\n }\n\n opsStorage += messages.length;\n lastSeq = messages[messages.length - 1].sequenceNumber;\n yield messages;\n }\n\n // eslint-disable-next-line max-len\n console.log(`\\n${Math.floor((Date.now() - timeStart) / 1000)} seconds to retrieve ${opsStorage} ops in ${requests} requests`);\n\n if (connectToWebSocket) {\n let logMsg = \"\";\n const client: IClient = {\n mode: \"write\",\n permission: [],\n scopes: [ScopeType.DocRead, ScopeType.DocWrite, ScopeType.SummaryWrite],\n details: {\n capabilities: { interactive: true },\n },\n user: { id: \"blah\" },\n };\n console.log(\"Retrieving messages from web socket\");\n timeStart = Date.now();\n const deltaStream = await documentService.connectToDeltaStream(client);\n const initialMessages = deltaStream.initialMessages;\n deltaStream.dispose();\n console.log(`${Math.floor((Date.now() - timeStart) / 1000)} seconds to connect to web socket`);\n\n if (initialMessages) {\n const lastSequenceNumber = lastSeq;\n const filtered = initialMessages.filter((a) => a.sequenceNumber > lastSequenceNumber);\n const sorted = filtered.sort((a, b) => a.sequenceNumber - b.sequenceNumber);\n lastSeq = sorted[sorted.length - 1].sequenceNumber;\n // eslint-disable-next-line max-len\n logMsg = ` (${opsStorage} delta storage, ${initialMessages.length} initial ws messages, ${initialMessages.length - sorted.length} dup)`;\n yield sorted;\n }\n console.log(`${lastSeq} total messages${logMsg}`);\n }\n}\n\nasync function* saveOps(\n gen, // AsyncGenerator<ISequencedDocumentMessage[]>,\n dir: string,\n files: string[]) {\n // Split into 100K ops\n const chunk = 100 * 1000;\n\n let sequencedMessages: ISequencedDocumentMessage[] = [];\n\n // Figure out first file we want to write to\n let index = 0;\n let curr: number = 1;\n if (files.length !== 0) {\n index = files.length - 1;\n const name = filenameFromIndex(index);\n const fileContent = fs.readFileSync(`${dir}/messages${name}.json`, { encoding: \"utf-8\" });\n const messages: ISequencedDocumentMessage[] = JSON.parse(fileContent);\n curr = messages[0].sequenceNumber;\n }\n\n while (true) {\n const result: IteratorResult<ISequencedDocumentMessage[]> = await gen.next();\n if (files.length === 0) {\n curr = firstAvailableDelta;\n }\n if (!result.done) {\n let messages = result.value;\n yield messages;\n if (messages[messages.length - 1].sequenceNumber < curr) {\n // Nothing interesting.\n continue;\n }\n if (messages[0].sequenceNumber < curr) {\n messages = messages.filter((msg) => msg.sequenceNumber >= curr);\n }\n sequencedMessages = sequencedMessages.concat(messages);\n assert(sequencedMessages[0].sequenceNumber === curr,\n 0x1bb /* \"Unexpected sequence number on first of messages to save\" */);\n assert(sequencedMessages[sequencedMessages.length - 1].sequenceNumber\n === curr + sequencedMessages.length - 1,\n 0x1bc /* \"Unexpected sequence number on last of messages to save\" */);\n }\n\n // Time to write it out?\n while (sequencedMessages.length >= chunk || (result.done && sequencedMessages.length !== 0)) {\n const name = filenameFromIndex(index);\n const write = sequencedMessages.splice(0, chunk);\n console.log(`writing messages${name}.json`);\n fs.writeFileSync(\n `${dir}/messages${name}.json`,\n JSON.stringify(write, undefined, paramActualFormatting ? 0 : 2));\n // increment curr by chunk\n curr += chunk;\n assert(sequencedMessages.length === 0 || sequencedMessages[0].sequenceNumber === curr,\n 0x1bd /* \"Stopped writing at unexpected sequence number\" */);\n index++;\n }\n\n if (result.done) {\n break;\n }\n }\n}\n\nexport async function fluidFetchMessages(documentService?: IDocumentService, saveDir?: string) {\n const messageStats = dumpMessageStats || dumpMessages;\n if (!messageStats && (saveDir === undefined || documentService === undefined)) {\n return;\n }\n\n const files = !saveDir ?\n undefined :\n fs.readdirSync(saveDir)\n .filter((file) => {\n if (!file.startsWith(\"messages\")) {\n return false;\n }\n return true;\n })\n .sort((a, b) => a.localeCompare(b));\n\n let generator = loadAllSequencedMessages(documentService, saveDir, files);\n\n if (saveDir && files !== undefined && documentService) {\n generator = saveOps(generator, saveDir, files);\n }\n\n if (messageStats) {\n return printMessageStats(\n generator,\n dumpMessageStats,\n dumpMessages,\n messageTypeFilter);\n } else {\n let item;\n for await (item of generator) { }\n }\n}\n"]}
1
+ {"version":3,"file":"fluidFetchMessages.js","sourceRoot":"","sources":["../src/fluidFetchMessages.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport fs from \"fs\";\nimport { assert } from \"@fluidframework/common-utils\";\nimport {\n IDocumentService,\n} from \"@fluidframework/driver-definitions\";\nimport {\n IClient,\n ISequencedDocumentMessage,\n MessageType,\n ScopeType,\n} from \"@fluidframework/protocol-definitions\";\nimport { printMessageStats } from \"./fluidAnalyzeMessages\";\nimport {\n connectToWebSocket,\n dumpMessages,\n dumpMessageStats,\n overWrite,\n paramActualFormatting,\n messageTypeFilter,\n} from \"./fluidFetchArgs\";\n\nfunction filenameFromIndex(index: number): string {\n return index === 0 ? \"\" : index.toString(); // support old tools...\n}\n\nlet firstAvailableDelta = 1;\nasync function* loadAllSequencedMessages(\n documentService?: IDocumentService,\n dir?: string,\n files?: string[]) {\n let lastSeq = 0;\n // flag for mismatch between last sequence number read and new one to be read\n let seqNumMismatch = false;\n\n // If we have local save, read ops from there first\n if (files !== undefined) {\n for (let i = 0; i < files.length; i++) {\n const file = filenameFromIndex(i);\n try {\n console.log(`reading messages${file}.json`);\n const fileContent = fs.readFileSync(`${dir}/messages${file}.json`, { encoding: \"utf-8\" });\n const messages: ISequencedDocumentMessage[] = JSON.parse(fileContent);\n // check if there is mismatch\n seqNumMismatch = messages[0].sequenceNumber !== lastSeq + 1;\n assert(!seqNumMismatch, 0x1b9 /* \"Unexpected value for sequence number of first message in file\" */);\n lastSeq = messages[messages.length - 1].sequenceNumber;\n yield messages;\n } catch (e) {\n if (seqNumMismatch) {\n if (overWrite) {\n // with overWrite option on, we will delete all exisintg message.json files\n for (let index = 0; index < files.length; index++) {\n const name = filenameFromIndex(index);\n fs.unlinkSync(`${dir}/messages${name}.json`);\n }\n break;\n }\n // prompt user to back up and delete existing files\n console.error(\"There are deleted ops in the document being requested,\" +\n \" please back up the existing messages.json file and delete it from its directory.\" +\n \" Then try fetch tool again.\");\n console.error(e);\n return;\n } else {\n console.error(`Error reading / parsing messages from ${files}`);\n console.error(e);\n return;\n }\n }\n }\n if (lastSeq !== 0) {\n console.log(`Read ${lastSeq} ops from local cache`);\n }\n }\n\n if (!documentService) {\n return;\n }\n\n const deltaStorage = await documentService.connectToDeltaStorage();\n\n let timeStart = Date.now();\n let requests = 0;\n let opsStorage = 0;\n\n // reading only 1 op to test if there is mismatch\n const teststream = deltaStorage.fetchMessages(\n lastSeq + 1,\n lastSeq + 2);\n\n let statusCode;\n let innerMostErrorCode;\n let response;\n\n try {\n await teststream.read();\n } catch (error: any) {\n statusCode = error.getTelemetryProperties().statusCode;\n innerMostErrorCode = error.getTelemetryProperties().innerMostErrorCode;\n // if there is gap between ops, catch the error and check it is the error we need\n if (statusCode !== 410 || innerMostErrorCode !== \"fluidDeltaDataNotAvailable\") {\n throw error;\n }\n // get firstAvailableDelta from the error response, and set current sequence number to that\n response = JSON.parse(error.getTelemetryProperties().response);\n firstAvailableDelta = response.error.firstAvailableDelta;\n lastSeq = firstAvailableDelta - 1;\n }\n\n // continue reading rest of the ops\n const stream = deltaStorage.fetchMessages(\n lastSeq + 1, // inclusive left\n undefined, // to\n );\n\n while (true) {\n const result = await stream.read();\n if (result.done) {\n break;\n }\n requests++;\n const messages = result.value;\n\n // Empty buckets should never be returned\n assert(messages.length !== 0, 0x1ba /* \"should not return empty buckets\" */);\n // console.log(`Loaded ops at ${messages[0].sequenceNumber}`);\n\n // This parsing of message contents happens in delta manager. But when we analyze messages\n // for message stats, we skip that path. So parsing of json contents needs to happen here.\n for (const message of messages) {\n if (typeof message.contents === \"string\"\n && message.contents !== \"\"\n && message.type !== MessageType.ClientLeave\n ) {\n message.contents = JSON.parse(message.contents);\n }\n }\n\n opsStorage += messages.length;\n lastSeq = messages[messages.length - 1].sequenceNumber;\n yield messages;\n }\n\n // eslint-disable-next-line max-len\n console.log(`\\n${Math.floor((Date.now() - timeStart) / 1000)} seconds to retrieve ${opsStorage} ops in ${requests} requests`);\n\n if (connectToWebSocket) {\n let logMsg = \"\";\n const client: IClient = {\n mode: \"write\",\n permission: [],\n scopes: [ScopeType.DocRead, ScopeType.DocWrite, ScopeType.SummaryWrite],\n details: {\n capabilities: { interactive: true },\n },\n user: { id: \"blah\" },\n };\n console.log(\"Retrieving messages from web socket\");\n timeStart = Date.now();\n const deltaStream = await documentService.connectToDeltaStream(client);\n const initialMessages = deltaStream.initialMessages;\n deltaStream.dispose();\n console.log(`${Math.floor((Date.now() - timeStart) / 1000)} seconds to connect to web socket`);\n\n if (initialMessages) {\n const lastSequenceNumber = lastSeq;\n const filtered = initialMessages.filter((a) => a.sequenceNumber > lastSequenceNumber);\n const sorted = filtered.sort((a, b) => a.sequenceNumber - b.sequenceNumber);\n lastSeq = sorted[sorted.length - 1].sequenceNumber;\n // eslint-disable-next-line max-len\n logMsg = ` (${opsStorage} delta storage, ${initialMessages.length} initial ws messages, ${initialMessages.length - sorted.length} dup)`;\n yield sorted;\n }\n console.log(`${lastSeq} total messages${logMsg}`);\n }\n}\n\nasync function* saveOps(\n gen, // AsyncGenerator<ISequencedDocumentMessage[]>,\n dir: string,\n files: string[]) {\n // Split into 100K ops\n const chunk = 100 * 1000;\n\n let sequencedMessages: ISequencedDocumentMessage[] = [];\n\n // Figure out first file we want to write to\n let index = 0;\n let curr: number = 1;\n if (files.length !== 0) {\n index = files.length - 1;\n const name = filenameFromIndex(index);\n const fileContent = fs.readFileSync(`${dir}/messages${name}.json`, { encoding: \"utf-8\" });\n const messages: ISequencedDocumentMessage[] = JSON.parse(fileContent);\n curr = messages[0].sequenceNumber;\n }\n\n while (true) {\n const result: IteratorResult<ISequencedDocumentMessage[]> = await gen.next();\n if (files.length === 0) {\n curr = firstAvailableDelta;\n }\n if (!result.done) {\n let messages = result.value;\n yield messages;\n if (messages[messages.length - 1].sequenceNumber < curr) {\n // Nothing interesting.\n continue;\n }\n if (messages[0].sequenceNumber < curr) {\n messages = messages.filter((msg) => msg.sequenceNumber >= curr);\n }\n sequencedMessages = sequencedMessages.concat(messages);\n assert(sequencedMessages[0].sequenceNumber === curr,\n 0x1bb /* \"Unexpected sequence number on first of messages to save\" */);\n assert(sequencedMessages[sequencedMessages.length - 1].sequenceNumber\n === curr + sequencedMessages.length - 1,\n 0x1bc /* \"Unexpected sequence number on last of messages to save\" */);\n }\n\n // Time to write it out?\n while (sequencedMessages.length >= chunk || (result.done && sequencedMessages.length !== 0)) {\n const name = filenameFromIndex(index);\n const write = sequencedMessages.splice(0, chunk);\n console.log(`writing messages${name}.json`);\n fs.writeFileSync(\n `${dir}/messages${name}.json`,\n JSON.stringify(write, undefined, paramActualFormatting ? 0 : 2));\n // increment curr by chunk\n curr += chunk;\n assert(sequencedMessages.length === 0 || sequencedMessages[0].sequenceNumber === curr,\n 0x1bd /* \"Stopped writing at unexpected sequence number\" */);\n index++;\n }\n\n if (result.done) {\n break;\n }\n }\n}\n\nexport async function fluidFetchMessages(documentService?: IDocumentService, saveDir?: string) {\n const messageStats = dumpMessageStats || dumpMessages;\n if (!messageStats && (saveDir === undefined || documentService === undefined)) {\n return;\n }\n\n const files = !saveDir ?\n undefined :\n fs.readdirSync(saveDir)\n .filter((file) => {\n if (!file.startsWith(\"messages\")) {\n return false;\n }\n return true;\n })\n .sort((a, b) => a.localeCompare(b));\n\n let generator = loadAllSequencedMessages(documentService, saveDir, files);\n\n if (saveDir && files !== undefined && documentService) {\n generator = saveOps(generator, saveDir, files);\n }\n\n if (messageStats) {\n return printMessageStats(\n generator,\n dumpMessageStats,\n dumpMessages,\n messageTypeFilter);\n } else {\n let item;\n for await (item of generator) { }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fluidFetchSharePoint.js","sourceRoot":"","sources":["../src/fluidFetchSharePoint.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { DriverErrorType } from \"@fluidframework/driver-definitions\";\nimport {\n getChildrenByDriveItem,\n getDriveItemByServerRelativePath,\n getDriveItemFromDriveAndItem,\n IClientConfig,\n IOdspDriveItem,\n getOdspRefreshTokenFn,\n IOdspAuthRequestInfo,\n} from \"@fluidframework/odsp-doclib-utils\";\nimport {\n getMicrosoftConfiguration,\n OdspTokenManager,\n odspTokensCache,\n OdspTokenConfig,\n IOdspTokenManagerCacheKey,\n} from \"@fluidframework/tool-utils\";\nimport { fluidFetchWebNavigator } from \"./fluidFetchInit\";\nimport { getForceTokenReauth } from \"./fluidFetchArgs\";\n\nexport async function resolveWrapper<T>(\n callback: (authRequestInfo: IOdspAuthRequestInfo) => Promise<T>,\n server: string,\n clientConfig: IClientConfig,\n forceTokenReauth = false,\n forToken = false,\n): Promise<T> {\n try {\n const odspTokenManager = new OdspTokenManager(odspTokensCache);\n const tokenConfig: OdspTokenConfig = {\n type: \"browserLogin\",\n navigator: fluidFetchWebNavigator,\n };\n const tokens = await odspTokenManager.getOdspTokens(\n server,\n clientConfig,\n tokenConfig,\n undefined /* forceRefresh */,\n forceTokenReauth || getForceTokenReauth(),\n );\n\n const result = await callback({\n accessToken: tokens.accessToken,\n refreshTokenFn: getOdspRefreshTokenFn(server, clientConfig, tokens),\n });\n // If this is used for getting a token, then refresh the cache with new token.\n if (forToken) {\n const key: IOdspTokenManagerCacheKey = { isPush: false, userOrServer: server };\n await odspTokenManager.updateTokensCache(\n key, { accessToken: result as any as string, refreshToken: tokens.refreshToken });\n return result;\n }\n return result;\n } catch (e) {\n if (e.errorType === DriverErrorType.authorizationError && !forceTokenReauth) {\n // Re-auth\n return resolveWrapper<T>(callback, server, clientConfig, true, forToken);\n }\n throw e;\n }\n}\n\nexport async function resolveDriveItemByServerRelativePath(\n server: string,\n serverRelativePath: string,\n clientConfig: IClientConfig,\n) {\n return resolveWrapper<IOdspDriveItem>(\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n (authRequestInfo) => getDriveItemByServerRelativePath(\n server,\n serverRelativePath,\n authRequestInfo,\n false,\n ),\n server, clientConfig);\n}\n\nasync function resolveChildrenByDriveItem(\n server: string,\n folderDriveItem: IOdspDriveItem,\n clientConfig: IClientConfig,\n) {\n return resolveWrapper<IOdspDriveItem[]>(\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n (authRequestInfo) => getChildrenByDriveItem(folderDriveItem, server, authRequestInfo),\n server, clientConfig);\n}\n\nexport async function getSharepointFiles(server: string, serverRelativePath: string, recurse: boolean) {\n const clientConfig = getMicrosoftConfiguration();\n\n const fileInfo = await resolveDriveItemByServerRelativePath(server, serverRelativePath, clientConfig);\n console.log(fileInfo);\n const pendingFolder: { path: string, folder: IOdspDriveItem }[] = [];\n const files: IOdspDriveItem[] = [];\n if (fileInfo.isFolder) {\n pendingFolder.push({ path: serverRelativePath, folder: fileInfo });\n } else {\n files.push(fileInfo);\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const folderInfo = pendingFolder.shift();\n if (!folderInfo) { break; }\n const { path, folder } = folderInfo;\n const children = await resolveChildrenByDriveItem(server, folder, clientConfig);\n for (const child of children) {\n const childPath = `${path}/${child.name}`;\n if (child.isFolder) {\n if (recurse) {\n pendingFolder.push({ path: childPath, folder: child });\n }\n } else {\n files.push(child);\n }\n }\n }\n return files;\n}\n\nexport async function getSingleSharePointFile(\n server: string,\n drive: string,\n item: string,\n) {\n const clientConfig = getMicrosoftConfiguration();\n\n return resolveWrapper<IOdspDriveItem>(\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n (authRequestInfo) => getDriveItemFromDriveAndItem(server, drive, item, authRequestInfo),\n server,\n clientConfig,\n );\n}\n"]}
1
+ {"version":3,"file":"fluidFetchSharePoint.js","sourceRoot":"","sources":["../src/fluidFetchSharePoint.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { DriverErrorType } from \"@fluidframework/driver-definitions\";\nimport {\n getChildrenByDriveItem,\n getDriveItemByServerRelativePath,\n getDriveItemFromDriveAndItem,\n IClientConfig,\n IOdspDriveItem,\n getOdspRefreshTokenFn,\n IOdspAuthRequestInfo,\n} from \"@fluidframework/odsp-doclib-utils\";\nimport {\n getMicrosoftConfiguration,\n OdspTokenManager,\n odspTokensCache,\n OdspTokenConfig,\n IOdspTokenManagerCacheKey,\n} from \"@fluidframework/tool-utils\";\nimport { fluidFetchWebNavigator } from \"./fluidFetchInit\";\nimport { getForceTokenReauth } from \"./fluidFetchArgs\";\n\nexport async function resolveWrapper<T>(\n callback: (authRequestInfo: IOdspAuthRequestInfo) => Promise<T>,\n server: string,\n clientConfig: IClientConfig,\n forceTokenReauth = false,\n forToken = false,\n): Promise<T> {\n try {\n const odspTokenManager = new OdspTokenManager(odspTokensCache);\n const tokenConfig: OdspTokenConfig = {\n type: \"browserLogin\",\n navigator: fluidFetchWebNavigator,\n };\n const tokens = await odspTokenManager.getOdspTokens(\n server,\n clientConfig,\n tokenConfig,\n undefined /* forceRefresh */,\n forceTokenReauth || getForceTokenReauth(),\n );\n\n const result = await callback({\n accessToken: tokens.accessToken,\n refreshTokenFn: getOdspRefreshTokenFn(server, clientConfig, tokens),\n });\n // If this is used for getting a token, then refresh the cache with new token.\n if (forToken) {\n const key: IOdspTokenManagerCacheKey = { isPush: false, userOrServer: server };\n await odspTokenManager.updateTokensCache(\n key, { accessToken: result as any as string, refreshToken: tokens.refreshToken });\n return result;\n }\n return result;\n } catch (e: any) {\n if (e.errorType === DriverErrorType.authorizationError && !forceTokenReauth) {\n // Re-auth\n return resolveWrapper<T>(callback, server, clientConfig, true, forToken);\n }\n throw e;\n }\n}\n\nexport async function resolveDriveItemByServerRelativePath(\n server: string,\n serverRelativePath: string,\n clientConfig: IClientConfig,\n) {\n return resolveWrapper<IOdspDriveItem>(\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n (authRequestInfo) => getDriveItemByServerRelativePath(\n server,\n serverRelativePath,\n authRequestInfo,\n false,\n ),\n server, clientConfig);\n}\n\nasync function resolveChildrenByDriveItem(\n server: string,\n folderDriveItem: IOdspDriveItem,\n clientConfig: IClientConfig,\n) {\n return resolveWrapper<IOdspDriveItem[]>(\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n (authRequestInfo) => getChildrenByDriveItem(folderDriveItem, server, authRequestInfo),\n server, clientConfig);\n}\n\nexport async function getSharepointFiles(server: string, serverRelativePath: string, recurse: boolean) {\n const clientConfig = getMicrosoftConfiguration();\n\n const fileInfo = await resolveDriveItemByServerRelativePath(server, serverRelativePath, clientConfig);\n console.log(fileInfo);\n const pendingFolder: { path: string, folder: IOdspDriveItem }[] = [];\n const files: IOdspDriveItem[] = [];\n if (fileInfo.isFolder) {\n pendingFolder.push({ path: serverRelativePath, folder: fileInfo });\n } else {\n files.push(fileInfo);\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const folderInfo = pendingFolder.shift();\n if (!folderInfo) { break; }\n const { path, folder } = folderInfo;\n const children = await resolveChildrenByDriveItem(server, folder, clientConfig);\n for (const child of children) {\n const childPath = `${path}/${child.name}`;\n if (child.isFolder) {\n if (recurse) {\n pendingFolder.push({ path: childPath, folder: child });\n }\n } else {\n files.push(child);\n }\n }\n }\n return files;\n}\n\nexport async function getSingleSharePointFile(\n server: string,\n drive: string,\n item: string,\n) {\n const clientConfig = getMicrosoftConfiguration();\n\n return resolveWrapper<IOdspDriveItem>(\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n (authRequestInfo) => getDriveItemFromDriveAndItem(server, drive, item, authRequestInfo),\n server,\n clientConfig,\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-tools/fetch-tool",
3
- "version": "0.59.1000",
3
+ "version": "0.59.2000-63294",
4
4
  "description": "Console tool to fetch Fluid data from relay service",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -29,24 +29,24 @@
29
29
  "tsfmt:fix": "tsfmt --replace"
30
30
  },
31
31
  "dependencies": {
32
- "@fluid-tools/fluidapp-odsp-urlresolver": "^0.59.1000",
33
- "@fluidframework/azure-client": "^0.59.1000",
32
+ "@fluid-tools/fluidapp-odsp-urlresolver": "0.59.2000-63294",
33
+ "@fluidframework/azure-client": "0.59.2000-63294",
34
34
  "@fluidframework/common-utils": "^0.32.1",
35
- "@fluidframework/container-runtime": "^0.59.1000",
36
- "@fluidframework/datastore": "^0.59.1000",
35
+ "@fluidframework/container-runtime": "0.59.2000-63294",
36
+ "@fluidframework/datastore": "0.59.2000-63294",
37
37
  "@fluidframework/driver-definitions": "^0.46.1000",
38
- "@fluidframework/driver-utils": "^0.59.1000",
39
- "@fluidframework/odsp-doclib-utils": "^0.59.1000",
40
- "@fluidframework/odsp-driver": "^0.59.1000",
41
- "@fluidframework/odsp-driver-definitions": "^0.59.1000",
42
- "@fluidframework/odsp-urlresolver": "^0.59.1000",
38
+ "@fluidframework/driver-utils": "0.59.2000-63294",
39
+ "@fluidframework/odsp-doclib-utils": "0.59.2000-63294",
40
+ "@fluidframework/odsp-driver": "0.59.2000-63294",
41
+ "@fluidframework/odsp-driver-definitions": "0.59.2000-63294",
42
+ "@fluidframework/odsp-urlresolver": "0.59.2000-63294",
43
43
  "@fluidframework/protocol-definitions": "^0.1028.1000",
44
- "@fluidframework/routerlicious-driver": "^0.59.1000",
45
- "@fluidframework/routerlicious-urlresolver": "^0.59.1000",
46
- "@fluidframework/runtime-definitions": "^0.59.1000",
47
- "@fluidframework/telemetry-utils": "^0.59.1000",
48
- "@fluidframework/test-client-utils": "^0.59.1000",
49
- "@fluidframework/tool-utils": "^0.59.1000"
44
+ "@fluidframework/routerlicious-driver": "0.59.2000-63294",
45
+ "@fluidframework/routerlicious-urlresolver": "0.59.2000-63294",
46
+ "@fluidframework/runtime-definitions": "0.59.2000-63294",
47
+ "@fluidframework/telemetry-utils": "0.59.2000-63294",
48
+ "@fluidframework/test-client-utils": "0.59.2000-63294",
49
+ "@fluidframework/tool-utils": "0.59.2000-63294"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@fluidframework/build-common": "^0.23.0",
@@ -60,8 +60,11 @@
60
60
  "eslint-plugin-editorconfig": "~3.2.0",
61
61
  "eslint-plugin-eslint-comments": "~3.2.0",
62
62
  "eslint-plugin-import": "~2.25.4",
63
- "eslint-plugin-no-null": "~1.0.2",
63
+ "eslint-plugin-jest": "~26.1.3",
64
+ "eslint-plugin-mocha": "~10.0.3",
65
+ "eslint-plugin-promise": "~6.0.0",
64
66
  "eslint-plugin-react": "~7.28.0",
67
+ "eslint-plugin-tsdoc": "~0.2.14",
65
68
  "eslint-plugin-unicorn": "~40.0.0",
66
69
  "rimraf": "^2.6.2",
67
70
  "typescript": "~4.1.3",
@@ -99,7 +99,7 @@ async function* loadAllSequencedMessages(
99
99
 
100
100
  try {
101
101
  await teststream.read();
102
- } catch (error) {
102
+ } catch (error: any) {
103
103
  statusCode = error.getTelemetryProperties().statusCode;
104
104
  innerMostErrorCode = error.getTelemetryProperties().innerMostErrorCode;
105
105
  // if there is gap between ops, catch the error and check it is the error we need
@@ -56,7 +56,7 @@ export async function resolveWrapper<T>(
56
56
  return result;
57
57
  }
58
58
  return result;
59
- } catch (e) {
59
+ } catch (e: any) {
60
60
  if (e.errorType === DriverErrorType.authorizationError && !forceTokenReauth) {
61
61
  // Re-auth
62
62
  return resolveWrapper<T>(callback, server, clientConfig, true, forToken);