diff --git a/docker-compose.example-nodejs.mongo.yml b/docker-compose.example-nodejs.mongo.yml index 2561208d8..3161bbb51 100644 --- a/docker-compose.example-nodejs.mongo.yml +++ b/docker-compose.example-nodejs.mongo.yml @@ -22,7 +22,7 @@ services: - $PWD/example/nodejs/cert:/viron/example/nodejs/cert - $PWD/packages/nodejs:/viron/packages/nodejs - $PWD/packages/linter:/viron/packages/linter - command: run dev + command: npm run dev mongo: extends: diff --git a/docker-compose.example-nodejs.mysql.yml b/docker-compose.example-nodejs.mysql.yml index 855fbc948..d8e4e9654 100644 --- a/docker-compose.example-nodejs.mysql.yml +++ b/docker-compose.example-nodejs.mysql.yml @@ -22,7 +22,7 @@ services: - $PWD/example/nodejs/cert:/viron/example/nodejs/cert - $PWD/packages/nodejs:/viron/packages/nodejs - $PWD/packages/linter:/viron/packages/linter - command: run dev + command: npm run dev mysql: extends: diff --git a/example/nodejs/.env.template b/example/nodejs/.env.template index 1c957edd1..a98c15346 100644 --- a/example/nodejs/.env.template +++ b/example/nodejs/.env.template @@ -1,13 +1,4 @@ GOOGLE_OAUTH2_CLIENT_ID= GOOGLE_OAUTH2_CLIENT_SECRET= -GOOGLE_OAUTH2_USER_HOSTED_DOMAINS= -OIDC_CLIENT_ID= -OIDC_CLIENT_SECRET= -OIDC_CLIENT_CONFIGURATION_URL= -OIDC_USER_HOSTED_DOMAINS= AWS_S3_ACCESS_KEY_ID= AWS_S3_SECRET_KEY= -SSL_CERTIFICATE= -SSL_PRIVATE_KEY= -SERVICE_ENV= -MODE= \ No newline at end of file diff --git a/example/nodejs/docker-compose.mongo.yml b/example/nodejs/docker-compose.mongo.yml index 57033dcf9..7f7b64516 100644 --- a/example/nodejs/docker-compose.mongo.yml +++ b/example/nodejs/docker-compose.mongo.yml @@ -18,7 +18,7 @@ services: - $PWD/package.json:/example/nodejs/package.json - $PWD/src:/example/nodejs/src - $PWD/cert:/example/nodejs/cert - command: run dev + command: npm run dev mongo: image: mongo diff --git a/example/nodejs/docker-compose.mysql.yml b/example/nodejs/docker-compose.mysql.yml index 53c3f4b8a..7d86f2f27 100644 --- a/example/nodejs/docker-compose.mysql.yml +++ b/example/nodejs/docker-compose.mysql.yml @@ -19,10 +19,10 @@ services: - $PWD/package.json:/example/nodejs/package.json - $PWD/src:/example/nodejs/src - $PWD/cert:/example/nodejs/cert - command: run dev + command: npm run dev mysql: - image: mysql:8.0 + image: mysql restart: always ports: - 3306:3306 diff --git a/example/nodejs/package.json b/example/nodejs/package.json index 87f3a39b2..4626e9772 100644 --- a/example/nodejs/package.json +++ b/example/nodejs/package.json @@ -5,7 +5,7 @@ "main": "dist/server.js", "dependencies": { "@aws-sdk/client-s3": "^3.451.0", - "@viron/lib": "2.4.0-alpha.0", + "@viron/lib": "^2.0.2", "accepts": "^1.3.7", "compression": "^1.7.4", "cookie-parser": "^1.4.5", @@ -20,7 +20,6 @@ "multer": "^1.4.3", "multer-s3": "^3.0.1", "mysql2": "^2.2.5", - "openid-client": "^4.7.4", "pino": "^7.6.4", "pino-http": "^6.6.0", "sequelize": "^6.5.0", diff --git a/example/nodejs/src/config/development.ts b/example/nodejs/src/config/development.ts index 756919a00..34f404757 100644 --- a/example/nodejs/src/config/development.ts +++ b/example/nodejs/src/config/development.ts @@ -45,18 +45,7 @@ export const get = (): Config => { clientId: process.env.GOOGLE_OAUTH2_CLIENT_ID ?? '', clientSecret: process.env.GOOGLE_OAUTH2_CLIENT_SECRET ?? '', additionalScopes: [], - userHostedDomains: process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS - ? process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS.split(',') - : [], - }, - oidc: { - clientId: process.env.OIDC_CLIENT_ID ?? '', - clientSecret: process.env.OIDC_CLIENT_SECRET ?? '', - configurationUrl: process.env.OIDC_CLIENT_CONFIGURATION_URL ?? '', - additionalScopes: [], - userHostedDomains: process.env.OIDC_USER_HOSTED_DOMAINS - ? process.env.OIDC_USER_HOSTED_DOMAINS.split(',') - : [], + userHostedDomains: ['cam-inc.co.jp', 'cyberagent.co.jp'], }, }, aws: { diff --git a/example/nodejs/src/config/index.ts b/example/nodejs/src/config/index.ts index afc023402..fa84fd2b9 100644 --- a/example/nodejs/src/config/index.ts +++ b/example/nodejs/src/config/index.ts @@ -48,7 +48,6 @@ export interface Config { auth: { jwt: domainsAuth.JwtConfig; googleOAuth2: domainsAuth.GoogleOAuthConfig; - oidc: domainsAuth.OidcConfig; }; aws: AWSConfig; oas: OasConfig; diff --git a/example/nodejs/src/config/local.ts b/example/nodejs/src/config/local.ts index 2cc9e805c..a019293d8 100644 --- a/example/nodejs/src/config/local.ts +++ b/example/nodejs/src/config/local.ts @@ -56,18 +56,7 @@ export const get = (mode: Mode): Config => { clientId: process.env.GOOGLE_OAUTH2_CLIENT_ID ?? '', clientSecret: process.env.GOOGLE_OAUTH2_CLIENT_SECRET ?? '', additionalScopes: [], - userHostedDomains: process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS - ? process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS.split(',') - : [], - }, - oidc: { - clientId: process.env.OIDC_CLIENT_ID ?? '', - clientSecret: process.env.OIDC_CLIENT_SECRET ?? '', - configurationUrl: process.env.OIDC_CLIENT_CONFIGURATION_URL ?? '', - additionalScopes: [], - userHostedDomains: process.env.OIDC_USER_HOSTED_DOMAINS - ? process.env.OIDC_USER_HOSTED_DOMAINS.split(',') - : [], + userHostedDomains: ['cam-inc.co.jp', 'cyberagent.co.jp'], }, }, aws: { diff --git a/example/nodejs/src/config/production.ts b/example/nodejs/src/config/production.ts index 0e930850f..b28aeaabc 100644 --- a/example/nodejs/src/config/production.ts +++ b/example/nodejs/src/config/production.ts @@ -39,19 +39,10 @@ export const get = (): Config => { }, googleOAuth2: { clientId: process.env.GOOGLE_OAUTH2_CLIENT_ID ?? '', + clientSecret: process.env.GOOGLE_OAUTH2_CLIENT_SECRET ?? '', additionalScopes: [], - userHostedDomains: process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS - ? process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS.split(',') - : [], - }, - // 本番demoではOIDCのIdpが準備できないので設定なしにする - oidc: { - clientId: '', - clientSecret: '', - configurationUrl: '', - additionalScopes: [], - userHostedDomains: [], + userHostedDomains: ['gmail.com', 'cam-inc.co.jp', 'cyberagent.co.jp'], }, }, aws: { diff --git a/example/nodejs/src/constants.ts b/example/nodejs/src/constants.ts index 60e83c963..ac3e3da56 100644 --- a/example/nodejs/src/constants.ts +++ b/example/nodejs/src/constants.ts @@ -2,7 +2,7 @@ export const MODE = { MYSQL: 'mysql', MONGO: 'mongo', } as const; -export type Mode = (typeof MODE)[keyof typeof MODE]; +export type Mode = typeof MODE[keyof typeof MODE]; export type StoreType = Mode; export const SERVICE_ENV = { @@ -10,7 +10,7 @@ export const SERVICE_ENV = { DEVELOPMENT: 'development', PRODUCTION: 'production', }; -export type ServiceEnv = (typeof SERVICE_ENV)[keyof typeof SERVICE_ENV]; +export type ServiceEnv = typeof SERVICE_ENV[keyof typeof SERVICE_ENV]; export const AUTHENTICATION_RESULT_TYPE = { SUCCESS: 'success', diff --git a/example/nodejs/src/controllers/auth.ts b/example/nodejs/src/controllers/auth.ts index 87b497a95..bfd22b8bb 100644 --- a/example/nodejs/src/controllers/auth.ts +++ b/example/nodejs/src/controllers/auth.ts @@ -2,8 +2,6 @@ import { domainsAuth, genAuthorizationCookie, genOAuthStateCookie, - genOidcStateCookie, - genOidcCodeVerifierCookie, mismatchState, COOKIE_KEY, HTTP_HEADER, @@ -30,73 +28,6 @@ export const signinEmail = async (context: RouteContext): Promise => { context.res.status(204).end(); }; -// OIDCの認証画面へリダイレクト -export const oidcAuthorization = async ( - context: RouteContext -): Promise => { - const { redirectUri } = context.params.query; - const state = domainsAuth.genState(); - const client = await domainsAuth.genOidcClient( - ctx.config.auth.oidc, - redirectUri - ); - - // PKCE用のCodeVerifierを生成 - const codeVerifier = await domainsAuth.genOidcCodeVerifier(); - - // OIDC認証画面URLを取得 - const authorizationUrl = await domainsAuth.getOidcAuthorizationUrl( - ctx.config.auth.oidc, - client, - codeVerifier, - state - ); - - // CookieにOIDCのStateとPKCE用のCodeVerifierをセット - const cookies = [ - genOidcStateCookie(state), - genOidcCodeVerifierCookie(codeVerifier), - ]; - context.res.setHeader(HTTP_HEADER.SET_COOKIE, cookies); - context.res.setHeader(HTTP_HEADER.LOCATION, authorizationUrl); - context.res.status(301).end(); -}; - -// OIDCのコールバック -export const oidcCallback = async (context: RouteContext): Promise => { - const codeVerifier = context.req.cookies[COOKIE_KEY.OIDC_CODE_VERIFIER]; - const cookieState = context.req.cookies[COOKIE_KEY.OIDC_STATE]; - const { state, redirectUri } = context.requestBody; - - if (!codeVerifier || !cookieState || !state || cookieState !== state) { - throw mismatchState(); - } - - // OIDC Clientを取得 - const client = await domainsAuth.genOidcClient( - ctx.config.auth.oidc, - redirectUri - ); - const params = client.callbackParams(context.req); - const token = await domainsAuth.signinOidc( - client, - codeVerifier as string, - redirectUri, - params, - ctx.config.auth.oidc - ); - context.res.setHeader( - HTTP_HEADER.SET_COOKIE, - genAuthorizationCookie(token, { - maxAge: ctx.config.auth.jwt.expirationSec, - }) - ); - context.origRes.clearCookie(COOKIE_KEY.OIDC_STATE); - context.origRes.clearCookie(COOKIE_KEY.OIDC_CODE_VERIFIER); - - context.res.status(204).end(); -}; - // GoogleOAuth2の認可画面へリダイレクト export const oauth2GoogleAuthorization = async ( context: RouteContext diff --git a/example/nodejs/src/controllers/authconfigs.ts b/example/nodejs/src/controllers/authconfigs.ts index 8c70a08c9..ab628b874 100644 --- a/example/nodejs/src/controllers/authconfigs.ts +++ b/example/nodejs/src/controllers/authconfigs.ts @@ -7,11 +7,8 @@ import { SIGNOUT_PATH, OAUTH2_GOOGLE_AUTHORIZATION_PATH, OAUTH2_GOOGLE_CALLBACK_PATH, - OIDC_AUTHORIZATION_PATH, - OIDC_CALLBACK_PATH, } from '@viron/lib'; import { RouteContext } from '../application'; -import { ctx } from '../context'; const { genAuthConfigs } = domainsAuthConfig; @@ -20,57 +17,30 @@ export const listVironAuthconfigs = async ( context: RouteContext ): Promise => { const authConfigDefinitions = [ - // メール認証は必須 { provider: AUTH_CONFIG_PROVIDER.VIRON, type: AUTH_CONFIG_TYPE.EMAIL, method: API_METHOD.POST, path: EMAIL_SIGNIN_PATH, }, - // サインアウトは必須 + { + provider: AUTH_CONFIG_PROVIDER.GOOGLE, + type: AUTH_CONFIG_TYPE.OAUTH, + method: API_METHOD.GET, + path: OAUTH2_GOOGLE_AUTHORIZATION_PATH, + }, + { + provider: AUTH_CONFIG_PROVIDER.GOOGLE, + type: AUTH_CONFIG_TYPE.OAUTH_CALLBACK, + method: API_METHOD.POST, + path: OAUTH2_GOOGLE_CALLBACK_PATH, + }, { provider: AUTH_CONFIG_PROVIDER.SIGNOUT, type: AUTH_CONFIG_TYPE.SIGNOUT, method: API_METHOD.POST, path: SIGNOUT_PATH, }, - // Google認証設定がある場合のみ追加 - ...(ctx.config.auth.googleOAuth2.clientId && - ctx.config.auth.googleOAuth2.clientSecret - ? [ - { - provider: AUTH_CONFIG_PROVIDER.GOOGLE, - type: AUTH_CONFIG_TYPE.OAUTH, - method: API_METHOD.GET, - path: OAUTH2_GOOGLE_AUTHORIZATION_PATH, - }, - { - provider: AUTH_CONFIG_PROVIDER.GOOGLE, - type: AUTH_CONFIG_TYPE.OAUTH_CALLBACK, - method: API_METHOD.POST, - path: OAUTH2_GOOGLE_CALLBACK_PATH, - }, - ] - : []), - // OIDC認証設定がある場合のみ追加 - ...(ctx.config.auth.oidc.clientId && - ctx.config.auth.oidc.clientSecret && - ctx.config.auth.oidc.configurationUrl - ? [ - { - provider: AUTH_CONFIG_PROVIDER.OIDC, - type: AUTH_CONFIG_TYPE.OIDC, - method: API_METHOD.GET, - path: OIDC_AUTHORIZATION_PATH, - }, - { - provider: AUTH_CONFIG_PROVIDER.OIDC, - type: AUTH_CONFIG_TYPE.OIDC_CALLBACK, - method: API_METHOD.POST, - path: OIDC_CALLBACK_PATH, - }, - ] - : []), ]; const result = genAuthConfigs( authConfigDefinitions, diff --git a/example/nodejs/src/infrastructures/mysql/models/index.ts b/example/nodejs/src/infrastructures/mysql/models/index.ts index 29e3b25ca..7990cc47c 100644 --- a/example/nodejs/src/infrastructures/mysql/models/index.ts +++ b/example/nodejs/src/infrastructures/mysql/models/index.ts @@ -5,7 +5,6 @@ import * as articles from './articles'; import * as items from './items'; import * as itemDetails from './item_details'; import * as medias from './medias'; -import { mysql } from '@viron/lib'; export interface MysqlModels { [users.name]: users.UserModelStatic; @@ -14,12 +13,6 @@ export interface MysqlModels { [items.name]: items.ItemModelStatic; [itemDetails.name]: itemDetails.ItemDetailModelStatic; [medias.name]: medias.MediaModelStatic; - [mysql.models.adminUsers - .name]: mysql.MysqlModels[typeof mysql.models.adminUsers.name]; - [mysql.models.auditLogs - .name]: mysql.MysqlModels[typeof mysql.models.auditLogs.name]; - [mysql.models.revokedTokens - .name]: mysql.MysqlModels[typeof mysql.models.revokedTokens.name]; } // Get models @@ -31,10 +24,6 @@ export const models = (s: Sequelize): MysqlModels => { [items.name]: items.createModel(s), [itemDetails.name]: itemDetails.createModel(s), [medias.name]: medias.createModel(s), - [mysql.models.adminUsers.name]: mysql.models.adminUsers.createModel(s), - [mysql.models.auditLogs.name]: mysql.models.auditLogs.createModel(s), - [mysql.models.revokedTokens.name]: - mysql.models.revokedTokens.createModel(s), }; mysqlModels[items.name].belongsTo(mysqlModels[itemDetails.name], { diff --git a/example/nodejs/src/security_handlers/jwt.ts b/example/nodejs/src/security_handlers/jwt.ts index 751aff11a..1cf3de130 100644 --- a/example/nodejs/src/security_handlers/jwt.ts +++ b/example/nodejs/src/security_handlers/jwt.ts @@ -89,21 +89,6 @@ export const jwt = async ( } break; } - case AUTH_TYPE.OIDC: { - // OIDC認証の場合はアクセストークンの検証 - const client = await domainsAuth.genOidcClient(ctx.config.auth.oidc); - if ( - await domainsAuth.verifyOidcAccessToken( - client, - ctx.config.auth.oidc, - userId, - user - ) - ) { - return authSuccess(user); - } - break; - } default: return authSuccess(user); } diff --git a/package-lock.json b/package-lock.json index cb101d6a5..47b1f8f9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.451.0", - "@viron/lib": "2.4.0-alpha.0", + "@viron/lib": "^2.0.2", "accepts": "^1.3.7", "compression": "^1.7.4", "cookie-parser": "^1.4.5", @@ -46,7 +46,6 @@ "multer": "^1.4.3", "multer-s3": "^3.0.1", "mysql2": "^2.2.5", - "openid-client": "^4.7.4", "pino": "^7.6.4", "pino-http": "^6.6.0", "sequelize": "^6.5.0", @@ -416,11 +415,37 @@ "@types/yargs-parser": "*" } }, + "example/nodejs/node_modules/@viron/lib": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@viron/lib/-/lib-2.1.1.tgz", + "integrity": "sha512-zUJBJftIJgZEUhKEjvkl+Zkx4FVe/waZj6G/1AaPlvAwhlixs6Ylyr13t2c1G38FExvc7oe1Ynax1T7iCA6a0Q==", + "dependencies": { + "@viron/linter": "*", + "casbin": "^5.6.1", + "casbin-mongoose-adapter": "^5.3.0", + "casbin-sequelize-adapter": "^2.2.0", + "cookie": "^0.4.1", + "debug": "^4.3.1", + "deepmerge": "^4.2.2", + "fast-copy": "^2.1.1", + "googleapis": "^92.0.0", + "json-pointer": "^0.6.1", + "json-schema-ref-parser": "^9.0.7", + "json-schema-traverse": "^1.0.0", + "jsonwebtoken": "^8.5.1", + "mongoose": "^7.3.4", + "path-to-regexp": "^6.2.0", + "sequelize": "^6.12.5", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14" + } + }, "example/nodejs/node_modules/@viron/lib/node_modules/mongoose": { "version": "7.6.8", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.8.tgz", "integrity": "sha512-q9zAySH+UtOK5yonWyNcLfq3PxrY6s4gdta4qNGKNOE2yTVoY9FP4hQtvWYnv4rkdk7T8QmQMC7bbhJjDxIunw==", - "extraneous": true, "dependencies": { "bson": "^5.5.0", "kareem": "2.5.1", @@ -505,6 +530,14 @@ "@babel/core": "^7.0.0" } }, + "example/nodejs/node_modules/bson": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", + "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", + "engines": { + "node": ">=14.20.1" + } + }, "example/nodejs/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -1131,59 +1164,126 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "example/nodejs/node_modules/jose": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.7.tgz", - "integrity": "sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg==", + "example/nodejs/node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "dependencies": { - "@panva/asn1.js": "^1.0.0" + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" }, "engines": { - "node": ">=10.13.0 < 13 || >=13.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" + "node": ">=4", + "npm": ">=1.4.28" } }, - "example/nodejs/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "example/nodejs/node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "example/nodejs/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dependencies": { - "yallist": "^4.0.0" + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "example/nodejs/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "example/nodejs/node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "example/nodejs/node_modules/mongodb": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.1.tgz", + "integrity": "sha512-NBGA8AfJxGPeB12F73xXwozt8ZpeIPmCUeWRwl9xejozTXFes/3zaep9zhzs1B/nKKsw4P3I4iPfXl3K7s6g+Q==", + "dependencies": { + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" }, "engines": { - "node": ">=10" + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } } }, - "example/nodejs/node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "example/nodejs/node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", "engines": { - "node": ">= 6" + "node": ">=4.0.0" } }, - "example/nodejs/node_modules/openid-client": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz", - "integrity": "sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w==", + "example/nodejs/node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", "dependencies": { - "aggregate-error": "^3.1.0", - "got": "^11.8.0", - "jose": "^2.0.5", - "lru-cache": "^6.0.0", - "make-error": "^1.3.6", - "object-hash": "^2.0.1", - "oidc-token-hash": "^5.0.1" + "debug": "4.x" }, "engines": { - "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" + "node": ">=14.0.0" } }, + "example/nodejs/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "example/nodejs/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -1240,6 +1340,11 @@ "node": ">=10" } }, + "example/nodejs/node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "example/nodejs/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1360,11 +1465,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "example/nodejs/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "example/nodejs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", @@ -13076,6 +13176,15 @@ "node": ">=12.0.0" } }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz", + "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "dev": true, @@ -13241,14 +13350,6 @@ "node": ">=10" } }, - "node_modules/@panva/asn1.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", - "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@parcel/bundler-default": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", @@ -24902,6 +25003,126 @@ "minimatch": "^7.4.2" } }, + "node_modules/casbin-mongoose-adapter": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/casbin-mongoose-adapter/-/casbin-mongoose-adapter-5.3.1.tgz", + "integrity": "sha512-bF7Ff7kTedBrHkqFoBpFe222VzlNHack+3Gy8P/qaShCSBZHoVW2eN3HKK2A5rH4mjyK+NSY0CO7dP0/FsIEfg==", + "dependencies": { + "mongoose": "^7.3.4" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "casbin": "^5.13.2" + } + }, + "node_modules/casbin-mongoose-adapter/node_modules/bson": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", + "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/casbin-mongoose-adapter/node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/casbin-mongoose-adapter/node_modules/mongodb": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.1.tgz", + "integrity": "sha512-NBGA8AfJxGPeB12F73xXwozt8ZpeIPmCUeWRwl9xejozTXFes/3zaep9zhzs1B/nKKsw4P3I4iPfXl3K7s6g+Q==", + "dependencies": { + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/casbin-mongoose-adapter/node_modules/mongoose": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.8.tgz", + "integrity": "sha512-q9zAySH+UtOK5yonWyNcLfq3PxrY6s4gdta4qNGKNOE2yTVoY9FP4hQtvWYnv4rkdk7T8QmQMC7bbhJjDxIunw==", + "dependencies": { + "bson": "^5.5.0", + "kareem": "2.5.1", + "mongodb": "5.9.1", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/casbin-mongoose-adapter/node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/casbin-mongoose-adapter/node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/casbin-mongoose-adapter/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/casbin-mongoose-adapter/node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "node_modules/casbin-sequelize-adapter": { "version": "2.7.0", "dependencies": { @@ -26969,9 +27190,8 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "version": "7.0.3", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -39750,20 +39970,14 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", "dependencies": { "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", + "lodash": "^4.17.21", "ms": "^2.1.1", - "semver": "^7.5.4" + "semver": "^7.3.8" }, "engines": { "node": ">=12", @@ -40776,6 +40990,7 @@ }, "node_modules/make-error": { "version": "1.3.6", + "devOptional": true, "license": "ISC" }, "node_modules/makeerror": { @@ -45638,14 +45853,6 @@ "version": "1.1.2", "license": "MIT" }, - "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "engines": { - "node": "^10.13.0 || >=12.0.0" - } - }, "node_modules/on-exit-leak-free": { "version": "0.2.0", "license": "MIT" @@ -58554,7 +58761,7 @@ }, "packages/nodejs": { "name": "@viron/lib", - "version": "2.4.0-alpha.0", + "version": "2.3.1", "license": "MIT", "dependencies": { "@apidevtools/json-schema-ref-parser": "^11.1.0", @@ -58570,9 +58777,8 @@ "json-pointer": "^0.6.1", "json-schema-ref-parser": "^9.0.7", "json-schema-traverse": "^1.0.0", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "^9.0.0", "mongoose": "^7.3.4", - "openid-client": "^4.7.4", "path-to-regexp": "^6.2.0", "sequelize": "^6.12.5", "uuid": "^8.3.2" @@ -59696,20 +59902,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "packages/nodejs/node_modules/jose": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.7.tgz", - "integrity": "sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg==", - "dependencies": { - "@panva/asn1.js": "^1.0.0" - }, - "engines": { - "node": ">=10.13.0 < 13 || >=13.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "packages/nodejs/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -59729,17 +59921,6 @@ "node": ">=12.0.0" } }, - "packages/nodejs/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "packages/nodejs/node_modules/mongodb": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.6.0.tgz", @@ -59817,34 +59998,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "packages/nodejs/node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "engines": { - "node": ">= 6" - } - }, - "packages/nodejs/node_modules/openid-client": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.7.4.tgz", - "integrity": "sha512-n+RURXYuR0bBZo9i0pn+CXZSyg5JYQ1nbwEwPQvLE7EcJt/vMZ2iIMjLehl5DvCN53XUoPVZs9KAE5r6d9fxsw==", - "dependencies": { - "aggregate-error": "^3.1.0", - "got": "^11.8.0", - "jose": "^2.0.5", - "lru-cache": "^6.0.0", - "make-error": "^1.3.6", - "object-hash": "^2.0.1", - "oidc-token-hash": "^5.0.1" - }, - "engines": { - "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "packages/nodejs/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -60026,11 +60179,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "packages/nodejs/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "packages/nodejs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", diff --git a/packages/app/src/components/Skelton/index.tsx b/packages/app/src/components/Skelton/index.tsx index 32fa372ef..613340c58 100644 --- a/packages/app/src/components/Skelton/index.tsx +++ b/packages/app/src/components/Skelton/index.tsx @@ -16,7 +16,7 @@ const Skelton: React.FC = ({ 'rounded-full': variant === 'circular', rounded: variant === 'rounded', // For variant="text", adjust the height via font-size - "h-auto rounded before:content-['\\200B']": variant === 'text', + "h-auto rounded before:content-['\\00a0']": variant === 'text', }, `bg-thm-on-${on}-slight animate-pulse`, className diff --git a/packages/app/src/components/button/index.tsx b/packages/app/src/components/button/index.tsx index 428705126..d18e16f8d 100644 --- a/packages/app/src/components/button/index.tsx +++ b/packages/app/src/components/button/index.tsx @@ -55,7 +55,7 @@ const Button = function ({ size = SIZE.SM, data, onClick, - rounded = variant !== 'text', + rounded = variant === 'text' ? false : true, }: React.PropsWithChildren>): JSX.Element { return (