Compare commits

...

307 Commits

Author SHA1 Message Date
Juan Picado
4782bdd5e3 chore: update versions (next-7) (#4417)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-01-14 10:56:23 +01:00
Juan Picado
07a8dd3cd2 changeset release 2024-01-14 10:22:21 +01:00
Juan Picado
4f70a46585 changeset release 2024-01-14 10:20:39 +01:00
Juan Picado
172691ef1d update changeet 2024-01-14 10:17:05 +01:00
renovate[bot]
2dbfde9b7d fix(deps): update dependency react-hook-form to v7.49.3 (#4415)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-14 09:53:06 +01:00
renovate[bot]
44017ff2da chore(deps): update dependency style-loader to v3.3.4 (#4412)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-14 09:31:07 +01:00
renovate[bot]
6faecee7e6 fix(deps): update all linting dependencies (#4413)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-14 09:30:55 +01:00
renovate[bot]
3d94001b49 chore(deps): update dependency @types/validator to v13.11.8 (#4410) 2024-01-13 17:39:52 +01:00
renovate[bot]
5351356cb7 chore(deps): update dependency mini-css-extract-plugin to v2.7.7 (#4411) 2024-01-13 17:35:28 +01:00
renovate[bot]
bf6343e3c7 fix(deps): update dependency usehooks-ts to v2.9.3 (#4395) 2024-01-13 17:11:11 +01:00
renovate[bot]
8ab1cf1bc0 chore(deps): update all linting dependencies (#4405)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 21:45:22 +01:00
renovate[bot]
e63722a7a6 chore(deps): update dependency @types/node to v20.11.0 (#4391)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 13:23:44 +01:00
verdacciobot
6c1d2fca6a chore: updated static data 2024-01-11 00:12:50 +00:00
renovate[bot]
c65f9fefc2 chore(deps): update github/codeql-action digest to 8b7fcbf (#4399)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-08 22:39:38 +01:00
verdacciobot
66f9a17189 chore: updated static data 2024-01-08 00:13:14 +00:00
Juan Picado
49a1fc11c2 docs: update website 6.x 2024-01-07 11:44:42 +01:00
Juan Picado
d575eb9356 chore: update versions (next) (#4384) 2024-01-07 10:02:08 +01:00
renovate[bot]
a7745bf9df fix(deps): update material-ui monorepo to v5.15.3 (master) (#4376)
* fix(deps): update material-ui monorepo to v5.15.3

* chore: update snapshots

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Juan Picado <juanpicado19@gmail.com>
2024-01-06 19:51:59 +01:00
renovate[bot]
f1d219e48c chore(deps): update all linting dependencies to v6.18.0 (#4385) 2024-01-06 17:45:04 +01:00
Juan Picado
bdd55eacf9 chore: update pnpm (#4387) 2024-01-06 16:51:21 +01:00
renovate[bot]
22d9802be0 chore(deps): update dependency @types/react to v18.2.47 (#4383) 2024-01-06 13:25:20 +01:00
Marc Bernard
e14b064a38 chore(store): fix polynominal regex codeql (#4332) 2024-01-06 13:25:07 +01:00
renovate[bot]
1c5106ec6f fix(deps): update dependency dompurify to v3.0.8 (#4381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-06 11:32:08 +01:00
Marc Bernard
4d9632424d chore(config): increase test coverage (#4382)
* chore(config): increase test coverage

* adjust length (32 bytes in hex)
2024-01-06 11:31:32 +01:00
renovate[bot]
e1efd79b60 fix(deps): update dependency @crowdin/crowdin-api-client to v1.29.3 (#4380) 2024-01-05 13:08:42 +01:00
renovate[bot]
54260206f3 chore(deps): update dependency @crowdin/cli to v3.16.0 (#4379)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-05 10:37:28 +01:00
renovate[bot]
851950a0fc fix(deps): update dependency dompurify to v3.0.7 (#4378) 2024-01-04 20:19:43 +01:00
renovate[bot]
ddd74ef0fc fix(deps): update dependency @crowdin/crowdin-api-client to v1.29.2 (#4373)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-04 07:10:14 +01:00
renovate[bot]
968b59962c chore(deps): update dependency @testing-library/jest-dom to v6.2.0 (#4377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-03 23:41:53 +01:00
renovate[bot]
36cdc5c091 chore(deps): update dependency node-mocks-http to v1.14.1 (#4375) 2024-01-03 18:30:21 +01:00
renovate[bot]
869576ae57 chore(deps): update dependency sass to v1.69.7 (#4374)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-03 09:22:11 +01:00
renovate[bot]
d32ce71866 fix(deps): update dependency @crowdin/crowdin-api-client to v1.29.0 (#4372)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-02 12:59:41 +01:00
renovate[bot]
16cb6348c9 chore(deps): update all linting dependencies (#4365)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-02 09:17:55 +01:00
renovate[bot]
f5b9d20859 chore(deps): update actions/upload-artifact digest to a8a3f3a (#4363)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-01 16:40:35 +01:00
dependabot[bot]
ba7c7577c7 chore(deps): bump actions/upload-artifact from 3.1.3 to 4.0.0 (#4360) 2024-01-01 14:04:57 +01:00
dependabot[bot]
fcfa14fa9b chore(deps): bump actions/setup-node from 3.8.2 to 4.0.1 (#4362) 2024-01-01 14:04:30 +01:00
verdacciobot
224ddd91d7 chore: updated static data 2024-01-01 00:14:26 +00:00
Juan Picado
297ae86677 Update renovate.json 2023-12-31 16:40:49 +01:00
Juan Picado
11a1276281 Update LICENSE 2023-12-31 16:35:43 +01:00
Juan Picado
a347c3e934 Update renovate.json 2023-12-31 16:35:40 +01:00
Juan Picado
6dba80e3cb Update renovate.json 2023-12-31 16:22:46 +01:00
Juan Picado
9e6acdbdcc Update ui-components.yml 2023-12-31 16:15:02 +01:00
Juan Picado
3a0eab511f update ci settings 2023-12-31 16:12:25 +01:00
Juan Picado
5bec47859c Update renovate.json 2023-12-31 16:11:00 +01:00
Juan Picado
2673bccdd8 Update renovate.json 2023-12-31 16:08:17 +01:00
Juan Picado
0b5bd2ba92 update ci settings 2023-12-31 15:22:27 +01:00
Juan Picado
37825bfe77 chore: update versions (next) (#4351)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-12-31 14:54:02 +01:00
Juan Picado
f047cc8c25 refactor: auth with legacy sign support (#4113)
* refactor: auth with legacy sign support

refactor: auth with legacy sign support

add tests

add tests

clean up lock fil

clean up lock fil

add more ci to test

update ci

update ci

update ci

update ci

update ci

* chore: add test for deprecated legacy signature

* chore: add test for deprecated legacy signature

* chore: add test for deprecated legacy signature

* chore: add test for deprecated legacy signature

* chore: add test for deprecated legacy signature
2023-12-31 14:34:29 +01:00
renovate[bot]
5f8e361262 fix(deps): update dependency marked to v11.1.1 (#4349)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-31 08:21:39 +01:00
renovate[bot]
b537d0d5dd chore(deps): update dependency @types/node to v20.10.6 (#4346)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-30 11:46:59 +01:00
renovate[bot]
56442b8d03 chore(deps): update babel monorepo to v7.23.7 (#4343)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-30 09:40:14 +01:00
renovate[bot]
34ae4ef638 fix(deps): update dependency classnames to v2.5.1 (#4340) 2023-12-29 19:10:26 +01:00
renovate[bot]
ed5d78e0fe fix(deps): update dependency core-js to v3.35.0 (#4338) 2023-12-29 18:16:26 +01:00
renovate[bot]
922b37f200 chore(deps): update dependency sass to v1.69.6 (#4337) 2023-12-29 18:16:15 +01:00
renovate[bot]
c8c40a2cf5 fix(deps): update dependency cookies to v0.9.0 (#4339) 2023-12-29 18:15:56 +01:00
renovate[bot]
0d1205c951 chore(deps): update dependency @types/react to v18.2.46 (#4335)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-28 19:33:11 +01:00
renovate[bot]
2e711dabaf chore(deps): update dependency terser-webpack-plugin to v5.3.10 (#4336) 2023-12-28 18:43:31 +01:00
renovate[bot]
806bcdf46e chore(deps): update dependency @types/node-fetch to v2.6.10 (#4333) 2023-12-28 14:16:55 +01:00
renovate[bot]
f2959a370b fix(deps): update dependency classnames to v2.5.0 (#4330)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-28 11:42:11 +01:00
renovate[bot]
419eb8861b chore(deps): update actions/upload-artifact digest to a8a3f3a (#4329)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-28 11:41:52 +01:00
verdacciobot
6652bbacb3 chore: updated static data 2023-12-28 00:12:47 +00:00
renovate[bot]
e3b82ae391 chore(deps): update github/codeql-action digest to 1500a13 (#4319) 2023-12-27 18:15:02 +01:00
renovate[bot]
a9491acbde chore(deps): update dependency @testing-library/jest-dom to v6.1.6 (#4328) 2023-12-27 18:14:52 +01:00
renovate[bot]
7680323d2d chore(deps): update dependency fastify to v4.25.2 (#4324) 2023-12-27 18:14:43 +01:00
dependabot[bot]
7fb1714cb3 chore(deps): bump actions/upload-artifact from 3.1.3 to 4.0.0 (#4325)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3.1.3 to 4.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](a8a3f3ad30...c7d193f32e)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-27 16:08:09 +01:00
dependabot[bot]
898abdc714 chore(deps): bump github/codeql-action from 2.22.11 to 3.22.12 (#4326)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.11 to 3.22.12.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](03e7845b7b...012739e508)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-27 16:07:59 +01:00
renovate[bot]
c38a321168 fix(deps): update dependency pino to v8.17.2 (#4327)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-27 16:07:51 +01:00
renovate[bot]
d8097b8030 chore(deps): update all linting dependencies (master) (#4322) 2023-12-27 15:07:36 +01:00
verdacciobot
a7e0dbb753 chore: updated static data 2023-12-25 00:13:21 +00:00
Marc Bernard
0f3df248f8 chore(website): addons update codeql (#4321) 2023-12-24 20:45:09 +01:00
Juan Picado
7b579b3337 Update netlify.toml 2023-12-23 11:40:02 +01:00
Juan Picado
fd47fab9a8 Update netlify.toml 2023-12-23 11:07:12 +01:00
renovate[bot]
17cd8d4f36 chore(deps): update dependency @types/qs to v6.9.11 (#4317) 2023-12-21 23:29:02 +01:00
renovate[bot]
b22a3467c5 fix(deps): update dependency eslint-plugin-prettier to v5.1.1 (#4314) 2023-12-21 21:40:37 +01:00
verdacciobot
17e1479be5 chore: updated static data 2023-12-21 00:12:58 +00:00
renovate[bot]
5e4c768228 fix(deps): update dependency react-player to v2.14.1 (#4309)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-20 21:33:39 +01:00
renovate[bot]
22cf912483 chore(deps): update dependency html-webpack-plugin to v5.6.0 (#4310)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-20 21:33:21 +01:00
renovate[bot]
a2343d751b fix(deps): update dependency eslint-plugin-prettier to v5.1.0 (#4311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-20 21:33:12 +01:00
Marc Bernard
88a91bdfc7 chore(website): enhance plugin search ui (#4294)
* chore(website): enhance plugin search ui

* Delete .changeset/popular-nails-behave.md

* Update addons.json
2023-12-20 21:32:58 +01:00
Marc Bernard
10be85cb7e chore: add note about disk space requirement to contribution guidelines (#4295) 2023-12-19 12:41:52 +01:00
dependabot[bot]
0ad768d01c chore(deps): bump actions/setup-node from 3.8.2 to 4.0.1 (#4298)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3.8.2 to 4.0.1.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](1a4442cacd...b39b52d121)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-18 21:38:06 +01:00
renovate[bot]
655bcceb0f chore(deps): update github/codeql-action digest to 03e7845 (#4302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-18 21:37:52 +01:00
renovate[bot]
a730961df7 chore(deps): update actions/upload-artifact digest to a8a3f3a (#4301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-18 21:37:44 +01:00
renovate[bot]
2ecf69cc86 chore(deps): update all linting dependencies to v6.15.0 (#4303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-18 21:37:35 +01:00
dependabot[bot]
c01b9de325 chore(deps): bump github/codeql-action from 2.22.11 to 3.22.11 (#4300) 2023-12-18 13:41:51 +01:00
dependabot[bot]
b3f12c99b1 chore(deps): bump actions/upload-artifact from 3.1.3 to 4.0.0 (#4299) 2023-12-18 13:41:43 +01:00
renovate[bot]
e885cb126d chore(deps): update dependency @types/node to v20.10.5 (#4296)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-18 08:53:32 +01:00
verdacciobot
ec895bba79 chore: updated static data 2023-12-18 00:13:34 +00:00
renovate[bot]
74a8598355 chore(deps): update dependency @types/react-dom to v18.2.18 (#4290) 2023-12-16 09:26:14 +01:00
renovate[bot]
8c0058a9cf chore(deps): update dependency eslint to v8.56.0 (#4291) 2023-12-16 09:25:50 +01:00
renovate[bot]
d8ef641c76 chore(deps): update all linting dependencies (#4263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-15 21:14:26 +01:00
renovate[bot]
c456d2e482 chore(deps): update dependency @types/react to v18.2.45 (#4272)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-15 20:23:53 +01:00
renovate[bot]
49aa66e480 fix(deps): update dependency marked-highlight to v2.1.0 (#4287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-15 19:21:37 +01:00
renovate[bot]
d68392b102 chore(deps): update dependency fastify to v4.25.1 (#4289)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-15 17:45:27 +01:00
renovate[bot]
fb53818a47 fix(deps): update dependency react-player to v2.14.0 (#4284)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-15 08:46:51 +01:00
renovate[bot]
c80d26d926 fix(deps): update dependency pino to v8.17.1 (#4283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-15 08:46:27 +01:00
renovate[bot]
c02f2cb725 fix(deps): update dependency pino to v8.17.0 (#4277) 2023-12-14 07:08:02 +01:00
renovate[bot]
d6b00b8074 chore(deps): update github/codeql-action digest to 03e7845 (#4279) 2023-12-14 07:07:44 +01:00
renovate[bot]
1749efbd49 chore(deps): update dependency whatwg-fetch to v3.6.20 (#4280) 2023-12-14 07:07:28 +01:00
verdacciobot
56c5e20007 chore: updated static data 2023-12-14 00:12:48 +00:00
renovate[bot]
e4a0231b6c fix(deps): update dependency react-hook-form to v7.49.2 (#4276) 2023-12-13 19:54:21 +01:00
renovate[bot]
c198c01488 chore(deps): update dependency fastify to v4.25.0 (#4278) 2023-12-13 19:53:48 +01:00
renovate[bot]
2cee1a5801 fix(deps): update dependency react-hook-form to v7.49.1 (#4273) 2023-12-13 06:22:44 +01:00
renovate[bot]
d0b7647443 fix(deps): update material-ui monorepo to v5.15.0 (#4271)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-12 22:41:44 +01:00
renovate[bot]
d0ac8155ee chore(deps): update dependency node-mocks-http to v1.14.0 (#4270)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-12 21:57:11 +01:00
renovate[bot]
58cd9fd647 chore(deps): update github/codeql-action digest to 305f654 (#4269)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-12 21:56:57 +01:00
renovate[bot]
7262c10093 fix(deps): update dependency marked to v11.1.0 (#4267)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-12 08:21:33 +01:00
renovate[bot]
2f85f85bb0 chore(deps): update babel monorepo to v7.23.6 (#4261) 2023-12-11 19:33:37 +01:00
verdacciobot
8030e8d5d0 chore: updated static data 2023-12-11 00:13:21 +00:00
renovate[bot]
34c8e141b7 chore(deps): update dependency prettier to v3.1.1 (#4257)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-10 12:32:59 +01:00
renovate[bot]
c6e5a67fd8 fix(deps): update dependency react-hook-form to v7.49.0 (#4256) 2023-12-10 07:48:12 +01:00
renovate[bot]
baa3f84e42 chore(deps): update dependency @types/react to v18.2.43 (#4255)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-09 18:25:30 +01:00
renovate[bot]
30d4e59a97 fix(deps): update dependency core-js to v3.34.0 (#4232)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-09 08:34:37 +01:00
renovate[bot]
df37f5d205 chore(deps): update dependency @types/react to v18.2.42 (#4228) 2023-12-08 21:58:27 +01:00
renovate[bot]
31005bc8b9 chore(deps): update dependency ts-node to v10.9.2 (#4248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 19:22:31 +01:00
renovate[bot]
d5f7bdba0a fix(deps): update dependency @crowdin/crowdin-api-client to v1.28.2 (#4245)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 19:22:22 +01:00
renovate[bot]
c42f2d06bc fix(deps): update dependency npm to v10.2.5 (#4247) 2023-12-08 13:48:07 +01:00
renovate[bot]
995355f9c7 fix(deps): update dependency marked to v11.0.1 (#4246) 2023-12-08 12:32:42 +01:00
renovate[bot]
00fb00894c chore(deps): update dependency @types/react-virtualized to v9.21.29 (#4243)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 11:59:37 +01:00
renovate[bot]
e309047a77 chore(deps): update dependency html-webpack-plugin to v5.5.4 (#4244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 11:59:25 +01:00
renovate[bot]
ba6a098bbe chore(deps): update github/codeql-action digest to c0d1daa (#4241)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 11:24:10 +01:00
renovate[bot]
2bed2788df chore(deps): update dependency @types/node to v20.10.4 (#4242)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 11:23:58 +01:00
renovate[bot]
ccb8317b65 chore(deps): update dependency @types/jest to v29.5.11 (#4235)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 10:43:30 +01:00
verdacciobot
6e7c215613 chore: updated static data 2023-12-07 00:13:14 +00:00
renovate[bot]
beb949e5a6 fix(deps): update material-ui monorepo to v5.14.20 (#4230)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-05 16:05:48 +01:00
verdacciobot
a2b08766a5 chore: updated static data 2023-12-05 09:16:49 +00:00
renovate[bot]
cda54ec4da chore(deps): update all linting dependencies to v6.13.2 (#4226)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-04 22:05:50 +01:00
renovate[bot]
d4ab275799 fix(deps): update dependency marked-highlight to v2.0.9 (#4225)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-04 18:46:15 +01:00
legobeat
b593588c02 deps(e2e/ui): cypress@^11.2.0->^13.6.0 (#4222) 2023-12-04 14:33:01 +01:00
renovate[bot]
d6bd489129 chore(deps): update dependency @types/node to v20.10.3 (#4219)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-04 07:44:35 +01:00
verdacciobot
ed3518ee24 chore: updated static data 2023-12-04 00:13:15 +00:00
renovate[bot]
c3e97fb6dd chore(deps): update dependency @types/react to v18.2.41 (#4168)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-03 21:56:05 +01:00
renovate[bot]
03314c15c5 fix(deps): update dependency sonic-boom to v3.7.0 (#4211)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 22:31:16 +01:00
renovate[bot]
3a47c6d6a9 fix(deps): update dependency copy-text-to-clipboard to v3.2.0 (#4209)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 22:22:58 +01:00
renovate[bot]
5e49905394 fix(deps): update dependency react-player to v2.13.0 (#4208)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 22:14:29 +01:00
renovate[bot]
9d601c9e34 chore(deps): update dependency webpack-merge to v5.10.0 (#4193)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 21:59:20 +01:00
renovate[bot]
c9b9a84ecb fix(deps): update dependency npm to v9.9.2 (#4206)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 21:59:08 +01:00
renovate[bot]
9604732736 fix(deps): update dependency core-js to v3.33.3 (#4194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 21:57:04 +01:00
renovate[bot]
05608eb4e1 fix(deps): update dependency pino-abstract-transport to v1.1.0 (#4207)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 21:56:54 +01:00
renovate[bot]
33530632d6 fix(deps): update dependency activedirectory2 to v2.2.0 (#4205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 21:53:57 +01:00
renovate[bot]
bb83a1a733 fix(deps): update dependency @crowdin/crowdin-api-client to v1.28.1 (#4200)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 21:37:45 +01:00
renovate[bot]
3c04696dd1 chore(deps): update dependency webpack-bundle-analyzer to v4.10.1 (#4192)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 20:17:16 +01:00
renovate[bot]
fdab6b8c89 chore(deps): update dependency yaml to v2.3.4 (#4178)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 20:04:25 +01:00
renovate[bot]
46915b0d10 fix(deps): update dependency http-status-codes to v2.3.0 (#4191)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 19:37:36 +01:00
renovate[bot]
e5d4e91e21 fix(deps): update dependency fastify-plugin to v4.5.1 (#4190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 19:37:06 +01:00
renovate[bot]
4718b7c2d4 fix(deps): update dependency envinfo to v7.11.0 (#4189)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 19:33:10 +01:00
renovate[bot]
f63e216f20 chore(deps): update dependency webpack to v5.89.0 (#4188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 19:15:10 +01:00
Juan Picado
843bf8009c update deps (#4183) 2023-12-02 18:52:27 +01:00
renovate[bot]
cf5c359ab9 chore(deps): update dependency nock to v13.4.0 (#4184)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 18:38:11 +01:00
renovate[bot]
aca5212a4f chore(deps): update dependency sass to v1.69.5 (#4185)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 18:38:02 +01:00
renovate[bot]
c8c7e5641f chore(deps): update dependency fastify to v4.24.3 (#4182)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 16:29:35 +01:00
renovate[bot]
0abdb8f301 chore(deps): update dependency @testing-library/react to v14.1.2 (#4181)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 16:27:17 +01:00
renovate[bot]
6741d7ed80 chore(deps): update dependency @types/superagent to v4.1.24 (#4153)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 15:44:32 +01:00
renovate[bot]
5e83d76b22 chore(deps): update dependency @storybook/testing-library to ^0.2.0 (#4177)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 15:44:23 +01:00
Juan Picado
b92528e1c8 remove @types/async dep 2023-12-02 15:22:20 +01:00
Juan Picado
0a7b39908a chore: remove @types/request dep 2023-12-02 15:21:39 +01:00
Juan Picado
c43e1be2c0 chore: remove github-markdown-css dep 2023-12-02 15:21:05 +01:00
Juan Picado
2f17367d21 chore: update apache config ci 2023-12-02 15:14:24 +01:00
Juan Picado
001896ecfb chore: update all types dependencies 2023-12-02 15:13:30 +01:00
renovate[bot]
3159458282 chore(deps): update dependency @crowdin/cli to v3.15.0 (#4176)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 15:07:04 +01:00
renovate[bot]
b8d6311c48 chore(deps): update dependency @changesets/cli to v2.27.1 (#4175)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 15:03:11 +01:00
Juan Picado
ab5bd360e4 chore: update e2e ci settings 2023-12-02 15:01:01 +01:00
renovate[bot]
238f6aeb92 chore(deps): update dependency @changesets/changelog-github to v0.5.0 (#4174)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 14:46:28 +01:00
Juan Picado
8cca64bd4f Update docker-proxy-nginx-e2e.yml 2023-12-02 14:44:28 +01:00
renovate[bot]
a491baaa4c chore(deps): update all linting dependencies (#4173) 2023-12-02 14:04:43 +01:00
renovate[bot]
793dcd54c0 fix(deps): update material-ui monorepo to v5.14.19 (#4170)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 11:51:32 +01:00
Lennart
58daf3c9bd docs: Add secco to "Who is using" (#4172) 2023-12-02 11:49:12 +01:00
renovate[bot]
c07ed76dc6 fix(deps): update dependency yarn to v1.22.21 (#4167) 2023-12-02 09:36:36 +01:00
renovate[bot]
db83206753 fix(deps): update docusaurus monorepo to v2.4.3 (#4169) 2023-12-02 09:36:25 +01:00
renovate[bot]
e585965389 fix(deps): update dependency memfs to v3.5.3 (#4164) 2023-12-01 22:47:05 +01:00
renovate[bot]
b1e1cfbd8f fix(deps): update dependency react-markdown to v8.0.7 (#4165) 2023-12-01 22:46:52 +01:00
renovate[bot]
9cffa22bd2 fix(deps): update dependency react-virtualized to v9.22.5 (#4166) 2023-12-01 22:46:43 +01:00
renovate[bot]
541ec22536 fix(deps): update dependency country-flag-icons to v1.5.9 (#4163) 2023-12-01 20:42:14 +01:00
renovate[bot]
2af11ee8e3 chore(deps): update dependency typescript to v4.9.5 (#4158) 2023-12-01 20:42:04 +01:00
renovate[bot]
12fd19d3dd chore(deps): update react monorepo (#4161) 2023-12-01 18:17:31 +01:00
renovate[bot]
87f5598070 chore(deps): update dependency whatwg-fetch to v3.6.19 (#4160) 2023-12-01 18:17:05 +01:00
renovate[bot]
fda7ff26e9 chore(deps): update dependency @types/validator to v13.11.7 (#4155) 2023-12-01 16:53:24 +01:00
renovate[bot]
b313e56f75 chore(deps): update dependency terser-webpack-plugin to v5.3.9 (#4157) 2023-12-01 16:53:04 +01:00
renovate[bot]
667f705c0e chore(deps): update dependency @types/jsonwebtoken to v9.0.5 (#4142) 2023-12-01 10:00:20 +01:00
renovate[bot]
5e850af59b chore(deps): update dependency @types/webpack-env to v1.18.4 (#4156) 2023-12-01 10:00:02 +01:00
renovate[bot]
4e31fdf651 chore(deps): update dependency @types/jest to v29.5.10 (#4141) 2023-12-01 06:37:57 +01:00
renovate[bot]
326ec28930 chore(deps): update dependency @types/send to v0.17.4 (#4151) 2023-12-01 05:46:34 +01:00
renovate[bot]
afce58da48 chore(deps): update dependency @types/qs to v6.9.10 (#4146) 2023-12-01 05:46:10 +01:00
renovate[bot]
277ca7ee71 chore(deps): update dependency @types/express to v4.17.21 (#4138)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-01 04:55:24 +01:00
renovate[bot]
a07ff6350e chore(deps): update dependency @testing-library/jest-dom to v6.1.5 (#4150)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-01 04:55:14 +01:00
renovate[bot]
851eb5541f chore(deps): update dependency @types/semver to v7.5.6 (#4149)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-30 21:11:17 +01:00
renovate[bot]
c5831f3479 chore(deps): update dependency @types/mime to v3.0.4 (#4144)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-30 19:26:38 +01:00
renovate[bot]
7dd4494c2d chore(deps): update dependency @types/range-parser to v1.2.7 (#4147)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-30 19:26:28 +01:00
renovate[bot]
4136fc2e49 chore(deps): update dependency @types/http-errors to v2.0.4 (#4140)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-30 16:09:51 +01:00
renovate[bot]
287983c1c0 chore(deps): update dependency @types/node-fetch to v2.6.9 (#4145)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-30 16:09:42 +01:00
renovate[bot]
0b7f5a7e22 chore(deps): update dependency @types/connect to v3.4.38 (#4136) 2023-11-30 08:33:24 +01:00
renovate[bot]
cc4c113b0d chore(deps): update dependency @types/cookiejar to v2.1.5 (#4137)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-30 07:44:12 +01:00
verdacciobot
56f728c312 chore: updated static data 2023-11-30 00:12:57 +00:00
renovate[bot]
bf16931eef chore(deps): update babel monorepo to v7.23.5 (#4134) 2023-11-29 22:16:51 +01:00
renovate[bot]
789a2b2020 chore(deps): update dependency @types/async to v3.2.24 (#4135) 2023-11-29 22:16:37 +01:00
renovate[bot]
f93a5181f4 fix(deps): update dependency dayjs to v1.11.10 (#4130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-29 22:00:03 +01:00
renovate[bot]
9395365d65 fix(deps): update dependency handlebars to v4.7.8 (#4131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-29 21:59:50 +01:00
Juan Picado
0bda2c6fde Update renovate.json 2023-11-29 21:28:01 +01:00
Juan Picado
4912d31387 Update renovate.json 2023-11-29 21:25:33 +01:00
renovate[bot]
422bf8dba5 fix(deps): update dependency npm to v10.2.4 (#4121)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-29 21:21:02 +01:00
Juan Picado
77764b11a9 chore: improve docker ci 2023-11-29 20:50:45 +01:00
Juan Picado
795df2bf9a chore: fix website ci 2023-11-29 20:08:23 +01:00
Juan Picado
e5d71046e9 chore: fix website ci 2023-11-29 20:06:23 +01:00
Juan Picado
22212eeea1 chore: fix website ci 2023-11-29 20:02:58 +01:00
Juan Picado
faf5895db4 chore: fix website ci 2023-11-29 20:00:58 +01:00
Juan Picado
0fbc09d7da chore: update website config 2023-11-29 19:44:07 +01:00
renovate[bot]
54582b0594 chore(deps): update babel monorepo to v7.23.4 (#4126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-29 07:29:14 +01:00
renovate[bot]
a188439abc chore(deps): update actions/github-script digest to d7906e4 (#4123)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-27 18:12:27 +01:00
dependabot[bot]
cca9308d0f chore(deps): bump github/codeql-action from 2.22.7 to 2.22.8 (#4127)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.7 to 2.22.8.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](66b90a5db1...407ffafae6)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-27 18:12:18 +01:00
verdacciobot
ffbb890600 chore: updated static data 2023-11-27 00:13:13 +00:00
renovate[bot]
4d53066fac fix(deps): update dependency pino to v8.16.2 (#4122) 2023-11-23 17:23:37 +01:00
verdacciobot
98852b400d chore: updated static data 2023-11-23 00:12:53 +00:00
dependabot[bot]
7085c0b075 chore(deps): bump actions/github-script from 6.4.1 to 7.0.1 (#4119)
Bumps [actions/github-script](https://github.com/actions/github-script) from 6.4.1 to 7.0.1.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](d7906e4ad0...60a0d83039)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-20 17:27:41 +01:00
renovate[bot]
85e640d8d8 chore(deps): update dependency @types/bcryptjs to v2.4.6 (#4118)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-20 08:27:03 +01:00
renovate[bot]
8d00ca9029 chore(deps): update github/codeql-action digest to 66b90a5 (#4117)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-20 08:26:55 +01:00
verdacciobot
6b4603feaa chore: updated static data 2023-11-20 00:12:53 +00:00
Juan Picado
8ffdb6623c Update docker-proxy-nginx-e2e.yml 2023-11-19 11:35:33 +01:00
verdacciobot
cdeca77f4b chore: updated static data 2023-11-16 00:12:44 +00:00
renovate[bot]
14f8469d1b chore(deps): update dependency @types/async to v3.2.23 (#4116)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-14 12:23:06 +01:00
renovate[bot]
82d34ae4dc chore(deps): update dependency @types/activedirectory2 to v1.2.6 (#4115)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-13 08:12:50 +01:00
verdacciobot
400e4e6428 chore: updated static data 2023-11-13 00:13:45 +00:00
Juan Picado
c4e89143f3 update readme 2023-11-12 21:39:08 +01:00
renovate[bot]
1627957276 chore(deps): update babel monorepo to v7.23.3 (#4110)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-10 06:57:37 +01:00
renovate[bot]
357f39b78a fix(deps): update dependency dompurify to v2.4.7 (#4103)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-10 06:27:23 +01:00
verdacciobot
17087ffa97 chore: updated static data 2023-11-09 00:13:16 +00:00
renovate[bot]
acdf96aa33 chore(deps): update dependency @types/body-parser to v1.19.5 (#4105)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-07 11:20:46 +01:00
renovate[bot]
95674ecf69 chore(deps): update all linting dependencies (#4104)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-06 07:09:14 +01:00
verdacciobot
3a200ee37f chore: updated static data 2023-11-06 00:13:34 +00:00
verdacciobot
c6400203cf chore: updated static data 2023-11-02 00:12:58 +00:00
renovate[bot]
46ef5f0532 chore(deps): update actions/setup-node digest to 1a4442c (#4098)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-30 20:06:46 +01:00
renovate[bot]
491c788845 chore(deps): update dependency @types/bcryptjs to v2.4.5 (#4101)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-30 07:24:41 +01:00
verdacciobot
e4e7fcea3a chore: updated static data 2023-10-30 00:13:32 +00:00
renovate[bot]
461d95cef3 fix(deps): update dependency validator to v13.11.0 (#4095)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-29 10:25:24 +01:00
renovate[bot]
aedb209520 fix(deps): update dependency @crowdin/crowdin-api-client to v1.25.1 (#4092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-28 18:10:34 +02:00
Juan Picado
376eb53788 chore: update docker node base v21 2023-10-28 17:52:57 +02:00
Juan Picado
c922b83775 chore: update versions (next) (#4093)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-10-28 17:22:01 +02:00
Juan Picado
312bc100ff Create shy-garlics-cry.md 2023-10-28 17:14:07 +02:00
renovate[bot]
8004ebd445 chore(deps): update dependency @testing-library/jest-dom to v6.1.4 (#4082)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-28 09:28:11 +02:00
renovate[bot]
dd551fd110 chore(deps): update all linting dependencies (#4075)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-28 09:28:00 +02:00
renovate[bot]
e626f3bc70 chore(deps): update babel monorepo to v7.23.2 (#4081) 2023-10-28 08:37:03 +02:00
renovate[bot]
42660c164d chore(deps): update github/codeql-action digest to 74483a3 (#4074) 2023-10-28 06:54:39 +02:00
Juan Picado
eaea6ca2e8 docker build fix pnpm 8.9.0 2023-10-27 07:31:06 +02:00
Dina Basumatary
4c58a46b43 Get rid of @ts-ignore (iteration 1 or many more to go) (#4079)
* Update process.ts

- Removed the silentNpm function. not being used anywhere
- Type guard for childProcess.stdout
- fix type errors

* typo

* remove @ts-ignore

* remove ts-ignore

* chore: remove type already inferred

* chore: fix types

* chore: fix types and add typeguard

* chore: fix pnpm 8.9.0

* revert an incorrect change

---------

Co-authored-by: Dina Basumatary <dnafication@users.noreply.github.com>
2023-10-26 17:49:05 +02:00
verdacciobot
33cf14740d chore: updated static data 2023-10-26 00:12:53 +00:00
Juan Picado
56c082ab0a chore: restore ui-components.yml
setup is very particular cannot use corepack
2023-10-23 21:55:27 +02:00
Dina Basumatary
6d860074ec chore: remove deprecated corepack command (#4083)
* recommended way to use corepack

* Update ui-components.yml

* Update CONTRIBUTING.md

* corepack install doesn't work on node 18

* Update e2e-ci.yml

---------

Co-authored-by: Dina Basumatary <dnafication@users.noreply.github.com>
2023-10-23 21:49:18 +02:00
verdacciobot
f04de5103c chore: updated static data 2023-10-23 00:13:28 +00:00
Juan Picado
750d4e54fa Update changesets.yml 2023-10-22 18:31:30 +02:00
Juan Picado
047e2b78b7 chore: fix pnpm 8.9.0
https://github.com/pnpm/pnpm/releases/tag/v8.9.1 is breaking the builds
2023-10-22 18:21:22 +02:00
verdacciobot
bf394dd5d1 chore: updated static data 2023-10-19 00:12:41 +00:00
verdacciobot
436a639cb1 chore: updated static data 2023-10-16 00:13:12 +00:00
Juan Picado
2748471a4b chore: update contribution guidelines 2023-10-15 13:34:59 +02:00
Juan Picado
db1e32e440 chore: update versions (next) (#4056)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-10-14 22:53:21 +02:00
Juan Picado
daceb6d87e chore: restore engines legacy support (#4072)
* chore: restore minimatch and legacy support

to be used on 5.x versions

* Update package.json

* Create old-turkeys-heal.md
2023-10-14 22:43:03 +02:00
Juan Picado
580319a53a feat: ui improvements (#4071)
* feat: add download tarball indicator

* Update ActionBar.test.tsx

* fix: dark mode and readme css

* Create long-jars-collect.md

* Update long-jars-collect.md

* feat: improve install commands

* snapshots

* feat: hide deprecated versions option

* add testss

* feat: display deprecated versions

* add i18n

* fix e2e

* Update Readme.spec.tsx.snap
2023-10-14 19:19:52 +02:00
renovate[bot]
654caefff9 fix(deps): update material-ui monorepo to v5.14.13 (#4069)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-13 23:04:28 +02:00
verdacciobot
b52f7d35b4 chore: updated static data 2023-10-12 00:11:35 +00:00
renovate[bot]
3af3b58447 chore(deps): update dependency @crowdin/cli to v3.14.0 (#4067)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-11 08:39:07 +02:00
Juan Picado
8c7d4538b3 chore: fix website 2023-10-10 20:18:12 +02:00
Juan Picado
cc70e5925c chore: update crowdin 2023-10-10 19:50:02 +02:00
renovate[bot]
7c9dd5a74a chore(deps): update dependency style-loader to v3.3.3 (#4063)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-10 19:19:54 +02:00
renovate[bot]
9bfcc5a818 chore(deps): update dependency nodemon to v2.0.22 (#4062)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-10 19:19:37 +02:00
Juan Picado
933b239953 chore: release website 6.x (#4066) 2023-10-10 18:54:30 +02:00
renovate[bot]
9c30ffa02b chore(deps): update actions/checkout digest to f43a0e5 (#4060)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-10 18:24:51 +02:00
dependabot[bot]
2add0bc5d9 chore(deps): bump github/codeql-action from 2.21.9 to 2.22.1 (#4064)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.9 to 2.22.1.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](ddccb87388...fdcae64e14)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-10 18:24:38 +02:00
verdacciobot
5e488a97d0 chore: updated static data 2023-10-09 00:13:07 +00:00
Juan Picado
e7ebccb61d update major dependencies, remove old nodejs support (#4059)
* update major dependencies, remove old nodejs support

* Update ci.yml

* restore dep
2023-10-07 16:23:04 +02:00
Marc Bernard
3ca4056186 fix: Avoid 404 error when getting favicon on root (#4057)
* fix: Avoid 404 when getting favicon on root

* Add changeset
2023-10-07 10:43:05 +02:00
Juan Picado
44cd9e0060 chore: fix website 2023-10-07 09:02:33 +02:00
Juan Picado
f011103656 chore: fix local deps issue 2023-10-07 08:36:16 +02:00
dependabot[bot]
c6a7cc5b05 chore(deps): bump actions/checkout from 3.6.0 to 4.1.0 (#4041)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.6.0 to 4.1.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](f43a0e5ff2...8ade135a41)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-06 15:36:01 +02:00
Marc Bernard
02ba426ceb fix: display labels for engine versions (#4051) 2023-10-06 15:35:29 +02:00
Juan Picado
aaec8d8a8f Update patch.d.ts 2023-10-06 07:43:27 +02:00
Juan Picado
6a1287bdab chore: fix website search plugins
fix #4050
2023-10-06 07:35:39 +02:00
Juan Picado
10057a4ff1 chore: update local nodejs18 2023-10-06 06:06:02 +02:00
verdacciobot
5a3d68bd79 chore: updated static data 2023-10-05 00:12:33 +00:00
renovate[bot]
9381b6f53f chore(deps): update dependency @types/async to v3.2.21 (#4047)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 11:56:00 +02:00
dependabot[bot]
dbf630dc6a chore(deps): bump github/codeql-action from 2.21.8 to 2.21.9 (#4049)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.8 to 2.21.9.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](6a28655e3d...ddccb87388)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-03 11:55:41 +02:00
renovate[bot]
4f5c67e812 chore(deps): update dependency @types/bcryptjs to v2.4.4 (#4048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-02 07:03:57 +02:00
verdacciobot
6ec6d2f543 chore: updated static data 2023-10-02 00:13:02 +00:00
verdacciobot
0b5496b8d9 chore: updated static data 2023-09-28 00:12:52 +00:00
renovate[bot]
d9b443f56c chore(deps): update dependency @types/activedirectory2 to v1.2.4 (#4038) 2023-09-27 18:19:10 +02:00
renovate[bot]
72e00ba6e7 chore(deps): update github/codeql-action digest to 6a28655 (#4037)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-26 07:27:53 +02:00
dependabot[bot]
744e8bfb1f chore(deps): bump github/codeql-action from 2.21.7 to 2.21.8 (#4039)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.7 to 2.21.8.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](04daf014b5...6a28655e3d)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-26 07:27:43 +02:00
dependabot[bot]
4bccde264a chore(deps): bump docker/setup-qemu-action from 2.2.0 to 3.0.0 (#4040)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2.2.0 to 3.0.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](2b82ce82d5...68827325e0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-25 21:25:51 +02:00
verdacciobot
edb224406c chore: updated static data 2023-09-25 00:13:17 +00:00
Juan Picado
2b5a15c22b chore: add e2e npm 10 e2e (#4036) 2023-09-24 12:44:39 +02:00
Juan Picado
fa23d81fbc chore: update versions (next) (#4033)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-09-24 10:34:31 +02:00
Juan Picado
aba2f66cba update release notes 2023-09-24 10:28:45 +02:00
Ku3mi41
92f1c34ae8 fix: ui expired token (#4007)
* fix: login state when token expired
If there token in the localstorage, the user was always displayed as authenticated, regardless of the token expiration

* chore: added changeset for @verdaccio/ui-components

* tests: JSON error for node versions older than 20
2023-09-24 10:17:53 +02:00
dependabot[bot]
d2d3bad0d0 chore(deps): bump github/codeql-action from 2.21.4 to 2.21.7 (#4023)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.4 to 2.21.7.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](a09933a12a...04daf014b5)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-24 07:48:16 +02:00
verdacciobot
b83d7bc5ea chore: updated static data 2023-09-21 00:12:24 +00:00
renovate[bot]
f514c5fd37 chore(deps): update babel monorepo (#4021)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-19 17:37:11 +02:00
renovate[bot]
b40361deb5 chore(deps): update all linting dependencies (#4020) 2023-09-19 07:12:30 +02:00
verdacciobot
72df9f48a3 chore: updated static data 2023-09-18 00:12:35 +00:00
dependabot[bot]
c527569c17 chore(deps): bump actions/upload-artifact from 3.1.2 to 3.1.3 (#4015)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](0b7f8abb15...a8a3f3ad30)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-14 19:56:30 +02:00
verdacciobot
b6e4711898 chore: updated static data 2023-09-14 00:12:40 +00:00
verdacciobot
aa96b44cb8 chore: updated static data 2023-09-11 00:13:09 +00:00
verdacciobot
f236452e26 chore: updated static data 2023-09-07 00:12:56 +00:00
renovate[bot]
9f1f053913 chore(deps): update babel monorepo (#4004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-04 07:54:59 +02:00
verdacciobot
b22b3cc09c chore: updated static data 2023-09-04 00:13:07 +00:00
verdacciobot
9b4a445923 chore: updated static data 2023-08-31 00:11:57 +00:00
renovate[bot]
570de0c40a chore(deps): update actions/checkout digest to f43a0e5 (#3994)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-29 18:30:44 +02:00
renovate[bot]
a135fcb283 chore(deps): update all linting dependencies (#3995) 2023-08-28 07:52:45 +02:00
verdacciobot
fc0a0ddb66 chore: updated static data 2023-08-28 00:13:00 +00:00
Juan Picado
c356c178b5 chore: update versions (next) (#3993)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-26 15:33:57 +02:00
Juan Picado
35cc57b79e fix: local search keyword undefined errors (#3992)
* fix: local search keyword undefined errors

* Update indexer.ts
2023-08-26 15:24:00 +02:00
441 changed files with 34740 additions and 9961 deletions

View File

@@ -4,7 +4,7 @@
"@babel/env",
{
"targets": {
"node": 16
"node": 12
}
}
],

View File

@@ -0,0 +1,6 @@
---
'@verdaccio/ui-components': patch
'@verdaccio/ui-theme': patch
---
- fixed login state when token is expired (@ku3mi41 in #3980)

View File

@@ -0,0 +1,6 @@
---
'@verdaccio/ui-theme': patch
'@verdaccio/ui-components': patch
---
fix: display labels for engine versions

View File

@@ -0,0 +1,15 @@
---
'@verdaccio/ui-theme': minor
'@verdaccio/ui-components': minor
---
feat: ui improvements
Some UI improvements
- download progress indicator: https://github.com/verdaccio/verdaccio/discussions/4068
- fix dark mode and readme css support https://github.com/verdaccio/verdaccio/discussions/3942 https://github.com/verdaccio/verdaccio/discussions/3467
- fix global for yarn packages and add version to the packages on copy
- feat: hide deprecated versions option
- fix: improve deprecated package style
- feat: display deprecated versions

View File

@@ -0,0 +1,18 @@
---
'@verdaccio/config': minor
'@verdaccio/core': minor
'@verdaccio/file-locking': minor
'@verdaccio/tarball': minor
'@verdaccio/url': minor
'@verdaccio/logger-7': minor
'@verdaccio/logger-commons': minor
'@verdaccio/logger-prettify': minor
'@verdaccio/middleware': minor
'verdaccio-audit': minor
'verdaccio-htpasswd': minor
'@verdaccio/search': minor
'@verdaccio/signature': minor
'@verdaccio/utils': minor
---
restore legacy support

View File

@@ -0,0 +1,7 @@
---
'@verdaccio/store': patch
'@verdaccio/tarball': patch
---
- Fixes polynomial regular expression when determining the file name of tarball
- Add tests for extracting tarball name

View File

@@ -0,0 +1,36 @@
---
'@verdaccio/api': major
'@verdaccio/auth': major
'@verdaccio/cli': major
'@verdaccio/config': major
'@verdaccio/core': major
'@verdaccio/file-locking': major
'@verdaccio/tarball': major
'@verdaccio/types': major
'@verdaccio/url': major
'@verdaccio/hooks': major
'@verdaccio/loaders': major
'@verdaccio/logger': major
'@verdaccio/logger-commons': major
'@verdaccio/logger-prettify': major
'@verdaccio/middleware': major
'@verdaccio/node-api': major
'verdaccio-audit': major
'verdaccio-auth-memory': major
'verdaccio-htpasswd': major
'@verdaccio/local-storage': major
'verdaccio-memory': major
'@verdaccio/ui-theme': major
'@verdaccio/proxy': major
'@verdaccio/search': major
'@verdaccio/server': major
'@verdaccio/server-fastify': major
'@verdaccio/signature': major
'@verdaccio/store': major
'@verdaccio/ui-components': major
'@verdaccio/utils': major
'verdaccio': major
'@verdaccio/web': major
---
update major dependencies, remove old nodejs support

View File

@@ -1,6 +1,6 @@
{
"mode": "pre",
"tag": "next",
"tag": "next-7",
"initialVersions": {
"@verdaccio/test-cli-commons": "1.1.0",
"@verdaccio/e2e-cli-npm6": "1.0.1",
@@ -57,5 +57,20 @@
"@verdaccio/website": "5.20.2",
"@verdaccio/local-publish": "0.0.1"
},
"changesets": ["breezy-mayflies-pull", "chilled-carrots-guess"]
"changesets": [
"angry-trees-tie",
"breezy-mayflies-pull",
"chilled-carrots-guess",
"eight-squids-judge",
"long-jars-collect",
"old-turkeys-heal",
"olive-bananas-wink",
"perfect-chairs-act",
"real-socks-vanish",
"shiny-worms-retire",
"shy-carrots-compare",
"shy-garlics-cry",
"weak-fans-explain",
"young-donuts-own"
]
}

View File

@@ -0,0 +1,5 @@
---
'verdaccio': patch
---
chore: test release

View File

@@ -0,0 +1,5 @@
---
'@verdaccio/search': patch
---
fix: keyword undefined errors

View File

@@ -0,0 +1,14 @@
---
'@verdaccio/server': minor
'@verdaccio/test-helper': minor
'@verdaccio/types': minor
'@verdaccio/middleware': minor
'@verdaccio/core': minor
'@verdaccio/signature': minor
'@verdaccio/url': minor
'@verdaccio/config': minor
'@verdaccio/auth': minor
'@verdaccio/api': minor
---
refactor: auth with legacy sign support

View File

@@ -0,0 +1,5 @@
---
'@verdaccio/signature': patch
---
chore: export signature options type

View File

@@ -0,0 +1,5 @@
---
'@verdaccio/server': patch
---
fix: Avoid 404 error when getting favicon from root

View File

@@ -0,0 +1,5 @@
---
'@verdaccio/config': patch
---
chore(config): increase test coverage

View File

@@ -20,21 +20,21 @@ jobs:
if: github.ref == 'refs/heads/master' && github.repository == 'verdaccio/verdaccio'
steps:
- name: checkout code repository
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
with:
fetch-depth: 0
- name: setup node.js
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
env:
NODE_AUTH_TOKEN: ${{ secrets.REGISTRY_AUTH_TOKEN }}
- name: install pnpm
run: npm i pnpm@latest-8 -g
env:
NODE_AUTH_TOKEN: ${{ secrets.REGISTRY_AUTH_TOKEN }}
- name: Install pnpm
run: |
corepack enable
corepack install
- name: setup pnpm config
run: pnpm config set store-dir $PNPM_CACHE_FOLDER

View File

@@ -18,9 +18,9 @@ jobs:
env:
NODE_ENV: production
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
@@ -47,9 +47,9 @@ jobs:
name: Lint
needs: prepare
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
@@ -71,9 +71,9 @@ jobs:
name: Format
needs: prepare
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
@@ -100,9 +100,9 @@ jobs:
name: ${{ matrix.os }} / Node ${{ matrix.node_version }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node ${{ matrix.node_version }}
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version: ${{ matrix.node_version }}
- name: Install pnpm
@@ -126,8 +126,8 @@ jobs:
runs-on: windows-latest
name: UI Test E2E
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm

View File

@@ -25,51 +25,51 @@ jobs:
ports:
- 4873:4873
env:
NODE_ENV: production
NODE_ENV: production
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- name: Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: |
corepack enable
corepack prepare --activate pnpm@latest-8
- name: set store
run: |
mkdir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --registry http://localhost:4873
- name: Cache .pnpm-store
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
pnpm-
lint:
runs-on: ubuntu-latest
name: Lint
needs: prepare
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: |
corepack enable
corepack prepare --activate pnpm@latest-8
corepack install
- name: set store
run: |
mkdir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --registry http://localhost:4873
- name: Cache .pnpm-store
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
pnpm-
lint:
runs-on: ubuntu-latest
name: Lint
needs: prepare
steps:
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Node
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: |
corepack enable
corepack install
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- name: set store
run: |
pnpm config set store-dir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --ignore-scripts
- name: Lint
@@ -79,52 +79,52 @@ jobs:
name: Format
needs: prepare
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: |
corepack enable
corepack prepare --activate pnpm@latest-8
corepack install
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- name: set store
run: |
pnpm config set store-dir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --ignore-scripts
- name: Lint
run: pnpm format:check
test:
needs: [format, lint]
needs: [prepare]
strategy:
fail-fast: true
matrix:
os: [ubuntu-latest]
node_version: [16, 18]
node_version: [18, 20, 21]
name: ${{ matrix.os }} / Node ${{ matrix.node_version }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node ${{ matrix.node_version }}
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version: ${{ matrix.node_version }}
- name: Install pnpm
run: |
corepack enable
corepack prepare --activate pnpm@latest-8
corepack prepare
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- name: set store
run: |
pnpm config set store-dir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --ignore-scripts --registry http://localhost:4873
- name: build
@@ -137,21 +137,21 @@ jobs:
name: synchronize translations
if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: |
corepack enable
corepack prepare --activate pnpm@latest-8
corepack install
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- name: set store
run: |
pnpm config set store-dir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
## we need scripts, pupetter downloads aditional content
run: pnpm install --registry http://localhost:4873

View File

@@ -21,7 +21,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
@@ -34,7 +34,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@a09933a12a80f87b87005513f0abb1494c27a716 # v2
uses: github/codeql-action/init@8b7fcbfac2aae0e6c24d9f9ebd5830b1290b18e4 # v2
# Override language selection by uncommenting this and choosing your languages
# with:
@@ -42,7 +42,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@a09933a12a80f87b87005513f0abb1494c27a716 # v2
uses: github/codeql-action/autobuild@8b7fcbfac2aae0e6c24d9f9ebd5830b1290b18e4 # v2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -56,4 +56,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@a09933a12a80f87b87005513f0abb1494c27a716 # v2
uses: github/codeql-action/analyze@8b7fcbfac2aae0e6c24d9f9ebd5830b1290b18e4 # v2

View File

@@ -12,24 +12,31 @@ jobs:
docker:
timeout-minutes: 10
runs-on: ubuntu-latest
env:
NODE_OPTIONS: --max_old_space_size=4096
steps:
- name: Checkout
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Start containers
run: docker-compose -f "./e2e/docker/apache-verdaccio/docker-compose.yaml" up -d --build
- name: Install node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version: 18
node-version-file: '.nvmrc'
- name: npm setup
run: |
npm config set fetch-retries="10"
npm config set fetch-retry-factor="50"
npm config set fetch-retry-mintimeout="20000"
npm config set fetch-retry-maxtimeout="80000"
- name: verdaccio cli
run: npm install -g verdaccio --registry http://localhost
- name: gastby cli
run: npm install -g gatsby-cli --registry http://localhost
- name: netlify cli
run: npm install -g netlify-cli --registry http://localhost
# - name: netlify cli
# run: npm install -g netlify-cli --registry http://localhost
- name: angular cli
run: npm install -g @angular/cli --registry http://localhost

View File

@@ -9,21 +9,22 @@ jobs:
docker:
timeout-minutes: 10
runs-on: ubuntu-latest
env:
NODE_OPTIONS: --max_old_space_size=4096
steps:
- name: Checkout
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Start containers
run: docker-compose -f "./e2e/docker/proxy-nginx/docker-compose.yaml" up -d --build
- name: Install node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version: 18
node-version-file: '.nvmrc'
- name: npm setup
run: |
npm config set fetch-retries="5"
npm config set fetch-retries="10"
npm config set fetch-retry-factor="50"
npm config set fetch-retry-mintimeout="20000"
npm config set fetch-retry-maxtimeout="80000"
@@ -31,8 +32,8 @@ jobs:
run: npm install -g verdaccio --registry http://localhost
- name: gastby cli
run: npm install -g gatsby-cli --registry http://localhost
- name: netlify cli
run: npm install -g netlify-cli --registry http://localhost
#- name: netlify cli
# run: npm install -g netlify-cli --registry http://localhost
- name: angular cli
run: npm install -g @angular/cli --registry http://localhost

View File

@@ -23,8 +23,8 @@ jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # tag=v1
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # tag=v1
- uses: docker/setup-buildx-action@v1
with:
driver-opts: network=host

View File

@@ -15,44 +15,48 @@ jobs:
env:
NODE_ENV: production
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- name: Use Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: npm i pnpm@latest-8 -g
- name: set store
run: |
mkdir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --reporter=silence --ignore-scripts --registry http://localhost:4873
- name: Cache .pnpm-store
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
restore-keys: |
pnpm-
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: |
corepack enable
corepack prepare
- name: set store
run: |
mkdir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --reporter=silence --ignore-scripts --registry http://localhost:4873
- name: Cache .pnpm-store
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
restore-keys: |
pnpm-
build:
needs: [prepare]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node 16
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: npm i pnpm@latest-8 -g
run: |
corepack enable
corepack prepare
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
- name: set store
run: |
pnpm config set store-dir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm recursive install --reporter=silence --registry http://localhost:4873
- name: build
@@ -73,29 +77,38 @@ jobs:
# key: test-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
# restore-keys: |
# test-
e2e-cli:
e2e-cli-npm:
needs: [prepare, build]
strategy:
fail-fast: false
matrix:
pkg: [npm6, npm7, npm8, npm9, pnpm6, pnpm7, pnpm8, yarn1, yarn2, yarn3, yarn4]
node: [16, 18, 19]
pkg:
[
npm6,
npm7,
npm8,
npm9,
npm10
]
node: [20, 21]
name: ${{ matrix.pkg }}/ ubuntu-latest / ${{ matrix.node }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version: ${{ matrix.node }}
- name: Install pnpm
run: npm i pnpm@latest-8 -g
run: |
corepack enable
corepack prepare
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
- name: set store
run: |
pnpm config set store-dir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --offline --reporter=silence --ignore-scripts --registry http://localhost:4873
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
@@ -107,6 +120,97 @@ jobs:
# path: ./e2e/
# key: test-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
- name: build e2e
run: pnpm --filter @verdaccio/test-cli-commons build
run: pnpm --filter @verdaccio/test-cli-commons build
- name: Test CLI
run: NODE_ENV=production pnpm test --filter ...@verdaccio/e2e-cli-${{matrix.pkg}}
# TODO: fix pnpm setup
# e2e-cli-pnpm:
# needs: [prepare, build]
# strategy:
# fail-fast: true
# matrix:
# pkg:
# [
# pnpm6,
# pnpm7,
# pnpm8
# ]
# node: [20, 21]
# name: ${{ matrix.pkg }}/ ubuntu-latest / ${{ matrix.node }}
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
# - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
# with:
# node-version: ${{ matrix.node }}
# - name: Install pnpm
# run: |
# corepack enable
# corepack prepare
# - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
# with:
# path: ~/.pnpm-store
# key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
# - name: set store
# run: |
# pnpm config set store-dir ~/.pnpm-store
# - name: Install
# run: pnpm install --loglevel debug --ignore-scripts --registry http://localhost:4873
# - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
# with:
# path: ./packages/
# key: pkg-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
# # - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
# # with:
# # path: ./e2e/
# # key: test-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
# - name: build e2e
# run: pnpm --filter @verdaccio/test-cli-commons build
# - name: Test CLI
# run: NODE_ENV=production pnpm test --filter ...@verdaccio/e2e-cli-${{matrix.pkg}}
e2e-cli-yarn:
needs: [prepare, build]
strategy:
fail-fast: false
matrix:
pkg:
[
yarn1,
yarn2,
yarn3,
yarn4
]
node: [20, 21]
name: ${{ matrix.pkg }}/ ubuntu-latest / ${{ matrix.node }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version: ${{ matrix.node }}
- name: Install pnpm
run: |
corepack enable
corepack prepare
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
- name: set store
run: |
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --offline --reporter=silence --ignore-scripts --registry http://localhost:4873
- uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
with:
path: ./packages/
key: pkg-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
# - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
# with:
# path: ./e2e/
# key: test-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
- name: build e2e
run: pnpm --filter @verdaccio/test-cli-commons build
- name: Test CLI
run: NODE_ENV=production pnpm test --filter ...@verdaccio/e2e-cli-${{matrix.pkg}}

View File

@@ -15,22 +15,22 @@ jobs:
env:
NODE_ENV: production
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
- name: Install pnpm
run: |
corepack enable
corepack prepare --activate pnpm@latest-8
corepack enable
corepack prepare
- name: Install
run: pnpm install --reporter=silence --registry http://localhost:4873
- name: build
run: pnpm build
- name: Test UI
run: pnpm test:e2e:ui
- uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3
with:
name: videos
path: /home/runner/work/verdaccio/verdaccio/e2e/ui/cypress/videos

View File

@@ -19,11 +19,11 @@ jobs:
name: Run script
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
with:
persist-credentials: false
fetch-depth: 0
- uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version: 18.x
- name: install pnpm

View File

@@ -3,12 +3,17 @@ name: UI Components
on:
workflow_dispatch:
pull_request:
branches-ignore:
- 'renovate/*'
- 'dependabot/*'
paths:
- .github/workflows/ui-components.yml
- 'packages/ui-components/**'
- 'package.json'
- 'pnpm-workspace.yaml'
- 'pnpm-lock.yaml'
schedule:
- cron: '0 0 * * 1'
permissions:
contents: read # to fetch code (actions/checkout)
@@ -27,10 +32,10 @@ jobs:
env:
NODE_OPTIONS: --max_old_space_size=4096
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version-file: '.nvmrc'
@@ -47,7 +52,7 @@ jobs:
- name: Install pnpm
run: |
corepack enable
corepack prepare --activate pnpm@latest-8
corepack prepare --activate pnpm@8.9.0
- name: Install
run: pnpm install
- name: Build storybook

View File

@@ -3,6 +3,9 @@ name: Verdaccio Website CI
on:
workflow_dispatch:
pull_request:
branches-ignore:
- 'renovate/*'
- 'dependabot/*'
paths:
- 'website/**'
- './.github/workflows/website.yml'
@@ -20,32 +23,40 @@ jobs:
pull-requests: write # to comment on pull-requests
runs-on: ubuntu-latest
name: setup verdaccio
services:
verdaccio:
image: verdaccio/verdaccio:5
ports:
- 4873:4873
env:
NODE_ENV: production
env:
NODE_OPTIONS: --max_old_space_size=4096
steps:
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
- name: Use Node 16
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # tag=v3
- name: Node
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v3
with:
node-version: 16
- name: Cache pnpm modules
node-version-file: '.nvmrc'
- name: Install pnpm
run: |
corepack enable
corepack install
- name: set store
run: |
mkdir ~/.pnpm-store
pnpm config set store-dir ~/.pnpm-store
- name: Install
run: pnpm install --registry http://localhost:4873
- name: Cache .pnpm-store
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
env:
cache-name: cache-pnpm-modules
with:
path: ~/.pnpm-store
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}-${{ hashFiles('**/pnpm-lock.yaml') }}
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}-
- uses: pnpm/action-setup@d882d12c64e032187b2edb46d3a0d003b7a43598 # tag=v2.4.0
with:
version: latest-8
run_install: |
- recursive: true
args: [--frozen-lockfile]
pnpm-
- name: Build
run: pnpm build
- name: Build Translations percentage
@@ -109,7 +120,7 @@ jobs:
- name: Format lighthouse score
id: format_lighthouse_score
uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # tag=v6
uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |

1
.npmrc
View File

@@ -1,3 +1,2 @@
always-auth = true
loglevel=info
fetch-retries="10"

2
.nvmrc
View File

@@ -1 +1 @@
16
20

15
.prettierrc Normal file
View File

@@ -0,0 +1,15 @@
{
"endOfLine": "lf",
"useTabs": false,
"printWidth": 100,
"tabWidth": 2,
"singleQuote": true,
"bracketSpacing": true,
"trailingComma": "es5",
"semi": true,
"plugins": ["@trivago/prettier-plugin-sort-imports"],
"importOrder": ["^@verdaccio/(.*)$", "^[./]"],
"importOrderSeparation": true,
"importOrderParserPlugins": ["typescript", "classProperties", "jsx"],
"importOrderSortSpecifiers": true
}

View File

@@ -1,13 +1,10 @@
// Place your settings in this file to overwrite default and user settings.
{
"files.exclude": {
"**/.nyc_output": true,
"**/build": false,
"**/coverage": true,
".idea": true,
"storage_default_storage": true,
".yarn": true
},
"editor.formatOnSave": true,
"typescript.tsdk": "node_modules/typescript/lib"
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
}

View File

@@ -29,6 +29,8 @@ The Verdaccio project is split into several areas, the first three hosted in the
## Prepare local setup {#local-setup}
**Note**: The size of the Verdaccio project is quite significant. Unzipped it is about 33 MB. However, a full build with all node_modules installed takes about **2.8 GB** of disk space (~190k files)!
Verdaccio uses [pnpm](https://pnpm.io) as the package manager for development in this repository.
If you are using pnpm for the first time the [pnpm configuration documentation](https://pnpm.io/configuring) may be useful to avoid any potential problems with the following steps.
@@ -41,61 +43,70 @@ package-lock=false
This setting would cause the `pnpm install` command to install incorrect versions of package dependencies and the subsequent `pnpm build` step would likely fail.
To begin your development setup, please install the latest version of pnpm globally:
We use [corepack](https://github.com/nodejs/corepack) to install and use a specific (latest) version of pnpm. Please run the following commands which is use a specific version on Node.js and configure it to use a specific version of pnpm. The version of pnpm is specified in the `package.json` file in `packageManager` field.
```shell
nvm install
corepack enable
```
npm i -g pnpm@latest-8
`pnpm` version will be updated mainly by the maintainers but if you would like to set it to a specific version, you can do so by running the following command:
> `packageManager` at the `package.json` defines the default version to be used.
```shell
corepack prepare
```
With pnpm installed, the first step is installing all dependencies:
```
```shell
pnpm install
```
### Building the project
To build the project run
Each package is independent, dependencies must be build first, run:
```
```shell
pnpm build
```
### Running test
```
```shell
pnpm test
```
Verdaccio is a mono repository. To run the tests for for a specific package:
```
```shell
cd packages/store
pnpm test
```
or an specific test in that package:
```
```shell
pnpm test test/merge.dist.tags.spec.ts
```
or a single test unit:
```
```shell
pnpm test test/merge.dist.tags.spec.ts -- -t 'simple'
```
Coverage reporting is enabled by default, but you can turn it off to speed up
test runs:
```
```shell
pnpm test test/merge.dist.tags.spec.ts -- -t 'simple' --coverage=false
```
You can enable increased [`debug`](https://www.npmjs.com/package/debug) output:
```
```shell
DEBUG=verdaccio:* pnpm test
```
@@ -108,11 +119,22 @@ More details in the debug section
We use [`debug`](https://www.npmjs.com/package/debug) to add helpful debugging
output to the code. Each package has it owns namespace.
#### Useful Scripts
#### Developing with local server
To run the application from the source code, ensure the project has been built with `pnpm build`, once this is done, there are few commands that helps to run server:
- `pnpm start`: Runs server on port `8000` and UI on port `4873`. This is particularly useful if you want to contribute to the UI, since it runs with hot reload.
The command `pnpm start` runs web server on port `8000` and user interface (webpack-server) on port `4873`. This is particularly useful if you want to contribute to the UI, since it runs with hot reload. The request to the server are proxy through webpack proxy support through the port `4873`.
The user interface is split in two packages, the `/packages/plugins/ui-theme` and the `/packages/ui-components`. The `ui-components` package uses _storybook_ in order to develop component, but if you need to reload ui components with `ui-theme` do the following.
Go to `/packages/ui-component` and run `pnpm watch` to enable _babel_ in watch mode, every change on the components will be hot reloaded in combination with the `pnpm start` command.
Any change on the server packages, must be build independently (server do not has hot reload, `pnpm start` should be triggered again).
Any interaction with the server should be done through the port `8000` eg: `npm login --registry http://localhost:8000` .
#### Useful commands
- `pnpm debug`: Run the server in debug mode `--inspect`. UI runs too but without hot reload. For automatic break use `pnpm debug:break`.
- `pnpm debug:fastify`: To contribute on the [fastify migration](https://github.com/verdaccio/verdaccio/discussions/2155) this is a temporary command for such purpose.
- `pnpm website`: Build the website, for more commands to run the _website_, run `cd website` and then `pnpm serve`, website will run on port `3000`.
@@ -124,14 +146,14 @@ Currently you can only run pre-compiled packages in debug mode. To enable debug
while running add the `verdaccio` namespace using the `DEBUG` environment
variable, like this:
```
```shell
DEBUG=verdaccio:* node packages/verdaccio/debug/bootstrap.js
```
You can filter this output to just the packages you're interested in using
namespaces:
```
```shell
DEBUG=verdaccio:plugin:* node packages/verdaccio/debug/bootstrap.js
```
@@ -144,17 +166,17 @@ of the output is sent to the logger module.
Once you have perform your changes in the code base, the build and tests passes you can publish a local version:
- Ensure you have build all modules (or the one you have modified)
- Ensure you have built all modules by running `pnpm build` (or the one you have modified)
- Run `pnpm local:publish:release` to launch a local registry and publish all packages into it. This command will be alive until server is killed (Control Key + C)
```
```shell
pnpm build
pnpm local:publish:release
```
The last step consist on install globally the package from the local registry which runs on the default port (4873).
```
```shell
npm i -g verdaccio --registry=http://localhost:4873
verdaccio
```
@@ -220,7 +242,7 @@ Questions can be asked via [Discord](https://discord.gg/7qWJxBf)
## Development Guidelines {#development-guidelines}
It's recommended use a UNIX system for local development, Windows should works fine for development, but is not daily tested could not be perfect. To ensure a fast code review and merge, please follow the next guidelines:
It's recommended use a UNIX system for local development, Windows dev local support is not being tested and might not work. To ensure a fast code review and merge, please follow the next guidelines:
Any contribution gives you the right to be part of this organization as _collaborator_ and your avatar will be automatically added to the [contributors page](https://verdaccio.org/contributors).
@@ -285,7 +307,7 @@ contribution to get merged (unless it does not affect functionality or
user-facing content, eg: docs, readme, adding test or typo/lint fixes). To
create a changeset please run:
```
```shell
pnpm changeset
```
@@ -364,6 +386,8 @@ All translations are provided by the **[crowdin](http://crowdin.com)** platform,
If you want to contribute by adding translations, create an account (GitHub could be used as fast alternative), in the platform you can contribute to two areas, the website or improve User Interface translations.
> Languages with less the 40% of translations available are excluded by the build system.
If a language is not listed, ask for it in the [Discord](https://discord.gg/7qWJxBf) channel #contribute channel.
For adding a new **language** on the UI follow these steps:

View File

@@ -1,4 +1,4 @@
FROM --platform=${BUILDPLATFORM:-linux/amd64} node:18-alpine as builder
FROM --platform=${BUILDPLATFORM:-linux/amd64} node:21-alpine as builder
ENV NODE_ENV=development \
VERDACCIO_BUILD_REGISTRY=https://registry.npmjs.org
@@ -11,7 +11,7 @@ RUN apk --no-cache add openssl ca-certificates wget && \
WORKDIR /opt/verdaccio-build
COPY . .
RUN npm -g i pnpm@latest-8 && \
RUN npm -g i pnpm@8.9.0 && \
pnpm config set registry $VERDACCIO_BUILD_REGISTRY && \
pnpm install --frozen-lockfile --ignore-scripts && \
rm -Rf test && \
@@ -20,7 +20,7 @@ RUN npm -g i pnpm@latest-8 && \
# NODE_ENV=production pnpm install --frozen-lockfile --ignore-scripts
# RUN pnpm install --prod --ignore-scripts
FROM node:18-alpine
FROM node:21-alpine
LABEL maintainer="https://github.com/verdaccio/verdaccio"
ENV VERDACCIO_APPDIR=/opt/verdaccio \

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2021 Verdaccio contributors
Copyright (c) 2024 Verdaccio contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -33,7 +33,6 @@ Google Cloud Storage** or create your own plugin.
[![MIT](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/verdaccio/verdaccio/blob/master/LICENSE)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/verdaccio/localized.svg)](https://crowdin.com/project/verdaccio)
[![Twitter followers](https://img.shields.io/twitter/follow/verdaccio_npm.svg?style=social&label=Follow)](https://twitter.com/verdaccio_npm)
[![Github](https://img.shields.io/github/stars/verdaccio/verdaccio.svg?style=social&label=Stars)](https://github.com/verdaccio/verdaccio/stargazers)
[![StandWithUkraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md)

View File

@@ -15,5 +15,5 @@ files:
ignore: [/website/docs/api/**/*]
- source: /website/versioned_docs/**/*
translation: /website/i18n/%locale%/docusaurus-plugin-content-docs/**/%original_file_name%
ignore: [/website/versioned_docs/version-5.x/api/**/*]
ignore: [/website/versioned_docs/version-5.x/api/**/*, /website/versioned_docs/version-6.x/api/**/*]

View File

@@ -91,8 +91,8 @@ class LocalMemory {
(_this$data = this.data) === null || _this$data === void 0
? void 0
: (_this$data$list = _this$data.list) === null || _this$data$list === void 0
? void 0
: _this$data$list.length
? void 0
: _this$data$list.length
);
return Promise.resolve(
(_this$data2 = this.data) === null || _this$data2 === void 0 ? void 0 : _this$data2.list

View File

@@ -3,14 +3,11 @@
## What is included on these test?
- Default configuration only
- Test with all popular package managers:
- `yarn classic` and `yarn modern (2, 3, 4 RC)`
- `pnpm 6, 7`
- `npm 6, 7, 8 and 9`
- Test with all popular package managers
### Commands Tested
| cmd | npm6 | npm7 | npm8 | npm9 | pnpm6 | pnpm7 | pnpm8 | yarn1 | yarn2 | yarn3 | yarn4 |
| cmd | npm6 | npm7 | npm8 | npm9 | npm10 | pnpm6 | pnpm7 | yarn1 | yarn2 | yarn3 | yarn4 |
| --------- | ---- | ---- | ---- | ---- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| publish | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| info | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |

View File

@@ -5,16 +5,16 @@
"main": "./build/index.js",
"types": "./build/index.d.ts",
"devDependencies": {
"@verdaccio/config": "workspace:7.0.0-next.1",
"@verdaccio/core": "workspace:7.0.0-next.1",
"@verdaccio/types": "workspace:12.0.0-next.0",
"@verdaccio/config": "workspace:7.0.0-next-7.7",
"@verdaccio/core": "workspace:7.0.0-next-7.7",
"@verdaccio/types": "workspace:12.0.0-next.2",
"debug": "4.3.4",
"fs-extra": "10.1.0",
"fs-extra": "11.2.0",
"get-port": "5.1.1",
"got": "11.8.6",
"js-yaml": "4.1.0",
"get-port": "5.1.1",
"lodash": "4.17.21",
"verdaccio": "workspace:7.0.0-next.1"
"verdaccio": "workspace:7.0.0-next-7.7"
},
"scripts": {
"test": "jest",

View File

@@ -31,12 +31,13 @@ export async function exec(options: SpawnOptions, cmd, args): Promise<ExecOutput
}
const childProcess = spawn(cmd, args, spawnOptions);
// @ts-ignore
const rl = createInterface({ input: childProcess.stdout });
if (childProcess.stdout) {
const rl = createInterface({ input: childProcess.stdout });
rl.on('line', function (line) {
stdout += line;
});
rl.on('line', function (line) {
stdout += line;
});
}
const err = new Error(`Running "${cmd} ${args.join(' ')}" returned error code `);
return new Promise((resolve, reject) => {
@@ -45,14 +46,9 @@ export async function exec(options: SpawnOptions, cmd, args): Promise<ExecOutput
resolve({ stdout, stderr });
} else {
err.message += `${error}...\n\nSTDOUT:\n${stdout}\n\nSTDERR:\n${stderr}\n`;
return reject({ stdout, stderr: err });
const errorObj = { stdout, stderr: err };
return reject(errorObj);
}
});
});
}
export function silentNpm(...args): Promise<ExecOutput> {
debug('run silent npm %o', args);
// @ts-ignore
return exec({ silent: true }, 'npm', args);
}

View File

@@ -5,7 +5,6 @@ import { join } from 'path';
import { fileUtils } from '@verdaccio/core';
export function createProject(projectName: string) {
// @ts-ignore
const tempRootFolder = global.__namespace.getItem('dir-suite-root');
const verdaccioInstall = join(tempRootFolder, projectName);
fs.mkdirSync(verdaccioInstall);

View File

@@ -0,0 +1,3 @@
{
"extends": "../../../.babelrc"
}

View File

@@ -0,0 +1,7 @@
{
"rules": {
"no-console": 0,
"@typescript-eslint/no-var-requires": 0,
"@typescript-eslint/explicit-member-accessibility": 0
}
}

View File

@@ -0,0 +1,62 @@
# @verdaccio/e2e-cli-npm9
## 1.0.1
### Patch Changes
- Updated dependencies [351aeeaa8]
- Updated dependencies [d167f92e1]
- Updated dependencies [c383eb68c]
- @verdaccio/test-cli-commons@1.1.0
## 1.0.1-6-next.7
### Patch Changes
- Updated dependencies [c383eb68]
- @verdaccio/test-cli-commons@1.1.0-6-next.7
## 1.0.1-6-next.6
### Patch Changes
- Updated dependencies [d167f92e]
- @verdaccio/test-cli-commons@1.1.0-6-next.6
## 1.0.1-6-next.5
### Patch Changes
- @verdaccio/test-cli-commons@1.0.1-6-next.5
## 1.0.1-6-next.4
### Patch Changes
- @verdaccio/test-cli-commons@1.0.1-6-next.4
## 1.0.1-6-next.3
### Patch Changes
- 351aeeaa: fix(deps): @verdaccio/utils should be a prod dep of local-storage
- Updated dependencies [351aeeaa]
- @verdaccio/test-cli-commons@1.0.1-6-next.3
## 1.0.1-6-next.2
### Patch Changes
- @verdaccio/test-cli-commons@1.0.1-6-next.2
## 1.0.1-6-next.1
### Patch Changes
- @verdaccio/test-cli-commons@1.0.1-6-next.1
## 1.0.1-6-next.0
### Patch Changes
- @verdaccio/test-cli-commons@1.0.1-6-next.0

View File

@@ -0,0 +1,44 @@
import { addRegistry, initialSetup, prepareGenericEmptyProject } from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('audit a package', () => {
jest.setTimeout(10000);
let registry;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test.each([['verdaccio-memory', '@verdaccio/cli']])(
'should audit a package %s',
async (pkgName) => {
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0-patch',
registry.port,
registry.getToken(),
registry.getRegistryUrl(),
{ jquery: '3.6.1' }
);
// install is required to create package lock file
await npm({ cwd: tempFolder }, 'install', ...addRegistry(registry.getRegistryUrl()));
const resp = await npm(
{ cwd: tempFolder },
'audit',
'--json',
...addRegistry(registry.getRegistryUrl())
);
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.metadata).toBeDefined();
expect(parsedBody.auditReportVersion).toBeDefined();
expect(parsedBody.vulnerabilities).toBeDefined();
}
);
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,115 @@
import {
addRegistry,
initialSetup,
npmUtils,
prepareGenericEmptyProject,
} from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('deprecate a package', () => {
jest.setTimeout(20000);
let registry;
async function deprecate(tempFolder, packageVersion, registry, message) {
await npm(
{ cwd: tempFolder },
'deprecate',
packageVersion,
message,
'--json',
...addRegistry(registry.getRegistryUrl())
);
}
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test.each([['@verdaccio/deprecated-1']])(
'should deprecate a single package %s',
async (pkgName) => {
const message = 'some message';
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
// deprecate one version
await deprecate(tempFolder, `${pkgName}@1.0.0`, registry, message);
// verify is deprecated
const infoBody = await npmUtils.getInfoVersions(npm, `${pkgName}`, registry);
expect(infoBody.name).toEqual(pkgName);
expect(infoBody.deprecated).toEqual(message);
}
);
test.each([['@verdaccio/deprecated-2']])('should un-deprecate a package %s', async (pkgName) => {
const message = 'some message';
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
// deprecate one version
await deprecate(tempFolder, `${pkgName}@1.0.0`, registry, message);
// verify is deprecated
const infoBody = await npmUtils.getInfoVersions(npm, `${pkgName}`, registry);
expect(infoBody.deprecated).toEqual(message);
// empty string is same as undeprecate
await deprecate(tempFolder, `${pkgName}@1.0.0`, registry, '');
const infoBody2 = await npmUtils.getInfoVersions(npm, `${pkgName}`, registry);
expect(infoBody2.deprecated).toBeUndefined();
});
test.each([['@verdaccio/deprecated-3']])(
'should deprecate a multiple packages %s',
async (pkgName) => {
const message = 'some message';
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
// publish 1.0.0
await npmUtils.publish(npm, tempFolder, pkgName, registry);
// publish 1.1.0
await npmUtils.bumbUp(npm, tempFolder, registry);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
// publish 1.2.0
await npmUtils.bumbUp(npm, tempFolder, registry);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
// publish 1.3.0
await npmUtils.bumbUp(npm, tempFolder, registry);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
// // deprecate all version
await deprecate(tempFolder, pkgName, registry, message);
// verify is deprecated
for (let v of ['1.0.0', '1.1.0', '1.2.0', '1.3.0']) {
const infoResp = await npmUtils.getInfoVersions(npm, `${pkgName}@${v}`, registry);
expect(infoResp.deprecated).toEqual(message);
}
// publish normal version
// publish 1.4.0
await npmUtils.bumbUp(npm, tempFolder, registry);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
const infoResp = await npmUtils.getInfoVersions(npm, `${pkgName}@1.4.0`, registry);
// must be not deprecated
expect(infoResp.deprecated).toBeUndefined();
}
);
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,91 @@
import {
addRegistry,
initialSetup,
npmUtils,
prepareGenericEmptyProject,
} from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('publish a package', () => {
jest.setTimeout(20000);
let registry;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test.each([['@foo/foo', 'foo']])('should list dist-tags for %s', async (pkgName) => {
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
await npmUtils.bumbUp(npm, tempFolder, registry);
await npmUtils.publish(npm, tempFolder, pkgName, registry, ['--tag', 'beta']);
const resp2 = await npm(
{ cwd: tempFolder },
'dist-tag',
'ls',
'--json',
...addRegistry(registry.getRegistryUrl())
);
expect(resp2.stdout).toEqual('beta: 1.1.0latest: 1.0.0');
});
test.each([['@verdaccio/bar']])('should remove tag with dist-tags for %s', async (pkgName) => {
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
await npmUtils.bumbUp(npm, tempFolder, registry);
await npmUtils.publish(npm, tempFolder, pkgName, registry, ['--tag', 'beta']);
const resp2 = await npm(
{ cwd: tempFolder },
'dist-tag',
'rm',
`${pkgName}@1.1.0`,
'beta',
...addRegistry(registry.getRegistryUrl())
);
expect(resp2.stdout).toEqual('-beta: @verdaccio/bar@1.1.0');
});
test.each([['@verdaccio/five']])(
'should add tag to package and version with dist-tags for %s',
async (pkgName) => {
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
await npmUtils.bumbUp(npm, tempFolder, registry);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
const resp2 = await npm(
{ cwd: tempFolder },
'dist-tag',
'add',
`${pkgName}@1.1.0`,
'alfa',
...addRegistry(registry.getRegistryUrl())
);
expect(resp2.stdout).toEqual(`+alfa: ${pkgName}@1.1.0`);
}
);
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,31 @@
import { addRegistry, initialSetup } from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('install a package', () => {
jest.setTimeout(10000);
let registry;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test('should run npm info json body', async () => {
const resp = await npm(
{},
'info',
'verdaccio',
'--json',
...addRegistry(registry.getRegistryUrl())
);
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.name).toEqual('verdaccio');
expect(parsedBody.dependencies).toBeDefined();
});
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,38 @@
import { addRegistry, initialSetup, prepareGenericEmptyProject } from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('install a project packages', () => {
jest.setTimeout(100000);
let registry;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test('should run npm install json body', async () => {
const { tempFolder } = await prepareGenericEmptyProject(
'something',
'1.0.0-patch',
registry.port,
registry.getToken(),
registry.getRegistryUrl(),
{ react: '18.2.0' }
);
const resp = await npm(
{ cwd: tempFolder },
'install',
'--json',
...addRegistry(registry.getRegistryUrl())
);
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.added).toBeDefined();
expect(parsedBody.audit).toBeDefined();
});
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,3 @@
const config = require('../jest.config');
module.exports = { ...config };

View File

@@ -0,0 +1,12 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-npm9",
"version": "1.0.1",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.1.0",
"npm": "10.2.5"
},
"scripts": {
"test": "jest"
}
}

View File

@@ -0,0 +1,24 @@
import { addRegistry, initialSetup } from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('ping registry', () => {
jest.setTimeout(10000);
let registry;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test('should ping registry', async () => {
const resp = await npm({}, 'ping', '--json', ...addRegistry(registry.getRegistryUrl()));
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.registry).toEqual(registry.getRegistryUrl() + '/');
});
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,41 @@
import { addRegistry, initialSetup, prepareGenericEmptyProject } from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('install a package', () => {
jest.setTimeout(10000);
let registry;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test.each([['verdaccio-memory', 'verdaccio', '@verdaccio/foo', '@verdaccio/some-foo']])(
'should publish a package %s',
async (pkgName) => {
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0-patch',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
const resp = await npm(
{ cwd: tempFolder },
'publish',
'--json',
...addRegistry(registry.getRegistryUrl())
);
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.name).toEqual(pkgName);
expect(parsedBody.files).toBeDefined();
expect(parsedBody.files).toBeDefined();
}
);
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,33 @@
import { addRegistry, initialSetup } from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('search a package', () => {
jest.setTimeout(10000);
let registry;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test('should search a package', async () => {
const resp = await npm(
{},
'search',
'@verdaccio/cli',
'--json',
...addRegistry(registry.getRegistryUrl())
);
const parsedBody = JSON.parse(resp.stdout as string);
const pkgFind = parsedBody.find((item) => {
return item.name === '@verdaccio/cli';
});
expect(pkgFind.name).toEqual('@verdaccio/cli');
});
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,85 @@
import {
addRegistry,
initialSetup,
npmUtils,
prepareGenericEmptyProject,
} from '@verdaccio/test-cli-commons';
import { npm } from './utils';
describe('star a package', () => {
jest.setTimeout(20000);
let registry;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
});
test.each([['@verdaccio/foo']])('should star a package %s', async (pkgName) => {
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0-patch',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
const resp = await npm(
{ cwd: tempFolder },
'star',
pkgName,
...addRegistry(registry.getRegistryUrl())
);
expect(resp.stdout).toEqual(`${pkgName}`);
});
test.each([['@verdaccio/bar']])('should unstar a package %s', async (pkgName) => {
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0-patch',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
const resp = await npm(
{ cwd: tempFolder },
'star',
pkgName,
...addRegistry(registry.getRegistryUrl())
);
expect(resp.stdout).toEqual(`${pkgName}`);
const resp1 = await npm(
{ cwd: tempFolder },
'unstar',
pkgName,
...addRegistry(registry.getRegistryUrl())
);
expect(resp1.stdout).toEqual(`${pkgName}`);
});
test('should list stars of a user %s', async () => {
const pkgName = '@verdaccio/stars';
const { tempFolder } = await prepareGenericEmptyProject(
pkgName,
'1.0.0-patch',
registry.port,
registry.getToken(),
registry.getRegistryUrl()
);
await npmUtils.publish(npm, tempFolder, pkgName, registry);
await npm({ cwd: tempFolder }, 'star', pkgName, ...addRegistry(registry.getRegistryUrl()));
const resp = await npm({ cwd: tempFolder }, 'stars', ...addRegistry(registry.getRegistryUrl()));
// side effects: this result is affected the the package published in the previous step
expect(resp.stdout).toEqual(`@verdaccio/foo@verdaccio/stars`);
});
afterAll(async () => {
registry.stop();
});
});

View File

@@ -0,0 +1,8 @@
{
"extends": "../../../tsconfig.reference.json",
"references": [
{
"path": "../cli-commons"
}
]
}

View File

@@ -0,0 +1,41 @@
import { SpawnOptions } from 'child_process';
import { join } from 'path';
import { exec } from '@verdaccio/test-cli-commons';
import { addRegistry } from '@verdaccio/test-cli-commons';
export function getCommand() {
return join(__dirname, './node_modules/.bin/npm');
}
export function npm(options: SpawnOptions, ...args: string[]) {
return exec(options, getCommand(), args);
}
export async function bumbUp(tempFolder, registry) {
await npm({ cwd: tempFolder }, 'version', 'minor', ...addRegistry(registry.getRegistryUrl()));
}
export async function publish(tempFolder, pkgName, registry, arg: string[] = []) {
const resp = await npm(
{ cwd: tempFolder },
'publish',
...arg,
'--json',
...addRegistry(registry.getRegistryUrl())
);
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.name).toEqual(pkgName);
}
export async function getInfoVersions(pkgName, registry) {
const infoResp = await npm(
{},
'info',
pkgName,
'--json',
...addRegistry(registry.getRegistryUrl())
);
const infoBody = JSON.parse(infoResp.stdout as string);
return infoBody;
}

View File

@@ -4,7 +4,7 @@
"version": "1.0.1",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.1.0",
"npm": "9.7.1"
"npm": "9.9.2"
},
"scripts": {
"test": "jest"

View File

@@ -4,7 +4,7 @@
"version": "1.0.1",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.1.0",
"npm": "9.7.1"
"npm": "9.9.2"
},
"scripts": {
"test": "jest"

View File

@@ -4,7 +4,7 @@
"version": "1.0.1",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.1.0",
"npm": "9.7.1"
"npm": "9.9.2"
},
"scripts": {
"test": "jest"

View File

@@ -4,7 +4,7 @@
"version": "1.0.1",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.1.0",
"npm": "9.7.1"
"npm": "9.9.2"
},
"scripts": {
"test": "jest"

View File

@@ -4,7 +4,7 @@
"version": "1.0.1",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.1.0",
"yarn": "1.22.19"
"yarn": "1.22.21"
},
"scripts": {
"test": "jest"

View File

@@ -9,6 +9,10 @@ import { generatePackageMetadata } from '@verdaccio/test-helper';
let registry1;
export default defineConfig({
retries: {
runMode: 5,
openMode: 0,
},
e2e: {
setupNodeEvents(on) {
on('before:run', async () => {

View File

@@ -3,12 +3,12 @@
"name": "@verdaccio/e2e-ui",
"version": "2.0.0",
"devDependencies": {
"verdaccio": "workspace:7.0.0-next.1",
"@verdaccio/core": "workspace:7.0.0-next.1",
"@verdaccio/config": "workspace:7.0.0-next.1",
"@verdaccio/test-helper": "workspace:3.0.0-next.0",
"verdaccio": "workspace:7.0.0-next-7.7",
"@verdaccio/core": "workspace:7.0.0-next-7.7",
"@verdaccio/config": "workspace:7.0.0-next-7.7",
"@verdaccio/test-helper": "workspace:3.0.0-next.1",
"debug": "4.3.4",
"cypress": "^11.2.0",
"cypress": "^13.6.0",
"get-port": "5.1.1"
},
"scripts": {

View File

@@ -17,3 +17,11 @@
[[plugins]]
package = "../.netlify/netlify-plugin-pnpm"
[[headers]]
for = "/*"
[headers.values]
X-Frame-Options = "DENY"
X-XSS-Protection = "1; mode=block"
X-Content-Type-Options = "nosniff"
Referrer-Policy = "no-referrer"

View File

@@ -15,115 +15,117 @@
"url": "https://opencollective.com/verdaccio"
},
"devDependencies": {
"@babel/cli": "7.22.10",
"@babel/core": "7.22.10",
"@babel/eslint-parser": "7.22.10",
"@babel/node": "7.22.10",
"@babel/cli": "7.23.4",
"@babel/core": "7.23.7",
"@babel/eslint-parser": "7.23.3",
"@babel/node": "7.22.19",
"@babel/plugin-proposal-class-properties": "7.18.6",
"@babel/plugin-proposal-decorators": "7.22.10",
"@babel/plugin-proposal-decorators": "7.23.7",
"@babel/plugin-proposal-export-namespace-from": "7.18.9",
"@babel/plugin-proposal-function-sent": "7.22.5",
"@babel/plugin-proposal-function-sent": "7.23.3",
"@babel/plugin-proposal-json-strings": "7.18.6",
"@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
"@babel/plugin-proposal-numeric-separator": "7.18.6",
"@babel/plugin-proposal-object-rest-spread": "7.20.7",
"@babel/plugin-proposal-optional-chaining": "7.21.0",
"@babel/plugin-proposal-throw-expressions": "7.22.5",
"@babel/plugin-proposal-throw-expressions": "7.23.3",
"@babel/plugin-syntax-dynamic-import": "7.8.3",
"@babel/plugin-syntax-import-meta": "7.10.4",
"@babel/plugin-transform-async-to-generator": "7.22.5",
"@babel/plugin-transform-classes": "7.22.6",
"@babel/plugin-transform-runtime": "7.22.10",
"@babel/preset-env": "7.22.10",
"@babel/preset-react": "7.22.5",
"@babel/preset-typescript": "7.22.5",
"@babel/register": "7.22.5",
"@babel/runtime": "7.22.10",
"@changesets/changelog-github": "0.4.8",
"@changesets/cli": "2.24.4",
"@babel/plugin-transform-async-to-generator": "7.23.3",
"@babel/plugin-transform-classes": "7.23.5",
"@babel/plugin-transform-runtime": "7.23.7",
"@babel/preset-env": "7.23.7",
"@babel/preset-react": "7.23.3",
"@babel/preset-typescript": "7.23.3",
"@babel/register": "7.23.7",
"@babel/runtime": "7.23.7",
"@changesets/changelog-github": "0.5.0",
"@changesets/cli": "2.27.1",
"@changesets/get-dependents-graph": "1.3.6",
"@crowdin/cli": "3.10.1",
"@crowdin/cli": "3.16.0",
"@dianmora/contributors": "5.0.0",
"@emotion/react": "11.10.6",
"@emotion/styled": "11.10.6",
"@testing-library/dom": "8.19.1",
"@testing-library/jest-dom": "5.16.5",
"@testing-library/react": "12.1.5",
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
"@types/async": "3.2.20",
"@types/body-parser": "1.19.2",
"@types/connect": "3.4.35",
"@types/cookiejar": "2.1.2",
"@types/debug": "^4.1.7",
"@types/express": "4.17.15",
"@types/express-serve-static-core": "4.17.31",
"@types/http-errors": "1.8.2",
"@types/jest": "27.5.2",
"@types/jsonwebtoken": "8.5.9",
"@types/lodash": "4.14.197",
"@types/mime": "2.0.3",
"@types/minimatch": "3.0.5",
"@types/node": "16.18.40",
"@types/node-fetch": "2.6.4",
"@types/qs": "6.9.7",
"@types/range-parser": "1.2.4",
"@types/react": "18.0.26",
"@types/react-dom": "18.0.9",
"@testing-library/dom": "9.3.3",
"@testing-library/jest-dom": "6.2.0",
"@testing-library/react": "14.1.2",
"@trivago/prettier-plugin-sort-imports": "4.3.0",
"@types/body-parser": "1.19.5",
"@types/connect": "3.4.38",
"@types/cookiejar": "2.1.5",
"@types/debug": "4.1.12",
"@types/express": "4.17.21",
"@types/express-serve-static-core": "4.17.41",
"@types/http-errors": "2.0.4",
"@types/jest": "29.5.11",
"@types/jsonwebtoken": "9.0.5",
"@types/lodash": "4.14.202",
"@types/mime": "3.0.4",
"@types/minimatch": "5.1.2",
"@types/node": "20.11.0",
"@types/node-fetch": "2.6.10",
"@types/qs": "6.9.11",
"@types/range-parser": "1.2.7",
"@types/react": "18.2.47",
"@types/react-dom": "18.2.18",
"@types/react-router-dom": "5.3.3",
"@types/react-virtualized": "9.21.21",
"@types/react-virtualized": "9.21.29",
"@types/redux": "3.6.0",
"@types/request": "2.48.8",
"@types/semver": "7.5.0",
"@types/serve-static": "1.13.10",
"@types/superagent": "4.1.18",
"@types/supertest": "2.0.12",
"@types/testing-library__jest-dom": "5.14.9",
"@types/validator": "13.7.17",
"@types/webpack": "5.28.1",
"@types/webpack-env": "1.18.1",
"@typescript-eslint/eslint-plugin": "5.59.8",
"@typescript-eslint/parser": "5.59.8",
"@types/semver": "7.5.6",
"@types/send": "0.17.4",
"@types/serve-static": "1.15.5",
"@types/superagent": "4.1.24",
"@types/supertest": "2.0.16",
"@types/testing-library__jest-dom": "6.0.0",
"@types/validator": "13.11.8",
"@types/webpack": "5.28.5",
"@types/webpack-env": "1.18.4",
"@typescript-eslint/eslint-plugin": "6.18.1",
"@typescript-eslint/parser": "6.18.1",
"@verdaccio/crowdin-translations": "workspace:*",
"@verdaccio/eslint-config": "workspace:*",
"@verdaccio/types": "workspace:*",
"@verdaccio/ui-theme": "workspace:*",
"@vitest/coverage-v8": "0.34.6",
"babel-core": "7.0.0-bridge.0",
"babel-jest": "29.4.3",
"babel-jest": "29.7.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"babel-plugin-emotion": "10.2.2",
"concurrently": "6.5.1",
"babel-plugin-emotion": "11.0.0",
"concurrently": "8.2.2",
"cross-env": "7.0.3",
"debug": "4.3.4",
"detect-secrets": "1.0.6",
"eslint": "8.42.0",
"fs-extra": "10.1.0",
"eslint": "8.56.0",
"fs-extra": "11.2.0",
"got": "11.8.6",
"husky": "7.0.4",
"husky": "8.0.3",
"in-publish": "2.0.1",
"jest": "29.4.3",
"jest-diff": "29.4.3",
"jest-environment-jsdom": "29.4.3",
"jest-environment-jsdom-global": "3.1.2",
"jest-environment-node": "29.3.1",
"jest-junit": "12.3.0",
"jest": "29.7.0",
"jest-diff": "29.7.0",
"jest-environment-jsdom": "29.7.0",
"jest-environment-jsdom-global": "4.0.0",
"jest-environment-node": "29.7.0",
"jest-junit": "16.0.0",
"kleur": "4.1.5",
"lint-staged": "11.2.6",
"nock": "13.2.9",
"nodemon": "2.0.20",
"nock": "13.4.0",
"nodemon": "3.0.2",
"npm-run-all": "4.1.5",
"prettier": "2.8.8",
"prettier": "3.2.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"rimraf": "3.0.2",
"selfsigned": "1.10.14",
"rimraf": "5.0.5",
"selfsigned": "2.4.1",
"supertest": "6.3.3",
"ts-node": "10.9.1",
"typescript": "4.9.4",
"update-ts-references": "2.4.1",
"ts-node": "10.9.2",
"typescript": "5.2.2",
"undici-types": "5.28.2",
"update-ts-references": "3.2.1",
"verdaccio-audit": "workspace:*",
"verdaccio-auth-memory": "workspace:*",
"verdaccio-htpasswd": "workspace:*",
"verdaccio-memory": "workspace:*"
"verdaccio-memory": "workspace:*",
"vitest": "0.34.6"
},
"scripts": {
"prepare": "husky install",
@@ -169,18 +171,13 @@
"local:publish": "cross-env npm_config_registry=http://localhost:4873 changeset publish --no-git-tag",
"local:publish:release": "concurrently \"pnpm local:registry\" \"pnpm local:publish\""
},
"pnpm": {
"overrides": {
"got": "11.8.5",
"p-cancelable": "2.1.1"
}
},
"engines": {
"node": ">=16.5"
"node": ">=18"
},
"license": "MIT",
"lint-staged": {
"*.{js,jsx,ts,tsx,json,yml,yaml,md}": "prettier --write",
"*.{js,jsx,ts,tsx}": "eslint --cache --fix"
}
},
"packageManager": "pnpm@8.14.0+sha256.9cebf61abd83f68177b29484da72da9751390eaad46dfc3072d266bfbb1ba7bf"
}

View File

@@ -1,5 +1,90 @@
# @verdaccio/api
## 7.0.0-next-7.7
### Patch Changes
- @verdaccio/core@7.0.0-next-7.7
- @verdaccio/config@7.0.0-next-7.7
- @verdaccio/auth@7.0.0-next-7.7
- @verdaccio/middleware@7.0.0-next-7.7
- @verdaccio/store@7.0.0-next-7.7
- @verdaccio/utils@7.0.0-next-7.7
- @verdaccio/logger@7.0.0-next-7.7
## 7.0.0-next.6
### Patch Changes
- Updated dependencies [e14b064]
- Updated dependencies [4d96324]
- @verdaccio/store@7.0.0-next.6
- @verdaccio/config@7.0.0-next.6
- @verdaccio/auth@7.0.0-next.6
- @verdaccio/middleware@7.0.0-next.6
- @verdaccio/core@7.0.0-next.6
- @verdaccio/utils@7.0.0-next.6
- @verdaccio/logger@7.0.0-next.6
## 7.0.0-next.5
### Minor Changes
- f047cc8: refactor: auth with legacy sign support
### Patch Changes
- Updated dependencies [f047cc8]
- @verdaccio/middleware@7.0.0-next.5
- @verdaccio/core@7.0.0-next.5
- @verdaccio/config@7.0.0-next.5
- @verdaccio/auth@7.0.0-next.5
- @verdaccio/store@7.0.0-next.5
- @verdaccio/logger@7.0.0-next.5
- @verdaccio/utils@7.0.0-next.5
## 7.0.0-next.4
### Patch Changes
- @verdaccio/auth@7.0.0-next.4
- @verdaccio/core@7.0.0-next.4
- @verdaccio/config@7.0.0-next.4
- @verdaccio/middleware@7.0.0-next.4
- @verdaccio/store@7.0.0-next.4
- @verdaccio/utils@7.0.0-next.4
- @verdaccio/logger@7.0.0-next.4
## 7.0.0-next.3
### Major Changes
- e7ebccb61: update major dependencies, remove old nodejs support
### Patch Changes
- Updated dependencies [daceb6d87]
- Updated dependencies [e7ebccb61]
- @verdaccio/config@7.0.0-next.3
- @verdaccio/core@7.0.0-next.3
- @verdaccio/middleware@7.0.0-next.3
- @verdaccio/utils@7.0.0-next.3
- @verdaccio/auth@7.0.0-next.3
- @verdaccio/logger@7.0.0-next.3
- @verdaccio/store@7.0.0-next.3
## 7.0.0-next.2
### Patch Changes
- @verdaccio/core@7.0.0-next.2
- @verdaccio/config@7.0.0-next.2
- @verdaccio/auth@7.0.0-next.2
- @verdaccio/middleware@7.0.0-next.2
- @verdaccio/store@7.0.0-next.2
- @verdaccio/utils@7.0.0-next.2
- @verdaccio/logger@7.0.0-next.2
## 7.0.0-next.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/api",
"version": "7.0.0-next.1",
"version": "7.0.0-next-7.7",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -25,8 +25,7 @@
"verdaccio"
],
"engines": {
"node": ">=14",
"npm": ">=6"
"node": ">=18"
},
"scripts": {
"clean": "rimraf ./build",
@@ -39,29 +38,28 @@
},
"license": "MIT",
"dependencies": {
"@verdaccio/auth": "workspace:7.0.0-next.1",
"@verdaccio/config": "workspace:7.0.0-next.1",
"@verdaccio/core": "workspace:7.0.0-next.1",
"@verdaccio/logger": "workspace:7.0.0-next.1",
"@verdaccio/middleware": "workspace:7.0.0-next.1",
"@verdaccio/store": "workspace:7.0.0-next.1",
"@verdaccio/utils": "workspace:7.0.0-next.1",
"@verdaccio/auth": "workspace:7.0.0-next-7.7",
"@verdaccio/config": "workspace:7.0.0-next-7.7",
"@verdaccio/core": "workspace:7.0.0-next-7.7",
"@verdaccio/logger": "workspace:7.0.0-next-7.7",
"@verdaccio/middleware": "workspace:7.0.0-next-7.7",
"@verdaccio/store": "workspace:7.0.0-next-7.7",
"@verdaccio/utils": "workspace:7.0.0-next-7.7",
"abortcontroller-polyfill": "1.7.5",
"cookies": "0.8.0",
"debug": "4.3.4",
"body-parser": "1.20.2",
"cookies": "0.9.0",
"debug": "4.3.4",
"express": "4.18.2",
"lodash": "4.17.21",
"mime": "2.6.0",
"semver": "7.5.4"
},
"devDependencies": {
"@verdaccio/server": "workspace:7.0.0-next.1",
"@verdaccio/types": "workspace:12.0.0-next.0",
"@verdaccio/test-helper": "workspace:3.0.0-next.0",
"supertest": "6.3.3",
"nock": "13.2.9",
"mockdate": "3.0.5"
"@verdaccio/test-helper": "workspace:3.0.0-next.1",
"@verdaccio/types": "workspace:12.0.0-next.2",
"mockdate": "3.0.5",
"nock": "13.4.0",
"supertest": "6.3.3"
},
"funding": {
"type": "opencollective",

View File

@@ -43,7 +43,6 @@ export default function (config: Config, auth: Auth, storage: Storage): Router {
app.param('org_couchdb_user', match(/^org\.couchdb\.user:/));
app.use(auth.apiJWTmiddleware());
app.use(express.json({ strict: false, limit: config.max_body_size || '10mb' }));
// @ts-ignore
app.use(antiLoop(config));
// encode / in a scoped package name to be matched as a single parameter in routes
app.use(encodeScopePackage);

View File

@@ -196,10 +196,10 @@ export function publishPackage(storage: Storage): any {
requestOptions: {
host: req.hostname,
protocol: req.protocol,
// @ts-ignore
headers: req.headers,
headers: req.headers as { [key: string]: string },
username,
},
uplinksLook: false,
});
res.status(HTTP_STATUS.CREATED);

View File

@@ -1,5 +1,90 @@
# @verdaccio/auth
## 7.0.0-next-7.7
### Patch Changes
- @verdaccio/core@7.0.0-next-7.7
- @verdaccio/config@7.0.0-next-7.7
- @verdaccio/loaders@7.0.0-next-7.7
- verdaccio-htpasswd@12.0.0-next-7.7
- @verdaccio/utils@7.0.0-next-7.7
- @verdaccio/signature@7.0.0-next.3
- @verdaccio/logger@7.0.0-next-7.7
## 7.0.0-next.6
### Patch Changes
- Updated dependencies [4d96324]
- @verdaccio/config@7.0.0-next.6
- @verdaccio/loaders@7.0.0-next.6
- verdaccio-htpasswd@12.0.0-next.6
- @verdaccio/signature@7.0.0-next.3
- @verdaccio/core@7.0.0-next.6
- @verdaccio/utils@7.0.0-next.6
- @verdaccio/logger@7.0.0-next.6
## 7.0.0-next.5
### Minor Changes
- f047cc8: refactor: auth with legacy sign support
### Patch Changes
- Updated dependencies [f047cc8]
- @verdaccio/core@7.0.0-next.5
- @verdaccio/signature@7.0.0-next.3
- @verdaccio/config@7.0.0-next.5
- @verdaccio/loaders@7.0.0-next.5
- @verdaccio/logger@7.0.0-next.5
- verdaccio-htpasswd@12.0.0-next.5
- @verdaccio/utils@7.0.0-next.5
## 7.0.0-next.4
### Patch Changes
- Updated dependencies [312bc100f]
- @verdaccio/signature@7.0.0-next.2
- @verdaccio/core@7.0.0-next.4
- @verdaccio/config@7.0.0-next.4
- @verdaccio/loaders@7.0.0-next.4
- verdaccio-htpasswd@12.0.0-next.4
- @verdaccio/utils@7.0.0-next.4
- @verdaccio/logger@7.0.0-next.4
## 7.0.0-next.3
### Major Changes
- e7ebccb61: update major dependencies, remove old nodejs support
### Patch Changes
- Updated dependencies [daceb6d87]
- Updated dependencies [e7ebccb61]
- @verdaccio/config@7.0.0-next.3
- @verdaccio/core@7.0.0-next.3
- verdaccio-htpasswd@12.0.0-next.3
- @verdaccio/signature@7.0.0-next.1
- @verdaccio/utils@7.0.0-next.3
- @verdaccio/loaders@7.0.0-next.3
- @verdaccio/logger@7.0.0-next.3
## 7.0.0-next.2
### Patch Changes
- @verdaccio/core@7.0.0-next.2
- @verdaccio/config@7.0.0-next.2
- @verdaccio/loaders@7.0.0-next.2
- verdaccio-htpasswd@12.0.0-next.2
- @verdaccio/utils@7.0.0-next.2
- @verdaccio/signature@7.0.0-next.0
- @verdaccio/logger@7.0.0-next.2
## 7.0.0-next.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/auth",
"version": "7.0.0-next.1",
"version": "7.0.0-next-7.7",
"description": "logger",
"main": "./build/index.js",
"types": "./build/index.d.ts",
@@ -25,8 +25,7 @@
"verdaccio"
],
"engines": {
"node": ">=14",
"npm": ">=6"
"node": ">=18"
},
"scripts": {
"clean": "rimraf ./build",
@@ -39,19 +38,21 @@
},
"license": "MIT",
"dependencies": {
"@verdaccio/core": "workspace:7.0.0-next.1",
"@verdaccio/config": "workspace:7.0.0-next.1",
"@verdaccio/loaders": "workspace:7.0.0-next.1",
"@verdaccio/logger": "workspace:7.0.0-next.1",
"@verdaccio/signature": "workspace:7.0.0-next.0",
"@verdaccio/utils": "workspace:7.0.0-next.1",
"@verdaccio/core": "workspace:7.0.0-next-7.7",
"@verdaccio/config": "workspace:7.0.0-next-7.7",
"@verdaccio/loaders": "workspace:7.0.0-next-7.7",
"@verdaccio/logger": "workspace:7.0.0-next-7.7",
"@verdaccio/signature": "workspace:7.0.0-next.3",
"@verdaccio/utils": "workspace:7.0.0-next-7.7",
"debug": "4.3.4",
"express": "4.18.2",
"lodash": "4.17.21",
"verdaccio-htpasswd": "workspace:12.0.0-next.1"
"verdaccio-htpasswd": "workspace:12.0.0-next-7.7"
},
"devDependencies": {
"@verdaccio/types": "workspace:12.0.0-next.0"
"express": "4.18.2",
"supertest": "6.3.3",
"@verdaccio/middleware": "workspace:7.0.0-next-7.7",
"@verdaccio/types": "workspace:12.0.0-next.2"
},
"funding": {
"type": "opencollective",

View File

@@ -1,5 +1,4 @@
import buildDebug from 'debug';
import { NextFunction, Request, RequestHandler, Response } from 'express';
import _ from 'lodash';
import { HTPasswd } from 'verdaccio-htpasswd';
@@ -12,22 +11,36 @@ import {
VerdaccioError,
errorUtils,
pluginUtils,
warningUtils,
} from '@verdaccio/core';
import '@verdaccio/core';
import { asyncLoadPlugin } from '@verdaccio/loaders';
import { logger } from '@verdaccio/logger';
import { aesEncrypt, parseBasicPayload, signPayload } from '@verdaccio/signature';
import {
aesEncrypt,
aesEncryptDeprecated,
parseBasicPayload,
signPayload,
} from '@verdaccio/signature';
import {
AllowAccess,
Callback,
Config,
JWTSignOptions,
Logger,
PackageAccess,
RemoteUser,
Security,
} from '@verdaccio/types';
import { getMatchedPackagesSpec, isFunction, isNil } from '@verdaccio/utils';
import {
$RequestExtend,
$ResponseExtend,
AESPayload,
IAuthMiddleware,
NextFunction,
TokenEncryption,
} from './types';
import {
convertPayloadToBase64,
getDefaultPlugins,
@@ -40,25 +53,6 @@ import {
const debug = buildDebug('verdaccio:auth');
export interface TokenEncryption {
jwtEncrypt(user: RemoteUser, signOptions: JWTSignOptions): Promise<string>;
aesEncrypt(buf: string): string | void;
}
// remove
export interface AESPayload {
user: string;
password: string;
}
export interface IAuthMiddleware {
apiJWTmiddleware(): $NextFunctionVer;
webUIJWTmiddleware(): $NextFunctionVer;
}
export type $RequestExtend = Request & { remote_user?: any; log: Logger };
export type $ResponseExtend = Response & { cookies?: any };
export type $NextFunctionVer = NextFunction & any;
class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
public config: Config;
public secret: string;
@@ -75,6 +69,7 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
public async init() {
let plugins = (await this.loadPlugin()) as pluginUtils.Auth<unknown>[];
debug('auth plugins found %s', plugins.length);
if (!plugins || plugins.length === 0) {
plugins = this.loadDefaultPlugin();
@@ -226,29 +221,32 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
debug('add user %o', user);
(function next(): void {
let method = 'adduser';
const plugin = plugins.shift() as pluginUtils.Auth<Config>;
if (typeof plugin.adduser !== 'function') {
// @ts-expect-error future major (7.x) should remove this section
if (typeof plugin.adduser === 'undefined' && typeof plugin.add_user === 'function') {
method = 'add_user';
warningUtils.emit(warningUtils.Codes.VERWAR006);
}
// @ts-ignore
if (typeof plugin[method] !== 'function') {
next();
} else {
// @ts-expect-error future major (7.x) should remove this section
if (typeof plugin.adduser === 'undefined' && typeof plugin.add_user === 'function') {
throw errorUtils.getInternalError(
'add_user method not longer supported, rename to adduser'
);
}
plugin.adduser(
// TODO: replace by adduser whenever add_user deprecation method has been removed
// @ts-ignore
plugin[method](
user,
password,
function (err: VerdaccioError | null, ok?: boolean | string): void {
if (err) {
debug('the user %o could not being added. Error: %o', user, err?.message);
debug('the user %o could not being added. Error: %o', user, err?.message);
return cb(err);
}
if (ok) {
debug('the user %o has been added', user);
return self.authenticate(user, password, cb);
}
debug('user could not be added, skip to next auth plugin');
next();
}
);
@@ -308,12 +306,11 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
debug('allow unpublish for %o', packageName);
for (const plugin of this.plugins) {
if (_.isNil(plugin) || isFunction(plugin.allow_unpublish) === false) {
if (typeof plugin?.allow_unpublish !== 'function') {
debug('allow unpublish for %o plugin does not implement allow_unpublish', packageName);
continue;
} else {
// @ts-ignore
plugin.allow_unpublish!(user, pkg, (err, ok: boolean): void => {
plugin.allow_unpublish(user, pkg, (err, ok): void => {
if (err) {
debug(
'forbidden publish for %o, it will fallback on unpublish permissions',
@@ -324,9 +321,7 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
if (_.isNil(ok) === true) {
debug('bypass unpublish for %o, publish will handle the access', packageName);
// @ts-ignore
// eslint-disable-next-line
return this.allow_publish(...arguments);
return this.allow_publish({ packageName, packageVersion }, user, callback);
}
if (ok) {
@@ -350,7 +345,7 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
const pkg = Object.assign(
{ name: packageName, version: packageVersion },
getMatchedPackagesSpec(packageName, this.config.packages)
) as any;
);
debug('allow publish for %o init | plugins: %o', packageName, plugins.length);
(function next(): void {
@@ -378,7 +373,7 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
})();
}
public apiJWTmiddleware(): RequestHandler {
public apiJWTmiddleware(): any {
debug('jwt middleware');
const plugins = this.plugins.slice(0);
const helpers = { createAnonymousRemoteUser, createRemoteUser };
@@ -388,11 +383,9 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
}
}
// @ts-ignore
return (req: $RequestExtend, res: $ResponseExtend, _next: NextFunction) => {
req.pause();
const next = function (err?: VerdaccioError): any {
const next = function (err?: VerdaccioError): NextFunction {
req.resume();
// uncomment this to reject users with bad auth headers
// return _next.apply(null, arguments)
@@ -402,13 +395,14 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
req.remote_user.error = err.message;
}
return _next();
return _next() as unknown as NextFunction;
};
if (this._isRemoteUserValid(req.remote_user)) {
debug('jwt has a valid authentication header');
return next();
}
// FUTURE: disabled, not removed yet but seems unreacable code
// if (this._isRemoteUserValid(req.remote_user)) {
// debug('jwt has a valid authentication header');
// return next();
// }
// in case auth header does not exist we return anonymous function
const remoteUser = createAnonymousRemoteUser();
@@ -429,20 +423,20 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
if (isAESLegacy(security)) {
debug('api middleware using legacy auth token');
this._handleAESMiddleware(req, security, secret, authorization, next);
this.handleAESMiddleware(req, security, secret, authorization, next);
} else {
debug('api middleware using JWT auth token');
this._handleJWTAPIMiddleware(req, security, secret, authorization, next);
this.handleJWTAPIMiddleware(req, security, secret, authorization, next);
}
};
}
private _handleJWTAPIMiddleware(
private handleJWTAPIMiddleware(
req: $RequestExtend,
security: Security,
secret: string,
authorization: string,
next: Function
next: any
): void {
debug('handle JWT api middleware');
const { scheme, token } = parseAuthTokenHeader(authorization);
@@ -479,7 +473,7 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
}
}
private _handleAESMiddleware(
private handleAESMiddleware(
req: $RequestExtend,
security: Security,
secret: string,
@@ -489,7 +483,12 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
debug('handle legacy api middleware');
debug('api middleware secret %o', typeof secret === 'string');
debug('api middleware authorization %o', typeof authorization === 'string');
const credentials: any = getMiddlewareCredentials(security, secret, authorization);
const credentials: any = getMiddlewareCredentials(
security,
secret,
authorization,
this.config?.getEnhancedLegacySignature()
);
debug('api middleware credentials %o', credentials?.name);
if (credentials) {
const { user, password } = credentials;
@@ -519,8 +518,7 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
/**
* JWT middleware for WebUI
*/
public webUIJWTmiddleware(): RequestHandler {
// @ts-ignore
public webUIJWTmiddleware() {
return (req: $RequestExtend, res: $ResponseExtend, _next: NextFunction): void => {
if (this._isRemoteUserValid(req.remote_user)) {
return _next();
@@ -530,7 +528,7 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
const next = (err: VerdaccioError | void): void => {
req.resume();
if (err) {
// req.remote_user.error = err.message;
req.remote_user.error = err.message;
res.status(err.statusCode).send(err.message);
}
@@ -581,7 +579,6 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
name,
groups: groupedGroups,
};
const token: string = await signPayload(payload, this.secret, signOptions);
return token;
@@ -591,7 +588,17 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
* Encrypt a string.
*/
public aesEncrypt(value: string): string | void {
return aesEncrypt(value, this.secret);
// enhancedLegacySignature enables modern aes192 algorithm signature
if (this.config?.getEnhancedLegacySignature()) {
debug('signing with enhaced aes legacy');
const token = aesEncrypt(value, this.secret);
return token;
} else {
debug('signing with enhaced aes deprecated legacy');
// deprecated aes (legacy) signature, only must be used for legacy version
const token = aesEncryptDeprecated(Buffer.from(value), this.secret).toString('base64');
return token;
}
}
}

View File

@@ -1,2 +1,3 @@
export { Auth } from './auth';
export * from './utils';
export * from './types';

View File

@@ -0,0 +1,66 @@
import buildDebug from 'debug';
import _ from 'lodash';
import { TOKEN_BASIC, TOKEN_BEARER } from '@verdaccio/core';
import { aesDecryptDeprecated as aesDecrypt, parseBasicPayload } from '@verdaccio/signature';
import { Security } from '@verdaccio/types';
import { AuthMiddlewarePayload } from './types';
import {
convertPayloadToBase64,
isAESLegacy,
parseAuthTokenHeader,
verifyJWTPayload,
} from './utils';
const debug = buildDebug('verdaccio:auth:utils');
export function parseAESCredentials(authorizationHeader: string, secret: string) {
debug('parseAESCredentials');
const { scheme, token } = parseAuthTokenHeader(authorizationHeader);
// basic is deprecated and should not be enforced
// basic is currently being used for functional test
if (scheme.toUpperCase() === TOKEN_BASIC.toUpperCase()) {
debug('legacy header basic');
const credentials = convertPayloadToBase64(token).toString();
return credentials;
} else if (scheme.toUpperCase() === TOKEN_BEARER.toUpperCase()) {
debug('legacy header bearer');
const credentials = aesDecrypt(Buffer.from(token), secret);
return credentials;
}
}
export function getMiddlewareCredentials(
security: Security,
secretKey: string,
authorizationHeader: string
): AuthMiddlewarePayload {
debug('getMiddlewareCredentials');
// comment out for debugging purposes
if (isAESLegacy(security)) {
debug('is legacy');
const credentials = parseAESCredentials(authorizationHeader, secretKey);
if (typeof credentials !== 'string') {
debug('parse legacy credentials failed');
return;
}
const parsedCredentials = parseBasicPayload(credentials);
if (!parsedCredentials) {
debug('parse legacy basic payload credentials failed');
return;
}
return parsedCredentials;
}
const { scheme, token } = parseAuthTokenHeader(authorizationHeader);
debug('is jwt');
if (_.isString(token) && scheme.toUpperCase() === TOKEN_BEARER.toUpperCase()) {
return verifyJWTPayload(token, secretKey);
}
}

View File

@@ -0,0 +1,66 @@
import buildDebug from 'debug';
import _ from 'lodash';
import { TOKEN_BASIC, TOKEN_BEARER } from '@verdaccio/core';
import { aesDecrypt, parseBasicPayload } from '@verdaccio/signature';
import { Security } from '@verdaccio/types';
import { AuthMiddlewarePayload } from './types';
import {
convertPayloadToBase64,
isAESLegacy,
parseAuthTokenHeader,
verifyJWTPayload,
} from './utils';
const debug = buildDebug('verdaccio:auth:utils');
export function parseAESCredentials(authorizationHeader: string, secret: string) {
debug('parseAESCredentials');
const { scheme, token } = parseAuthTokenHeader(authorizationHeader);
// basic is deprecated and should not be enforced
// basic is currently being used for functional test
if (scheme.toUpperCase() === TOKEN_BASIC.toUpperCase()) {
debug('legacy header basic');
const credentials = convertPayloadToBase64(token).toString();
return credentials;
} else if (scheme.toUpperCase() === TOKEN_BEARER.toUpperCase()) {
debug('legacy header bearer');
const credentials = aesDecrypt(token, secret);
return credentials;
}
}
export function getMiddlewareCredentials(
security: Security,
secretKey: string,
authorizationHeader: string
): AuthMiddlewarePayload {
debug('getMiddlewareCredentials');
// comment out for debugging purposes
if (isAESLegacy(security)) {
debug('is legacy');
const credentials = parseAESCredentials(authorizationHeader, secretKey);
if (!credentials) {
debug('parse legacy credentials failed');
return;
}
const parsedCredentials = parseBasicPayload(credentials);
if (!parsedCredentials) {
debug('parse legacy basic payload credentials failed');
return;
}
return parsedCredentials;
}
const { scheme, token } = parseAuthTokenHeader(authorizationHeader);
debug('is jwt');
if (_.isString(token) && scheme.toUpperCase() === TOKEN_BEARER.toUpperCase()) {
return verifyJWTPayload(token, secretKey);
}
}

View File

@@ -0,0 +1,46 @@
import { NextFunction, Request, Response } from 'express';
import { VerdaccioError } from '@verdaccio/core';
import { AuthPackageAllow, JWTSignOptions, Logger, RemoteUser } from '@verdaccio/types';
export interface AESPayload {
user: string;
password: string;
}
export type BasicPayload = AESPayload | void;
export type AuthMiddlewarePayload = RemoteUser | BasicPayload;
export interface AuthTokenHeader {
scheme: string;
token: string;
}
export type AllowActionCallbackResponse = boolean | undefined;
export type AllowActionCallback = (
error: VerdaccioError | null,
allowed?: AllowActionCallbackResponse
) => void;
export type AllowAction = (
user: RemoteUser,
pkg: AuthPackageAllow,
callback: AllowActionCallback
) => void;
export interface TokenEncryption {
jwtEncrypt(user: RemoteUser, signOptions: JWTSignOptions): Promise<string>;
aesEncrypt(buf: string): string | void;
}
export type ActionsAllowed = 'publish' | 'unpublish' | 'access';
// remove
export interface IAuthMiddleware {
apiJWTmiddleware(): $NextFunctionVer;
webUIJWTmiddleware(): $NextFunctionVer;
}
export type $RequestExtend = Request & { remote_user?: any; log: Logger };
export type $ResponseExtend = Response & { cookies?: any };
export type $NextFunctionVer = NextFunction & any;
export { NextFunction };

View File

@@ -7,36 +7,28 @@ import {
HTTP_STATUS,
TOKEN_BASIC,
TOKEN_BEARER,
VerdaccioError,
errorUtils,
pluginUtils,
} from '@verdaccio/core';
import { aesDecrypt, parseBasicPayload, verifyPayload } from '@verdaccio/signature';
import {
aesDecrypt,
aesDecryptDeprecated,
parseBasicPayload,
verifyPayload,
} from '@verdaccio/signature';
import { AuthPackageAllow, Config, Logger, RemoteUser, Security } from '@verdaccio/types';
import { AESPayload, TokenEncryption } from './auth';
import {
ActionsAllowed,
AllowAction,
AllowActionCallback,
AuthMiddlewarePayload,
AuthTokenHeader,
TokenEncryption,
} from './types';
const debug = buildDebug('verdaccio:auth:utils');
export type BasicPayload = AESPayload | void;
export type AuthMiddlewarePayload = RemoteUser | BasicPayload;
export interface AuthTokenHeader {
scheme: string;
token: string;
}
export type AllowActionCallbackResponse = boolean | undefined;
export type AllowActionCallback = (
error: VerdaccioError | null,
allowed?: AllowActionCallbackResponse
) => void;
export type AllowAction = (
user: RemoteUser,
pkg: AuthPackageAllow,
callback: AllowActionCallback
) => void;
/**
* Split authentication header eg: Bearer [secret_token]
* @param authorizationHeader auth token
@@ -48,7 +40,11 @@ export function parseAuthTokenHeader(authorizationHeader: string): AuthTokenHead
return { scheme, token };
}
export function parseAESCredentials(authorizationHeader: string, secret: string) {
export function parseAESCredentials(
authorizationHeader: string,
secret: string,
enhanced: boolean
) {
debug('parseAESCredentials');
const { scheme, token } = parseAuthTokenHeader(authorizationHeader);
@@ -61,7 +57,11 @@ export function parseAESCredentials(authorizationHeader: string, secret: string)
return credentials;
} else if (scheme.toUpperCase() === TOKEN_BEARER.toUpperCase()) {
debug('legacy header bearer');
const credentials = aesDecrypt(token, secret);
debug('legacy header enhanced?', enhanced);
const credentials = enhanced
? aesDecrypt(token.toString(), secret)
: // FUTURE: once deprecated legacy is removed this logic won't be longer need it
aesDecryptDeprecated(convertPayloadToBase64(token), secret).toString('utf-8');
return credentials;
}
@@ -70,13 +70,14 @@ export function parseAESCredentials(authorizationHeader: string, secret: string)
export function getMiddlewareCredentials(
security: Security,
secretKey: string,
authorizationHeader: string
authorizationHeader: string,
enhanced: boolean = true
): AuthMiddlewarePayload {
debug('getMiddlewareCredentials');
// comment out for debugging purposes
if (isAESLegacy(security)) {
debug('is legacy');
const credentials = parseAESCredentials(authorizationHeader, secretKey);
const credentials = parseAESCredentials(authorizationHeader, secretKey, enhanced);
if (!credentials) {
debug('parse legacy credentials failed');
return;
@@ -161,14 +162,15 @@ export function isAuthHeaderValid(authorization: string): boolean {
export function getDefaultPlugins(logger: Logger): pluginUtils.Auth<Config> {
return {
authenticate(_user: string, _password: string, cb: pluginUtils.AuthCallback): void {
debug('triggered default authenticate method');
cb(errorUtils.getForbidden(API_ERROR.BAD_USERNAME_PASSWORD));
},
adduser(_user: string, _password: string, cb: pluginUtils.AuthUserCallback): void {
debug('triggered default adduser method');
return cb(errorUtils.getConflict(API_ERROR.BAD_USERNAME_PASSWORD));
},
// FIXME: allow_action and allow_publish should be in the @verdaccio/types
// @ts-ignore
allow_access: allow_action('access', logger),
// @ts-ignore
@@ -177,8 +179,6 @@ export function getDefaultPlugins(logger: Logger): pluginUtils.Auth<Config> {
};
}
export type ActionsAllowed = 'publish' | 'unpublish' | 'access';
export function allow_action(action: ActionsAllowed, logger: Logger): AllowAction {
return function allowActionCallback(
user: RemoteUser,
@@ -187,8 +187,13 @@ export function allow_action(action: ActionsAllowed, logger: Logger): AllowActio
): void {
logger.trace({ remote: user.name }, `[auth/allow_action]: user: @{remote}`);
const { name, groups } = user;
debug('allow_action "%s": groups %s', action, groups);
const groupAccess = pkg[action] as string[];
const hasPermission = groupAccess.some((group) => name === group || groups.includes(group));
debug('allow_action "%s": groupAccess %s', action, groupAccess);
const hasPermission = groupAccess.some((group) => {
return name === group || groups.includes(group);
});
debug('package "%s" has permission "%s"', name, hasPermission);
logger.trace(
{ pkgName: pkg.name, hasPermission, remote: user.name, groupAccess },
`[auth/allow_action]: hasPermission? @{hasPermission} for user: @{remote}, package: @{pkgName}`
@@ -218,7 +223,8 @@ export function handleSpecialUnpublish(logger: Logger): any {
return function (user: RemoteUser, pkg: AuthPackageAllow, callback: AllowActionCallback): void {
const action = 'unpublish';
// verify whether the unpublish prop has been defined
const isUnpublishMissing: boolean = _.isNil(pkg[action]);
const isUnpublishMissing: boolean = !pkg[action];
debug('is unpublish method missing ? %s', isUnpublishMissing);
const hasGroups: boolean = isUnpublishMissing ? false : (pkg[action] as string[]).length > 0;
logger.trace(
{ user: user.name, name: pkg.name, hasGroups },

View File

@@ -1,47 +1,79 @@
import express from 'express';
import path from 'path';
import supertest from 'supertest';
import { Config as AppConfig, ROLES, getDefaultConfig } from '@verdaccio/config';
import { errorUtils } from '@verdaccio/core';
import { setup } from '@verdaccio/logger';
import { Config as AppConfig, ROLES, createRemoteUser, getDefaultConfig } from '@verdaccio/config';
import {
API_ERROR,
HEADERS,
HTTP_STATUS,
SUPPORT_ERRORS,
TOKEN_BEARER,
errorUtils,
} from '@verdaccio/core';
import { logger, setup } from '@verdaccio/logger';
import { errorReportingMiddleware, final, handleError } from '@verdaccio/middleware';
import { Config } from '@verdaccio/types';
import { buildToken } from '@verdaccio/utils';
import { Auth } from '../src';
import { authPluginFailureConf, authPluginPassThrougConf, authProfileConf } from './helper/plugin';
import { $RequestExtend, Auth } from '../src';
import {
authChangePasswordConf,
authPluginFailureConf,
authPluginPassThrougConf,
authProfileConf,
} from './helper/plugin';
setup({ level: 'debug', type: 'stdout' });
setup({});
// to avoid flaky test generate same ramdom key
jest.mock('@verdaccio/utils', () => {
return {
...jest.requireActual('@verdaccio/utils'),
// used by enhanced legacy aes signature (minimum 32 characters)
generateRandomSecretKey: () => 'GCYW/3IJzQI6GvPmy9sbMkFoiL7QLVw',
// used by legacy aes signature
generateRandomHexString: () =>
'ff065fcf7a8330ae37d3ea116328852f387ad7aa6defbe47fb68b1ea25f97446',
};
});
describe('AuthTest', () => {
test('should init correctly', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
describe('default', () => {
test('should init correctly', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
});
test('should load default auth plugin', async () => {
const config: Config = new AppConfig({ ...authProfileConf, auth: undefined });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
});
test('should load custom algorithm', async () => {
const config: Config = new AppConfig({
...authProfileConf,
auth: { htpasswd: { algorithm: 'sha1', file: './foo' } },
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
});
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
test('should load default auth plugin', async () => {
const config: Config = new AppConfig({ ...authProfileConf, auth: undefined });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
});
});
describe('test authenticate method', () => {
describe('utils', () => {
test('should load custom algorithm', async () => {
const config: Config = new AppConfig({
...authProfileConf,
auth: { htpasswd: { algorithm: 'sha1', file: './foo' } },
});
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
});
});
describe('authenticate', () => {
describe('test authenticate states', () => {
test('should be a success login', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
@@ -163,30 +195,519 @@ describe('AuthTest', () => {
}
});
});
describe('test multiple authenticate methods', () => {
test('should skip falsy values', async () => {
const config: Config = new AppConfig({
...getDefaultConfig(),
plugins: path.join(__dirname, './partials/plugin'),
auth: {
success: {},
'fail-invalid-method': {},
},
});
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
return new Promise((resolve) => {
auth.authenticate('foo', 'bar', (err, value) => {
expect(value).toEqual({
name: 'foo',
groups: ['test', ROLES.$ALL, '$authenticated', '@all', '@authenticated', 'all'],
real_groups: ['test'],
});
resolve(value);
});
});
});
});
});
describe('test multiple authenticate methods', () => {
test('should skip falsy values', async () => {
describe('changePassword', () => {
test('should fail if the plugin does not provide implementation', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
auth.changePassword('foo', 'bar', 'newFoo', callback);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(
errorUtils.getInternalError(SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)
);
});
test('should handle plugin does provide implementation', async () => {
const config: Config = new AppConfig({ ...authChangePasswordConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
auth.add_user('foo', 'bar', jest.fn());
auth.changePassword('foo', 'bar', 'newFoo', callback);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(null, true);
});
});
describe('allow_access', () => {
describe('no custom allow_access implementation provided', () => {
// when allow_access is not implemented, the groups must match
// exactly with the packages access group
test('should fails if groups do not match exactly', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
const groups = ['test'];
auth.allow_access(
{ packageName: 'foo' },
{ name: 'foo', groups, real_groups: groups },
callback
);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(
errorUtils.getForbidden('user foo is not allowed to access package foo')
);
});
test('should success if groups do not match exactly', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
// $all comes from configuration file
const groups = [ROLES.$ALL];
auth.allow_access(
{ packageName: 'foo' },
{ name: 'foo', groups, real_groups: groups },
callback
);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(null, true);
});
});
});
describe('allow_publish', () => {
describe('no custom allow_publish implementation provided', () => {
// when allow_access is not implemented, the groups must match
// exactly with the packages access group
test('should fails if groups do not match exactly', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
const groups = ['test'];
auth.allow_publish(
{ packageName: 'foo' },
{ name: 'foo', groups, real_groups: groups },
callback
);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(
errorUtils.getForbidden('user foo is not allowed to publish package foo')
);
});
test('should success if groups do match exactly', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
// $all comes from configuration file
const groups = [ROLES.$AUTH];
auth.allow_publish(
{ packageName: 'foo' },
{ name: 'foo', groups, real_groups: groups },
callback
);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(null, true);
});
});
});
describe('allow_unpublish', () => {
describe('no custom allow_unpublish implementation provided', () => {
test('should fails if groups do not match exactly', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
const groups = ['test'];
auth.allow_unpublish(
{ packageName: 'foo' },
{ name: 'foo', groups, real_groups: groups },
callback
);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(
errorUtils.getForbidden('user foo is not allowed to unpublish package foo')
);
});
test('should handle missing unpublish method (special case to handle legacy configurations)', async () => {
const config: Config = new AppConfig({
...authProfileConf,
packages: {
...authProfileConf.packages,
'**': {
access: ['$all'],
publish: ['$authenticated'],
// it forces publish handle the access
unpublish: undefined,
proxy: ['npmjs'],
},
},
});
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
const groups = ['test'];
auth.allow_unpublish(
{ packageName: 'foo' },
{ name: 'foo', groups, real_groups: groups },
callback
);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(
errorUtils.getForbidden('user foo is not allowed to publish package foo')
);
});
test('should success if groups do match exactly', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
// $all comes from configuration file
const groups = [ROLES.$AUTH];
auth.allow_unpublish(
{ packageName: 'foo' },
{ name: 'foo', groups, real_groups: groups },
callback
);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(null, true);
});
});
});
describe('add_user', () => {
describe('error handling', () => {
// when allow_access is not implemented, the groups must match
// exactly with the packages access group
test('should fails with bad password if adduser is not implemented', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
auth.add_user('juan', 'password', callback);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(
errorUtils.getConflict(API_ERROR.BAD_USERNAME_PASSWORD)
);
});
test('should fails if adduser fails internally (exception)', async () => {
const config: Config = new AppConfig({
...getDefaultConfig(),
plugins: path.join(__dirname, './partials/plugin'),
auth: {
adduser: {},
},
});
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
// note: fail uas username make plugin fails
auth.add_user('fail', 'password', callback);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(new Error('bad username'));
});
test('should skip to the next plugin and fails', async () => {
const config: Config = new AppConfig({
...getDefaultConfig(),
plugins: path.join(__dirname, './partials/plugin'),
auth: {
adduser: {},
// plugin implement adduser with fail auth
fail: {},
},
});
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
// note: fail uas username make plugin fails
auth.add_user('skip', 'password', callback);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(
errorUtils.getConflict(API_ERROR.BAD_USERNAME_PASSWORD)
);
});
});
test('should success if adduser', async () => {
const config: Config = new AppConfig({
...getDefaultConfig(),
plugins: path.join(__dirname, './partials/plugin'),
auth: {
success: {},
'fail-invalid-method': {},
adduser: {},
},
});
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
return new Promise((resolve) => {
auth.authenticate('foo', 'bar', (err, value) => {
expect(value).toEqual({
name: 'foo',
groups: ['test', '$all', '$authenticated', '@all', '@authenticated', 'all'],
real_groups: ['test'],
const callback = jest.fn();
auth.add_user('something', 'password', callback);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(null, {
groups: ['test', '$all', '$authenticated', '@all', '@authenticated', 'all'],
name: 'something',
real_groups: ['test'],
});
});
test('should handle legacy add_user method', async () => {
const config: Config = new AppConfig({
...getDefaultConfig(),
plugins: path.join(__dirname, './partials/plugin'),
auth: {
'adduser-legacy': {},
},
});
config.checkSecretKey('12345');
const auth: Auth = new Auth(config);
await auth.init();
expect(auth).toBeDefined();
const callback = jest.fn();
auth.add_user('something', 'password', callback);
expect(callback).toHaveBeenCalledTimes(1);
expect(callback).toHaveBeenCalledWith(null, {
groups: ['test', '$all', '$authenticated', '@all', '@authenticated', 'all'],
name: 'something',
real_groups: ['test'],
});
});
});
describe('middlewares', () => {
describe('apiJWTmiddleware', () => {
const secret = '12345';
const getServer = async function (auth) {
const app = express();
app.use(express.json({ strict: false, limit: '10mb' }));
// @ts-expect-error
app.use(errorReportingMiddleware(logger));
app.use(auth.apiJWTmiddleware());
app.get('/*', (req, res, next) => {
if ((req as $RequestExtend).remote_user.error) {
next(new Error((req as $RequestExtend).remote_user.error));
} else {
// @ts-expect-error
next({ user: req?.remote_user });
}
});
// @ts-expect-error
app.use(handleError(logger));
// @ts-expect-error
app.use(final);
return app;
};
describe('legacy signature', () => {
describe('error cases', () => {
test('should handle invalid auth token', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey(secret);
const auth = new Auth(config);
await auth.init();
const app = await getServer(auth);
return supertest(app)
.get(`/`)
.set(HEADERS.AUTHORIZATION, 'Bearer foo')
.expect(HTTP_STATUS.INTERNAL_ERROR);
});
test('should handle missing auth header', async () => {
const config: Config = new AppConfig({ ...authProfileConf });
config.checkSecretKey(secret);
const auth = new Auth(config);
await auth.init();
const app = await getServer(auth);
return supertest(app).get(`/`).expect(HTTP_STATUS.OK);
});
});
describe('deprecated legacy handling forceEnhancedLegacySignature=false', () => {
test('should handle valid auth token', async () => {
const payload = 'juan:password';
// const token = await signPayload(remoteUser, '12345');
const config: Config = new AppConfig(
{ ...authProfileConf },
{ forceEnhancedLegacySignature: false }
);
// intended to force key generator (associated with mocks above)
config.checkSecretKey(undefined);
const auth = new Auth(config);
await auth.init();
const token = auth.aesEncrypt(payload) as string;
const app = await getServer(auth);
const res = await supertest(app)
.get(`/`)
.set(HEADERS.AUTHORIZATION, buildToken(TOKEN_BEARER, token))
.expect(HTTP_STATUS.OK);
expect(res.body.user.name).toEqual('juan');
});
test('should handle invalid auth token', async () => {
const payload = 'juan:password';
const config: Config = new AppConfig(
{ ...authPluginFailureConf },
{ forceEnhancedLegacySignature: false }
);
// intended to force key generator (associated with mocks above)
config.checkSecretKey(undefined);
const auth = new Auth(config);
await auth.init();
const token = auth.aesEncrypt(payload) as string;
const app = await getServer(auth);
return await supertest(app)
.get(`/`)
.set(HEADERS.AUTHORIZATION, buildToken(TOKEN_BEARER, token))
.expect(HTTP_STATUS.INTERNAL_ERROR);
});
});
});
describe('jwt signature', () => {
describe('error cases', () => {
test('should handle invalid auth token and return anonymous', async () => {
// @ts-expect-error
const config: Config = new AppConfig({
...authProfileConf,
...{ security: { api: { jwt: { sign: { expiresIn: '29d' } } } } },
});
config.checkSecretKey(secret);
const auth = new Auth(config);
await auth.init();
const app = await getServer(auth);
const res = await supertest(app)
.get(`/`)
.set(HEADERS.AUTHORIZATION, 'Bearer foo')
.expect(HTTP_STATUS.OK);
expect(res.body.user.groups).toEqual([
ROLES.$ALL,
ROLES.$ANONYMOUS,
ROLES.DEPRECATED_ALL,
ROLES.DEPRECATED_ANONYMOUS,
]);
});
test('should handle missing auth header', async () => {
// @ts-expect-error
const config: Config = new AppConfig({
...authProfileConf,
...{ security: { api: { jwt: { sign: { expiresIn: '29d' } } } } },
});
config.checkSecretKey(secret);
const auth = new Auth(config);
await auth.init();
const app = await getServer(auth);
const res = await supertest(app).get(`/`).expect(HTTP_STATUS.OK);
expect(res.body.user.groups).toEqual([
ROLES.$ALL,
ROLES.$ANONYMOUS,
ROLES.DEPRECATED_ALL,
ROLES.DEPRECATED_ANONYMOUS,
]);
});
});
describe('valid signature handlers', () => {
test('should handle valid auth token', async () => {
const config: Config = new AppConfig(
// @ts-expect-error
{
...authProfileConf,
...{ security: { api: { jwt: { sign: { expiresIn: '29d' } } } } },
},
{ forceEnhancedLegacySignature: false }
);
// intended to force key generator (associated with mocks above)
config.checkSecretKey(undefined);
const auth = new Auth(config);
await auth.init();
const token = (await auth.jwtEncrypt(
createRemoteUser('jwt_user', [ROLES.ALL]),
// @ts-expect-error
config.security.api.jwt.sign
)) as string;
const app = await getServer(auth);
const res = await supertest(app)
.get(`/`)
.set(HEADERS.AUTHORIZATION, buildToken(TOKEN_BEARER, token))
.expect(HTTP_STATUS.OK);
expect(res.body.user.name).toEqual('jwt_user');
});
resolve(value);
});
});
});

View File

@@ -10,6 +10,14 @@ export const authProfileConf = {
},
};
export const authChangePasswordConf = {
...getDefaultConfig(),
plugins: path.join(__dirname, '../partials/plugin'),
auth: {
'change-password': {},
},
};
export const authPluginFailureConf = {
...getDefaultConfig(),
plugins: path.join(__dirname, '../partials/plugin'),

View File

@@ -0,0 +1,9 @@
module.exports = function () {
return {
authenticate(user, pass, callback) {
// https://verdaccio.org/docs/en/dev-plugins#onsuccess
// this is a successful login and return a simple group
callback(null, ['test']);
},
};
};

View File

@@ -0,0 +1,5 @@
{
"name": "verdaccio-access-ok",
"main": "access.js",
"version": "1.0.0"
}

View File

@@ -0,0 +1,25 @@
module.exports = function () {
return {
authenticate(user, pass, callback) {
// https://verdaccio.org/docs/en/dev-plugins#onsuccess
// this is a successful login and return a simple group
callback(null, ['test']);
},
add_user(user, password, cb) {
if (user === 'fail') {
return cb(Error('bad username'));
}
if (user === 'password') {
return cb(Error('bad password'));
}
if (user === 'skip') {
// if wants to the next plugin
return cb(null, false);
}
cb(null, true);
},
};
};

View File

@@ -0,0 +1,5 @@
{
"name": "verdaccio-adduser-legacy",
"main": "adduser.js",
"version": "1.0.0"
}

View File

@@ -0,0 +1,25 @@
module.exports = function () {
return {
authenticate(user, pass, callback) {
// https://verdaccio.org/docs/en/dev-plugins#onsuccess
// this is a successful login and return a simple group
callback(null, ['test']);
},
adduser(user, password, cb) {
if (user === 'fail') {
return cb(Error('bad username'));
}
if (user === 'password') {
return cb(Error('bad password'));
}
if (user === 'skip') {
// if wants to the next plugin
return cb(null, false);
}
cb(null, true);
},
};
};

View File

@@ -0,0 +1,5 @@
{
"name": "verdaccio-adduser",
"main": "adduser.js",
"version": "1.0.0"
}

View File

@@ -0,0 +1,32 @@
module.exports = function () {
return {
users: [],
authenticate(user, pass, callback) {
// https://verdaccio.org/docs/en/dev-plugins#onsuccess
// this is a successful login and return a simple group
callback(null, ['test']);
},
changePassword(user, password, newPassword, cb) {
if (password === newPassword) {
return cb(Error('error password equal'));
}
return cb(null, true);
},
adduser(user, password, cb) {
if (user === 'fail') {
return cb(Error('bad username'));
}
if (user === 'password') {
return cb(Error('bad password'));
}
if (user === 'skip') {
// if wants to the next plugin
return cb(null, false);
}
cb(null, true);
},
};
};

View File

@@ -0,0 +1,5 @@
{
"name": "verdaccio-change-password",
"main": "change.js",
"version": "1.0.0"
}

View File

@@ -7,5 +7,8 @@ module.exports = function () {
and success types respectively for testing purposes */
callback(errorUtils.getInternalError(), false);
},
adduser(user, password, cb) {
return cb(null, false);
},
};
};

View File

@@ -1,5 +1,67 @@
# @verdaccio/cli
## 7.0.0-next-7.7
### Patch Changes
- @verdaccio/core@7.0.0-next-7.7
- @verdaccio/config@7.0.0-next-7.7
- @verdaccio/node-api@7.0.0-next-7.7
- @verdaccio/logger@7.0.0-next-7.7
## 7.0.0-next.6
### Patch Changes
- Updated dependencies [4d96324]
- @verdaccio/config@7.0.0-next.6
- @verdaccio/node-api@7.0.0-next.6
- @verdaccio/core@7.0.0-next.6
- @verdaccio/logger@7.0.0-next.6
## 7.0.0-next.5
### Patch Changes
- Updated dependencies [f047cc8]
- @verdaccio/core@7.0.0-next.5
- @verdaccio/config@7.0.0-next.5
- @verdaccio/node-api@7.0.0-next.5
- @verdaccio/logger@7.0.0-next.5
## 7.0.0-next.4
### Patch Changes
- @verdaccio/node-api@7.0.0-next.4
- @verdaccio/core@7.0.0-next.4
- @verdaccio/config@7.0.0-next.4
- @verdaccio/logger@7.0.0-next.4
## 7.0.0-next.3
### Major Changes
- e7ebccb61: update major dependencies, remove old nodejs support
### Patch Changes
- Updated dependencies [daceb6d87]
- Updated dependencies [e7ebccb61]
- @verdaccio/config@7.0.0-next.3
- @verdaccio/core@7.0.0-next.3
- @verdaccio/logger@7.0.0-next.3
- @verdaccio/node-api@7.0.0-next.3
## 7.0.0-next.2
### Patch Changes
- @verdaccio/core@7.0.0-next.2
- @verdaccio/config@7.0.0-next.2
- @verdaccio/node-api@7.0.0-next.2
- @verdaccio/logger@7.0.0-next.2
## 7.0.0-next.1
### Patch Changes
@@ -145,12 +207,12 @@
- 8f43bf17d: feat: node api new structure based on promise
```js
import { runServer } from '@verdaccio/node-api';
import { runServer } from "@verdaccio/node-api";
// or
import { runServer } from 'verdaccio';
import { runServer } from "verdaccio";
const app = await runServer(); // default configuration
const app = await runServer('./config/config.yaml');
const app = await runServer("./config/config.yaml");
const app = await runServer({ configuration });
app.listen(4000, (event) => {
// do something
@@ -996,14 +1058,14 @@
- 5c5057fc: feat: node api new structure based on promise
```js
import { runServer } from '@verdaccio/node-api';
import { runServer } from "@verdaccio/node-api";
// or
import { runServer } from 'verdaccio';
import { runServer } from "verdaccio";
const app = await runServer(); // default configuration
const app = await runServer('./config/config.yaml');
const app = await runServer("./config/config.yaml");
const app = await runServer({ configuration });
app.listen(4000, event => {
app.listen(4000, (event) => {
// do something
});
```

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/cli",
"version": "7.0.0-next.1",
"version": "7.0.0-next-7.7",
"author": {
"name": "Juan Picado",
"email": "juanpicado19@gmail.com"
@@ -26,8 +26,7 @@
"verdaccio"
],
"engines": {
"node": ">=14",
"npm": ">=6"
"node": ">=18"
},
"description": "verdaccio CLI",
"license": "MIT",
@@ -44,17 +43,17 @@
"start": "ts-node src/index.ts"
},
"dependencies": {
"@verdaccio/core": "workspace:7.0.0-next.1",
"@verdaccio/config": "workspace:7.0.0-next.1",
"@verdaccio/logger": "workspace:7.0.0-next.1",
"@verdaccio/node-api": "workspace:7.0.0-next.1",
"@verdaccio/core": "workspace:7.0.0-next-7.7",
"@verdaccio/config": "workspace:7.0.0-next-7.7",
"@verdaccio/logger": "workspace:7.0.0-next-7.7",
"@verdaccio/node-api": "workspace:7.0.0-next-7.7",
"clipanion": "3.2.1",
"envinfo": "7.8.1",
"envinfo": "7.11.0",
"kleur": "4.1.5",
"semver": "7.5.4"
},
"devDependencies": {
"ts-node": "10.9.1"
"ts-node": "10.9.2"
},
"funding": {
"type": "opencollective",

View File

@@ -1,5 +1,63 @@
# @verdaccio/config
## 7.0.0-next-7.7
### Patch Changes
- @verdaccio/core@7.0.0-next-7.7
- @verdaccio/utils@7.0.0-next-7.7
## 7.0.0-next.6
### Patch Changes
- 4d96324: chore(config): increase test coverage
- @verdaccio/core@7.0.0-next.6
- @verdaccio/utils@7.0.0-next.6
## 7.0.0-next.5
### Minor Changes
- f047cc8: refactor: auth with legacy sign support
### Patch Changes
- Updated dependencies [f047cc8]
- @verdaccio/core@7.0.0-next.5
- @verdaccio/utils@7.0.0-next.5
## 7.0.0-next.4
### Patch Changes
- @verdaccio/core@7.0.0-next.4
- @verdaccio/utils@7.0.0-next.4
## 7.0.0-next.3
### Major Changes
- e7ebccb61: update major dependencies, remove old nodejs support
### Minor Changes
- daceb6d87: restore legacy support
### Patch Changes
- Updated dependencies [daceb6d87]
- Updated dependencies [e7ebccb61]
- @verdaccio/core@7.0.0-next.3
- @verdaccio/utils@7.0.0-next.3
## 7.0.0-next.2
### Patch Changes
- @verdaccio/core@7.0.0-next.2
- @verdaccio/utils@7.0.0-next.2
## 7.0.0-next.1
### Patch Changes
@@ -194,12 +252,12 @@
- 8f43bf17d: feat: node api new structure based on promise
```js
import { runServer } from '@verdaccio/node-api';
import { runServer } from "@verdaccio/node-api";
// or
import { runServer } from 'verdaccio';
import { runServer } from "verdaccio";
const app = await runServer(); // default configuration
const app = await runServer('./config/config.yaml');
const app = await runServer("./config/config.yaml");
const app = await runServer({ configuration });
app.listen(4000, (event) => {
// do something
@@ -969,14 +1027,14 @@
- 5c5057fc: feat: node api new structure based on promise
```js
import { runServer } from '@verdaccio/node-api';
import { runServer } from "@verdaccio/node-api";
// or
import { runServer } from 'verdaccio';
import { runServer } from "verdaccio";
const app = await runServer(); // default configuration
const app = await runServer('./config/config.yaml');
const app = await runServer("./config/config.yaml");
const app = await runServer({ configuration });
app.listen(4000, event => {
app.listen(4000, (event) => {
// do something
});
```

View File

@@ -3,8 +3,7 @@ const config = require('../../jest/config');
module.exports = Object.assign({}, config, {
coverageThreshold: {
global: {
// FIXME: increase to 90
lines: 85,
lines: 90,
},
},
});

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/config",
"version": "7.0.0-next.1",
"version": "7.0.0-next-7.7",
"description": "logger",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -38,17 +38,17 @@
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/core": "workspace:7.0.0-next.1",
"@verdaccio/utils": "workspace:7.0.0-next.1",
"@verdaccio/core": "workspace:7.0.0-next-7.7",
"@verdaccio/utils": "workspace:7.0.0-next-7.7",
"debug": "4.3.4",
"js-yaml": "4.1.0",
"lodash": "4.17.21",
"minimatch": "3.1.2",
"minimatch": "7.4.6",
"yup": "0.32.11"
},
"devDependencies": {
"@types/minimatch": "3.0.5",
"@types/yup": "0.29.14"
"@types/minimatch": "5.1.2",
"@types/yup": "0.32.0"
},
"funding": {
"type": "opencollective",

View File

@@ -63,6 +63,10 @@ class Config implements AppConfig {
private configOptions: { forceEnhancedLegacySignature: boolean };
public constructor(
config: ConfigYaml & { config_path: string },
// forceEnhancedLegacySignature is a property that
// allows switch a new legacy aes signature token signature
// for older versions do not want to have this new signature model
// this property must be false
configOptions = { forceEnhancedLegacySignature: true }
) {
const self = this;
@@ -131,6 +135,16 @@ class Config implements AppConfig {
}
}
public getEnhancedLegacySignature() {
if (typeof this?.security.enhancedLegacySignature !== 'undefined') {
if (this.security.enhancedLegacySignature === true) {
return true;
}
return false;
}
return this.configOptions.forceEnhancedLegacySignature;
}
public getConfigPath() {
return this.configPath;
}
@@ -156,24 +170,23 @@ class Config implements AppConfig {
}
// generate a new a secret key
// FUTURE: this might be an external secret key, perhaps within config file?
debug('generate a new key');
//
if (this.configOptions.forceEnhancedLegacySignature) {
debug('generating a new secret key');
if (this.getEnhancedLegacySignature()) {
debug('key generated with "enhanced" legacy signature user config');
this.secret = generateRandomSecretKey();
} else {
this.secret =
this.security.enhancedLegacySignature === true
? generateRandomSecretKey()
: generateRandomHexString(32);
// set this to false allow use old token signature and is not recommended
// only use for migration reasons, major release will remove this property and
// set it by default
if (this.security.enhancedLegacySignature === false) {
warningUtils.emit(Codes.VERWAR005);
}
debug('key generated with legacy signature user config');
this.secret = generateRandomHexString(32);
}
// set this to false allow use old token signature and is not recommended
// only use for migration reasons, major release will remove this property and
// set it by default
if (this.security?.enhancedLegacySignature === false) {
warningUtils.emit(Codes.VERWAR005);
}
debug('generated a new secret key %s', this.secret?.length);
debug('generated a new secret key length %s', this.secret?.length);
return this.secret;
}
}

View File

@@ -27,7 +27,7 @@ export const PACKAGE_ACCESS = {
export function normalizeUserList(groupsList: any): any {
const result: any[] = [];
if (_.isNil(groupsList)) {
if (_.isNil(groupsList) || _.isEmpty(groupsList)) {
return result;
}

View File

@@ -0,0 +1,42 @@
import { getUserAgent } from '../src';
describe('getUserAgent', () => {
test('should return custom user agent when customUserAgent is true', () => {
const customUserAgent = true;
const version = '1.0.0';
const name = 'MyAgent';
const result = getUserAgent(customUserAgent, version, name);
expect(result).toBe('MyAgent/1.0.0');
});
test('should return custom user agent when customUserAgent is a non-empty string', () => {
const customUserAgent = 'CustomAgent/1.0.0';
const version = '1.0.0';
const name = 'MyAgent';
const result = getUserAgent(customUserAgent, version, name);
expect(result).toBe('CustomAgent/1.0.0');
});
test('should return "hidden" when customUserAgent is false', () => {
const customUserAgent = false;
const version = '1.0.0';
const name = 'MyAgent';
const result = getUserAgent(customUserAgent, version, name);
expect(result).toBe('hidden');
});
test('should return default user agent when customUserAgent is undefined', () => {
const version = '1.0.0';
const name = 'MyAgent';
const result = getUserAgent(undefined, version, name);
expect(result).toBe('MyAgent/1.0.0');
});
});

View File

@@ -13,6 +13,7 @@ describe('Config builder', () => {
proxy: 'some',
})
.addLogger({ level: 'info', type: 'stdout', format: 'json' })
.addAuth({ htpasswd: { file: '.htpasswd' } })
.addStorage('/tmp/verdaccio')
.addSecurity({ api: { legacy: true } });
expect(config.getConfig()).toEqual({
@@ -21,6 +22,11 @@ describe('Config builder', () => {
legacy: true,
},
},
auth: {
htpasswd: {
file: '.htpasswd',
},
},
storage: '/tmp/verdaccio',
packages: {
'upstream/*': {

View File

@@ -106,6 +106,20 @@ describe('checkSecretKey', () => {
const config = new Config(parseConfigFile(resolveConf('default')));
expect(typeof config.checkSecretKey('') === 'string').toBeTruthy();
});
test('with enhanced legacy signature', () => {
const config = new Config(parseConfigFile(resolveConf('default')));
config.security.enhancedLegacySignature = true;
expect(typeof config.checkSecretKey() === 'string').toBeTruthy();
expect(config.secret.length).toBe(32);
});
test('without enhanced legacy signature', () => {
const config = new Config(parseConfigFile(resolveConf('default')));
config.security.enhancedLegacySignature = false;
expect(typeof config.checkSecretKey() === 'string').toBeTruthy();
expect(config.secret.length).toBe(64);
});
});
describe('getMatchedPackagesSpec', () => {
@@ -159,3 +173,18 @@ describe('VERDACCIO_STORAGE_PATH', () => {
delete process.env.VERDACCIO_STORAGE_PATH;
});
});
describe('configPath', () => {
test('should set configPath in config', () => {
const defaultConfig = parseConfigFile(resolveConf('default'));
const config = new Config(defaultConfig);
expect(config.getConfigPath()).toBe(path.join(__dirname, '../src/conf/default.yaml'));
});
test('should throw an error if configPath is not provided', () => {
const defaultConfig = parseConfigFile(resolveConf('default'));
defaultConfig.configPath = '';
defaultConfig.config_path = '';
expect(() => new Config(defaultConfig)).toThrow('configPath property is required');
});
});

View File

@@ -1,7 +1,7 @@
import _ from 'lodash';
import { parseConfigFile } from '../src';
import { PACKAGE_ACCESS, normalisePackageAccess } from '../src/package-access';
import { PACKAGE_ACCESS, normalisePackageAccess, normalizeUserList } from '../src/package-access';
import { parseConfigurationFile } from './utils';
describe('Package access utilities', () => {
@@ -123,4 +123,30 @@ describe('Package access utilities', () => {
expect(_.isArray(all.publish)).toBeTruthy();
});
});
describe('normaliseUserList', () => {
test('should normalize user list', () => {
const groupsList = 'admin superadmin';
const result = normalizeUserList(groupsList);
expect(result).toEqual(['admin', 'superadmin']);
});
test('should normalize empty user list', () => {
const groupsList = '';
const result = normalizeUserList(groupsList);
expect(result).toEqual([]);
});
test('should normalize user list array', () => {
const groupsList = ['admin', 'superadmin'];
const result = normalizeUserList(groupsList);
expect(result).toEqual(['admin', 'superadmin']);
});
test('should throw error for invalid user list', () => {
const groupsList = { group: 'admin' };
expect(() => {
normalizeUserList(groupsList);
}).toThrow('CONFIG: bad package acl (array or string expected): {"group":"admin"}');
});
});
});

View File

@@ -1,5 +1,29 @@
# @verdaccio/core
## 7.0.0-next-7.7
## 7.0.0-next.6
## 7.0.0-next.5
### Minor Changes
- f047cc8: refactor: auth with legacy sign support
## 7.0.0-next.4
## 7.0.0-next.3
### Major Changes
- e7ebccb61: update major dependencies, remove old nodejs support
### Minor Changes
- daceb6d87: restore legacy support
## 7.0.0-next.2
## 7.0.0-next.1
## 7.0.0-next.0

Some files were not shown because too many files have changed in this diff Show More