mirror of
https://github.com/logto-io/logto.git
synced 2025-03-31 22:51:25 -05:00
Merge pull request #2685 from logto-io/gao-refactor-schemas-export
refactor: schema export and id generator
This commit is contained in:
commit
cb159ac8bb
77 changed files with 121 additions and 135 deletions
|
@ -43,6 +43,7 @@
|
|||
"url": "https://github.com/logto-io/logto/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"@logto/core-kit": "workspace:*",
|
||||
"@logto/schemas": "workspace:*",
|
||||
"@logto/shared": "workspace:*",
|
||||
"@silverhand/essentials": "^1.3.0",
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
import { readdir, readFile } from 'fs/promises';
|
||||
import path from 'path';
|
||||
|
||||
import { logtoConfigGuards, LogtoOidcConfigKey, seeds } from '@logto/schemas';
|
||||
import { buildApplicationSecret } from '@logto/shared';
|
||||
import { generateStandardId } from '@logto/core-kit';
|
||||
import {
|
||||
logtoConfigGuards,
|
||||
LogtoOidcConfigKey,
|
||||
managementResource,
|
||||
defaultSignInExperience,
|
||||
createDefaultSetting,
|
||||
createDemoAppApplication,
|
||||
defaultRole,
|
||||
} from '@logto/schemas';
|
||||
import chalk from 'chalk';
|
||||
import type { DatabasePool, DatabaseTransactionConnection } from 'slonik';
|
||||
import { sql } from 'slonik';
|
||||
|
@ -40,21 +48,11 @@ const createTables = async (connection: DatabaseTransactionConnection) => {
|
|||
};
|
||||
|
||||
const seedTables = async (connection: DatabaseTransactionConnection) => {
|
||||
const {
|
||||
managementResource,
|
||||
defaultSignInExperience,
|
||||
createDefaultSetting,
|
||||
createDemoAppApplication,
|
||||
defaultRole,
|
||||
} = seeds;
|
||||
|
||||
await Promise.all([
|
||||
connection.query(insertInto(managementResource, 'resources')),
|
||||
connection.query(insertInto(createDefaultSetting(), 'settings')),
|
||||
connection.query(insertInto(defaultSignInExperience, 'sign_in_experiences')),
|
||||
connection.query(
|
||||
insertInto(createDemoAppApplication(buildApplicationSecret()), 'applications')
|
||||
),
|
||||
connection.query(insertInto(createDemoAppApplication(generateStandardId()), 'applications')),
|
||||
connection.query(insertInto(defaultRole, 'roles')),
|
||||
updateDatabaseTimestamp(connection, await getLatestAlterationTimestamp()),
|
||||
]);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { UserScope } from '@logto/core-kit';
|
||||
import { LogtoProvider } from '@logto/react';
|
||||
import { adminConsoleApplicationId, managementResource } from '@logto/schemas/lib/seeds';
|
||||
import { adminConsoleApplicationId, managementResource } from '@logto/schemas';
|
||||
import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
|
||||
import { SWRConfig } from 'swr';
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import type { Application } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Link } from 'react-router-dom';
|
||||
import useSWR from 'swr';
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import type { Application } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import useSWR from 'swr';
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { LogResult } from '@logto/schemas';
|
||||
import type { LogDto } from '@logto/schemas/lib/types/log-legacy.js';
|
||||
import type { LogDto } from '@logto/schemas/lib/types/log-legacy';
|
||||
import { conditional, conditionalString } from '@silverhand/essentials';
|
||||
import classNames from 'classnames';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { useLogto } from '@logto/react';
|
||||
import type { RequestErrorBody } from '@logto/schemas';
|
||||
import { managementResource } from '@logto/schemas/lib/seeds';
|
||||
import { managementResource } from '@logto/schemas';
|
||||
import ky from 'ky';
|
||||
import { useCallback, useMemo } from 'react';
|
||||
import { toast } from 'react-hot-toast';
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import type { Resource } from '@logto/schemas';
|
||||
import { AppearanceMode } from '@logto/schemas';
|
||||
import { managementResource } from '@logto/schemas/lib/seeds';
|
||||
import { AppearanceMode, managementResource } from '@logto/schemas';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { toast } from 'react-hot-toast';
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import type { User } from '@logto/schemas';
|
||||
import type { LogDto } from '@logto/schemas/lib/types/log-legacy.js';
|
||||
import type { LogDto } from '@logto/schemas/lib/types/log-legacy';
|
||||
import classNames from 'classnames';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useLocation, useParams } from 'react-router-dom';
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import type { AdminConsoleKey } from '@logto/phrases';
|
||||
import type { Application } from '@logto/schemas';
|
||||
import { AppearanceMode } from '@logto/schemas';
|
||||
import { demoAppApplicationId } from '@logto/schemas/lib/seeds';
|
||||
import { AppearanceMode, demoAppApplicationId } from '@logto/schemas';
|
||||
import { useMemo } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import useSWR from 'swr';
|
||||
|
|
10
packages/core/src/include.d/import-meta.d.ts
vendored
Normal file
10
packages/core/src/include.d/import-meta.d.ts
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
interface ImportMeta {
|
||||
jest: typeof jest & {
|
||||
// Almost same as `jest.mock()`, but factory is required
|
||||
unstable_mockModule: <T = unknown>(
|
||||
moduleName: string,
|
||||
factory: () => T,
|
||||
options?: jest.MockOptions
|
||||
) => typeof jest;
|
||||
};
|
||||
}
|
|
@ -1,11 +1,13 @@
|
|||
import { builtInLanguages } from '@logto/phrases-ui';
|
||||
import type { Branding, LanguageInfo, SignInExperience } from '@logto/schemas';
|
||||
import { SignInMode, ConnectorType, BrandingStyle } from '@logto/schemas';
|
||||
import {
|
||||
SignInMode,
|
||||
ConnectorType,
|
||||
BrandingStyle,
|
||||
adminConsoleApplicationId,
|
||||
adminConsoleSignInExperience,
|
||||
demoAppApplicationId,
|
||||
} from '@logto/schemas/lib/seeds/index.js';
|
||||
} from '@logto/schemas';
|
||||
import { deduplicate } from '@silverhand/essentials';
|
||||
import i18next from 'i18next';
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { buildIdGenerator } from '@logto/core-kit';
|
||||
import type { User, CreateUser } from '@logto/schemas';
|
||||
import { Users, UsersPasswordEncryptionMethod } from '@logto/schemas';
|
||||
import { buildIdGenerator } from '@logto/shared';
|
||||
import type { Nullable } from '@silverhand/essentials';
|
||||
import { deduplicate } from '@silverhand/essentials';
|
||||
import { argon2Verify } from 'hash-wasm';
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import type { IncomingHttpHeaders } from 'http';
|
||||
|
||||
import { UserRole } from '@logto/schemas';
|
||||
import { managementResource } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { UserRole, managementResource } from '@logto/schemas';
|
||||
import type { Optional } from '@silverhand/essentials';
|
||||
import { conditional } from '@silverhand/essentials';
|
||||
import { jwtVerify } from 'jose';
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { demoAppApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { demoAppApplicationId } from '@logto/schemas';
|
||||
import type { MiddlewareType } from 'koa';
|
||||
|
||||
import { findApplicationById } from '#src/queries/application.js';
|
||||
|
|
|
@ -30,6 +30,11 @@ export default function koaErrorHandler<StateT, ContextT, BodyT>(): Middleware<
|
|||
return;
|
||||
}
|
||||
|
||||
// Should log 500 errors in prod anyway
|
||||
if (envSet.values.isProduction) {
|
||||
console.error(error);
|
||||
}
|
||||
|
||||
ctx.status = 500;
|
||||
ctx.body = { message: 'Internal server error.' };
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import type { CreateApplication, OidcClientMetadata } from '@logto/schemas';
|
||||
import { ApplicationType } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId, demoAppApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { ApplicationType, adminConsoleApplicationId, demoAppApplicationId } from '@logto/schemas';
|
||||
import { tryThat } from '@logto/shared';
|
||||
import { deduplicate } from '@silverhand/essentials';
|
||||
import { addSeconds } from 'date-fns';
|
||||
|
|
|
@ -29,10 +29,11 @@ const { findApplicationById } = mockEsm('#src/queries/application.js', () => ({
|
|||
),
|
||||
}));
|
||||
|
||||
mockEsm('@logto/shared', () => ({
|
||||
// Cannot use `mockEsm()` here, pending investigation.
|
||||
jest.unstable_mockModule('@logto/core-kit', () => ({
|
||||
// eslint-disable-next-line unicorn/consistent-function-scoping
|
||||
buildIdGenerator: jest.fn(() => () => 'randomId'),
|
||||
buildApplicationSecret: jest.fn(() => 'randomId'),
|
||||
buildIdGenerator: () => () => 'randomId',
|
||||
generateStandardId: () => 'randomId',
|
||||
}));
|
||||
|
||||
const { createRequester } = await import('#src/utils/test-utils.js');
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { generateStandardId, buildIdGenerator } from '@logto/core-kit';
|
||||
import { Applications } from '@logto/schemas';
|
||||
import { buildApplicationSecret, buildIdGenerator } from '@logto/shared';
|
||||
import { object, string } from 'zod';
|
||||
|
||||
import koaGuard from '#src/middleware/koa-guard.js';
|
||||
|
@ -47,7 +47,7 @@ export default function applicationRoutes<T extends AuthedRouter>(router: T) {
|
|||
|
||||
ctx.body = await insertApplication({
|
||||
id: applicationId(),
|
||||
secret: buildApplicationSecret(),
|
||||
secret: generateStandardId(),
|
||||
oidcClientMetadata: buildOidcClientMetadata(oidcClientMetadata),
|
||||
...rest,
|
||||
});
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import { MessageTypes } from '@logto/connector-kit';
|
||||
import { emailRegEx, phoneRegEx } from '@logto/core-kit';
|
||||
import { emailRegEx, phoneRegEx, buildIdGenerator } from '@logto/core-kit';
|
||||
import type { ConnectorFactoryResponse, ConnectorResponse } from '@logto/schemas';
|
||||
import { arbitraryObjectGuard, Connectors, ConnectorType } from '@logto/schemas';
|
||||
import { buildIdGenerator } from '@logto/shared';
|
||||
import cleanDeep from 'clean-deep';
|
||||
import { object, string } from 'zod';
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { ConnectorType } from '@logto/connector-kit';
|
||||
import { Event } from '@logto/schemas';
|
||||
import { demoAppApplicationId } from '@logto/schemas/lib/seeds/application.js';
|
||||
import { Event, demoAppApplicationId } from '@logto/schemas';
|
||||
import { mockEsm, mockEsmDefault, mockEsmWithActual, pickDefault } from '@logto/shared/esm';
|
||||
|
||||
import { mockSignInExperience } from '#src/__mocks__/sign-in-experience.js';
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
import zhCN from '@logto/phrases-ui/lib/locales/zh-cn.js';
|
||||
import type { SignInExperience } from '@logto/schemas';
|
||||
import {
|
||||
adminConsoleApplicationId,
|
||||
adminConsoleSignInExperience,
|
||||
} from '@logto/schemas/lib/seeds/index.js';
|
||||
import { adminConsoleApplicationId, adminConsoleSignInExperience } from '@logto/schemas';
|
||||
import { mockEsm, mockEsmWithActual, pickDefault } from '@logto/shared/esm';
|
||||
|
||||
import { zhCnTag } from '#src/__mocks__/custom-phrase.js';
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
import { isBuiltInLanguageTag } from '@logto/phrases-ui';
|
||||
import {
|
||||
adminConsoleApplicationId,
|
||||
adminConsoleSignInExperience,
|
||||
} from '@logto/schemas/lib/seeds/index.js';
|
||||
import { adminConsoleApplicationId, adminConsoleSignInExperience } from '@logto/schemas';
|
||||
import type { Provider } from 'oidc-provider';
|
||||
|
||||
import detectLanguage from '#src/i18n/detect-language.js';
|
||||
|
|
|
@ -21,7 +21,8 @@ mockEsm('#src/queries/resource.js', () => ({
|
|||
deleteResourceById: jest.fn(),
|
||||
}));
|
||||
|
||||
mockEsm('@logto/shared', () => ({
|
||||
// Cannot use `mockEsm()` here, pending investigation.
|
||||
jest.unstable_mockModule('@logto/core-kit', () => ({
|
||||
// eslint-disable-next-line unicorn/consistent-function-scoping
|
||||
buildIdGenerator: () => () => 'randomId',
|
||||
}));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { buildIdGenerator } from '@logto/core-kit';
|
||||
import { Resources } from '@logto/schemas';
|
||||
import { buildIdGenerator } from '@logto/shared';
|
||||
import { object, string } from 'zod';
|
||||
|
||||
import koaGuard from '#src/middleware/koa-guard.js';
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import type { User } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas';
|
||||
import { Provider } from 'oidc-provider';
|
||||
|
||||
import { mockUser } from '#src/__mocks__/index.js';
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import path from 'path';
|
||||
|
||||
import type { LogtoErrorCode } from '@logto/phrases';
|
||||
import { UserRole } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { UserRole, adminConsoleApplicationId } from '@logto/schemas';
|
||||
import { conditional } from '@silverhand/essentials';
|
||||
import type { Provider } from 'oidc-provider';
|
||||
import { object, string } from 'zod';
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { SignInMode } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { SignInMode, adminConsoleApplicationId } from '@logto/schemas';
|
||||
import type { MiddlewareType } from 'koa';
|
||||
import type { Provider } from 'oidc-provider';
|
||||
import { errors } from 'oidc-provider';
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import type { User } from '@logto/schemas';
|
||||
import { UserRole, SignInIdentifier } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { UserRole, SignInIdentifier, adminConsoleApplicationId } from '@logto/schemas';
|
||||
import { Provider } from 'oidc-provider';
|
||||
|
||||
import { mockSignInExperience, mockUser } from '#src/__mocks__/index.js';
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { passwordRegEx, usernameRegEx } from '@logto/core-kit';
|
||||
import { SignInIdentifier, UserRole } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { SignInIdentifier, UserRole, adminConsoleApplicationId } from '@logto/schemas';
|
||||
import type { Provider } from 'oidc-provider';
|
||||
import { object, string } from 'zod';
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import { SignInMode } from '@logto/schemas';
|
||||
import {
|
||||
SignInMode,
|
||||
adminConsoleApplicationId,
|
||||
adminConsoleSignInExperience,
|
||||
} from '@logto/schemas/lib/seeds/index.js';
|
||||
} from '@logto/schemas';
|
||||
import { mockEsm, mockEsmWithActual, pickDefault } from '@logto/shared/esm';
|
||||
|
||||
import {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import type { ConnectorMetadata } from '@logto/connector-kit';
|
||||
import { ConnectorType } from '@logto/connector-kit';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas';
|
||||
import etag from 'etag';
|
||||
import type { Provider } from 'oidc-provider';
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import type { IdTokenClaims } from '@logto/react';
|
||||
import { LogtoProvider, useLogto, Prompt } from '@logto/react';
|
||||
import { demoAppApplicationId } from '@logto/schemas/lib/seeds';
|
||||
import { demoAppApplicationId } from '@logto/schemas';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import type { LogtoConfig } from '@logto/node';
|
||||
import LogtoClient from '@logto/node';
|
||||
import { demoAppApplicationId } from '@logto/schemas/lib/seeds/index.js';
|
||||
import { demoAppApplicationId } from '@logto/schemas';
|
||||
import type { Optional } from '@silverhand/essentials';
|
||||
import { assert } from '@silverhand/essentials';
|
||||
import { got } from 'got';
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { SignInIdentifier } from '@logto/schemas';
|
||||
import { demoAppApplicationId } from '@logto/schemas/lib/seeds';
|
||||
import { SignInIdentifier, demoAppApplicationId } from '@logto/schemas';
|
||||
import { assertEnv } from '@silverhand/essentials';
|
||||
|
||||
export const logtoUrl = assertEnv('INTEGRATION_TESTS_LOGTO_URL');
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { ApplicationType } from '@logto/schemas';
|
||||
import { demoAppApplicationId } from '@logto/schemas/lib/seeds';
|
||||
import { ApplicationType, demoAppApplicationId } from '@logto/schemas';
|
||||
import { HTTPError } from 'got';
|
||||
|
||||
import {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import path from 'path';
|
||||
|
||||
import { fetchTokenByRefreshToken } from '@logto/js';
|
||||
import { managementResource } from '@logto/schemas/lib/seeds';
|
||||
import { managementResource } from '@logto/schemas';
|
||||
import { assert } from '@silverhand/essentials';
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { managementResource } from '@logto/schemas/lib/seeds';
|
||||
import { managementResource } from '@logto/schemas';
|
||||
import { HTTPError } from 'got';
|
||||
|
||||
import { createResource, getResource, updateResource, deleteResource } from '#src/api/index.js';
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { SignInIdentifier } from '@logto/schemas';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds';
|
||||
import { SignInIdentifier, adminConsoleApplicationId } from '@logto/schemas';
|
||||
import { assert } from '@silverhand/essentials';
|
||||
|
||||
import {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { adminConsoleApplicationId } from '@logto/schemas/lib/seeds';
|
||||
import { adminConsoleApplicationId } from '@logto/schemas';
|
||||
import { assert } from '@silverhand/essentials';
|
||||
|
||||
import { getWellKnownSignInExperience } from '#src/api/index.js';
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const errors = {
|
||||
request: {
|
||||
invalid_input: 'Input is invalid. {{details}}', // UNTRANSLATED
|
||||
general: 'Request error occurred.', // UNTRANSLATED
|
||||
},
|
||||
auth: {
|
||||
authorization_header_missing: 'Autorisierungs-Header fehlt.',
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const errors = {
|
||||
request: {
|
||||
invalid_input: 'Input is invalid. {{details}}',
|
||||
general: 'Request error occurred.',
|
||||
},
|
||||
auth: {
|
||||
authorization_header_missing: 'Authorization header is missing.',
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const errors = {
|
||||
request: {
|
||||
invalid_input: 'Input is invalid. {{details}}', // UNTRANSLATED
|
||||
general: 'Request error occurred.', // UNTRANSLATED
|
||||
},
|
||||
auth: {
|
||||
authorization_header_missing: "L'en-tête d'autorisation est manquant.",
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const errors = {
|
||||
request: {
|
||||
invalid_input: 'Input is invalid. {{details}}', // UNTRANSLATED
|
||||
general: 'Request error occurred.', // UNTRANSLATED
|
||||
},
|
||||
auth: {
|
||||
authorization_header_missing: '인증 헤더가 존재하지 않아요.',
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const errors = {
|
||||
request: {
|
||||
invalid_input: 'Input is invalid. {{details}}', // UNTRANSLATED
|
||||
general: 'Request error occurred.', // UNTRANSLATED
|
||||
},
|
||||
auth: {
|
||||
authorization_header_missing: 'O cabeçalho de autorização está ausente.',
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const errors = {
|
||||
request: {
|
||||
invalid_input: 'Input is invalid. {{details}}', // UNTRANSLATED
|
||||
general: 'Request error occurred.', // UNTRANSLATED
|
||||
},
|
||||
auth: {
|
||||
authorization_header_missing: 'O cabeçalho de autorização está ausente.',
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const errors = {
|
||||
request: {
|
||||
invalid_input: 'Input is invalid. {{details}}', // UNTRANSLATED
|
||||
general: 'Request error occurred.', // UNTRANSLATED
|
||||
},
|
||||
auth: {
|
||||
authorization_header_missing: 'Yetkilendirme başlığı eksik.',
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const errors = {
|
||||
request: {
|
||||
invalid_input: 'Input is invalid. {{details}}', // UNTRANSLATED
|
||||
general: 'Request error occurred.', // UNTRANSLATED
|
||||
},
|
||||
auth: {
|
||||
authorization_header_missing: 'Authorization 请求头缺失。',
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
enum SignInMethodState {
|
||||
Primary = 'primary',
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -2,7 +2,7 @@ import { isSameArray } from '@silverhand/essentials';
|
|||
import type { DatabaseTransactionConnection } from 'slonik';
|
||||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
enum DeprecatedSignUpIdentifier {
|
||||
Email = 'email',
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
const alteration: AlterationScript = {
|
||||
up: async (pool) => {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import type { DatabaseTransactionConnection } from 'slonik';
|
||||
import { sql } from 'slonik';
|
||||
|
||||
import type { AlterationScript } from '../lib/types/alteration.js';
|
||||
import type { AlterationScript } from '../src/types/alteration.js';
|
||||
|
||||
type DeprecatedTermsOfUse = {
|
||||
enabled: boolean;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
{
|
||||
"name": "@logto/schemas",
|
||||
"version": "1.0.0-beta.16",
|
||||
"main": "lib/index.js",
|
||||
"author": "Silverhand Inc. <contact@silverhand.io>",
|
||||
"license": "MPL-2.0",
|
||||
"type": "module",
|
||||
|
@ -11,6 +10,13 @@
|
|||
"alterations-js",
|
||||
"tables"
|
||||
],
|
||||
"main": "./lib/index.js",
|
||||
"exports": {
|
||||
".": "./lib/index.js",
|
||||
"./lib/*": "./lib/*",
|
||||
"./models": "./lib/models/index.js",
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
|
@ -55,7 +61,9 @@
|
|||
"rules": {
|
||||
"@typescript-eslint/ban-types": "off"
|
||||
},
|
||||
"ignorePatterns": ["src/db-entries/"],
|
||||
"ignorePatterns": [
|
||||
"src/db-entries/"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
|
|
|
@ -2,4 +2,4 @@ export * from './foundations/index.js';
|
|||
export * from './db-entries/index.js';
|
||||
export * from './types/index.js';
|
||||
export * from './api/index.js';
|
||||
export * as seeds from './seeds/index.js';
|
||||
export * from './seeds/index.js';
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"extends": "./tsconfig",
|
||||
"include": ["src"],
|
||||
"include": ["src", "src-models"],
|
||||
"exclude": ["src/gen"]
|
||||
}
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
import { customAlphabet } from 'nanoid';
|
||||
|
||||
export const alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
||||
|
||||
export const buildIdGenerator = (size: number) => customAlphabet(alphabet, size);
|
||||
|
||||
export const buildApplicationSecret = buildIdGenerator(21);
|
|
@ -1,3 +1,2 @@
|
|||
export * from './id.js';
|
||||
export * from './function.js';
|
||||
export { default as findPackage } from './find-package.js';
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"node": "^16.13.0 || ^18.12.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@logto/language-kit": "^1.0.0-beta.29",
|
||||
"@logto/language-kit": "workspace:*",
|
||||
"color": "^4.2.3",
|
||||
"nanoid": "^4.0.0"
|
||||
},
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { buildIdGenerator, alphabet } from './id.js';
|
||||
import { buildIdGenerator } from './id.js';
|
||||
|
||||
describe('id generator', () => {
|
||||
it('should match the input length', () => {
|
||||
|
@ -12,12 +12,4 @@ describe('id generator', () => {
|
|||
|
||||
expect(id_1).not.toEqual(id_2);
|
||||
});
|
||||
|
||||
it('should only contains provided alphabets', () => {
|
||||
const id = buildIdGenerator(20)();
|
||||
|
||||
for (const char of id) {
|
||||
expect(alphabet.includes(char)).toBeTruthy();
|
||||
}
|
||||
});
|
||||
});
|
6
packages/toolkit/core-kit/src/utilities/id.ts
Normal file
6
packages/toolkit/core-kit/src/utilities/id.ts
Normal file
|
@ -0,0 +1,6 @@
|
|||
import { customAlphabet } from 'nanoid';
|
||||
|
||||
const alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
||||
|
||||
export const buildIdGenerator = (size: number) => customAlphabet(alphabet, size);
|
||||
export const generateStandardId = buildIdGenerator(21);
|
|
@ -1,4 +1,4 @@
|
|||
export * from './color.js';
|
||||
export * from './string.js';
|
||||
export * from './id.js';
|
||||
export * from './zod.js';
|
||||
export * from './url.js';
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
import { generateRandomString } from './string.js';
|
||||
|
||||
describe('generateRandomString', () => {
|
||||
it('should return a random string with specified length', () => {
|
||||
const randomString = generateRandomString(32);
|
||||
expect(randomString).toHaveLength(32);
|
||||
});
|
||||
|
||||
it('should contain only 0-9, A-Z and a-z by default', () => {
|
||||
const randomString = generateRandomString(32);
|
||||
expect(() => {
|
||||
/[\dA-Za-z]/.test(randomString);
|
||||
}).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,6 +0,0 @@
|
|||
import { customAlphabet } from 'nanoid';
|
||||
|
||||
export const generateRandomString = (
|
||||
size: number,
|
||||
alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
|
||||
): string => customAlphabet(alphabet, size)();
|
4
pnpm-lock.yaml
generated
4
pnpm-lock.yaml
generated
|
@ -23,6 +23,7 @@ importers:
|
|||
|
||||
packages/cli:
|
||||
specifiers:
|
||||
'@logto/core-kit': workspace:*
|
||||
'@logto/schemas': workspace:*
|
||||
'@logto/shared': workspace:*
|
||||
'@silverhand/eslint-config': 1.3.0
|
||||
|
@ -62,6 +63,7 @@ importers:
|
|||
yargs: ^17.6.0
|
||||
zod: ^3.20.2
|
||||
dependencies:
|
||||
'@logto/core-kit': link:../toolkit/core-kit
|
||||
'@logto/schemas': link:../schemas
|
||||
'@logto/shared': link:../shared
|
||||
'@silverhand/essentials': 1.3.0
|
||||
|
@ -682,7 +684,7 @@ importers:
|
|||
packages/toolkit/core-kit:
|
||||
specifiers:
|
||||
'@jest/types': ^29.0.3
|
||||
'@logto/language-kit': ^1.0.0-beta.29
|
||||
'@logto/language-kit': workspace:*
|
||||
'@rollup/plugin-typescript': ^10.0.1
|
||||
'@silverhand/eslint-config': 1.3.0
|
||||
'@silverhand/eslint-config-react': 1.3.0
|
||||
|
|
Loading…
Add table
Reference in a new issue