ts-prorm-orm 1.1.0 → 1.2.1
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/CHANGELOG.md +95 -0
- package/README.md +194 -72
- package/dist/audit/history-query.d.ts +35 -0
- package/dist/audit/index.d.ts +16 -0
- package/dist/audit/logger.d.ts +126 -0
- package/dist/cache/cache-manager.d.ts +341 -0
- package/dist/cache/index.d.ts +8 -0
- package/dist/cache/redis-cluster-cache.d.ts +164 -0
- package/dist/cache/redis-cluster-cache.js +19 -36
- package/dist/cli/cloud.d.ts +55 -0
- package/dist/cli/cloud.js +318 -0
- package/dist/cli/commands/auth.d.ts +2 -0
- package/dist/cli/commands/auth.js +345 -0
- package/dist/cli/commands/billing.d.ts +2 -0
- package/dist/cli/commands/billing.js +135 -0
- package/dist/cli/commands/code.d.ts +2 -0
- package/dist/cli/commands/code.js +168 -0
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +154 -0
- package/dist/cli/commands/db.d.ts +2 -0
- package/dist/cli/commands/db.js +189 -0
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +22 -0
- package/dist/cli/commands/keys.d.ts +2 -0
- package/dist/cli/commands/keys.js +100 -0
- package/dist/cli/commands/misc.d.ts +2 -0
- package/dist/cli/commands/misc.js +282 -0
- package/dist/cli/commands/pull.d.ts +2 -0
- package/dist/cli/commands/pull.js +306 -0
- package/dist/cli/commands/runners.d.ts +2 -0
- package/dist/cli/commands/runners.js +218 -0
- package/dist/cli/commands/scaffold.d.ts +2 -0
- package/dist/cli/commands/scaffold.js +383 -0
- package/dist/cli/commands/secrets.d.ts +2 -0
- package/dist/cli/commands/secrets.js +162 -0
- package/dist/cli/commands/store.d.ts +2 -0
- package/dist/cli/commands/store.js +274 -0
- package/dist/cli/commands/system.d.ts +10 -0
- package/dist/cli/commands/system.js +169 -0
- package/dist/cli/commands/teams.d.ts +2 -0
- package/dist/cli/commands/teams.js +189 -0
- package/dist/cli/commands/user.d.ts +2 -0
- package/dist/cli/commands/user.js +171 -0
- package/dist/cli/framework.d.ts +103 -0
- package/dist/cli/framework.js +436 -0
- package/dist/cli/io.d.ts +26 -0
- package/dist/cli/io.js +181 -0
- package/dist/cli/keychain.d.ts +10 -0
- package/dist/cli/keychain.js +101 -0
- package/dist/cli/prompt.d.ts +20 -0
- package/dist/cli/prompt.js +111 -0
- package/dist/cli.d.ts +214 -0
- package/dist/cli.js +72 -5
- package/dist/compliance/audit-trail.d.ts +66 -0
- package/dist/compliance/backup-verification.d.ts +279 -0
- package/dist/compliance/breach-detector.d.ts +197 -0
- package/dist/compliance/consent-record.d.ts +107 -0
- package/dist/compliance/consent-versioning.d.ts +169 -0
- package/dist/compliance/cross-border-log.d.ts +254 -0
- package/dist/compliance/data-classifier.d.ts +127 -0
- package/dist/compliance/data-lineage.d.ts +268 -0
- package/dist/compliance/data-masker.d.ts +110 -0
- package/dist/compliance/data-portability.d.ts +98 -0
- package/dist/compliance/data-retention.d.ts +108 -0
- package/dist/compliance/dsar-workflow.d.ts +175 -0
- package/dist/compliance/field-encryption.d.ts +84 -0
- package/dist/compliance/immutable-record.d.ts +84 -0
- package/dist/compliance/index.d.ts +93 -0
- package/dist/compliance/privacy-impact-assessment.d.ts +196 -0
- package/dist/compliance/pseudonymization.d.ts +96 -0
- package/dist/compliance/query-firewall.d.ts +661 -0
- package/dist/compliance/rate-limiter.d.ts +203 -0
- package/dist/compliance/right-to-erasure.d.ts +96 -0
- package/dist/compliance/row-level-security.d.ts +152 -0
- package/dist/compliance/security-decorator.d.ts +388 -0
- package/dist/compliance/security-monitor.d.ts +170 -0
- package/dist/compliance/sensitive-data-discovery.d.ts +151 -0
- package/dist/compliance/session-isolation.d.ts +286 -0
- package/dist/compliance/tls-enforcer.d.ts +51 -0
- package/dist/compliance/worm-storage.d.ts +225 -0
- package/dist/connection-manager.d.ts +130 -0
- package/dist/connection-pool.d.ts +311 -0
- package/dist/decorators/audit.d.ts +49 -0
- package/dist/decorators/check.d.ts +218 -0
- package/dist/decorators/collate.d.ts +346 -0
- package/dist/decorators/comment.d.ts +51 -0
- package/dist/decorators/database-settings.d.ts +193 -0
- package/dist/decorators/default.d.ts +148 -0
- package/dist/decorators/encryption.d.ts +175 -0
- package/dist/decorators/engine.d.ts +97 -0
- package/dist/decorators/fk-constraints.d.ts +387 -0
- package/dist/decorators/foreign-table.d.ts +57 -0
- package/dist/decorators/generated.d.ts +232 -0
- package/dist/decorators/hstore.d.ts +96 -0
- package/dist/decorators/index.d.ts +57 -0
- package/dist/decorators/index.js +14 -30
- package/dist/decorators/json-column.d.ts +47 -0
- package/dist/decorators/jsonb.d.ts +83 -0
- package/dist/decorators/orm-decorators.d.ts +274 -0
- package/dist/decorators/permissions.d.ts +192 -0
- package/dist/decorators/procedure.d.ts +168 -0
- package/dist/decorators/procedure.js +31 -7
- package/dist/decorators/query-options.d.ts +527 -0
- package/dist/decorators/range.d.ts +122 -0
- package/dist/decorators/set-column.d.ts +43 -0
- package/dist/decorators/spatial.d.ts +60 -0
- package/dist/decorators/storage.d.ts +561 -0
- package/dist/decorators/timezone.d.ts +319 -0
- package/dist/decorators/trigger.d.ts +50 -0
- package/dist/decorators/uuid.d.ts +102 -0
- package/dist/decorators/view.d.ts +213 -0
- package/dist/diagrams/chen-diagram.d.ts +70 -0
- package/dist/diagrams/chen-diagram.js +33 -31
- package/dist/diagrams/class-diagram.d.ts +78 -0
- package/dist/diagrams/class-diagram.js +23 -27
- package/dist/diagrams/dependency-diagram.d.ts +82 -0
- package/dist/diagrams/dependency-diagram.js +18 -9
- package/dist/diagrams/er-diagram.d.ts +82 -0
- package/dist/diagrams/er-diagram.js +174 -231
- package/dist/diagrams/flow-diagram.d.ts +70 -0
- package/dist/diagrams/flow-diagram.js +23 -18
- package/dist/diagrams/gantt-diagram.d.ts +67 -0
- package/dist/diagrams/gantt-diagram.js +20 -18
- package/dist/diagrams/index-diagram.d.ts +61 -0
- package/dist/diagrams/index-diagram.js +36 -31
- package/dist/diagrams/index.d.ts +155 -0
- package/dist/diagrams/index.js +7 -1
- package/dist/diagrams/migration-diagram.d.ts +67 -0
- package/dist/diagrams/migration-diagram.js +45 -57
- package/dist/diagrams/model-diagram.d.ts +85 -0
- package/dist/diagrams/model-diagram.js +225 -287
- package/dist/diagrams/package-diagram.d.ts +69 -0
- package/dist/diagrams/package-diagram.js +30 -32
- package/dist/diagrams/palette.d.ts +138 -0
- package/dist/diagrams/palette.js +134 -25
- package/dist/diagrams/relational-diagram.d.ts +82 -0
- package/dist/diagrams/relational-diagram.js +51 -59
- package/dist/diagrams/schemadoc-diagram.d.ts +57 -0
- package/dist/diagrams/schemadoc-diagram.js +36 -28
- package/dist/diagrams/sequence-diagram.d.ts +61 -0
- package/dist/diagrams/sequence-diagram.js +20 -11
- package/dist/diagrams/state-diagram.d.ts +85 -0
- package/dist/diagrams/state-diagram.js +21 -17
- package/dist/diagrams/svg-dom.d.ts +62 -0
- package/dist/diagrams/svg-dom.js +11 -0
- package/dist/diagrams/tree-diagram.d.ts +47 -0
- package/dist/diagrams/tree-diagram.js +19 -10
- package/dist/dialects/clickhouse/index.d.ts +660 -0
- package/dist/dialects/clickhouse/index.js +107 -2
- package/dist/dialects/cockroachdb/index.d.ts +1708 -0
- package/dist/dialects/cockroachdb/index.js +139 -10
- package/dist/dialects/cratedb/index.d.ts +262 -0
- package/dist/dialects/cratedb/index.js +148 -0
- package/dist/dialects/databricks/index.d.ts +397 -0
- package/dist/dialects/databricks/index.js +233 -11
- package/dist/dialects/db2/index.d.ts +729 -0
- package/dist/dialects/db2/index.js +152 -2
- package/dist/dialects/dialect.d.ts +1653 -0
- package/dist/dialects/duckdb/index.d.ts +440 -0
- package/dist/dialects/duckdb/index.js +21 -37
- package/dist/dialects/exasol/index.d.ts +197 -0
- package/dist/dialects/exasol/index.js +14 -0
- package/dist/dialects/firebird/index.d.ts +286 -0
- package/dist/dialects/firebird/index.js +135 -0
- package/dist/dialects/greenplum/index.d.ts +336 -0
- package/dist/dialects/greenplum/index.js +168 -0
- package/dist/dialects/hana/index.d.ts +512 -0
- package/dist/dialects/hana/index.js +17 -35
- package/dist/dialects/mariadb/index.d.ts +1241 -0
- package/dist/dialects/mariadb/index.js +181 -43
- package/dist/dialects/mssql/index.d.ts +729 -0
- package/dist/dialects/mssql/index.js +76 -7
- package/dist/dialects/mysql/index.d.ts +1233 -0
- package/dist/dialects/mysql/index.js +87 -19
- package/dist/dialects/oracle/index.d.ts +1222 -0
- package/dist/dialects/oracle/index.js +210 -9
- package/dist/dialects/postgres/index.d.ts +1598 -0
- package/dist/dialects/postgres/index.js +34 -13
- package/dist/dialects/query-stream-helper.d.ts +58 -0
- package/dist/dialects/questdb/index.d.ts +430 -0
- package/dist/dialects/questdb/index.js +292 -0
- package/dist/dialects/redshift/index.d.ts +933 -0
- package/dist/dialects/redshift/index.js +17 -5
- package/dist/dialects/singlestore/index.d.ts +233 -0
- package/dist/dialects/singlestore/index.js +53 -0
- package/dist/dialects/snowflake/index.d.ts +727 -0
- package/dist/dialects/snowflake/index.js +154 -5
- package/dist/dialects/spanner/index.d.ts +660 -0
- package/dist/dialects/spanner/index.js +43 -21
- package/dist/dialects/sqlite/index.d.ts +1133 -0
- package/dist/dialects/sqlite/index.js +168 -30
- package/dist/dialects/tidb/index.d.ts +226 -0
- package/dist/dialects/tidb/index.js +10 -0
- package/dist/dialects/timescaledb/index.d.ts +286 -0
- package/dist/dialects/timescaledb/index.js +179 -0
- package/dist/dialects/trino/index.d.ts +230 -0
- package/dist/dialects/trino/index.js +85 -10
- package/dist/dialects/turso/index.d.ts +98 -0
- package/dist/dialects/turso/index.js +10 -0
- package/dist/dialects/vertica/index.d.ts +321 -0
- package/dist/dialects/vertica/index.js +161 -0
- package/dist/dialects/yugabytedb/index.d.ts +276 -0
- package/dist/dialects/yugabytedb/index.js +121 -0
- package/dist/errors/index.d.ts +378 -0
- package/dist/errors/index.js +29 -1
- package/dist/errors/utils.d.ts +53 -0
- package/dist/errors.d.ts +5 -0
- package/dist/extensions/catalog/cloud-warehouse-features.d.ts +27 -0
- package/dist/extensions/catalog/mssql-features.d.ts +20 -0
- package/dist/extensions/catalog/mysql-mariadb-plugins.d.ts +18 -0
- package/dist/extensions/catalog/oracle-db2-features.d.ts +17 -0
- package/dist/extensions/catalog/postgres-extensions.d.ts +15 -0
- package/dist/extensions/index.d.ts +34 -0
- package/dist/extensions/types.d.ts +43 -0
- package/dist/external-fields/adapters.d.ts +50 -0
- package/dist/external-fields/adapters.js +227 -0
- package/dist/external-fields/decorator.d.ts +77 -0
- package/dist/external-fields/decorator.js +80 -0
- package/dist/external-fields/index.d.ts +10 -0
- package/dist/external-fields/index.js +19 -0
- package/dist/external-fields/runtime.d.ts +39 -0
- package/dist/external-fields/runtime.js +221 -0
- package/dist/foreign-data.d.ts +168 -0
- package/dist/graph/base-graph-dialect.d.ts +250 -0
- package/dist/graph/base-graph-dialect.js +539 -0
- package/dist/graph/dgraph/index.d.ts +65 -0
- package/dist/graph/dgraph/index.js +559 -0
- package/dist/graph/gremlin/index.d.ts +59 -0
- package/dist/graph/gremlin/index.js +378 -0
- package/dist/graph/index.d.ts +60 -0
- package/dist/graph/index.js +67 -0
- package/dist/graph/neo4j/index.d.ts +50 -0
- package/dist/graph/neo4j/index.js +462 -0
- package/dist/graph/types.d.ts +213 -0
- package/dist/graph/types.js +234 -0
- package/dist/hooks/hooks-manager.d.ts +189 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/index.d.ts +713 -0
- package/dist/index.js +36 -4
- package/dist/logging.d.ts +183 -0
- package/dist/migrations/index.d.ts +9 -0
- package/dist/migrations/migration.d.ts +143 -0
- package/dist/migrations/migrator.d.ts +199 -0
- package/dist/migrations/prormmigration.d.ts +131 -0
- package/dist/migrations/query-interface.d.ts +335 -0
- package/dist/migrations/seeder.d.ts +167 -0
- package/dist/models/associations.d.ts +131 -0
- package/dist/models/associations.js +7 -2
- package/dist/models/constraints.d.ts +175 -0
- package/dist/models/data-types.d.ts +1656 -0
- package/dist/models/decorators.d.ts +328 -0
- package/dist/models/decorators.js +61 -82
- package/dist/models/eager-load.d.ts +86 -0
- package/dist/models/eager-load.js +369 -0
- package/dist/models/index.d.ts +13 -0
- package/dist/models/indexes.d.ts +325 -0
- package/dist/models/methods.d.ts +419 -0
- package/dist/models/model-manager.d.ts +76 -0
- package/dist/models/model.d.ts +820 -0
- package/dist/models/model.js +15 -101
- package/dist/models/operators.d.ts +29 -0
- package/dist/models/scopes.d.ts +71 -0
- package/dist/models/typescript-types.d.ts +177 -0
- package/dist/nosql/aerospike/index.d.ts +126 -0
- package/dist/nosql/allegrograph/index.d.ts +86 -0
- package/dist/nosql/arangodb/index.d.ts +285 -0
- package/dist/nosql/arangodb/index.js +274 -2
- package/dist/nosql/arangodb/where.d.ts +38 -0
- package/dist/nosql/arangodb/where.js +94 -0
- package/dist/nosql/azure-blob/index.d.ts +104 -0
- package/dist/nosql/beanstalkd/index.d.ts +88 -0
- package/dist/nosql/beequeue/index.d.ts +99 -0
- package/dist/nosql/bigchaindb/index.d.ts +113 -0
- package/dist/nosql/bigtable/index.d.ts +144 -0
- package/dist/nosql/blazegraph/index.d.ts +88 -0
- package/dist/nosql/bullmq/index.d.ts +83 -0
- package/dist/nosql/cassandra/index.d.ts +119 -0
- package/dist/nosql/chroma/index.d.ts +151 -0
- package/dist/nosql/cloudflare-kv/index.d.ts +120 -0
- package/dist/nosql/coherence/index.d.ts +91 -0
- package/dist/nosql/cosmosdb/index.d.ts +78 -0
- package/dist/nosql/couchbase/index.d.ts +103 -0
- package/dist/nosql/dax/index.d.ts +118 -0
- package/dist/nosql/deno-kv/index.d.ts +109 -0
- package/dist/nosql/dgraph/index.d.ts +80 -0
- package/dist/nosql/doris/index.d.ts +88 -0
- package/dist/nosql/druid/index.d.ts +95 -0
- package/dist/nosql/dynamodb/index.d.ts +643 -0
- package/dist/nosql/dynamodb/index.js +423 -0
- package/dist/nosql/elasticsearch/index.d.ts +239 -0
- package/dist/nosql/etcd/index.d.ts +243 -0
- package/dist/nosql/eventhubs/index.d.ts +89 -0
- package/dist/nosql/eventstore/index.d.ts +102 -0
- package/dist/nosql/faunadb/index.d.ts +141 -0
- package/dist/nosql/faunadb/index.js +329 -0
- package/dist/nosql/firestore/index.d.ts +67 -0
- package/dist/nosql/fluree/index.d.ts +88 -0
- package/dist/nosql/fuseki/index.d.ts +94 -0
- package/dist/nosql/gcs/index.d.ts +62 -0
- package/dist/nosql/gearman/index.d.ts +77 -0
- package/dist/nosql/geode/index.d.ts +93 -0
- package/dist/nosql/graphdb/index.d.ts +86 -0
- package/dist/nosql/graylog/index.d.ts +118 -0
- package/dist/nosql/gridgain/index.d.ts +78 -0
- package/dist/nosql/hazelcast/index.d.ts +73 -0
- package/dist/nosql/hbase/index.d.ts +123 -0
- package/dist/nosql/ignite/index.d.ts +80 -0
- package/dist/nosql/immudb/index.d.ts +131 -0
- package/dist/nosql/index.d.ts +215 -0
- package/dist/nosql/infinispan/index.d.ts +95 -0
- package/dist/nosql/influxdb/flux-compiler.d.ts +23 -0
- package/dist/nosql/influxdb/flux-compiler.js +170 -0
- package/dist/nosql/influxdb/index.d.ts +300 -0
- package/dist/nosql/influxdb/index.js +0 -0
- package/dist/nosql/kafka/index.d.ts +113 -0
- package/dist/nosql/keyspaces/index.d.ts +122 -0
- package/dist/nosql/kinesis/index.d.ts +121 -0
- package/dist/nosql/leveldb/index.d.ts +112 -0
- package/dist/nosql/leveldb/index.js +103 -1
- package/dist/nosql/lmdb/index.d.ts +76 -0
- package/dist/nosql/loki/index.d.ts +126 -0
- package/dist/nosql/marklogic/index.d.ts +76 -0
- package/dist/nosql/materialize/index.d.ts +91 -0
- package/dist/nosql/meilisearch/index.d.ts +76 -0
- package/dist/nosql/memcached/index.d.ts +138 -0
- package/dist/nosql/milvus/index.d.ts +167 -0
- package/dist/nosql/minio/index.d.ts +122 -0
- package/dist/nosql/momento/index.d.ts +99 -0
- package/dist/nosql/mongodb/index.d.ts +265 -0
- package/dist/nosql/mongodb/index.js +139 -0
- package/dist/nosql/mongodb/where.d.ts +8 -0
- package/dist/nosql/mongodb/where.js +181 -0
- package/dist/nosql/nats/index.d.ts +139 -0
- package/dist/nosql/nedb/index.d.ts +79 -0
- package/dist/nosql/neo4j/index.d.ts +217 -0
- package/dist/nosql/neo4j/index.js +26 -14
- package/dist/nosql/neptune/index.d.ts +234 -0
- package/dist/nosql/neptune/index.js +23 -9
- package/dist/nosql/nsq/index.d.ts +93 -0
- package/dist/nosql/opensearch/index.d.ts +97 -0
- package/dist/nosql/orientdb/index.d.ts +72 -0
- package/dist/nosql/papertrail/index.d.ts +120 -0
- package/dist/nosql/pinecone/index.d.ts +148 -0
- package/dist/nosql/pinot/index.d.ts +90 -0
- package/dist/nosql/pouchdb/index.d.ts +95 -0
- package/dist/nosql/prometheus/index.d.ts +112 -0
- package/dist/nosql/provendb/index.d.ts +143 -0
- package/dist/nosql/provendb/index.js +262 -0
- package/dist/nosql/pubsub/index.d.ts +83 -0
- package/dist/nosql/pulsar/index.d.ts +105 -0
- package/dist/nosql/qdrant/index.d.ts +231 -0
- package/dist/nosql/qldb/index.d.ts +182 -0
- package/dist/nosql/qldb/index.js +302 -1
- package/dist/nosql/r2/index.d.ts +160 -0
- package/dist/nosql/rabbitmq/index.d.ts +131 -0
- package/dist/nosql/ravendb/index.d.ts +138 -0
- package/dist/nosql/ravendb/index.js +323 -9
- package/dist/nosql/ravendb/where.d.ts +38 -0
- package/dist/nosql/ravendb/where.js +94 -0
- package/dist/nosql/redis/index.d.ts +267 -0
- package/dist/nosql/redis/index.js +19 -5
- package/dist/nosql/redpanda/index.d.ts +117 -0
- package/dist/nosql/resque/index.d.ts +91 -0
- package/dist/nosql/rethinkdb/index.d.ts +194 -0
- package/dist/nosql/rethinkdb/index.js +290 -0
- package/dist/nosql/rethinkdb/where.d.ts +38 -0
- package/dist/nosql/rethinkdb/where.js +94 -0
- package/dist/nosql/rocksdb/document-layer.d.ts +162 -0
- package/dist/nosql/rocksdb/document-layer.js +338 -0
- package/dist/nosql/rocksdb/index.d.ts +112 -0
- package/dist/nosql/rocksdb/index.js +103 -1
- package/dist/nosql/rocksdb/where-match.d.ts +21 -0
- package/dist/nosql/rocksdb/where-match.js +238 -0
- package/dist/nosql/rockset/index.d.ts +84 -0
- package/dist/nosql/s3/index.d.ts +170 -0
- package/dist/nosql/scylladb/index.d.ts +117 -0
- package/dist/nosql/signoz/index.d.ts +116 -0
- package/dist/nosql/sns/index.d.ts +99 -0
- package/dist/nosql/solr/index.d.ts +129 -0
- package/dist/nosql/splunk/index.d.ts +125 -0
- package/dist/nosql/sqs/index.d.ts +116 -0
- package/dist/nosql/stardog/index.d.ts +86 -0
- package/dist/nosql/starrocks/index.d.ts +89 -0
- package/dist/nosql/store.d.ts +23 -0
- package/dist/nosql/sumologic/index.d.ts +119 -0
- package/dist/nosql/surrealdb/index.d.ts +156 -0
- package/dist/nosql/surrealdb/index.js +174 -1
- package/dist/nosql/surrealdb/query-compiler.d.ts +26 -0
- package/dist/nosql/surrealdb/query-compiler.js +193 -0
- package/dist/nosql/terminusdb/index.d.ts +95 -0
- package/dist/nosql/tigergraph/index.d.ts +314 -0
- package/dist/nosql/typesense/index.d.ts +82 -0
- package/dist/nosql/unqlite/index.d.ts +68 -0
- package/dist/nosql/upstash/index.d.ts +80 -0
- package/dist/nosql/vercel-kv/index.d.ts +82 -0
- package/dist/nosql/victoriametrics/index.d.ts +129 -0
- package/dist/nosql/virtuoso/index.d.ts +87 -0
- package/dist/nosql/weaviate/index.d.ts +196 -0
- package/dist/operators/index.d.ts +7 -0
- package/dist/operators.d.ts +2947 -0
- package/dist/operators.js +46 -1
- package/dist/prisma-migrate/index.d.ts +28 -0
- package/dist/prisma-migrate/migration-generator.d.ts +21 -0
- package/dist/prisma-migrate/model-generator.d.ts +12 -0
- package/dist/prisma-migrate/relations.d.ts +28 -0
- package/dist/prisma-migrate/schema-parser.d.ts +42 -0
- package/dist/prisma-migrate/type-mapper.d.ts +20 -0
- package/dist/prorm.d.ts +2093 -0
- package/dist/prorm.js +721 -302
- package/dist/query-builders/cte-builder.d.ts +104 -0
- package/dist/query-builders/functions/aggregate.d.ts +199 -0
- package/dist/query-builders/functions/conditional.d.ts +195 -0
- package/dist/query-builders/functions/datetime.d.ts +202 -0
- package/dist/query-builders/functions/fulltext.d.ts +220 -0
- package/dist/query-builders/functions/index.d.ts +17 -0
- package/dist/query-builders/functions/json.d.ts +157 -0
- package/dist/query-builders/functions/math.d.ts +215 -0
- package/dist/query-builders/functions/string.d.ts +233 -0
- package/dist/query-builders/functions/window.d.ts +209 -0
- package/dist/query-builders/include-builder.d.ts +85 -0
- package/dist/query-builders/index-expression-builder.d.ts +153 -0
- package/dist/query-builders/index.d.ts +121 -0
- package/dist/query-builders/index.js +10 -0
- package/dist/query-builders/insert-builder.d.ts +62 -0
- package/dist/query-builders/model-helpers.d.ts +28 -0
- package/dist/query-builders/order-limit-builder.d.ts +84 -0
- package/dist/query-builders/sql-compiler.d.ts +562 -0
- package/dist/query-builders/subquery-builder.d.ts +133 -0
- package/dist/query-builders/update-builder.d.ts +71 -0
- package/dist/query-builders/view-builder.d.ts +189 -0
- package/dist/query-builders/where-builder.d.ts +124 -0
- package/dist/query-interface.d.ts +407 -0
- package/dist/query-interface.js +84 -0
- package/dist/query-optimizers/batch-optimizer.d.ts +175 -0
- package/dist/query-optimizers/explain-plans.d.ts +187 -0
- package/dist/query-optimizers/index.d.ts +27 -0
- package/dist/query-optimizers/prepared-statement-cache.d.ts +252 -0
- package/dist/query-optimizers/query-hints.d.ts +201 -0
- package/dist/query-optimizers/query-optimizer.d.ts +162 -0
- package/dist/query-optimizers/slow-query-logger.d.ts +186 -0
- package/dist/replica-manager.d.ts +235 -0
- package/dist/schema/index.d.ts +7 -0
- package/dist/schema/migration-generator.d.ts +74 -0
- package/dist/schema/schema-differ.d.ts +114 -0
- package/dist/schema/types.d.ts +246 -0
- package/dist/schema-objects.d.ts +78 -0
- package/dist/schema-objects.js +203 -0
- package/dist/sql-constants.d.ts +240 -0
- package/dist/sqlite-advanced.d.ts +572 -0
- package/dist/streams/index.d.ts +5 -0
- package/dist/streams/transforms.d.ts +120 -0
- package/dist/transaction.d.ts +221 -0
- package/dist/types/index.d.ts +3123 -0
- package/dist/user-management.d.ts +141 -0
- package/dist/utils/date.d.ts +149 -0
- package/dist/utils/index.d.ts +359 -0
- package/dist/utils/string.d.ts +88 -0
- package/dist/validators/index.d.ts +7 -0
- package/dist/validators/validator.d.ts +306 -0
- package/package.json +20 -5
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionIsolation
|
|
3
|
+
*
|
|
4
|
+
* Provides multi-tenant data isolation using AsyncLocalStorage for automatic
|
|
5
|
+
* tenant context propagation. Implements tenant-specific encryption keys,
|
|
6
|
+
* session management, and tenant-aware audit logging.
|
|
7
|
+
*
|
|
8
|
+
* Covers compliance frameworks including:
|
|
9
|
+
* ISO 27017, FedRAMP, CPRA, GDPR, HIPAA, SOC 2, NIST SP 800-53, and more.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* // At app startup, initialize session isolation:
|
|
13
|
+
* SessionIsolation.init({ sessionTimeout: 30 * 60 * 1000 });
|
|
14
|
+
*
|
|
15
|
+
* // Register tenant encryption keys:
|
|
16
|
+
* SessionIsolation.registerTenantKey('tenant-123', 'encryption-key-32-bytes');
|
|
17
|
+
*
|
|
18
|
+
* // In your authentication middleware:
|
|
19
|
+
* SessionIsolation.setTenant({
|
|
20
|
+
* tenantId: 'tenant-123',
|
|
21
|
+
* sessionId: 'session-abc',
|
|
22
|
+
* userId: 'user-456',
|
|
23
|
+
* roles: ['admin']
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // Run operations in a specific tenant context:
|
|
27
|
+
* const result = SessionIsolation.runInTenant('tenant-123', () => {
|
|
28
|
+
* return db.User.findAll();
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* // Use the decorator on models:
|
|
32
|
+
* @TenantIsolation({ tenantId: 'tenantId', auditEnabled: true })
|
|
33
|
+
* class Document extends Model { ... }
|
|
34
|
+
*/
|
|
35
|
+
export interface TenantContext {
|
|
36
|
+
/** The tenant identifier */
|
|
37
|
+
tenantId: string;
|
|
38
|
+
/** The current session ID */
|
|
39
|
+
sessionId: string;
|
|
40
|
+
/** The user ID */
|
|
41
|
+
userId?: string;
|
|
42
|
+
/** User roles within this tenant */
|
|
43
|
+
roles?: string[];
|
|
44
|
+
/** Session creation timestamp */
|
|
45
|
+
sessionCreatedAt?: Date;
|
|
46
|
+
/** Last activity timestamp */
|
|
47
|
+
lastActivityAt?: Date;
|
|
48
|
+
/** Custom tenant metadata */
|
|
49
|
+
metadata?: Record<string, any>;
|
|
50
|
+
}
|
|
51
|
+
export interface TenantKey {
|
|
52
|
+
/** The tenant ID this key belongs to */
|
|
53
|
+
tenantId: string;
|
|
54
|
+
/** The encryption key (32 bytes for AES-256) */
|
|
55
|
+
key: string;
|
|
56
|
+
/** Key version/rotation identifier */
|
|
57
|
+
keyVersion?: string;
|
|
58
|
+
/** When this key was registered */
|
|
59
|
+
createdAt: Date;
|
|
60
|
+
/** When this key expires (for rotation) */
|
|
61
|
+
expiresAt?: Date;
|
|
62
|
+
}
|
|
63
|
+
export interface SessionInfo {
|
|
64
|
+
/** Session identifier */
|
|
65
|
+
sessionId: string;
|
|
66
|
+
/** Tenant ID */
|
|
67
|
+
tenantId: string;
|
|
68
|
+
/** User ID */
|
|
69
|
+
userId: string;
|
|
70
|
+
/** When session was created */
|
|
71
|
+
createdAt: Date;
|
|
72
|
+
/** When session expires */
|
|
73
|
+
expiresAt: Date;
|
|
74
|
+
/** Last activity timestamp */
|
|
75
|
+
lastActivityAt: Date;
|
|
76
|
+
/** Whether session is active */
|
|
77
|
+
isActive: boolean;
|
|
78
|
+
/** IP address of session creation */
|
|
79
|
+
ipAddress?: string;
|
|
80
|
+
/** User agent of session creation */
|
|
81
|
+
userAgent?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface SessionIsolationOptions {
|
|
84
|
+
/** Session timeout in milliseconds. Default: 30 minutes */
|
|
85
|
+
sessionTimeout?: number;
|
|
86
|
+
/** Maximum number of concurrent sessions per tenant. Default: unlimited */
|
|
87
|
+
maxSessionsPerTenant?: number;
|
|
88
|
+
/** Maximum sessions per user. Default: 5 */
|
|
89
|
+
maxSessionsPerUser?: number;
|
|
90
|
+
/** Enable automatic session cleanup. Default: true */
|
|
91
|
+
autoCleanup?: boolean;
|
|
92
|
+
/** Cleanup interval in milliseconds. Default: 5 minutes */
|
|
93
|
+
cleanupInterval?: number;
|
|
94
|
+
/** Enable tenant-aware audit logging. Default: true */
|
|
95
|
+
auditEnabled?: boolean;
|
|
96
|
+
/** Custom session storage (for distributed setups) */
|
|
97
|
+
sessionStore?: SessionStore;
|
|
98
|
+
/** Custom key storage (for distributed setups) */
|
|
99
|
+
keyStore?: KeyStore;
|
|
100
|
+
}
|
|
101
|
+
export interface TenantIsolationDecoratorOptions {
|
|
102
|
+
/** The field name that holds the tenant ID */
|
|
103
|
+
tenantId: string;
|
|
104
|
+
/** Enable audit logging for this model */
|
|
105
|
+
auditEnabled?: boolean;
|
|
106
|
+
/** Fields to encrypt */
|
|
107
|
+
encryptFields?: string[];
|
|
108
|
+
/** Required roles to access */
|
|
109
|
+
requiredRoles?: string[];
|
|
110
|
+
}
|
|
111
|
+
export interface SessionStore {
|
|
112
|
+
get(sessionId: string): Promise<SessionInfo | null>;
|
|
113
|
+
set(sessionId: string, info: SessionInfo): Promise<void>;
|
|
114
|
+
delete(sessionId: string): Promise<void>;
|
|
115
|
+
getByTenant(tenantId: string): Promise<SessionInfo[]>;
|
|
116
|
+
getByUser(userId: string): Promise<SessionInfo[]>;
|
|
117
|
+
cleanup(expiredBefore: Date): Promise<number>;
|
|
118
|
+
}
|
|
119
|
+
export interface KeyStore {
|
|
120
|
+
get(tenantId: string): Promise<TenantKey | null>;
|
|
121
|
+
set(tenantId: string, key: TenantKey): Promise<void>;
|
|
122
|
+
delete(tenantId: string): Promise<void>;
|
|
123
|
+
getAll(): Promise<TenantKey[]>;
|
|
124
|
+
}
|
|
125
|
+
export declare class SessionIsolation {
|
|
126
|
+
/**
|
|
127
|
+
* Initialize session isolation. Call once at application startup.
|
|
128
|
+
*
|
|
129
|
+
* @param opts - Configuration options
|
|
130
|
+
*/
|
|
131
|
+
static init(opts?: SessionIsolationOptions): void;
|
|
132
|
+
/**
|
|
133
|
+
* Reset the session isolation system. Useful for testing.
|
|
134
|
+
*/
|
|
135
|
+
static reset(): void;
|
|
136
|
+
/**
|
|
137
|
+
* Set the current tenant context for this request/operation.
|
|
138
|
+
*
|
|
139
|
+
* @param ctx - The tenant context
|
|
140
|
+
*/
|
|
141
|
+
static setTenant(ctx: TenantContext): void;
|
|
142
|
+
/**
|
|
143
|
+
* Get the current tenant context.
|
|
144
|
+
*
|
|
145
|
+
* @returns The current tenant context, or undefined if not set
|
|
146
|
+
*/
|
|
147
|
+
static getTenant(): TenantContext | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* Clear the current tenant context.
|
|
150
|
+
*/
|
|
151
|
+
static clearTenant(): void;
|
|
152
|
+
/**
|
|
153
|
+
* Run a function within a specific tenant context.
|
|
154
|
+
*
|
|
155
|
+
* @param tenantId - The tenant ID to run in
|
|
156
|
+
* @param fn - The function to execute
|
|
157
|
+
* @returns The result of the function
|
|
158
|
+
*/
|
|
159
|
+
static runInTenant<T>(tenantId: string, fn: () => T): T;
|
|
160
|
+
/**
|
|
161
|
+
* Register an encryption key for a tenant.
|
|
162
|
+
*
|
|
163
|
+
* @param tenantId - The tenant ID
|
|
164
|
+
* @param key - The encryption key (32 bytes recommended for AES-256)
|
|
165
|
+
* @param keyVersion - Optional key version for rotation
|
|
166
|
+
*/
|
|
167
|
+
static registerTenantKey(tenantId: string, key: string, keyVersion?: string): Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* Get the encryption key for a tenant.
|
|
170
|
+
*
|
|
171
|
+
* @param tenantId - The tenant ID
|
|
172
|
+
* @returns The tenant key, or undefined if not found
|
|
173
|
+
*/
|
|
174
|
+
static getTenantKey(tenantId: string): Promise<TenantKey | undefined>;
|
|
175
|
+
/**
|
|
176
|
+
* Validate a session.
|
|
177
|
+
*
|
|
178
|
+
* @param sessionId - The session ID to validate
|
|
179
|
+
* @returns SessionInfo if valid, null if invalid/expired
|
|
180
|
+
*/
|
|
181
|
+
static validateSession(sessionId: string): Promise<SessionInfo | null>;
|
|
182
|
+
/**
|
|
183
|
+
* Manually expire a session.
|
|
184
|
+
*
|
|
185
|
+
* @param sessionId - The session ID to expire
|
|
186
|
+
*/
|
|
187
|
+
static expireSession(sessionId: string): Promise<void>;
|
|
188
|
+
/**
|
|
189
|
+
* Create a new session for a tenant.
|
|
190
|
+
*
|
|
191
|
+
* @param tenantId - The tenant ID
|
|
192
|
+
* @param userId - The user ID
|
|
193
|
+
* @param options - Additional session options
|
|
194
|
+
* @returns The created session info
|
|
195
|
+
*/
|
|
196
|
+
static createSession(tenantId: string, userId: string, options?: {
|
|
197
|
+
ipAddress?: string;
|
|
198
|
+
userAgent?: string;
|
|
199
|
+
customExpiresAt?: Date;
|
|
200
|
+
}): Promise<SessionInfo>;
|
|
201
|
+
/**
|
|
202
|
+
* Get all active sessions for a tenant.
|
|
203
|
+
*
|
|
204
|
+
* @param tenantId - The tenant ID
|
|
205
|
+
* @returns Array of session info
|
|
206
|
+
*/
|
|
207
|
+
static getTenantSessions(tenantId: string): Promise<SessionInfo[]>;
|
|
208
|
+
/**
|
|
209
|
+
* Get all active sessions for a user.
|
|
210
|
+
*
|
|
211
|
+
* @param userId - The user ID
|
|
212
|
+
* @returns Array of session info
|
|
213
|
+
*/
|
|
214
|
+
static getUserSessions(userId: string): Promise<SessionInfo[]>;
|
|
215
|
+
/**
|
|
216
|
+
* Clean up all expired sessions.
|
|
217
|
+
*
|
|
218
|
+
* @returns Number of sessions cleaned up
|
|
219
|
+
*/
|
|
220
|
+
static cleanupExpiredSessions(): Promise<number>;
|
|
221
|
+
/**
|
|
222
|
+
* Get the current session timeout value.
|
|
223
|
+
*
|
|
224
|
+
* @returns Timeout in milliseconds
|
|
225
|
+
*/
|
|
226
|
+
static getSessionTimeout(): number;
|
|
227
|
+
/**
|
|
228
|
+
* Check if session isolation is initialized.
|
|
229
|
+
*
|
|
230
|
+
* @returns True if initialized
|
|
231
|
+
*/
|
|
232
|
+
static isReady(): boolean;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Decorator to apply tenant isolation to a model.
|
|
236
|
+
*
|
|
237
|
+
* @TenantIsolation({ tenantId: 'tenantId', auditEnabled: true })
|
|
238
|
+
* class Document extends Model {
|
|
239
|
+
* tenantId: string;
|
|
240
|
+
* title: string;
|
|
241
|
+
* }
|
|
242
|
+
*
|
|
243
|
+
* @param options - Tenant isolation options
|
|
244
|
+
*/
|
|
245
|
+
export declare function TenantIsolation(options: TenantIsolationDecoratorOptions): (target: any) => void;
|
|
246
|
+
/**
|
|
247
|
+
* Get tenant isolation options from a decorated model.
|
|
248
|
+
*
|
|
249
|
+
* @param model - The model class
|
|
250
|
+
* @returns The decorator options, or undefined if not decorated
|
|
251
|
+
*/
|
|
252
|
+
export declare function getTenantIsolationOptions(model: any): TenantIsolationDecoratorOptions | undefined;
|
|
253
|
+
/**
|
|
254
|
+
* Express/Koa middleware to automatically set tenant context from request.
|
|
255
|
+
*
|
|
256
|
+
* app.use(authMiddleware); // sets req.user
|
|
257
|
+
* app.use(sessionIsolationMiddleware);
|
|
258
|
+
*
|
|
259
|
+
* @param options - Middleware options
|
|
260
|
+
*/
|
|
261
|
+
export declare function sessionIsolationMiddleware(req: any, res: any, next: () => void): void;
|
|
262
|
+
/**
|
|
263
|
+
* Get tenant-aware audit metadata for the current context.
|
|
264
|
+
* Use this to include tenant information in audit logs.
|
|
265
|
+
*
|
|
266
|
+
* @returns Audit metadata object
|
|
267
|
+
*/
|
|
268
|
+
export declare function getTenantAuditMetadata(): Record<string, any>;
|
|
269
|
+
export declare const TenantIsolationManager: {
|
|
270
|
+
init: typeof SessionIsolation.init;
|
|
271
|
+
reset: typeof SessionIsolation.reset;
|
|
272
|
+
setTenant: typeof SessionIsolation.setTenant;
|
|
273
|
+
getTenant: typeof SessionIsolation.getTenant;
|
|
274
|
+
clearTenant: typeof SessionIsolation.clearTenant;
|
|
275
|
+
runInTenant: typeof SessionIsolation.runInTenant;
|
|
276
|
+
registerTenantKey: typeof SessionIsolation.registerTenantKey;
|
|
277
|
+
getTenantKey: typeof SessionIsolation.getTenantKey;
|
|
278
|
+
validateSession: typeof SessionIsolation.validateSession;
|
|
279
|
+
expireSession: typeof SessionIsolation.expireSession;
|
|
280
|
+
createSession: typeof SessionIsolation.createSession;
|
|
281
|
+
getTenantSessions: typeof SessionIsolation.getTenantSessions;
|
|
282
|
+
getUserSessions: typeof SessionIsolation.getUserSessions;
|
|
283
|
+
cleanupExpiredSessions: typeof SessionIsolation.cleanupExpiredSessions;
|
|
284
|
+
getSessionTimeout: typeof SessionIsolation.getSessionTimeout;
|
|
285
|
+
isReady: typeof SessionIsolation.isReady;
|
|
286
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TLSEnforcer
|
|
3
|
+
*
|
|
4
|
+
* Validates and enforces TLS/SSL on database connections at startup.
|
|
5
|
+
* Throws a descriptive error if the connection is not encrypted,
|
|
6
|
+
* preventing insecure deployments from reaching production.
|
|
7
|
+
*
|
|
8
|
+
* Covers ~54 compliance frameworks including:
|
|
9
|
+
* GDPR Art 32, HIPAA, PCI DSS, NIST SP 800-53, FedRAMP, SOC 2,
|
|
10
|
+
* ISO 27001, NYDFS 23 NYCRR 500, HITRUST, NIS2, DORA, and more.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* const prorm = new Prorm({ ... });
|
|
14
|
+
* TLSEnforcer.enforce(prorm); // strict
|
|
15
|
+
* TLSEnforcer.enforce(prorm, { mode: 'warn' }); // log only
|
|
16
|
+
* TLSEnforcer.enforce(prorm, { allowLocal: true }); // skip for localhost
|
|
17
|
+
*/
|
|
18
|
+
export type TLSMode = 'strict' | 'warn' | 'off';
|
|
19
|
+
export interface TLSEnforcerOptions {
|
|
20
|
+
/**
|
|
21
|
+
* 'strict' (default) — throw if TLS is not configured.
|
|
22
|
+
* 'warn' — log a warning but continue.
|
|
23
|
+
* 'off' — disable enforcement entirely.
|
|
24
|
+
*/
|
|
25
|
+
mode?: TLSMode;
|
|
26
|
+
/**
|
|
27
|
+
* If true, skip enforcement for localhost / 127.0.0.1 / ::1 connections.
|
|
28
|
+
* Useful for local development without a dev certificate. Default: false.
|
|
29
|
+
*/
|
|
30
|
+
allowLocal?: boolean;
|
|
31
|
+
/** Custom logger. Defaults to console.warn. */
|
|
32
|
+
logger?: (message: string) => void;
|
|
33
|
+
}
|
|
34
|
+
export declare class TLSEnforcer {
|
|
35
|
+
/**
|
|
36
|
+
* Enforce TLS on the given Prorm instance.
|
|
37
|
+
* Call immediately after constructing the Prorm instance.
|
|
38
|
+
*
|
|
39
|
+
* @param prorm - The Prorm instance to inspect
|
|
40
|
+
* @param options - Enforcement mode and options
|
|
41
|
+
*/
|
|
42
|
+
static enforce(prorm: any, options?: TLSEnforcerOptions): void;
|
|
43
|
+
/**
|
|
44
|
+
* Return recommended SSL dialectOptions for a given dialect.
|
|
45
|
+
* Use this as a starting point when configuring your connection.
|
|
46
|
+
*/
|
|
47
|
+
static recommendedOptions(dialect: 'postgres' | 'mysql' | 'mariadb' | 'mssql', options?: {
|
|
48
|
+
rejectUnauthorized?: boolean;
|
|
49
|
+
ca?: string;
|
|
50
|
+
}): Record<string, any>;
|
|
51
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WORMStorage (Write Once Read Many)
|
|
3
|
+
*
|
|
4
|
+
* Immutable archival storage that prevents UPDATE and DELETE operations after commit.
|
|
5
|
+
* Provides tamper-evident audit trails and retention period enforcement.
|
|
6
|
+
*
|
|
7
|
+
* Covers compliance frameworks including:
|
|
8
|
+
* SEC 17a-4 (WORM), FINRA, SOX, DORA, MiFID II, GDPR Art 32,
|
|
9
|
+
* ALCOA+, 21 CFR Part 11, and financial audit requirements.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* // Enable WORM on a model:
|
|
13
|
+
* WORMStorage.enable(FinancialRecord, {
|
|
14
|
+
* retentionPeriod: { years: 7 },
|
|
15
|
+
* tamperEvident: true,
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Archive a record (moves to archived state):
|
|
19
|
+
* await WORMStorage.archive(record);
|
|
20
|
+
*
|
|
21
|
+
* // Freeze a record (fully immutable):
|
|
22
|
+
* await WORMStorage.freeze(record);
|
|
23
|
+
*
|
|
24
|
+
* // Verify integrity of a record:
|
|
25
|
+
* const isValid = await WORMStorage.verifyIntegrity(recordId, 'FinancialRecords');
|
|
26
|
+
*
|
|
27
|
+
* // Get tamper evidence log:
|
|
28
|
+
* const log = await WORMStorage.getTamperLog(recordId, 'FinancialRecords');
|
|
29
|
+
*
|
|
30
|
+
* // Enforce retention policy:
|
|
31
|
+
* await WORMStorage.enforceRetention(FinancialRecord, prorm);
|
|
32
|
+
*
|
|
33
|
+
* // Using the decorator:
|
|
34
|
+
* @WORM({ retentionPeriod: { years: 7 }, tamperEvident: true })
|
|
35
|
+
* class FinancialRecord extends Model { ... }
|
|
36
|
+
*/
|
|
37
|
+
import { ModelStatic, Prorm } from '../prorm';
|
|
38
|
+
import { RetentionDuration } from './data-retention';
|
|
39
|
+
/** Archive state machine states */
|
|
40
|
+
export type ArchiveState = 'active' | 'archived' | 'frozen';
|
|
41
|
+
/** WORM configuration options */
|
|
42
|
+
export interface WORMOptions {
|
|
43
|
+
/** Retention period for the records */
|
|
44
|
+
retentionPeriod: RetentionDuration;
|
|
45
|
+
/** Enable tamper-evident audit trail. Default: true */
|
|
46
|
+
tamperEvident?: boolean;
|
|
47
|
+
/** Custom table name for WORM metadata. Default: 'WORMMetadata' */
|
|
48
|
+
tableName?: string;
|
|
49
|
+
/** State field name. Default: 'wormState' */
|
|
50
|
+
stateField?: string;
|
|
51
|
+
/** Timestamp field for archive. Default: 'archivedAt' */
|
|
52
|
+
timestampField?: string;
|
|
53
|
+
/** Allow soft deletes instead of hard blocks. Default: false */
|
|
54
|
+
allowSoftDelete?: boolean;
|
|
55
|
+
/** Automatically archive after creation. Default: false */
|
|
56
|
+
autoArchive?: boolean;
|
|
57
|
+
/** Auto-freeze after retention period. Default: false */
|
|
58
|
+
autoFreeze?: boolean;
|
|
59
|
+
/** Integrate with DataRetentionPolicy. Default: true */
|
|
60
|
+
integrateWithRetention?: boolean;
|
|
61
|
+
}
|
|
62
|
+
/** Tamper log entry for chain verification */
|
|
63
|
+
export interface WORMTamperLog {
|
|
64
|
+
/** Unique identifier */
|
|
65
|
+
id: number;
|
|
66
|
+
/** Record ID this log applies to */
|
|
67
|
+
recordId: string | number;
|
|
68
|
+
/** Table name */
|
|
69
|
+
tableName: string;
|
|
70
|
+
/** Operation performed */
|
|
71
|
+
operation: 'create' | 'archive' | 'freeze' | 'unfreeze' | 'tamper_detected';
|
|
72
|
+
/** Hash of record state at this point */
|
|
73
|
+
hash: string;
|
|
74
|
+
/** Previous hash in chain */
|
|
75
|
+
previousHash: string;
|
|
76
|
+
/** Timestamp of operation */
|
|
77
|
+
timestamp: Date;
|
|
78
|
+
/** User who performed the operation */
|
|
79
|
+
performedBy?: string | number;
|
|
80
|
+
/** Additional metadata */
|
|
81
|
+
metadata?: Record<string, any>;
|
|
82
|
+
}
|
|
83
|
+
/** WORM configuration stored in registry */
|
|
84
|
+
interface WORMConfig {
|
|
85
|
+
model: any;
|
|
86
|
+
prorm: Prorm;
|
|
87
|
+
options: Required<WORMOptions>;
|
|
88
|
+
metadataModel: ModelStatic<any>;
|
|
89
|
+
tamperLogModel: ModelStatic<any>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Decorator to mark a model for WORM storage.
|
|
93
|
+
*
|
|
94
|
+
* @WORM({ retentionPeriod: { years: 7 }, tamperEvident: true })
|
|
95
|
+
* class FinancialRecord extends Model { ... }
|
|
96
|
+
*/
|
|
97
|
+
export declare function WORM(options: WORMOptions): (target: Function) => void;
|
|
98
|
+
/**
|
|
99
|
+
* Get the WORM options for a model.
|
|
100
|
+
*/
|
|
101
|
+
export declare function getWORMOptions(Model: any): WORMOptions | undefined;
|
|
102
|
+
export declare class WORMStorage {
|
|
103
|
+
/**
|
|
104
|
+
* Enable WORM storage on a model.
|
|
105
|
+
* Creates necessary metadata tables and registers hooks.
|
|
106
|
+
*
|
|
107
|
+
* @param model - The model class to protect
|
|
108
|
+
* @param prorm - The Prorm instance
|
|
109
|
+
* @param options - WORM configuration options
|
|
110
|
+
*/
|
|
111
|
+
static enable(model: any, prorm: Prorm, options: WORMOptions): void;
|
|
112
|
+
/**
|
|
113
|
+
* Apply hooks to a model for WORM protection.
|
|
114
|
+
* Called automatically by enable().
|
|
115
|
+
*
|
|
116
|
+
* @param model - The model class
|
|
117
|
+
* @param config - The WORM configuration
|
|
118
|
+
*/
|
|
119
|
+
static applyHooks(model: any, config?: WORMConfig): void;
|
|
120
|
+
/**
|
|
121
|
+
* Archive a record (moves to archived state).
|
|
122
|
+
* Archived records are read-only but can still be queried.
|
|
123
|
+
*
|
|
124
|
+
* @param record - The record instance to archive
|
|
125
|
+
*/
|
|
126
|
+
static archive(record: any): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Freeze a record (fully immutable).
|
|
129
|
+
* Frozen records cannot be modified or deleted.
|
|
130
|
+
*
|
|
131
|
+
* @param record - The record instance to freeze
|
|
132
|
+
*/
|
|
133
|
+
static freeze(record: any): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Get the tamper evidence log for a record.
|
|
136
|
+
*
|
|
137
|
+
* @param recordId - The record ID
|
|
138
|
+
* @param tableName - The table name
|
|
139
|
+
*/
|
|
140
|
+
static getTamperLog(recordId: string | number, tableName: string): Promise<WORMTamperLog[]>;
|
|
141
|
+
/**
|
|
142
|
+
* Verify the integrity of a record's tamper chain.
|
|
143
|
+
*
|
|
144
|
+
* @param recordId - The record ID
|
|
145
|
+
* @param tableName - The table name
|
|
146
|
+
* @returns True if chain is valid, false if tampering detected
|
|
147
|
+
*/
|
|
148
|
+
static verifyIntegrity(recordId: string | number, tableName: string): Promise<boolean>;
|
|
149
|
+
/**
|
|
150
|
+
* Check if WORM is enabled on a model.
|
|
151
|
+
*
|
|
152
|
+
* @param model - The model class
|
|
153
|
+
*/
|
|
154
|
+
static isWORMEnabled(model: any): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Get the WORM configuration for a model.
|
|
157
|
+
*
|
|
158
|
+
* @param model - The model class
|
|
159
|
+
*/
|
|
160
|
+
static getConfig(model: any): WORMOptions | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* Enforce retention policy on a model.
|
|
163
|
+
* This will delete or anonymize records that have exceeded their retention period.
|
|
164
|
+
*
|
|
165
|
+
* @param model - The model class
|
|
166
|
+
* @param prorm - The Prorm instance
|
|
167
|
+
*/
|
|
168
|
+
static enforceRetention(model: any, prorm: any): Promise<{
|
|
169
|
+
affected: number;
|
|
170
|
+
mode: string;
|
|
171
|
+
}>;
|
|
172
|
+
/**
|
|
173
|
+
* Get the archive state of a record.
|
|
174
|
+
*
|
|
175
|
+
* @param recordId - The record ID
|
|
176
|
+
* @param tableName - The table name
|
|
177
|
+
*/
|
|
178
|
+
static getState(recordId: string | number, tableName: string): Promise<ArchiveState | null>;
|
|
179
|
+
/**
|
|
180
|
+
* Disable WORM storage for a model.
|
|
181
|
+
*
|
|
182
|
+
* @param model - The model class
|
|
183
|
+
*/
|
|
184
|
+
static disable(model: any): void;
|
|
185
|
+
/**
|
|
186
|
+
* Get the WORM metadata model for a model.
|
|
187
|
+
*
|
|
188
|
+
* @param model - The model class
|
|
189
|
+
*/
|
|
190
|
+
static getMetadataModel(model: any): ModelStatic<any> | undefined;
|
|
191
|
+
/**
|
|
192
|
+
* Get the tamper log model for a model.
|
|
193
|
+
*
|
|
194
|
+
* @param model - The model class
|
|
195
|
+
*/
|
|
196
|
+
static getTamperLogModel(model: any): ModelStatic<any> | undefined;
|
|
197
|
+
/**
|
|
198
|
+
* List all models with WORM storage enabled.
|
|
199
|
+
*/
|
|
200
|
+
static listWORMModels(): Array<{
|
|
201
|
+
modelName: string;
|
|
202
|
+
options: WORMOptions;
|
|
203
|
+
}>;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Apply WORM hooks to a model (exported for convenience).
|
|
207
|
+
*
|
|
208
|
+
* @param model - The model class
|
|
209
|
+
*/
|
|
210
|
+
export declare function applyWORMHooks(model: any): void;
|
|
211
|
+
/**
|
|
212
|
+
* Check if a specific record is frozen.
|
|
213
|
+
*
|
|
214
|
+
* @param recordId - The record ID
|
|
215
|
+
* @param tableName - The table name
|
|
216
|
+
*/
|
|
217
|
+
export declare function isFrozen(recordId: string | number, tableName: string): Promise<boolean>;
|
|
218
|
+
/**
|
|
219
|
+
* Check if a specific record is archived.
|
|
220
|
+
*
|
|
221
|
+
* @param recordId - The record ID
|
|
222
|
+
* @param tableName - The table name
|
|
223
|
+
*/
|
|
224
|
+
export declare function isArchived(recordId: string | number, tableName: string): Promise<boolean>;
|
|
225
|
+
export {};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection Manager for managing multiple named database connections
|
|
3
|
+
* Supports cross-database queries and SQLite ATTACH DATABASE
|
|
4
|
+
*/
|
|
5
|
+
import { Prorm, PrormOptions } from './prorm';
|
|
6
|
+
/**
|
|
7
|
+
* Named connection options for adding a new database connection
|
|
8
|
+
*/
|
|
9
|
+
export interface NamedConnectionOptions {
|
|
10
|
+
/** Unique name to identify this connection */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Prorm options for the connection */
|
|
13
|
+
options: PrormOptions;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Connection Manager class for managing multiple database connections
|
|
17
|
+
* Allows switching between different databases in the same application
|
|
18
|
+
*/
|
|
19
|
+
export declare class ConnectionManager {
|
|
20
|
+
private connections;
|
|
21
|
+
private _defaultConnection;
|
|
22
|
+
/**
|
|
23
|
+
* Create a new ConnectionManager instance
|
|
24
|
+
*/
|
|
25
|
+
constructor();
|
|
26
|
+
/**
|
|
27
|
+
* Add a new named database connection
|
|
28
|
+
* @param name - Unique name to identify this connection
|
|
29
|
+
* @param options - Prorm options for the connection
|
|
30
|
+
* @returns The Prorm instance for the new connection
|
|
31
|
+
* @example
|
|
32
|
+
* // Add a secondary SQLite database
|
|
33
|
+
* const manager = new ConnectionManager();
|
|
34
|
+
* await manager.addConnection('analytics', {
|
|
35
|
+
* dialect: 'sqlite',
|
|
36
|
+
* storage: './analytics.db'
|
|
37
|
+
* });
|
|
38
|
+
*/
|
|
39
|
+
addConnection(name: string, options: PrormOptions): Promise<Prorm>;
|
|
40
|
+
/**
|
|
41
|
+
* Get a connection by name
|
|
42
|
+
* @param name - The connection name
|
|
43
|
+
* @returns The Prorm instance or undefined if not found
|
|
44
|
+
* @example
|
|
45
|
+
* const analyticsDb = manager.getConnection('analytics');
|
|
46
|
+
*/
|
|
47
|
+
getConnection(name: string): Prorm | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Check if a connection exists
|
|
50
|
+
* @param name - The connection name to check
|
|
51
|
+
* @returns True if the connection exists
|
|
52
|
+
* @example
|
|
53
|
+
* if (manager.hasConnection('analytics')) {
|
|
54
|
+
* // Use analytics connection
|
|
55
|
+
* }
|
|
56
|
+
*/
|
|
57
|
+
hasConnection(name: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Remove a connection by name
|
|
60
|
+
* @param name - The connection name to remove
|
|
61
|
+
* @returns True if the connection was removed
|
|
62
|
+
* @example
|
|
63
|
+
* await manager.removeConnection('analytics');
|
|
64
|
+
*/
|
|
65
|
+
removeConnection(name: string): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Get all connection names
|
|
68
|
+
* @returns Array of connection names
|
|
69
|
+
* @example
|
|
70
|
+
* const names = manager.getConnectionNames();
|
|
71
|
+
* // ['main', 'analytics', 'logs']
|
|
72
|
+
*/
|
|
73
|
+
getConnectionNames(): string[];
|
|
74
|
+
/**
|
|
75
|
+
* Get or set the default connection name
|
|
76
|
+
*/
|
|
77
|
+
get defaultConnection(): string | null;
|
|
78
|
+
set defaultConnection(name: string | null);
|
|
79
|
+
/**
|
|
80
|
+
* Get all connections
|
|
81
|
+
* @returns Map of connection names to Prorm instances
|
|
82
|
+
*/
|
|
83
|
+
get connectionsMap(): Map<string, Prorm>;
|
|
84
|
+
/**
|
|
85
|
+
* Attach a SQLite database using ATTACH DATABASE
|
|
86
|
+
* This allows querying across multiple SQLite files
|
|
87
|
+
* @param mainConnectionName - The name of the main connection to attach to
|
|
88
|
+
* @param alias - The alias to use for the attached database
|
|
89
|
+
* @param path - Path to the SQLite file to attach
|
|
90
|
+
* @example
|
|
91
|
+
* // Attach analytics database to main connection
|
|
92
|
+
* await manager.attachDatabase('main', 'analytics', './analytics.db');
|
|
93
|
+
* // Now you can query: SELECT * FROM analytics.users
|
|
94
|
+
*/
|
|
95
|
+
attachDatabase(mainConnectionName: string, alias: string, path: string): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Detach a SQLite database
|
|
98
|
+
* @param mainConnectionName - The name of the main connection
|
|
99
|
+
* @param alias - The alias of the database to detach
|
|
100
|
+
* @example
|
|
101
|
+
* await manager.detachDatabase('main', 'analytics');
|
|
102
|
+
*/
|
|
103
|
+
detachDatabase(mainConnectionName: string, alias: string): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Close all connections
|
|
106
|
+
* @example
|
|
107
|
+
* await manager.closeAll();
|
|
108
|
+
*/
|
|
109
|
+
closeAll(): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Execute a raw query on a specific connection
|
|
112
|
+
* @param connectionName - The name of the connection to use
|
|
113
|
+
* @param sql - The SQL query to execute
|
|
114
|
+
* @param options - Optional query options
|
|
115
|
+
* @returns Query results
|
|
116
|
+
* @example
|
|
117
|
+
* const results = await manager.query('main', 'SELECT * FROM users');
|
|
118
|
+
*/
|
|
119
|
+
query(connectionName: string, sql: string, options?: {
|
|
120
|
+
raw?: boolean;
|
|
121
|
+
replacements?: Record<string, any>;
|
|
122
|
+
bind?: Record<string, any>;
|
|
123
|
+
}): Promise<any>;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create a new ConnectionManager instance
|
|
127
|
+
* @example
|
|
128
|
+
* const manager = createConnectionManager();
|
|
129
|
+
*/
|
|
130
|
+
export declare function createConnectionManager(): ConnectionManager;
|