🤖 I have created a release *beep* *boop* --- <details><summary>4.1.2</summary> ## 4.1.2 (2025-02-20) ### Features * add api key creation logic ([a1351b0](https://github.com/unraid/api/commit/a1351b0469c662d301070da7ffe4aa429e8d248e)) * add category.json ([e784391](https://github.com/unraid/api/commit/e784391ac3e400271d30220bb58b0a69494707d5)) * add command to package.json scripts ([3348a47](https://github.com/unraid/api/commit/3348a474703da162c68b57aeb684d99f298e2848)) * add csrf support to api & web components ([#999](https://github.com/unraid/api/issues/999)) ([f0f5a30](https://github.com/unraid/api/commit/f0f5a3057af1862655eaa3ff2a3182ad671b7b37)) * add description flag, remove console log, and update readme ([85cdb8f](https://github.com/unraid/api/commit/85cdb8f525bb93c4cc3caad440b319a3b467480a)) * add developer docs ([#1128](https://github.com/unraid/api/issues/1128)) ([75474bd](https://github.com/unraid/api/commit/75474bde47ea15abd008b5cc930ce399f9668f62)) * add line about recommendation for sso command ([b63720a](https://github.com/unraid/api/commit/b63720a6f23443ee8e37e83e3ab7060d827976cd)) * add log rotation ([b1d9ad7](https://github.com/unraid/api/commit/b1d9ad7ef19d3c779abe86d8f4104bc3bfce7073)) * add logging around fixture downloads ([fa16dcd](https://github.com/unraid/api/commit/fa16dcd8014943387f23e06db56f9a5a8bc418c4)) * add logrotate cron again ([097415f](https://github.com/unraid/api/commit/097415f6b8dbbe5eb13645942554e673dafad8f4)) * add patch for auth-request.php ([b1a1779](https://github.com/unraid/api/commit/b1a1779a8b04313a6940caac709655dacc4774df)) * add user with cli ([cb59090](https://github.com/unraid/api/commit/cb59090698fa2e96c32e2c28fab4093953b9a1a2)) * address log level feedback ([bb95795](https://github.com/unraid/api/commit/bb95795a31b3b4c43c07fb34f7a15510f330997f)) * allow csrf passing through querystring ([3a8c9b1](https://github.com/unraid/api/commit/3a8c9b13eeea4406e0be0147fdc8f271d81816c6)) * allow deletion and creation of files with patches ([1392bde](https://github.com/unraid/api/commit/1392bdeecb7d0cf8572253e76b4dc9b0dbbfa90c)) * always ensureDirectory for keys exists ([8b93bce](https://github.com/unraid/api/commit/8b93bcea0830e3ae7187c9133b1c57b92600e5da)) * **api:** graphql sandbox on unraid servers ([#1047](https://github.com/unraid/api/issues/1047)) ([5dd36d1](https://github.com/unraid/api/commit/5dd36d18361b44d133b4976f536d8111537c72d3)) * **api:** omit tz from sys time date format by default ([c36082e](https://github.com/unraid/api/commit/c36082e82b09afefd3c5779cc363503db05963da)) * **api:** rm 2fa & t2fa from myservers config type ([#996](https://github.com/unraid/api/issues/996)) ([f45719f](https://github.com/unraid/api/commit/f45719fa6b76f0993330a209301434869f549d65)) * async disk mapping ([f22b262](https://github.com/unraid/api/commit/f22b262830418dbe1ad7003349ded8b2ef0952c1)) * async hypervisor and FIXED vm listing ([cdfb3c7](https://github.com/unraid/api/commit/cdfb3c772b8d4897a3bd59eb28d196c4653d4519)) * auto-docusaurus-prs ([#1127](https://github.com/unraid/api/issues/1127)) ([8a57576](https://github.com/unraid/api/commit/8a575765a946b9198109b549da6850545ef0a793)) * begin building plugin with node instead of bash ([#1120](https://github.com/unraid/api/issues/1120)) ([4f5c367](https://github.com/unraid/api/commit/4f5c367fdf094164a7b3022cdf9f9c1987b76485)) * better patch application ([445f3b5](https://github.com/unraid/api/commit/445f3b50b1647f025becb15f3d81687940ae2e31)) * better pm2 calls, log lines ([33dd90a](https://github.com/unraid/api/commit/33dd90af046716d4a277c97b11273f42d0620dab)) * cleanup config entries ([c2e29df](https://github.com/unraid/api/commit/c2e29dfb5f2c056aee7c01b5259780f5c47fd4ae)) * cleanup disclaimer and command to add users ([3867dfa](https://github.com/unraid/api/commit/3867dfacb214fdf9c0a050d1523ded620b14fd67)) * cli Commands ([7fa849d](https://github.com/unraid/api/commit/7fa849d2a083d2d33c5a128cf31ccfafcf8c986e)) * CLI options for adding and deleting users ([bc04129](https://github.com/unraid/api/commit/bc04129342f3b6363a54f107b49380a572d2f5ba)) * coderabbit suggestion ([3cc3f27](https://github.com/unraid/api/commit/3cc3f27dae23034b4a234284797e18b55bd4e84d)) * configure PM2 on startup ([b73623e](https://github.com/unraid/api/commit/b73623e72a223c57585059a2cc40c344035c974f)) * convert to pnpm monorepo ([#1137](https://github.com/unraid/api/issues/1137)) ([ad6b658](https://github.com/unraid/api/commit/ad6b6589dbe0465968205449643c81c1c9d4e613)) * create key cli command logic and add to index command list ([796cb09](https://github.com/unraid/api/commit/796cb09c61a9a54243527cc08d252b97258876cd)) * csv validation ([89d756e](https://github.com/unraid/api/commit/89d756ef4e8987a15a55e1ef5751a2b299613aa9)) * default value for option ([632775e](https://github.com/unraid/api/commit/632775e4355ac45f6204c2c26f21451a80eb4f8c)) * disable casbin logging ([aa1ef1b](https://github.com/unraid/api/commit/aa1ef1bd4ce929b5362e4019cf48c7604044a9e7)) * docstrings ([935318d](https://github.com/unraid/api/commit/935318dda6495a1b363bb73723c02ab0aa816797)) * dont pass entire server state for privacy ([b969f3a](https://github.com/unraid/api/commit/b969f3a9ab5421e1fc85241d5743224b48b099f0)) * download fixtures from the web ([05f661e](https://github.com/unraid/api/commit/05f661e0e5790095b80dd13c21fb6625094cde8b)) * enable sandbox in dev mode ([21208bf](https://github.com/unraid/api/commit/21208bfcf60af68cafdea13f8c4cf221ad658aa2)) * enable sandbox with developer command ([9c5e418](https://github.com/unraid/api/commit/9c5e4188729896f0bf1a5f33e597a59601dedeb5)) * enable token sign in with comma separated subs in myservers.config ([e9bd18a](https://github.com/unraid/api/commit/e9bd18a4091ee3408cae74fd11dceb1cd6b81e5b)) * exit cli after running command ([5ca225f](https://github.com/unraid/api/commit/5ca225fe7a07419e0677d73458587d95953eacb9)) * extensive file checking ([4d45caf](https://github.com/unraid/api/commit/4d45caf25869ba14192e0a0d47fbc064cfc8723e)) * fallback to local ([36d8399](https://github.com/unraid/api/commit/36d839904575b23a548d755bedcdd3282599a218)) * faster failure logic ([1f5c642](https://github.com/unraid/api/commit/1f5c6424c775ed9baa60812aa3b44e90392b3e5c)) * fix docusaurus build + update snapshot ([7a19c93](https://github.com/unraid/api/commit/7a19c9331f24a0b9e4127f35f664a42f6b66e6c7)) * force linting on build ([ad32cff](https://github.com/unraid/api/commit/ad32cffd75e98ef3b8e28406753fcb4eeb2ebc6c)) * generate key one time ([1435155](https://github.com/unraid/api/commit/143515560c69c06d8a78c40a5a3da4581cdf0d14)) * glob for files ([0652114](https://github.com/unraid/api/commit/065211413d67890013b8d27ac4cde51e72185316)) * hypervisor async imports ([f1e5383](https://github.com/unraid/api/commit/f1e53831c8518334af59848545e442339bb32609)) * ignore generated code ([0e9c91a](https://github.com/unraid/api/commit/0e9c91af86b2c72bb95be11834cb87e625da9389)) * improve packing ([3c61a61](https://github.com/unraid/api/commit/3c61a615f0c0a5c85f09a1d6cc653e5436c56788)) * initial patcher implementation using the diff tool ([805bc5b](https://github.com/unraid/api/commit/805bc5bfc0017d47873cc4c72dedbd34e9ba3e67)) * initial setup of permissions on keys ([#1068](https://github.com/unraid/api/issues/1068)) ([a554bde](https://github.com/unraid/api/commit/a554bde5c2253b32be540303a65728e319b66a8f)) * initial version of modification service ([bb37140](https://github.com/unraid/api/commit/bb37140d40034d3f3fceb2b387a329a053ad76af)) * inject after form ([e5d1146](https://github.com/unraid/api/commit/e5d1146613ed188593fd99a89ed83b2a1afe68f3)) * kill timeout extended ([0c6f44d](https://github.com/unraid/api/commit/0c6f44da3529cea84d7a0dc74af742de7c787bf9)) * log size and only tar files ([a6f6706](https://github.com/unraid/api/commit/a6f67060b47a7386f953a581047186c90f88096f)) * logrotate test ([5b0971e](https://github.com/unraid/api/commit/5b0971ea8d5ebe51674beb86326515b1d83e301f)) * manually install libvirt in build process to ensure it is included in the final build ([cea11da](https://github.com/unraid/api/commit/cea11daf153996ec17cf28c8db89b07d2708197c)) * more pm2 fixes ([4655d72](https://github.com/unraid/api/commit/4655d72fbbe09fda6282feda3b29fdc5fd5d9945)) * move fixtures into __test__ folder ([dfb006e](https://github.com/unraid/api/commit/dfb006e69678c0256772d7157f992866254b748d)) * myservers_fb keepalive location ([69441d8](https://github.com/unraid/api/commit/69441d890e74dea0ab8ab6bb8f1b813970706950)) * only write config when a specific config update action occurs ([29ca582](https://github.com/unraid/api/commit/29ca5829ffdc63df2a21c71d380c14647bcb1e03)) * properly read log level from environment ([8a374b5](https://github.com/unraid/api/commit/8a374b5b2772cbe4986d73246b886b2c33da9707)) * public index ([8cbb3c4](https://github.com/unraid/api/commit/8cbb3c47187069155196fbbbdbf507b615a1e125)) * remove sso if disabled on Unraid-API start ([daf904b](https://github.com/unraid/api/commit/daf904bc1b7abae6a2a3ae8c3c842f3f4043f43f)) * remove sso user command ([f302924](https://github.com/unraid/api/commit/f30292484d9f24c5e66ad10253cf7353668051d2)) * remove sso user options ([75d7e08](https://github.com/unraid/api/commit/75d7e08824408c87abc066372fb986875de358bd)) * remove unused config sections ([03e336b](https://github.com/unraid/api/commit/03e336b72f829cc65c39fe5a57fcc401a25ef9f4)) * remove unused fields ([2d3892d](https://github.com/unraid/api/commit/2d3892deb828a815b5d66ee46c2da5fb223d3a7f)) * remove unused vars ([6f9977e](https://github.com/unraid/api/commit/6f9977eea04f2f70b5ce583436bb0b8091309969)) * rename api key resource back to api_key ([8827483](https://github.com/unraid/api/commit/8827483699adc24054991a1090b19fa8f32fdeea)) * rename modification file ([5d909a8](https://github.com/unraid/api/commit/5d909a856b155d6dc5def9149780dbfdf42a224e)) * reorder index ([a4b3f8c](https://github.com/unraid/api/commit/a4b3f8c6c374d6c7a1c37086f3c7a218cfcf2fb8)) * restart the API when an SSO user is added ([dae5738](https://github.com/unraid/api/commit/dae57389c6917cc451a0c2d8864f21fb1f1e8bb1)) * restoring sso error ([3042ffa](https://github.com/unraid/api/commit/3042ffa37eff03cd8e2c6092a9decf53e874f3e7)) * revert local api key value ([6bfd8a2](https://github.com/unraid/api/commit/6bfd8a2687fc2c9dbcbd68f082df673296c0f0f7)) * rollback if patch exists before applying ([a12181a](https://github.com/unraid/api/commit/a12181a5e062c3235b2e1f4fefeca4ad2b3349f3)) * secondary changes ([cbb42dc](https://github.com/unraid/api/commit/cbb42dc85ebfb101147a86008bc0b46de9c379a7)) * service tests for modifier service ([d6fa35c](https://github.com/unraid/api/commit/d6fa35cdee34172f626e91eb437c5f0c4666733a)) * session issues ([8026ef5](https://github.com/unraid/api/commit/8026ef53e8d314f059522108c769ec0007a7a7bb)) * shared call to createPatch ([073a515](https://github.com/unraid/api/commit/073a51572aa2325251958ab6186d41b2bc31d7e3)) * simplify docs ([1e4a4f0](https://github.com/unraid/api/commit/1e4a4f07451afd347edc4358db2e4c1397976f27)) * style improvements ([a8211ce](https://github.com/unraid/api/commit/a8211cef7de29b5cf02f6faffab3434bbb5747c1)) * swap to async exit hook ([c7d4e39](https://github.com/unraid/api/commit/c7d4e39287c10609993d62bf62f5b2a4fca5b759)) * switch to nest-commander ([7ceac1b](https://github.com/unraid/api/commit/7ceac1b1841eb0fdcd38aea00e24bee88b0cc69e)) * try catch restart ([55100da](https://github.com/unraid/api/commit/55100daed4def9c4647800d072aa61cfc52c4049)) * **ui:** webgui-compatible web component library ([#1075](https://github.com/unraid/api/issues/1075)) ([61ee689](https://github.com/unraid/api/commit/61ee68965871d4eb6c883a9dff41af7d95c2ab19)) * unnecessary comment ([f560df0](https://github.com/unraid/api/commit/f560df0270d88f18e9f989fa76516fa61d227547)) * unraid single sign on with account app ([2b25537](https://github.com/unraid/api/commit/2b25537e26234d00ed615073af7f9a65ea3e91cf)) * update packageManager field for pnpm ([eec9785](https://github.com/unraid/api/commit/eec9785ba1c8533eb8e3e408b9ced07940abe27e)) * upgrade dependencies ([46c82ec](https://github.com/unraid/api/commit/46c82ecae3a6211b45e6de5581a2fa64d86740d7)) * use execa for start and stop ([05e77a4](https://github.com/unraid/api/commit/05e77a4bc6487413569b25449b63e66e7c00412e)) * use zod to parse config ([02c197f](https://github.com/unraid/api/commit/02c197f244b8fd686a66820ec21bda7a4bcc2a7e)) * validate token format in both PHP and CLI ([b9d9105](https://github.com/unraid/api/commit/b9d9105e3e279870db3dd32e631ca7510be980ca)) * **web:** add delete all notifications button to archive view in notifications sidebar ([89eb841](https://github.com/unraid/api/commit/89eb841b20e23a45150d82bc30ad214cbc5f0920)) * **web:** enhance notifications indicator in UPC ([#950](https://github.com/unraid/api/issues/950)) ([0b469f5](https://github.com/unraid/api/commit/0b469f5b3f121be0b945389ec385e54ea15f77eb)) * **web:** pull date format from display/date and time settings ([7c8e8a0](https://github.com/unraid/api/commit/7c8e8a0e53919bef16c81e6194186258b41dbd73)) * **web:** rm api-key validation from connect sign in ([#986](https://github.com/unraid/api/issues/986)) ([939383e](https://github.com/unraid/api/commit/939383e4ef81eb942e4c70586f0e9567ace8a0d1)) * zod config no longer any ([6faef27](https://github.com/unraid/api/commit/6faef27d7c18b32c81c8e77e7c6c170850628336)) ### Bug Fixes * allow concurrent testing with a shared patcher instance ([c007898](https://github.com/unraid/api/commit/c00789865c2ebc6fe64755c85aac58152d2a8d94)) * **api:** append time to formatted date when a custom date format is selected ([b9cd8c4](https://github.com/unraid/api/commit/b9cd8c426db8e3edbcf8fe5736c1bc86b6b626a1)) * **api:** change log output location for diagnostic compatibility ([#1130](https://github.com/unraid/api/issues/1130)) ([9bc8060](https://github.com/unraid/api/commit/9bc8060a83351aa81ae78c9a345bd2f9f0f4f65f)) * **api:** delay pm2 start until server has booted ([3c27b51](https://github.com/unraid/api/commit/3c27b51ab8b23cfdf66793f4a05225ef6f7f97fd)) * **api:** exclude duplicates from legacy script in archive retrieval ([9c38fa6](https://github.com/unraid/api/commit/9c38fa6a9c510305e3fe0c14afb1f257120c218e)) * **api:** improve defaults in PM2 service ([#1116](https://github.com/unraid/api/issues/1116)) ([a21f39d](https://github.com/unraid/api/commit/a21f39d6174e9ffbec31dc7e4f626a4860474d8a)) * **api:** logrotate modification & permissions ([#1145](https://github.com/unraid/api/issues/1145)) ([b970fd9](https://github.com/unraid/api/commit/b970fd9e6cf40e652934b6c0275b364dab734c47)) * **api:** make cookie recognition during websocket connection more ([2a82ea4](https://github.com/unraid/api/commit/2a82ea476560aae80ef01c0cf28b482dcd1f40cf)) * **api:** pm2 start script & limit auto restarts ([#1040](https://github.com/unraid/api/issues/1040)) ([b53bb3f](https://github.com/unraid/api/commit/b53bb3f1977afdb4243b3838d11cda38c4f4ca58)) * **api:** retry mothership connection up to 3x before logout ([#1069](https://github.com/unraid/api/issues/1069)) ([c163998](https://github.com/unraid/api/commit/c163998175553e6f309a87016fdb1723e4ee6d16)) * **api:** sanitize incoming user session id's ([3b2d61e](https://github.com/unraid/api/commit/3b2d61efc2829ecd5bdfd9f257d4c38fa8ab018b)) * **api:** slow init of unraid-api cli ([#1022](https://github.com/unraid/api/issues/1022)) ([f37dda1](https://github.com/unraid/api/commit/f37dda16c2845309332ef7811c0f272da0923334)) * **api:** update deploy-dev script to dist instead of src ([2327b00](https://github.com/unraid/api/commit/2327b00d300c3b1f29e0ceb1611b229343d41353)) * **api:** validate cookie session data ([fe98295](https://github.com/unraid/api/commit/fe98295496325029d5b877c2143637ffa1f92080)) * apply and rollback error handling ([76711be](https://github.com/unraid/api/commit/76711be3e8bd2e9c4880ec42f5e9988008b153f4)) * authorization type error ([#987](https://github.com/unraid/api/issues/987)) ([5f0446f](https://github.com/unraid/api/commit/5f0446fa7961465abe4dafd7aa7e5319a4974dae)) * back to default configs ([a1a046f](https://github.com/unraid/api/commit/a1a046f900d0eee29281044be53625e362a890ec)) * backup restore formatting ([0cfdd5a](https://github.com/unraid/api/commit/0cfdd5a61ba0de7a988a1dece343133f9aba126f)) * basic test fixed ([bddda82](https://github.com/unraid/api/commit/bddda823e1f9edc9aaefc431c18f5786f4b58d64)) * better js file handling ([bb92c3f](https://github.com/unraid/api/commit/bb92c3f9f81bf20cca2003a6fc26726db71ea142)) * better loader functionality and error handling ([a502134](https://github.com/unraid/api/commit/a502134c0aecc7fed38d464f2df409a6272e1e12)) * better logging when error ([972a19b](https://github.com/unraid/api/commit/972a19be0474ee43545b58a9422195c0a903a1be)) * cleaner logs for starting API ([eb1c62d](https://github.com/unraid/api/commit/eb1c62d3d9157fc1c17659aea399a1b37db6b431)) * clearer error messaging ([f8393ee](https://github.com/unraid/api/commit/f8393eeebe9fd1b18cbc2862456815edeb3921d6)) * code review feedback ([e7b689c](https://github.com/unraid/api/commit/e7b689c546fb5068e16cd27810d79a7565dab849)) * completion script registration ([e338eb9](https://github.com/unraid/api/commit/e338eb9788b1ba14a78b0a5e299a9efb9342fa36)) * connect key role ([eff6c32](https://github.com/unraid/api/commit/eff6c32ccd9bdd3a5941d99a3211595373b2490f)) * create api key for connect on startup ([69cd92f](https://github.com/unraid/api/commit/69cd92f974d6e2fa8cf190e536bfe8a4de669491)) * create api key permissions ([14fe30e](https://github.com/unraid/api/commit/14fe30e925db2c158b9d5b73b5a956b99f1c0e8d)) * create connect key ([d88b1e9](https://github.com/unraid/api/commit/d88b1e9660b33830be0c0397dd1566904e154d8f)) * cwd on ecosystem.config.json ([3fc4148](https://github.com/unraid/api/commit/3fc41480a2837310a725e8e23a4cc8c7e33b9d73)) * default overwrite false test ([62824ba](https://github.com/unraid/api/commit/62824ba76f011f8e5df828e8496cd6bfee0d06b5)) * delete .original files ([547ae18](https://github.com/unraid/api/commit/547ae180ddc79cd062268586ded06957091b1e01)) * deprecated version warning ([a892a3c](https://github.com/unraid/api/commit/a892a3ce35ca58795a4360eb1f96a6ad9dba8d84)) * **deps:** update all non-major dependencies ([#1158](https://github.com/unraid/api/issues/1158)) ([48df88f](https://github.com/unraid/api/commit/48df88f5c1c1bb72cbb06d0697d233532466127b)) * **deps:** update apollo graphql packages ([1f9e282](https://github.com/unraid/api/commit/1f9e2828809da3c9a3364241f4d8020f1d71c4a4)) * **deps:** update dependency @apollo/client to v3.12.6 ([91a9949](https://github.com/unraid/api/commit/91a9949a5cbca3e450e0cbf18074f40418f0f7ee)) * **deps:** update dependency @apollo/client to v3.12.9 ([5b14be6](https://github.com/unraid/api/commit/5b14be6b0f1e896bb721216c29deeade6eb4592a)) * **deps:** update dependency @graphql-tools/load-files to v7.0.1 ([5f597f9](https://github.com/unraid/api/commit/5f597f9d4cf2b17e18ceafee0d940fec08e74521)) * **deps:** update dependency @nestjs/schedule to v4.1.2 ([806bd63](https://github.com/unraid/api/commit/806bd633ac5d9ab9c992dedceb9ace09d9c9659d)) * **deps:** update dependency chokidar to v4.0.3 ([74b3e29](https://github.com/unraid/api/commit/74b3e29c744e95ae23ec19f6196f995953c790ea)) * **deps:** update dependency dockerode to v4 ([#830](https://github.com/unraid/api/issues/830)) ([c311a89](https://github.com/unraid/api/commit/c311a89aee450b033aa33795730217f8e53880fd)) * **deps:** update dependency dotenv to v16.4.7 ([b32f84b](https://github.com/unraid/api/commit/b32f84b105a7f801ea22e5105d1c8f2100ee4475)) * **deps:** update dependency execa to v9.5.2 ([6c54fa1](https://github.com/unraid/api/commit/6c54fa14b18cc37f444a771815d0e7e915edbc02)) * **deps:** update dependency express to v4.21.2 ([a947ff1](https://github.com/unraid/api/commit/a947ff14fa5a7b169061a328d2e566ef8f5eda03)) * **deps:** update dependency got to v14.4.5 ([71e2b70](https://github.com/unraid/api/commit/71e2b7067883d26ea76be0e838dd12aa88068e9d)) * **deps:** update dependency graphql-ws to v5.16.2 ([4daa54c](https://github.com/unraid/api/commit/4daa54cfb56fc1bad6ba4ee7fcc3228dd1e29497)) * **deps:** update dependency ini to v4.1.3 ([c817cc4](https://github.com/unraid/api/commit/c817cc4b7ebc1c0a7e559aa76041ba4ec07a552b)) * **deps:** update dependency node-window-polyfill to v1.0.4 ([61ec04c](https://github.com/unraid/api/commit/61ec04cb87053975bdf98c8af6a317b310829013)) * **deps:** update dependency openid-client to v6.1.7 ([7ef3729](https://github.com/unraid/api/commit/7ef37297692309634a1dd627b2b019f571d4f748)) * **deps:** update dependency p-retry to v6.2.1 ([46a368e](https://github.com/unraid/api/commit/46a368e1b5d7ca31aa5f8bd8a62ecc84c2d4eab8)) * **deps:** update dependency pm2 to v5.4.3 ([e366cad](https://github.com/unraid/api/commit/e366cad0a43ff60b390c9114abfadba35c801d21)) * **deps:** update dependency uuid to v11.0.5 ([0331e24](https://github.com/unraid/api/commit/0331e24a740eef0e1246bdc7d1501625a7a58b7e)) * **deps:** update graphql-tools monorepo ([344b023](https://github.com/unraid/api/commit/344b0235035ad0c5b55a3dc0ebacc749c492cd08)) * **deps:** update graphqlcodegenerator monorepo ([2bc9af2](https://github.com/unraid/api/commit/2bc9af25783aa969a4fa8d770ca9884e67631eef)) * **deps:** update graphqlcodegenerator monorepo ([8675653](https://github.com/unraid/api/commit/8675653e4e4900578fb5a1a1786dbc861a08aa85)) * **deps:** update nest monorepo to v10.4.15 ([2b597f9](https://github.com/unraid/api/commit/2b597f9f02959febe72b16b3719598774a001526)) * **deps:** update nest-graphql monorepo to v12.2.2 ([bd31e09](https://github.com/unraid/api/commit/bd31e09bcfd0a0f16a422527fa0c0a53f2f098ca)) * do not process.exit on restart or stop command ([e16763b](https://github.com/unraid/api/commit/e16763b49bb5a61f1a86f0531cfdb87cd5c7d927)) * don't check code for execa ([f62f0d3](https://github.com/unraid/api/commit/f62f0d3a0f3b5aa0c329062c872837d2670a3ba5)) * dont remove login file without a backup presetn ([1854aa9](https://github.com/unraid/api/commit/1854aa9f28e306aea4ddfad56db9dc29fb70464e)) * ensure directory exists before making connect key ([a6cd74d](https://github.com/unraid/api/commit/a6cd74dc5c93992f1636de2885d294c68788beda)) * excess spacing in api-key.service ([286ffc5](https://github.com/unraid/api/commit/286ffc54e55df40a1f639dd1d1f2ea7f58c6d820)) * extra log line ([b56b215](https://github.com/unraid/api/commit/b56b2157fa190393959c8ae79487ffb00c246703)) * extra spacing in config.ts ([84f4f67](https://github.com/unraid/api/commit/84f4f67ce146856582d96817d8209a0b0fefaec4)) * file modification service fixes ([e4ebfc8](https://github.com/unraid/api/commit/e4ebfc8a133cb55a8988f51490195c369f3631f6)) * find by key, not ID ([124fb61](https://github.com/unraid/api/commit/124fb610b18b025353b15982aea4ad5ec212a13e)) * fix libvirt bindings ([#1167](https://github.com/unraid/api/issues/1167)) ([024719f](https://github.com/unraid/api/commit/024719fa7a24c5b9f46936cce037b89a1dd50b62)) * forced restarting on commands ([abd8e09](https://github.com/unraid/api/commit/abd8e099087124933aed0179802fb0c1105f1759)) * format authrequest mod as other files ([8b75d6c](https://github.com/unraid/api/commit/8b75d6cc991996f2d7ad34cf6ac93367020c2c62)) * initial feedback about report addressed ([060a199](https://github.com/unraid/api/commit/060a1992c440c907e58e39eccd0b88934067f46b)) * install as-integrations/fastify ([2fce2e9](https://github.com/unraid/api/commit/2fce2e9a28fc633d4e452399673b1a35e785ba8f)) * length ([8481c9a](https://github.com/unraid/api/commit/8481c9a9fbff52de08fcbd941360ab20febab159)) * lint ([133c8e0](https://github.com/unraid/api/commit/133c8e0d704a6f2cc6e57e7b1c06221d09ad6c8b)) * lint ([42610d2](https://github.com/unraid/api/commit/42610d290d457c56f84b479181698240f8a11e0f)) * lint ([b1a993a](https://github.com/unraid/api/commit/b1a993a8e93d642b9ba6e6a9341f20565d78e862)) * lint ([6beafbe](https://github.com/unraid/api/commit/6beafbe8eda2b65c2abd70d526e17594b66a547c)) * lint ([d38f3ef](https://github.com/unraid/api/commit/d38f3ef49b9cd2044ce7e700f42f7b0a0d3a2e7a)) * logrotate error ([7a009b6](https://github.com/unraid/api/commit/7a009b6be745f137cda6e4f08c159a090273ad0f)) * mock ensureDirSync ([14abc13](https://github.com/unraid/api/commit/14abc13cc83009a7077cb827921903da14ca0ff3)) * more generic test ([ddfc36f](https://github.com/unraid/api/commit/ddfc36fd73bab8982531dd1665e12f37938d4291)) * only instantiate service one time ([b1b93e2](https://github.com/unraid/api/commit/b1b93e278396a9f28f4ee3911f90bceb8ed39acb)) * only toast unread notifications, not archived ones ([8251c6f](https://github.com/unraid/api/commit/8251c6f2d3154fe6f17ac2b476a6162ed348ec1c)) * padding and glob function issues ([ae753d6](https://github.com/unraid/api/commit/ae753d6bea9402677ecb138a170a2ad39da3e52c)) * patch-utils unused ([1d5c2c8](https://github.com/unraid/api/commit/1d5c2c83389d24494a8fbe4bb8c718d8f67af878)) * paths now correct, better download logic ([9e12407](https://github.com/unraid/api/commit/9e12407565c1e8661d40435d689901620c0fa63e)) * properly log error with template string ([2ad612c](https://github.com/unraid/api/commit/2ad612cef86f02cf4f09c95b34ba75963004c1f1)) * pull token from query not params ([1756cc5](https://github.com/unraid/api/commit/1756cc5b4bb14b5b9354d1f651cd59fed4d680b6)) * remove devDependencies from output package json ([d847815](https://github.com/unraid/api/commit/d8478152e913fab2974a18eed69c4eb01f7fde27)) * remove isNaN in favor of number.isNaN ([e33c758](https://github.com/unraid/api/commit/e33c7583f7eada8daa87c6f8b9667fffc857aa76)) * remove memory key generation ([e58410b](https://github.com/unraid/api/commit/e58410bd57b4ef5162bb51ddcb618e6f89a33d2b)) * remove uneeded env variable ([c8da8fe](https://github.com/unraid/api/commit/c8da8fe31464ec476a3f857611afcd958f5db3bb)) * remove unused constructor ([ce92cb0](https://github.com/unraid/api/commit/ce92cb06b71b3e72a9d31bb7b36029371b2dd344)) * remove usage of Role.UPC ([ceac626](https://github.com/unraid/api/commit/ceac6269b39d916715e4240099f0960c6e56e469)) * report issues + pm2 issues ([4b3d6a7](https://github.com/unraid/api/commit/4b3d6a7ba3075b6d760ef4bac95b44ffbd6e9c39)) * reset config to be closer to default ([d844903](https://github.com/unraid/api/commit/d844903d7860657b6d3089cf9c89b18c18a6747e)) * resource busy when removing all subdirectories ([7b3834c](https://github.com/unraid/api/commit/7b3834ca1f0a51dce552796178f131d6d13b7e66)) * restart command elegant ([b924954](https://github.com/unraid/api/commit/b9249544fc6d3b0bcbeea467ac9a7e1280a5c93f)) * revert dockerode upgrade ([#1140](https://github.com/unraid/api/issues/1140)) ([2b163b3](https://github.com/unraid/api/commit/2b163b361a1bcdae36b67798e4b4c7856eba2cac)) * revert myservers.cfg ([7e5dd07](https://github.com/unraid/api/commit/7e5dd07d4aa0f95526766bf1dd15a9ba6fde9956)) * sandbox defaults in dev mode wrong ([d26ddef](https://github.com/unraid/api/commit/d26ddef33e2b2999ec5eed8eb7827e8fea8da100)) * sequential test execution for generic-modification ([9d1442b](https://github.com/unraid/api/commit/9d1442b2ee36441930967f77009e765205226fcf)) * shell path to unraid-api ([44d3d93](https://github.com/unraid/api/commit/44d3d939a7be06dc5228b23529c18119290e882f)) * simplify api setup index ([5f29e6d](https://github.com/unraid/api/commit/5f29e6d5e76136c23e708d4a3604425ad4f90138)) * simplify upcoming features ([608151d](https://github.com/unraid/api/commit/608151d84c55f1bdc07c05334cfffaf35cd5b74e)) * staging build issues ([63fcde8](https://github.com/unraid/api/commit/63fcde82433756205af0e2d22018d157c7950320)) * start command simplification ([27049d9](https://github.com/unraid/api/commit/27049d9d91b77b714963f8c14d746571728d5755)) * stop command exits ([58f65ea](https://github.com/unraid/api/commit/58f65eabbae24d485b8fb5de7e4b72c06edb3e8c)) * swap to placeholder key ([39612cd](https://github.com/unraid/api/commit/39612cd9789a79107412a37c7cac4e4c14aa102a)) * test issues ([4d8f2dd](https://github.com/unraid/api/commit/4d8f2ddac69acb04ce6f6f2779dbce0edfdc0311)) * test simplification to ensure no redownloads ([5347d54](https://github.com/unraid/api/commit/5347d54b119c0423a83ba7abfba497b292348acc)) * tests ([ed18945](https://github.com/unraid/api/commit/ed1894508887bbd34b0dabf58dbac652a58b5361)) * tests and validate token clears screen ([6c46f94](https://github.com/unraid/api/commit/6c46f9413f6042fa9d65007ced0dc570bc1aab60)) * type for generic test ([0163acb](https://github.com/unraid/api/commit/0163acb7f3f6acea200ff128e6a824a1b5ca9c78)) * unit test issues ([74b9fd0](https://github.com/unraid/api/commit/74b9fd015982b446d17adf6a38c28262f28db412)) * unit tests updated ([0ab40fe](https://github.com/unraid/api/commit/0ab40fefdaaa2463c11bfa0e15d8525276bfc0fa)) * unneeded await on api-key service ([923e929](https://github.com/unraid/api/commit/923e92987884470bbd0c651e521f761e7acd0e90)) * unused imports ([0cb0fc9](https://github.com/unraid/api/commit/0cb0fc98813d87d167d20508ef7a370ca4e866bf)) * update tests ([b1ac0f9](https://github.com/unraid/api/commit/b1ac0f9c83f21ba64e52d0ae22de3ca065bf256c)) * use an enum and defaults for sandbox value ([2108ed0](https://github.com/unraid/api/commit/2108ed0ecd6a1b8361a33c86f3ed9ca7fb37f14f)) * use batchProcess ([3c357e7](https://github.com/unraid/api/commit/3c357e7e957f550b22eabfb2d27741d84183ebc5)) * use cwd when running application ([e27776d](https://github.com/unraid/api/commit/e27776df3d9fc0e750f0548a92e64f26d7cd4f00)) * use placeholder in test API key ([5d72b5a](https://github.com/unraid/api/commit/5d72b5a9705f948fa8cd571c88dec408cd1a7270)) * watch all events to load keys ([ff63535](https://github.com/unraid/api/commit/ff63535b00c27448a9ba57956abcb4f2e2a2d941)) * **web:** name of toaster component ([93980f9](https://github.com/unraid/api/commit/93980f929dab66f6eb032173ca65dca857b2eaf5)) ### Miscellaneous Chores * release 4.1.2 ([2323ee6](https://github.com/unraid/api/commit/2323ee6838d9459e97bb137b010d87aae52d5d86)) </details> <details><summary>4.1.2</summary> ## 4.1.2 (2025-02-20) ### Features * add csrf support to api & web components ([#999](https://github.com/unraid/api/issues/999)) ([f0f5a30](https://github.com/unraid/api/commit/f0f5a3057af1862655eaa3ff2a3182ad671b7b37)) * allow csrf passing through querystring ([3a8c9b1](https://github.com/unraid/api/commit/3a8c9b13eeea4406e0be0147fdc8f271d81816c6)) * automatic session setup for dev ([e885936](https://github.com/unraid/api/commit/e88593620bfe39caef43c1ab19be2b7b674874bc)) * back to callbackUrl ([428ad15](https://github.com/unraid/api/commit/428ad15ec71a6134dee39a4ba4ab671a22ab023d)) * begin fixing dark mode in the webcomponents ([2443561](https://github.com/unraid/api/commit/24435613f8a8e2fa765f378839714e15776e9a75)) * begin nuking alpha beta gamma ([cb91fbb](https://github.com/unraid/api/commit/cb91fbb054c58af4fdb8d26a397348cc87d88563)) * convert to pnpm monorepo ([#1137](https://github.com/unraid/api/issues/1137)) ([ad6b658](https://github.com/unraid/api/commit/ad6b6589dbe0465968205449643c81c1c9d4e613)) * delete unused imports ([0d6a003](https://github.com/unraid/api/commit/0d6a0035aadfe3bed3ccff53b8917061e0b4ffc5)) * disable button on submit ([0da77d7](https://github.com/unraid/api/commit/0da77d7119abfb7db9b73d84db5008b7f982af5d)) * dont pass entire server state for privacy ([b969f3a](https://github.com/unraid/api/commit/b969f3a9ab5421e1fc85241d5743224b48b099f0)) * eliminate all alpha beta gamma variable usage ([4eda099](https://github.com/unraid/api/commit/4eda0991d635281622e676e35f155e5fbab4129f)) * error state outside of button ([a1cf441](https://github.com/unraid/api/commit/a1cf44162a8c2c2907b171e70af3b06ba5369648)) * hide sign in from the dropdown text ([ea6ae83](https://github.com/unraid/api/commit/ea6ae8391958b8bc2bdce8d1a4f2f90bfd206c18)) * lots of progress on colors ([c6547a5](https://github.com/unraid/api/commit/c6547a51fc41eca00f8593ffe06f6ed242e06ecb)) * move ssoenabled to a boolean flag rather than ids ([6f5edb2](https://github.com/unraid/api/commit/6f5edb240687a7511522bcd4a9a0dd09f2cb6f47)) * move variable declarations to theme.ts ([00b8ffe](https://github.com/unraid/api/commit/00b8ffe87ddd5c45029d9523d7117ee5361140c6)) * nuxt config simplification and formatting ([2903542](https://github.com/unraid/api/commit/29035429bd8591bba6702b166d579cbd42f8d645)) * or button on sign in page ([11ff890](https://github.com/unraid/api/commit/11ff890bcc350907b7cf5effb63c662327c41aed)) * remove apiKey from server ([895d585](https://github.com/unraid/api/commit/895d5857f91ee440db799577118ff4992c9a1991)) * remove sso if disabled on Unraid-API start ([daf904b](https://github.com/unraid/api/commit/daf904bc1b7abae6a2a3ae8c3c842f3f4043f43f)) * responsive notifications ([cead975](https://github.com/unraid/api/commit/cead97560c71afdccaef0e7f1ebc52bab04166a1)) * set background color on webcomponents ([7ef3286](https://github.com/unraid/api/commit/7ef328619139e99d25d0bf116be55aea80041bf2)) * sidebar notification count ([a4e2a77](https://github.com/unraid/api/commit/a4e2a77410012a4572495681eda85120255c15e5)) * sso button token exchange ([3abf20b](https://github.com/unraid/api/commit/3abf20b347c4011805a3376d0be61f89725ea22c)) * sso testing page and form disable on submit ([09f7415](https://github.com/unraid/api/commit/09f741557bf4faa5ee60ffa388b8082e4815e713)) * state using crypto ([3734730](https://github.com/unraid/api/commit/3734730bf75c9684173322658d367a715e6a9967)) * style improvements ([a8211ce](https://github.com/unraid/api/commit/a8211cef7de29b5cf02f6faffab3434bbb5747c1)) * **ui:** webgui-compatible web component library ([#1075](https://github.com/unraid/api/issues/1075)) ([61ee689](https://github.com/unraid/api/commit/61ee68965871d4eb6c883a9dff41af7d95c2ab19)) * unraid single sign on with account app ([2b25537](https://github.com/unraid/api/commit/2b25537e26234d00ed615073af7f9a65ea3e91cf)) * unraid ui component library ([#976](https://github.com/unraid/api/issues/976)) ([91de6e6](https://github.com/unraid/api/commit/91de6e6c1e05430378381fa5b9435c6f355b9b79)) * update based on review feedback ([16f00a0](https://github.com/unraid/api/commit/16f00a0d8c5936e41c08f9b6103c48dc3a0adb26)) * update packageManager field for pnpm ([eec9785](https://github.com/unraid/api/commit/eec9785ba1c8533eb8e3e408b9ced07940abe27e)) * use state passing to validate requests ([bd58490](https://github.com/unraid/api/commit/bd584902e0ea0cfd5ba9b85369252bbe4783db99)) * use text-secondary-foreground instead of gray ([7828ef2](https://github.com/unraid/api/commit/7828ef2648cfc8f510509c1679c75f5e662f69cf)) * viewport watch refactor ([9d2405b](https://github.com/unraid/api/commit/9d2405bd2124e4265f5449f4e4bc7f1ed6f5b75a)) * warning on missing fields ([c1fe95f](https://github.com/unraid/api/commit/c1fe95fcb60d2a8ec1b2bb6b39349c7496384c6c)) * **web:** activation modal steps, updated copy ([#1079](https://github.com/unraid/api/issues/1079)) ([d8a5b17](https://github.com/unraid/api/commit/d8a5b1711a8f826f602a504f125c157afb27af90)) * **web:** add an 'all' option to notification filter ([939d7a3](https://github.com/unraid/api/commit/939d7a304da30f65efbbbfbac2419f64eeddd665)) * **web:** add confirmation before archiving or deleting all notifications ([4c663dc](https://github.com/unraid/api/commit/4c663dc69c4f67fea982a121ee387733f2759a62)) * **web:** add count labels to notification tabs ([78ec466](https://github.com/unraid/api/commit/78ec4663ccd5cf5e1432c728a6ad91e150702c16)) * **web:** add delete all notifications button to archive view in notifications sidebar ([89eb841](https://github.com/unraid/api/commit/89eb841b20e23a45150d82bc30ad214cbc5f0920)) * **web:** add link to settings in notification sidebar ([7296195](https://github.com/unraid/api/commit/72961954952f069066c8f865e95e4fbb29126b21)) * **web:** add loading and error states to notification sidebar ([060fb91](https://github.com/unraid/api/commit/060fb915469653f5695c78dcfe88c9333fa624e5)) * **web:** clear notifications indicator after opening sidebar ([be7135e](https://github.com/unraid/api/commit/be7135efdda864955476d99795fe34c305407878)) * **web:** enhance notifications indicator in UPC ([#950](https://github.com/unraid/api/issues/950)) ([0b469f5](https://github.com/unraid/api/commit/0b469f5b3f121be0b945389ec385e54ea15f77eb)) * **web:** improve notification count syncing ([#1148](https://github.com/unraid/api/issues/1148)) ([7588e0e](https://github.com/unraid/api/commit/7588e0e3cf8f97c70fe5e0f6fd6aad8a103a9126)) * **web:** move notification indicator icons to top-right of bell icon ([99704a9](https://github.com/unraid/api/commit/99704a9dbb67d0893ab10ee42f88d590aae217b1)) * **web:** open official release notes via header os version ([7dcf947](https://github.com/unraid/api/commit/7dcf9475270c138b5bf243c68b51df37cc4ecd21)) * **web:** pull date format from display/date and time settings ([7c8e8a0](https://github.com/unraid/api/commit/7c8e8a0e53919bef16c81e6194186258b41dbd73)) * **web:** remove notification indicator pulse ([bc4708f](https://github.com/unraid/api/commit/bc4708f4052a8a4c4b247b979bc418046f88b47b)) * **web:** support markdown in notification messages ([abcaa5a](https://github.com/unraid/api/commit/abcaa5aedb440021b7affd403c5a432bbb649687)) * **web:** use Markdown helper class to interact with markdown ([2f4ff21](https://github.com/unraid/api/commit/2f4ff21986c1467ad839014569de47502a9947bd)) ### Bug Fixes * 12 hour timestamp logic corrected ([6cbb9c0](https://github.com/unraid/api/commit/6cbb9c07e4c81c146b10d5f1b6c96aa3ef65d448)) * **api:** make cookie recognition during websocket connection more ([2a82ea4](https://github.com/unraid/api/commit/2a82ea476560aae80ef01c0cf28b482dcd1f40cf)) * authorization type error ([#987](https://github.com/unraid/api/issues/987)) ([5f0446f](https://github.com/unraid/api/commit/5f0446fa7961465abe4dafd7aa7e5319a4974dae)) * check width before changing viewport ([e2a1f27](https://github.com/unraid/api/commit/e2a1f27b222deda1346fb4d351cb1497bf18a32a)) * connect breaks default css of header ([#1155](https://github.com/unraid/api/issues/1155)) ([fb24723](https://github.com/unraid/api/commit/fb2472399a822a20852841cb5e44d312d2221d17)) * dark theme as array ([77558a5](https://github.com/unraid/api/commit/77558a5cd9c99163b3c422e65c9c1a8e68eb5b0c)) * **deps:** update all non-major dependencies ([#1158](https://github.com/unraid/api/issues/1158)) ([48df88f](https://github.com/unraid/api/commit/48df88f5c1c1bb72cbb06d0697d233532466127b)) * **deps:** update apollo graphql packages ([1f9e282](https://github.com/unraid/api/commit/1f9e2828809da3c9a3364241f4d8020f1d71c4a4)) * **deps:** update dependency @apollo/client to v3.12.6 ([c0d3cf5](https://github.com/unraid/api/commit/c0d3cf578273e0180e5040497600e5c6b2979dc3)) * **deps:** update dependency @apollo/client to v3.12.6 ([91a9949](https://github.com/unraid/api/commit/91a9949a5cbca3e450e0cbf18074f40418f0f7ee)) * **deps:** update dependency @apollo/client to v3.12.9 ([5b14be6](https://github.com/unraid/api/commit/5b14be6b0f1e896bb721216c29deeade6eb4592a)) * **deps:** update dependency @floating-ui/dom to v1.6.13 ([64d3765](https://github.com/unraid/api/commit/64d3765a9a439c12d2fe921e4f2a28d4aa0df53a)) * **deps:** update dependency @floating-ui/dom to v1.6.13 ([5dc1375](https://github.com/unraid/api/commit/5dc13755df574b5201b89c9f45ccd853277adbef)) * **deps:** update dependency @floating-ui/vue to v1.1.6 ([6cb28d5](https://github.com/unraid/api/commit/6cb28d5f8fd8d800386d2a64c775758a1ef42962)) * **deps:** update dependency @floating-ui/vue to v1.1.6 ([e5e1c43](https://github.com/unraid/api/commit/e5e1c43bb37a2fdce3a351c67c15c7e08df9a1b0)) * **deps:** update dependency focus-trap to v7.6.4 ([8475204](https://github.com/unraid/api/commit/84752043e50c28551dd3981ab997f3ae5f42161a)) * **deps:** update dependency focus-trap to v7.6.4 ([5dfd6d5](https://github.com/unraid/api/commit/5dfd6d5deddc9dcfb2f41adaf086bea2b12569ac)) * **deps:** update dependency graphql-ws to v5.16.2 ([c112f19](https://github.com/unraid/api/commit/c112f19c9528b3313ef84973761c117fb42fb369)) * **deps:** update dependency graphql-ws to v5.16.2 ([4daa54c](https://github.com/unraid/api/commit/4daa54cfb56fc1bad6ba4ee7fcc3228dd1e29497)) * **deps:** update dependency radix-vue to v1.9.12 ([83344e0](https://github.com/unraid/api/commit/83344e05c1cf34a74889479de1f72ab66abd7cc2)) * **deps:** update dependency radix-vue to v1.9.13 ([c180728](https://github.com/unraid/api/commit/c1807286967b2824c67da4f9cbe762fe3c172ccf)) * **deps:** update graphqlcodegenerator monorepo ([2bc9af2](https://github.com/unraid/api/commit/2bc9af25783aa969a4fa8d770ca9884e67631eef)) * dev mode ([aae38e3](https://github.com/unraid/api/commit/aae38e34041b4eef27f512a57bd5c42ea69ff64e)) * downgrade marked to fix changelog preview issue ([943c907](https://github.com/unraid/api/commit/943c907d03032c9db0d093f728a5e0094aa2997d)) * edit settings padding issue ([4e9ab64](https://github.com/unraid/api/commit/4e9ab645e63b2ca84ee9166dd0b3f756c6873b63)) * empty manifest and version alignment ([b07828d](https://github.com/unraid/api/commit/b07828d6554240acec180b993df3a75407126c6a)) * further resolve sso sub ids issues ([b3551a1](https://github.com/unraid/api/commit/b3551a1b69bb76613c15cf40b366161090f061fa)) * improve typing and format lookup ([dfa27e2](https://github.com/unraid/api/commit/dfa27e2c0ddbc0d552567d09871baffd18e43b23)) * integration of `unraid-ui` tailwind config in `web` ([#1074](https://github.com/unraid/api/issues/1074)) ([3acc0dc](https://github.com/unraid/api/commit/3acc0dc9c0462fbc687169b523f97fcee80cdb4b)) * lowercase or ([29a8689](https://github.com/unraid/api/commit/29a8689ad8628a22d86e19e6c17d58c695f0e232)) * marked single input ([d28fb24](https://github.com/unraid/api/commit/d28fb24d6897bb4e4c890a4ce0257636072be235)) * missing server type ([76cf6f3](https://github.com/unraid/api/commit/76cf6f35dc5192995293346d8420aefe60736ad0)) * more color work ([9a869a4](https://github.com/unraid/api/commit/9a869a49e39ec95169ff2d979263898d98a34cc5)) * oauth2 api prefix ([56cfa84](https://github.com/unraid/api/commit/56cfa847940ff356d206cd10098922ddcc36c57b)) * only toast unread notifications, not archived ones ([8251c6f](https://github.com/unraid/api/commit/8251c6f2d3154fe6f17ac2b476a6162ed348ec1c)) * padding and glob function issues ([ae753d6](https://github.com/unraid/api/commit/ae753d6bea9402677ecb138a170a2ad39da3e52c)) * pass token to password field ([9279931](https://github.com/unraid/api/commit/92799312c9eabcf4ee3f99f850b7f3e76ecb5bff)) * re-add type-check ([0fa41f5](https://github.com/unraid/api/commit/0fa41f569017f18deef18841c0a64ccadddc1760)) * recreate package-lock to fix issues ([e1515a1](https://github.com/unraid/api/commit/e1515a118a393ba2b9bc23d5071ba8cb980511d4)) * remove console log ([d8f9f03](https://github.com/unraid/api/commit/d8f9f03146556d64beabd3abbafdb778b17b3d15)) * remove extra space ([000692c](https://github.com/unraid/api/commit/000692ca50403fec335cc04dab16aac5507bb5de)) * remove line from or in button ([961bcc5](https://github.com/unraid/api/commit/961bcc5db68e18db8141269ecd242d5114de4217)) * remove unused date-fns ([0c1b89f](https://github.com/unraid/api/commit/0c1b89ff41bc18817c2dac32c0726e2a399e7768)) * remove unused login entries ([942b143](https://github.com/unraid/api/commit/942b143fba4cde6bef65ecccc23d82bc81564fa9)) * render function fixed ([833a99f](https://github.com/unraid/api/commit/833a99fe18eb8eccb446f9f46818fac13a6d59cf)) * revert changes to indicator.vue ([11ce9e2](https://github.com/unraid/api/commit/11ce9e26449e4b3448ccf94d6f90ae17631350e4)) * switch to useToggle ([5f8602b](https://github.com/unraid/api/commit/5f8602b864a07542f90358d2d8d249c983a09c29)) * theme store now uses singular variables object ([116efe6](https://github.com/unraid/api/commit/116efe6f720cdeb7006643f5da387f7bbddce3a2)) * thorw on invalid token body ([1e6fb7e](https://github.com/unraid/api/commit/1e6fb7e3e3cae58a5337c39c0878a49f7eefb650)) * type error on element render ([45327ce](https://github.com/unraid/api/commit/45327ce01d4c0bb35140d1e027f94d00ce1f86e5)) * upc header text color ([d23a389](https://github.com/unraid/api/commit/d23a38960bb68a4ff445c23d2e173d494371fabd)) * use foreground text color for UPC ([d5f5921](https://github.com/unraid/api/commit/d5f592153476ff81df6d93128c62f0de59f7e64f)) * **web:** broken modals ([19208e5](https://github.com/unraid/api/commit/19208e5fabc91ade802e2dd2ef4d36e4a157af81)) * **web:** display error message in sidebar when api is offline ([#984](https://github.com/unraid/api/issues/984)) ([4a29fc9](https://github.com/unraid/api/commit/4a29fc9dda891c9b41f419637cd9f22bce74f2ef)) * **web:** edge case where archived notifications don't appear ([e40a9eb](https://github.com/unraid/api/commit/e40a9ebecd8828f1d747447451f625eb756bfbd9)) * **web:** env var typo ([dffbfc2](https://github.com/unraid/api/commit/dffbfc2dab3a845015e8a0e3231d6d58303a5152)) * **web:** escaping html-encoded symbols like apostrophes in translations ([#1002](https://github.com/unraid/api/issues/1002)) ([4ee42a6](https://github.com/unraid/api/commit/4ee42a6cf6a6e99bcccb2be336fa7c7fa69ec40e)) * **web:** flash of disconnected api state on page load ([d0819b8](https://github.com/unraid/api/commit/d0819b8d02cb943316d682f092b8857ca1b980c8)) * **web:** infinite scroll loop when there's only 1 page of notifications ([eeb3289](https://github.com/unraid/api/commit/eeb3289ae8958d834cb4cf246f8190e30d8d2b96)) * **web:** infinite trigger at bottom of infinite scroll ([001be86](https://github.com/unraid/api/commit/001be861813a6c617c08f4be9dece701cefd0ae6)) * **web:** notification styles & alignment ([#968](https://github.com/unraid/api/issues/968)) ([547b75a](https://github.com/unraid/api/commit/547b75a55eceb1b05f3c9b3c3630a5c6a081bad1)) * **web:** refetch notifications for sidebar when new notifications arrive ([23b1f1a](https://github.com/unraid/api/commit/23b1f1ac73f41bf7b2569ccc95982ca162ef27c4)) * **web:** remove warn and error console log removal ([#1086](https://github.com/unraid/api/issues/1086)) ([e7d15ee](https://github.com/unraid/api/commit/e7d15ee5ec8d7e6d33cda840a8244ca7e2b4cf5e)) * **web:** replaces dompurify with isomorphic-dompurify to enable server-side usage with same syntax ([2724485](https://github.com/unraid/api/commit/272448598993d52e8ce4e282e1f778c67f54d769)) * **web:** reset infinite scroll when notification filters change ([3fe13d5](https://github.com/unraid/api/commit/3fe13d523545dbcf0dfcf6e2430291b99d82b00e)) * **web:** sanitize changelog markup after parsing ([83e00c6](https://github.com/unraid/api/commit/83e00c640a89b95c2db9095315daedbad57dd639)) * **web:** stop opening notification sidebar to archive tab ([ecfc797](https://github.com/unraid/api/commit/ecfc797e7d576b51b65c980f9285878872376478)) * **web:** theme header differences ([#1085](https://github.com/unraid/api/issues/1085)) ([1ecac5e](https://github.com/unraid/api/commit/1ecac5ee4e0a656bbc7c04280c6abdcf514a2c87)) * **web:** track 'notification seen' state across tabs & page loads ([#1121](https://github.com/unraid/api/issues/1121)) ([321703e](https://github.com/unraid/api/commit/321703e907356a8a2f2665464773d856decdbcd7)) * **web:** update unread total immediately upon archiving ([#982](https://github.com/unraid/api/issues/982)) ([29d9371](https://github.com/unraid/api/commit/29d9371cc3048d502d5bbb4da3d33de3703efcc1)) ### Miscellaneous Chores * release 4.1.2 ([2323ee6](https://github.com/unraid/api/commit/2323ee6838d9459e97bb137b010d87aae52d5d86)) </details> <details><summary>4.1.2</summary> ## 4.1.2 (2025-02-20) ### Features * add unraid-ui documentation ([#1142](https://github.com/unraid/api/issues/1142)) ([6378047](https://github.com/unraid/api/commit/6378047bc4e12642ec7188f7387562f82731d05e)) * attempt to resolve performance issues with rm earlier in build … ([#1152](https://github.com/unraid/api/issues/1152)) ([c74bdd8](https://github.com/unraid/api/commit/c74bdd8890a05e155d170d79d09f3b13b5e63a58)) * convert to pnpm monorepo ([#1137](https://github.com/unraid/api/issues/1137)) ([ad6b658](https://github.com/unraid/api/commit/ad6b6589dbe0465968205449643c81c1c9d4e613)) * style improvements ([a8211ce](https://github.com/unraid/api/commit/a8211cef7de29b5cf02f6faffab3434bbb5747c1)) * **ui:** webgui-compatible web component library ([#1075](https://github.com/unraid/api/issues/1075)) ([61ee689](https://github.com/unraid/api/commit/61ee68965871d4eb6c883a9dff41af7d95c2ab19)) * unraid ui component library ([#976](https://github.com/unraid/api/issues/976)) ([91de6e6](https://github.com/unraid/api/commit/91de6e6c1e05430378381fa5b9435c6f355b9b79)) * update packageManager field for pnpm ([eec9785](https://github.com/unraid/api/commit/eec9785ba1c8533eb8e3e408b9ced07940abe27e)) ### Bug Fixes * **deps:** update all non-major dependencies ([#1158](https://github.com/unraid/api/issues/1158)) ([48df88f](https://github.com/unraid/api/commit/48df88f5c1c1bb72cbb06d0697d233532466127b)) * **deps:** update dependency radix-vue to v1.9.12 ([83344e0](https://github.com/unraid/api/commit/83344e05c1cf34a74889479de1f72ab66abd7cc2)) * **deps:** update dependency radix-vue to v1.9.13 ([c180728](https://github.com/unraid/api/commit/c1807286967b2824c67da4f9cbe762fe3c172ccf)) * empty manifest and version alignment ([b07828d](https://github.com/unraid/api/commit/b07828d6554240acec180b993df3a75407126c6a)) * integration of `unraid-ui` tailwind config in `web` ([#1074](https://github.com/unraid/api/issues/1074)) ([3acc0dc](https://github.com/unraid/api/commit/3acc0dc9c0462fbc687169b523f97fcee80cdb4b)) * storybook resolution issue ([#1153](https://github.com/unraid/api/issues/1153)) ([5a3e8df](https://github.com/unraid/api/commit/5a3e8df003a5005acc39442160e263f86793ce88)) ### Miscellaneous Chores * release 4.1.2 ([2323ee6](https://github.com/unraid/api/commit/2323ee6838d9459e97bb137b010d87aae52d5d86)) </details> <details><summary>4.1.2</summary> ## 4.1.2 (2025-02-20) ### Features * add validation step to ensure that variables are set ([ddb8772](https://github.com/unraid/api/commit/ddb8772692a2638f041c2a490762683d1079c40b)) * always start the API and run npm link from script path ([bb6baf9](https://github.com/unraid/api/commit/bb6baf9bf4ecf94f394b9131c40dff6dade85a78)) * **api:** rm 2fa & t2fa from myservers config type ([#996](https://github.com/unraid/api/issues/996)) ([f45719f](https://github.com/unraid/api/commit/f45719fa6b76f0993330a209301434869f549d65)) * array iteration for restoring files ([349145b](https://github.com/unraid/api/commit/349145ba53ca4e5f4301400b539f896267a38142)) * attempt to resolve performance issues with rm earlier in build … ([#1152](https://github.com/unraid/api/issues/1152)) ([c74bdd8](https://github.com/unraid/api/commit/c74bdd8890a05e155d170d79d09f3b13b5e63a58)) * attempt to start unraid-api with background task ([73a1249](https://github.com/unraid/api/commit/73a12496d5b2ad834a95e701e932de73815892d7)) * begin building plugin with node instead of bash ([#1120](https://github.com/unraid/api/issues/1120)) ([4f5c367](https://github.com/unraid/api/commit/4f5c367fdf094164a7b3022cdf9f9c1987b76485)) * cleanup disclaimer and command to add users ([3867dfa](https://github.com/unraid/api/commit/3867dfacb214fdf9c0a050d1523ded620b14fd67)) * convert to pnpm monorepo ([#1137](https://github.com/unraid/api/issues/1137)) ([ad6b658](https://github.com/unraid/api/commit/ad6b6589dbe0465968205449643c81c1c9d4e613)) * copy only needed files for nodejs ([cf08627](https://github.com/unraid/api/commit/cf08627725b22e6b5e576104c1ea2a0572f870c2)) * do not move upgradepkg ([c12d8da](https://github.com/unraid/api/commit/c12d8dae4e9ccafde6dfc2b98fb41fdb98f882f7)) * dont pass entire server state for privacy ([b969f3a](https://github.com/unraid/api/commit/b969f3a9ab5421e1fc85241d5743224b48b099f0)) * download nodejs and install on legacy OS versions ([b1a2ba7](https://github.com/unraid/api/commit/b1a2ba78cc04ffdd55332ff0f9b9bef6e3f2229f)) * error when nodejs download fails ([af1994c](https://github.com/unraid/api/commit/af1994cb62aaab59d34fc5ea66d67bb51fcfe1ef)) * extract node to usr/local/ ([9a0d63d](https://github.com/unraid/api/commit/9a0d63d4ee59186faeca9607b403c1666a8e58b3)) * fix missing flash line ([5f1a61d](https://github.com/unraid/api/commit/5f1a61d4aab828375e3d400576cc29a825421262)) * fix pm2 setup and add link command ([caf797c](https://github.com/unraid/api/commit/caf797cf4a0141fc3a545bca644ece37b5c9f3cb)) * move ssoenabled to a boolean flag rather than ids ([6f5edb2](https://github.com/unraid/api/commit/6f5edb240687a7511522bcd4a9a0dd09f2cb6f47)) * move variable declarations to theme.ts ([00b8ffe](https://github.com/unraid/api/commit/00b8ffe87ddd5c45029d9523d7117ee5361140c6)) * name package with PR number ([cf72c8b](https://github.com/unraid/api/commit/cf72c8b35928b7c7d95f706dffe9a81d92292f8f)) * nodejs issues with version 2 ([106b2e4](https://github.com/unraid/api/commit/106b2e42c0d838a5fa04acd35a2e7125142a072d)) * **plugin:** rm Date & Time format settings from Notification Settings ([acba0b0](https://github.com/unraid/api/commit/acba0b0365f6dfc23fdb340788f728918b0b9566)) * remove nghttp3 and only bundle nodejs ([bb555f8](https://github.com/unraid/api/commit/bb555f8296337b044fc88f9a0ebdd16d895df2b9)) * separate install process ([9bbab0f](https://github.com/unraid/api/commit/9bbab0f86ce8bdc6623cfc099e34ecbfed835b26)) * sso login boolean ([81f051e](https://github.com/unraid/api/commit/81f051e02c29744d124d9f55ebe4b826eb3e6c33)) * track node version in slackware ([9d2796f](https://github.com/unraid/api/commit/9d2796f2c9bd3f1092e8236b5a5ba3962ce04281)) * **ui:** webgui-compatible web component library ([#1075](https://github.com/unraid/api/issues/1075)) ([61ee689](https://github.com/unraid/api/commit/61ee68965871d4eb6c883a9dff41af7d95c2ab19)) * unraid single sign on with account app ([2b25537](https://github.com/unraid/api/commit/2b25537e26234d00ed615073af7f9a65ea3e91cf)) * update packageManager field for pnpm ([eec9785](https://github.com/unraid/api/commit/eec9785ba1c8533eb8e3e408b9ced07940abe27e)) * Update plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/state.php ([336478c](https://github.com/unraid/api/commit/336478c2e05dd6e4a2078aafe9a81b387b46a7a5)) * upload files directly to cloudflare ([84b234c](https://github.com/unraid/api/commit/84b234c9cfeea482138388dd3d9c3340c12424e9)) * use plugin file for install and uninstall ([bbf2807](https://github.com/unraid/api/commit/bbf28075c6c6057cb5d4e7cc0207905218dadab6)) * validate entries correctly ([a39da15](https://github.com/unraid/api/commit/a39da15be467f5db428c9fa601e48e04bd879e01)) * **web:** activation modal steps, updated copy ([#1079](https://github.com/unraid/api/issues/1079)) ([d8a5b17](https://github.com/unraid/api/commit/d8a5b1711a8f826f602a504f125c157afb27af90)) * **web:** rm old notification bell upon plugin installation ([#979](https://github.com/unraid/api/issues/979)) ([478254e](https://github.com/unraid/api/commit/478254e134a2a85ebb5d12235a1286546a9306a1)) ### Bug Fixes * add another missing symlink ([477c113](https://github.com/unraid/api/commit/477c113ce17629521537dd766a3319d0dba920e0)) * add error check to nodejs ([e844304](https://github.com/unraid/api/commit/e84430471d46391e1cd5abdde6c891dc3f3dfb1d)) * attempt to restore upgradepkg if install failed ([504283f](https://github.com/unraid/api/commit/504283f227f724c97a8a02d1d5bfe56acfc9442f)) * capitalize name ([902c76c](https://github.com/unraid/api/commit/902c76c759710e94f22c46cc9601a0b7c88e52a4)) * cleanup commands ([ef82ec5](https://github.com/unraid/api/commit/ef82ec5af5d92ea5234814c0c04653b8cbb0e3b2)) * delete unused line ([3e8c101](https://github.com/unraid/api/commit/3e8c101edd6cab010a4ef8d9a6e1394e55f685cb)) * delete upgradepkg ([deb42f6](https://github.com/unraid/api/commit/deb42f6a81833553414aea494bcd29440ce77cc9)) * dnserr on new line ([9bfc04c](https://github.com/unraid/api/commit/9bfc04c2a5ffeafe8db5ae78685e91d0b472c980)) * empty manifest and version alignment ([b07828d](https://github.com/unraid/api/commit/b07828d6554240acec180b993df3a75407126c6a)) * formatting issue ([0042f14](https://github.com/unraid/api/commit/0042f14ab3a25d1bab6e727112b5eb691915cecb)) * further resolve sso sub ids issues ([b3551a1](https://github.com/unraid/api/commit/b3551a1b69bb76613c15cf40b366161090f061fa)) * install syntax error ([a355a64](https://github.com/unraid/api/commit/a355a64136d0199b85b865761ea3bfb72fd0d24c)) * more verbose logging for node install to find issues ([c3f4cf5](https://github.com/unraid/api/commit/c3f4cf53c160b179a4ea102b6b3e5e00de0aeed4)) * node_txz naming ([5e50f24](https://github.com/unraid/api/commit/5e50f24d707bce832f8ef09f1fefe4926c3cee93)) * pass ssoSubIds only ([76a9ae9](https://github.com/unraid/api/commit/76a9ae93863a66000a4fb582fb3e18e59a6e34ec)) * PHP Warning in state.php ([#1126](https://github.com/unraid/api/issues/1126)) ([59d6c1b](https://github.com/unraid/api/commit/59d6c1b678b70e678be5e50e1cde3f25f2758006)) * pkg_build ([2d60045](https://github.com/unraid/api/commit/2d60045784bfb867c7af2f4e6de1a5049ddaacae)) * proper file replacements ([787f8b9](https://github.com/unraid/api/commit/787f8b9bf514365b86e2abcf3937c687fc619c5c)) * restore upgradepkg before install ([8f58145](https://github.com/unraid/api/commit/8f5814589e5eacce3aae043001d8dbf07a18413b)) * strip components from tar line ([bad7f71](https://github.com/unraid/api/commit/bad7f71feac9f52ab2bd87cf36ef37eb2c8d878a)) * upgradepkg ([6962cdd](https://github.com/unraid/api/commit/6962cdd21470ea2c0f16829c5a6037e75f5a5302)) * used TGZ instead of TXZ for nghttp3 ([d7bab9f](https://github.com/unraid/api/commit/d7bab9f443212fcfe1baff9d5b63b81d573f894c)) * variables passed properly ([61ba324](https://github.com/unraid/api/commit/61ba324ca09679e15fe1fbc5015a1008e390722e)) ### Miscellaneous Chores * release 4.1.2 ([2323ee6](https://github.com/unraid/api/commit/2323ee6838d9459e97bb137b010d87aae52d5d86)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Unraid UI
A Vue 3 component library providing a set of reusable, accessible UI components for Unraid development.
Features
- ⚡️ Built with Vue 3 and TypeScript
- 🎭 Storybook documentation
- ✅ Tested components
- 🎪 Built on top of TailwindCSS and Shadcn/UI
Installation
Make sure you have the peer dependencies installed:
npm install vue@^3.3.0 tailwindcss@^3.0.0
Setup
1. Add CSS
Import the component library styles in your main entry file:
import '@unraid/ui/style.css';
2. Configure TailwindCSS
Create a tailwind.config.ts file with the following configuration:
import tailwindConfig from '@unraid/ui/tailwind.config.ts';
import type { Config } from 'tailwindcss';
export default {
presets: [tailwindConfig],
content: [
// ... your content paths
'./components/**/*.{js,vue,ts}',
'./layouts/**/*.vue',
'./pages/**/*.vue',
],
theme: {
extend: {
// your theme extensions
},
},
} satisfies Partial<Config>;
This configuration:
- Uses the Unraid UI library's Tailwind config as a preset
- Properly types your configuration with TypeScript
- Allows you to extend the base theme while maintaining all Unraid UI defaults
Usage
<script setup lang="ts">
import { Button } from '@unraid/ui';
</script>
<template>
<Button variant="primary"> Click me </Button>
</template>
Development
Local Development
Install dependencies:
npm install
Start Storybook development server:
npm run storybook
This will start Storybook at http://localhost:6006
Building
npm run build
Testing
Run tests:
npm run test
Run tests with UI:
npm run test:ui
Generate coverage report:
npm run coverage
Type Checking
npm run typecheck
Scripts
dev: Start development serverbuild: Build for productionpreview: Preview production buildtest: Run teststest:ui: Run tests with UIcoverage: Generate test coverageclean: Remove build artifactstypecheck: Run type checkingstorybook: Start Storybook development serverbuild-storybook: Build Storybook for production
License
Component Development
Installing Shadcn Components
- Install a new component using the Shadcn CLI:
npx shadcn-vue@latest add [component-name]
-
The component will be installed in the root components folder. Move it to the appropriate subfolder based on its type:
- Form components →
src/components/form/ - Layout components →
src/components/layout/ - Common components →
src/components/common/ - Brand components →
src/components/brand/
- Form components →
-
Update any imports in your codebase to reflect the new component location.
Component Variants Pattern
We use the class-variance-authority (CVA) package to manage component variants. Each component that supports variants should follow this pattern:
- Create a variants file (e.g.,
button.variants.ts):
import { cva } from 'class-variance-authority';
export const buttonVariants = cva('base-classes-here', {
variants: {
variant: {
primary: 'variant-specific-classes',
secondary: 'variant-specific-classes',
// ... other variants
},
size: {
sm: 'size-specific-classes',
md: 'size-specific-classes',
lg: 'size-specific-classes',
},
},
defaultVariants: {
variant: 'primary',
size: 'md',
},
});
- Use the variants in your component (e.g.,
Button.vue):
<script setup lang="ts">
import { computed } from "vue";
import { buttonVariants } from "./button.variants";
import { cn } from "@/lib/utils";
export interface ButtonProps {
variant?: "primary" | "secondary" | /* other variants */;
size?: "sm" | "md" | "lg";
class?: string;
}
const props = withDefaults(defineProps<ButtonProps>(), {
variant: "primary",
size: "md",
});
const buttonClass = computed(() => {
return cn(
buttonVariants({ variant: props.variant, size: props.size }),
props.class
);
});
</script>
<template>
<button :class="buttonClass">
<slot />
</button>
</template>
Storybook Development
We use Storybook for component development and documentation. To start the Storybook development server:
npm run storybook
This will start Storybook at http://localhost:6006
When creating stories for your components:
- Place story files in the
storiesdirectory - Name your story files as
ComponentName.stories.ts - Include examples of all variants and states
- Add documentation using JSDoc comments
Example story file:
import type { Meta, StoryObj } from '@storybook/vue3';
import { Button } from '../src/components/common/button';
const meta = {
title: 'Components/Button',
component: Button,
tags: ['autodocs'],
argTypes: {
variant: {
control: 'select',
options: ['primary', 'secondary', 'outline'],
},
size: {
control: 'select',
options: ['sm', 'md', 'lg'],
},
},
} satisfies Meta<typeof Button>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Primary: Story = {
args: {
variant: 'primary',
size: 'md',
},
};
export const Secondary: Story = {
args: {
variant: 'secondary',
size: 'md',
},
};