From c5d6489d7f1eb49c8d1532b78f3d7fd6bcd29b04 Mon Sep 17 00:00:00 2001 From: Timofey Boyko Date: Tue, 2 Apr 2024 09:47:50 +0300 Subject: [PATCH] Doceditor: show access denied and file not found errors in doceditor --- ...onlyoffice-document-editor-react-1.5.1.tgz | Bin 0 -> 86969 bytes packages/doceditor/package.json | 2 +- packages/doceditor/src/components/Editor.tsx | 41 ++++++---- packages/doceditor/src/components/Root.tsx | 15 +++- .../doceditor/src/hooks/useEditorEvents.ts | 54 ++++++++------ packages/doceditor/src/hooks/useInit.ts | 7 +- packages/doceditor/src/hooks/useTheme.ts | 6 +- packages/doceditor/src/types/index.ts | 33 +++++---- packages/doceditor/src/utils/actions.ts | 64 +++++----------- packages/doceditor/src/utils/events.ts | 3 +- packages/shared/enums/index.ts | 2 + packages/shared/utils/next-ssr-helper.ts | 70 ++++++++++++++++++ yarn.lock | 10 +-- 13 files changed, 190 insertions(+), 117 deletions(-) create mode 100644 packages/doceditor/onlyoffice-document-editor-react-1.5.1.tgz create mode 100644 packages/shared/utils/next-ssr-helper.ts diff --git a/packages/doceditor/onlyoffice-document-editor-react-1.5.1.tgz b/packages/doceditor/onlyoffice-document-editor-react-1.5.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..af07e0f6d0d2c480c6a1cf4c03d3cb9a9d20eb36 GIT binary patch literal 86969 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
fnfMBWU5h!CH%_QTRm#+$Ky&PLNE_W0_usKO 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 literal 0 HcmV?d00001 diff --git a/packages/doceditor/package.json b/packages/doceditor/package.json index cd7ed60e41..f13d856fa8 100644 --- a/packages/doceditor/package.json +++ b/packages/doceditor/package.json @@ -11,7 +11,7 @@ "deploy": "shx --silent mkdir -p ../../../publish/web/editor && shx --silent mkdir -p ../../../publish/web/editor/.next && shx --silent mkdir -p ../../../publish/web/editor/config && shx cp -r config/* ../../../publish/web/editor/config && shx --silent mkdir -p ../../../publish/web/editor/node_modules && shx --silent mkdir -p ../../../publish/web/editor/.next/static && shx cp -r .next/standalone/node_modules/* ../../../publish/web/editor/node_modules && shx cp -r .next/static/* ../../../publish/web/editor/.next/static && shx cp -r .next/standalone/packages/doceditor/.next/* ../../../publish/web/editor/.next && shx cp -f server.prod.js ../../../publish/web/editor/server.js" }, "dependencies": { - "@onlyoffice/document-editor-react": "^1.5.0", + "@onlyoffice/document-editor-react": "file:./onlyoffice-document-editor-react-1.5.1.tgz", "i18next": "^20.6.1", "next": "14.0.4", "react": "^18.2.0", diff --git a/packages/doceditor/src/components/Editor.tsx b/packages/doceditor/src/components/Editor.tsx index 5679bbddb0..a47d058975 100644 --- a/packages/doceditor/src/components/Editor.tsx +++ b/packages/doceditor/src/components/Editor.tsx @@ -58,6 +58,7 @@ const Editor = ({ documentserverUrl, fileInfo, isSharingAccess, + errorMessage, t, onSDKRequestSharingSettings, onSDKRequestSaveAs, @@ -91,6 +92,7 @@ const Editor = ({ fileInfo, config, doc, + errorMessage, t, }); @@ -104,23 +106,25 @@ const Editor = ({ t, }); - const newConfig: IConfig = { - document: config.document, - documentType: config.documentType, - token: config.token, - type: config.type, - }; + const newConfig: IConfig = config + ? { + document: config.document, + documentType: config.documentType, + token: config.token, + type: config.type, + } + : {}; - newConfig.editorConfig = { ...config.editorConfig }; + if (config) newConfig.editorConfig = { ...config.editorConfig }; const search = typeof window !== "undefined" ? window.location.search : ""; const editorType = new URLSearchParams(search).get("editorType"); //if (view && newConfig.editorConfig) newConfig.editorConfig.mode = "view"; - if (editorType) config.type = editorType; + if (editorType) newConfig.type = editorType; - if (isMobile) config.type = "mobile"; + if (isMobile) newConfig.type = "mobile"; let goBack: TGoBack = {} as TGoBack; @@ -229,7 +233,7 @@ const Editor = ({ newConfig.events.onRequestSharingSettings = onSDKRequestSharingSettings; } - if (!fileInfo.providerKey) { + if (!fileInfo?.providerKey) { newConfig.events.onRequestReferenceData = onSDKRequestReferenceData; if (!IS_ZOOM) { @@ -237,16 +241,16 @@ const Editor = ({ } } - if (fileInfo.security.Rename) { + if (fileInfo?.security.Rename) { newConfig.events.onRequestRename = (obj: object) => onSDKRequestRename(obj, fileInfo.id); } - if (fileInfo.security.ReadHistory) { + if (fileInfo?.security.ReadHistory) { newConfig.events.onRequestHistory = onSDKRequestHistory; } - if (fileInfo.security.EditHistory) { + if (fileInfo?.security.EditHistory) { newConfig.events.onRequestRestore = onSDKRequestRestore; } @@ -261,7 +265,15 @@ const Editor = ({ - {!fileId ? ( + {!fileId || false ? ( ) : isShowDeepLink ? ( - ) : error && error.message === "restore-backup" ? ( + ) : error && error.message === "restore-backup" && !isSkipError ? ( - ) : error && error.message !== "unauthorized" ? ( + ) : error && error.message !== "unauthorized" && !isSkipError ? ( ) : isShowDeepLink ? null : (

- {config && documentserverUrl && fileInfo && ( + {documentserverUrl && ( { const [events, setEvents] = React.useState({}); @@ -110,7 +111,7 @@ const useEditorEvents = ({ instanceId: reference.referenceData ? reference.referenceData.instanceId : "", - fileId: fileInfo.id, + fileId: fileInfo?.id, path: reference.path || "", }; @@ -131,12 +132,14 @@ const useEditorEvents = ({ ); } }, - [fileInfo.id, t], + [fileInfo?.id, t], ); const onSDKAppReady = React.useCallback(() => { docEditor = window.DocEditor.instances[EDITOR_ID]; + if (errorMessage) return docEditor?.showMessage?.(errorMessage); + console.log("ONLYOFFICE Document Editor is ready", docEditor); const url = window.location.href; @@ -154,7 +157,7 @@ const useEditorEvents = ({ if (config?.Error) docEditor?.showMessage?.(config.Error); } } - }, [config.Error]); + }, [config?.Error, errorMessage]); const onDocumentReady = React.useCallback(() => { // console.log("onDocumentReady", arguments, { docEditor }); @@ -174,7 +177,7 @@ const useEditorEvents = ({ ["ASC", "Files", "Editor", "docEditor"], docEditor, ); //Do not remove: it's for Back button on Mobile App - }, [config.errorMessage]); + }, [config?.errorMessage]); const getBackUrl = React.useCallback(() => { if (!fileInfo) return; @@ -257,6 +260,8 @@ const useEditorEvents = ({ const onSDKRequestCreateNew = React.useCallback(() => { const defaultFileName = getDefaultFileName(true); + if (!fileInfo?.folderId) return; + createFile(fileInfo.folderId, defaultFileName ?? "") ?.then((newFile) => { const newUrl = combineUrl( @@ -271,7 +276,7 @@ const useEditorEvents = ({ .catch((e) => { toastr.error(e); }); - }, [fileInfo.folderId, getDefaultFileName]); + }, [fileInfo?.folderId, getDefaultFileName]); const getDocumentHistory = React.useCallback( (fileHistory: TEditHistory[], historyLength: number) => { @@ -287,14 +292,14 @@ const useEditorEvents = ({ changesModified.forEach((item) => { item.created = `${new Date(item.created).toLocaleString( - config.editorConfig.lang, + config?.editorConfig.lang, )}`; }); let obj = { ...(changes.length !== 0 && { changes: changesModified }), created: `${new Date(fileHistory[i].created).toLocaleString( - config.editorConfig.lang, + config?.editorConfig.lang, )}`, ...(serverVersion && { serverVersion }), key: fileHistory[i].key, @@ -310,13 +315,14 @@ const useEditorEvents = ({ } return result; }, - [config.editorConfig.lang], + [config?.editorConfig.lang], ); const onSDKRequestRestore = React.useCallback( async (event: object) => { const restoreVersion = (event as TEvent).data.version; + if (!fileInfo?.id) return; try { const updateVersions = await restoreDocumentsVersion( fileInfo.id, @@ -351,7 +357,7 @@ const useEditorEvents = ({ }); } }, - [doc, fileInfo.id, getDocumentHistory], + [doc, fileInfo?.id, getDocumentHistory], ); const onSDKRequestHistory = React.useCallback(async () => { @@ -362,6 +368,8 @@ const useEditorEvents = ({ // shareIndex > -1 ? search.substring(shareIndex + 6) : null; // const docIdx = search.indexOf("doc="); + if (!fileInfo?.id) return; + const fileHistory = await getEditHistory(fileInfo.id, doc ?? ""); const historyLength = fileHistory.length; @@ -386,7 +394,7 @@ const useEditorEvents = ({ error: `${errorMessage}`, //TODO: maybe need to display something else. }); } - }, [doc, fileInfo.id, getDocumentHistory]); + }, [doc, fileInfo?.id, getDocumentHistory]); const onSDKRequestSendNotify = React.useCallback( async (event: object) => { @@ -396,6 +404,7 @@ const useEditorEvents = ({ const comment = currEvent.data.message; const emails = currEvent.data.emails; + if (!fileInfo?.id) return; try { await sendEditorNotify( fileInfo.id, @@ -425,7 +434,7 @@ const useEditorEvents = ({ toastr.error(e as TData); } }, - [fileInfo.id, t, usersInRoom], + [fileInfo?.id, t, usersInRoom], ); const onSDKRequestUsers = React.useCallback( @@ -433,6 +442,7 @@ const useEditorEvents = ({ try { const currEvent = event as TEvent; const c = currEvent?.data?.c; + if (!fileInfo?.id) return; const users = await (c == "protect" ? getProtectUsers(fileInfo.id) : getSharedUsers(fileInfo.id)); @@ -460,7 +470,7 @@ const useEditorEvents = ({ ); } }, - [fileInfo.id, t], + [fileInfo?.id, t], ); const onSDKRequestHistoryData = React.useCallback( @@ -472,7 +482,7 @@ const useEditorEvents = ({ // const shareIndex = search.indexOf("share="); // const requestToken = // shareIndex > -1 ? search.substring(shareIndex + 6) : null; - + if (!fileInfo?.id) return; const versionDifference = await getEditDiff( fileInfo.id, version, @@ -520,7 +530,7 @@ const useEditorEvents = ({ }); } }, - [doc, fileInfo.id], + [doc, fileInfo?.id], ); const onDocumentStateChange = React.useCallback( @@ -533,21 +543,21 @@ const useEditorEvents = ({ docSaved ? setDocumentTitle( docTitle, - config.document.fileType, + config?.document.fileType ?? "", documentReady, - successAuth, + successAuth ?? false, setDocTitle, ) : setDocumentTitle( `*${docTitle}`, - config.document.fileType, + config?.document.fileType ?? "", documentReady, - successAuth, + successAuth ?? false, setDocTitle, ); }, 500); }, - [config.document.fileType, docSaved, docTitle, documentReady, successAuth], + [config?.document.fileType, docSaved, docTitle, documentReady, successAuth], ); const onMetaChange = React.useCallback( @@ -558,15 +568,15 @@ const useEditorEvents = ({ if (newTitle && newTitle !== docTitle) { setDocumentTitle( newTitle, - config.document.fileType, + config?.document.fileType ?? "", documentReady, - successAuth, + successAuth ?? false, setDocTitle, ); setDocTitle(newTitle); } }, - [config.document.fileType, docTitle, documentReady, successAuth], + [config?.document.fileType, docTitle, documentReady, successAuth], ); const onMakeActionLink = React.useCallback((event: object) => { diff --git a/packages/doceditor/src/hooks/useInit.ts b/packages/doceditor/src/hooks/useInit.ts index 4b5ca4b38a..29f22119ba 100644 --- a/packages/doceditor/src/hooks/useInit.ts +++ b/packages/doceditor/src/hooks/useInit.ts @@ -57,16 +57,16 @@ const useInit = ({ config.document.title, config.document.fileType, documentReady, - successAuth, + successAuth ?? false, setDocTitle, ); }, [config, documentReady, fileInfo, setDocTitle, successAuth]); React.useEffect(() => { - if (config && IS_DESKTOP_EDITOR) { + if (config && IS_DESKTOP_EDITOR && user && fileInfo?.id) { initDesktop(config, user, fileInfo.id, t); } - }, [config, fileInfo.id, t, user]); + }, [config, fileInfo?.id, t, user]); React.useEffect(() => { try { @@ -91,4 +91,3 @@ const useInit = ({ }; export default useInit; - diff --git a/packages/doceditor/src/hooks/useTheme.ts b/packages/doceditor/src/hooks/useTheme.ts index 742a95931c..0a9925d5b8 100644 --- a/packages/doceditor/src/hooks/useTheme.ts +++ b/packages/doceditor/src/hooks/useTheme.ts @@ -40,7 +40,7 @@ export interface UseThemeProps { i18n?: i18n; } -const useTheme = ({ user, i18n = {} }: UseThemeProps) => { +const useTheme = ({ user, i18n }: UseThemeProps) => { const [currentColorTheme, setCurrentColorTheme] = React.useState({} as TColorScheme); @@ -67,7 +67,7 @@ const useTheme = ({ user, i18n = {} }: UseThemeProps) => { const getUserTheme = React.useCallback(() => { if (!user?.theme) return; let theme = user.theme; - const interfaceDirection = i18n.dir ? i18n.dir() : "ltr"; + const interfaceDirection = i18n?.dir ? i18n.dir() : "ltr"; if (user.theme === ThemeKeys.SystemStr) theme = SYSTEM_THEME; @@ -86,7 +86,7 @@ const useTheme = ({ user, i18n = {} }: UseThemeProps) => { currentColorScheme: currentColorTheme, interfaceDirection, }); - }, [currentColorTheme, user?.theme, i18n.dir]); + }, [user?.theme, i18n, currentColorTheme]); React.useEffect(() => { getCurrentColorTheme(); diff --git a/packages/doceditor/src/types/index.ts b/packages/doceditor/src/types/index.ts index 0683b92e31..1c65b7840d 100644 --- a/packages/doceditor/src/types/index.ts +++ b/packages/doceditor/src/types/index.ts @@ -170,7 +170,8 @@ export interface IInitialConfig { export type TError = { message: "unauthorized" | "restore-backup" | string; - status?: number | string; + status?: "not-found" | "access-denied" | number | string; + type?: string; }; export type TResponse = @@ -200,14 +201,15 @@ export type TResponse = }; export type EditorProps = { - config: IInitialConfig; - successAuth: boolean; - user: TUser; - view: boolean; + config?: IInitialConfig; + successAuth?: boolean; + user?: TUser; + view?: boolean; doc?: string; documentserverUrl: string; - fileInfo: TFile; - isSharingAccess: boolean; + fileInfo?: TFile; + isSharingAccess?: boolean; + errorMessage?: string; t: TTranslation | null; onSDKRequestSharingSettings: () => void; onSDKRequestSaveAs: (event: object) => void; @@ -316,19 +318,20 @@ export interface UseSocketHelperProps { } export interface UseEventsProps { - user: TUser; - successAuth: boolean; - fileInfo: TFile; - config: IInitialConfig; + user?: TUser; + successAuth?: boolean; + fileInfo?: TFile; + config?: IInitialConfig; doc?: string; + errorMessage?: string; t?: Nullable; } export interface UseInitProps { - config: IInitialConfig; - successAuth: boolean; - fileInfo: TFile; - user: TUser; + config?: IInitialConfig; + successAuth?: boolean; + fileInfo?: TFile; + user?: TUser; t: Nullable; setDocTitle: (value: string) => void; diff --git a/packages/doceditor/src/utils/actions.ts b/packages/doceditor/src/utils/actions.ts index 6abfa5b9b2..f193a3eaf7 100644 --- a/packages/doceditor/src/utils/actions.ts +++ b/packages/doceditor/src/utils/actions.ts @@ -29,55 +29,16 @@ import { headers } from "next/headers"; import { TenantStatus, EditorConfigErrorType } from "@docspace/shared/enums"; +import { + createRequest, + getBaseUrl, +} from "@docspace/shared/utils/next-ssr-helper"; import type { TDocServiceLocation } from "@docspace/shared/api/files/types"; import type { IInitialConfig, TCatchError, TError, TResponse } from "@/types"; import { isTemplateFile } from "."; -const API_PREFIX = "api/2.0"; - -export const getBaseUrl = () => { - const hdrs = headers(); - - const host = hdrs.get("x-forwarded-host"); - const proto = hdrs.get("x-forwarded-proto"); - - const baseURL = `${proto}://${host}`; - - return baseURL; -}; - -export const getAPIUrl = () => { - const baseUrl = getBaseUrl(); - const baseAPIUrl = `${baseUrl}/${API_PREFIX}`; - - return baseAPIUrl; -}; - -export const createRequest = ( - paths: string[], - newHeaders: [string, string][], - method: string, - body?: string, -) => { - const hdrs = new Headers(headers()); - - const apiURL = getAPIUrl(); - - newHeaders.forEach((hdr) => { - if (hdr[0]) hdrs.set(hdr[0], hdr[1]); - }); - - const urls = paths.map((path) => `${apiURL}${path}`); - - const requests = urls.map( - (url) => new Request(url, { headers: hdrs, method, body }), - ); - - return requests; -}; - export async function getErrorData() { const hdrs = headers(); const cookie = hdrs.get("cookie"); @@ -138,7 +99,7 @@ const processFillFormDraft = async ( if (!response.ok) return; - const { response: formUrl, ...rest } = await response.json(); + const { response: formUrl } = await response.json(); const basePath = getBaseUrl(); const url = new URL(basePath + formUrl); @@ -405,22 +366,33 @@ export async function getData( console.log("initDocEditor failed", config.error); + const status = + config.error.type === EditorConfigErrorType.NotFoundScope + ? "not-found" + : config.error.type === EditorConfigErrorType.AccessDeniedScope + ? "access-denied" + : undefined; + + const message = status ? config.error.message : undefined; + const response: TResponse = { error: user || share ? config.error.type === EditorConfigErrorType.LinkScope - ? { message: "unauthorized" } + ? { message: message ?? "unauthorized", status } : config.error - : { message: "unauthorized" }, + : { message: message ?? "unauthorized", status }, user: user?.response, settings: settings?.response, fileId, + editorUrl: editorUrl.response, }; return response; } catch (e) { const err = e as TCatchError; console.error("initDocEditor failed", err); + let message = ""; if (typeof err === "string") message = err; else diff --git a/packages/doceditor/src/utils/events.ts b/packages/doceditor/src/utils/events.ts index 78b22da292..1d160ef045 100644 --- a/packages/doceditor/src/utils/events.ts +++ b/packages/doceditor/src/utils/events.ts @@ -72,7 +72,7 @@ export const onSDKRequestHistoryClose = () => { document.location.reload(); }; -export const onSDKRequestEditRights = async (fileInfo: TFile) => { +export const onSDKRequestEditRights = async (fileInfo?: TFile) => { console.log("ONLYOFFICE Document Editor requests editing rights"); const url = window.location.href; @@ -106,4 +106,3 @@ export const onSDKRequestRename = async ( const title = (event as TRenameEvent).data; await updateFile(id, title); }; - diff --git a/packages/shared/enums/index.ts b/packages/shared/enums/index.ts index b47d62978f..9318181c39 100644 --- a/packages/shared/enums/index.ts +++ b/packages/shared/enums/index.ts @@ -510,4 +510,6 @@ export const enum WhiteLabelLogoType { export const enum EditorConfigErrorType { System = "System.Exception", LinkScope = "ASC.Files.Core.Exceptions.LinkScopeException", + NotFoundScope = "System.IO.FileNotFoundException", + AccessDeniedScope = "System.Security.SecurityException", } diff --git a/packages/shared/utils/next-ssr-helper.ts b/packages/shared/utils/next-ssr-helper.ts new file mode 100644 index 0000000000..eecc4c91cd --- /dev/null +++ b/packages/shared/utils/next-ssr-helper.ts @@ -0,0 +1,70 @@ +// (c) Copyright Ascensio System SIA 2009-2024 +// +// This program is a free software product. +// You can redistribute it and/or modify it under the terms +// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software +// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended +// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of +// any third-party rights. +// +// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see +// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html +// +// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021. +// +// The interactive user interfaces in modified source and object code versions of the Program must +// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3. +// +// Pursuant to Section 7(b) of the License you must retain the original Product logo when +// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under +// trademark law for use of our trademarks. +// +// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing +// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 +// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + +import { headers } from "next/headers"; + +const API_PREFIX = "api/2.0"; + +export const getBaseUrl = () => { + const hdrs = headers(); + + const host = hdrs.get("x-forwarded-host"); + const proto = hdrs.get("x-forwarded-proto"); + + const baseURL = `${proto}://${host}`; + + return baseURL; +}; + +export const getAPIUrl = () => { + const baseUrl = getBaseUrl(); + const baseAPIUrl = `${baseUrl}/${API_PREFIX}`; + + return baseAPIUrl; +}; + +export const createRequest = ( + paths: string[], + newHeaders: [string, string][], + method: string, + body?: string, +) => { + const hdrs = new Headers(headers()); + + const apiURL = getAPIUrl(); + + newHeaders.forEach((hdr) => { + if (hdr[0]) hdrs.set(hdr[0], hdr[1]); + }); + + const urls = paths.map((path) => `${apiURL}${path}`); + + const requests = urls.map( + (url) => new Request(url, { headers: hdrs, method, body }), + ); + + return requests; +}; diff --git a/yarn.lock b/yarn.lock index 292b59ab7f..a36f748678 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3163,7 +3163,7 @@ __metadata: version: 0.0.0-use.local resolution: "@docspace/doceditor@workspace:packages/doceditor" dependencies: - "@onlyoffice/document-editor-react": "npm:^1.5.0" + "@onlyoffice/document-editor-react": "file:./onlyoffice-document-editor-react-1.5.1.tgz" "@svgr/webpack": "npm:^8.1.0" "@types/node": "npm:^20" "@types/react": "npm:^18" @@ -5224,15 +5224,15 @@ __metadata: languageName: node linkType: hard -"@onlyoffice/document-editor-react@npm:^1.5.0": - version: 1.5.0 - resolution: "@onlyoffice/document-editor-react@npm:1.5.0" +"@onlyoffice/document-editor-react@file:./onlyoffice-document-editor-react-1.5.1.tgz::locator=%40docspace%2Fdoceditor%40workspace%3Apackages%2Fdoceditor": + version: 1.5.1 + resolution: "@onlyoffice/document-editor-react@file:./onlyoffice-document-editor-react-1.5.1.tgz#./onlyoffice-document-editor-react-1.5.1.tgz::hash=0845a7&locator=%40docspace%2Fdoceditor%40workspace%3Apackages%2Fdoceditor" dependencies: lodash: "npm:4.17.21" peerDependencies: react: ^16.9.0 || ^17 || ^18 react-dom: ^16.9.0 || ^17 || ^18 - checksum: 2214ba9982f70c7facbcd2b778bfaf92d90ff4fd71dd36697d2ac7f15b9a5d271872954a6fac84db04c16e9976ae20c7196586bef34addde7b65ce19e8a379b4 + checksum: d7f1ac9ed3510484a8622da828d4a5edad127d4f8af66cd55990253557ad10dc0100b3fb8b39e696a00ee51e3ca9b64f7c031d50ad540f37cd3bdb7d8cb0f8e0 languageName: node linkType: hard