@ductape/sdk 0.0.4-v6 → 0.0.4-v60
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/dist/agents/agent-context.d.ts +98 -0
- package/dist/agents/agent-context.js +588 -0
- package/dist/agents/agent-context.js.map +1 -0
- package/dist/agents/agent-executor.d.ts +180 -0
- package/dist/agents/agent-executor.js +715 -0
- package/dist/agents/agent-executor.js.map +1 -0
- package/dist/agents/agents.service.d.ts +310 -0
- package/dist/agents/agents.service.js +1249 -0
- package/dist/agents/agents.service.js.map +1 -0
- package/dist/agents/index.d.ts +55 -0
- package/dist/agents/index.js +110 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/memory-manager.d.ts +182 -0
- package/dist/agents/memory-manager.js +383 -0
- package/dist/agents/memory-manager.js.map +1 -0
- package/dist/agents/tool-registry.d.ts +141 -0
- package/dist/agents/tool-registry.js +355 -0
- package/dist/agents/tool-registry.js.map +1 -0
- package/dist/agents/types/agents.types.d.ts +1227 -0
- package/dist/agents/types/agents.types.js +12 -0
- package/dist/agents/types/agents.types.js.map +1 -0
- package/dist/agents/types/index.d.ts +6 -0
- package/dist/agents/types/index.js +23 -0
- package/dist/agents/types/index.js.map +1 -0
- package/dist/agents/vector-store-adapter.d.ts +108 -0
- package/dist/agents/vector-store-adapter.js +213 -0
- package/dist/agents/vector-store-adapter.js.map +1 -0
- package/dist/api/services/appApi.service.d.ts +51 -5
- package/dist/api/services/appApi.service.js +101 -3
- package/dist/api/services/appApi.service.js.map +1 -1
- package/dist/api/services/pricingApi.service.d.ts +10 -0
- package/dist/api/services/pricingApi.service.js +34 -0
- package/dist/api/services/pricingApi.service.js.map +1 -0
- package/dist/api/services/processorApi.service.d.ts +334 -2
- package/dist/api/services/processorApi.service.js +264 -2
- package/dist/api/services/processorApi.service.js.map +1 -1
- package/dist/api/services/productsApi.service.d.ts +108 -1
- package/dist/api/services/productsApi.service.js +150 -3
- package/dist/api/services/productsApi.service.js.map +1 -1
- package/dist/api/services/resilienceApi.service.d.ts +106 -0
- package/dist/api/services/resilienceApi.service.js +224 -0
- package/dist/api/services/resilienceApi.service.js.map +1 -0
- package/dist/api/services/secretsApi.service.d.ts +50 -0
- package/dist/api/services/secretsApi.service.js +124 -0
- package/dist/api/services/secretsApi.service.js.map +1 -0
- package/dist/api/services/workflowApi.service.d.ts +199 -0
- package/dist/api/services/workflowApi.service.js +183 -0
- package/dist/api/services/workflowApi.service.js.map +1 -0
- package/dist/api/services/workspaceApi.service.d.ts +8 -0
- package/dist/api/services/workspaceApi.service.js +20 -0
- package/dist/api/services/workspaceApi.service.js.map +1 -1
- package/dist/api/urls.d.ts +65 -1
- package/dist/api/urls.js +90 -18
- package/dist/api/urls.js.map +1 -1
- package/dist/api/utils/auth.utils.d.ts +1 -3
- package/dist/api/utils/auth.utils.js.map +1 -1
- package/dist/api/utils/cache.utils.d.ts +1 -1
- package/dist/api/utils/cache.utils.js +2 -2
- package/dist/api/utils/cache.utils.js.map +1 -1
- package/dist/api/utils/strings.utils.d.ts +2 -0
- package/dist/api/utils/strings.utils.js +14 -0
- package/dist/api/utils/strings.utils.js.map +1 -1
- package/dist/apps/services/app.service.d.ts +41 -33
- package/dist/apps/services/app.service.js +472 -184
- package/dist/apps/services/app.service.js.map +1 -1
- package/dist/apps/utils/auth-context-manager.d.ts +137 -0
- package/dist/apps/utils/auth-context-manager.js +248 -0
- package/dist/apps/utils/auth-context-manager.js.map +1 -0
- package/dist/apps/utils/credential-manager.d.ts +128 -0
- package/dist/apps/utils/credential-manager.js +199 -0
- package/dist/apps/utils/credential-manager.js.map +1 -0
- package/dist/apps/utils/index.d.ts +10 -0
- package/dist/apps/utils/index.js +54 -0
- package/dist/apps/utils/index.js.map +1 -0
- package/dist/apps/utils/input-helpers.d.ts +67 -0
- package/dist/apps/utils/input-helpers.js +185 -0
- package/dist/apps/utils/input-helpers.js.map +1 -0
- package/dist/apps/utils/input-resolver.d.ts +165 -0
- package/dist/apps/utils/input-resolver.js +477 -0
- package/dist/apps/utils/input-resolver.js.map +1 -0
- package/dist/apps/utils/oauth-manager.d.ts +196 -0
- package/dist/apps/utils/oauth-manager.js +429 -0
- package/dist/apps/utils/oauth-manager.js.map +1 -0
- package/dist/apps/validators/joi-validators/create.appAction.validator.d.ts +1 -2
- package/dist/apps/validators/joi-validators/create.appAction.validator.js +21 -2
- package/dist/apps/validators/joi-validators/create.appAction.validator.js.map +1 -1
- package/dist/apps/validators/joi-validators/update.appAction.validator.js +11 -1
- package/dist/apps/validators/joi-validators/update.appAction.validator.js.map +1 -1
- package/dist/apps/validators/joi-validators/update.appActionResponse.validator.d.ts +1 -1
- package/dist/apps/validators/joi-validators/update.appActionResponse.validator.js +34 -1
- package/dist/apps/validators/joi-validators/update.appActionResponse.validator.js.map +1 -1
- package/dist/bin.d.ts +26 -0
- package/dist/bin.js +28 -0
- package/dist/bin.js.map +1 -0
- package/dist/brokers/brokers.service.d.ts +289 -0
- package/dist/brokers/brokers.service.js +722 -0
- package/dist/brokers/brokers.service.js.map +1 -0
- package/dist/brokers/index.d.ts +46 -0
- package/dist/brokers/index.js +83 -0
- package/dist/brokers/index.js.map +1 -0
- package/dist/brokers/types/index.d.ts +314 -0
- package/dist/brokers/types/index.js +8 -0
- package/dist/brokers/types/index.js.map +1 -0
- package/dist/brokers/utils/broker.util.d.ts +33 -0
- package/dist/brokers/utils/broker.util.js +125 -0
- package/dist/brokers/utils/broker.util.js.map +1 -0
- package/dist/brokers/utils/providers/aws-sqs.service.d.ts +16 -0
- package/dist/brokers/utils/providers/aws-sqs.service.js +71 -0
- package/dist/brokers/utils/providers/aws-sqs.service.js.map +1 -0
- package/dist/brokers/utils/providers/google-pubsub.service.d.ts +16 -0
- package/dist/brokers/utils/providers/google-pubsub.service.js +43 -0
- package/dist/brokers/utils/providers/google-pubsub.service.js.map +1 -0
- package/dist/brokers/utils/providers/index.d.ts +6 -0
- package/dist/brokers/utils/providers/index.js +16 -0
- package/dist/brokers/utils/providers/index.js.map +1 -0
- package/dist/brokers/utils/providers/kafka.service.d.ts +23 -0
- package/dist/brokers/utils/providers/kafka.service.js +131 -0
- package/dist/brokers/utils/providers/kafka.service.js.map +1 -0
- package/dist/brokers/utils/providers/nats.service.d.ts +18 -0
- package/dist/brokers/utils/providers/nats.service.js +63 -0
- package/dist/brokers/utils/providers/nats.service.js.map +1 -0
- package/dist/brokers/utils/providers/rabbitmq.service.d.ts +15 -0
- package/dist/brokers/utils/providers/rabbitmq.service.js +151 -0
- package/dist/brokers/utils/providers/rabbitmq.service.js.map +1 -0
- package/dist/brokers/utils/providers/redis.service.d.ts +18 -0
- package/dist/brokers/utils/providers/redis.service.js +93 -0
- package/dist/brokers/utils/providers/redis.service.js.map +1 -0
- package/dist/cache/cache.manager.d.ts +159 -0
- package/dist/cache/cache.manager.js +265 -0
- package/dist/cache/cache.manager.js.map +1 -0
- package/dist/cache/cache.service.d.ts +186 -0
- package/dist/cache/cache.service.js +437 -0
- package/dist/cache/cache.service.js.map +1 -0
- package/dist/cache/index.d.ts +52 -0
- package/dist/cache/index.js +79 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/types/index.d.ts +106 -0
- package/dist/cache/types/index.js +6 -0
- package/dist/cache/types/index.js.map +1 -0
- package/dist/clients/pricing.client.d.ts +3 -0
- package/dist/clients/pricing.client.js +33 -0
- package/dist/clients/pricing.client.js.map +1 -0
- package/dist/database/actions/action-manager.d.ts +170 -0
- package/dist/database/actions/action-manager.js +465 -0
- package/dist/database/actions/action-manager.js.map +1 -0
- package/dist/database/actions/index.d.ts +6 -0
- package/dist/database/actions/index.js +13 -0
- package/dist/database/actions/index.js.map +1 -0
- package/dist/database/adapters/adapter.factory.d.ts +62 -0
- package/dist/database/adapters/adapter.factory.js +97 -0
- package/dist/database/adapters/adapter.factory.js.map +1 -0
- package/dist/database/adapters/base.adapter.d.ts +393 -0
- package/dist/database/adapters/base.adapter.js +150 -0
- package/dist/database/adapters/base.adapter.js.map +1 -0
- package/dist/database/adapters/cassandra.adapter.d.ts +91 -0
- package/dist/database/adapters/cassandra.adapter.js +1075 -0
- package/dist/database/adapters/cassandra.adapter.js.map +1 -0
- package/dist/database/adapters/dynamodb.adapter.d.ts +109 -0
- package/dist/database/adapters/dynamodb.adapter.js +1534 -0
- package/dist/database/adapters/dynamodb.adapter.js.map +1 -0
- package/dist/database/adapters/index.d.ts +11 -0
- package/dist/database/adapters/index.js +27 -0
- package/dist/database/adapters/index.js.map +1 -0
- package/dist/database/adapters/mariadb.adapter.d.ts +100 -0
- package/dist/database/adapters/mariadb.adapter.js +247 -0
- package/dist/database/adapters/mariadb.adapter.js.map +1 -0
- package/dist/database/adapters/mongodb.adapter.d.ts +120 -0
- package/dist/database/adapters/mongodb.adapter.js +1253 -0
- package/dist/database/adapters/mongodb.adapter.js.map +1 -0
- package/dist/database/adapters/mysql.adapter.d.ts +85 -0
- package/dist/database/adapters/mysql.adapter.js +1313 -0
- package/dist/database/adapters/mysql.adapter.js.map +1 -0
- package/dist/database/adapters/postgresql.adapter.d.ts +88 -0
- package/dist/database/adapters/postgresql.adapter.js +1434 -0
- package/dist/database/adapters/postgresql.adapter.js.map +1 -0
- package/dist/database/databases.service.d.ts +1388 -0
- package/dist/database/databases.service.js +2821 -0
- package/dist/database/databases.service.js.map +1 -0
- package/dist/database/index.d.ts +46 -0
- package/dist/database/index.js +109 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/migrations/index.d.ts +6 -0
- package/dist/database/migrations/index.js +12 -0
- package/dist/database/migrations/index.js.map +1 -0
- package/dist/database/migrations/migration-engine.d.ts +132 -0
- package/dist/database/migrations/migration-engine.js +1356 -0
- package/dist/database/migrations/migration-engine.js.map +1 -0
- package/dist/database/operators/aggregation-builder.d.ts +67 -0
- package/dist/database/operators/aggregation-builder.js +841 -0
- package/dist/database/operators/aggregation-builder.js.map +1 -0
- package/dist/database/operators/index.d.ts +7 -0
- package/dist/database/operators/index.js +15 -0
- package/dist/database/operators/index.js.map +1 -0
- package/dist/database/operators/query-builder.d.ts +59 -0
- package/dist/database/operators/query-builder.js +397 -0
- package/dist/database/operators/query-builder.js.map +1 -0
- package/dist/database/presave/decrypt.d.ts +25 -0
- package/dist/database/presave/decrypt.js +146 -0
- package/dist/database/presave/decrypt.js.map +1 -0
- package/dist/database/presave/index.d.ts +9 -0
- package/dist/database/presave/index.js +18 -0
- package/dist/database/presave/index.js.map +1 -0
- package/dist/database/presave/presave-processor.d.ts +148 -0
- package/dist/database/presave/presave-processor.js +702 -0
- package/dist/database/presave/presave-processor.js.map +1 -0
- package/dist/database/schema/index.d.ts +7 -0
- package/dist/database/schema/index.js +13 -0
- package/dist/database/schema/index.js.map +1 -0
- package/dist/database/schema/schema-manager.d.ts +258 -0
- package/dist/database/schema/schema-manager.js +637 -0
- package/dist/database/schema/schema-manager.js.map +1 -0
- package/dist/database/transactions/index.d.ts +6 -0
- package/dist/database/transactions/index.js +13 -0
- package/dist/database/transactions/index.js.map +1 -0
- package/dist/database/transactions/transaction-manager.d.ts +113 -0
- package/dist/database/transactions/transaction-manager.js +344 -0
- package/dist/database/transactions/transaction-manager.js.map +1 -0
- package/dist/database/triggers/index.d.ts +7 -0
- package/dist/database/triggers/index.js +14 -0
- package/dist/database/triggers/index.js.map +1 -0
- package/dist/database/triggers/trigger-processor.d.ts +239 -0
- package/dist/database/triggers/trigger-processor.js +1034 -0
- package/dist/database/triggers/trigger-processor.js.map +1 -0
- package/dist/database/types/action.interface.d.ts +148 -0
- package/dist/database/types/action.interface.js +6 -0
- package/dist/database/types/action.interface.js.map +1 -0
- package/dist/database/types/aggregation.interface.d.ts +185 -0
- package/dist/database/types/aggregation.interface.js +6 -0
- package/dist/database/types/aggregation.interface.js.map +1 -0
- package/dist/database/types/connection.interface.d.ts +137 -0
- package/dist/database/types/connection.interface.js +6 -0
- package/dist/database/types/connection.interface.js.map +1 -0
- package/dist/database/types/enums.d.ts +195 -0
- package/dist/database/types/enums.js +244 -0
- package/dist/database/types/enums.js.map +1 -0
- package/dist/database/types/index.d.ts +14 -0
- package/dist/database/types/index.js +31 -0
- package/dist/database/types/index.js.map +1 -0
- package/dist/database/types/migration.interface.d.ts +686 -0
- package/dist/database/types/migration.interface.js +9 -0
- package/dist/database/types/migration.interface.js.map +1 -0
- package/dist/database/types/presave.interface.d.ts +292 -0
- package/dist/database/types/presave.interface.js +60 -0
- package/dist/database/types/presave.interface.js.map +1 -0
- package/dist/database/types/query.interface.d.ts +205 -0
- package/dist/database/types/query.interface.js +6 -0
- package/dist/database/types/query.interface.js.map +1 -0
- package/dist/database/types/schema.interface.d.ts +398 -0
- package/dist/database/types/schema.interface.js +6 -0
- package/dist/database/types/schema.interface.js.map +1 -0
- package/dist/database/types/transaction.interface.d.ts +84 -0
- package/dist/database/types/transaction.interface.js +6 -0
- package/dist/database/types/transaction.interface.js.map +1 -0
- package/dist/database/types/trigger.interface.d.ts +612 -0
- package/dist/database/types/trigger.interface.js +121 -0
- package/dist/database/types/trigger.interface.js.map +1 -0
- package/dist/database/types/write.interface.d.ts +216 -0
- package/dist/database/types/write.interface.js +6 -0
- package/dist/database/types/write.interface.js.map +1 -0
- package/dist/database/utils/database-error.d.ts +96 -0
- package/dist/database/utils/database-error.js +221 -0
- package/dist/database/utils/database-error.js.map +1 -0
- package/dist/database/utils/index.d.ts +6 -0
- package/dist/database/utils/index.js +11 -0
- package/dist/database/utils/index.js.map +1 -0
- package/dist/graph/adapters/adapter.factory.d.ts +47 -0
- package/dist/graph/adapters/adapter.factory.js +77 -0
- package/dist/graph/adapters/adapter.factory.js.map +1 -0
- package/dist/graph/adapters/arangodb.adapter.d.ts +86 -0
- package/dist/graph/adapters/arangodb.adapter.js +1522 -0
- package/dist/graph/adapters/arangodb.adapter.js.map +1 -0
- package/dist/graph/adapters/base.adapter.d.ts +245 -0
- package/dist/graph/adapters/base.adapter.js +64 -0
- package/dist/graph/adapters/base.adapter.js.map +1 -0
- package/dist/graph/adapters/index.d.ts +11 -0
- package/dist/graph/adapters/index.js +21 -0
- package/dist/graph/adapters/index.js.map +1 -0
- package/dist/graph/adapters/memgraph.adapter.d.ts +110 -0
- package/dist/graph/adapters/memgraph.adapter.js +1345 -0
- package/dist/graph/adapters/memgraph.adapter.js.map +1 -0
- package/dist/graph/adapters/neo4j.adapter.d.ts +81 -0
- package/dist/graph/adapters/neo4j.adapter.js +1198 -0
- package/dist/graph/adapters/neo4j.adapter.js.map +1 -0
- package/dist/graph/adapters/neptune.adapter.d.ts +82 -0
- package/dist/graph/adapters/neptune.adapter.js +1313 -0
- package/dist/graph/adapters/neptune.adapter.js.map +1 -0
- package/dist/graph/graphs.service.d.ts +546 -0
- package/dist/graph/graphs.service.js +1893 -0
- package/dist/graph/graphs.service.js.map +1 -0
- package/dist/graph/index.d.ts +57 -0
- package/dist/graph/index.js +77 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/transactions/index.d.ts +4 -0
- package/dist/graph/transactions/index.js +9 -0
- package/dist/graph/transactions/index.js.map +1 -0
- package/dist/graph/transactions/transaction-manager.d.ts +61 -0
- package/dist/graph/transactions/transaction-manager.js +126 -0
- package/dist/graph/transactions/transaction-manager.js.map +1 -0
- package/dist/graph/types/connection.interface.d.ts +149 -0
- package/dist/graph/types/connection.interface.js +9 -0
- package/dist/graph/types/connection.interface.js.map +1 -0
- package/dist/graph/types/enums.d.ts +101 -0
- package/dist/graph/types/enums.js +114 -0
- package/dist/graph/types/enums.js.map +1 -0
- package/dist/graph/types/index.d.ts +13 -0
- package/dist/graph/types/index.js +20 -0
- package/dist/graph/types/index.js.map +1 -0
- package/dist/graph/types/node.interface.d.ts +248 -0
- package/dist/graph/types/node.interface.js +9 -0
- package/dist/graph/types/node.interface.js.map +1 -0
- package/dist/graph/types/query.interface.d.ts +175 -0
- package/dist/graph/types/query.interface.js +9 -0
- package/dist/graph/types/query.interface.js.map +1 -0
- package/dist/graph/types/relationship.interface.d.ts +207 -0
- package/dist/graph/types/relationship.interface.js +9 -0
- package/dist/graph/types/relationship.interface.js.map +1 -0
- package/dist/graph/types/schema.interface.d.ts +295 -0
- package/dist/graph/types/schema.interface.js +9 -0
- package/dist/graph/types/schema.interface.js.map +1 -0
- package/dist/graph/types/transaction.interface.d.ts +55 -0
- package/dist/graph/types/transaction.interface.js +9 -0
- package/dist/graph/types/transaction.interface.js.map +1 -0
- package/dist/graph/types/traversal.interface.d.ts +181 -0
- package/dist/graph/types/traversal.interface.js +9 -0
- package/dist/graph/types/traversal.interface.js.map +1 -0
- package/dist/graph/utils/graph-error.d.ts +71 -0
- package/dist/graph/utils/graph-error.js +142 -0
- package/dist/graph/utils/graph-error.js.map +1 -0
- package/dist/graph/utils/index.d.ts +4 -0
- package/dist/graph/utils/index.js +9 -0
- package/dist/graph/utils/index.js.map +1 -0
- package/dist/imports/imports.service.d.ts +3 -3
- package/dist/imports/imports.service.js +8 -7
- package/dist/imports/imports.service.js.map +1 -1
- package/dist/imports/imports.types.d.ts +8 -0
- package/dist/imports/repos/openApi.repo.d.ts +1 -1
- package/dist/imports/repos/openApi.repo.js +414 -47
- package/dist/imports/repos/openApi.repo.js.map +1 -1
- package/dist/imports/repos/postmanV21.repo.d.ts +1 -1
- package/dist/imports/repos/postmanV21.repo.js +126 -83
- package/dist/imports/repos/postmanV21.repo.js.map +1 -1
- package/dist/index.d.ts +3239 -285
- package/dist/index.js +4705 -687
- package/dist/index.js.map +1 -1
- package/dist/init.interface.d.ts +407 -0
- package/dist/init.interface.js +3 -0
- package/dist/init.interface.js.map +1 -0
- package/dist/inputs/inputs.service.d.ts +1 -1
- package/dist/inputs/inputs.service.js +2 -2
- package/dist/inputs/inputs.service.js.map +1 -1
- package/dist/inputs/utils/inputs.utils.create.js +1 -1
- package/dist/inputs/utils/inputs.utils.create.js.map +1 -1
- package/dist/jobs/index.d.ts +38 -0
- package/dist/jobs/index.js +50 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/jobs.service.d.ts +154 -0
- package/dist/jobs/jobs.service.js +491 -0
- package/dist/jobs/jobs.service.js.map +1 -0
- package/dist/jobs/jobs.state.d.ts +113 -0
- package/dist/jobs/jobs.state.js +447 -0
- package/dist/jobs/jobs.state.js.map +1 -0
- package/dist/jobs/types.d.ts +449 -0
- package/dist/jobs/types.js +74 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/logs/logs.types.d.ts +16 -1
- package/dist/logs/logs.types.js +5 -0
- package/dist/logs/logs.types.js.map +1 -1
- package/dist/models/index.d.ts +6 -0
- package/dist/models/index.js +11 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/models.service.d.ts +137 -0
- package/dist/models/models.service.js +195 -0
- package/dist/models/models.service.js.map +1 -0
- package/dist/notifications/index.d.ts +13 -0
- package/dist/notifications/index.js +26 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/notifications.service.d.ts +257 -0
- package/dist/notifications/notifications.service.js +656 -0
- package/dist/notifications/notifications.service.js.map +1 -0
- package/dist/notifications/types/index.d.ts +4 -0
- package/dist/notifications/types/index.js +21 -0
- package/dist/notifications/types/index.js.map +1 -0
- package/dist/notifications/types/notifications.types.d.ts +400 -0
- package/dist/notifications/types/notifications.types.js +49 -0
- package/dist/notifications/types/notifications.types.js.map +1 -0
- package/dist/parsers/index.d.ts +3 -0
- package/dist/parsers/index.js +27 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/pipelines/postman.pipelines.d.ts +15 -0
- package/dist/parsers/pipelines/postman.pipelines.js +103 -0
- package/dist/parsers/pipelines/postman.pipelines.js.map +1 -0
- package/dist/parsers/types/postman.types.d.ts +200 -0
- package/dist/parsers/types/postman.types.js +3 -0
- package/dist/parsers/types/postman.types.js.map +1 -0
- package/dist/parsers/utils/postman.utils.d.ts +12 -0
- package/dist/parsers/utils/postman.utils.js +116 -0
- package/dist/parsers/utils/postman.utils.js.map +1 -0
- package/dist/parsers/validators/postman-auth.validators.d.ts +10 -0
- package/dist/parsers/validators/postman-auth.validators.js +127 -0
- package/dist/parsers/validators/postman-auth.validators.js.map +1 -0
- package/dist/parsers/validators/postman-request.validators.d.ts +13 -0
- package/dist/parsers/validators/postman-request.validators.js +139 -0
- package/dist/parsers/validators/postman-request.validators.js.map +1 -0
- package/dist/parsers/validators/postman-response.validators.d.ts +13 -0
- package/dist/parsers/validators/postman-response.validators.js +150 -0
- package/dist/parsers/validators/postman-response.validators.js.map +1 -0
- package/dist/parsers/validators/postman-variable.validators.d.ts +14 -0
- package/dist/parsers/validators/postman-variable.validators.js +163 -0
- package/dist/parsers/validators/postman-variable.validators.js.map +1 -0
- package/dist/pricing/pricing.repo.js +1 -0
- package/dist/pricing/pricing.repo.js.map +1 -0
- package/dist/pricing/pricing.service.d.ts +24 -0
- package/dist/pricing/pricing.service.js +51 -0
- package/dist/pricing/pricing.service.js.map +1 -0
- package/dist/pricing/pricing.types.d.ts +76 -0
- package/dist/pricing/pricing.types.js +21 -0
- package/dist/pricing/pricing.types.js.map +1 -0
- package/dist/pricing/utils/string.utils.d.ts +1 -0
- package/dist/pricing/utils/string.utils.js +9 -0
- package/dist/pricing/utils/string.utils.js.map +1 -0
- package/dist/processor/services/processor.service.d.ts +120 -73
- package/dist/processor/services/processor.service.js +1705 -1294
- package/dist/processor/services/processor.service.js.map +1 -1
- package/dist/processor/services/request.service.d.ts +36 -0
- package/dist/processor/services/request.service.js +304 -0
- package/dist/processor/services/request.service.js.map +1 -0
- package/dist/processor/types/request.types.d.ts +14 -0
- package/dist/processor/types/request.types.js +3 -0
- package/dist/processor/types/request.types.js.map +1 -0
- package/dist/processor/utils/processor.utils.d.ts +3 -0
- package/dist/processor/utils/processor.utils.js +87 -21
- package/dist/processor/utils/processor.utils.js.map +1 -1
- package/dist/processor/utils/request.utils.d.ts +20 -0
- package/dist/processor/utils/request.utils.js +113 -0
- package/dist/processor/utils/request.utils.js.map +1 -0
- package/dist/products/services/products.service.d.ts +330 -77
- package/dist/products/services/products.service.js +2586 -397
- package/dist/products/services/products.service.js.map +1 -1
- package/dist/products/utils/string.utils.d.ts +1 -1
- package/dist/products/utils/string.utils.js +14 -2
- package/dist/products/utils/string.utils.js.map +1 -1
- package/dist/products/validators/index.d.ts +7 -1
- package/dist/products/validators/index.js +16 -1
- package/dist/products/validators/index.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productAgent.validator.d.ts +3 -0
- package/dist/products/validators/joi-validators/create.productAgent.validator.js +266 -0
- package/dist/products/validators/joi-validators/create.productAgent.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/create.productDatabase.validator.js +5 -0
- package/dist/products/validators/joi-validators/create.productDatabase.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productEnv.validator.js +1 -0
- package/dist/products/validators/joi-validators/create.productEnv.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productGraph.validator.js +89 -0
- package/dist/products/validators/joi-validators/create.productGraph.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/create.productHealthcheck.validator.d.ts +4 -0
- package/dist/products/validators/joi-validators/create.productHealthcheck.validator.js +58 -0
- package/dist/products/validators/joi-validators/create.productHealthcheck.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js +81 -25
- package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productModel.validator.d.ts +3 -0
- package/dist/products/validators/joi-validators/create.productModel.validator.js +132 -0
- package/dist/products/validators/joi-validators/create.productModel.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/create.productNotification.validator.js +133 -45
- package/dist/products/validators/joi-validators/create.productNotification.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productStorage.validator.js +77 -18
- package/dist/products/validators/joi-validators/create.productStorage.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/create.productVector.validator.d.ts +3 -0
- package/dist/products/validators/joi-validators/create.productVector.validator.js +135 -0
- package/dist/products/validators/joi-validators/create.productVector.validator.js.map +1 -0
- package/dist/products/validators/joi-validators/update.dataValue.validator.js +1 -0
- package/dist/products/validators/joi-validators/update.dataValue.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.productDatabase.validator.js +5 -0
- package/dist/products/validators/joi-validators/update.productDatabase.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.productEnv.validator.js +3 -0
- package/dist/products/validators/joi-validators/update.productEnv.validator.js.map +1 -1
- package/dist/products/validators/joi-validators/update.productGraph.validator.js +88 -0
- package/dist/products/validators/joi-validators/update.productGraph.validator.js.map +1 -0
- package/dist/resilience/fallback.service.d.ts +140 -0
- package/dist/resilience/fallback.service.js +764 -0
- package/dist/resilience/fallback.service.js.map +1 -0
- package/dist/resilience/healthcheck.service.d.ts +159 -0
- package/dist/resilience/healthcheck.service.js +943 -0
- package/dist/resilience/healthcheck.service.js.map +1 -0
- package/dist/resilience/index.d.ts +104 -0
- package/dist/resilience/index.js +140 -0
- package/dist/resilience/index.js.map +1 -0
- package/dist/resilience/quota.service.d.ts +82 -0
- package/dist/resilience/quota.service.js +516 -0
- package/dist/resilience/quota.service.js.map +1 -0
- package/dist/resilience/resilience.service.d.ts +98 -0
- package/dist/resilience/resilience.service.js +560 -0
- package/dist/resilience/resilience.service.js.map +1 -0
- package/dist/resilience/types/index.d.ts +513 -0
- package/dist/resilience/types/index.js +29 -0
- package/dist/resilience/types/index.js.map +1 -0
- package/dist/secrets/index.d.ts +10 -0
- package/dist/secrets/index.js +33 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/secrets.resolver.d.ts +52 -0
- package/dist/secrets/secrets.resolver.js +233 -0
- package/dist/secrets/secrets.resolver.js.map +1 -0
- package/dist/secrets/secrets.service.d.ts +93 -0
- package/dist/secrets/secrets.service.js +258 -0
- package/dist/secrets/secrets.service.js.map +1 -0
- package/dist/secrets/secrets.types.d.ts +188 -0
- package/dist/secrets/secrets.types.js +87 -0
- package/dist/secrets/secrets.types.js.map +1 -0
- package/dist/sessions/index.d.ts +50 -0
- package/dist/sessions/index.js +93 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/sessions.helper.d.ts +68 -0
- package/dist/sessions/sessions.helper.js +116 -0
- package/dist/sessions/sessions.helper.js.map +1 -0
- package/dist/sessions/sessions.resolver.d.ts +150 -0
- package/dist/sessions/sessions.resolver.js +356 -0
- package/dist/sessions/sessions.resolver.js.map +1 -0
- package/dist/sessions/sessions.service.d.ts +170 -0
- package/dist/sessions/sessions.service.js +736 -0
- package/dist/sessions/sessions.service.js.map +1 -0
- package/dist/sessions/types/index.d.ts +290 -0
- package/dist/sessions/types/index.js +6 -0
- package/dist/sessions/types/index.js.map +1 -0
- package/dist/storage/index.d.ts +66 -0
- package/dist/storage/index.js +98 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/storage.service.d.ts +151 -0
- package/dist/storage/storage.service.js +522 -0
- package/dist/storage/storage.service.js.map +1 -0
- package/dist/storage/types/index.d.ts +207 -0
- package/dist/storage/types/index.js +6 -0
- package/dist/storage/types/index.js.map +1 -0
- package/dist/storage/utils/storage.util.d.ts +51 -0
- package/dist/storage/utils/storage.util.js +402 -0
- package/dist/storage/utils/storage.util.js.map +1 -0
- package/dist/test/index.d.ts +3 -0
- package/dist/test/index.js +11 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/test.appBuilder.d.ts +0 -1
- package/dist/test/test.appBuilder.js +0 -15
- package/dist/test/test.appBuilder.js.map +1 -1
- package/dist/test/test.broker.kafka.js +172 -0
- package/dist/test/test.broker.kafka.js.map +1 -0
- package/dist/test/test.broker.nats.js +193 -0
- package/dist/test/test.broker.nats.js.map +1 -0
- package/dist/test/test.broker.pubsub.js +171 -0
- package/dist/test/test.broker.pubsub.js.map +1 -0
- package/dist/test/test.broker.rabbitmq.js +164 -0
- package/dist/test/test.broker.rabbitmq.js.map +1 -0
- package/dist/test/test.broker.redis.js +168 -0
- package/dist/test/test.broker.redis.js.map +1 -0
- package/dist/test/test.broker.sqs.d.ts +1 -0
- package/dist/test/test.broker.sqs.js +158 -0
- package/dist/test/test.broker.sqs.js.map +1 -0
- package/dist/test/test.caches.d.ts +1 -0
- package/dist/test/test.caches.js +231 -0
- package/dist/test/test.caches.js.map +1 -0
- package/dist/test/test.database.d.ts +1 -0
- package/dist/test/test.database.dynamo.d.ts +1 -0
- package/dist/test/test.database.dynamo.js +265 -0
- package/dist/test/test.database.dynamo.js.map +1 -0
- package/dist/test/test.database.js +140 -0
- package/dist/test/test.database.js.map +1 -0
- package/dist/test/test.database.mongo.d.ts +1 -0
- package/dist/test/test.database.mongo.js +371 -0
- package/dist/test/test.database.mongo.js.map +1 -0
- package/dist/test/test.database.mysql.d.ts +1 -0
- package/dist/test/test.database.mysql.js +415 -0
- package/dist/test/test.database.mysql.js.map +1 -0
- package/dist/test/test.database.postgres.d.ts +1 -0
- package/dist/test/test.database.postgres.js +412 -0
- package/dist/test/test.database.postgres.js.map +1 -0
- package/dist/test/test.email.brevo.d.ts +1 -0
- package/dist/test/test.email.brevo.js +326 -0
- package/dist/test/test.email.brevo.js.map +1 -0
- package/dist/test/test.email.mailgun.d.ts +1 -0
- package/dist/test/test.email.mailgun.js +352 -0
- package/dist/test/test.email.mailgun.js.map +1 -0
- package/dist/test/test.email.postmark.d.ts +1 -0
- package/dist/test/test.email.postmark.js +316 -0
- package/dist/test/test.email.postmark.js.map +1 -0
- package/dist/test/test.email.sendgrid.d.ts +1 -0
- package/dist/test/test.email.sendgrid.js +365 -0
- package/dist/test/test.email.sendgrid.js.map +1 -0
- package/dist/test/test.email.smtp.d.ts +1 -0
- package/dist/test/test.email.smtp.js +323 -0
- package/dist/test/test.email.smtp.js.map +1 -0
- package/dist/test/test.graph.arangodb.d.ts +1 -0
- package/dist/test/test.graph.arangodb.js +358 -0
- package/dist/test/test.graph.arangodb.js.map +1 -0
- package/dist/test/test.graph.memgraph.d.ts +1 -0
- package/dist/test/test.graph.memgraph.js +320 -0
- package/dist/test/test.graph.memgraph.js.map +1 -0
- package/dist/test/test.graph.neo4j.d.ts +1 -0
- package/dist/test/test.graph.neo4j.js +218 -0
- package/dist/test/test.graph.neo4j.js.map +1 -0
- package/dist/test/test.graph.neptune.d.ts +1 -0
- package/dist/test/test.graph.neptune.js +331 -0
- package/dist/test/test.graph.neptune.js.map +1 -0
- package/dist/test/test.health.js +1 -0
- package/dist/test/test.health.js.map +1 -0
- package/dist/test/test.import.d.ts +0 -1
- package/dist/test/test.import.js +0 -1459
- package/dist/test/test.import.js.map +1 -1
- package/dist/test/test.import.openapi.d.ts +0 -1
- package/dist/test/test.import.openapi.js +0 -75
- package/dist/test/test.import.openapi.js.map +1 -1
- package/dist/test/test.imports.js +14 -55
- package/dist/test/test.imports.js.map +1 -1
- package/dist/test/test.logs.d.ts +0 -1
- package/dist/test/test.logs.js +0 -17
- package/dist/test/test.logs.js.map +1 -1
- package/dist/test/test.notifications.d.ts +1 -0
- package/dist/test/test.notifications.js +198 -0
- package/dist/test/test.notifications.js.map +1 -0
- package/dist/test/test.notifiers.js +1 -0
- package/dist/test/test.notifiers.js.map +1 -0
- package/dist/test/test.processor.d.ts +0 -1
- package/dist/test/test.processor.js +0 -122
- package/dist/test/test.processor.js.map +1 -1
- package/dist/test/test.productBuilder.d.ts +0 -1
- package/dist/test/test.productBuilder.js +0 -660
- package/dist/test/test.productBuilder.js.map +1 -1
- package/dist/test/test.products.js +1 -0
- package/dist/test/test.products.js.map +1 -0
- package/dist/test/test.push.expo.d.ts +1 -0
- package/dist/test/test.push.expo.js +442 -0
- package/dist/test/test.push.expo.js.map +1 -0
- package/dist/test/test.push.firebase.d.ts +1 -0
- package/dist/test/test.push.firebase.js +409 -0
- package/dist/test/test.push.firebase.js.map +1 -0
- package/dist/test/test.session.d.ts +1 -0
- package/dist/test/test.session.js +299 -0
- package/dist/test/test.session.js.map +1 -0
- package/dist/test/test.sms.nexmo.d.ts +1 -0
- package/dist/test/test.sms.nexmo.js +278 -0
- package/dist/test/test.sms.nexmo.js.map +1 -0
- package/dist/test/test.sms.twilio.d.ts +1 -0
- package/dist/test/test.sms.twilio.js +275 -0
- package/dist/test/test.sms.twilio.js.map +1 -0
- package/dist/test/test.storage.d.ts +1 -0
- package/dist/test/test.storage.js +202 -0
- package/dist/test/test.storage.js.map +1 -0
- package/dist/test/test.triggers.d.ts +1 -0
- package/dist/test/test.triggers.js +314 -0
- package/dist/test/test.triggers.js.map +1 -0
- package/dist/test/test.vector.pinecone.d.ts +1 -0
- package/dist/test/test.vector.pinecone.js +238 -0
- package/dist/test/test.vector.pinecone.js.map +1 -0
- package/dist/test/test.vector.qdrant.d.ts +1 -0
- package/dist/test/test.vector.qdrant.js +307 -0
- package/dist/test/test.vector.qdrant.js.map +1 -0
- package/dist/test/test.vector.weaviate.d.ts +1 -0
- package/dist/test/test.vector.weaviate.js +325 -0
- package/dist/test/test.vector.weaviate.js.map +1 -0
- package/dist/types/appBuilder.types.d.ts +10 -13
- package/dist/types/enums.d.ts +11 -1
- package/dist/types/enums.js +10 -0
- package/dist/types/enums.js.map +1 -1
- package/dist/types/index.types.d.ts +6 -4
- package/dist/types/index.types.js +0 -1
- package/dist/types/index.types.js.map +1 -1
- package/dist/types/pricing.types.d.ts +4 -0
- package/dist/types/pricing.types.js +3 -0
- package/dist/types/pricing.types.js.map +1 -0
- package/dist/types/processor.types.d.ts +245 -20
- package/dist/types/processor.types.js +9 -1
- package/dist/types/processor.types.js.map +1 -1
- package/dist/types/productsBuilder.types.d.ts +906 -24
- package/dist/types/productsBuilder.types.js +173 -2
- package/dist/types/productsBuilder.types.js.map +1 -1
- package/dist/types/request-tracker.interface.js +1 -0
- package/dist/types/request-tracker.interface.js.map +1 -0
- package/dist/types/requests.types.d.ts +2 -0
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.js +5 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.js +24 -52
- package/dist/utils/index.js.map +1 -1
- package/dist/vector/adapters/base.adapter.d.ts +152 -0
- package/dist/vector/adapters/base.adapter.js +137 -0
- package/dist/vector/adapters/base.adapter.js.map +1 -0
- package/dist/vector/adapters/index.d.ts +10 -0
- package/dist/vector/adapters/index.js +19 -0
- package/dist/vector/adapters/index.js.map +1 -0
- package/dist/vector/adapters/memory.adapter.d.ts +85 -0
- package/dist/vector/adapters/memory.adapter.js +505 -0
- package/dist/vector/adapters/memory.adapter.js.map +1 -0
- package/dist/vector/adapters/pinecone.adapter.d.ts +52 -0
- package/dist/vector/adapters/pinecone.adapter.js +400 -0
- package/dist/vector/adapters/pinecone.adapter.js.map +1 -0
- package/dist/vector/adapters/qdrant.adapter.d.ts +56 -0
- package/dist/vector/adapters/qdrant.adapter.js +392 -0
- package/dist/vector/adapters/qdrant.adapter.js.map +1 -0
- package/dist/vector/adapters/weaviate.adapter.d.ts +64 -0
- package/dist/vector/adapters/weaviate.adapter.js +478 -0
- package/dist/vector/adapters/weaviate.adapter.js.map +1 -0
- package/dist/vector/index.d.ts +47 -0
- package/dist/vector/index.js +72 -0
- package/dist/vector/index.js.map +1 -0
- package/dist/vector/types/connection.interface.d.ts +151 -0
- package/dist/vector/types/connection.interface.js +8 -0
- package/dist/vector/types/connection.interface.js.map +1 -0
- package/dist/vector/types/embedding.interface.d.ts +144 -0
- package/dist/vector/types/embedding.interface.js +8 -0
- package/dist/vector/types/embedding.interface.js.map +1 -0
- package/dist/vector/types/enums.d.ts +104 -0
- package/dist/vector/types/enums.js +113 -0
- package/dist/vector/types/enums.js.map +1 -0
- package/dist/vector/types/index.d.ts +9 -0
- package/dist/vector/types/index.js +16 -0
- package/dist/vector/types/index.js.map +1 -0
- package/dist/vector/types/vector.interface.d.ts +315 -0
- package/dist/vector/types/vector.interface.js +8 -0
- package/dist/vector/types/vector.interface.js.map +1 -0
- package/dist/vector/utils/index.d.ts +6 -0
- package/dist/vector/utils/index.js +11 -0
- package/dist/vector/utils/index.js.map +1 -0
- package/dist/vector/utils/vector-error.d.ts +69 -0
- package/dist/vector/utils/vector-error.js +116 -0
- package/dist/vector/utils/vector-error.js.map +1 -0
- package/dist/vector/vector-database.service.d.ts +408 -0
- package/dist/vector/vector-database.service.js +545 -0
- package/dist/vector/vector-database.service.js.map +1 -0
- package/dist/vector/vector.service.d.ts +245 -0
- package/dist/vector/vector.service.js +384 -0
- package/dist/vector/vector.service.js.map +1 -0
- package/dist/workflows/index.d.ts +30 -0
- package/dist/workflows/index.js +64 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/types/index.d.ts +6 -0
- package/dist/workflows/types/index.js +23 -0
- package/dist/workflows/types/index.js.map +1 -0
- package/dist/workflows/types/workflows.types.d.ts +1035 -0
- package/dist/workflows/types/workflows.types.js +13 -0
- package/dist/workflows/types/workflows.types.js.map +1 -0
- package/dist/workflows/workflow-builder.d.ts +70 -0
- package/dist/workflows/workflow-builder.js +338 -0
- package/dist/workflows/workflow-builder.js.map +1 -0
- package/dist/workflows/workflow-executor.d.ts +208 -0
- package/dist/workflows/workflow-executor.js +1194 -0
- package/dist/workflows/workflow-executor.js.map +1 -0
- package/dist/workflows/workflows.service.d.ts +404 -0
- package/dist/workflows/workflows.service.js +1620 -0
- package/dist/workflows/workflows.service.js.map +1 -0
- package/package.json +54 -11
- package/dist/actions/actions.repo.js +0 -13
- package/dist/actions/actions.repo.js.map +0 -1
- package/dist/actions/actions.service.js +0 -24
- package/dist/actions/actions.service.js.map +0 -1
- package/dist/actions/utils/actions.util.read.js +0 -427
- package/dist/actions/utils/actions.util.read.js.map +0 -1
- package/dist/api/services/integrationsApi.service.d.ts +0 -18
- package/dist/api/services/integrationsApi.service.js +0 -80
- package/dist/api/services/integrationsApi.service.js.map +0 -1
- package/dist/appBuilder/services/app.service.d.ts +0 -111
- package/dist/appBuilder/services/app.service.js +0 -737
- package/dist/appBuilder/services/app.service.js.map +0 -1
- package/dist/appBuilder/services/appBuilder.service.d.ts +0 -111
- package/dist/appBuilder/services/appBuilder.service.js +0 -662
- package/dist/appBuilder/services/appBuilder.service.js.map +0 -1
- package/dist/appBuilder/utils/objects.utils.d.ts +0 -3
- package/dist/appBuilder/utils/objects.utils.js +0 -9
- package/dist/appBuilder/utils/objects.utils.js.map +0 -1
- package/dist/appBuilder/utils/string.utils.d.ts +0 -2
- package/dist/appBuilder/utils/string.utils.js +0 -57
- package/dist/appBuilder/utils/string.utils.js.map +0 -1
- package/dist/appBuilder/validators/index.d.ts +0 -19
- package/dist/appBuilder/validators/index.js +0 -40
- package/dist/appBuilder/validators/index.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.app.validator.js +0 -10
- package/dist/appBuilder/validators/joi-validators/create.app.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.appAction.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/create.appAction.validator.js +0 -20
- package/dist/appBuilder/validators/joi-validators/create.appAction.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.d.ts +0 -7
- package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.js +0 -44
- package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.d.ts +0 -3
- package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.js +0 -31
- package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.appBody.validators.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/create.appBody.validators.js +0 -11
- package/dist/appBuilder/validators/joi-validators/create.appBody.validators.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.js +0 -12
- package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.js +0 -17
- package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.d.ts +0 -5
- package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.js +0 -30
- package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.js +0 -14
- package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/sample.validator.d.ts +0 -5
- package/dist/appBuilder/validators/joi-validators/sample.validator.js +0 -26
- package/dist/appBuilder/validators/joi-validators/sample.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.app.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/update.app.validator.js +0 -34
- package/dist/appBuilder/validators/joi-validators/update.app.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.appAction.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/update.appAction.validator.js +0 -23
- package/dist/appBuilder/validators/joi-validators/update.appAction.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.d.ts +0 -3
- package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.js +0 -21
- package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.js +0 -19
- package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.js +0 -12
- package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.js +0 -17
- package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.js +0 -16
- package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.d.ts +0 -4
- package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.js +0 -14
- package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.js.map +0 -1
- package/dist/appBuilder/validators/joi-validators/update.validation.entityData.validator.js +0 -27
- package/dist/appBuilder/validators/joi-validators/update.validation.entityData.validator.js.map +0 -1
- package/dist/apps/validators/joi-validators/create.appEvent.validator.d.ts +0 -5
- package/dist/apps/validators/joi-validators/create.appEvent.validator.js +0 -30
- package/dist/apps/validators/joi-validators/create.appEvent.validator.js.map +0 -1
- package/dist/apps/validators/joi-validators/update.appEvent.validator.d.ts +0 -4
- package/dist/apps/validators/joi-validators/update.appEvent.validator.js +0 -16
- package/dist/apps/validators/joi-validators/update.appEvent.validator.js.map +0 -1
- package/dist/clients/integrations.client.d.ts +0 -2
- package/dist/clients/integrations.client.js +0 -26
- package/dist/clients/integrations.client.js.map +0 -1
- package/dist/integrationsBuilder/services/integration.service.d.ts +0 -138
- package/dist/integrationsBuilder/services/integration.service.js +0 -1148
- package/dist/integrationsBuilder/services/integration.service.js.map +0 -1
- package/dist/integrationsBuilder/services/integrationBuilder.service.d.ts +0 -130
- package/dist/integrationsBuilder/services/integrationBuilder.service.js +0 -1017
- package/dist/integrationsBuilder/services/integrationBuilder.service.js.map +0 -1
- package/dist/integrationsBuilder/utils/objects.utils.d.ts +0 -2
- package/dist/integrationsBuilder/utils/objects.utils.js +0 -48
- package/dist/integrationsBuilder/utils/objects.utils.js.map +0 -1
- package/dist/integrationsBuilder/utils/string.utils.d.ts +0 -1
- package/dist/integrationsBuilder/utils/string.utils.js +0 -9
- package/dist/integrationsBuilder/utils/string.utils.js.map +0 -1
- package/dist/integrationsBuilder/validators/index.d.ts +0 -18
- package/dist/integrationsBuilder/validators/index.js +0 -38
- package/dist/integrationsBuilder/validators/index.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.js +0 -10
- package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.d.ts +0 -4
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.js +0 -26
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.js +0 -10
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.js +0 -60
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.js +0 -9
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.js.map +0 -1
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.d.ts +0 -3
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.js +0 -8
- package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.js.map +0 -1
- package/dist/postman.d.ts +0 -1
- package/dist/postman.js +0 -21674
- package/dist/postman.js.map +0 -1
- package/dist/processor/utils/mongo.util.js +0 -152
- package/dist/processor/utils/mongo.util.js.map +0 -1
- package/dist/processor/utils/postgres.util.d.ts +0 -14
- package/dist/processor/utils/postgres.util.js +0 -83
- package/dist/processor/utils/postgres.util.js.map +0 -1
- package/dist/products/validators/joi-validators/create.product.validator.d.ts +0 -3
- package/dist/products/validators/joi-validators/create.product.validator.js +0 -10
- package/dist/products/validators/joi-validators/create.product.validator.js.map +0 -1
- package/dist/test.appBuilder.js +0 -14
- package/dist/test.appBuilder.js.map +0 -1
- package/dist/test.import.js +0 -24
- package/dist/test.import.js.map +0 -1
- package/dist/test.imports.js +0 -28
- package/dist/test.imports.js.map +0 -1
- package/dist/test.integrationBuilder.js +0 -276
- package/dist/test.integrationBuilder.js.map +0 -1
- package/dist/test.processor.js +0 -23
- package/dist/test.processor.js.map +0 -1
- package/dist/test.utils.js +0 -25
- package/dist/test.utils.js.map +0 -1
- package/dist/types/integrationsBuilder.types.d.ts +0 -276
- package/dist/types/integrationsBuilder.types.js +0 -51
- package/dist/types/integrationsBuilder.types.js.map +0 -1
- /package/dist/{actions/actions.repo.d.ts → pricing/pricing.repo.d.ts} +0 -0
- /package/dist/{appBuilder/validators/joi-validators/create.app.validator.d.ts → products/validators/joi-validators/create.productGraph.validator.d.ts} +0 -0
- /package/dist/{appBuilder/validators/joi-validators/update.validation.entityData.validator.d.ts → products/validators/joi-validators/update.productGraph.validator.d.ts} +0 -0
- /package/dist/{test.appBuilder.d.ts → test/test.broker.kafka.d.ts} +0 -0
- /package/dist/{test.imports.d.ts → test/test.broker.nats.d.ts} +0 -0
- /package/dist/{test.integrationBuilder.d.ts → test/test.broker.pubsub.d.ts} +0 -0
- /package/dist/{test.processor.d.ts → test/test.broker.rabbitmq.d.ts} +0 -0
- /package/dist/{test.utils.d.ts → test/test.broker.redis.d.ts} +0 -0
- /package/dist/{actions/actions.service.d.ts → test/test.health.d.ts} +0 -0
- /package/dist/{actions/utils/actions.util.read.d.ts → test/test.notifiers.d.ts} +0 -0
- /package/dist/{processor/utils/mongo.util.d.ts → test/test.products.d.ts} +0 -0
- /package/dist/{test.import.d.ts → types/request-tracker.interface.d.ts} +0 -0
|
@@ -0,0 +1,1253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MongoDB Adapter
|
|
4
|
+
*
|
|
5
|
+
* Database adapter for MongoDB databases using the 'mongodb' driver.
|
|
6
|
+
* Implements all methods from BaseAdapter with MongoDB-specific operations.
|
|
7
|
+
*
|
|
8
|
+
* Note: MongoDB uses collections instead of tables, and documents instead of rows.
|
|
9
|
+
* The adapter translates SQL-like operations to MongoDB operations.
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.MongoDBAdapter = void 0;
|
|
46
|
+
const base_adapter_1 = require("./base.adapter");
|
|
47
|
+
const enums_1 = require("../types/enums");
|
|
48
|
+
const database_error_1 = require("../utils/database-error");
|
|
49
|
+
/**
|
|
50
|
+
* MongoDB database adapter
|
|
51
|
+
* Provides MongoDB-specific implementations for all database operations
|
|
52
|
+
*/
|
|
53
|
+
class MongoDBAdapter extends base_adapter_1.BaseAdapter {
|
|
54
|
+
constructor() {
|
|
55
|
+
super(...arguments);
|
|
56
|
+
this.databaseType = enums_1.DatabaseType.MONGODB;
|
|
57
|
+
this.mongoClient = null;
|
|
58
|
+
this.db = null;
|
|
59
|
+
this.databaseName = '';
|
|
60
|
+
}
|
|
61
|
+
// ==================== CONNECTION METHODS ====================
|
|
62
|
+
async connect(options) {
|
|
63
|
+
console.log(`[MongoDBAdapter] connect() called`);
|
|
64
|
+
console.log(`[MongoDBAdapter] Options:`, JSON.stringify(Object.assign(Object.assign({}, options), { connectionUrl: '***REDACTED***' }), null, 2));
|
|
65
|
+
try {
|
|
66
|
+
console.log(`[MongoDBAdapter] Importing 'mongodb' library...`);
|
|
67
|
+
// Dynamic import of mongodb to avoid bundling issues
|
|
68
|
+
const { MongoClient } = await Promise.resolve().then(() => __importStar(require('mongodb')));
|
|
69
|
+
console.log(`[MongoDBAdapter] 'mongodb' library imported successfully`);
|
|
70
|
+
this.connectionUrl = options.connectionUrl;
|
|
71
|
+
console.log(`[MongoDBAdapter] Connection URL stored`);
|
|
72
|
+
console.log(`[MongoDBAdapter] Connection URL length: ${options.connectionUrl.length}`);
|
|
73
|
+
// Parse connection URL to extract database name
|
|
74
|
+
console.log(`[MongoDBAdapter] Parsing connection URL...`);
|
|
75
|
+
const url = new URL(options.connectionUrl);
|
|
76
|
+
this.databaseName = url.pathname.slice(1) || 'test';
|
|
77
|
+
const parsedConfig = {
|
|
78
|
+
protocol: url.protocol,
|
|
79
|
+
hostname: url.hostname,
|
|
80
|
+
port: url.port || 'default',
|
|
81
|
+
database: this.databaseName,
|
|
82
|
+
username: url.username || 'not specified',
|
|
83
|
+
hasPassword: !!url.password,
|
|
84
|
+
};
|
|
85
|
+
console.log(`[MongoDBAdapter] Connection URL parsed:`, parsedConfig);
|
|
86
|
+
const clientConfig = {
|
|
87
|
+
maxPoolSize: options.poolSize || 10,
|
|
88
|
+
connectTimeoutMS: options.connectionTimeout || 10000,
|
|
89
|
+
serverSelectionTimeoutMS: options.connectionTimeout || 10000,
|
|
90
|
+
};
|
|
91
|
+
console.log(`[MongoDBAdapter] Client config:`, clientConfig);
|
|
92
|
+
console.log(`[MongoDBAdapter] Creating MongoClient...`);
|
|
93
|
+
this.mongoClient = new MongoClient(options.connectionUrl, clientConfig);
|
|
94
|
+
console.log(`[MongoDBAdapter] MongoClient created successfully`);
|
|
95
|
+
console.log(`[MongoDBAdapter] Connecting to MongoDB...`);
|
|
96
|
+
await this.mongoClient.connect();
|
|
97
|
+
console.log(`[MongoDBAdapter] Connected to MongoDB successfully`);
|
|
98
|
+
console.log(`[MongoDBAdapter] Getting database: ${this.databaseName}`);
|
|
99
|
+
this.db = this.mongoClient.db(this.databaseName);
|
|
100
|
+
console.log(`[MongoDBAdapter] Database instance acquired`);
|
|
101
|
+
console.log(`[MongoDBAdapter] Getting server info...`);
|
|
102
|
+
// Get server info
|
|
103
|
+
const adminDb = this.mongoClient.db('admin');
|
|
104
|
+
const serverInfo = await adminDb.command({ buildInfo: 1 });
|
|
105
|
+
console.log(`[MongoDBAdapter] Server info retrieved successfully`);
|
|
106
|
+
console.log(`[MongoDBAdapter] MongoDB version:`, serverInfo.version);
|
|
107
|
+
this.client = this.mongoClient;
|
|
108
|
+
this.connected = true;
|
|
109
|
+
console.log(`[MongoDBAdapter] Connection marked as connected`);
|
|
110
|
+
return {
|
|
111
|
+
connected: true,
|
|
112
|
+
version: serverInfo.version,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.error(`[MongoDBAdapter] Connection failed with error:`, error);
|
|
117
|
+
console.error(`[MongoDBAdapter] Error type:`, error.constructor.name);
|
|
118
|
+
console.error(`[MongoDBAdapter] Error message:`, error.message);
|
|
119
|
+
console.error(`[MongoDBAdapter] Error code:`, error.code);
|
|
120
|
+
console.error(`[MongoDBAdapter] Full error:`, JSON.stringify(error, null, 2));
|
|
121
|
+
throw database_error_1.DatabaseError.connectionError(`Failed to connect to MongoDB: ${error.message}`, error);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async testConnection(options) {
|
|
125
|
+
try {
|
|
126
|
+
const { MongoClient } = await Promise.resolve().then(() => __importStar(require('mongodb')));
|
|
127
|
+
const client = new MongoClient(options.connectionUrl, {
|
|
128
|
+
connectTimeoutMS: options.connectionTimeout || 5000,
|
|
129
|
+
serverSelectionTimeoutMS: options.connectionTimeout || 5000,
|
|
130
|
+
});
|
|
131
|
+
await client.connect();
|
|
132
|
+
const adminDb = client.db('admin');
|
|
133
|
+
const serverInfo = await adminDb.command({ buildInfo: 1 });
|
|
134
|
+
await client.close();
|
|
135
|
+
return {
|
|
136
|
+
connected: true,
|
|
137
|
+
version: serverInfo.version,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
return {
|
|
142
|
+
connected: false,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async disconnect() {
|
|
147
|
+
if (this.mongoClient) {
|
|
148
|
+
await this.mongoClient.close();
|
|
149
|
+
this.mongoClient = null;
|
|
150
|
+
this.db = null;
|
|
151
|
+
this.client = null;
|
|
152
|
+
this.connected = false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// ==================== QUERY METHODS ====================
|
|
156
|
+
async query(query) {
|
|
157
|
+
var _a;
|
|
158
|
+
this.ensureConnected();
|
|
159
|
+
try {
|
|
160
|
+
const collection = this.db.collection(query.options.table);
|
|
161
|
+
const session = (_a = query.options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
162
|
+
// Build MongoDB filter from where clause
|
|
163
|
+
const filter = this.buildMongoFilter(query.options.where || {});
|
|
164
|
+
// Build options
|
|
165
|
+
const findOptions = { session };
|
|
166
|
+
// Select specific fields
|
|
167
|
+
if (query.options.select) {
|
|
168
|
+
findOptions.projection = {};
|
|
169
|
+
for (const field of query.options.select) {
|
|
170
|
+
findOptions.projection[field] = 1;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Sorting
|
|
174
|
+
if (query.options.orderBy) {
|
|
175
|
+
findOptions.sort = {};
|
|
176
|
+
const orderByArray = Array.isArray(query.options.orderBy)
|
|
177
|
+
? query.options.orderBy
|
|
178
|
+
: [query.options.orderBy];
|
|
179
|
+
for (const order of orderByArray) {
|
|
180
|
+
findOptions.sort[order.column] = order.order === 'DESC' ? -1 : 1;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Pagination
|
|
184
|
+
if (query.options.limit) {
|
|
185
|
+
findOptions.limit = query.options.limit;
|
|
186
|
+
}
|
|
187
|
+
if (query.options.offset) {
|
|
188
|
+
findOptions.skip = query.options.offset;
|
|
189
|
+
}
|
|
190
|
+
const cursor = collection.find(filter, findOptions);
|
|
191
|
+
const data = await cursor.toArray();
|
|
192
|
+
// Get total count for pagination
|
|
193
|
+
const count = await collection.countDocuments(filter, { session });
|
|
194
|
+
return {
|
|
195
|
+
data: data,
|
|
196
|
+
count,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async raw(options) {
|
|
204
|
+
var _a, _b;
|
|
205
|
+
this.ensureConnected();
|
|
206
|
+
try {
|
|
207
|
+
const query = options.query;
|
|
208
|
+
// If query is an object with MongoDB command keys, run it as a database command
|
|
209
|
+
if (query && typeof query === 'object' && !Array.isArray(query)) {
|
|
210
|
+
const commandKeys = ['create', 'drop', 'findAndModify', 'createIndexes', 'dropIndexes',
|
|
211
|
+
'collMod', 'shardCollection', 'update', 'insert', 'delete', 'aggregate', 'count',
|
|
212
|
+
'distinct', 'mapReduce', 'validate', 'listCollections', 'listIndexes'];
|
|
213
|
+
const isCommand = commandKeys.some(key => key in query);
|
|
214
|
+
if (isCommand) {
|
|
215
|
+
// Run as a database command
|
|
216
|
+
const result = await this.db.command(query);
|
|
217
|
+
return {
|
|
218
|
+
data: result.value ? [result.value] : (((_a = result.cursor) === null || _a === void 0 ? void 0 : _a.firstBatch) || [result]),
|
|
219
|
+
count: result.n || result.ok || 1,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Otherwise, treat as a find query on a collection
|
|
224
|
+
const collection = this.db.collection(options.collection || options.table || '');
|
|
225
|
+
const session = (_b = options.transaction) === null || _b === void 0 ? void 0 : _b.client;
|
|
226
|
+
// For MongoDB, 'query' is the filter object
|
|
227
|
+
const filter = query;
|
|
228
|
+
const cursor = collection.find(filter, { session });
|
|
229
|
+
const data = await cursor.toArray();
|
|
230
|
+
return {
|
|
231
|
+
data: data,
|
|
232
|
+
count: data.length,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// ==================== WRITE METHODS ====================
|
|
240
|
+
async insert(options) {
|
|
241
|
+
var _a;
|
|
242
|
+
this.ensureConnected();
|
|
243
|
+
try {
|
|
244
|
+
const collection = this.db.collection(options.table);
|
|
245
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
246
|
+
const data = Array.isArray(options.data) ? options.data : [options.data];
|
|
247
|
+
if (data.length === 0) {
|
|
248
|
+
return { data: [], count: 0, insertedIds: [] };
|
|
249
|
+
}
|
|
250
|
+
// Get auto-increment fields for this collection
|
|
251
|
+
const autoIncrementFields = await this.getAutoIncrementFields(options.table);
|
|
252
|
+
// Get schema metadata for default values
|
|
253
|
+
const schemaColumns = await this.getSchemaMetadata(options.table);
|
|
254
|
+
// Process each document and assign auto-increment values and defaults
|
|
255
|
+
const processedData = await Promise.all(data.map(async (doc) => {
|
|
256
|
+
const processedDoc = Object.assign({}, doc);
|
|
257
|
+
// Apply default values for missing fields
|
|
258
|
+
for (const column of schemaColumns) {
|
|
259
|
+
if (column.defaultValue !== undefined && column.defaultValue !== null) {
|
|
260
|
+
if (processedDoc[column.name] === undefined || processedDoc[column.name] === null) {
|
|
261
|
+
processedDoc[column.name] = this.resolveDefaultValue(column.defaultValue, column.type);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// For each auto-increment field, get the next value if not already set
|
|
266
|
+
for (const field of autoIncrementFields) {
|
|
267
|
+
if (processedDoc[field] === undefined || processedDoc[field] === null) {
|
|
268
|
+
processedDoc[field] = await this.getNextAutoIncrementValue(options.table, field);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return processedDoc;
|
|
272
|
+
}));
|
|
273
|
+
const result = await collection.insertMany(processedData, { session });
|
|
274
|
+
// Get inserted documents if returning is requested
|
|
275
|
+
let returnedData = [];
|
|
276
|
+
if (options.returning) {
|
|
277
|
+
const insertedIds = Object.values(result.insertedIds);
|
|
278
|
+
returnedData = await collection.find({ _id: { $in: insertedIds } }, { session }).toArray();
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
data: returnedData,
|
|
282
|
+
count: result.insertedCount,
|
|
283
|
+
insertedIds: Object.values(result.insertedIds),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
async update(options) {
|
|
291
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
292
|
+
this.ensureConnected();
|
|
293
|
+
try {
|
|
294
|
+
const collection = this.db.collection(options.table);
|
|
295
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
296
|
+
// Build MongoDB filter
|
|
297
|
+
const filter = this.buildMongoFilter(options.where || {});
|
|
298
|
+
// Build update document
|
|
299
|
+
const updateDoc = { $set: {} };
|
|
300
|
+
for (const [key, value] of Object.entries(options.data)) {
|
|
301
|
+
if (value && typeof value === 'object' && this.isUpdateOperator(value)) {
|
|
302
|
+
// Handle update operators - MongoDB has native support
|
|
303
|
+
// Support both lowercase (new) and uppercase (legacy) operators
|
|
304
|
+
if ('$inc' in value || '$INC' in value) {
|
|
305
|
+
if (!updateDoc.$inc)
|
|
306
|
+
updateDoc.$inc = {};
|
|
307
|
+
updateDoc.$inc[key] = (_b = value.$inc) !== null && _b !== void 0 ? _b : value.$INC;
|
|
308
|
+
}
|
|
309
|
+
else if ('$dec' in value || '$DEC' in value) {
|
|
310
|
+
// MongoDB uses $inc with negative value for decrement
|
|
311
|
+
if (!updateDoc.$inc)
|
|
312
|
+
updateDoc.$inc = {};
|
|
313
|
+
updateDoc.$inc[key] = -((_c = value.$dec) !== null && _c !== void 0 ? _c : value.$DEC);
|
|
314
|
+
}
|
|
315
|
+
else if ('$mul' in value || '$MUL' in value) {
|
|
316
|
+
if (!updateDoc.$mul)
|
|
317
|
+
updateDoc.$mul = {};
|
|
318
|
+
updateDoc.$mul[key] = (_d = value.$mul) !== null && _d !== void 0 ? _d : value.$MUL;
|
|
319
|
+
}
|
|
320
|
+
else if ('$min' in value || '$MIN' in value) {
|
|
321
|
+
if (!updateDoc.$min)
|
|
322
|
+
updateDoc.$min = {};
|
|
323
|
+
updateDoc.$min[key] = (_e = value.$min) !== null && _e !== void 0 ? _e : value.$MIN;
|
|
324
|
+
}
|
|
325
|
+
else if ('$max' in value || '$MAX' in value) {
|
|
326
|
+
if (!updateDoc.$max)
|
|
327
|
+
updateDoc.$max = {};
|
|
328
|
+
updateDoc.$max[key] = (_f = value.$max) !== null && _f !== void 0 ? _f : value.$MAX;
|
|
329
|
+
}
|
|
330
|
+
else if ('$set' in value || '$SET' in value) {
|
|
331
|
+
updateDoc.$set[key] = (_g = value.$set) !== null && _g !== void 0 ? _g : value.$SET;
|
|
332
|
+
}
|
|
333
|
+
else if (('$unset' in value && value.$unset) || ('$UNSET' in value && value.$UNSET)) {
|
|
334
|
+
if (!updateDoc.$unset)
|
|
335
|
+
updateDoc.$unset = {};
|
|
336
|
+
updateDoc.$unset[key] = '';
|
|
337
|
+
}
|
|
338
|
+
else if ('$push' in value || '$PUSH' in value) {
|
|
339
|
+
if (!updateDoc.$push)
|
|
340
|
+
updateDoc.$push = {};
|
|
341
|
+
updateDoc.$push[key] = (_h = value.$push) !== null && _h !== void 0 ? _h : value.$PUSH;
|
|
342
|
+
}
|
|
343
|
+
else if ('$pull' in value || '$PULL' in value) {
|
|
344
|
+
if (!updateDoc.$pull)
|
|
345
|
+
updateDoc.$pull = {};
|
|
346
|
+
updateDoc.$pull[key] = (_j = value.$pull) !== null && _j !== void 0 ? _j : value.$PULL;
|
|
347
|
+
}
|
|
348
|
+
else if ('$addToSet' in value || '$ADDTOSET' in value) {
|
|
349
|
+
if (!updateDoc.$addToSet)
|
|
350
|
+
updateDoc.$addToSet = {};
|
|
351
|
+
updateDoc.$addToSet[key] = (_k = value.$addToSet) !== null && _k !== void 0 ? _k : value.$ADDTOSET;
|
|
352
|
+
}
|
|
353
|
+
else if ('$pop' in value || '$POP' in value) {
|
|
354
|
+
if (!updateDoc.$pop)
|
|
355
|
+
updateDoc.$pop = {};
|
|
356
|
+
updateDoc.$pop[key] = (_l = value.$pop) !== null && _l !== void 0 ? _l : value.$POP;
|
|
357
|
+
}
|
|
358
|
+
else if ('$rename' in value || '$RENAME' in value) {
|
|
359
|
+
if (!updateDoc.$rename)
|
|
360
|
+
updateDoc.$rename = {};
|
|
361
|
+
updateDoc.$rename[key] = (_m = value.$rename) !== null && _m !== void 0 ? _m : value.$RENAME;
|
|
362
|
+
}
|
|
363
|
+
else if ('$currentDate' in value || '$CURRENTDATE' in value) {
|
|
364
|
+
if (!updateDoc.$currentDate)
|
|
365
|
+
updateDoc.$currentDate = {};
|
|
366
|
+
updateDoc.$currentDate[key] = (_o = value.$currentDate) !== null && _o !== void 0 ? _o : value.$CURRENTDATE;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
updateDoc.$set[key] = value;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// Remove empty $set
|
|
374
|
+
if (Object.keys(updateDoc.$set).length === 0) {
|
|
375
|
+
delete updateDoc.$set;
|
|
376
|
+
}
|
|
377
|
+
const result = await collection.updateMany(filter, updateDoc, { session });
|
|
378
|
+
// Get updated documents if returning is requested
|
|
379
|
+
let returnedData = [];
|
|
380
|
+
if (options.returning) {
|
|
381
|
+
returnedData = await collection.find(filter, { session }).toArray();
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
data: returnedData,
|
|
385
|
+
count: result.modifiedCount,
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
catch (error) {
|
|
389
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
async delete(options) {
|
|
393
|
+
var _a;
|
|
394
|
+
this.ensureConnected();
|
|
395
|
+
try {
|
|
396
|
+
const collection = this.db.collection(options.table);
|
|
397
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
398
|
+
// Build MongoDB filter
|
|
399
|
+
const filter = this.buildMongoFilter(options.where || {});
|
|
400
|
+
// Get documents before delete if returning is requested
|
|
401
|
+
let deletedData;
|
|
402
|
+
if (options.returning) {
|
|
403
|
+
deletedData = await collection.find(filter, { session }).toArray();
|
|
404
|
+
}
|
|
405
|
+
const result = await collection.deleteMany(filter, { session });
|
|
406
|
+
return {
|
|
407
|
+
count: result.deletedCount,
|
|
408
|
+
data: deletedData,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
async upsert(options) {
|
|
416
|
+
var _a, _b;
|
|
417
|
+
this.ensureConnected();
|
|
418
|
+
try {
|
|
419
|
+
const collection = this.db.collection(options.table);
|
|
420
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
421
|
+
// Build filter from conflict keys
|
|
422
|
+
const filter = {};
|
|
423
|
+
for (const key of options.conflictKeys) {
|
|
424
|
+
filter[key] = options.data[key];
|
|
425
|
+
}
|
|
426
|
+
// Build update document
|
|
427
|
+
const updateDoc = { $set: options.data };
|
|
428
|
+
const result = await collection.findOneAndUpdate(filter, updateDoc, {
|
|
429
|
+
upsert: true,
|
|
430
|
+
returnDocument: 'after',
|
|
431
|
+
session,
|
|
432
|
+
});
|
|
433
|
+
return {
|
|
434
|
+
data: result.value ? [result.value] : [],
|
|
435
|
+
count: 1,
|
|
436
|
+
operation: ((_b = result.lastErrorObject) === null || _b === void 0 ? void 0 : _b.updatedExisting) ? 'updated' : 'inserted',
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
// ==================== AGGREGATION METHODS ====================
|
|
444
|
+
async count(options) {
|
|
445
|
+
var _a, _b;
|
|
446
|
+
this.ensureConnected();
|
|
447
|
+
try {
|
|
448
|
+
const collection = this.db.collection(options.table);
|
|
449
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
450
|
+
const filter = this.buildMongoFilter(options.where || {});
|
|
451
|
+
if (options.distinct && options.column) {
|
|
452
|
+
// For distinct count, use aggregation
|
|
453
|
+
const result = await collection.aggregate([
|
|
454
|
+
{ $match: filter },
|
|
455
|
+
{ $group: { _id: `$${options.column}` } },
|
|
456
|
+
{ $count: 'count' },
|
|
457
|
+
], { session }).toArray();
|
|
458
|
+
return ((_b = result[0]) === null || _b === void 0 ? void 0 : _b.count) || 0;
|
|
459
|
+
}
|
|
460
|
+
return await collection.countDocuments(filter, { session });
|
|
461
|
+
}
|
|
462
|
+
catch (error) {
|
|
463
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
async sum(options) {
|
|
467
|
+
var _a, _b;
|
|
468
|
+
this.ensureConnected();
|
|
469
|
+
try {
|
|
470
|
+
const collection = this.db.collection(options.table);
|
|
471
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
472
|
+
const filter = this.buildMongoFilter(options.where || {});
|
|
473
|
+
const result = await collection.aggregate([
|
|
474
|
+
{ $match: filter },
|
|
475
|
+
{ $group: { _id: null, sum: { $sum: `$${options.column}` } } },
|
|
476
|
+
], { session }).toArray();
|
|
477
|
+
return ((_b = result[0]) === null || _b === void 0 ? void 0 : _b.sum) || 0;
|
|
478
|
+
}
|
|
479
|
+
catch (error) {
|
|
480
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
async avg(options) {
|
|
484
|
+
var _a, _b;
|
|
485
|
+
this.ensureConnected();
|
|
486
|
+
try {
|
|
487
|
+
const collection = this.db.collection(options.table);
|
|
488
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
489
|
+
const filter = this.buildMongoFilter(options.where || {});
|
|
490
|
+
const result = await collection.aggregate([
|
|
491
|
+
{ $match: filter },
|
|
492
|
+
{ $group: { _id: null, avg: { $avg: `$${options.column}` } } },
|
|
493
|
+
], { session }).toArray();
|
|
494
|
+
return ((_b = result[0]) === null || _b === void 0 ? void 0 : _b.avg) || 0;
|
|
495
|
+
}
|
|
496
|
+
catch (error) {
|
|
497
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
async min(options) {
|
|
501
|
+
var _a, _b;
|
|
502
|
+
this.ensureConnected();
|
|
503
|
+
try {
|
|
504
|
+
const collection = this.db.collection(options.table);
|
|
505
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
506
|
+
const filter = this.buildMongoFilter(options.where || {});
|
|
507
|
+
const result = await collection.aggregate([
|
|
508
|
+
{ $match: filter },
|
|
509
|
+
{ $group: { _id: null, min: { $min: `$${options.column}` } } },
|
|
510
|
+
], { session }).toArray();
|
|
511
|
+
return (_b = result[0]) === null || _b === void 0 ? void 0 : _b.min;
|
|
512
|
+
}
|
|
513
|
+
catch (error) {
|
|
514
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
async max(options) {
|
|
518
|
+
var _a, _b;
|
|
519
|
+
this.ensureConnected();
|
|
520
|
+
try {
|
|
521
|
+
const collection = this.db.collection(options.table);
|
|
522
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
523
|
+
const filter = this.buildMongoFilter(options.where || {});
|
|
524
|
+
const result = await collection.aggregate([
|
|
525
|
+
{ $match: filter },
|
|
526
|
+
{ $group: { _id: null, max: { $max: `$${options.column}` } } },
|
|
527
|
+
], { session }).toArray();
|
|
528
|
+
return (_b = result[0]) === null || _b === void 0 ? void 0 : _b.max;
|
|
529
|
+
}
|
|
530
|
+
catch (error) {
|
|
531
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
async aggregate(builtAggregation) {
|
|
535
|
+
var _a;
|
|
536
|
+
this.ensureConnected();
|
|
537
|
+
try {
|
|
538
|
+
const options = builtAggregation.options;
|
|
539
|
+
const collection = this.db.collection(options.table);
|
|
540
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
541
|
+
// Use the pre-built pipeline
|
|
542
|
+
const result = await collection.aggregate(builtAggregation.pipeline || [], { session }).toArray();
|
|
543
|
+
// Remove _id from result
|
|
544
|
+
if (result[0]) {
|
|
545
|
+
delete result[0]._id;
|
|
546
|
+
}
|
|
547
|
+
return result[0] || {};
|
|
548
|
+
}
|
|
549
|
+
catch (error) {
|
|
550
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
async groupBy(builtGroupBy) {
|
|
554
|
+
var _a;
|
|
555
|
+
this.ensureConnected();
|
|
556
|
+
try {
|
|
557
|
+
const options = builtGroupBy.options;
|
|
558
|
+
const collection = this.db.collection(options.table);
|
|
559
|
+
const session = (_a = options.transaction) === null || _a === void 0 ? void 0 : _a.client;
|
|
560
|
+
// Use the pre-built pipeline
|
|
561
|
+
const results = await collection.aggregate(builtGroupBy.pipeline || [], { session }).toArray();
|
|
562
|
+
return results.map((row) => {
|
|
563
|
+
var _a;
|
|
564
|
+
const group = {};
|
|
565
|
+
const aggregates = {};
|
|
566
|
+
// _id contains the group keys
|
|
567
|
+
if (row._id && typeof row._id === 'object') {
|
|
568
|
+
Object.assign(group, row._id);
|
|
569
|
+
}
|
|
570
|
+
else if (((_a = options.groupBy) === null || _a === void 0 ? void 0 : _a.length) === 1) {
|
|
571
|
+
group[options.groupBy[0]] = row._id;
|
|
572
|
+
}
|
|
573
|
+
// Everything else is aggregates
|
|
574
|
+
for (const key of Object.keys(row)) {
|
|
575
|
+
if (key !== '_id') {
|
|
576
|
+
aggregates[key] = row[key];
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
return { group, aggregates: aggregates };
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
catch (error) {
|
|
583
|
+
throw database_error_1.DatabaseError.fromDatabaseError(error, 'mongodb');
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
// ==================== TRANSACTION METHODS ====================
|
|
587
|
+
async beginTransaction(isolationLevel, readOnly, timeout) {
|
|
588
|
+
this.ensureConnected();
|
|
589
|
+
try {
|
|
590
|
+
const session = this.mongoClient.startSession();
|
|
591
|
+
const id = `mongo_txn_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
592
|
+
const transactionOptions = {};
|
|
593
|
+
// MongoDB supports read concern and write concern instead of isolation levels
|
|
594
|
+
if (isolationLevel === enums_1.IsolationLevel.SERIALIZABLE) {
|
|
595
|
+
transactionOptions.readConcern = { level: 'snapshot' };
|
|
596
|
+
transactionOptions.writeConcern = { w: 'majority' };
|
|
597
|
+
}
|
|
598
|
+
else {
|
|
599
|
+
transactionOptions.readConcern = { level: 'majority' };
|
|
600
|
+
transactionOptions.writeConcern = { w: 'majority' };
|
|
601
|
+
}
|
|
602
|
+
if (timeout) {
|
|
603
|
+
transactionOptions.maxCommitTimeMS = timeout;
|
|
604
|
+
}
|
|
605
|
+
session.startTransaction(transactionOptions);
|
|
606
|
+
return {
|
|
607
|
+
id,
|
|
608
|
+
databaseType: 'mongodb',
|
|
609
|
+
isolationLevel: isolationLevel || enums_1.IsolationLevel.READ_COMMITTED,
|
|
610
|
+
readOnly: readOnly || false,
|
|
611
|
+
timeout,
|
|
612
|
+
startedAt: new Date(),
|
|
613
|
+
client: session,
|
|
614
|
+
savepoints: new Map(),
|
|
615
|
+
status: 'active',
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
catch (error) {
|
|
619
|
+
throw database_error_1.DatabaseError.transactionError(`Failed to begin transaction: ${error.message}`, error);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
async commitTransaction(context) {
|
|
623
|
+
try {
|
|
624
|
+
await context.client.commitTransaction();
|
|
625
|
+
await context.client.endSession();
|
|
626
|
+
context.status = 'committed';
|
|
627
|
+
}
|
|
628
|
+
catch (error) {
|
|
629
|
+
context.status = 'error';
|
|
630
|
+
await context.client.endSession();
|
|
631
|
+
throw database_error_1.DatabaseError.transactionError(`Failed to commit transaction: ${error.message}`, error);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
async rollbackTransaction(context) {
|
|
635
|
+
try {
|
|
636
|
+
await context.client.abortTransaction();
|
|
637
|
+
await context.client.endSession();
|
|
638
|
+
context.status = 'rolled_back';
|
|
639
|
+
}
|
|
640
|
+
catch (error) {
|
|
641
|
+
context.status = 'error';
|
|
642
|
+
await context.client.endSession();
|
|
643
|
+
throw database_error_1.DatabaseError.transactionError(`Failed to rollback transaction: ${error.message}`, error);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
async createSavepoint(context, name) {
|
|
647
|
+
// MongoDB does not support savepoints
|
|
648
|
+
throw new database_error_1.DatabaseError('MongoDB does not support savepoints. Savepoints are only available in PostgreSQL and MySQL.', enums_1.DatabaseErrorType.NOT_SUPPORTED);
|
|
649
|
+
}
|
|
650
|
+
async releaseSavepoint(context, savepoint) {
|
|
651
|
+
// MongoDB does not support savepoints
|
|
652
|
+
throw new database_error_1.DatabaseError('MongoDB does not support savepoints. Savepoints are only available in PostgreSQL and MySQL.', enums_1.DatabaseErrorType.NOT_SUPPORTED);
|
|
653
|
+
}
|
|
654
|
+
async rollbackToSavepoint(context, savepoint) {
|
|
655
|
+
// MongoDB does not support savepoints
|
|
656
|
+
throw new database_error_1.DatabaseError('MongoDB does not support savepoints. Savepoints are only available in PostgreSQL and MySQL.', enums_1.DatabaseErrorType.NOT_SUPPORTED);
|
|
657
|
+
}
|
|
658
|
+
supportsSavepoints() {
|
|
659
|
+
return false;
|
|
660
|
+
}
|
|
661
|
+
// ==================== SCHEMA METHODS ====================
|
|
662
|
+
async createTable(definition, options) {
|
|
663
|
+
this.ensureConnected();
|
|
664
|
+
try {
|
|
665
|
+
// In MongoDB, creating a collection is optional as it's created on first insert
|
|
666
|
+
// But we can explicitly create it for validation
|
|
667
|
+
await this.db.createCollection(definition.name);
|
|
668
|
+
// Create indexes
|
|
669
|
+
if (definition.indexes) {
|
|
670
|
+
for (const index of definition.indexes) {
|
|
671
|
+
await this.createIndex(index);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
// Create unique constraints as unique indexes and register auto-increment fields
|
|
675
|
+
for (const column of definition.columns) {
|
|
676
|
+
if (column.unique && column.name !== '_id') {
|
|
677
|
+
await this.db.collection(definition.name).createIndex({ [column.name]: 1 }, { unique: true });
|
|
678
|
+
}
|
|
679
|
+
// Register auto-increment fields in the counters collection
|
|
680
|
+
if (column.autoIncrement) {
|
|
681
|
+
await this.registerAutoIncrementField(definition.name, column.name);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
// Store schema metadata for default values and other app-level features
|
|
685
|
+
await this.storeSchemaMetadata(definition.name, definition.columns);
|
|
686
|
+
}
|
|
687
|
+
catch (error) {
|
|
688
|
+
// Ignore "collection already exists" error if ifNotExists is true
|
|
689
|
+
if ((options === null || options === void 0 ? void 0 : options.ifNotExists) && error.code === 48) {
|
|
690
|
+
return;
|
|
691
|
+
}
|
|
692
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to create collection: ${error.message}`, error);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
/**
|
|
696
|
+
* Register an auto-increment field in the counters collection.
|
|
697
|
+
* This creates/updates the counter document for the given collection and field.
|
|
698
|
+
*/
|
|
699
|
+
async registerAutoIncrementField(collectionName, fieldName) {
|
|
700
|
+
const countersCollection = this.db.collection('_ductape_counters');
|
|
701
|
+
// Initialize the counter for this collection/field combination
|
|
702
|
+
await countersCollection.updateOne({ _id: `${collectionName}.${fieldName}` }, {
|
|
703
|
+
$setOnInsert: {
|
|
704
|
+
collection: collectionName,
|
|
705
|
+
field: fieldName,
|
|
706
|
+
currentValue: 0
|
|
707
|
+
}
|
|
708
|
+
}, { upsert: true });
|
|
709
|
+
}
|
|
710
|
+
/**
|
|
711
|
+
* Get the next auto-increment value atomically.
|
|
712
|
+
* Uses findOneAndUpdate with $inc to ensure atomic increment even under high concurrency.
|
|
713
|
+
*/
|
|
714
|
+
async getNextAutoIncrementValue(collectionName, fieldName) {
|
|
715
|
+
const countersCollection = this.db.collection('_ductape_counters');
|
|
716
|
+
const result = await countersCollection.findOneAndUpdate({ _id: `${collectionName}.${fieldName}` }, { $inc: { currentValue: 1 } }, { returnDocument: 'after', upsert: true });
|
|
717
|
+
return result.currentValue;
|
|
718
|
+
}
|
|
719
|
+
/**
|
|
720
|
+
* Get all auto-increment fields for a collection from the counters collection.
|
|
721
|
+
*/
|
|
722
|
+
async getAutoIncrementFields(collectionName) {
|
|
723
|
+
const countersCollection = this.db.collection('_ductape_counters');
|
|
724
|
+
const counters = await countersCollection.find({ collection: collectionName }).toArray();
|
|
725
|
+
return counters.map((c) => c.field);
|
|
726
|
+
}
|
|
727
|
+
/**
|
|
728
|
+
* Store schema metadata for a collection (including default values).
|
|
729
|
+
* MongoDB doesn't have native schema enforcement, so we store this for application-level use.
|
|
730
|
+
*/
|
|
731
|
+
async storeSchemaMetadata(collectionName, columns) {
|
|
732
|
+
const metadataCollection = this.db.collection('_ductape_schema');
|
|
733
|
+
await metadataCollection.updateOne({ _id: collectionName }, {
|
|
734
|
+
$set: {
|
|
735
|
+
collection: collectionName,
|
|
736
|
+
columns: columns.map(col => ({
|
|
737
|
+
name: col.name,
|
|
738
|
+
type: col.type,
|
|
739
|
+
defaultValue: col.defaultValue,
|
|
740
|
+
nullable: col.nullable,
|
|
741
|
+
unique: col.unique,
|
|
742
|
+
primaryKey: col.primaryKey,
|
|
743
|
+
autoIncrement: col.autoIncrement,
|
|
744
|
+
})),
|
|
745
|
+
updatedAt: new Date()
|
|
746
|
+
}
|
|
747
|
+
}, { upsert: true });
|
|
748
|
+
}
|
|
749
|
+
/**
|
|
750
|
+
* Get schema metadata for a collection to apply defaults during insert.
|
|
751
|
+
*/
|
|
752
|
+
async getSchemaMetadata(collectionName) {
|
|
753
|
+
const metadataCollection = this.db.collection('_ductape_schema');
|
|
754
|
+
const schema = await metadataCollection.findOne({ _id: collectionName });
|
|
755
|
+
return (schema === null || schema === void 0 ? void 0 : schema.columns) || [];
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* Resolve a default value to its actual value.
|
|
759
|
+
* Handles special values like 'now', 'NOW()', true, false, etc.
|
|
760
|
+
*/
|
|
761
|
+
resolveDefaultValue(defaultValue, fieldType) {
|
|
762
|
+
if (defaultValue === undefined || defaultValue === null) {
|
|
763
|
+
return undefined;
|
|
764
|
+
}
|
|
765
|
+
// Handle string-based special defaults
|
|
766
|
+
if (typeof defaultValue === 'string') {
|
|
767
|
+
const lowerDefault = defaultValue.toLowerCase();
|
|
768
|
+
// Date/time defaults
|
|
769
|
+
if (lowerDefault === 'now' || lowerDefault === 'now()' || lowerDefault === 'current_timestamp') {
|
|
770
|
+
return new Date();
|
|
771
|
+
}
|
|
772
|
+
// Boolean defaults (for string representations)
|
|
773
|
+
if (lowerDefault === 'true')
|
|
774
|
+
return true;
|
|
775
|
+
if (lowerDefault === 'false')
|
|
776
|
+
return false;
|
|
777
|
+
// UUID defaults
|
|
778
|
+
if (lowerDefault === 'uuid' || lowerDefault === 'uuid()' || lowerDefault === 'gen_random_uuid()') {
|
|
779
|
+
return this.generateUUID();
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
// Return as-is for other values (numbers, booleans, objects, etc.)
|
|
783
|
+
return defaultValue;
|
|
784
|
+
}
|
|
785
|
+
/**
|
|
786
|
+
* Generate a UUID v4.
|
|
787
|
+
*/
|
|
788
|
+
generateUUID() {
|
|
789
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
790
|
+
const r = Math.random() * 16 | 0;
|
|
791
|
+
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
792
|
+
return v.toString(16);
|
|
793
|
+
});
|
|
794
|
+
}
|
|
795
|
+
async alterTable(tableName, operations) {
|
|
796
|
+
this.ensureConnected();
|
|
797
|
+
// MongoDB is schemaless, so we don't need to alter the schema
|
|
798
|
+
// However, we can handle index and constraint operations
|
|
799
|
+
try {
|
|
800
|
+
for (const op of operations) {
|
|
801
|
+
if (op.type === 'ADD' && op.constraint && op.constraint.type === 'UNIQUE') {
|
|
802
|
+
// Add unique index
|
|
803
|
+
const indexSpec = {};
|
|
804
|
+
for (const col of op.constraint.columns) {
|
|
805
|
+
indexSpec[col] = 1;
|
|
806
|
+
}
|
|
807
|
+
await this.db.collection(tableName).createIndex(indexSpec, { unique: true });
|
|
808
|
+
}
|
|
809
|
+
else if (op.type === 'DROP' && op.constraintName) {
|
|
810
|
+
// Drop index
|
|
811
|
+
await this.db.collection(tableName).dropIndex(op.constraintName);
|
|
812
|
+
}
|
|
813
|
+
else if (op.type === 'RENAME' && op.oldName && op.newName) {
|
|
814
|
+
// Rename field in all documents
|
|
815
|
+
await this.db.collection(tableName).updateMany({}, { $rename: { [op.oldName]: op.newName } });
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
catch (error) {
|
|
820
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to alter collection: ${error.message}`, error);
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
async dropTable(tableName, ifExists, cascade) {
|
|
824
|
+
this.ensureConnected();
|
|
825
|
+
try {
|
|
826
|
+
await this.db.collection(tableName).drop();
|
|
827
|
+
}
|
|
828
|
+
catch (error) {
|
|
829
|
+
// Ignore "collection doesn't exist" error if ifExists is true
|
|
830
|
+
if (ifExists && error.code === 26) {
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to drop collection: ${error.message}`, error);
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
async listTables() {
|
|
837
|
+
this.ensureConnected();
|
|
838
|
+
try {
|
|
839
|
+
const collections = await this.db.listCollections().toArray();
|
|
840
|
+
return collections.map((c) => c.name);
|
|
841
|
+
}
|
|
842
|
+
catch (error) {
|
|
843
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to list collections: ${error.message}`, error);
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
async tableExists(tableName) {
|
|
847
|
+
this.ensureConnected();
|
|
848
|
+
try {
|
|
849
|
+
const collections = await this.db.listCollections({ name: tableName }).toArray();
|
|
850
|
+
return collections.length > 0;
|
|
851
|
+
}
|
|
852
|
+
catch (error) {
|
|
853
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to check collection existence: ${error.message}`, error);
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
async getTableSchema(tableName) {
|
|
857
|
+
this.ensureConnected();
|
|
858
|
+
try {
|
|
859
|
+
const collection = this.db.collection(tableName);
|
|
860
|
+
// Sample documents to infer schema
|
|
861
|
+
const sampleDocs = await collection.find().limit(100).toArray();
|
|
862
|
+
// Infer columns from sample documents
|
|
863
|
+
const fieldTypes = new Map();
|
|
864
|
+
for (const doc of sampleDocs) {
|
|
865
|
+
this.extractFieldTypes(doc, '', fieldTypes);
|
|
866
|
+
}
|
|
867
|
+
const columns = Array.from(fieldTypes.entries()).map(([name, types]) => ({
|
|
868
|
+
name,
|
|
869
|
+
type: Array.from(types).join('|'),
|
|
870
|
+
nullable: true, // MongoDB is schemaless
|
|
871
|
+
isPrimaryKey: name === '_id',
|
|
872
|
+
isUnique: name === '_id',
|
|
873
|
+
isAutoIncrement: false,
|
|
874
|
+
}));
|
|
875
|
+
// Get indexes
|
|
876
|
+
const indexes = await this.listIndexes(tableName);
|
|
877
|
+
// Get estimated document count
|
|
878
|
+
const estimatedCount = await collection.estimatedDocumentCount();
|
|
879
|
+
return {
|
|
880
|
+
name: tableName,
|
|
881
|
+
columns,
|
|
882
|
+
indexes,
|
|
883
|
+
constraints: [],
|
|
884
|
+
primaryKey: ['_id'],
|
|
885
|
+
estimatedRowCount: estimatedCount,
|
|
886
|
+
};
|
|
887
|
+
}
|
|
888
|
+
catch (error) {
|
|
889
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to get collection schema: ${error.message}`, error);
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
async createIndex(index, ifNotExists, concurrent) {
|
|
893
|
+
this.ensureConnected();
|
|
894
|
+
try {
|
|
895
|
+
const collection = this.db.collection(index.table);
|
|
896
|
+
// Build index specification
|
|
897
|
+
const indexSpec = {};
|
|
898
|
+
for (const col of index.columns) {
|
|
899
|
+
indexSpec[col.name] = col.order === 'DESC' ? -1 : 1;
|
|
900
|
+
}
|
|
901
|
+
// Build index options
|
|
902
|
+
const indexOptions = {
|
|
903
|
+
name: index.name,
|
|
904
|
+
unique: index.unique || false,
|
|
905
|
+
background: true, // Always create in background
|
|
906
|
+
};
|
|
907
|
+
// Partial index
|
|
908
|
+
if (index.where) {
|
|
909
|
+
// Parse the where clause to a MongoDB filter
|
|
910
|
+
// This is simplified - a real implementation would parse the expression
|
|
911
|
+
indexOptions.partialFilterExpression = {};
|
|
912
|
+
}
|
|
913
|
+
await collection.createIndex(indexSpec, indexOptions);
|
|
914
|
+
}
|
|
915
|
+
catch (error) {
|
|
916
|
+
// Ignore if index already exists and ifNotExists is true
|
|
917
|
+
if (ifNotExists && error.code === 85) {
|
|
918
|
+
return;
|
|
919
|
+
}
|
|
920
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to create index: ${error.message}`, error);
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
async dropIndex(tableName, indexName, ifExists, concurrent, cascade) {
|
|
924
|
+
this.ensureConnected();
|
|
925
|
+
try {
|
|
926
|
+
await this.db.collection(tableName).dropIndex(indexName);
|
|
927
|
+
}
|
|
928
|
+
catch (error) {
|
|
929
|
+
// Ignore if index doesn't exist and ifExists is true
|
|
930
|
+
if (ifExists && error.code === 27) {
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
933
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to drop index: ${error.message}`, error);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
async listIndexes(tableName, includeSystem) {
|
|
937
|
+
this.ensureConnected();
|
|
938
|
+
try {
|
|
939
|
+
const collection = this.db.collection(tableName);
|
|
940
|
+
const indexes = await collection.indexes();
|
|
941
|
+
return indexes
|
|
942
|
+
.filter((idx) => includeSystem || idx.name !== '_id_')
|
|
943
|
+
.map((idx) => ({
|
|
944
|
+
name: idx.name,
|
|
945
|
+
table: tableName,
|
|
946
|
+
columns: Object.keys(idx.key),
|
|
947
|
+
unique: idx.unique || false,
|
|
948
|
+
primaryKey: idx.name === '_id_',
|
|
949
|
+
type: 'BTREE', // MongoDB uses B-tree by default
|
|
950
|
+
}));
|
|
951
|
+
}
|
|
952
|
+
catch (error) {
|
|
953
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to list indexes: ${error.message}`, error);
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
async getIndexStatistics(tableName, indexName) {
|
|
957
|
+
var _a, _b;
|
|
958
|
+
this.ensureConnected();
|
|
959
|
+
try {
|
|
960
|
+
const collection = this.db.collection(tableName);
|
|
961
|
+
const stats = await collection.aggregate([
|
|
962
|
+
{ $collStats: { storageStats: {} } },
|
|
963
|
+
]).toArray();
|
|
964
|
+
const indexStats = ((_b = (_a = stats[0]) === null || _a === void 0 ? void 0 : _a.storageStats) === null || _b === void 0 ? void 0 : _b.indexSizes) || {};
|
|
965
|
+
const results = [];
|
|
966
|
+
for (const [name, size] of Object.entries(indexStats)) {
|
|
967
|
+
if (indexName && name !== indexName)
|
|
968
|
+
continue;
|
|
969
|
+
results.push({
|
|
970
|
+
indexName: name,
|
|
971
|
+
tableName,
|
|
972
|
+
scans: 0, // MongoDB doesn't expose this easily
|
|
973
|
+
tuplesRead: 0,
|
|
974
|
+
sizeBytes: size,
|
|
975
|
+
sizeFormatted: this.formatBytes(size),
|
|
976
|
+
});
|
|
977
|
+
}
|
|
978
|
+
return results;
|
|
979
|
+
}
|
|
980
|
+
catch (error) {
|
|
981
|
+
throw database_error_1.DatabaseError.schemaError(`Failed to get index statistics: ${error.message}`, error);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
// ==================== UTILITY METHODS ====================
|
|
985
|
+
escapeIdentifier(identifier) {
|
|
986
|
+
// MongoDB doesn't need identifier escaping in the same way SQL databases do
|
|
987
|
+
return identifier;
|
|
988
|
+
}
|
|
989
|
+
escapeValue(value) {
|
|
990
|
+
// MongoDB uses BSON, no escaping needed
|
|
991
|
+
return JSON.stringify(value);
|
|
992
|
+
}
|
|
993
|
+
/**
|
|
994
|
+
* Check if value is an update operator object
|
|
995
|
+
* Supports both lowercase (new) and uppercase (legacy) operators
|
|
996
|
+
*/
|
|
997
|
+
isUpdateOperator(value) {
|
|
998
|
+
if (!value || typeof value !== 'object')
|
|
999
|
+
return false;
|
|
1000
|
+
// Support both lowercase (Mongoose style) and uppercase (legacy) operators
|
|
1001
|
+
const operators = [
|
|
1002
|
+
'$inc', '$INC', '$dec', '$DEC', '$mul', '$MUL', '$min', '$MIN', '$max', '$MAX',
|
|
1003
|
+
'$set', '$SET', '$unset', '$UNSET', '$push', '$PUSH', '$pull', '$PULL',
|
|
1004
|
+
'$addToSet', '$ADDTOSET', '$pop', '$POP', '$rename', '$RENAME', '$currentDate', '$CURRENTDATE'
|
|
1005
|
+
];
|
|
1006
|
+
return operators.some(op => op in value);
|
|
1007
|
+
}
|
|
1008
|
+
getParameterPlaceholder(index) {
|
|
1009
|
+
// MongoDB doesn't use parameter placeholders like SQL
|
|
1010
|
+
return '';
|
|
1011
|
+
}
|
|
1012
|
+
getColumnTypeString(columnType, options) {
|
|
1013
|
+
// MongoDB is schemaless, but we can map to BSON types
|
|
1014
|
+
const typeMap = {
|
|
1015
|
+
[enums_1.ColumnType.INTEGER]: 'int',
|
|
1016
|
+
[enums_1.ColumnType.BIGINT]: 'long',
|
|
1017
|
+
[enums_1.ColumnType.FLOAT]: 'double',
|
|
1018
|
+
[enums_1.ColumnType.DOUBLE]: 'double',
|
|
1019
|
+
[enums_1.ColumnType.DECIMAL]: 'decimal',
|
|
1020
|
+
[enums_1.ColumnType.STRING]: 'string',
|
|
1021
|
+
[enums_1.ColumnType.TEXT]: 'string',
|
|
1022
|
+
[enums_1.ColumnType.BOOLEAN]: 'bool',
|
|
1023
|
+
[enums_1.ColumnType.DATE]: 'date',
|
|
1024
|
+
[enums_1.ColumnType.DATETIME]: 'date',
|
|
1025
|
+
[enums_1.ColumnType.TIMESTAMP]: 'date',
|
|
1026
|
+
[enums_1.ColumnType.JSON]: 'object',
|
|
1027
|
+
[enums_1.ColumnType.JSONB]: 'object',
|
|
1028
|
+
[enums_1.ColumnType.UUID]: 'string',
|
|
1029
|
+
[enums_1.ColumnType.BINARY]: 'binData',
|
|
1030
|
+
[enums_1.ColumnType.ARRAY]: 'array',
|
|
1031
|
+
};
|
|
1032
|
+
return typeMap[columnType] || columnType;
|
|
1033
|
+
}
|
|
1034
|
+
getSupportedFeatures() {
|
|
1035
|
+
return [
|
|
1036
|
+
base_adapter_1.DatabaseFeature.TRANSACTIONS,
|
|
1037
|
+
base_adapter_1.DatabaseFeature.JSON,
|
|
1038
|
+
base_adapter_1.DatabaseFeature.ARRAYS,
|
|
1039
|
+
base_adapter_1.DatabaseFeature.TTL,
|
|
1040
|
+
base_adapter_1.DatabaseFeature.CHANGE_STREAMS,
|
|
1041
|
+
base_adapter_1.DatabaseFeature.SECONDARY_INDEXES,
|
|
1042
|
+
base_adapter_1.DatabaseFeature.AGGREGATION_PIPELINE,
|
|
1043
|
+
base_adapter_1.DatabaseFeature.ATOMIC_COUNTERS,
|
|
1044
|
+
base_adapter_1.DatabaseFeature.BATCH_OPERATIONS,
|
|
1045
|
+
base_adapter_1.DatabaseFeature.REGEX,
|
|
1046
|
+
];
|
|
1047
|
+
}
|
|
1048
|
+
parseError(error) {
|
|
1049
|
+
const code = error.code;
|
|
1050
|
+
let type = enums_1.DatabaseErrorType.UNKNOWN_ERROR;
|
|
1051
|
+
// Map MongoDB error codes
|
|
1052
|
+
switch (code) {
|
|
1053
|
+
case 11000: // Duplicate key
|
|
1054
|
+
type = enums_1.DatabaseErrorType.UNIQUE_VIOLATION;
|
|
1055
|
+
break;
|
|
1056
|
+
case 18: // Authentication failed
|
|
1057
|
+
type = enums_1.DatabaseErrorType.AUTHENTICATION_ERROR;
|
|
1058
|
+
break;
|
|
1059
|
+
case 26: // Namespace not found
|
|
1060
|
+
type = enums_1.DatabaseErrorType.NOT_FOUND;
|
|
1061
|
+
break;
|
|
1062
|
+
case 48: // Namespace already exists
|
|
1063
|
+
type = enums_1.DatabaseErrorType.SCHEMA_ERROR;
|
|
1064
|
+
break;
|
|
1065
|
+
default:
|
|
1066
|
+
if (error.name === 'MongoNetworkError') {
|
|
1067
|
+
type = enums_1.DatabaseErrorType.CONNECTION_ERROR;
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
return {
|
|
1071
|
+
type,
|
|
1072
|
+
message: error.message || 'Unknown database error',
|
|
1073
|
+
code: String(code),
|
|
1074
|
+
details: {
|
|
1075
|
+
codeName: error.codeName,
|
|
1076
|
+
keyPattern: error.keyPattern,
|
|
1077
|
+
keyValue: error.keyValue,
|
|
1078
|
+
},
|
|
1079
|
+
};
|
|
1080
|
+
}
|
|
1081
|
+
// ==================== PRIVATE HELPER METHODS ====================
|
|
1082
|
+
ensureConnected() {
|
|
1083
|
+
if (!this.connected || !this.db) {
|
|
1084
|
+
throw new database_error_1.DatabaseError('Not connected to MongoDB database', enums_1.DatabaseErrorType.CONNECTION_ERROR);
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
buildMongoFilter(where) {
|
|
1088
|
+
const filter = {};
|
|
1089
|
+
for (const [key, value] of Object.entries(where)) {
|
|
1090
|
+
// Normalize key to lowercase for logical operators (support both cases for backwards compatibility)
|
|
1091
|
+
const normalizedKey = key.toLowerCase();
|
|
1092
|
+
if (normalizedKey === '$and') {
|
|
1093
|
+
const conditions = Array.isArray(value) ? value : Object.entries(value).map(([k, v]) => ({ [k]: v }));
|
|
1094
|
+
filter.$and = conditions.map((cond) => this.buildMongoFilter(cond));
|
|
1095
|
+
}
|
|
1096
|
+
else if (normalizedKey === '$or') {
|
|
1097
|
+
const conditions = Array.isArray(value) ? value : Object.entries(value).map(([k, v]) => ({ [k]: v }));
|
|
1098
|
+
filter.$or = conditions.map((cond) => this.buildMongoFilter(cond));
|
|
1099
|
+
}
|
|
1100
|
+
else if (normalizedKey === '$not') {
|
|
1101
|
+
filter.$nor = [this.buildMongoFilter(value)];
|
|
1102
|
+
}
|
|
1103
|
+
else if (normalizedKey === '$nor') {
|
|
1104
|
+
const conditions = Array.isArray(value) ? value : [value];
|
|
1105
|
+
filter.$nor = conditions.map((cond) => this.buildMongoFilter(cond));
|
|
1106
|
+
}
|
|
1107
|
+
else if (value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {
|
|
1108
|
+
// Handle operators
|
|
1109
|
+
const fieldFilter = {};
|
|
1110
|
+
for (const [op, opValue] of Object.entries(value)) {
|
|
1111
|
+
// Normalize operator to lowercase (support both cases for backwards compatibility)
|
|
1112
|
+
const normalizedOp = op.toLowerCase();
|
|
1113
|
+
switch (normalizedOp) {
|
|
1114
|
+
case '$eq':
|
|
1115
|
+
fieldFilter.$eq = opValue;
|
|
1116
|
+
break;
|
|
1117
|
+
case '$ne':
|
|
1118
|
+
fieldFilter.$ne = opValue;
|
|
1119
|
+
break;
|
|
1120
|
+
case '$gt':
|
|
1121
|
+
fieldFilter.$gt = opValue;
|
|
1122
|
+
break;
|
|
1123
|
+
case '$gte':
|
|
1124
|
+
fieldFilter.$gte = opValue;
|
|
1125
|
+
break;
|
|
1126
|
+
case '$lt':
|
|
1127
|
+
fieldFilter.$lt = opValue;
|
|
1128
|
+
break;
|
|
1129
|
+
case '$lte':
|
|
1130
|
+
fieldFilter.$lte = opValue;
|
|
1131
|
+
break;
|
|
1132
|
+
case '$in':
|
|
1133
|
+
fieldFilter.$in = opValue;
|
|
1134
|
+
break;
|
|
1135
|
+
case '$nin':
|
|
1136
|
+
case '$not_in':
|
|
1137
|
+
fieldFilter.$nin = opValue;
|
|
1138
|
+
break;
|
|
1139
|
+
case '$like':
|
|
1140
|
+
// Convert SQL LIKE pattern to regex (case-sensitive)
|
|
1141
|
+
// 1. Escape regex special characters first (except % and _)
|
|
1142
|
+
// 2. Replace SQL wildcards with regex equivalents
|
|
1143
|
+
// 3. Anchor pattern to match full string
|
|
1144
|
+
const likePattern = '^' + opValue
|
|
1145
|
+
.replace(/[.*+?^${}()|[\]\\]/g, (char) => {
|
|
1146
|
+
// Don't escape % and _ - they are SQL wildcards
|
|
1147
|
+
if (char === '%' || char === '_')
|
|
1148
|
+
return char;
|
|
1149
|
+
return '\\' + char;
|
|
1150
|
+
})
|
|
1151
|
+
.replace(/%/g, '.*')
|
|
1152
|
+
.replace(/_/g, '.') + '$';
|
|
1153
|
+
fieldFilter.$regex = new RegExp(likePattern);
|
|
1154
|
+
break;
|
|
1155
|
+
case '$ilike':
|
|
1156
|
+
// Convert SQL ILIKE pattern to regex (case-insensitive)
|
|
1157
|
+
const ilikePattern = '^' + opValue
|
|
1158
|
+
.replace(/[.*+?^${}()|[\]\\]/g, (char) => {
|
|
1159
|
+
if (char === '%' || char === '_')
|
|
1160
|
+
return char;
|
|
1161
|
+
return '\\' + char;
|
|
1162
|
+
})
|
|
1163
|
+
.replace(/%/g, '.*')
|
|
1164
|
+
.replace(/_/g, '.') + '$';
|
|
1165
|
+
fieldFilter.$regex = new RegExp(ilikePattern, 'i');
|
|
1166
|
+
break;
|
|
1167
|
+
case '$isnull':
|
|
1168
|
+
case '$is_null':
|
|
1169
|
+
if (opValue) {
|
|
1170
|
+
fieldFilter.$eq = null;
|
|
1171
|
+
}
|
|
1172
|
+
else {
|
|
1173
|
+
fieldFilter.$ne = null;
|
|
1174
|
+
}
|
|
1175
|
+
break;
|
|
1176
|
+
case '$isnotnull':
|
|
1177
|
+
case '$is_not_null':
|
|
1178
|
+
if (opValue) {
|
|
1179
|
+
fieldFilter.$ne = null;
|
|
1180
|
+
}
|
|
1181
|
+
else {
|
|
1182
|
+
fieldFilter.$eq = null;
|
|
1183
|
+
}
|
|
1184
|
+
break;
|
|
1185
|
+
case '$between':
|
|
1186
|
+
const [min, max] = opValue;
|
|
1187
|
+
fieldFilter.$gte = min;
|
|
1188
|
+
fieldFilter.$lte = max;
|
|
1189
|
+
break;
|
|
1190
|
+
case '$contains':
|
|
1191
|
+
fieldFilter.$elemMatch = { $eq: opValue };
|
|
1192
|
+
break;
|
|
1193
|
+
case '$overlaps':
|
|
1194
|
+
fieldFilter.$elemMatch = { $in: opValue };
|
|
1195
|
+
break;
|
|
1196
|
+
case '$regex':
|
|
1197
|
+
if (typeof opValue === 'string') {
|
|
1198
|
+
fieldFilter.$regex = new RegExp(opValue);
|
|
1199
|
+
}
|
|
1200
|
+
else if (opValue instanceof RegExp) {
|
|
1201
|
+
fieldFilter.$regex = opValue;
|
|
1202
|
+
}
|
|
1203
|
+
break;
|
|
1204
|
+
case '$exists':
|
|
1205
|
+
fieldFilter.$exists = opValue;
|
|
1206
|
+
break;
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
filter[key] = fieldFilter;
|
|
1210
|
+
}
|
|
1211
|
+
else {
|
|
1212
|
+
// Simple equality
|
|
1213
|
+
filter[key] = value;
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
return filter;
|
|
1217
|
+
}
|
|
1218
|
+
extractFieldTypes(obj, prefix, fieldTypes) {
|
|
1219
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
1220
|
+
const fieldName = prefix ? `${prefix}.${key}` : key;
|
|
1221
|
+
const type = this.getJsType(value);
|
|
1222
|
+
if (!fieldTypes.has(fieldName)) {
|
|
1223
|
+
fieldTypes.set(fieldName, new Set());
|
|
1224
|
+
}
|
|
1225
|
+
fieldTypes.get(fieldName).add(type);
|
|
1226
|
+
// Recurse into nested objects (but not arrays)
|
|
1227
|
+
if (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {
|
|
1228
|
+
this.extractFieldTypes(value, fieldName, fieldTypes);
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
getJsType(value) {
|
|
1233
|
+
if (value === null)
|
|
1234
|
+
return 'null';
|
|
1235
|
+
if (Array.isArray(value))
|
|
1236
|
+
return 'array';
|
|
1237
|
+
if (value instanceof Date)
|
|
1238
|
+
return 'date';
|
|
1239
|
+
if (value && value._bsontype === 'ObjectId')
|
|
1240
|
+
return 'ObjectId';
|
|
1241
|
+
return typeof value;
|
|
1242
|
+
}
|
|
1243
|
+
formatBytes(bytes) {
|
|
1244
|
+
if (bytes === 0)
|
|
1245
|
+
return '0 B';
|
|
1246
|
+
const k = 1024;
|
|
1247
|
+
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
1248
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
1249
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
exports.MongoDBAdapter = MongoDBAdapter;
|
|
1253
|
+
//# sourceMappingURL=mongodb.adapter.js.map
|