@verdaccio/ui-components 5.0.0-next-9.19 → 5.0.0-next-9.21
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.
- package/build/api/use-data-mutation.js +1 -4
- package/build/api/use-data-mutation.js.map +1 -1
- package/build/api/use-data-mutation.mjs +1 -4
- package/build/api/use-data-mutation.mjs.map +1 -1
- package/build/api/use-data.d.ts +1 -0
- package/build/api/use-data.js +3 -2
- package/build/api/use-data.js.map +1 -1
- package/build/api/use-data.mjs +3 -3
- package/build/api/use-data.mjs.map +1 -1
- package/build/components/ActionBar/ActionBar.js +4 -2
- package/build/components/ActionBar/ActionBar.js.map +1 -1
- package/build/components/ActionBar/ActionBar.mjs +4 -2
- package/build/components/ActionBar/ActionBar.mjs.map +1 -1
- package/build/components/ActionBar/ActionBarAction.js +1 -1
- package/build/components/ActionBar/ActionBarAction.mjs +1 -1
- package/build/components/AppRoute/AppRoute.js +13 -0
- package/build/components/AppRoute/AppRoute.js.map +1 -1
- package/build/components/AppRoute/AppRoute.mjs +13 -0
- package/build/components/AppRoute/AppRoute.mjs.map +1 -1
- package/build/components/Author/Author.js +1 -1
- package/build/components/Author/Author.mjs +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.js +5 -0
- package/build/components/CopyClipboard/CopyToClipBoard.js.map +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.mjs +5 -0
- package/build/components/CopyClipboard/CopyToClipBoard.mjs.map +1 -1
- package/build/components/CopyClipboard/utils.js +14 -1
- package/build/components/CopyClipboard/utils.js.map +1 -1
- package/build/components/CopyClipboard/utils.mjs +14 -1
- package/build/components/CopyClipboard/utils.mjs.map +1 -1
- package/build/components/Dependencies/Dependencies.js +2 -1
- package/build/components/Dependencies/Dependencies.js.map +1 -1
- package/build/components/Dependencies/Dependencies.mjs +2 -1
- package/build/components/Dependencies/Dependencies.mjs.map +1 -1
- package/build/components/Dependencies/DependencyBlock.js +1 -1
- package/build/components/Dependencies/DependencyBlock.mjs +1 -1
- package/build/components/Developers/Title.js +1 -1
- package/build/components/Developers/Title.mjs +1 -1
- package/build/components/Developers/get-unique-developer-values.js +2 -1
- package/build/components/Developers/get-unique-developer-values.js.map +1 -1
- package/build/components/Developers/get-unique-developer-values.mjs +2 -1
- package/build/components/Developers/get-unique-developer-values.mjs.map +1 -1
- package/build/components/Distribution/Dist.js +3 -3
- package/build/components/Distribution/Dist.js.map +1 -1
- package/build/components/Distribution/Dist.mjs +3 -3
- package/build/components/Distribution/Dist.mjs.map +1 -1
- package/build/components/Engines/Engines.js +1 -1
- package/build/components/Engines/Engines.mjs +1 -1
- package/build/components/Forbidden/Forbidden.js +1 -1
- package/build/components/Forbidden/Forbidden.mjs +1 -1
- package/build/components/FundButton/FundButton.js +4 -3
- package/build/components/FundButton/FundButton.js.map +1 -1
- package/build/components/FundButton/FundButton.mjs +4 -3
- package/build/components/FundButton/FundButton.mjs.map +1 -1
- package/build/components/GenericError/GenericError.d.ts +3 -0
- package/build/components/GenericError/GenericError.js +60 -0
- package/build/components/GenericError/GenericError.js.map +1 -0
- package/build/components/GenericError/GenericError.mjs +54 -0
- package/build/components/GenericError/GenericError.mjs.map +1 -0
- package/build/components/GenericError/index.d.ts +1 -0
- package/build/components/GenericError/index.js +2 -0
- package/build/components/GenericError/index.mjs +2 -0
- package/build/components/Help/Help.js +1 -1
- package/build/components/Help/Help.mjs +1 -1
- package/build/components/Install/Install.js +1 -1
- package/build/components/Install/Install.mjs +1 -1
- package/build/components/Install/InstallListItem.js +2 -2
- package/build/components/Install/InstallListItem.js.map +1 -1
- package/build/components/Install/InstallListItem.mjs +2 -2
- package/build/components/Install/InstallListItem.mjs.map +1 -1
- package/build/components/Keywords/KeywordListItems.js +1 -1
- package/build/components/Keywords/KeywordListItems.js.map +1 -1
- package/build/components/Keywords/KeywordListItems.mjs +1 -1
- package/build/components/Keywords/KeywordListItems.mjs.map +1 -1
- package/build/components/Keywords/Keywords.js +2 -2
- package/build/components/Keywords/Keywords.js.map +1 -1
- package/build/components/Keywords/Keywords.mjs +2 -2
- package/build/components/Keywords/Keywords.mjs.map +1 -1
- package/build/components/LoginDialog/LoginDialogCloseButton.js +1 -1
- package/build/components/LoginDialog/LoginDialogCloseButton.mjs +1 -1
- package/build/components/LoginDialog/LoginDialogForm.js +2 -1
- package/build/components/LoginDialog/LoginDialogForm.js.map +1 -1
- package/build/components/LoginDialog/LoginDialogForm.mjs +2 -1
- package/build/components/LoginDialog/LoginDialogForm.mjs.map +1 -1
- package/build/components/LoginForm/Login.d.ts +1 -0
- package/build/components/LoginForm/Login.js +6 -4
- package/build/components/LoginForm/Login.js.map +1 -1
- package/build/components/LoginForm/Login.mjs +9 -7
- package/build/components/LoginForm/Login.mjs.map +1 -1
- package/build/components/LoginForm/PasswordField.js +4 -6
- package/build/components/LoginForm/PasswordField.js.map +1 -1
- package/build/components/LoginForm/PasswordField.mjs +4 -6
- package/build/components/LoginForm/PasswordField.mjs.map +1 -1
- package/build/components/LoginForm/UsernameField.js +4 -6
- package/build/components/LoginForm/UsernameField.js.map +1 -1
- package/build/components/LoginForm/UsernameField.mjs +4 -6
- package/build/components/LoginForm/UsernameField.mjs.map +1 -1
- package/build/components/LoginForm/styles.js +1 -1
- package/build/components/LoginForm/styles.mjs +1 -1
- package/build/components/LoginForm/useLoginForm.js +13 -3
- package/build/components/LoginForm/useLoginForm.js.map +1 -1
- package/build/components/LoginForm/useLoginForm.mjs +14 -4
- package/build/components/LoginForm/useLoginForm.mjs.map +1 -1
- package/build/components/NoItems/NoItems.js +2 -2
- package/build/components/NoItems/NoItems.mjs +1 -1
- package/build/components/NotFound/NotFound.js +1 -1
- package/build/components/NotFound/NotFound.mjs +1 -1
- package/build/components/Package/Package.d.ts +1 -1
- package/build/components/Package/Package.js +28 -29
- package/build/components/Package/Package.js.map +1 -1
- package/build/components/Package/Package.mjs +29 -30
- package/build/components/Package/Package.mjs.map +1 -1
- package/build/components/Person/Person.js +1 -1
- package/build/components/Person/Person.js.map +1 -1
- package/build/components/Person/Person.mjs +1 -1
- package/build/components/Person/Person.mjs.map +1 -1
- package/build/components/RawViewer/RawViewer.js +1 -1
- package/build/components/RawViewer/RawViewer.mjs +1 -1
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.js +1 -1
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.mjs +1 -1
- package/build/components/Repository/Repository.js +5 -8
- package/build/components/Repository/Repository.js.map +1 -1
- package/build/components/Repository/Repository.mjs +5 -8
- package/build/components/Repository/Repository.mjs.map +1 -1
- package/build/components/Search/AutoComplete/AutoComplete.d.ts +1 -0
- package/build/components/Search/AutoComplete/AutoComplete.js +4 -4
- package/build/components/Search/AutoComplete/AutoComplete.js.map +1 -1
- package/build/components/Search/AutoComplete/AutoComplete.mjs +4 -4
- package/build/components/Search/AutoComplete/AutoComplete.mjs.map +1 -1
- package/build/components/Search/Search.js +12 -4
- package/build/components/Search/Search.js.map +1 -1
- package/build/components/Search/Search.mjs +13 -5
- package/build/components/Search/Search.mjs.map +1 -1
- package/build/components/Search/SearchItem.js +1 -1
- package/build/components/Search/SearchItem.mjs +1 -1
- package/build/components/SettingsMenu/SettingsMenu.js +1 -1
- package/build/components/SettingsMenu/SettingsMenu.mjs +1 -1
- package/build/components/SideBarTitle/SideBarTitle.js +2 -2
- package/build/components/SideBarTitle/SideBarTitle.js.map +1 -1
- package/build/components/SideBarTitle/SideBarTitle.mjs +2 -2
- package/build/components/SideBarTitle/SideBarTitle.mjs.map +1 -1
- package/build/components/UpLinks/UpLinks.js +1 -1
- package/build/components/UpLinks/UpLinks.mjs +1 -1
- package/build/components/Versions/HistoryList.js +2 -2
- package/build/components/Versions/HistoryList.js.map +1 -1
- package/build/components/Versions/HistoryList.mjs +2 -2
- package/build/components/Versions/HistoryList.mjs.map +1 -1
- package/build/components/Versions/Versions.js +22 -21
- package/build/components/Versions/Versions.js.map +1 -1
- package/build/components/Versions/Versions.mjs +22 -21
- package/build/components/Versions/Versions.mjs.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +4 -0
- package/build/index.mjs +4 -2
- package/build/pages/Stage/StageDetail.d.ts +2 -0
- package/build/pages/Stage/StageDetail.js +8 -0
- package/build/pages/Stage/StageDetail.js.map +1 -0
- package/build/pages/Stage/StageDetail.mjs +8 -0
- package/build/pages/Stage/StageDetail.mjs.map +1 -0
- package/build/pages/Stage/StageList.d.ts +2 -0
- package/build/pages/Stage/StageList.js +8 -0
- package/build/pages/Stage/StageList.js.map +1 -0
- package/build/pages/Stage/StageList.mjs +8 -0
- package/build/pages/Stage/StageList.mjs.map +1 -0
- package/build/pages/Stage/index.d.ts +2 -0
- package/build/pages/Version/Version.js +4 -1
- package/build/pages/Version/Version.js.map +1 -1
- package/build/pages/Version/Version.mjs +4 -1
- package/build/pages/Version/Version.mjs.map +1 -1
- package/build/providers/AuthProvider/AuthProvider.js +9 -7
- package/build/providers/AuthProvider/AuthProvider.js.map +1 -1
- package/build/providers/AuthProvider/AuthProvider.mjs +10 -8
- package/build/providers/AuthProvider/AuthProvider.mjs.map +1 -1
- package/build/providers/AuthProvider/utils.d.ts +12 -0
- package/build/providers/AuthProvider/utils.js +22 -0
- package/build/providers/AuthProvider/utils.js.map +1 -1
- package/build/providers/AuthProvider/utils.mjs +21 -2
- package/build/providers/AuthProvider/utils.mjs.map +1 -1
- package/build/providers/DownloadProvider/DownloadProvider.d.ts +1 -0
- package/build/providers/DownloadProvider/DownloadProvider.js +27 -4
- package/build/providers/DownloadProvider/DownloadProvider.js.map +1 -1
- package/build/providers/DownloadProvider/DownloadProvider.mjs +27 -6
- package/build/providers/DownloadProvider/DownloadProvider.mjs.map +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.js +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.js.map +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.mjs +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.mjs.map +1 -1
- package/build/providers/SearchProvider/SearchProvider.d.ts +1 -0
- package/build/providers/SearchProvider/SearchProvider.js +8 -6
- package/build/providers/SearchProvider/SearchProvider.js.map +1 -1
- package/build/providers/SearchProvider/SearchProvider.mjs +8 -6
- package/build/providers/SearchProvider/SearchProvider.mjs.map +1 -1
- package/build/providers/TranslatorProvider/TranslatorProvider.js +5 -3
- package/build/providers/TranslatorProvider/TranslatorProvider.js.map +1 -1
- package/build/providers/TranslatorProvider/TranslatorProvider.mjs +5 -3
- package/build/providers/TranslatorProvider/TranslatorProvider.mjs.map +1 -1
- package/build/providers/VersionProvider/VersionProvider.js +3 -3
- package/build/providers/VersionProvider/VersionProvider.js.map +1 -1
- package/build/providers/VersionProvider/VersionProvider.mjs +3 -3
- package/build/providers/VersionProvider/VersionProvider.mjs.map +1 -1
- package/build/sections/Detail/Tabs.js +1 -1
- package/build/sections/Detail/Tabs.mjs +1 -1
- package/build/sections/Footer/Footer.js +1 -1
- package/build/sections/Footer/Footer.mjs +1 -1
- package/build/sections/Header/Header.d.ts +0 -1
- package/build/sections/Header/Header.js +16 -14
- package/build/sections/Header/Header.js.map +1 -1
- package/build/sections/Header/Header.mjs +17 -15
- package/build/sections/Header/Header.mjs.map +1 -1
- package/build/sections/Header/HeaderGreetings.js +1 -1
- package/build/sections/Header/HeaderGreetings.mjs +1 -1
- package/build/sections/Header/HeaderMenu.js +26 -7
- package/build/sections/Header/HeaderMenu.js.map +1 -1
- package/build/sections/Header/HeaderMenu.mjs +26 -7
- package/build/sections/Header/HeaderMenu.mjs.map +1 -1
- package/build/sections/Header/HeaderRight.js +1 -1
- package/build/sections/Header/HeaderRight.mjs +1 -1
- package/build/sections/Header/HeaderSettingsDialog.js +1 -1
- package/build/sections/Header/HeaderSettingsDialog.mjs +1 -1
- package/build/sections/Header/LanguageSwitch.js +1 -1
- package/build/sections/Header/LanguageSwitch.mjs +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs +1 -1
- package/build/sections/Home/Home.js +4 -3
- package/build/sections/Home/Home.js.map +1 -1
- package/build/sections/Home/Home.mjs +5 -4
- package/build/sections/Home/Home.mjs.map +1 -1
- package/build/sections/Security/AddUser.js +33 -18
- package/build/sections/Security/AddUser.js.map +1 -1
- package/build/sections/Security/AddUser.mjs +37 -22
- package/build/sections/Security/AddUser.mjs.map +1 -1
- package/build/sections/Security/ChangePassword.js +17 -15
- package/build/sections/Security/ChangePassword.js.map +1 -1
- package/build/sections/Security/ChangePassword.mjs +19 -17
- package/build/sections/Security/ChangePassword.mjs.map +1 -1
- package/build/sections/Security/Login.js +51 -35
- package/build/sections/Security/Login.js.map +1 -1
- package/build/sections/Security/Login.mjs +54 -38
- package/build/sections/Security/Login.mjs.map +1 -1
- package/build/sections/Security/Success.js +28 -24
- package/build/sections/Security/Success.js.map +1 -1
- package/build/sections/Security/Success.mjs +29 -25
- package/build/sections/Security/Success.mjs.map +1 -1
- package/build/sections/Stage/StageActions.d.ts +15 -0
- package/build/sections/Stage/StageActions.js +101 -0
- package/build/sections/Stage/StageActions.js.map +1 -0
- package/build/sections/Stage/StageActions.mjs +99 -0
- package/build/sections/Stage/StageActions.mjs.map +1 -0
- package/build/sections/Stage/StageDetail.d.ts +3 -0
- package/build/sections/Stage/StageDetail.js +110 -0
- package/build/sections/Stage/StageDetail.js.map +1 -0
- package/build/sections/Stage/StageDetail.mjs +108 -0
- package/build/sections/Stage/StageDetail.mjs.map +1 -0
- package/build/sections/Stage/StageList.d.ts +3 -0
- package/build/sections/Stage/StageList.js +153 -0
- package/build/sections/Stage/StageList.js.map +1 -0
- package/build/sections/Stage/StageList.mjs +151 -0
- package/build/sections/Stage/StageList.mjs.map +1 -0
- package/build/sections/Stage/index.d.ts +6 -0
- package/build/sections/Stage/index.js +13 -0
- package/build/sections/Stage/index.mjs +6 -0
- package/build/sections/Stage/types.d.ts +22 -0
- package/build/sections/Stage/useRequireSession.d.ts +14 -0
- package/build/sections/Stage/useRequireSession.js +33 -0
- package/build/sections/Stage/useRequireSession.js.map +1 -0
- package/build/sections/Stage/useRequireSession.mjs +33 -0
- package/build/sections/Stage/useRequireSession.mjs.map +1 -0
- package/build/sections/Stage/useStage.d.ts +34 -0
- package/build/sections/Stage/useStage.js +71 -0
- package/build/sections/Stage/useStage.js.map +1 -0
- package/build/sections/Stage/useStage.mjs +65 -0
- package/build/sections/Stage/useStage.mjs.map +1 -0
- package/build/store/api.js +7 -4
- package/build/store/api.js.map +1 -1
- package/build/store/api.mjs +7 -4
- package/build/store/api.mjs.map +1 -1
- package/build/types/packageMeta.d.ts +3 -2
- package/build/utils/cli-utils.js +2 -2
- package/build/utils/cli-utils.js.map +1 -1
- package/build/utils/cli-utils.mjs +2 -2
- package/build/utils/cli-utils.mjs.map +1 -1
- package/build/utils/index.js +1 -0
- package/build/utils/index.mjs +2 -2
- package/build/utils/routes.d.ts +5 -1
- package/build/utils/routes.js +4 -0
- package/build/utils/routes.js.map +1 -1
- package/build/utils/routes.mjs +4 -0
- package/build/utils/routes.mjs.map +1 -1
- package/build/utils/schemas.d.ts +1 -0
- package/build/utils/schemas.js +4 -4
- package/build/utils/schemas.js.map +1 -1
- package/build/utils/schemas.mjs +4 -4
- package/build/utils/schemas.mjs.map +1 -1
- package/build/utils/session-id.d.ts +8 -0
- package/build/utils/session-id.js +26 -0
- package/build/utils/session-id.js.map +1 -0
- package/build/utils/session-id.mjs +26 -0
- package/build/utils/session-id.mjs.map +1 -0
- package/build/utils/token.d.ts +1 -0
- package/build/utils/token.js +12 -8
- package/build/utils/token.js.map +1 -1
- package/build/utils/token.mjs +12 -9
- package/build/utils/token.mjs.map +1 -1
- package/build/utils/url.js +1 -1
- package/build/utils/url.js.map +1 -1
- package/build/utils/url.mjs +1 -1
- package/build/utils/url.mjs.map +1 -1
- package/build/utils/utils.d.ts +10 -0
- package/build/utils/utils.js +26 -0
- package/build/utils/utils.js.map +1 -1
- package/build/utils/utils.mjs +25 -1
- package/build/utils/utils.mjs.map +1 -1
- package/package.json +6 -6
package/build/store/api.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.mjs","names":[],"sources":["../../src/store/api.ts"],"sourcesContent":["import storage from './storage';\n\nexport class CustomError extends Error {\n code: number;\n\n constructor(message: string, code?: number) {\n super(message);\n this.name = 'CustomError';\n this.code = code ?? 500;\n }\n}\n\n/**\n * Handles response according to content type\n * @param {object} response\n * @returns {promise}\n */\nexport function handleResponseType(response: Response): Promise<[boolean, any, number]> {\n if (response.headers) {\n const contentType = response.headers.get('Content-Type');\n if (contentType?.includes('application/pdf')) {\n return Promise.all([response.ok, response.blob(), response.status]);\n }\n if (contentType?.includes('application/json')) {\n return Promise.all([response.ok, response.json(), response.status]);\n }\n // it includes all text types\n if (contentType?.includes('text/')) {\n return Promise.all([response.ok, response.text(), response.status]);\n }\n\n // unfortunately on download files there is no header available\n if (response.url && response.url.endsWith('.tgz') === true) {\n return Promise.all([response.ok, response.blob(), response.status]);\n }\n }\n\n // error handling\n return Promise.all([response.ok, response.text(), response.status]);\n}\n\nconst AuthHeader = 'Authorization';\n\nclass API {\n public request<T>(\n url: string,\n method = 'GET',\n options: RequestInit = { headers: {} }\n ): Promise<T> {\n const token = storage.getItem('token');\n const headers = new Headers(options.headers);\n\n if (token && headers.has(AuthHeader) === false) {\n headers.set(AuthHeader, `Bearer ${token}`);\n
|
|
1
|
+
{"version":3,"file":"api.mjs","names":[],"sources":["../../src/store/api.ts"],"sourcesContent":["import storage from './storage';\n\nexport class CustomError extends Error {\n code: number;\n\n constructor(message: string, code?: number) {\n super(message);\n this.name = 'CustomError';\n this.code = code ?? 500;\n }\n}\n\n/**\n * Handles response according to content type\n * @param {object} response\n * @returns {promise}\n */\nexport function handleResponseType(response: Response): Promise<[boolean, any, number]> {\n if (response.headers) {\n const contentType = response.headers.get('Content-Type');\n if (contentType?.includes('application/pdf')) {\n return Promise.all([response.ok, response.blob(), response.status]);\n }\n // binary payloads (e.g. staged tarballs, served without a .tgz url) must\n // never be decoded as text: invalid utf-8 bytes become U+FFFD and the\n // downloaded archive is corrupted\n if (\n contentType?.includes('application/octet-stream') ||\n contentType?.includes('application/gzip')\n ) {\n return Promise.all([response.ok, response.blob(), response.status]);\n }\n if (contentType?.includes('application/json')) {\n return Promise.all([response.ok, response.json(), response.status]);\n }\n // it includes all text types\n if (contentType?.includes('text/')) {\n return Promise.all([response.ok, response.text(), response.status]);\n }\n\n // unfortunately on download files there is no header available\n if (response.url && response.url.endsWith('.tgz') === true) {\n return Promise.all([response.ok, response.blob(), response.status]);\n }\n }\n\n // error handling\n return Promise.all([response.ok, response.text(), response.status]);\n}\n\nconst AuthHeader = 'Authorization';\n\nclass API {\n public request<T>(\n url: string,\n method = 'GET',\n options: RequestInit = { headers: {} }\n ): Promise<T> {\n const token = storage.getItem('token');\n const headers = new Headers(options.headers);\n\n if (token && headers.has(AuthHeader) === false) {\n headers.set(AuthHeader, `Bearer ${token}`);\n }\n\n headers.set('x-client', 'verdaccio-ui');\n // assign unconditionally: doing it only inside the token branch dropped\n // the x-client header for anonymous requests\n options.headers = headers;\n\n return new Promise((resolve, reject) => {\n fetch(url, {\n method,\n credentials: 'same-origin',\n signal: options.signal,\n ...options,\n })\n .then(handleResponseType)\n .then((response) => {\n const [ok, data, status] = response;\n if (ok === true) {\n resolve(data);\n } else {\n const message =\n typeof data === 'string' ? data : (data?.error ?? data?.message ?? 'Unknown error');\n reject(new CustomError(message, status));\n }\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n}\n\nexport default new API();\n"],"mappings":";;AAEA,IAAa,cAAb,cAAiC,MAAM;CACrC;CAEA,YAAY,SAAiB,MAAe;EAC1C,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,OAAO,QAAQ;CACtB;AACF;;;;;;AAOA,SAAgB,mBAAmB,UAAqD;CACtF,IAAI,SAAS,SAAS;EACpB,MAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;EACvD,IAAI,aAAa,SAAS,iBAAiB,GACzC,OAAO,QAAQ,IAAI;GAAC,SAAS;GAAI,SAAS,KAAK;GAAG,SAAS;EAAM,CAAC;EAKpE,IACE,aAAa,SAAS,0BAA0B,KAChD,aAAa,SAAS,kBAAkB,GAExC,OAAO,QAAQ,IAAI;GAAC,SAAS;GAAI,SAAS,KAAK;GAAG,SAAS;EAAM,CAAC;EAEpE,IAAI,aAAa,SAAS,kBAAkB,GAC1C,OAAO,QAAQ,IAAI;GAAC,SAAS;GAAI,SAAS,KAAK;GAAG,SAAS;EAAM,CAAC;EAGpE,IAAI,aAAa,SAAS,OAAO,GAC/B,OAAO,QAAQ,IAAI;GAAC,SAAS;GAAI,SAAS,KAAK;GAAG,SAAS;EAAM,CAAC;EAIpE,IAAI,SAAS,OAAO,SAAS,IAAI,SAAS,MAAM,MAAM,MACpD,OAAO,QAAQ,IAAI;GAAC,SAAS;GAAI,SAAS,KAAK;GAAG,SAAS;EAAM,CAAC;CAEtE;CAGA,OAAO,QAAQ,IAAI;EAAC,SAAS;EAAI,SAAS,KAAK;EAAG,SAAS;CAAM,CAAC;AACpE;AAEA,IAAM,aAAa;AAEnB,IAAM,MAAN,MAAU;CACR,QACE,KACA,SAAS,OACT,UAAuB,EAAE,SAAS,CAAC,EAAE,GACzB;EACZ,MAAM,QAAQ,gBAAQ,QAAQ,OAAO;EACrC,MAAM,UAAU,IAAI,QAAQ,QAAQ,OAAO;EAE3C,IAAI,SAAS,QAAQ,IAAI,UAAU,MAAM,OACvC,QAAQ,IAAI,YAAY,UAAU,OAAO;EAG3C,QAAQ,IAAI,YAAY,cAAc;EAGtC,QAAQ,UAAU;EAElB,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,MAAM,KAAK;IACT;IACA,aAAa;IACb,QAAQ,QAAQ;IAChB,GAAG;GACL,CAAC,CAAC,CACC,KAAK,kBAAkB,CAAC,CACxB,MAAM,aAAa;IAClB,MAAM,CAAC,IAAI,MAAM,UAAU;IAC3B,IAAI,OAAO,MACT,QAAQ,IAAI;SAIZ,OAAO,IAAI,YADT,OAAO,SAAS,WAAW,OAAQ,MAAM,SAAS,MAAM,WAAW,iBACrC,MAAM,CAAC;GAE3C,CAAC,CAAC,CACD,OAAO,UAAU;IAChB,OAAO,KAAK;GACd,CAAC;EACL,CAAC;CACH;AACF;AAEA,IAAA,cAAe,IAAI,IAAI"}
|
|
@@ -18,10 +18,10 @@ export type Latest = {
|
|
|
18
18
|
license?: string | LicenseInterface;
|
|
19
19
|
version: string;
|
|
20
20
|
homepage?: string;
|
|
21
|
-
bugs?: {
|
|
21
|
+
bugs?: string | {
|
|
22
22
|
url: string;
|
|
23
23
|
};
|
|
24
|
-
repository?: {
|
|
24
|
+
repository?: string | {
|
|
25
25
|
type?: string;
|
|
26
26
|
url?: string;
|
|
27
27
|
};
|
|
@@ -48,6 +48,7 @@ export interface Developer {
|
|
|
48
48
|
email?: string;
|
|
49
49
|
url?: string;
|
|
50
50
|
avatar?: string;
|
|
51
|
+
_avatar?: string;
|
|
51
52
|
}
|
|
52
53
|
interface Funding {
|
|
53
54
|
type?: string;
|
package/build/utils/cli-utils.js
CHANGED
|
@@ -9,11 +9,11 @@ function getCLIChangePassword(command, registryUrl) {
|
|
|
9
9
|
return `${command} profile set password --registry ${registryUrl}`;
|
|
10
10
|
}
|
|
11
11
|
function getCLISBerryYamlRegistry(scope, registryUrl) {
|
|
12
|
-
return !scope ?
|
|
12
|
+
return !scope ? `# .yarnrc.yml
|
|
13
13
|
npmRegistryServer: "${registryUrl}"
|
|
14
14
|
unsafeHttpWhitelist:
|
|
15
15
|
- ${new URL(registryUrl).host}` : `
|
|
16
|
-
|
|
16
|
+
# .yarnrc.yml
|
|
17
17
|
npmRegistryServer: "${registryUrl}"
|
|
18
18
|
npmScopes:
|
|
19
19
|
${scope.replace("@", "")}:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-utils.js","names":[],"sources":["../../src/utils/cli-utils.ts"],"sourcesContent":["import type { SyntheticEvent } from 'react';\n\nexport const copyToClipBoardUtility =\n (str: string): ((e: SyntheticEvent<HTMLElement>) => void) =>\n (event: SyntheticEvent<HTMLElement>): void => {\n event.preventDefault();\n\n const node = document.createElement('div');\n node.innerText = str;\n if (document.body) {\n document.body.appendChild(node);\n\n const range = document.createRange();\n const selection = window.getSelection() as Selection;\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand('copy');\n document.body.removeChild(node);\n }\n };\n\nexport function getCLISetConfigRegistry(\n command: string,\n scope: string | undefined,\n registryUrl: string\n): string {\n // if there is a scope defined there needs to be a \":\" separator between the scope and the registry\n return `${command} ${scope ? `${scope}:` : ''}registry ${registryUrl}`;\n}\n\nexport function getCLISetRegistry(command: string, registryUrl: string): string {\n return `${command} --registry ${registryUrl}`;\n}\n\nexport function getCLIChangePassword(command: string, registryUrl: string): string {\n return `${command} profile set password --registry ${registryUrl}`;\n}\n\nexport function getCLISBerryYamlRegistry(scope: string | undefined, registryUrl: string): string {\n return !scope\n ?
|
|
1
|
+
{"version":3,"file":"cli-utils.js","names":[],"sources":["../../src/utils/cli-utils.ts"],"sourcesContent":["import type { SyntheticEvent } from 'react';\n\nexport const copyToClipBoardUtility =\n (str: string): ((e: SyntheticEvent<HTMLElement>) => void) =>\n (event: SyntheticEvent<HTMLElement>): void => {\n event.preventDefault();\n\n const node = document.createElement('div');\n node.innerText = str;\n if (document.body) {\n document.body.appendChild(node);\n\n const range = document.createRange();\n const selection = window.getSelection() as Selection;\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand('copy');\n document.body.removeChild(node);\n }\n };\n\nexport function getCLISetConfigRegistry(\n command: string,\n scope: string | undefined,\n registryUrl: string\n): string {\n // if there is a scope defined there needs to be a \":\" separator between the scope and the registry\n return `${command} ${scope ? `${scope}:` : ''}registry ${registryUrl}`;\n}\n\nexport function getCLISetRegistry(command: string, registryUrl: string): string {\n return `${command} --registry ${registryUrl}`;\n}\n\nexport function getCLIChangePassword(command: string, registryUrl: string): string {\n return `${command} profile set password --registry ${registryUrl}`;\n}\n\nexport function getCLISBerryYamlRegistry(scope: string | undefined, registryUrl: string): string {\n return !scope\n ? `# .yarnrc.yml\nnpmRegistryServer: \"${registryUrl}\"\nunsafeHttpWhitelist:\n - ${new URL(registryUrl).host}`\n : `\n# .yarnrc.yml\nnpmRegistryServer: \"${registryUrl}\"\nnpmScopes:\n ${scope.replace('@', '')}:\n npmRegistryServer: ${registryUrl}\n npmPublishRegistry: ${registryUrl}`;\n}\n"],"mappings":";AAsBA,SAAgB,wBACd,SACA,OACA,aACQ;CAER,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,KAAK,GAAG,WAAW;AAC3D;AAEA,SAAgB,kBAAkB,SAAiB,aAA6B;CAC9E,OAAO,GAAG,QAAQ,cAAc;AAClC;AAEA,SAAgB,qBAAqB,SAAiB,aAA6B;CACjF,OAAO,GAAG,QAAQ,mCAAmC;AACvD;AAEA,SAAgB,yBAAyB,OAA2B,aAA6B;CAC/F,OAAO,CAAC,QACJ;sBACgB,YAAY;;MAE5B,IAAI,IAAI,WAAW,CAAC,CAAC,SACrB;;sBAEgB,YAAY;;IAE9B,MAAM,QAAQ,KAAK,EAAE,EAAE;yBACF,YAAY;0BACX;AAC1B"}
|
|
@@ -9,11 +9,11 @@ function getCLIChangePassword(command, registryUrl) {
|
|
|
9
9
|
return `${command} profile set password --registry ${registryUrl}`;
|
|
10
10
|
}
|
|
11
11
|
function getCLISBerryYamlRegistry(scope, registryUrl) {
|
|
12
|
-
return !scope ?
|
|
12
|
+
return !scope ? `# .yarnrc.yml
|
|
13
13
|
npmRegistryServer: "${registryUrl}"
|
|
14
14
|
unsafeHttpWhitelist:
|
|
15
15
|
- ${new URL(registryUrl).host}` : `
|
|
16
|
-
|
|
16
|
+
# .yarnrc.yml
|
|
17
17
|
npmRegistryServer: "${registryUrl}"
|
|
18
18
|
npmScopes:
|
|
19
19
|
${scope.replace("@", "")}:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-utils.mjs","names":[],"sources":["../../src/utils/cli-utils.ts"],"sourcesContent":["import type { SyntheticEvent } from 'react';\n\nexport const copyToClipBoardUtility =\n (str: string): ((e: SyntheticEvent<HTMLElement>) => void) =>\n (event: SyntheticEvent<HTMLElement>): void => {\n event.preventDefault();\n\n const node = document.createElement('div');\n node.innerText = str;\n if (document.body) {\n document.body.appendChild(node);\n\n const range = document.createRange();\n const selection = window.getSelection() as Selection;\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand('copy');\n document.body.removeChild(node);\n }\n };\n\nexport function getCLISetConfigRegistry(\n command: string,\n scope: string | undefined,\n registryUrl: string\n): string {\n // if there is a scope defined there needs to be a \":\" separator between the scope and the registry\n return `${command} ${scope ? `${scope}:` : ''}registry ${registryUrl}`;\n}\n\nexport function getCLISetRegistry(command: string, registryUrl: string): string {\n return `${command} --registry ${registryUrl}`;\n}\n\nexport function getCLIChangePassword(command: string, registryUrl: string): string {\n return `${command} profile set password --registry ${registryUrl}`;\n}\n\nexport function getCLISBerryYamlRegistry(scope: string | undefined, registryUrl: string): string {\n return !scope\n ?
|
|
1
|
+
{"version":3,"file":"cli-utils.mjs","names":[],"sources":["../../src/utils/cli-utils.ts"],"sourcesContent":["import type { SyntheticEvent } from 'react';\n\nexport const copyToClipBoardUtility =\n (str: string): ((e: SyntheticEvent<HTMLElement>) => void) =>\n (event: SyntheticEvent<HTMLElement>): void => {\n event.preventDefault();\n\n const node = document.createElement('div');\n node.innerText = str;\n if (document.body) {\n document.body.appendChild(node);\n\n const range = document.createRange();\n const selection = window.getSelection() as Selection;\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand('copy');\n document.body.removeChild(node);\n }\n };\n\nexport function getCLISetConfigRegistry(\n command: string,\n scope: string | undefined,\n registryUrl: string\n): string {\n // if there is a scope defined there needs to be a \":\" separator between the scope and the registry\n return `${command} ${scope ? `${scope}:` : ''}registry ${registryUrl}`;\n}\n\nexport function getCLISetRegistry(command: string, registryUrl: string): string {\n return `${command} --registry ${registryUrl}`;\n}\n\nexport function getCLIChangePassword(command: string, registryUrl: string): string {\n return `${command} profile set password --registry ${registryUrl}`;\n}\n\nexport function getCLISBerryYamlRegistry(scope: string | undefined, registryUrl: string): string {\n return !scope\n ? `# .yarnrc.yml\nnpmRegistryServer: \"${registryUrl}\"\nunsafeHttpWhitelist:\n - ${new URL(registryUrl).host}`\n : `\n# .yarnrc.yml\nnpmRegistryServer: \"${registryUrl}\"\nnpmScopes:\n ${scope.replace('@', '')}:\n npmRegistryServer: ${registryUrl}\n npmPublishRegistry: ${registryUrl}`;\n}\n"],"mappings":";AAsBA,SAAgB,wBACd,SACA,OACA,aACQ;CAER,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,KAAK,GAAG,WAAW;AAC3D;AAEA,SAAgB,kBAAkB,SAAiB,aAA6B;CAC9E,OAAO,GAAG,QAAQ,cAAc;AAClC;AAEA,SAAgB,qBAAqB,SAAiB,aAA6B;CACjF,OAAO,GAAG,QAAQ,mCAAmC;AACvD;AAEA,SAAgB,yBAAyB,OAA2B,aAA6B;CAC/F,OAAO,CAAC,QACJ;sBACgB,YAAY;;MAE5B,IAAI,IAAI,WAAW,CAAC,CAAC,SACrB;;sBAEgB,YAAY;;IAE9B,MAAM,QAAQ,KAAK,EAAE,EAAE;yBACF,YAAY;0BACX;AAC1B"}
|
package/build/utils/index.js
CHANGED
|
@@ -11,6 +11,7 @@ exports.getCLISetConfigRegistry = require_cli_utils.getCLISetConfigRegistry;
|
|
|
11
11
|
exports.getCLISetRegistry = require_cli_utils.getCLISetRegistry;
|
|
12
12
|
exports.isTokenExpire = require_token.isTokenExpire;
|
|
13
13
|
exports.loadable = require_loadable.default;
|
|
14
|
+
exports.tokenExpireInMs = require_token.tokenExpireInMs;
|
|
14
15
|
Object.defineProperty(exports, "url", {
|
|
15
16
|
enumerable: true,
|
|
16
17
|
get: function() {
|
package/build/utils/index.mjs
CHANGED
|
@@ -3,5 +3,5 @@ import { utils_exports } from "./utils.mjs";
|
|
|
3
3
|
import { getCLIChangePassword, getCLISBerryYamlRegistry, getCLISetConfigRegistry, getCLISetRegistry } from "./cli-utils.mjs";
|
|
4
4
|
import loadable_default from "./loadable.mjs";
|
|
5
5
|
import { Route } from "./routes.mjs";
|
|
6
|
-
import { isTokenExpire } from "./token.mjs";
|
|
7
|
-
export { Route, getCLIChangePassword, getCLISBerryYamlRegistry, getCLISetConfigRegistry, getCLISetRegistry, isTokenExpire, loadable_default as loadable, url_exports as url, utils_exports as utils };
|
|
6
|
+
import { isTokenExpire, tokenExpireInMs } from "./token.mjs";
|
|
7
|
+
export { Route, getCLIChangePassword, getCLISBerryYamlRegistry, getCLISetConfigRegistry, getCLISetRegistry, isTokenExpire, loadable_default as loadable, tokenExpireInMs, url_exports as url, utils_exports as utils };
|
package/build/utils/routes.d.ts
CHANGED
|
@@ -9,15 +9,19 @@ export declare enum Route {
|
|
|
9
9
|
SUCCESS = "/-/web/success",
|
|
10
10
|
ADD_USER = "/-/web/add-user",
|
|
11
11
|
CHANGE_PASSWORD = "/-/web/change-password",
|
|
12
|
+
STAGE = "/-/web/stage",
|
|
13
|
+
STAGE_DETAIL = "/-/web/stage/:stageId",
|
|
12
14
|
LOGIN_API = "/-/v1/login_cli",
|
|
13
15
|
CHANGE_PASSWORD_API = "/-/npm/v1/user"
|
|
14
16
|
}
|
|
15
17
|
export declare enum APIRoute {
|
|
16
18
|
LOGIN = "/-/verdaccio/sec/login",
|
|
19
|
+
SIGNUP = "/-/verdaccio/sec/signup",
|
|
17
20
|
RESET_PASSWORD = "/-/verdaccio/sec/reset_password",
|
|
18
21
|
CONFIG = "/-/verdaccio/packages",
|
|
19
22
|
PACKAGES = "/-/verdaccio/data/packages",
|
|
20
23
|
SEARCH = "/-/verdaccio/data/search/",// :value
|
|
21
24
|
SIDEBAR = "/-/verdaccio/data/sidebar/",// :packageName?v=version
|
|
22
|
-
README = "/-/verdaccio/data/package/readme/"
|
|
25
|
+
README = "/-/verdaccio/data/package/readme/",// :packageName?v=version
|
|
26
|
+
STAGE = "/-/stage"
|
|
23
27
|
}
|
package/build/utils/routes.js
CHANGED
|
@@ -10,18 +10,22 @@ var Route = /* @__PURE__ */ function(Route) {
|
|
|
10
10
|
Route["SUCCESS"] = "/-/web/success";
|
|
11
11
|
Route["ADD_USER"] = "/-/web/add-user";
|
|
12
12
|
Route["CHANGE_PASSWORD"] = "/-/web/change-password";
|
|
13
|
+
Route["STAGE"] = "/-/web/stage";
|
|
14
|
+
Route["STAGE_DETAIL"] = "/-/web/stage/:stageId";
|
|
13
15
|
Route["LOGIN_API"] = "/-/v1/login_cli";
|
|
14
16
|
Route["CHANGE_PASSWORD_API"] = "/-/npm/v1/user";
|
|
15
17
|
return Route;
|
|
16
18
|
}({});
|
|
17
19
|
var APIRoute = /* @__PURE__ */ function(APIRoute) {
|
|
18
20
|
APIRoute["LOGIN"] = "/-/verdaccio/sec/login";
|
|
21
|
+
APIRoute["SIGNUP"] = "/-/verdaccio/sec/signup";
|
|
19
22
|
APIRoute["RESET_PASSWORD"] = "/-/verdaccio/sec/reset_password";
|
|
20
23
|
APIRoute["CONFIG"] = "/-/verdaccio/packages";
|
|
21
24
|
APIRoute["PACKAGES"] = "/-/verdaccio/data/packages";
|
|
22
25
|
APIRoute["SEARCH"] = "/-/verdaccio/data/search/";
|
|
23
26
|
APIRoute["SIDEBAR"] = "/-/verdaccio/data/sidebar/";
|
|
24
27
|
APIRoute["README"] = "/-/verdaccio/data/package/readme/";
|
|
28
|
+
APIRoute["STAGE"] = "/-/stage";
|
|
25
29
|
return APIRoute;
|
|
26
30
|
}({});
|
|
27
31
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","names":[],"sources":["../../src/utils/routes.ts"],"sourcesContent":["export enum Route {\n ROOT = '/',\n DETAIL = '/-/web/detail/',\n SCOPE_PACKAGE = '/-/web/detail/:scope/:package',\n SCOPE_PACKAGE_VERSION = '/-/web/detail/:scope/:package/v/:version',\n PACKAGE = '/-/web/detail/:package',\n PACKAGE_VERSION = '/-/web/detail/:package/v/:version',\n // Security UI routes\n LOGIN = '/-/web/login',\n SUCCESS = '/-/web/success',\n ADD_USER = '/-/web/add-user',\n CHANGE_PASSWORD = '/-/web/change-password',\n // Security API routes\n LOGIN_API = '/-/v1/login_cli',\n CHANGE_PASSWORD_API = '/-/npm/v1/user',\n}\n\n// Example API request:\n// http://localhost:8000/-/verdaccio/data/package/readme/jquery\nexport enum APIRoute {\n LOGIN = '/-/verdaccio/sec/login',\n RESET_PASSWORD = '/-/verdaccio/sec/reset_password',\n CONFIG = '/-/verdaccio/packages',\n PACKAGES = '/-/verdaccio/data/packages',\n SEARCH = '/-/verdaccio/data/search/', // :value\n SIDEBAR = '/-/verdaccio/data/sidebar/', // :packageName?v=version\n README = '/-/verdaccio/data/package/readme/', // :packageName?v=version\n}\n"],"mappings":";AAAA,IAAY,QAAL,yBAAA,OAAA;CACL,MAAA,UAAA;CACA,MAAA,YAAA;CACA,MAAA,mBAAA;CACA,MAAA,2BAAA;CACA,MAAA,aAAA;CACA,MAAA,qBAAA;CAEA,MAAA,WAAA;CACA,MAAA,aAAA;CACA,MAAA,cAAA;CACA,MAAA,qBAAA;CAEA,MAAA,eAAA;CACA,MAAA,yBAAA;;AACF,EAAA,CAAA,CAAA;AAIA,IAAY,WAAL,yBAAA,UAAA;CACL,SAAA,WAAA;CACA,SAAA,oBAAA;CACA,SAAA,YAAA;CACA,SAAA,cAAA;CACA,SAAA,YAAA;CACA,SAAA,aAAA;CACA,SAAA,YAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"routes.js","names":[],"sources":["../../src/utils/routes.ts"],"sourcesContent":["export enum Route {\n ROOT = '/',\n DETAIL = '/-/web/detail/',\n SCOPE_PACKAGE = '/-/web/detail/:scope/:package',\n SCOPE_PACKAGE_VERSION = '/-/web/detail/:scope/:package/v/:version',\n PACKAGE = '/-/web/detail/:package',\n PACKAGE_VERSION = '/-/web/detail/:package/v/:version',\n // Security UI routes\n LOGIN = '/-/web/login',\n SUCCESS = '/-/web/success',\n ADD_USER = '/-/web/add-user',\n CHANGE_PASSWORD = '/-/web/change-password',\n // Staged publish workflow (`npm stage`), behind the `stage` flag\n STAGE = '/-/web/stage',\n STAGE_DETAIL = '/-/web/stage/:stageId',\n // Security API routes\n LOGIN_API = '/-/v1/login_cli',\n CHANGE_PASSWORD_API = '/-/npm/v1/user',\n}\n\n// Example API request:\n// http://localhost:8000/-/verdaccio/data/package/readme/jquery\nexport enum APIRoute {\n LOGIN = '/-/verdaccio/sec/login',\n SIGNUP = '/-/verdaccio/sec/signup',\n RESET_PASSWORD = '/-/verdaccio/sec/reset_password',\n CONFIG = '/-/verdaccio/packages',\n PACKAGES = '/-/verdaccio/data/packages',\n SEARCH = '/-/verdaccio/data/search/', // :value\n SIDEBAR = '/-/verdaccio/data/sidebar/', // :packageName?v=version\n README = '/-/verdaccio/data/package/readme/', // :packageName?v=version\n // served by the registry router, not the web one, like CHANGE_PASSWORD_API\n STAGE = '/-/stage',\n}\n"],"mappings":";AAAA,IAAY,QAAL,yBAAA,OAAA;CACL,MAAA,UAAA;CACA,MAAA,YAAA;CACA,MAAA,mBAAA;CACA,MAAA,2BAAA;CACA,MAAA,aAAA;CACA,MAAA,qBAAA;CAEA,MAAA,WAAA;CACA,MAAA,aAAA;CACA,MAAA,cAAA;CACA,MAAA,qBAAA;CAEA,MAAA,WAAA;CACA,MAAA,kBAAA;CAEA,MAAA,eAAA;CACA,MAAA,yBAAA;;AACF,EAAA,CAAA,CAAA;AAIA,IAAY,WAAL,yBAAA,UAAA;CACL,SAAA,WAAA;CACA,SAAA,YAAA;CACA,SAAA,oBAAA;CACA,SAAA,YAAA;CACA,SAAA,cAAA;CACA,SAAA,YAAA;CACA,SAAA,aAAA;CACA,SAAA,YAAA;CAEA,SAAA,WAAA;;AACF,EAAA,CAAA,CAAA"}
|
package/build/utils/routes.mjs
CHANGED
|
@@ -10,18 +10,22 @@ var Route = /* @__PURE__ */ function(Route) {
|
|
|
10
10
|
Route["SUCCESS"] = "/-/web/success";
|
|
11
11
|
Route["ADD_USER"] = "/-/web/add-user";
|
|
12
12
|
Route["CHANGE_PASSWORD"] = "/-/web/change-password";
|
|
13
|
+
Route["STAGE"] = "/-/web/stage";
|
|
14
|
+
Route["STAGE_DETAIL"] = "/-/web/stage/:stageId";
|
|
13
15
|
Route["LOGIN_API"] = "/-/v1/login_cli";
|
|
14
16
|
Route["CHANGE_PASSWORD_API"] = "/-/npm/v1/user";
|
|
15
17
|
return Route;
|
|
16
18
|
}({});
|
|
17
19
|
var APIRoute = /* @__PURE__ */ function(APIRoute) {
|
|
18
20
|
APIRoute["LOGIN"] = "/-/verdaccio/sec/login";
|
|
21
|
+
APIRoute["SIGNUP"] = "/-/verdaccio/sec/signup";
|
|
19
22
|
APIRoute["RESET_PASSWORD"] = "/-/verdaccio/sec/reset_password";
|
|
20
23
|
APIRoute["CONFIG"] = "/-/verdaccio/packages";
|
|
21
24
|
APIRoute["PACKAGES"] = "/-/verdaccio/data/packages";
|
|
22
25
|
APIRoute["SEARCH"] = "/-/verdaccio/data/search/";
|
|
23
26
|
APIRoute["SIDEBAR"] = "/-/verdaccio/data/sidebar/";
|
|
24
27
|
APIRoute["README"] = "/-/verdaccio/data/package/readme/";
|
|
28
|
+
APIRoute["STAGE"] = "/-/stage";
|
|
25
29
|
return APIRoute;
|
|
26
30
|
}({});
|
|
27
31
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.mjs","names":[],"sources":["../../src/utils/routes.ts"],"sourcesContent":["export enum Route {\n ROOT = '/',\n DETAIL = '/-/web/detail/',\n SCOPE_PACKAGE = '/-/web/detail/:scope/:package',\n SCOPE_PACKAGE_VERSION = '/-/web/detail/:scope/:package/v/:version',\n PACKAGE = '/-/web/detail/:package',\n PACKAGE_VERSION = '/-/web/detail/:package/v/:version',\n // Security UI routes\n LOGIN = '/-/web/login',\n SUCCESS = '/-/web/success',\n ADD_USER = '/-/web/add-user',\n CHANGE_PASSWORD = '/-/web/change-password',\n // Security API routes\n LOGIN_API = '/-/v1/login_cli',\n CHANGE_PASSWORD_API = '/-/npm/v1/user',\n}\n\n// Example API request:\n// http://localhost:8000/-/verdaccio/data/package/readme/jquery\nexport enum APIRoute {\n LOGIN = '/-/verdaccio/sec/login',\n RESET_PASSWORD = '/-/verdaccio/sec/reset_password',\n CONFIG = '/-/verdaccio/packages',\n PACKAGES = '/-/verdaccio/data/packages',\n SEARCH = '/-/verdaccio/data/search/', // :value\n SIDEBAR = '/-/verdaccio/data/sidebar/', // :packageName?v=version\n README = '/-/verdaccio/data/package/readme/', // :packageName?v=version\n}\n"],"mappings":";AAAA,IAAY,QAAL,yBAAA,OAAA;CACL,MAAA,UAAA;CACA,MAAA,YAAA;CACA,MAAA,mBAAA;CACA,MAAA,2BAAA;CACA,MAAA,aAAA;CACA,MAAA,qBAAA;CAEA,MAAA,WAAA;CACA,MAAA,aAAA;CACA,MAAA,cAAA;CACA,MAAA,qBAAA;CAEA,MAAA,eAAA;CACA,MAAA,yBAAA;;AACF,EAAA,CAAA,CAAA;AAIA,IAAY,WAAL,yBAAA,UAAA;CACL,SAAA,WAAA;CACA,SAAA,oBAAA;CACA,SAAA,YAAA;CACA,SAAA,cAAA;CACA,SAAA,YAAA;CACA,SAAA,aAAA;CACA,SAAA,YAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"routes.mjs","names":[],"sources":["../../src/utils/routes.ts"],"sourcesContent":["export enum Route {\n ROOT = '/',\n DETAIL = '/-/web/detail/',\n SCOPE_PACKAGE = '/-/web/detail/:scope/:package',\n SCOPE_PACKAGE_VERSION = '/-/web/detail/:scope/:package/v/:version',\n PACKAGE = '/-/web/detail/:package',\n PACKAGE_VERSION = '/-/web/detail/:package/v/:version',\n // Security UI routes\n LOGIN = '/-/web/login',\n SUCCESS = '/-/web/success',\n ADD_USER = '/-/web/add-user',\n CHANGE_PASSWORD = '/-/web/change-password',\n // Staged publish workflow (`npm stage`), behind the `stage` flag\n STAGE = '/-/web/stage',\n STAGE_DETAIL = '/-/web/stage/:stageId',\n // Security API routes\n LOGIN_API = '/-/v1/login_cli',\n CHANGE_PASSWORD_API = '/-/npm/v1/user',\n}\n\n// Example API request:\n// http://localhost:8000/-/verdaccio/data/package/readme/jquery\nexport enum APIRoute {\n LOGIN = '/-/verdaccio/sec/login',\n SIGNUP = '/-/verdaccio/sec/signup',\n RESET_PASSWORD = '/-/verdaccio/sec/reset_password',\n CONFIG = '/-/verdaccio/packages',\n PACKAGES = '/-/verdaccio/data/packages',\n SEARCH = '/-/verdaccio/data/search/', // :value\n SIDEBAR = '/-/verdaccio/data/sidebar/', // :packageName?v=version\n README = '/-/verdaccio/data/package/readme/', // :packageName?v=version\n // served by the registry router, not the web one, like CHANGE_PASSWORD_API\n STAGE = '/-/stage',\n}\n"],"mappings":";AAAA,IAAY,QAAL,yBAAA,OAAA;CACL,MAAA,UAAA;CACA,MAAA,YAAA;CACA,MAAA,mBAAA;CACA,MAAA,2BAAA;CACA,MAAA,aAAA;CACA,MAAA,qBAAA;CAEA,MAAA,WAAA;CACA,MAAA,aAAA;CACA,MAAA,cAAA;CACA,MAAA,qBAAA;CAEA,MAAA,WAAA;CACA,MAAA,kBAAA;CAEA,MAAA,eAAA;CACA,MAAA,yBAAA;;AACF,EAAA,CAAA,CAAA;AAIA,IAAY,WAAL,yBAAA,UAAA;CACL,SAAA,WAAA;CACA,SAAA,YAAA;CACA,SAAA,oBAAA;CACA,SAAA,YAAA;CACA,SAAA,cAAA;CACA,SAAA,YAAA;CACA,SAAA,aAAA;CACA,SAAA,YAAA;CAEA,SAAA,WAAA;;AACF,EAAA,CAAA,CAAA"}
|
package/build/utils/schemas.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as yup from 'yup';
|
|
2
2
|
export declare const USERNAME_MIN_LENGTH = 2;
|
|
3
|
+
export declare const PASSWORD_MIN_LENGTH = 2;
|
|
3
4
|
export declare const usernameSchema: yup.StringSchema<string, yup.AnyObject, undefined, "">;
|
|
4
5
|
export declare const passwordSchema: yup.StringSchema<string, yup.AnyObject, undefined, "">;
|
|
5
6
|
export declare const loginSchema: yup.ObjectSchema<{
|
package/build/utils/schemas.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const require_runtime = require("../_virtual/_rolldown/runtime.js");
|
|
2
2
|
let yup = require("yup");
|
|
3
3
|
yup = require_runtime.__toESM(yup);
|
|
4
|
-
var usernameSchema = yup.string().required().min(2).matches(/^[-a-zA-Z0-9_.!~*'()@]+$/, "security.error.username-must-be-url-safe");
|
|
5
|
-
var passwordSchema = yup.string().required().min(2);
|
|
4
|
+
var usernameSchema = yup.string().required("form-validation.required-field").min(2, "security.error.username-min-length").matches(/^[-a-zA-Z0-9_.!~*'()@]+$/, "security.error.username-must-be-url-safe");
|
|
5
|
+
var passwordSchema = yup.string().required("form-validation.required-field").min(2, "form-validation.required-min-length");
|
|
6
6
|
var loginSchema = yup.object({
|
|
7
7
|
username: usernameSchema,
|
|
8
8
|
password: passwordSchema
|
|
@@ -10,13 +10,13 @@ var loginSchema = yup.object({
|
|
|
10
10
|
var addUserSchema = yup.object({
|
|
11
11
|
username: usernameSchema,
|
|
12
12
|
password: passwordSchema,
|
|
13
|
-
email: yup.string().email().required()
|
|
13
|
+
email: yup.string().email("form-validation.invalid-email").required("form-validation.required-field")
|
|
14
14
|
});
|
|
15
15
|
var changePasswordSchema = yup.object({
|
|
16
16
|
username: usernameSchema,
|
|
17
17
|
oldPassword: passwordSchema,
|
|
18
18
|
newPassword: passwordSchema,
|
|
19
|
-
confirmPassword: yup.string().required().oneOf([yup.ref("newPassword")], "security.error.password-mismatch")
|
|
19
|
+
confirmPassword: yup.string().required("form-validation.required-field").oneOf([yup.ref("newPassword")], "security.error.password-mismatch")
|
|
20
20
|
});
|
|
21
21
|
//#endregion
|
|
22
22
|
exports.addUserSchema = addUserSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","names":[],"sources":["../../src/utils/schemas.ts"],"sourcesContent":["import * as yup from 'yup';\n\nexport const USERNAME_MIN_LENGTH = 2;\n\n//
|
|
1
|
+
{"version":3,"file":"schemas.js","names":[],"sources":["../../src/utils/schemas.ts"],"sourcesContent":["import * as yup from 'yup';\n\nexport const USERNAME_MIN_LENGTH = 2;\nexport const PASSWORD_MIN_LENGTH = 2;\n\n// All messages are i18n keys; the form fields translate them on render with\n// t(message, { length }) so they follow the selected language.\nexport const usernameSchema = yup\n .string()\n .required('form-validation.required-field')\n .min(USERNAME_MIN_LENGTH, 'security.error.username-min-length')\n .matches(/^[-a-zA-Z0-9_.!~*'()@]+$/, 'security.error.username-must-be-url-safe');\n\nexport const passwordSchema = yup\n .string()\n .required('form-validation.required-field')\n .min(PASSWORD_MIN_LENGTH, 'form-validation.required-min-length');\n\nexport const loginSchema = yup.object({\n username: usernameSchema,\n password: passwordSchema,\n});\n\nexport type LoginFormValues = yup.InferType<typeof loginSchema>;\n\nexport const addUserSchema = yup.object({\n username: usernameSchema,\n password: passwordSchema,\n email: yup\n .string()\n .email('form-validation.invalid-email')\n .required('form-validation.required-field'),\n});\n\nexport type AddUserFormValues = yup.InferType<typeof addUserSchema>;\n\nexport const changePasswordSchema = yup.object({\n username: usernameSchema,\n oldPassword: passwordSchema,\n newPassword: passwordSchema,\n confirmPassword: yup\n .string()\n .required('form-validation.required-field')\n .oneOf([yup.ref('newPassword')], 'security.error.password-mismatch'),\n});\n\nexport type ChangePasswordFormValues = yup.InferType<typeof changePasswordSchema>;\n"],"mappings":";;;AAOA,IAAa,iBAAiB,IAC3B,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,IAAA,GAAyB,oCAAoC,CAAC,CAC9D,QAAQ,4BAA4B,0CAA0C;AAEjF,IAAa,iBAAiB,IAC3B,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,IAAA,GAAyB,qCAAqC;AAEjE,IAAa,cAAc,IAAI,OAAO;CACpC,UAAU;CACV,UAAU;AACZ,CAAC;AAID,IAAa,gBAAgB,IAAI,OAAO;CACtC,UAAU;CACV,UAAU;CACV,OAAO,IACJ,OAAO,CAAC,CACR,MAAM,+BAA+B,CAAC,CACtC,SAAS,gCAAgC;AAC9C,CAAC;AAID,IAAa,uBAAuB,IAAI,OAAO;CAC7C,UAAU;CACV,aAAa;CACb,aAAa;CACb,iBAAiB,IACd,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,MAAM,CAAC,IAAI,IAAI,aAAa,CAAC,GAAG,kCAAkC;AACvE,CAAC"}
|
package/build/utils/schemas.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as yup from "yup";
|
|
2
|
-
var usernameSchema = yup.string().required().min(2).matches(/^[-a-zA-Z0-9_.!~*'()@]+$/, "security.error.username-must-be-url-safe");
|
|
3
|
-
var passwordSchema = yup.string().required().min(2);
|
|
2
|
+
var usernameSchema = yup.string().required("form-validation.required-field").min(2, "security.error.username-min-length").matches(/^[-a-zA-Z0-9_.!~*'()@]+$/, "security.error.username-must-be-url-safe");
|
|
3
|
+
var passwordSchema = yup.string().required("form-validation.required-field").min(2, "form-validation.required-min-length");
|
|
4
4
|
var loginSchema = yup.object({
|
|
5
5
|
username: usernameSchema,
|
|
6
6
|
password: passwordSchema
|
|
@@ -8,13 +8,13 @@ var loginSchema = yup.object({
|
|
|
8
8
|
var addUserSchema = yup.object({
|
|
9
9
|
username: usernameSchema,
|
|
10
10
|
password: passwordSchema,
|
|
11
|
-
email: yup.string().email().required()
|
|
11
|
+
email: yup.string().email("form-validation.invalid-email").required("form-validation.required-field")
|
|
12
12
|
});
|
|
13
13
|
var changePasswordSchema = yup.object({
|
|
14
14
|
username: usernameSchema,
|
|
15
15
|
oldPassword: passwordSchema,
|
|
16
16
|
newPassword: passwordSchema,
|
|
17
|
-
confirmPassword: yup.string().required().oneOf([yup.ref("newPassword")], "security.error.password-mismatch")
|
|
17
|
+
confirmPassword: yup.string().required("form-validation.required-field").oneOf([yup.ref("newPassword")], "security.error.password-mismatch")
|
|
18
18
|
});
|
|
19
19
|
//#endregion
|
|
20
20
|
export { addUserSchema, changePasswordSchema, loginSchema, passwordSchema, usernameSchema };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.mjs","names":[],"sources":["../../src/utils/schemas.ts"],"sourcesContent":["import * as yup from 'yup';\n\nexport const USERNAME_MIN_LENGTH = 2;\n\n//
|
|
1
|
+
{"version":3,"file":"schemas.mjs","names":[],"sources":["../../src/utils/schemas.ts"],"sourcesContent":["import * as yup from 'yup';\n\nexport const USERNAME_MIN_LENGTH = 2;\nexport const PASSWORD_MIN_LENGTH = 2;\n\n// All messages are i18n keys; the form fields translate them on render with\n// t(message, { length }) so they follow the selected language.\nexport const usernameSchema = yup\n .string()\n .required('form-validation.required-field')\n .min(USERNAME_MIN_LENGTH, 'security.error.username-min-length')\n .matches(/^[-a-zA-Z0-9_.!~*'()@]+$/, 'security.error.username-must-be-url-safe');\n\nexport const passwordSchema = yup\n .string()\n .required('form-validation.required-field')\n .min(PASSWORD_MIN_LENGTH, 'form-validation.required-min-length');\n\nexport const loginSchema = yup.object({\n username: usernameSchema,\n password: passwordSchema,\n});\n\nexport type LoginFormValues = yup.InferType<typeof loginSchema>;\n\nexport const addUserSchema = yup.object({\n username: usernameSchema,\n password: passwordSchema,\n email: yup\n .string()\n .email('form-validation.invalid-email')\n .required('form-validation.required-field'),\n});\n\nexport type AddUserFormValues = yup.InferType<typeof addUserSchema>;\n\nexport const changePasswordSchema = yup.object({\n username: usernameSchema,\n oldPassword: passwordSchema,\n newPassword: passwordSchema,\n confirmPassword: yup\n .string()\n .required('form-validation.required-field')\n .oneOf([yup.ref('newPassword')], 'security.error.password-mismatch'),\n});\n\nexport type ChangePasswordFormValues = yup.InferType<typeof changePasswordSchema>;\n"],"mappings":";AAOA,IAAa,iBAAiB,IAC3B,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,IAAA,GAAyB,oCAAoC,CAAC,CAC9D,QAAQ,4BAA4B,0CAA0C;AAEjF,IAAa,iBAAiB,IAC3B,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,IAAA,GAAyB,qCAAqC;AAEjE,IAAa,cAAc,IAAI,OAAO;CACpC,UAAU;CACV,UAAU;AACZ,CAAC;AAID,IAAa,gBAAgB,IAAI,OAAO;CACtC,UAAU;CACV,UAAU;CACV,OAAO,IACJ,OAAO,CAAC,CACR,MAAM,+BAA+B,CAAC,CACtC,SAAS,gCAAgC;AAC9C,CAAC;AAID,IAAa,uBAAuB,IAAI,OAAO;CAC7C,UAAU;CACV,aAAa;CACb,aAAa;CACb,iBAAiB,IACd,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,MAAM,CAAC,IAAI,IAAI,aAAa,CAAC,GAAG,kCAAkC;AACvE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Random 36-char session id (uuid v4 format) for the signup endpoint.
|
|
3
|
+
*
|
|
4
|
+
* `crypto.randomUUID` only exists in secure contexts (https / localhost);
|
|
5
|
+
* plain-http LAN registries — a very common deployment — need the
|
|
6
|
+
* `getRandomValues` fallback, which is available everywhere.
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateSessionId(): string;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/utils/session-id.ts
|
|
2
|
+
/**
|
|
3
|
+
* Random 36-char session id (uuid v4 format) for the signup endpoint.
|
|
4
|
+
*
|
|
5
|
+
* `crypto.randomUUID` only exists in secure contexts (https / localhost);
|
|
6
|
+
* plain-http LAN registries — a very common deployment — need the
|
|
7
|
+
* `getRandomValues` fallback, which is available everywhere.
|
|
8
|
+
*/
|
|
9
|
+
function generateSessionId() {
|
|
10
|
+
if (typeof crypto.randomUUID === "function") return crypto.randomUUID();
|
|
11
|
+
const bytes = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16));
|
|
12
|
+
bytes[6] = bytes[6] & 15 | 64;
|
|
13
|
+
bytes[8] = bytes[8] & 63 | 128;
|
|
14
|
+
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
15
|
+
return [
|
|
16
|
+
hex.slice(0, 8),
|
|
17
|
+
hex.slice(8, 12),
|
|
18
|
+
hex.slice(12, 16),
|
|
19
|
+
hex.slice(16, 20),
|
|
20
|
+
hex.slice(20)
|
|
21
|
+
].join("-");
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
exports.generateSessionId = generateSessionId;
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=session-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-id.js","names":[],"sources":["../../src/utils/session-id.ts"],"sourcesContent":["/**\n * Random 36-char session id (uuid v4 format) for the signup endpoint.\n *\n * `crypto.randomUUID` only exists in secure contexts (https / localhost);\n * plain-http LAN registries — a very common deployment — need the\n * `getRandomValues` fallback, which is available everywhere.\n */\nexport function generateSessionId(): string {\n if (typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n // eslint-disable-next-line no-bitwise\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4\n // eslint-disable-next-line no-bitwise\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 10xx\n const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20),\n ].join('-');\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,oBAA4B;CAC1C,IAAI,OAAO,OAAO,eAAe,YAC/B,OAAO,OAAO,WAAW;CAG3B,MAAM,QAAQ,OAAO,gCAAgB,IAAI,WAAW,EAAE,CAAC;CAEvD,MAAM,KAAM,MAAM,KAAK,KAAQ;CAE/B,MAAM,KAAM,MAAM,KAAK,KAAQ;CAC/B,MAAM,MAAM,MAAM,KAAK,QAAQ,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;CACnF,OAAO;EACL,IAAI,MAAM,GAAG,CAAC;EACd,IAAI,MAAM,GAAG,EAAE;EACf,IAAI,MAAM,IAAI,EAAE;EAChB,IAAI,MAAM,IAAI,EAAE;EAChB,IAAI,MAAM,EAAE;CACd,CAAC,CAAC,KAAK,GAAG;AACZ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/utils/session-id.ts
|
|
2
|
+
/**
|
|
3
|
+
* Random 36-char session id (uuid v4 format) for the signup endpoint.
|
|
4
|
+
*
|
|
5
|
+
* `crypto.randomUUID` only exists in secure contexts (https / localhost);
|
|
6
|
+
* plain-http LAN registries — a very common deployment — need the
|
|
7
|
+
* `getRandomValues` fallback, which is available everywhere.
|
|
8
|
+
*/
|
|
9
|
+
function generateSessionId() {
|
|
10
|
+
if (typeof crypto.randomUUID === "function") return crypto.randomUUID();
|
|
11
|
+
const bytes = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16));
|
|
12
|
+
bytes[6] = bytes[6] & 15 | 64;
|
|
13
|
+
bytes[8] = bytes[8] & 63 | 128;
|
|
14
|
+
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
15
|
+
return [
|
|
16
|
+
hex.slice(0, 8),
|
|
17
|
+
hex.slice(8, 12),
|
|
18
|
+
hex.slice(12, 16),
|
|
19
|
+
hex.slice(16, 20),
|
|
20
|
+
hex.slice(20)
|
|
21
|
+
].join("-");
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { generateSessionId };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=session-id.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-id.mjs","names":[],"sources":["../../src/utils/session-id.ts"],"sourcesContent":["/**\n * Random 36-char session id (uuid v4 format) for the signup endpoint.\n *\n * `crypto.randomUUID` only exists in secure contexts (https / localhost);\n * plain-http LAN registries — a very common deployment — need the\n * `getRandomValues` fallback, which is available everywhere.\n */\nexport function generateSessionId(): string {\n if (typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n // eslint-disable-next-line no-bitwise\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4\n // eslint-disable-next-line no-bitwise\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 10xx\n const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20),\n ].join('-');\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,oBAA4B;CAC1C,IAAI,OAAO,OAAO,eAAe,YAC/B,OAAO,OAAO,WAAW;CAG3B,MAAM,QAAQ,OAAO,gCAAgB,IAAI,WAAW,EAAE,CAAC;CAEvD,MAAM,KAAM,MAAM,KAAK,KAAQ;CAE/B,MAAM,KAAM,MAAM,KAAK,KAAQ;CAC/B,MAAM,MAAM,MAAM,KAAK,QAAQ,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;CACnF,OAAO;EACL,IAAI,MAAM,GAAG,CAAC;EACd,IAAI,MAAM,GAAG,EAAE;EACf,IAAI,MAAM,IAAI,EAAE;EAChB,IAAI,MAAM,IAAI,EAAE;EAChB,IAAI,MAAM,EAAE;CACd,CAAC,CAAC,KAAK,GAAG;AACZ"}
|
package/build/utils/token.d.ts
CHANGED
package/build/utils/token.js
CHANGED
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
let js_base64 = require("js-base64");
|
|
2
2
|
let lodash_es = require("lodash-es");
|
|
3
3
|
//#region src/utils/token.ts
|
|
4
|
-
function
|
|
5
|
-
if (typeof token !== "string") return
|
|
4
|
+
function tokenExpireInMs(token) {
|
|
5
|
+
if (typeof token !== "string") return null;
|
|
6
6
|
const [, payload] = token.split(".");
|
|
7
|
-
if (!payload) return
|
|
7
|
+
if (!payload) return null;
|
|
8
8
|
let exp;
|
|
9
9
|
try {
|
|
10
10
|
exp = JSON.parse(js_base64.Base64.decode(payload)).exp;
|
|
11
11
|
} catch (error) {
|
|
12
|
-
console.error("Invalid token:", error
|
|
13
|
-
return
|
|
12
|
+
console.error("Invalid token:", error);
|
|
13
|
+
return null;
|
|
14
14
|
}
|
|
15
|
-
if (!exp || !(0, lodash_es.isNumber)(exp)) return
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if (!exp || !(0, lodash_es.isNumber)(exp)) return null;
|
|
16
|
+
return exp * 1e3 - 3e4 - Date.now();
|
|
17
|
+
}
|
|
18
|
+
function isTokenExpire(token) {
|
|
19
|
+
const remaining = tokenExpireInMs(token);
|
|
20
|
+
return remaining === null || remaining <= 0;
|
|
18
21
|
}
|
|
19
22
|
//#endregion
|
|
20
23
|
exports.isTokenExpire = isTokenExpire;
|
|
24
|
+
exports.tokenExpireInMs = tokenExpireInMs;
|
|
21
25
|
|
|
22
26
|
//# sourceMappingURL=token.js.map
|
package/build/utils/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","names":[],"sources":["../../src/utils/token.ts"],"sourcesContent":["import { Base64 } from 'js-base64';\nimport { isNumber } from 'lodash-es';\n\nexport function
|
|
1
|
+
{"version":3,"file":"token.js","names":[],"sources":["../../src/utils/token.ts"],"sourcesContent":["import { Base64 } from 'js-base64';\nimport { isNumber } from 'lodash-es';\n\n// ms until the token reports as expired (30s guard included); null when undecodable\nexport function tokenExpireInMs(token: string | null): number | null {\n if (typeof token !== 'string') {\n return null;\n }\n\n const [, payload] = token.split('.');\n\n if (!payload) {\n return null;\n }\n\n let exp: number;\n try {\n exp = JSON.parse(Base64.decode(payload)).exp;\n } catch (error: unknown) {\n // never log the token itself: even a malformed one is credential material\n console.error('Invalid token:', error);\n return null;\n }\n\n if (!exp || !isNumber(exp)) {\n return null;\n }\n // Report as expired before (real expire time - 30s)\n return exp * 1000 - 30000 - Date.now();\n}\n\nexport function isTokenExpire(token: string | null): boolean {\n const remaining = tokenExpireInMs(token);\n return remaining === null || remaining <= 0;\n}\n"],"mappings":";;;AAIA,SAAgB,gBAAgB,OAAqC;CACnE,IAAI,OAAO,UAAU,UACnB,OAAO;CAGT,MAAM,GAAG,WAAW,MAAM,MAAM,GAAG;CAEnC,IAAI,CAAC,SACH,OAAO;CAGT,IAAI;CACJ,IAAI;EACF,MAAM,KAAK,MAAM,UAAA,OAAO,OAAO,OAAO,CAAC,CAAC,CAAC;CAC3C,SAAS,OAAgB;EAEvB,QAAQ,MAAM,kBAAkB,KAAK;EACrC,OAAO;CACT;CAEA,IAAI,CAAC,OAAO,EAAA,GAAC,UAAA,SAAA,CAAS,GAAG,GACvB,OAAO;CAGT,OAAO,MAAM,MAAO,MAAQ,KAAK,IAAI;AACvC;AAEA,SAAgB,cAAc,OAA+B;CAC3D,MAAM,YAAY,gBAAgB,KAAK;CACvC,OAAO,cAAc,QAAQ,aAAa;AAC5C"}
|
package/build/utils/token.mjs
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import { Base64 } from "js-base64";
|
|
2
2
|
import { isNumber } from "lodash-es";
|
|
3
3
|
//#region src/utils/token.ts
|
|
4
|
-
function
|
|
5
|
-
if (typeof token !== "string") return
|
|
4
|
+
function tokenExpireInMs(token) {
|
|
5
|
+
if (typeof token !== "string") return null;
|
|
6
6
|
const [, payload] = token.split(".");
|
|
7
|
-
if (!payload) return
|
|
7
|
+
if (!payload) return null;
|
|
8
8
|
let exp;
|
|
9
9
|
try {
|
|
10
10
|
exp = JSON.parse(Base64.decode(payload)).exp;
|
|
11
11
|
} catch (error) {
|
|
12
|
-
console.error("Invalid token:", error
|
|
13
|
-
return
|
|
12
|
+
console.error("Invalid token:", error);
|
|
13
|
+
return null;
|
|
14
14
|
}
|
|
15
|
-
if (!exp || !isNumber(exp)) return
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if (!exp || !isNumber(exp)) return null;
|
|
16
|
+
return exp * 1e3 - 3e4 - Date.now();
|
|
17
|
+
}
|
|
18
|
+
function isTokenExpire(token) {
|
|
19
|
+
const remaining = tokenExpireInMs(token);
|
|
20
|
+
return remaining === null || remaining <= 0;
|
|
18
21
|
}
|
|
19
22
|
//#endregion
|
|
20
|
-
export { isTokenExpire };
|
|
23
|
+
export { isTokenExpire, tokenExpireInMs };
|
|
21
24
|
|
|
22
25
|
//# sourceMappingURL=token.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.mjs","names":[],"sources":["../../src/utils/token.ts"],"sourcesContent":["import { Base64 } from 'js-base64';\nimport { isNumber } from 'lodash-es';\n\nexport function
|
|
1
|
+
{"version":3,"file":"token.mjs","names":[],"sources":["../../src/utils/token.ts"],"sourcesContent":["import { Base64 } from 'js-base64';\nimport { isNumber } from 'lodash-es';\n\n// ms until the token reports as expired (30s guard included); null when undecodable\nexport function tokenExpireInMs(token: string | null): number | null {\n if (typeof token !== 'string') {\n return null;\n }\n\n const [, payload] = token.split('.');\n\n if (!payload) {\n return null;\n }\n\n let exp: number;\n try {\n exp = JSON.parse(Base64.decode(payload)).exp;\n } catch (error: unknown) {\n // never log the token itself: even a malformed one is credential material\n console.error('Invalid token:', error);\n return null;\n }\n\n if (!exp || !isNumber(exp)) {\n return null;\n }\n // Report as expired before (real expire time - 30s)\n return exp * 1000 - 30000 - Date.now();\n}\n\nexport function isTokenExpire(token: string | null): boolean {\n const remaining = tokenExpireInMs(token);\n return remaining === null || remaining <= 0;\n}\n"],"mappings":";;;AAIA,SAAgB,gBAAgB,OAAqC;CACnE,IAAI,OAAO,UAAU,UACnB,OAAO;CAGT,MAAM,GAAG,WAAW,MAAM,MAAM,GAAG;CAEnC,IAAI,CAAC,SACH,OAAO;CAGT,IAAI;CACJ,IAAI;EACF,MAAM,KAAK,MAAM,OAAO,OAAO,OAAO,CAAC,CAAC,CAAC;CAC3C,SAAS,OAAgB;EAEvB,QAAQ,MAAM,kBAAkB,KAAK;EACrC,OAAO;CACT;CAEA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,GACvB,OAAO;CAGT,OAAO,MAAM,MAAO,MAAQ,KAAK,IAAI;AACvC;AAEA,SAAgB,cAAc,OAA+B;CAC3D,MAAM,YAAY,gBAAgB,KAAK;CACvC,OAAO,cAAc,QAAQ,aAAa;AAC5C"}
|
package/build/utils/url.js
CHANGED
|
@@ -11,7 +11,7 @@ var url_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
|
11
11
|
isURL: () => isURL
|
|
12
12
|
});
|
|
13
13
|
function isURL(url) {
|
|
14
|
-
return (0, validator_lib_isURL.default)(url
|
|
14
|
+
return (0, validator_lib_isURL.default)(typeof url === "string" ? url : "", {
|
|
15
15
|
protocols: [
|
|
16
16
|
"http",
|
|
17
17
|
"https",
|
package/build/utils/url.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.js","names":[],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isEmailValidator from 'validator/lib/isEmail';\nimport isURLValidator from 'validator/lib/isURL';\n\nexport function isURL(url: string): boolean {\n return isURLValidator(url
|
|
1
|
+
{"version":3,"file":"url.js","names":[],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isEmailValidator from 'validator/lib/isEmail';\nimport isURLValidator from 'validator/lib/isURL';\n\nexport function isURL(url: string): boolean {\n // npm does not validate these fields on publish: a non-string truthy value\n // (e.g. `homepage: 123`) would make the validator throw and crash the page\n return isURLValidator(typeof url === 'string' ? url : '', {\n protocols: ['http', 'https', 'git+https', 'git'],\n require_protocol: true,\n require_tld: false,\n });\n}\n\nexport function isEmail(email: string): boolean {\n return isEmailValidator(email || '');\n}\n\nexport function extractFileName(url: string): string {\n return url.substring(url.lastIndexOf('/') + 1);\n}\n\n// Legacy Edge support for file downloads\ninterface NavigatorWithMSSaveBlob extends Navigator {\n msSaveBlob?: (blob: Blob, fileName: string) => boolean;\n}\n\nfunction blobToFile(blob: Blob, fileName: string): File {\n // Create a proper File object by extending the Blob with File properties\n const fileProperties = {\n lastModified: Date.now(),\n name: fileName,\n };\n\n // Use Object.assign to copy properties while maintaining the Blob prototype\n return Object.assign(blob, fileProperties) as File;\n}\n\nexport function downloadFile(fileStream: Blob, fileName: string): void {\n let file: File;\n // File constructor is not supported by Edge\n // https://developer.mozilla.org/en-US/docs/Web/API/File#Browser_compatibility\n const nav = navigator as NavigatorWithMSSaveBlob;\n if (nav.msSaveBlob) {\n // Detect if Edge\n file = blobToFile(new Blob([fileStream], { type: 'application/octet-stream' }), fileName);\n } else {\n file = new File([fileStream], fileName, {\n type: 'application/octet-stream',\n lastModified: Date.now(),\n });\n }\n\n const objectURL = URL.createObjectURL(file);\n const fileLink = document.createElement('a');\n fileLink.href = objectURL;\n fileLink.download = fileName;\n\n // Skip actual download in test environment to avoid JSDOM navigation error\n // Check if we're in a test environment (JSDOM)\n const isTestEnvironment =\n (typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.userAgent &&\n window.navigator.userAgent.includes('Node.js')) ||\n window.navigator.userAgent.includes('jsdom');\n\n if (!isTestEnvironment) {\n // Without appending to an HTML Element, download dialog does not show up on Firefox\n // https://github.com/verdaccio/ui/issues/119\n document.documentElement.appendChild(fileLink);\n fileLink.click();\n // firefox requires remove the object url\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n document.documentElement.removeChild(fileLink);\n }, 150);\n } else {\n // In test environment, just clean up without triggering navigation\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n }, 150);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAGA,SAAgB,MAAM,KAAsB;CAG1C,QAAA,GAAO,oBAAA,QAAA,CAAe,OAAO,QAAQ,WAAW,MAAM,IAAI;EACxD,WAAW;GAAC;GAAQ;GAAS;GAAa;EAAK;EAC/C,kBAAkB;EAClB,aAAa;CACf,CAAC;AACH;AAEA,SAAgB,QAAQ,OAAwB;CAC9C,QAAA,GAAO,sBAAA,QAAA,CAAiB,SAAS,EAAE;AACrC;AAEA,SAAgB,gBAAgB,KAAqB;CACnD,OAAO,IAAI,UAAU,IAAI,YAAY,GAAG,IAAI,CAAC;AAC/C;AAOA,SAAS,WAAW,MAAY,UAAwB;CAQtD,OAAO,OAAO,OAAO,MAAM;EALzB,cAAc,KAAK,IAAI;EACvB,MAAM;CAImB,CAAc;AAC3C;AAEA,SAAgB,aAAa,YAAkB,UAAwB;CACrE,IAAI;CAIJ,IAAI,UAAI,YAEN,OAAO,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,2BAA2B,CAAC,GAAG,QAAQ;MAExF,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU;EACtC,MAAM;EACN,cAAc,KAAK,IAAI;CACzB,CAAC;CAGH,MAAM,YAAY,IAAI,gBAAgB,IAAI;CAC1C,MAAM,WAAW,SAAS,cAAc,GAAG;CAC3C,SAAS,OAAO;CAChB,SAAS,WAAW;CAWpB,IAAI,EAND,OAAO,WAAW,eACjB,OAAO,aACP,OAAO,UAAU,aACjB,OAAO,UAAU,UAAU,SAAS,SAAS,KAC/C,OAAO,UAAU,UAAU,SAAS,OAAO,IAErB;EAGtB,SAAS,gBAAgB,YAAY,QAAQ;EAC7C,SAAS,MAAM;EAEf,iBAAiB;GACf,IAAI,gBAAgB,SAAS;GAC7B,SAAS,gBAAgB,YAAY,QAAQ;EAC/C,GAAG,GAAG;CACR,OAEE,iBAAiB;EACf,IAAI,gBAAgB,SAAS;CAC/B,GAAG,GAAG;AAEV"}
|
package/build/utils/url.mjs
CHANGED
package/build/utils/url.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.mjs","names":[],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isEmailValidator from 'validator/lib/isEmail';\nimport isURLValidator from 'validator/lib/isURL';\n\nexport function isURL(url: string): boolean {\n return isURLValidator(url
|
|
1
|
+
{"version":3,"file":"url.mjs","names":[],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isEmailValidator from 'validator/lib/isEmail';\nimport isURLValidator from 'validator/lib/isURL';\n\nexport function isURL(url: string): boolean {\n // npm does not validate these fields on publish: a non-string truthy value\n // (e.g. `homepage: 123`) would make the validator throw and crash the page\n return isURLValidator(typeof url === 'string' ? url : '', {\n protocols: ['http', 'https', 'git+https', 'git'],\n require_protocol: true,\n require_tld: false,\n });\n}\n\nexport function isEmail(email: string): boolean {\n return isEmailValidator(email || '');\n}\n\nexport function extractFileName(url: string): string {\n return url.substring(url.lastIndexOf('/') + 1);\n}\n\n// Legacy Edge support for file downloads\ninterface NavigatorWithMSSaveBlob extends Navigator {\n msSaveBlob?: (blob: Blob, fileName: string) => boolean;\n}\n\nfunction blobToFile(blob: Blob, fileName: string): File {\n // Create a proper File object by extending the Blob with File properties\n const fileProperties = {\n lastModified: Date.now(),\n name: fileName,\n };\n\n // Use Object.assign to copy properties while maintaining the Blob prototype\n return Object.assign(blob, fileProperties) as File;\n}\n\nexport function downloadFile(fileStream: Blob, fileName: string): void {\n let file: File;\n // File constructor is not supported by Edge\n // https://developer.mozilla.org/en-US/docs/Web/API/File#Browser_compatibility\n const nav = navigator as NavigatorWithMSSaveBlob;\n if (nav.msSaveBlob) {\n // Detect if Edge\n file = blobToFile(new Blob([fileStream], { type: 'application/octet-stream' }), fileName);\n } else {\n file = new File([fileStream], fileName, {\n type: 'application/octet-stream',\n lastModified: Date.now(),\n });\n }\n\n const objectURL = URL.createObjectURL(file);\n const fileLink = document.createElement('a');\n fileLink.href = objectURL;\n fileLink.download = fileName;\n\n // Skip actual download in test environment to avoid JSDOM navigation error\n // Check if we're in a test environment (JSDOM)\n const isTestEnvironment =\n (typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.userAgent &&\n window.navigator.userAgent.includes('Node.js')) ||\n window.navigator.userAgent.includes('jsdom');\n\n if (!isTestEnvironment) {\n // Without appending to an HTML Element, download dialog does not show up on Firefox\n // https://github.com/verdaccio/ui/issues/119\n document.documentElement.appendChild(fileLink);\n fileLink.click();\n // firefox requires remove the object url\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n document.documentElement.removeChild(fileLink);\n }, 150);\n } else {\n // In test environment, just clean up without triggering navigation\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n }, 150);\n }\n}\n"],"mappings":";;;;;;;;;;AAGA,SAAgB,MAAM,KAAsB;CAG1C,OAAO,eAAe,OAAO,QAAQ,WAAW,MAAM,IAAI;EACxD,WAAW;GAAC;GAAQ;GAAS;GAAa;EAAK;EAC/C,kBAAkB;EAClB,aAAa;CACf,CAAC;AACH;AAEA,SAAgB,QAAQ,OAAwB;CAC9C,OAAO,iBAAiB,SAAS,EAAE;AACrC;AAEA,SAAgB,gBAAgB,KAAqB;CACnD,OAAO,IAAI,UAAU,IAAI,YAAY,GAAG,IAAI,CAAC;AAC/C;AAOA,SAAS,WAAW,MAAY,UAAwB;CAQtD,OAAO,OAAO,OAAO,MAAM;EALzB,cAAc,KAAK,IAAI;EACvB,MAAM;CAImB,CAAc;AAC3C;AAEA,SAAgB,aAAa,YAAkB,UAAwB;CACrE,IAAI;CAIJ,IAAI,UAAI,YAEN,OAAO,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,2BAA2B,CAAC,GAAG,QAAQ;MAExF,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU;EACtC,MAAM;EACN,cAAc,KAAK,IAAI;CACzB,CAAC;CAGH,MAAM,YAAY,IAAI,gBAAgB,IAAI;CAC1C,MAAM,WAAW,SAAS,cAAc,GAAG;CAC3C,SAAS,OAAO;CAChB,SAAS,WAAW;CAWpB,IAAI,EAND,OAAO,WAAW,eACjB,OAAO,aACP,OAAO,UAAU,aACjB,OAAO,UAAU,UAAU,SAAS,SAAS,KAC/C,OAAO,UAAU,UAAU,SAAS,OAAO,IAErB;EAGtB,SAAS,gBAAgB,YAAY,QAAQ;EAC7C,SAAS,MAAM;EAEf,iBAAiB;GACf,IAAI,gBAAgB,SAAS;GAC7B,SAAS,gBAAgB,YAAY,QAAQ;EAC/C,GAAG,GAAG;CACR,OAEE,iBAAiB;EACf,IAAI,gBAAgB,SAAS;CAC/B,GAAG,GAAG;AAEV"}
|
package/build/utils/utils.d.ts
CHANGED
|
@@ -19,6 +19,16 @@ export interface Repository {
|
|
|
19
19
|
export declare function formatRepository(repository: string | {
|
|
20
20
|
url?: string;
|
|
21
21
|
} | unknown): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Normalizes the `bugs` field to its url.
|
|
24
|
+
* @see https://docs.npmjs.com/cli/configuring-npm/package-json#bugs
|
|
25
|
+
*/
|
|
26
|
+
export declare function getBugsUrl(bugs: unknown): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Normalizes the `funding` field (string, object or array of both) to a url.
|
|
29
|
+
* @see https://docs.npmjs.com/cli/configuring-npm/package-json#funding
|
|
30
|
+
*/
|
|
31
|
+
export declare function getFundingUrl(funding: unknown): string | null;
|
|
22
32
|
export declare function formatDate(lastUpdate: string | number): string;
|
|
23
33
|
export declare function formatDateDistance(lastUpdate: Date | string | number): string;
|
|
24
34
|
/**
|