jwt 生成器
This commit is contained in:
		
							parent
							
								
									07eea0f484
								
							
						
					
					
						commit
						df9a427b09
					
				
							
								
								
									
										21
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
								
							| @ -91,6 +91,7 @@ declare module '@vue/runtime-core' { | ||||
|     IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default'] | ||||
|     'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default'] | ||||
|     'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default'] | ||||
|     IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default'] | ||||
|     IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default'] | ||||
|     IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default'] | ||||
|     IconMdiClose: typeof import('~icons/mdi/close')['default'] | ||||
| @ -98,6 +99,7 @@ declare module '@vue/runtime-core' { | ||||
|     IconMdiEye: typeof import('~icons/mdi/eye')['default'] | ||||
|     IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default'] | ||||
|     IconMdiHeart: typeof import('~icons/mdi/heart')['default'] | ||||
|     IconMdiRefresh: typeof import('~icons/mdi/refresh')['default'] | ||||
|     IconMdiSearch: typeof import('~icons/mdi/search')['default'] | ||||
|     IconMdiTranslate: typeof import('~icons/mdi/translate')['default'] | ||||
|     IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default'] | ||||
| @ -114,6 +116,7 @@ declare module '@vue/runtime-core' { | ||||
|     JsonToXml: typeof import('./src/tools/json-to-xml/json-to-xml.vue')['default'] | ||||
|     JsonToYaml: typeof import('./src/tools/json-to-yaml-converter/json-to-yaml.vue')['default'] | ||||
|     JsonViewer: typeof import('./src/tools/json-viewer/json-viewer.vue')['default'] | ||||
|     'JwtGenerator.tool': typeof import('./src/tools/jwt-generator/jwt-generator.tool.vue')['default'] | ||||
|     JwtParser: typeof import('./src/tools/jwt-parser/jwt-parser.vue')['default'] | ||||
|     KeycodeInfo: typeof import('./src/tools/keycode-info/keycode-info.vue')['default'] | ||||
|     ListConverter: typeof import('./src/tools/list-converter/list-converter.vue')['default'] | ||||
| @ -131,18 +134,36 @@ declare module '@vue/runtime-core' { | ||||
|     MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default'] | ||||
|     NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default'] | ||||
|     NCheckbox: typeof import('naive-ui')['NCheckbox'] | ||||
|     NCode: typeof import('naive-ui')['NCode'] | ||||
|     NCollapseTransition: typeof import('naive-ui')['NCollapseTransition'] | ||||
|     NColorPicker: typeof import('naive-ui')['NColorPicker'] | ||||
|     NConfigProvider: typeof import('naive-ui')['NConfigProvider'] | ||||
|     NDatePicker: typeof import('naive-ui')['NDatePicker'] | ||||
|     NDivider: typeof import('naive-ui')['NDivider'] | ||||
|     NEllipsis: typeof import('naive-ui')['NEllipsis'] | ||||
|     NForm: typeof import('naive-ui')['NForm'] | ||||
|     NFormItem: typeof import('naive-ui')['NFormItem'] | ||||
|     NGi: typeof import('naive-ui')['NGi'] | ||||
|     NGrid: typeof import('naive-ui')['NGrid'] | ||||
|     NH1: typeof import('naive-ui')['NH1'] | ||||
|     NH2: typeof import('naive-ui')['NH2'] | ||||
|     NH3: typeof import('naive-ui')['NH3'] | ||||
|     NIcon: typeof import('naive-ui')['NIcon'] | ||||
|     NImage: typeof import('naive-ui')['NImage'] | ||||
|     NInputGroup: typeof import('naive-ui')['NInputGroup'] | ||||
|     NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel'] | ||||
|     NInputNumber: typeof import('naive-ui')['NInputNumber'] | ||||
|     NLayout: typeof import('naive-ui')['NLayout'] | ||||
|     NLayoutSider: typeof import('naive-ui')['NLayoutSider'] | ||||
|     NMenu: typeof import('naive-ui')['NMenu'] | ||||
|     NProgress: typeof import('naive-ui')['NProgress'] | ||||
|     NScrollbar: typeof import('naive-ui')['NScrollbar'] | ||||
|     NSlider: typeof import('naive-ui')['NSlider'] | ||||
|     NSpace: typeof import('naive-ui')['NSpace'] | ||||
|     NStatistic: typeof import('naive-ui')['NStatistic'] | ||||
|     NSwitch: typeof import('naive-ui')['NSwitch'] | ||||
|     NTable: typeof import('naive-ui')['NTable'] | ||||
|     NTag: typeof import('naive-ui')['NTag'] | ||||
|     NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default'] | ||||
|     OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default'] | ||||
|     PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default'] | ||||
|  | ||||
							
								
								
									
										1
									
								
								js-modules.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								js-modules.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| declare module 'jsonwebtoken' | ||||
| @ -93,6 +93,28 @@ tools: | ||||
|     button: | ||||
|       copy: Copy | ||||
|       refresh: Refresh | ||||
| 
 | ||||
|   jwt-generator: | ||||
|     title: JWT generator | ||||
|     description: Generate JWT (JSON Web Token) tokens with the algorithm you want. | ||||
| 
 | ||||
|     algorithm: | ||||
|       label: Signature or encryption algorithm | ||||
|       placeholder: Select an encryption algorithm... | ||||
|     encoding: | ||||
|       label: Token encoding type | ||||
|       placeholder: Select the result encoding... | ||||
|     payload: | ||||
|       label: JSON payload to generate the JWT | ||||
|       placeholder: Paste your payload here... | ||||
|     secret: | ||||
|       label: Secret key | ||||
|       placeholder: 'Enter the secret key...' | ||||
|     jwt: | ||||
|       label: JSON WEB TOKEN | ||||
|       placeholder: 'The result of the JWT...' | ||||
|     copied: JWT copied to the clipboard | ||||
| 
 | ||||
|   percentage-calculator: | ||||
|     title: Percentage calculator | ||||
|     description: Easily calculate percentages from a value to another value, or from a percentage to a value. | ||||
|  | ||||
| @ -92,6 +92,28 @@ tools: | ||||
|     button: | ||||
|       copy: 复制 | ||||
|       refresh: 刷新 | ||||
| 
 | ||||
|   jwt-generator: | ||||
|     title: JWT 生成器 | ||||
|     description: 生成您想要的算法的 JWT(JSON Web Token)令牌。 | ||||
| 
 | ||||
|     algorithm: | ||||
|       label: 签名或加密算法 | ||||
|       placeholder: 选择加密算法... | ||||
|     encoding: | ||||
|       label: 令牌编码类型 | ||||
|       placeholder: 选择结果编码... | ||||
|     payload: | ||||
|       label: 生成 JWT 的 JSON 有效负载 | ||||
|       placeholder: 粘贴您的有效负载... | ||||
|     secret: | ||||
|       label: 秘钥 | ||||
|       placeholder: '输入秘钥...' | ||||
|     jwt: | ||||
|       label: JSON WEB TOKEN | ||||
|       placeholder: 'JWT 的结果...' | ||||
|     copied: JWT 复制到剪贴板 | ||||
| 
 | ||||
|   percentage-calculator: | ||||
|     title: 百分比计算器 | ||||
|     description: 轻松计算从一个值到另一个值的百分比,或从百分比到值的百分比。 | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|   "name": "it-tools", | ||||
|   "type": "module", | ||||
|   "version": "2024.10.22-7ca5933", | ||||
|   "packageManager": "pnpm@9.11.0", | ||||
|   "packageManager": "pnpm@10.17.1+sha512.17c560fca4867ae9473a3899ad84a88334914f379be46d455cbf92e5cf4b39d34985d452d2583baf19967fa76cb5c17bc9e245529d0b98745721aa7200ecaf7a", | ||||
|   "description": "Collection of handy online tools for developers, with great UX. ", | ||||
|   "author": "Corentin Th <corentin.thomasset74+it-tools@gmail.com> (https://corentin.tech)", | ||||
|   "license": "GNU GPLv3", | ||||
| @ -70,6 +70,7 @@ | ||||
|     "highlight.js": "^11.7.0", | ||||
|     "iarna-toml-esm": "^3.0.5", | ||||
|     "ibantools": "^4.3.3", | ||||
|     "jose": "^6.1.0", | ||||
|     "js-base64": "^3.7.6", | ||||
|     "json5": "^2.2.3", | ||||
|     "jwt-decode": "^3.1.2", | ||||
|  | ||||
							
								
								
									
										204
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										204
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @ -49,7 +49,7 @@ importers: | ||||
|         version: 10.3.0(vue@3.3.4) | ||||
|       '@vueuse/head': | ||||
|         specifier: ^1.0.0 | ||||
|         version: 1.0.0(typescript@5.2.2)(vue@3.3.4) | ||||
|         version: 1.0.0(vue@3.3.4) | ||||
|       '@vueuse/router': | ||||
|         specifier: ^10.0.0 | ||||
|         version: 10.0.0(vue-router@4.1.6(vue@3.3.4))(vue@3.3.4) | ||||
| @ -107,6 +107,9 @@ importers: | ||||
|       ibantools: | ||||
|         specifier: ^4.3.3 | ||||
|         version: 4.3.3 | ||||
|       jose: | ||||
|         specifier: ^6.1.0 | ||||
|         version: 6.1.0 | ||||
|       js-base64: | ||||
|         specifier: ^3.7.6 | ||||
|         version: 3.7.7 | ||||
| @ -2303,9 +2306,6 @@ packages: | ||||
|   '@vue/compiler-core@3.3.7': | ||||
|     resolution: {integrity: sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==} | ||||
| 
 | ||||
|   '@vue/compiler-core@3.5.13': | ||||
|     resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} | ||||
| 
 | ||||
|   '@vue/compiler-dom@3.2.47': | ||||
|     resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==} | ||||
| 
 | ||||
| @ -2315,18 +2315,12 @@ packages: | ||||
|   '@vue/compiler-dom@3.3.7': | ||||
|     resolution: {integrity: sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==} | ||||
| 
 | ||||
|   '@vue/compiler-dom@3.5.13': | ||||
|     resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} | ||||
| 
 | ||||
|   '@vue/compiler-sfc@3.2.47': | ||||
|     resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==} | ||||
| 
 | ||||
|   '@vue/compiler-sfc@3.3.4': | ||||
|     resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} | ||||
| 
 | ||||
|   '@vue/compiler-sfc@3.5.13': | ||||
|     resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} | ||||
| 
 | ||||
|   '@vue/compiler-ssr@3.2.47': | ||||
|     resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==} | ||||
| 
 | ||||
| @ -2336,9 +2330,6 @@ packages: | ||||
|   '@vue/compiler-ssr@3.3.7': | ||||
|     resolution: {integrity: sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==} | ||||
| 
 | ||||
|   '@vue/compiler-ssr@3.5.13': | ||||
|     resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} | ||||
| 
 | ||||
|   '@vue/devtools-api@6.5.0': | ||||
|     resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} | ||||
| 
 | ||||
| @ -2359,21 +2350,12 @@ packages: | ||||
|   '@vue/reactivity@3.3.4': | ||||
|     resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} | ||||
| 
 | ||||
|   '@vue/reactivity@3.5.13': | ||||
|     resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} | ||||
| 
 | ||||
|   '@vue/runtime-core@3.3.4': | ||||
|     resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} | ||||
| 
 | ||||
|   '@vue/runtime-core@3.5.13': | ||||
|     resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} | ||||
| 
 | ||||
|   '@vue/runtime-dom@3.3.4': | ||||
|     resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} | ||||
| 
 | ||||
|   '@vue/runtime-dom@3.5.13': | ||||
|     resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} | ||||
| 
 | ||||
|   '@vue/server-renderer@3.3.4': | ||||
|     resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} | ||||
|     peerDependencies: | ||||
| @ -2384,11 +2366,6 @@ packages: | ||||
|     peerDependencies: | ||||
|       vue: 3.3.7 | ||||
| 
 | ||||
|   '@vue/server-renderer@3.5.13': | ||||
|     resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} | ||||
|     peerDependencies: | ||||
|       vue: 3.5.13 | ||||
| 
 | ||||
|   '@vue/shared@3.2.47': | ||||
|     resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} | ||||
| 
 | ||||
| @ -2398,9 +2375,6 @@ packages: | ||||
|   '@vue/shared@3.3.7': | ||||
|     resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==} | ||||
| 
 | ||||
|   '@vue/shared@3.5.13': | ||||
|     resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} | ||||
| 
 | ||||
|   '@vue/test-utils@2.3.2': | ||||
|     resolution: {integrity: sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==} | ||||
|     peerDependencies: | ||||
| @ -2434,8 +2408,10 @@ packages: | ||||
|   '@vueuse/shared@10.3.0': | ||||
|     resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==} | ||||
| 
 | ||||
|   '@vueuse/shared@12.0.0': | ||||
|     resolution: {integrity: sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==} | ||||
|   '@vueuse/shared@13.9.0': | ||||
|     resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==} | ||||
|     peerDependencies: | ||||
|       vue: ^3.5.0 | ||||
| 
 | ||||
|   '@zhead/schema@1.0.0-beta.13': | ||||
|     resolution: {integrity: sha512-P1A1vRGFBhITco8Iw4/hvnDYoE/SoVrd71dW1pBFdXJb3vP+pBtoOuhbEKy0ROJGOyzQuqvFibcwzyLlWMqNiQ==} | ||||
| @ -2896,9 +2872,6 @@ packages: | ||||
|   csstype@3.1.2: | ||||
|     resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} | ||||
| 
 | ||||
|   csstype@3.1.3: | ||||
|     resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} | ||||
| 
 | ||||
|   dash-get@1.0.2: | ||||
|     resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==} | ||||
| 
 | ||||
| @ -4009,6 +3982,9 @@ packages: | ||||
|     resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==} | ||||
|     hasBin: true | ||||
| 
 | ||||
|   jose@6.1.0: | ||||
|     resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==} | ||||
| 
 | ||||
|   js-base64@3.7.7: | ||||
|     resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} | ||||
| 
 | ||||
| @ -4868,10 +4844,6 @@ packages: | ||||
|     resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} | ||||
|     hasBin: true | ||||
| 
 | ||||
|   resolve@1.22.8: | ||||
|     resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} | ||||
|     hasBin: true | ||||
| 
 | ||||
|   resolve@1.22.9: | ||||
|     resolution: {integrity: sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==} | ||||
|     hasBin: true | ||||
| @ -4962,11 +4934,6 @@ packages: | ||||
|     engines: {node: '>=10'} | ||||
|     hasBin: true | ||||
| 
 | ||||
|   semver@7.5.4: | ||||
|     resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} | ||||
|     engines: {node: '>=10'} | ||||
|     hasBin: true | ||||
| 
 | ||||
|   semver@7.6.3: | ||||
|     resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} | ||||
|     engines: {node: '>=10'} | ||||
| @ -5071,6 +5038,7 @@ packages: | ||||
|   source-map@0.8.0-beta.0: | ||||
|     resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} | ||||
|     engines: {node: '>= 8'} | ||||
|     deprecated: The work that was done in this beta branch won't be included in future versions | ||||
| 
 | ||||
|   sourcemap-codec@1.4.8: | ||||
|     resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} | ||||
| @ -5701,14 +5669,6 @@ packages: | ||||
|   vue@3.3.4: | ||||
|     resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} | ||||
| 
 | ||||
|   vue@3.5.13: | ||||
|     resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} | ||||
|     peerDependencies: | ||||
|       typescript: '*' | ||||
|     peerDependenciesMeta: | ||||
|       typescript: | ||||
|         optional: true | ||||
| 
 | ||||
|   vuedraggable@4.1.0: | ||||
|     resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==} | ||||
|     peerDependencies: | ||||
| @ -6117,7 +6077,7 @@ snapshots: | ||||
|       '@babel/traverse': 7.23.2 | ||||
|       '@babel/types': 7.23.0 | ||||
|       convert-source-map: 2.0.0 | ||||
|       debug: 4.3.4 | ||||
|       debug: 4.4.0 | ||||
|       gensync: 1.0.0-beta.2 | ||||
|       json5: 2.2.3 | ||||
|       semver: 6.3.1 | ||||
| @ -7000,7 +6960,7 @@ snapshots: | ||||
|       '@babel/helper-split-export-declaration': 7.22.6 | ||||
|       '@babel/parser': 7.22.10 | ||||
|       '@babel/types': 7.22.10 | ||||
|       debug: 4.3.4 | ||||
|       debug: 4.4.0 | ||||
|       globals: 11.12.0 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| @ -7015,7 +6975,7 @@ snapshots: | ||||
|       '@babel/helper-split-export-declaration': 7.22.5 | ||||
|       '@babel/parser': 7.22.5 | ||||
|       '@babel/types': 7.22.5 | ||||
|       debug: 4.3.4 | ||||
|       debug: 4.4.0 | ||||
|       globals: 11.12.0 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| @ -7030,7 +6990,7 @@ snapshots: | ||||
|       '@babel/helper-split-export-declaration': 7.22.6 | ||||
|       '@babel/parser': 7.23.0 | ||||
|       '@babel/types': 7.23.0 | ||||
|       debug: 4.3.4 | ||||
|       debug: 4.4.0 | ||||
|       globals: 11.12.0 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| @ -7401,7 +7361,7 @@ snapshots: | ||||
| 
 | ||||
|   '@linaria/logger@4.0.0': | ||||
|     dependencies: | ||||
|       debug: 4.3.4 | ||||
|       debug: 4.4.0 | ||||
|       picocolors: 1.0.0 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| @ -7883,7 +7843,7 @@ snapshots: | ||||
|       graphemer: 1.4.0 | ||||
|       ignore: 5.2.4 | ||||
|       natural-compare: 1.4.0 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|       ts-api-utils: 1.0.1(typescript@5.2.2) | ||||
|     optionalDependencies: | ||||
|       typescript: 5.2.2 | ||||
| @ -7940,10 +7900,10 @@ snapshots: | ||||
|     dependencies: | ||||
|       '@typescript-eslint/types': 5.60.0 | ||||
|       '@typescript-eslint/visitor-keys': 5.60.0 | ||||
|       debug: 4.3.4 | ||||
|       debug: 4.4.0 | ||||
|       globby: 11.1.0 | ||||
|       is-glob: 4.0.3 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|       tsutils: 3.21.0(typescript@5.2.2) | ||||
|     optionalDependencies: | ||||
|       typescript: 5.2.2 | ||||
| @ -7957,7 +7917,7 @@ snapshots: | ||||
|       debug: 4.3.4 | ||||
|       globby: 11.1.0 | ||||
|       is-glob: 4.0.3 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|       ts-api-utils: 1.0.1(typescript@5.2.2) | ||||
|     optionalDependencies: | ||||
|       typescript: 5.2.2 | ||||
| @ -7968,10 +7928,10 @@ snapshots: | ||||
|     dependencies: | ||||
|       '@typescript-eslint/types': 6.9.1 | ||||
|       '@typescript-eslint/visitor-keys': 6.9.1 | ||||
|       debug: 4.3.4 | ||||
|       debug: 4.4.0 | ||||
|       globby: 11.1.0 | ||||
|       is-glob: 4.0.3 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|       ts-api-utils: 1.0.1(typescript@5.2.2) | ||||
|     optionalDependencies: | ||||
|       typescript: 5.2.2 | ||||
| @ -7988,7 +7948,7 @@ snapshots: | ||||
|       '@typescript-eslint/typescript-estree': 5.60.0(typescript@5.2.2) | ||||
|       eslint: 8.47.0 | ||||
|       eslint-scope: 5.1.1 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|       - typescript | ||||
| @ -8002,7 +7962,7 @@ snapshots: | ||||
|       '@typescript-eslint/types': 6.4.1 | ||||
|       '@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2) | ||||
|       eslint: 8.47.0 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|       - typescript | ||||
| @ -8016,7 +7976,7 @@ snapshots: | ||||
|       '@typescript-eslint/types': 6.9.1 | ||||
|       '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) | ||||
|       eslint: 8.47.0 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|       - typescript | ||||
| @ -8049,15 +8009,13 @@ snapshots: | ||||
|     dependencies: | ||||
|       '@unhead/schema': 0.5.1 | ||||
| 
 | ||||
|   '@unhead/vue@0.5.1(typescript@5.2.2)(vue@3.3.4)': | ||||
|   '@unhead/vue@0.5.1(vue@3.3.4)': | ||||
|     dependencies: | ||||
|       '@unhead/dom': 0.5.1 | ||||
|       '@unhead/schema': 0.5.1 | ||||
|       '@vueuse/shared': 12.0.0(typescript@5.2.2) | ||||
|       '@vueuse/shared': 13.9.0(vue@3.3.4) | ||||
|       unhead: 0.5.1 | ||||
|       vue: 3.3.4 | ||||
|     transitivePeerDependencies: | ||||
|       - typescript | ||||
| 
 | ||||
|   '@unocss/astro@0.65.1(rollup@2.79.2)(vite@4.4.9(@types/node@18.15.11)(less@4.1.3)(terser@5.37.0))(vue@3.3.4)': | ||||
|     dependencies: | ||||
| @ -8341,14 +8299,6 @@ snapshots: | ||||
|       source-map-js: 1.0.2 | ||||
|     optional: true | ||||
| 
 | ||||
|   '@vue/compiler-core@3.5.13': | ||||
|     dependencies: | ||||
|       '@babel/parser': 7.26.3 | ||||
|       '@vue/shared': 3.5.13 | ||||
|       entities: 4.5.0 | ||||
|       estree-walker: 2.0.2 | ||||
|       source-map-js: 1.2.1 | ||||
| 
 | ||||
|   '@vue/compiler-dom@3.2.47': | ||||
|     dependencies: | ||||
|       '@vue/compiler-core': 3.2.47 | ||||
| @ -8365,11 +8315,6 @@ snapshots: | ||||
|       '@vue/shared': 3.3.7 | ||||
|     optional: true | ||||
| 
 | ||||
|   '@vue/compiler-dom@3.5.13': | ||||
|     dependencies: | ||||
|       '@vue/compiler-core': 3.5.13 | ||||
|       '@vue/shared': 3.5.13 | ||||
| 
 | ||||
|   '@vue/compiler-sfc@3.2.47': | ||||
|     dependencies: | ||||
|       '@babel/parser': 7.21.4 | ||||
| @ -8396,18 +8341,6 @@ snapshots: | ||||
|       postcss: 8.4.28 | ||||
|       source-map-js: 1.0.2 | ||||
| 
 | ||||
|   '@vue/compiler-sfc@3.5.13': | ||||
|     dependencies: | ||||
|       '@babel/parser': 7.26.3 | ||||
|       '@vue/compiler-core': 3.5.13 | ||||
|       '@vue/compiler-dom': 3.5.13 | ||||
|       '@vue/compiler-ssr': 3.5.13 | ||||
|       '@vue/shared': 3.5.13 | ||||
|       estree-walker: 2.0.2 | ||||
|       magic-string: 0.30.15 | ||||
|       postcss: 8.4.49 | ||||
|       source-map-js: 1.2.1 | ||||
| 
 | ||||
|   '@vue/compiler-ssr@3.2.47': | ||||
|     dependencies: | ||||
|       '@vue/compiler-dom': 3.2.47 | ||||
| @ -8424,11 +8357,6 @@ snapshots: | ||||
|       '@vue/shared': 3.3.7 | ||||
|     optional: true | ||||
| 
 | ||||
|   '@vue/compiler-ssr@3.5.13': | ||||
|     dependencies: | ||||
|       '@vue/compiler-dom': 3.5.13 | ||||
|       '@vue/shared': 3.5.13 | ||||
| 
 | ||||
|   '@vue/devtools-api@6.5.0': {} | ||||
| 
 | ||||
|   '@vue/language-core@1.8.1(typescript@5.2.2)': | ||||
| @ -8464,33 +8392,17 @@ snapshots: | ||||
|     dependencies: | ||||
|       '@vue/shared': 3.3.4 | ||||
| 
 | ||||
|   '@vue/reactivity@3.5.13': | ||||
|     dependencies: | ||||
|       '@vue/shared': 3.5.13 | ||||
| 
 | ||||
|   '@vue/runtime-core@3.3.4': | ||||
|     dependencies: | ||||
|       '@vue/reactivity': 3.3.4 | ||||
|       '@vue/shared': 3.3.4 | ||||
| 
 | ||||
|   '@vue/runtime-core@3.5.13': | ||||
|     dependencies: | ||||
|       '@vue/reactivity': 3.5.13 | ||||
|       '@vue/shared': 3.5.13 | ||||
| 
 | ||||
|   '@vue/runtime-dom@3.3.4': | ||||
|     dependencies: | ||||
|       '@vue/runtime-core': 3.3.4 | ||||
|       '@vue/shared': 3.3.4 | ||||
|       csstype: 3.1.2 | ||||
| 
 | ||||
|   '@vue/runtime-dom@3.5.13': | ||||
|     dependencies: | ||||
|       '@vue/reactivity': 3.5.13 | ||||
|       '@vue/runtime-core': 3.5.13 | ||||
|       '@vue/shared': 3.5.13 | ||||
|       csstype: 3.1.3 | ||||
| 
 | ||||
|   '@vue/server-renderer@3.3.4(vue@3.3.4)': | ||||
|     dependencies: | ||||
|       '@vue/compiler-ssr': 3.3.4 | ||||
| @ -8504,12 +8416,6 @@ snapshots: | ||||
|       vue: 3.3.4 | ||||
|     optional: true | ||||
| 
 | ||||
|   '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.2.2))': | ||||
|     dependencies: | ||||
|       '@vue/compiler-ssr': 3.5.13 | ||||
|       '@vue/shared': 3.5.13 | ||||
|       vue: 3.5.13(typescript@5.2.2) | ||||
| 
 | ||||
|   '@vue/shared@3.2.47': {} | ||||
| 
 | ||||
|   '@vue/shared@3.3.4': {} | ||||
| @ -8517,8 +8423,6 @@ snapshots: | ||||
|   '@vue/shared@3.3.7': | ||||
|     optional: true | ||||
| 
 | ||||
|   '@vue/shared@3.5.13': {} | ||||
| 
 | ||||
|   '@vue/test-utils@2.3.2(vue@3.3.4)': | ||||
|     dependencies: | ||||
|       js-beautify: 1.14.6 | ||||
| @ -8546,14 +8450,12 @@ snapshots: | ||||
|       - '@vue/composition-api' | ||||
|       - vue | ||||
| 
 | ||||
|   '@vueuse/head@1.0.0(typescript@5.2.2)(vue@3.3.4)': | ||||
|   '@vueuse/head@1.0.0(vue@3.3.4)': | ||||
|     dependencies: | ||||
|       '@unhead/schema': 0.5.1 | ||||
|       '@unhead/ssr': 0.5.1 | ||||
|       '@unhead/vue': 0.5.1(typescript@5.2.2)(vue@3.3.4) | ||||
|       '@unhead/vue': 0.5.1(vue@3.3.4) | ||||
|       vue: 3.3.4 | ||||
|     transitivePeerDependencies: | ||||
|       - typescript | ||||
| 
 | ||||
|   '@vueuse/metadata@10.3.0': {} | ||||
| 
 | ||||
| @ -8580,11 +8482,9 @@ snapshots: | ||||
|       - '@vue/composition-api' | ||||
|       - vue | ||||
| 
 | ||||
|   '@vueuse/shared@12.0.0(typescript@5.2.2)': | ||||
|   '@vueuse/shared@13.9.0(vue@3.3.4)': | ||||
|     dependencies: | ||||
|       vue: 3.5.13(typescript@5.2.2) | ||||
|     transitivePeerDependencies: | ||||
|       - typescript | ||||
|       vue: 3.3.4 | ||||
| 
 | ||||
|   '@zhead/schema@1.0.0-beta.13': {} | ||||
| 
 | ||||
| @ -8780,7 +8680,7 @@ snapshots: | ||||
| 
 | ||||
|   builtins@5.0.1: | ||||
|     dependencies: | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
| 
 | ||||
|   bundle-require@5.0.0(esbuild@0.23.1): | ||||
|     dependencies: | ||||
| @ -9084,8 +8984,6 @@ snapshots: | ||||
| 
 | ||||
|   csstype@3.1.2: {} | ||||
| 
 | ||||
|   csstype@3.1.3: {} | ||||
| 
 | ||||
|   dash-get@1.0.2: {} | ||||
| 
 | ||||
|   data-uri-to-buffer@4.0.1: {} | ||||
| @ -9529,7 +9427,7 @@ snapshots: | ||||
|       is-core-module: 2.13.0 | ||||
|       minimatch: 3.1.2 | ||||
|       resolve: 1.22.4 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
| 
 | ||||
|   eslint-plugin-no-only-tests@3.1.0: {} | ||||
| 
 | ||||
| @ -9553,7 +9451,7 @@ snapshots: | ||||
|       read-pkg-up: 7.0.1 | ||||
|       regexp-tree: 0.1.27 | ||||
|       regjsparser: 0.10.0 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|       strip-indent: 3.0.0 | ||||
| 
 | ||||
|   eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.4.1(@typescript-eslint/parser@6.4.1(eslint@8.47.0)(typescript@5.2.2))(eslint@8.47.0)(typescript@5.2.2))(eslint@8.47.0): | ||||
| @ -9570,7 +9468,7 @@ snapshots: | ||||
|       natural-compare: 1.4.0 | ||||
|       nth-check: 2.1.1 | ||||
|       postcss-selector-parser: 6.0.13 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|       vue-eslint-parser: 9.3.1(eslint@8.47.0) | ||||
|       xml-name-validator: 4.0.0 | ||||
|     transitivePeerDependencies: | ||||
| @ -10321,6 +10219,8 @@ snapshots: | ||||
| 
 | ||||
|   jiti@2.0.0-beta.3: {} | ||||
| 
 | ||||
|   jose@6.1.0: {} | ||||
| 
 | ||||
|   js-base64@3.7.7: {} | ||||
| 
 | ||||
|   js-beautify@1.14.6: | ||||
| @ -10400,7 +10300,7 @@ snapshots: | ||||
|       acorn: 8.10.0 | ||||
|       eslint-visitor-keys: 3.4.3 | ||||
|       espree: 9.6.1 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
| 
 | ||||
|   jsonc-parser@3.2.0: {} | ||||
| 
 | ||||
| @ -10753,7 +10653,7 @@ snapshots: | ||||
|   normalize-package-data@2.5.0: | ||||
|     dependencies: | ||||
|       hosted-git-info: 2.8.9 | ||||
|       resolve: 1.22.8 | ||||
|       resolve: 1.22.9 | ||||
|       semver: 5.7.2 | ||||
|       validate-npm-package-license: 3.0.4 | ||||
| 
 | ||||
| @ -11267,13 +11167,7 @@ snapshots: | ||||
| 
 | ||||
|   resolve@1.22.4: | ||||
|     dependencies: | ||||
|       is-core-module: 2.13.1 | ||||
|       path-parse: 1.0.7 | ||||
|       supports-preserve-symlinks-flag: 1.0.0 | ||||
| 
 | ||||
|   resolve@1.22.8: | ||||
|     dependencies: | ||||
|       is-core-module: 2.13.1 | ||||
|       is-core-module: 2.16.0 | ||||
|       path-parse: 1.0.7 | ||||
|       supports-preserve-symlinks-flag: 1.0.0 | ||||
| 
 | ||||
| @ -11357,10 +11251,6 @@ snapshots: | ||||
|     dependencies: | ||||
|       lru-cache: 6.0.0 | ||||
| 
 | ||||
|   semver@7.5.4: | ||||
|     dependencies: | ||||
|       lru-cache: 6.0.0 | ||||
| 
 | ||||
|   semver@7.6.3: {} | ||||
| 
 | ||||
|   sentence-case@2.1.1: | ||||
| @ -12132,7 +12022,7 @@ snapshots: | ||||
|       espree: 9.6.1 | ||||
|       esquery: 1.5.0 | ||||
|       lodash: 4.17.21 | ||||
|       semver: 7.5.4 | ||||
|       semver: 7.6.3 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| 
 | ||||
| @ -12180,16 +12070,6 @@ snapshots: | ||||
|       '@vue/server-renderer': 3.3.4(vue@3.3.4) | ||||
|       '@vue/shared': 3.3.4 | ||||
| 
 | ||||
|   vue@3.5.13(typescript@5.2.2): | ||||
|     dependencies: | ||||
|       '@vue/compiler-dom': 3.5.13 | ||||
|       '@vue/compiler-sfc': 3.5.13 | ||||
|       '@vue/runtime-dom': 3.5.13 | ||||
|       '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.2.2)) | ||||
|       '@vue/shared': 3.5.13 | ||||
|     optionalDependencies: | ||||
|       typescript: 5.2.2 | ||||
| 
 | ||||
|   vuedraggable@4.1.0(vue@3.3.4): | ||||
|     dependencies: | ||||
|       sortablejs: 1.14.0 | ||||
|  | ||||
| @ -66,6 +66,7 @@ import { tool as htmlEntities } from './html-entities'; | ||||
| import { tool as baseConverter } from './integer-base-converter'; | ||||
| import { tool as jsonViewer } from './json-viewer'; | ||||
| import { tool as jwtParser } from './jwt-parser'; | ||||
| import { tool as jwtGenerator } from './jwt-generator'; | ||||
| import { tool as loremIpsumGenerator } from './lorem-ipsum-generator'; | ||||
| import { tool as mathEvaluator } from './math-evaluator'; | ||||
| import { tool as metaTagGenerator } from './meta-tag-generator'; | ||||
| @ -91,7 +92,20 @@ import { tool as yamlViewer } from './yaml-viewer'; | ||||
| export const toolsByCategory: ToolCategory[] = [ | ||||
|   { | ||||
|     name: 'Crypto', | ||||
|     components: [tokenGenerator, hashText, bcrypt, uuidGenerator, ulidGenerator, cypher, bip39, hmacGenerator, rsaKeyPairGenerator, passwordStrengthAnalyser, pdfSignatureChecker], | ||||
|     components: [ | ||||
|       tokenGenerator, | ||||
|       jwtGenerator, | ||||
|       hashText, | ||||
|       bcrypt, | ||||
|       uuidGenerator, | ||||
|       ulidGenerator, | ||||
|       cypher, | ||||
|       bip39, | ||||
|       hmacGenerator, | ||||
|       rsaKeyPairGenerator, | ||||
|       passwordStrengthAnalyser, | ||||
|       pdfSignatureChecker, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|     name: 'Converter', | ||||
| @ -164,7 +178,14 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
|   }, | ||||
|   { | ||||
|     name: 'Network', | ||||
|     components: [ipv4SubnetCalculator, ipv4AddressConverter, ipv4RangeExpander, macAddressLookup, macAddressGenerator, ipv6UlaGenerator], | ||||
|     components: [ | ||||
|       ipv4SubnetCalculator, | ||||
|       ipv4AddressConverter, | ||||
|       ipv4RangeExpander, | ||||
|       macAddressLookup, | ||||
|       macAddressGenerator, | ||||
|       ipv6UlaGenerator, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|     name: 'Math', | ||||
| @ -194,5 +215,5 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
| 
 | ||||
| export const tools = toolsByCategory.flatMap(({ components }) => components); | ||||
| export const toolsWithCategory = toolsByCategory.flatMap(({ components, name }) => | ||||
|   components.map(tool => ({ category: name, ...tool })), | ||||
|   components.map((tool) => ({ category: name, ...tool })), | ||||
| ); | ||||
|  | ||||
							
								
								
									
										12
									
								
								src/tools/jwt-generator/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/jwt-generator/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| import { ArrowsShuffle } from '@vicons/tabler'; | ||||
| import { defineTool } from '../tool'; | ||||
| import { translate } from '@/plugins/i18n.plugin'; | ||||
| 
 | ||||
| export const tool = defineTool({ | ||||
|   name: translate('tools.jwt-generator.title'), | ||||
|   path: '/jwt-generator', | ||||
|   description: translate('tools.jwt-generator.description'), | ||||
|   keywords: ['token', 'random', 'string', 'alphanumeric', 'symbols', 'number', 'letters', 'lowercase', 'uppercase', 'password'], | ||||
|   component: () => import('./jwt-generator.tool.vue'), | ||||
|   icon: ArrowsShuffle, | ||||
| }); | ||||
							
								
								
									
										112
									
								
								src/tools/jwt-generator/jwt-generator.tool.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								src/tools/jwt-generator/jwt-generator.tool.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,112 @@ | ||||
| <script setup lang="ts"> | ||||
| import JSON5 from 'json5'; | ||||
| import * as jose from 'jose'; | ||||
| import { useCopy } from '@/composable/copy'; | ||||
| import type { UseValidationRule } from '@/composable/validation'; | ||||
| 
 | ||||
| const algs = ['HS256', 'HS384', 'HS512'] as const; | ||||
| 
 | ||||
| type Encoding = 'JWT'; | ||||
| 
 | ||||
| const rules: UseValidationRule<string>[] = [ | ||||
|   { | ||||
|     validator: (v: string) => v === '' || JSON5.parse(v), | ||||
|     message: 'Provided JSON is not valid.', | ||||
|   }, | ||||
| ]; | ||||
| 
 | ||||
| const { t } = useI18n(); | ||||
| const alg = ref<(typeof algs)[number]>('HS256'); | ||||
| const encoding = ref<Encoding>('JWT'); | ||||
| const payload = ref(''); | ||||
| const secret = ref(''); | ||||
| const jwt = ref(''); | ||||
| 
 | ||||
| watch( | ||||
|   [alg, encoding, payload, secret], | ||||
|   async () => { | ||||
|     if (!payload.value || !secret.value) { | ||||
|       jwt.value = ''; | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     const parsedPayload = JSON5.parse(payload.value); | ||||
|     const decodedSecret = new TextEncoder().encode(secret.value); | ||||
| 
 | ||||
|     console.error('Decoded secret:', decodedSecret); | ||||
| 
 | ||||
|     try { | ||||
|       const token = await new jose.SignJWT(parsedPayload) | ||||
|         .setProtectedHeader({ alg: alg.value, typ: 'JWT' }) | ||||
|         .setIssuedAt(parsedPayload.iat || undefined) | ||||
|         .setExpirationTime(parsedPayload.exp || undefined) | ||||
|         .sign(decodedSecret); | ||||
|       jwt.value = token; | ||||
|     } catch (e) { | ||||
|       jwt.value = `Error: ${(e as Error).message}`; | ||||
|     } | ||||
|   }, | ||||
|   { immediate: true }, | ||||
| ); | ||||
| 
 | ||||
| const { copy } = useCopy({ source: jwt }); | ||||
| </script> | ||||
| 
 | ||||
| <template> | ||||
|   <div flex flex-col gap-4> | ||||
|     <div flex gap-2> | ||||
|       <c-select | ||||
|         v-model:value="alg" | ||||
|         :label="t('tools.jwt-generator.algorithm.label')" | ||||
|         flex-1 | ||||
|         :placeholder="t('tools.jwt-generator.algorithm.placeholder')" | ||||
|         :options="algs.map((a) => ({ label: a, value: a }))" | ||||
|       /> | ||||
|       <c-select | ||||
|         v-model:value="encoding" | ||||
|         :label="t('tools.jwt-generator.encoding.label')" | ||||
|         flex-1 | ||||
|         :placeholder="t('tools.jwt-generator.encoding.placeholder')" | ||||
|         :options="[ | ||||
|           { | ||||
|             label: 'JWT', | ||||
|             value: 'JWT', | ||||
|           }, | ||||
|         ]" | ||||
|       /> | ||||
|     </div> | ||||
|     <c-input-text | ||||
|       v-model:value="payload" | ||||
|       multiline | ||||
|       raw-text | ||||
|       :placeholder="t('tools.jwt-generator.payload.placeholder')" | ||||
|       rows="8" | ||||
|       autosize | ||||
|       autofocus | ||||
|       :label="t('tools.jwt-generator.payload.label')" | ||||
|       :input-validation-rules="rules" | ||||
|     /> | ||||
| 
 | ||||
|     <c-input-text | ||||
|       v-model:value="secret" | ||||
|       raw-text | ||||
|       :placeholder="t('tools.jwt-generator.secret.placeholder')" | ||||
|       :label="t('tools.jwt-generator.secret.label')" | ||||
|       clearable | ||||
|     /> | ||||
| 
 | ||||
|     <c-input-text | ||||
|       v-model:value="jwt" | ||||
|       :label="t('tools.jwt-generator.jwt.label')" | ||||
|       :placeholder="t('tools.jwt-generator.jwt.placeholder')" | ||||
|       rows="5" | ||||
|       multiline | ||||
|       raw-text | ||||
|       autofocus | ||||
|       mb-3 | ||||
|     /> | ||||
|     <div flex justify-center> | ||||
|       <c-button @click="copy()"> {{ t('tools.jwt-generator.jwt.copied') }} </c-button> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user