@graphoria/server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +10 -0
- package/README.md +129 -0
- package/cli.ts +105 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/src/ai/agent/agent.d.ts +37 -0
- package/dist/src/ai/agent/agent.d.ts.map +1 -0
- package/dist/src/ai/agent/index.d.ts +3 -0
- package/dist/src/ai/agent/index.d.ts.map +1 -0
- package/dist/src/ai/agent/providers/anthropic.d.ts +10 -0
- package/dist/src/ai/agent/providers/anthropic.d.ts.map +1 -0
- package/dist/src/ai/agent/providers/index.d.ts +8 -0
- package/dist/src/ai/agent/providers/index.d.ts.map +1 -0
- package/dist/src/ai/agent/providers/ollama.d.ts +11 -0
- package/dist/src/ai/agent/providers/ollama.d.ts.map +1 -0
- package/dist/src/ai/agent/providers/openai.d.ts +14 -0
- package/dist/src/ai/agent/providers/openai.d.ts.map +1 -0
- package/dist/src/ai/agent/types.d.ts +51 -0
- package/dist/src/ai/agent/types.d.ts.map +1 -0
- package/dist/src/ai/ask-field.test.d.ts +2 -0
- package/dist/src/ai/ask-field.test.d.ts.map +1 -0
- package/dist/src/ai/index.d.ts +7 -0
- package/dist/src/ai/index.d.ts.map +1 -0
- package/dist/src/ai/mcp/create-server.d.ts +14 -0
- package/dist/src/ai/mcp/create-server.d.ts.map +1 -0
- package/dist/src/ai/mcp/create-server.test.d.ts +2 -0
- package/dist/src/ai/mcp/create-server.test.d.ts.map +1 -0
- package/dist/src/ai/mcp/index.d.ts +13 -0
- package/dist/src/ai/mcp/index.d.ts.map +1 -0
- package/dist/src/ai/mcp/index.test.d.ts +2 -0
- package/dist/src/ai/mcp/index.test.d.ts.map +1 -0
- package/dist/src/ai/mcp/instructions.d.ts +2 -0
- package/dist/src/ai/mcp/instructions.d.ts.map +1 -0
- package/dist/src/ai/tools/agent.d.ts +4 -0
- package/dist/src/ai/tools/agent.d.ts.map +1 -0
- package/dist/src/ai/tools/agent.test.d.ts +2 -0
- package/dist/src/ai/tools/agent.test.d.ts.map +1 -0
- package/dist/src/ai/tools/core.d.ts +75 -0
- package/dist/src/ai/tools/core.d.ts.map +1 -0
- package/dist/src/ai/tools/query-data.d.ts +35 -0
- package/dist/src/ai/tools/query-data.d.ts.map +1 -0
- package/dist/src/analyzeQuery/analyzers/fragmentAnalyzer.d.ts +5 -0
- package/dist/src/analyzeQuery/analyzers/fragmentAnalyzer.d.ts.map +1 -0
- package/dist/src/analyzeQuery/analyzers/operationAnalyzer.d.ts +6 -0
- package/dist/src/analyzeQuery/analyzers/operationAnalyzer.d.ts.map +1 -0
- package/dist/src/analyzeQuery/analyzers/selectionAnalyzer.d.ts +6 -0
- package/dist/src/analyzeQuery/analyzers/selectionAnalyzer.d.ts.map +1 -0
- package/dist/src/analyzeQuery/analyzers/variableAnalyzer.d.ts +4 -0
- package/dist/src/analyzeQuery/analyzers/variableAnalyzer.d.ts.map +1 -0
- package/dist/src/analyzeQuery/depthLimit.d.ts +16 -0
- package/dist/src/analyzeQuery/depthLimit.d.ts.map +1 -0
- package/dist/src/analyzeQuery/depthLimit.test.d.ts +2 -0
- package/dist/src/analyzeQuery/depthLimit.test.d.ts.map +1 -0
- package/dist/src/analyzeQuery/directiveUtils.d.ts +4 -0
- package/dist/src/analyzeQuery/directiveUtils.d.ts.map +1 -0
- package/dist/src/analyzeQuery/directiveUtils.test.d.ts +2 -0
- package/dist/src/analyzeQuery/directiveUtils.test.d.ts.map +1 -0
- package/dist/src/analyzeQuery/index.d.ts +5 -0
- package/dist/src/analyzeQuery/index.d.ts.map +1 -0
- package/dist/src/analyzeQuery/index.test.d.ts +2 -0
- package/dist/src/analyzeQuery/index.test.d.ts.map +1 -0
- package/dist/src/analyzeQuery/resolveVariables.d.ts +71 -0
- package/dist/src/analyzeQuery/resolveVariables.d.ts.map +1 -0
- package/dist/src/analyzeQuery/resolveVariables.test.d.ts +2 -0
- package/dist/src/analyzeQuery/resolveVariables.test.d.ts.map +1 -0
- package/dist/src/analyzeQuery/staticValues.test.d.ts +2 -0
- package/dist/src/analyzeQuery/staticValues.test.d.ts.map +1 -0
- package/dist/src/analyzeQuery/typeUtils.d.ts +9 -0
- package/dist/src/analyzeQuery/typeUtils.d.ts.map +1 -0
- package/dist/src/analyzeQuery/types.d.ts +54 -0
- package/dist/src/analyzeQuery/types.d.ts.map +1 -0
- package/dist/src/analyzeQuery/valueExtractors.d.ts +4 -0
- package/dist/src/analyzeQuery/valueExtractors.d.ts.map +1 -0
- package/dist/src/authentication/duration.d.ts +14 -0
- package/dist/src/authentication/duration.d.ts.map +1 -0
- package/dist/src/authentication/duration.test.d.ts +2 -0
- package/dist/src/authentication/duration.test.d.ts.map +1 -0
- package/dist/src/authentication/index.d.ts +4 -0
- package/dist/src/authentication/index.d.ts.map +1 -0
- package/dist/src/authentication/index.test.d.ts +2 -0
- package/dist/src/authentication/index.test.d.ts.map +1 -0
- package/dist/src/authentication/jwt.d.ts +10 -0
- package/dist/src/authentication/jwt.d.ts.map +1 -0
- package/dist/src/authentication/jwt.test.d.ts +2 -0
- package/dist/src/authentication/jwt.test.d.ts.map +1 -0
- package/dist/src/authentication/paseto.d.ts +7 -0
- package/dist/src/authentication/paseto.d.ts.map +1 -0
- package/dist/src/authentication/paseto.test.d.ts +2 -0
- package/dist/src/authentication/paseto.test.d.ts.map +1 -0
- package/dist/src/authentication/tokenRepository.d.ts +14 -0
- package/dist/src/authentication/tokenRepository.d.ts.map +1 -0
- package/dist/src/authentication/tokenRepository.test.d.ts +2 -0
- package/dist/src/authentication/tokenRepository.test.d.ts.map +1 -0
- package/dist/src/authentication/types.d.ts +42 -0
- package/dist/src/authentication/types.d.ts.map +1 -0
- package/dist/src/cli/seedAuth.d.ts +4 -0
- package/dist/src/cli/seedAuth.d.ts.map +1 -0
- package/dist/src/cli/seedAuth.test.d.ts +2 -0
- package/dist/src/cli/seedAuth.test.d.ts.map +1 -0
- package/dist/src/cli/seedAuthArgs.d.ts +9 -0
- package/dist/src/cli/seedAuthArgs.d.ts.map +1 -0
- package/dist/src/config/helpers/cronHelper.d.ts +21 -0
- package/dist/src/config/helpers/cronHelper.d.ts.map +1 -0
- package/dist/src/config/helpers/cronHelper.test.d.ts +2 -0
- package/dist/src/config/helpers/cronHelper.test.d.ts.map +1 -0
- package/dist/src/config/helpers/index.d.ts +4 -0
- package/dist/src/config/helpers/index.d.ts.map +1 -0
- package/dist/src/config/helpers/operationHelper.d.ts +44 -0
- package/dist/src/config/helpers/operationHelper.d.ts.map +1 -0
- package/dist/src/config/helpers/queueHelper.d.ts +20 -0
- package/dist/src/config/helpers/queueHelper.d.ts.map +1 -0
- package/dist/src/config/helpers/queueHelper.test.d.ts +2 -0
- package/dist/src/config/helpers/queueHelper.test.d.ts.map +1 -0
- package/dist/src/config/index.d.ts +236 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/types/ai.d.ts +29 -0
- package/dist/src/config/types/ai.d.ts.map +1 -0
- package/dist/src/config/types/auth.d.ts +112 -0
- package/dist/src/config/types/auth.d.ts.map +1 -0
- package/dist/src/config/types/configuration.d.ts +61 -0
- package/dist/src/config/types/configuration.d.ts.map +1 -0
- package/dist/src/config/types/cron.d.ts +81 -0
- package/dist/src/config/types/cron.d.ts.map +1 -0
- package/dist/src/config/types/db.d.ts +210 -0
- package/dist/src/config/types/db.d.ts.map +1 -0
- package/dist/src/config/types/index.d.ts +17 -0
- package/dist/src/config/types/index.d.ts.map +1 -0
- package/dist/src/config/types/operation.d.ts +226 -0
- package/dist/src/config/types/operation.d.ts.map +1 -0
- package/dist/src/config/types/queue.d.ts +142 -0
- package/dist/src/config/types/queue.d.ts.map +1 -0
- package/dist/src/config/types/remote-rest.d.ts +18 -0
- package/dist/src/config/types/remote-rest.d.ts.map +1 -0
- package/dist/src/config/types/remote-schema.d.ts +27 -0
- package/dist/src/config/types/remote-schema.d.ts.map +1 -0
- package/dist/src/config/types/virtual-columns.d.ts +89 -0
- package/dist/src/config/types/virtual-columns.d.ts.map +1 -0
- package/dist/src/config/types/virtual-columns.test.d.ts +2 -0
- package/dist/src/config/types/virtual-columns.test.d.ts.map +1 -0
- package/dist/src/configuration/getSchemas/index.d.ts +867 -0
- package/dist/src/configuration/getSchemas/index.d.ts.map +1 -0
- package/dist/src/configuration/getSchemas/mergeEntities/index.d.ts +412 -0
- package/dist/src/configuration/getSchemas/mergeEntities/index.d.ts.map +1 -0
- package/dist/src/configuration/getSchemas/type-definition-generator/index.d.ts +16 -0
- package/dist/src/configuration/getSchemas/type-definition-generator/index.d.ts.map +1 -0
- package/dist/src/configuration/getSchemas/type-definition-generator/index.test.d.ts +2 -0
- package/dist/src/configuration/getSchemas/type-definition-generator/index.test.d.ts.map +1 -0
- package/dist/src/configuration/gql/buildExecute.d.ts +31 -0
- package/dist/src/configuration/gql/buildExecute.d.ts.map +1 -0
- package/dist/src/configuration/gql/buildExecute.test.d.ts +2 -0
- package/dist/src/configuration/gql/buildExecute.test.d.ts.map +1 -0
- package/dist/src/configuration/gql/gqlAuthOperations.d.ts +9 -0
- package/dist/src/configuration/gql/gqlAuthOperations.d.ts.map +1 -0
- package/dist/src/configuration/gql/gqlAuthOperations.test.d.ts +2 -0
- package/dist/src/configuration/gql/gqlAuthOperations.test.d.ts.map +1 -0
- package/dist/src/configuration/gql/handleGraphQLRequestFactory.d.ts +28 -0
- package/dist/src/configuration/gql/handleGraphQLRequestFactory.d.ts.map +1 -0
- package/dist/src/configuration/gql/handleGraphQLRequestFactory.test.d.ts +2 -0
- package/dist/src/configuration/gql/handleGraphQLRequestFactory.test.d.ts.map +1 -0
- package/dist/src/configuration/gql/handleGraphQLSubscriptionFactory.d.ts +19 -0
- package/dist/src/configuration/gql/handleGraphQLSubscriptionFactory.d.ts.map +1 -0
- package/dist/src/configuration/index.d.ts +719 -0
- package/dist/src/configuration/index.d.ts.map +1 -0
- package/dist/src/configuration/rest/generateOpenAPI.d.ts +19 -0
- package/dist/src/configuration/rest/generateOpenAPI.d.ts.map +1 -0
- package/dist/src/configuration/rest/handleRESTRequestFactory.d.ts +12 -0
- package/dist/src/configuration/rest/handleRESTRequestFactory.d.ts.map +1 -0
- package/dist/src/configuration/rest/handleRESTRequestFactory.test.d.ts +2 -0
- package/dist/src/configuration/rest/handleRESTRequestFactory.test.d.ts.map +1 -0
- package/dist/src/configuration/rest/index.d.ts +20 -0
- package/dist/src/configuration/rest/index.d.ts.map +1 -0
- package/dist/src/configuration/rest/openApiErrors.d.ts +71 -0
- package/dist/src/configuration/rest/openApiErrors.d.ts.map +1 -0
- package/dist/src/console/App.d.ts +3 -0
- package/dist/src/console/App.d.ts.map +1 -0
- package/dist/src/console/Login.d.ts +6 -0
- package/dist/src/console/Login.d.ts.map +1 -0
- package/dist/src/console/api.d.ts +17 -0
- package/dist/src/console/api.d.ts.map +1 -0
- package/dist/src/console/api.test.d.ts +2 -0
- package/dist/src/console/api.test.d.ts.map +1 -0
- package/dist/src/console/client.d.ts +67 -0
- package/dist/src/console/client.d.ts.map +1 -0
- package/dist/src/console/frontend.d.ts +8 -0
- package/dist/src/console/frontend.d.ts.map +1 -0
- package/dist/src/console/pages/ConfigPage.d.ts +2 -0
- package/dist/src/console/pages/ConfigPage.d.ts.map +1 -0
- package/dist/src/console/pages/RolesPage.d.ts +2 -0
- package/dist/src/console/pages/RolesPage.d.ts.map +1 -0
- package/dist/src/console/pages/StatusPage.d.ts +2 -0
- package/dist/src/console/pages/StatusPage.d.ts.map +1 -0
- package/dist/src/console/pages/TablesPage.d.ts +2 -0
- package/dist/src/console/pages/TablesPage.d.ts.map +1 -0
- package/dist/src/console/useApi.d.ts +8 -0
- package/dist/src/console/useApi.d.ts.map +1 -0
- package/dist/src/cron/index.d.ts +63 -0
- package/dist/src/cron/index.d.ts.map +1 -0
- package/dist/src/databases/auth/auth-operations.d.ts +11 -0
- package/dist/src/databases/auth/auth-operations.d.ts.map +1 -0
- package/dist/src/databases/auth/password.d.ts +3 -0
- package/dist/src/databases/auth/password.d.ts.map +1 -0
- package/dist/src/databases/auth/password.test.d.ts +2 -0
- package/dist/src/databases/auth/password.test.d.ts.map +1 -0
- package/dist/src/databases/common.d.ts +53 -0
- package/dist/src/databases/common.d.ts.map +1 -0
- package/dist/src/databases/common.test.d.ts +2 -0
- package/dist/src/databases/common.test.d.ts.map +1 -0
- package/dist/src/databases/core/executor.d.ts +10 -0
- package/dist/src/databases/core/executor.d.ts.map +1 -0
- package/dist/src/databases/core/executor.test.d.ts +2 -0
- package/dist/src/databases/core/executor.test.d.ts.map +1 -0
- package/dist/src/databases/core/function-mapping.d.ts +38 -0
- package/dist/src/databases/core/function-mapping.d.ts.map +1 -0
- package/dist/src/databases/core/identifier.d.ts +2 -0
- package/dist/src/databases/core/identifier.d.ts.map +1 -0
- package/dist/src/databases/core/identifier.test.d.ts +2 -0
- package/dist/src/databases/core/identifier.test.d.ts.map +1 -0
- package/dist/src/databases/core/query-builder.d.ts +64 -0
- package/dist/src/databases/core/query-builder.d.ts.map +1 -0
- package/dist/src/databases/core/query-builder.test.d.ts +2 -0
- package/dist/src/databases/core/query-builder.test.d.ts.map +1 -0
- package/dist/src/databases/directives.d.ts +16 -0
- package/dist/src/databases/directives.d.ts.map +1 -0
- package/dist/src/databases/directives.test.d.ts +2 -0
- package/dist/src/databases/directives.test.d.ts.map +1 -0
- package/dist/src/databases/engines/mssql/auth.d.ts +9 -0
- package/dist/src/databases/engines/mssql/auth.d.ts.map +1 -0
- package/dist/src/databases/engines/mssql/auth.test.d.ts +2 -0
- package/dist/src/databases/engines/mssql/auth.test.d.ts.map +1 -0
- package/dist/src/databases/engines/mssql/connection.d.ts +14 -0
- package/dist/src/databases/engines/mssql/connection.d.ts.map +1 -0
- package/dist/src/databases/engines/mssql/format.d.ts +5 -0
- package/dist/src/databases/engines/mssql/format.d.ts.map +1 -0
- package/dist/src/databases/engines/mssql/getStructure.d.ts +48 -0
- package/dist/src/databases/engines/mssql/getStructure.d.ts.map +1 -0
- package/dist/src/databases/engines/mssql/getViews.d.ts +7 -0
- package/dist/src/databases/engines/mssql/getViews.d.ts.map +1 -0
- package/dist/src/databases/engines/mssql/query/index.d.ts +7 -0
- package/dist/src/databases/engines/mssql/query/index.d.ts.map +1 -0
- package/dist/src/databases/engines/mssql/query/index.test.d.ts +2 -0
- package/dist/src/databases/engines/mssql/query/index.test.d.ts.map +1 -0
- package/dist/src/databases/engines/mysql/auth.d.ts +9 -0
- package/dist/src/databases/engines/mysql/auth.d.ts.map +1 -0
- package/dist/src/databases/engines/mysql/auth.test.d.ts +2 -0
- package/dist/src/databases/engines/mysql/auth.test.d.ts.map +1 -0
- package/dist/src/databases/engines/mysql/connection.d.ts +14 -0
- package/dist/src/databases/engines/mysql/connection.d.ts.map +1 -0
- package/dist/src/databases/engines/mysql/format.d.ts +5 -0
- package/dist/src/databases/engines/mysql/format.d.ts.map +1 -0
- package/dist/src/databases/engines/mysql/getStructure.d.ts +48 -0
- package/dist/src/databases/engines/mysql/getStructure.d.ts.map +1 -0
- package/dist/src/databases/engines/mysql/getViews.d.ts +7 -0
- package/dist/src/databases/engines/mysql/getViews.d.ts.map +1 -0
- package/dist/src/databases/engines/mysql/query/index.d.ts +7 -0
- package/dist/src/databases/engines/mysql/query/index.d.ts.map +1 -0
- package/dist/src/databases/engines/mysql/query/index.test.d.ts +2 -0
- package/dist/src/databases/engines/mysql/query/index.test.d.ts.map +1 -0
- package/dist/src/databases/engines/postgresql/auth.d.ts +9 -0
- package/dist/src/databases/engines/postgresql/auth.d.ts.map +1 -0
- package/dist/src/databases/engines/postgresql/auth.test.d.ts +2 -0
- package/dist/src/databases/engines/postgresql/auth.test.d.ts.map +1 -0
- package/dist/src/databases/engines/postgresql/connection.d.ts +14 -0
- package/dist/src/databases/engines/postgresql/connection.d.ts.map +1 -0
- package/dist/src/databases/engines/postgresql/format.d.ts +5 -0
- package/dist/src/databases/engines/postgresql/format.d.ts.map +1 -0
- package/dist/src/databases/engines/postgresql/getStructure.d.ts +48 -0
- package/dist/src/databases/engines/postgresql/getStructure.d.ts.map +1 -0
- package/dist/src/databases/engines/postgresql/getViews.d.ts +7 -0
- package/dist/src/databases/engines/postgresql/getViews.d.ts.map +1 -0
- package/dist/src/databases/engines/postgresql/query/index.d.ts +7 -0
- package/dist/src/databases/engines/postgresql/query/index.d.ts.map +1 -0
- package/dist/src/databases/engines/postgresql/query/index.test.d.ts +2 -0
- package/dist/src/databases/engines/postgresql/query/index.test.d.ts.map +1 -0
- package/dist/src/databases/engines/shared/claims.d.ts +2 -0
- package/dist/src/databases/engines/shared/claims.d.ts.map +1 -0
- package/dist/src/databases/engines/shared/types.d.ts +8 -0
- package/dist/src/databases/engines/shared/types.d.ts.map +1 -0
- package/dist/src/databases/high-level-operations.d.ts +146 -0
- package/dist/src/databases/high-level-operations.d.ts.map +1 -0
- package/dist/src/databases/high-level-operations.test.d.ts +2 -0
- package/dist/src/databases/high-level-operations.test.d.ts.map +1 -0
- package/dist/src/databases/index.d.ts +8 -0
- package/dist/src/databases/index.d.ts.map +1 -0
- package/dist/src/databases/metadata/structure.d.ts +56 -0
- package/dist/src/databases/metadata/structure.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/convert.d.ts +2 -0
- package/dist/src/databases/schemaBuilder/convert.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/generateCreateTable/index.d.ts +15 -0
- package/dist/src/databases/schemaBuilder/generateCreateTable/index.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/generateCreateTable/index.test.d.ts +2 -0
- package/dist/src/databases/schemaBuilder/generateCreateTable/index.test.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/generateCreateView/index.d.ts +18 -0
- package/dist/src/databases/schemaBuilder/generateCreateView/index.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/generateInsert/index.d.ts +8 -0
- package/dist/src/databases/schemaBuilder/generateInsert/index.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/generateInsert/index.test.d.ts +2 -0
- package/dist/src/databases/schemaBuilder/generateInsert/index.test.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/generateSchemaCreation/index.d.ts +7 -0
- package/dist/src/databases/schemaBuilder/generateSchemaCreation/index.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/generateSchemaCreation/index.test.d.ts +2 -0
- package/dist/src/databases/schemaBuilder/generateSchemaCreation/index.test.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/mssqlToPostgres/convertView.d.ts +2 -0
- package/dist/src/databases/schemaBuilder/mssqlToPostgres/convertView.d.ts.map +1 -0
- package/dist/src/databases/schemaBuilder/utils.d.ts +8 -0
- package/dist/src/databases/schemaBuilder/utils.d.ts.map +1 -0
- package/dist/src/databases/sqlTypeUtils.d.ts +24 -0
- package/dist/src/databases/sqlTypeUtils.d.ts.map +1 -0
- package/dist/src/databases/sqlTypeUtils.test.d.ts +2 -0
- package/dist/src/databases/sqlTypeUtils.test.d.ts.map +1 -0
- package/dist/src/databases/transformers/data-transformers.d.ts +215 -0
- package/dist/src/databases/transformers/data-transformers.d.ts.map +1 -0
- package/dist/src/databases/transformers/data-transformers.test.d.ts +2 -0
- package/dist/src/databases/transformers/data-transformers.test.d.ts.map +1 -0
- package/dist/src/databases/transformers/genResolverName.d.ts +2 -0
- package/dist/src/databases/transformers/genResolverName.d.ts.map +1 -0
- package/dist/src/databases/transformers/genResolverName.test.d.ts +2 -0
- package/dist/src/databases/transformers/genResolverName.test.d.ts.map +1 -0
- package/dist/src/index.d.ts +139 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/logging/index.d.ts +21 -0
- package/dist/src/logging/index.d.ts.map +1 -0
- package/dist/src/queues/kafka.d.ts +22 -0
- package/dist/src/queues/kafka.d.ts.map +1 -0
- package/dist/src/queues/rabbitmq.d.ts +34 -0
- package/dist/src/queues/rabbitmq.d.ts.map +1 -0
- package/dist/src/queues/rabbitmq.test.d.ts +2 -0
- package/dist/src/queues/rabbitmq.test.d.ts.map +1 -0
- package/dist/src/remoteREST/index.d.ts +13 -0
- package/dist/src/remoteREST/index.d.ts.map +1 -0
- package/dist/src/remoteREST/parse.d.ts +8 -0
- package/dist/src/remoteREST/parse.d.ts.map +1 -0
- package/dist/src/remoteREST/parse.test.d.ts +2 -0
- package/dist/src/remoteREST/parse.test.d.ts.map +1 -0
- package/dist/src/remoteREST/proxy.d.ts +6 -0
- package/dist/src/remoteREST/proxy.d.ts.map +1 -0
- package/dist/src/remoteREST/proxy.test.d.ts +2 -0
- package/dist/src/remoteREST/proxy.test.d.ts.map +1 -0
- package/dist/src/remoteREST/transform.d.ts +8 -0
- package/dist/src/remoteREST/transform.d.ts.map +1 -0
- package/dist/src/remoteREST/transform.test.d.ts +2 -0
- package/dist/src/remoteREST/transform.test.d.ts.map +1 -0
- package/dist/src/remoteREST/types.d.ts +37 -0
- package/dist/src/remoteREST/types.d.ts.map +1 -0
- package/dist/src/remoteSchemas/index.d.ts +13 -0
- package/dist/src/remoteSchemas/index.d.ts.map +1 -0
- package/dist/src/remoteSchemas/introspect.d.ts +7 -0
- package/dist/src/remoteSchemas/introspect.d.ts.map +1 -0
- package/dist/src/remoteSchemas/introspect.test.d.ts +2 -0
- package/dist/src/remoteSchemas/introspect.test.d.ts.map +1 -0
- package/dist/src/remoteSchemas/proxy.d.ts +7 -0
- package/dist/src/remoteSchemas/proxy.d.ts.map +1 -0
- package/dist/src/remoteSchemas/proxy.test.d.ts +2 -0
- package/dist/src/remoteSchemas/proxy.test.d.ts.map +1 -0
- package/dist/src/remoteSchemas/transform.d.ts +9 -0
- package/dist/src/remoteSchemas/transform.d.ts.map +1 -0
- package/dist/src/remoteSchemas/transform.test.d.ts +2 -0
- package/dist/src/remoteSchemas/transform.test.d.ts.map +1 -0
- package/dist/src/remoteSchemas/types.d.ts +41 -0
- package/dist/src/remoteSchemas/types.d.ts.map +1 -0
- package/dist/src/singletons/ai.d.ts +25 -0
- package/dist/src/singletons/ai.d.ts.map +1 -0
- package/dist/src/singletons/ai.test.d.ts +2 -0
- package/dist/src/singletons/ai.test.d.ts.map +1 -0
- package/dist/src/singletons/authentication.d.ts +4 -0
- package/dist/src/singletons/authentication.d.ts.map +1 -0
- package/dist/src/singletons/cache/index.d.ts +5 -0
- package/dist/src/singletons/cache/index.d.ts.map +1 -0
- package/dist/src/singletons/cache/lruCacheStore.d.ts +12 -0
- package/dist/src/singletons/cache/lruCacheStore.d.ts.map +1 -0
- package/dist/src/singletons/cache/lruCacheStore.test.d.ts +2 -0
- package/dist/src/singletons/cache/lruCacheStore.test.d.ts.map +1 -0
- package/dist/src/singletons/cache/redisCacheStore.d.ts +16 -0
- package/dist/src/singletons/cache/redisCacheStore.d.ts.map +1 -0
- package/dist/src/singletons/cache/redisClient.d.ts +3 -0
- package/dist/src/singletons/cache/redisClient.d.ts.map +1 -0
- package/dist/src/singletons/cache/registry.d.ts +7 -0
- package/dist/src/singletons/cache/registry.d.ts.map +1 -0
- package/dist/src/singletons/cache/registry.test.d.ts +2 -0
- package/dist/src/singletons/cache/registry.test.d.ts.map +1 -0
- package/dist/src/singletons/cache/types.d.ts +8 -0
- package/dist/src/singletons/cache/types.d.ts.map +1 -0
- package/dist/src/singletons/cron.d.ts +69 -0
- package/dist/src/singletons/cron.d.ts.map +1 -0
- package/dist/src/singletons/databases.d.ts +27 -0
- package/dist/src/singletons/databases.d.ts.map +1 -0
- package/dist/src/singletons/databases.test.d.ts +2 -0
- package/dist/src/singletons/databases.test.d.ts.map +1 -0
- package/dist/src/singletons/env.d.ts +494 -0
- package/dist/src/singletons/env.d.ts.map +1 -0
- package/dist/src/singletons/queues.d.ts +17 -0
- package/dist/src/singletons/queues.d.ts.map +1 -0
- package/dist/src/subscriptions/index.d.ts +4 -0
- package/dist/src/subscriptions/index.d.ts.map +1 -0
- package/dist/src/subscriptions/strategies/database.d.ts +12 -0
- package/dist/src/subscriptions/strategies/database.d.ts.map +1 -0
- package/dist/src/subscriptions/strategies/index.d.ts +12 -0
- package/dist/src/subscriptions/strategies/index.d.ts.map +1 -0
- package/dist/src/subscriptions/strategies/queue.d.ts +11 -0
- package/dist/src/subscriptions/strategies/queue.d.ts.map +1 -0
- package/dist/src/subscriptions/types.d.ts +67 -0
- package/dist/src/subscriptions/types.d.ts.map +1 -0
- package/dist/src/subscriptions/utils/polling.d.ts +17 -0
- package/dist/src/subscriptions/utils/polling.d.ts.map +1 -0
- package/dist/src/types/common.d.ts +44 -0
- package/dist/src/types/common.d.ts.map +1 -0
- package/dist/src/types/configuration.d.ts +28 -0
- package/dist/src/types/configuration.d.ts.map +1 -0
- package/dist/src/types/db.d.ts +43 -0
- package/dist/src/types/db.d.ts.map +1 -0
- package/dist/src/types/env.d.ts +2302 -0
- package/dist/src/types/env.d.ts.map +1 -0
- package/dist/src/types/env.test.d.ts +2 -0
- package/dist/src/types/env.test.d.ts.map +1 -0
- package/dist/src/types/resolver.d.ts +121 -0
- package/dist/src/types/resolver.d.ts.map +1 -0
- package/dist/src/types/zod/ai.d.ts +6 -0
- package/dist/src/types/zod/ai.d.ts.map +1 -0
- package/dist/src/types/zod/auth.d.ts +76 -0
- package/dist/src/types/zod/auth.d.ts.map +1 -0
- package/dist/src/types/zod/configuration.d.ts +1278 -0
- package/dist/src/types/zod/configuration.d.ts.map +1 -0
- package/dist/src/types/zod/configuration.test.d.ts +2 -0
- package/dist/src/types/zod/configuration.test.d.ts.map +1 -0
- package/dist/src/types/zod/cron.d.ts +32 -0
- package/dist/src/types/zod/cron.d.ts.map +1 -0
- package/dist/src/types/zod/db.d.ts +441 -0
- package/dist/src/types/zod/db.d.ts.map +1 -0
- package/dist/src/types/zod/db.test.d.ts +2 -0
- package/dist/src/types/zod/db.test.d.ts.map +1 -0
- package/dist/src/types/zod/mcp.d.ts +6 -0
- package/dist/src/types/zod/mcp.d.ts.map +1 -0
- package/dist/src/types/zod/operation.d.ts +9 -0
- package/dist/src/types/zod/operation.d.ts.map +1 -0
- package/dist/src/types/zod/queue.d.ts +656 -0
- package/dist/src/types/zod/queue.d.ts.map +1 -0
- package/dist/src/types/zod/queue.test.d.ts +2 -0
- package/dist/src/types/zod/queue.test.d.ts.map +1 -0
- package/dist/src/types/zod/remoteREST.d.ts +6 -0
- package/dist/src/types/zod/remoteREST.d.ts.map +1 -0
- package/dist/src/types/zod/remoteSchema.d.ts +6 -0
- package/dist/src/types/zod/remoteSchema.d.ts.map +1 -0
- package/dist/src/utils/benchmark.d.ts +2 -0
- package/dist/src/utils/benchmark.d.ts.map +1 -0
- package/dist/src/utils/event-emitter.d.ts +19 -0
- package/dist/src/utils/event-emitter.d.ts.map +1 -0
- package/dist/src/utils/responses.d.ts +19 -0
- package/dist/src/utils/responses.d.ts.map +1 -0
- package/dist/src/utils/responses.test.d.ts +2 -0
- package/dist/src/utils/responses.test.d.ts.map +1 -0
- package/dist/src/utils/safeJSONParse.d.ts +2 -0
- package/dist/src/utils/safeJSONParse.d.ts.map +1 -0
- package/dist/src/utils/selection.d.ts +3 -0
- package/dist/src/utils/selection.d.ts.map +1 -0
- package/dist/src/utils/selection.test.d.ts +2 -0
- package/dist/src/utils/selection.test.d.ts.map +1 -0
- package/dist/src/utils/sessionVariables.d.ts +47 -0
- package/dist/src/utils/sessionVariables.d.ts.map +1 -0
- package/dist/src/utils/sessionVariables.test.d.ts +2 -0
- package/dist/src/utils/sessionVariables.test.d.ts.map +1 -0
- package/dist/src/utils/writeSchema.d.ts +3 -0
- package/dist/src/utils/writeSchema.d.ts.map +1 -0
- package/dist/standalone.d.ts +3 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +119 -0
- package/playgrounds/console/index.html +25 -0
- package/playgrounds/graphiql/index.html +1144 -0
- package/playgrounds/scalar/index.html +19 -0
- package/src/ai/agent/agent.ts +222 -0
- package/src/ai/agent/index.ts +2 -0
- package/src/ai/agent/providers/anthropic.ts +113 -0
- package/src/ai/agent/providers/index.ts +62 -0
- package/src/ai/agent/providers/ollama.ts +128 -0
- package/src/ai/agent/providers/openai.ts +100 -0
- package/src/ai/agent/types.ts +65 -0
- package/src/ai/index.ts +8 -0
- package/src/ai/mcp/create-server.ts +444 -0
- package/src/ai/mcp/index.ts +80 -0
- package/src/ai/mcp/instructions.ts +103 -0
- package/src/ai/tools/agent.ts +111 -0
- package/src/ai/tools/core.ts +486 -0
- package/src/ai/tools/query-data.ts +109 -0
- package/src/analyzeQuery/analyzers/fragmentAnalyzer.ts +29 -0
- package/src/analyzeQuery/analyzers/operationAnalyzer.ts +50 -0
- package/src/analyzeQuery/analyzers/selectionAnalyzer.ts +135 -0
- package/src/analyzeQuery/analyzers/variableAnalyzer.ts +17 -0
- package/src/analyzeQuery/depthLimit.ts +124 -0
- package/src/analyzeQuery/directiveUtils.ts +99 -0
- package/src/analyzeQuery/index.ts +66 -0
- package/src/analyzeQuery/resolveVariables.ts +394 -0
- package/src/analyzeQuery/typeUtils.ts +47 -0
- package/src/analyzeQuery/types.ts +57 -0
- package/src/analyzeQuery/valueExtractors.ts +96 -0
- package/src/authentication/duration.ts +50 -0
- package/src/authentication/index.ts +34 -0
- package/src/authentication/jwt.ts +220 -0
- package/src/authentication/paseto.ts +256 -0
- package/src/authentication/tokenRepository.ts +75 -0
- package/src/authentication/types.ts +78 -0
- package/src/cli/seedAuth.ts +51 -0
- package/src/cli/seedAuthArgs.ts +50 -0
- package/src/config/helpers/cronHelper.ts +29 -0
- package/src/config/helpers/index.ts +8 -0
- package/src/config/helpers/operationHelper.ts +146 -0
- package/src/config/helpers/queueHelper.ts +27 -0
- package/src/config/index.ts +315 -0
- package/src/config/types/ai.ts +35 -0
- package/src/config/types/auth.ts +147 -0
- package/src/config/types/configuration.ts +69 -0
- package/src/config/types/cron.ts +140 -0
- package/src/config/types/db.ts +256 -0
- package/src/config/types/index.ts +129 -0
- package/src/config/types/operation.ts +253 -0
- package/src/config/types/queue.ts +172 -0
- package/src/config/types/remote-rest.ts +28 -0
- package/src/config/types/remote-schema.ts +39 -0
- package/src/config/types/virtual-columns.ts +157 -0
- package/src/configuration/getSchemas/index.ts +82 -0
- package/src/configuration/getSchemas/mergeEntities/index.ts +221 -0
- package/src/configuration/getSchemas/type-definition-generator/index.ts +511 -0
- package/src/configuration/gql/buildExecute.ts +54 -0
- package/src/configuration/gql/gqlAuthOperations.ts +150 -0
- package/src/configuration/gql/handleGraphQLRequestFactory.ts +415 -0
- package/src/configuration/gql/handleGraphQLSubscriptionFactory.ts +249 -0
- package/src/configuration/index.ts +138 -0
- package/src/configuration/rest/generateOpenAPI.ts +361 -0
- package/src/configuration/rest/handleRESTRequestFactory.ts +335 -0
- package/src/configuration/rest/index.ts +167 -0
- package/src/configuration/rest/openApiErrors.ts +106 -0
- package/src/console/api.ts +270 -0
- package/src/cron/index.ts +251 -0
- package/src/databases/auth/auth-operations.ts +36 -0
- package/src/databases/auth/password.ts +4 -0
- package/src/databases/common.ts +642 -0
- package/src/databases/core/executor.ts +97 -0
- package/src/databases/core/function-mapping.ts +176 -0
- package/src/databases/core/identifier.ts +8 -0
- package/src/databases/core/query-builder.ts +47 -0
- package/src/databases/directives.ts +112 -0
- package/src/databases/engines/mssql/auth.ts +112 -0
- package/src/databases/engines/mssql/connection.ts +151 -0
- package/src/databases/engines/mssql/format.ts +23 -0
- package/src/databases/engines/mssql/getStructure.ts +112 -0
- package/src/databases/engines/mssql/getViews.ts +17 -0
- package/src/databases/engines/mssql/query/index.ts +306 -0
- package/src/databases/engines/mysql/auth.ts +100 -0
- package/src/databases/engines/mysql/connection.ts +100 -0
- package/src/databases/engines/mysql/format.ts +23 -0
- package/src/databases/engines/mysql/getStructure.ts +116 -0
- package/src/databases/engines/mysql/getViews.ts +20 -0
- package/src/databases/engines/mysql/query/index.ts +291 -0
- package/src/databases/engines/postgresql/auth.ts +98 -0
- package/src/databases/engines/postgresql/connection.ts +99 -0
- package/src/databases/engines/postgresql/format.ts +23 -0
- package/src/databases/engines/postgresql/getStructure.ts +149 -0
- package/src/databases/engines/postgresql/getViews.ts +20 -0
- package/src/databases/engines/postgresql/query/index.ts +291 -0
- package/src/databases/engines/shared/claims.ts +26 -0
- package/src/databases/engines/shared/types.ts +7 -0
- package/src/databases/high-level-operations.ts +272 -0
- package/src/databases/index.ts +28 -0
- package/src/databases/metadata/structure.ts +12 -0
- package/src/databases/schemaBuilder/convert.ts +121 -0
- package/src/databases/schemaBuilder/generateCreateTable/index.ts +133 -0
- package/src/databases/schemaBuilder/generateCreateView/index.ts +101 -0
- package/src/databases/schemaBuilder/generateInsert/index.ts +47 -0
- package/src/databases/schemaBuilder/generateSchemaCreation/index.ts +29 -0
- package/src/databases/schemaBuilder/mssqlToPostgres/convertView.ts +47 -0
- package/src/databases/schemaBuilder/utils.ts +17 -0
- package/src/databases/sqlTypeUtils.ts +91 -0
- package/src/databases/transformers/data-transformers.ts +128 -0
- package/src/databases/transformers/genResolverName.ts +18 -0
- package/src/index.ts +461 -0
- package/src/logging/index.ts +69 -0
- package/src/queues/kafka.ts +409 -0
- package/src/queues/rabbitmq.ts +331 -0
- package/src/remoteREST/index.ts +46 -0
- package/src/remoteREST/parse.ts +68 -0
- package/src/remoteREST/proxy.ts +92 -0
- package/src/remoteREST/transform.ts +121 -0
- package/src/remoteREST/types.ts +38 -0
- package/src/remoteSchemas/index.ts +48 -0
- package/src/remoteSchemas/introspect.ts +44 -0
- package/src/remoteSchemas/proxy.ts +146 -0
- package/src/remoteSchemas/transform.ts +210 -0
- package/src/remoteSchemas/types.ts +43 -0
- package/src/singletons/ai.ts +91 -0
- package/src/singletons/authentication.ts +13 -0
- package/src/singletons/cache/index.ts +4 -0
- package/src/singletons/cache/lruCacheStore.ts +34 -0
- package/src/singletons/cache/redisCacheStore.ts +81 -0
- package/src/singletons/cache/redisClient.ts +12 -0
- package/src/singletons/cache/registry.ts +51 -0
- package/src/singletons/cache/types.ts +7 -0
- package/src/singletons/cron.ts +21 -0
- package/src/singletons/databases.ts +68 -0
- package/src/singletons/env.ts +3 -0
- package/src/singletons/queues.ts +101 -0
- package/src/subscriptions/index.ts +20 -0
- package/src/subscriptions/strategies/database.ts +68 -0
- package/src/subscriptions/strategies/index.ts +38 -0
- package/src/subscriptions/strategies/queue.ts +61 -0
- package/src/subscriptions/types.ts +74 -0
- package/src/subscriptions/utils/polling.ts +119 -0
- package/src/types/common.ts +57 -0
- package/src/types/configuration.ts +52 -0
- package/src/types/db.ts +87 -0
- package/src/types/env.ts +137 -0
- package/src/types/resolver.ts +181 -0
- package/src/types/zod/ai.ts +8 -0
- package/src/types/zod/auth.ts +96 -0
- package/src/types/zod/configuration.ts +46 -0
- package/src/types/zod/cron.ts +35 -0
- package/src/types/zod/db.ts +146 -0
- package/src/types/zod/mcp.ts +8 -0
- package/src/types/zod/operation.ts +37 -0
- package/src/types/zod/queue.ts +182 -0
- package/src/types/zod/remoteREST.ts +8 -0
- package/src/types/zod/remoteSchema.ts +11 -0
- package/src/utils/benchmark.ts +13 -0
- package/src/utils/event-emitter.ts +217 -0
- package/src/utils/responses.ts +42 -0
- package/src/utils/safeJSONParse.ts +10 -0
- package/src/utils/selection.ts +35 -0
- package/src/utils/sessionVariables.ts +131 -0
- package/src/utils/writeSchema.ts +13 -0
- package/standalone.ts +32 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import { isString } from "es-toolkit";
|
|
2
|
+
|
|
3
|
+
import type { SessionContext } from "../utils/sessionVariables";
|
|
4
|
+
import type {
|
|
5
|
+
OperationAnalysis,
|
|
6
|
+
ResolvedOperation,
|
|
7
|
+
SelectionAnalysis,
|
|
8
|
+
VariableDefinition,
|
|
9
|
+
} from "./types";
|
|
10
|
+
|
|
11
|
+
import { hasSessionVariables, replaceSessionVariables } from "../utils/sessionVariables";
|
|
12
|
+
|
|
13
|
+
const PRIMITIVE_GRAPHQL_TYPES = new Set(["Int", "Float", "String", "Boolean", "ID"]);
|
|
14
|
+
|
|
15
|
+
// ─── Utilities ──────────────────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Resolves a single `$varName` reference against a flat variable map.
|
|
19
|
+
* Returns the resolved value, or the original value if it's not a variable ref.
|
|
20
|
+
*/
|
|
21
|
+
export const resolveVariableRef = (variables: Record<string, unknown>, value: unknown): unknown => {
|
|
22
|
+
if (!isString(value)) return value;
|
|
23
|
+
if (!value.startsWith("$")) return value;
|
|
24
|
+
|
|
25
|
+
const varName = value.substring(1);
|
|
26
|
+
if (variables[varName] === undefined) throw new Error(`Variable ${varName} not found`);
|
|
27
|
+
return variables[varName];
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// ─── Step 1: Validation ─────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Validates that all declared variables have runtime values or defaults.
|
|
34
|
+
* Throws if a required variable is missing.
|
|
35
|
+
*/
|
|
36
|
+
export const validateVariables = (
|
|
37
|
+
variables: VariableDefinition[] | undefined,
|
|
38
|
+
runtimeVars: Record<string, unknown>,
|
|
39
|
+
): void => {
|
|
40
|
+
variables?.forEach((variable) => {
|
|
41
|
+
if (runtimeVars[variable.name] === undefined && variable.defaultValue === undefined) {
|
|
42
|
+
throw new Error(`Missing value for variable: $${variable.name}`);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// ─── Step 2: Object Variable Flattening ─────────────────────────────────────
|
|
48
|
+
|
|
49
|
+
/** Result of flattening object-type variables into static_N primitives. */
|
|
50
|
+
export interface FlattenResult {
|
|
51
|
+
/** Map from object var name → transformed object with $static_N refs */
|
|
52
|
+
resolvedMap: Map<string, unknown>;
|
|
53
|
+
/** New VariableDefinition entries for generated static_N vars */
|
|
54
|
+
newStaticVariables: VariableDefinition[];
|
|
55
|
+
/** Runtime values for the generated static_N vars */
|
|
56
|
+
resolvedRuntimeValues: Record<string, unknown>;
|
|
57
|
+
/** Names of object-type variables that were consumed */
|
|
58
|
+
resolvedObjectVarNames: Set<string>;
|
|
59
|
+
/** Variable names referenced via $varName inside object values */
|
|
60
|
+
nestedReferencedVars: Set<string>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Extracts primitive values from a runtime object and converts them to static variable references.
|
|
65
|
+
* This mirrors what extractArgumentValue does for AST nodes, but works on resolved JavaScript objects.
|
|
66
|
+
* Ensures primitive values get parameterized in SQL instead of being inlined.
|
|
67
|
+
* Also tracks any nested variable references found within the object.
|
|
68
|
+
*/
|
|
69
|
+
export const extractRuntimePrimitivesToVariables = (
|
|
70
|
+
obj: unknown,
|
|
71
|
+
generatedVariables: VariableDefinition[],
|
|
72
|
+
runtimeVariables: Record<string, unknown>,
|
|
73
|
+
startIndex: number,
|
|
74
|
+
referencedVariables: Set<string> = new Set(),
|
|
75
|
+
): unknown => {
|
|
76
|
+
// Handle null/undefined
|
|
77
|
+
if (obj === null || obj === undefined) {
|
|
78
|
+
return obj;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Handle arrays - recurse into each element
|
|
82
|
+
if (Array.isArray(obj)) {
|
|
83
|
+
return obj.map((item) =>
|
|
84
|
+
extractRuntimePrimitivesToVariables(
|
|
85
|
+
item,
|
|
86
|
+
generatedVariables,
|
|
87
|
+
runtimeVariables,
|
|
88
|
+
startIndex,
|
|
89
|
+
referencedVariables,
|
|
90
|
+
),
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Handle primitives - convert to static variable references
|
|
95
|
+
if (typeof obj === "string") {
|
|
96
|
+
if (obj.startsWith("$")) {
|
|
97
|
+
referencedVariables.add(obj.substring(1));
|
|
98
|
+
return obj;
|
|
99
|
+
}
|
|
100
|
+
const varName = `static_${startIndex + generatedVariables.length}`;
|
|
101
|
+
generatedVariables.push({
|
|
102
|
+
name: varName,
|
|
103
|
+
type: "String",
|
|
104
|
+
required: false,
|
|
105
|
+
defaultValue: obj,
|
|
106
|
+
});
|
|
107
|
+
runtimeVariables[varName] = obj;
|
|
108
|
+
return `$${varName}`;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (typeof obj === "number") {
|
|
112
|
+
const varName = `static_${startIndex + generatedVariables.length}`;
|
|
113
|
+
const type = Number.isInteger(obj) ? "Int" : "Float";
|
|
114
|
+
generatedVariables.push({
|
|
115
|
+
name: varName,
|
|
116
|
+
type,
|
|
117
|
+
required: false,
|
|
118
|
+
defaultValue: obj,
|
|
119
|
+
});
|
|
120
|
+
runtimeVariables[varName] = obj;
|
|
121
|
+
return `$${varName}`;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (typeof obj === "boolean") {
|
|
125
|
+
const varName = `static_${startIndex + generatedVariables.length}`;
|
|
126
|
+
generatedVariables.push({
|
|
127
|
+
name: varName,
|
|
128
|
+
type: "Boolean",
|
|
129
|
+
required: false,
|
|
130
|
+
defaultValue: obj,
|
|
131
|
+
});
|
|
132
|
+
runtimeVariables[varName] = obj;
|
|
133
|
+
return `$${varName}`;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Handle objects - recurse into each property
|
|
137
|
+
if (typeof obj === "object") {
|
|
138
|
+
const result: Record<string, unknown> = {};
|
|
139
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
140
|
+
result[key] = extractRuntimePrimitivesToVariables(
|
|
141
|
+
value,
|
|
142
|
+
generatedVariables,
|
|
143
|
+
runtimeVariables,
|
|
144
|
+
startIndex,
|
|
145
|
+
referencedVariables,
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return obj;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Identifies object-type variables from the operation, flattens their primitive
|
|
156
|
+
* leaves into static_N variable references, and returns all resolution artifacts.
|
|
157
|
+
* Pure function — does not mutate the input variable definitions.
|
|
158
|
+
*/
|
|
159
|
+
export const flattenObjectVariables = (
|
|
160
|
+
variables: VariableDefinition[],
|
|
161
|
+
runtimeVars: Record<string, unknown>,
|
|
162
|
+
existingStaticCount: number,
|
|
163
|
+
): FlattenResult => {
|
|
164
|
+
const newStaticVariables: VariableDefinition[] = [];
|
|
165
|
+
const resolvedRuntimeValues: Record<string, unknown> = {};
|
|
166
|
+
const resolvedObjectVarNames = new Set<string>();
|
|
167
|
+
const nestedReferencedVars = new Set<string>();
|
|
168
|
+
const resolvedMap = new Map<string, unknown>();
|
|
169
|
+
|
|
170
|
+
for (const varDef of variables) {
|
|
171
|
+
if (varDef.name.startsWith("static_")) continue;
|
|
172
|
+
if (PRIMITIVE_GRAPHQL_TYPES.has(varDef.type)) continue;
|
|
173
|
+
|
|
174
|
+
const value = runtimeVars[varDef.name];
|
|
175
|
+
if (value === undefined || typeof value !== "object" || value === null) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
resolvedObjectVarNames.add(varDef.name);
|
|
180
|
+
|
|
181
|
+
const transformed = extractRuntimePrimitivesToVariables(
|
|
182
|
+
value,
|
|
183
|
+
newStaticVariables,
|
|
184
|
+
resolvedRuntimeValues,
|
|
185
|
+
existingStaticCount,
|
|
186
|
+
nestedReferencedVars,
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
resolvedMap.set(varDef.name, transformed);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return {
|
|
193
|
+
resolvedMap,
|
|
194
|
+
newStaticVariables,
|
|
195
|
+
resolvedRuntimeValues,
|
|
196
|
+
resolvedObjectVarNames,
|
|
197
|
+
nestedReferencedVars,
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
// ─── Step 3: Immutable Field Resolution ─────────────────────────────────────
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Replaces `$session.*` placeholders in any argument value.
|
|
205
|
+
* Walks all arguments, not just `where`.
|
|
206
|
+
*/
|
|
207
|
+
const resolveSessionInArguments = (
|
|
208
|
+
args: Record<string, unknown>,
|
|
209
|
+
session: SessionContext,
|
|
210
|
+
): Record<string, unknown> => {
|
|
211
|
+
const result: Record<string, unknown> = {};
|
|
212
|
+
|
|
213
|
+
for (const [key, value] of Object.entries(args)) {
|
|
214
|
+
if (
|
|
215
|
+
value &&
|
|
216
|
+
typeof value === "object" &&
|
|
217
|
+
!Array.isArray(value) &&
|
|
218
|
+
hasSessionVariables(value as Record<string, unknown>)
|
|
219
|
+
) {
|
|
220
|
+
result[key] = replaceSessionVariables(value as Record<string, unknown>, session);
|
|
221
|
+
} else {
|
|
222
|
+
result[key] = value;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return result;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Returns a new field tree with:
|
|
231
|
+
* 1. `$varName` argument references replaced with their resolved objects from `resolvedMap`
|
|
232
|
+
* 2. `$session.*` placeholders replaced with actual JWT claim values in ALL arguments
|
|
233
|
+
*
|
|
234
|
+
* Does NOT mutate the input fields — returns a new array.
|
|
235
|
+
*/
|
|
236
|
+
export const resolveFieldArguments = (
|
|
237
|
+
fields: SelectionAnalysis[],
|
|
238
|
+
resolvedMap: Map<string, unknown>,
|
|
239
|
+
session?: SessionContext,
|
|
240
|
+
): SelectionAnalysis[] => {
|
|
241
|
+
return fields.map((field) => {
|
|
242
|
+
let newArguments = field.arguments;
|
|
243
|
+
|
|
244
|
+
if (field.arguments) {
|
|
245
|
+
// Shallow-copy arguments so we don't mutate originals
|
|
246
|
+
newArguments = { ...field.arguments };
|
|
247
|
+
|
|
248
|
+
// Replace object variable references in arguments
|
|
249
|
+
for (const [key, value] of Object.entries(newArguments)) {
|
|
250
|
+
if (isString(value) && value.startsWith("$")) {
|
|
251
|
+
const varName = value.substring(1);
|
|
252
|
+
if (resolvedMap.has(varName)) {
|
|
253
|
+
newArguments[key] = resolvedMap.get(varName);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Replace session variables in ALL argument values (not just where)
|
|
259
|
+
if (session) {
|
|
260
|
+
newArguments = resolveSessionInArguments(newArguments, session);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Recurse into nested selections
|
|
265
|
+
const newSelections = field.selections
|
|
266
|
+
? resolveFieldArguments(field.selections, resolvedMap, session)
|
|
267
|
+
: field.selections;
|
|
268
|
+
|
|
269
|
+
// Only create a new field object if something changed
|
|
270
|
+
if (newArguments !== field.arguments || newSelections !== field.selections) {
|
|
271
|
+
return {
|
|
272
|
+
...field,
|
|
273
|
+
arguments: newArguments,
|
|
274
|
+
selections: newSelections,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return field;
|
|
279
|
+
});
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
// ─── Step 4: Variable List Rebuilding ───────────────────────────────────────
|
|
283
|
+
|
|
284
|
+
/** Result of rebuilding the final variable list and values. */
|
|
285
|
+
interface BuildFinalResult {
|
|
286
|
+
variables: VariableDefinition[];
|
|
287
|
+
allVariables: Record<string, unknown>;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Produces the rebuilt variable definition list and merged flat variable map.
|
|
292
|
+
* - Removes consumed object-type variable definitions
|
|
293
|
+
* - Preserves nested $ref variable definitions
|
|
294
|
+
* - Appends generated static_N definitions
|
|
295
|
+
* - Merges defaults → runtime → generated values (in override order)
|
|
296
|
+
*/
|
|
297
|
+
export const buildFinalVariables = (
|
|
298
|
+
originalVars: VariableDefinition[],
|
|
299
|
+
flattenResult: FlattenResult,
|
|
300
|
+
runtimeVars: Record<string, unknown>,
|
|
301
|
+
): BuildFinalResult => {
|
|
302
|
+
const {
|
|
303
|
+
newStaticVariables,
|
|
304
|
+
resolvedObjectVarNames,
|
|
305
|
+
nestedReferencedVars,
|
|
306
|
+
resolvedRuntimeValues,
|
|
307
|
+
} = flattenResult;
|
|
308
|
+
|
|
309
|
+
const variables = [
|
|
310
|
+
...originalVars.filter(
|
|
311
|
+
(v) => !resolvedObjectVarNames.has(v.name) || nestedReferencedVars.has(v.name),
|
|
312
|
+
),
|
|
313
|
+
...newStaticVariables,
|
|
314
|
+
];
|
|
315
|
+
|
|
316
|
+
// Merge: defaults → runtime → generated static values
|
|
317
|
+
const allVariables = {
|
|
318
|
+
...variables.reduce<Record<string, unknown>>((acc, variable) => {
|
|
319
|
+
if (variable.defaultValue !== undefined) {
|
|
320
|
+
acc[variable.name] = variable.defaultValue;
|
|
321
|
+
}
|
|
322
|
+
return acc;
|
|
323
|
+
}, {}),
|
|
324
|
+
...runtimeVars,
|
|
325
|
+
...resolvedRuntimeValues,
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
return { variables, allVariables };
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
// ─── Orchestrator ───────────────────────────────────────────────────────────
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Resolves an operation's variables in a single pass:
|
|
335
|
+
* 1. Validates that all declared variables have values or defaults
|
|
336
|
+
* 2. Flattens object-type variables into static_N primitive references
|
|
337
|
+
* 3. Produces new fields with argument references and session variables resolved
|
|
338
|
+
* 4. Builds the final variable list and merged value map
|
|
339
|
+
*
|
|
340
|
+
* Returns a `ResolvedOperation` — the input `operation` is NEVER mutated.
|
|
341
|
+
*/
|
|
342
|
+
export const resolveVariables = (
|
|
343
|
+
operation: OperationAnalysis,
|
|
344
|
+
variables: Record<string, unknown>,
|
|
345
|
+
session?: SessionContext,
|
|
346
|
+
): ResolvedOperation => {
|
|
347
|
+
// 1. Validate
|
|
348
|
+
validateVariables(operation.variables, variables);
|
|
349
|
+
|
|
350
|
+
// 2. Flatten object-type variables
|
|
351
|
+
const hasVars = operation.variables && operation.variables.length > 0;
|
|
352
|
+
|
|
353
|
+
if (!hasVars) {
|
|
354
|
+
// No variable definitions — still need to resolve session variables in fields
|
|
355
|
+
const fields = session
|
|
356
|
+
? resolveFieldArguments(operation.fields, new Map(), session)
|
|
357
|
+
: operation.fields;
|
|
358
|
+
|
|
359
|
+
return {
|
|
360
|
+
fields,
|
|
361
|
+
variables: operation.variables ?? [],
|
|
362
|
+
allVariables: { ...variables },
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const existingStaticCount = operation.variables!.filter((v) =>
|
|
367
|
+
v.name.startsWith("static_"),
|
|
368
|
+
).length;
|
|
369
|
+
|
|
370
|
+
const flattenResult = flattenObjectVariables(
|
|
371
|
+
operation.variables!,
|
|
372
|
+
variables,
|
|
373
|
+
existingStaticCount,
|
|
374
|
+
);
|
|
375
|
+
|
|
376
|
+
// 3. Resolve field arguments (immutable)
|
|
377
|
+
const fields =
|
|
378
|
+
flattenResult.resolvedMap.size > 0 || session
|
|
379
|
+
? resolveFieldArguments(operation.fields, flattenResult.resolvedMap, session)
|
|
380
|
+
: operation.fields;
|
|
381
|
+
|
|
382
|
+
// 4. Build final variable list and merged values
|
|
383
|
+
const { variables: resolvedVarDefs, allVariables } = buildFinalVariables(
|
|
384
|
+
operation.variables!,
|
|
385
|
+
flattenResult,
|
|
386
|
+
variables,
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
return {
|
|
390
|
+
fields,
|
|
391
|
+
variables: resolvedVarDefs.length > 0 ? resolvedVarDefs : operation.variables!,
|
|
392
|
+
allVariables,
|
|
393
|
+
};
|
|
394
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { GraphQLList, GraphQLNonNull, GraphQLObjectType } from "graphql";
|
|
2
|
+
|
|
3
|
+
import type { GraphQLType, TypeNode } from "graphql";
|
|
4
|
+
|
|
5
|
+
export const getFieldType = (
|
|
6
|
+
parentType: GraphQLObjectType,
|
|
7
|
+
fieldName: string,
|
|
8
|
+
): GraphQLType | undefined => {
|
|
9
|
+
const fields = parentType.getFields();
|
|
10
|
+
const field = fields[fieldName];
|
|
11
|
+
return field ? field.type : undefined;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const unwrapType = (
|
|
15
|
+
type: GraphQLType,
|
|
16
|
+
): {
|
|
17
|
+
type: GraphQLType;
|
|
18
|
+
isArray: boolean;
|
|
19
|
+
} => {
|
|
20
|
+
let isArray = false;
|
|
21
|
+
|
|
22
|
+
while (true) {
|
|
23
|
+
if (type instanceof GraphQLNonNull) {
|
|
24
|
+
type = type.ofType;
|
|
25
|
+
} else if (type instanceof GraphQLList) {
|
|
26
|
+
isArray = true;
|
|
27
|
+
type = type.ofType;
|
|
28
|
+
} else {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return { type, isArray };
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const processType = (typeNode: TypeNode): string => {
|
|
37
|
+
switch (typeNode.kind) {
|
|
38
|
+
case "NonNullType":
|
|
39
|
+
return `${processType(typeNode.type)}!`;
|
|
40
|
+
case "ListType":
|
|
41
|
+
return `[${processType(typeNode.type)}]`;
|
|
42
|
+
case "NamedType":
|
|
43
|
+
return typeNode.name.value;
|
|
44
|
+
default:
|
|
45
|
+
return "Unknown";
|
|
46
|
+
}
|
|
47
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { EntitySource } from "../types/resolver";
|
|
2
|
+
|
|
3
|
+
export interface AnalysisResult {
|
|
4
|
+
operations: OperationAnalysis[];
|
|
5
|
+
fragments: FragmentAnalysis[];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface OperationAnalysis {
|
|
9
|
+
name: string | null;
|
|
10
|
+
operation: "query" | "mutation" | "subscription";
|
|
11
|
+
variables?: VariableDefinition[];
|
|
12
|
+
fields: SelectionAnalysis[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface FragmentAnalysis {
|
|
16
|
+
name: string;
|
|
17
|
+
typeCondition: string;
|
|
18
|
+
fields: SelectionAnalysis[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface SelectionAnalysis {
|
|
22
|
+
name: string;
|
|
23
|
+
alias?: string;
|
|
24
|
+
/** The source of this field (table, queue, auth, operation, etc.) */
|
|
25
|
+
source?: EntitySource;
|
|
26
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
27
|
+
arguments?: { [key: string]: any };
|
|
28
|
+
selections?: SelectionAnalysis[];
|
|
29
|
+
isArray?: boolean;
|
|
30
|
+
directives?: DirectiveAnalysis[];
|
|
31
|
+
isRequired?: boolean;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface DirectiveAnalysis {
|
|
35
|
+
name: string;
|
|
36
|
+
arguments?: { [key: string]: unknown };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface VariableDefinition {
|
|
40
|
+
name: string;
|
|
41
|
+
type: string;
|
|
42
|
+
required: boolean;
|
|
43
|
+
defaultValue?: unknown;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The result of resolving variables for an operation.
|
|
48
|
+
* This is an immutable snapshot — the original OperationAnalysis is never mutated.
|
|
49
|
+
*/
|
|
50
|
+
export interface ResolvedOperation {
|
|
51
|
+
/** Fields with all $varName references and $session.* placeholders resolved */
|
|
52
|
+
fields: SelectionAnalysis[];
|
|
53
|
+
/** Rebuilt variable definitions (object vars replaced with static_N entries) */
|
|
54
|
+
variables: VariableDefinition[];
|
|
55
|
+
/** Flat map of all variable values: defaults → runtime → generated static values */
|
|
56
|
+
allVariables: Record<string, unknown>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { ValueNode } from "graphql";
|
|
2
|
+
import type { VariableDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
// Helper function to extract argument values from AST nodes
|
|
5
|
+
// When a static value is found, it creates a virtual variable and returns a variable reference
|
|
6
|
+
export const extractArgumentValue = (
|
|
7
|
+
valueNode: ValueNode,
|
|
8
|
+
generatedVariables?: VariableDefinition[],
|
|
9
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
10
|
+
): any => {
|
|
11
|
+
switch (valueNode.kind) {
|
|
12
|
+
case "IntValue": {
|
|
13
|
+
const value = parseInt(valueNode.value, 10);
|
|
14
|
+
if (generatedVariables) {
|
|
15
|
+
const varName = `static_${generatedVariables.length}`;
|
|
16
|
+
|
|
17
|
+
generatedVariables.push({
|
|
18
|
+
name: varName,
|
|
19
|
+
type: "Int",
|
|
20
|
+
required: false,
|
|
21
|
+
defaultValue: value,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return `$${varName}`;
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
case "FloatValue": {
|
|
29
|
+
const value = parseFloat(valueNode.value);
|
|
30
|
+
if (generatedVariables) {
|
|
31
|
+
const varName = `static_${generatedVariables.length}`;
|
|
32
|
+
|
|
33
|
+
generatedVariables.push({
|
|
34
|
+
name: varName,
|
|
35
|
+
type: "Float",
|
|
36
|
+
required: false,
|
|
37
|
+
defaultValue: value,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return `$${varName}`;
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
case "StringValue": {
|
|
45
|
+
const value = valueNode.value;
|
|
46
|
+
if (generatedVariables) {
|
|
47
|
+
const varName = `static_${generatedVariables.length}`;
|
|
48
|
+
|
|
49
|
+
generatedVariables.push({
|
|
50
|
+
name: varName,
|
|
51
|
+
type: "String",
|
|
52
|
+
required: false,
|
|
53
|
+
defaultValue: value,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
return `$${varName}`;
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
case "BooleanValue": {
|
|
61
|
+
const value = valueNode.value;
|
|
62
|
+
if (generatedVariables) {
|
|
63
|
+
const varName = `static_${generatedVariables.length}`;
|
|
64
|
+
|
|
65
|
+
generatedVariables.push({
|
|
66
|
+
name: varName,
|
|
67
|
+
type: "Boolean",
|
|
68
|
+
required: false,
|
|
69
|
+
defaultValue: value,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return `$${varName}`;
|
|
73
|
+
}
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
case "EnumValue": {
|
|
77
|
+
return valueNode.value;
|
|
78
|
+
}
|
|
79
|
+
case "ListValue":
|
|
80
|
+
return valueNode.values.map((v) => extractArgumentValue(v, generatedVariables));
|
|
81
|
+
case "ObjectValue":
|
|
82
|
+
return valueNode.fields.reduce(
|
|
83
|
+
(obj, field) => {
|
|
84
|
+
obj[field.name.value] = extractArgumentValue(field.value, generatedVariables);
|
|
85
|
+
return obj;
|
|
86
|
+
},
|
|
87
|
+
{} as { [key: string]: unknown },
|
|
88
|
+
);
|
|
89
|
+
case "NullValue":
|
|
90
|
+
return null;
|
|
91
|
+
case "Variable":
|
|
92
|
+
return `$${valueNode.name.value}`;
|
|
93
|
+
default:
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse duration string (e.g., "5m", "1h", "7d") to seconds
|
|
3
|
+
*/
|
|
4
|
+
export const parseDurationToSeconds = (duration: string): number => {
|
|
5
|
+
const unit = duration.slice(-1);
|
|
6
|
+
const value = parseInt(duration.slice(0, -1), 10);
|
|
7
|
+
|
|
8
|
+
switch (unit) {
|
|
9
|
+
case "s":
|
|
10
|
+
return value;
|
|
11
|
+
case "m":
|
|
12
|
+
return value * 60;
|
|
13
|
+
case "h":
|
|
14
|
+
return value * 60 * 60;
|
|
15
|
+
case "d":
|
|
16
|
+
return value * 24 * 60 * 60;
|
|
17
|
+
default:
|
|
18
|
+
return value; // assume seconds if no unit
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Parse duration string (e.g., "5m", "1h", "7d") to milliseconds
|
|
24
|
+
*/
|
|
25
|
+
export const parseDurationToMs = (duration: string): number => {
|
|
26
|
+
return parseDurationToSeconds(duration) * 1000;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const PASETO_UNIT_MAP: Record<string, string> = {
|
|
30
|
+
s: "seconds",
|
|
31
|
+
m: "minutes",
|
|
32
|
+
h: "hours",
|
|
33
|
+
d: "days",
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Convert compact duration string to PASETO-compatible relative time format.
|
|
38
|
+
* e.g., "5m" → "5 minutes", "7d" → "7 days", "1h" → "1 hour", "30s" → "30 seconds"
|
|
39
|
+
*/
|
|
40
|
+
export const toPasetoDuration = (duration: string): string => {
|
|
41
|
+
const unit = duration.slice(-1);
|
|
42
|
+
const value = parseInt(duration.slice(0, -1), 10);
|
|
43
|
+
const unitName = PASETO_UNIT_MAP[unit];
|
|
44
|
+
|
|
45
|
+
if (!unitName) {
|
|
46
|
+
return `${value} seconds`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return value === 1 ? `${value} ${unitName.slice(0, -1)}` : `${value} ${unitName}`;
|
|
50
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Env } from "../types/env";
|
|
2
|
+
import type { TokenService, TokenStrategy } from "./types";
|
|
3
|
+
|
|
4
|
+
import { createJWTService } from "./jwt";
|
|
5
|
+
import { createPASETOService } from "./paseto";
|
|
6
|
+
|
|
7
|
+
export const createTokenService = (env: Env, strategy: TokenStrategy = "jwt"): TokenService => {
|
|
8
|
+
switch (strategy) {
|
|
9
|
+
case "jwt": {
|
|
10
|
+
if (!env.jwt.secret) {
|
|
11
|
+
throw new Error(
|
|
12
|
+
"JWT_SECRET environment variable is required when using jwt token strategy",
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
return createJWTService(env);
|
|
16
|
+
}
|
|
17
|
+
case "paseto_local": {
|
|
18
|
+
if (!env.paseto.localKey) {
|
|
19
|
+
throw new Error(
|
|
20
|
+
"PASETO_LOCAL_KEY environment variable is required when using paseto_local token strategy.",
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
return createPASETOService(env, "local");
|
|
24
|
+
}
|
|
25
|
+
case "paseto_public": {
|
|
26
|
+
if (!env.paseto.secretKey || !env.paseto.publicKey) {
|
|
27
|
+
throw new Error(
|
|
28
|
+
"PASETO_SECRET_KEY and PASETO_PUBLIC_KEY environment variables are required when using paseto_public token strategy.",
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
return createPASETOService(env, "public");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|