diff --git a/package-lock.json b/package-lock.json index 2d35f72d..63900254 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "plugins/*" ], "dependencies": { - "@yaakapp/api": "^0.2.26" + "@yaakapp/api": "^0.2.27" }, "devDependencies": { "@types/node": "^22.7.4", @@ -1013,9 +1013,9 @@ } }, "node_modules/@yaakapp/api": { - "version": "0.2.26", - "resolved": "https://registry.npmjs.org/@yaakapp/api/-/api-0.2.26.tgz", - "integrity": "sha512-l9oBrh4oHJHcrdHaUQivFswoTui/32iWjaSP2SDA9tjBFVsuJAs2iKsKNMvCsBkr9bu1dN/si3wg2HmtwhDDxw==", + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/@yaakapp/api/-/api-0.2.27.tgz", + "integrity": "sha512-OkgABeXDxlg3Vx3HbpkIFvAaMTxfqcLQx4X7Tm5/24eZOzbp/n2dtRXRBUcd4w7hI/NjQUetGxjPBTxlJDsQxQ==", "dependencies": { "@types/node": "^22.5.4" } diff --git a/package.json b/package.json index 245529ce..a9989426 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,6 @@ "workspaces-run": "^1.0.2" }, "dependencies": { - "@yaakapp/api": "^0.2.26" + "@yaakapp/api": "^0.2.27" } } diff --git a/plugins/auth-basic/src/index.ts b/plugins/auth-basic/src/index.ts index 103a01ff..7661cd4c 100644 --- a/plugins/auth-basic/src/index.ts +++ b/plugins/auth-basic/src/index.ts @@ -2,7 +2,9 @@ import { PluginDefinition } from '@yaakapp/api'; export const plugin: PluginDefinition = { authentication: { - name: 'Basic', + name: 'basic', + label: 'Basic Auth', + shortLabel: 'Basic', config: [{ type: 'text', name: 'username', @@ -13,6 +15,7 @@ export const plugin: PluginDefinition = { name: 'password', label: 'Password', optional: true, + password: true, }], async onApply(_ctx: any, args: any): Promise { const { username, password } = args.config; diff --git a/plugins/auth-bearer/src/index.ts b/plugins/auth-bearer/src/index.ts index 1ed40b89..5b6783d8 100644 --- a/plugins/auth-bearer/src/index.ts +++ b/plugins/auth-bearer/src/index.ts @@ -2,12 +2,15 @@ import { PluginDefinition } from '@yaakapp/api'; export const plugin: PluginDefinition = { authentication: { - name: 'Bearer', + name: 'bearer', + label: 'Bearer Token', + shortLabel: 'Bearer', config: [{ type: 'text', name: 'token', label: 'Token', optional: true, + password: true, }], async onApply(_ctx: any, args: any): Promise { const { token } = args.config; diff --git a/plugins/auth-jwt/package.json b/plugins/auth-jwt/package.json new file mode 100644 index 00000000..777f9d9b --- /dev/null +++ b/plugins/auth-jwt/package.json @@ -0,0 +1,15 @@ +{ + "name": "@yaakapp/auth-jwt", + "private": true, + "version": "0.0.1", + "scripts": { + "build": "yaakcli build ./src/index.ts", + "dev": "yaakcli dev ./src/index.js" + }, + "dependencies": { + "jsonwebtoken": "^9.0.2" + }, + "devDependencies": { + "@types/jsonwebtoken": "^9.0.7" + } +} diff --git a/plugins/auth-jwt/src/index.ts b/plugins/auth-jwt/src/index.ts new file mode 100644 index 00000000..ecad48e9 --- /dev/null +++ b/plugins/auth-jwt/src/index.ts @@ -0,0 +1,65 @@ +import { PluginDefinition } from '@yaakapp/api'; +import jwt from 'jsonwebtoken'; + +const algorithms = [ + 'HS256', + 'HS384', + 'HS512', + 'RS256', + 'RS384', + 'RS512', + 'PS256', + 'PS384', + 'PS512', + 'ES256', + 'ES384', + 'ES512', +]; + +const defaultAlgorithm = algorithms[0]; + +export const plugin: PluginDefinition = { + authentication: { + name: 'jwt', + label: 'JWT Bearer', + shortLabel: 'JWT', + config: [ + { + type: 'select', + name: 'algorithm', + label: 'Algorithm', + defaultValue: defaultAlgorithm, + options: algorithms.map(value => ({ name: value, value })), + }, + { + type: 'text', + name: 'secret', + label: 'Secret', + optional: true, + }, + { + type: 'checkbox', + name: 'secretBase64', + label: 'Secret Base64 Encoded', + }, + { + type: 'editor', + name: 'payload', + label: 'Payload', + language: 'json', + optional: true, + }, + ], + async onApply(_ctx, args) { + const { algorithm, secret: _secret, secretBase64, payload } = args.config; + const secret = secretBase64 ? Buffer.from(`${_secret}`, 'base64') : `${_secret}`; + const token = jwt.sign(`${payload}`, secret, { algorithm: algorithm as any }); + return { + url: args.url, + headers: [{ name: 'Authorization', value: `Bearer ${token}` }], + }; + } + , + }, + } +;