@neverinfamous/postgres-mcp 1.0.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/LICENSE +21 -0
- package/README.md +515 -0
- package/dist/__tests__/mocks/adapter.d.ts +80 -0
- package/dist/__tests__/mocks/adapter.d.ts.map +1 -0
- package/dist/__tests__/mocks/adapter.js +225 -0
- package/dist/__tests__/mocks/adapter.js.map +1 -0
- package/dist/__tests__/mocks/index.d.ts +11 -0
- package/dist/__tests__/mocks/index.d.ts.map +1 -0
- package/dist/__tests__/mocks/index.js +11 -0
- package/dist/__tests__/mocks/index.js.map +1 -0
- package/dist/__tests__/mocks/pool.d.ts +43 -0
- package/dist/__tests__/mocks/pool.d.ts.map +1 -0
- package/dist/__tests__/mocks/pool.js +71 -0
- package/dist/__tests__/mocks/pool.js.map +1 -0
- package/dist/adapters/DatabaseAdapter.d.ts +139 -0
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
- package/dist/adapters/DatabaseAdapter.js +250 -0
- package/dist/adapters/DatabaseAdapter.js.map +1 -0
- package/dist/adapters/postgresql/PostgresAdapter.d.ts +119 -0
- package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -0
- package/dist/adapters/postgresql/PostgresAdapter.js +902 -0
- package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -0
- package/dist/adapters/postgresql/index.d.ts +5 -0
- package/dist/adapters/postgresql/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/index.js +5 -0
- package/dist/adapters/postgresql/index.js.map +1 -0
- package/dist/adapters/postgresql/prompts/backup.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/backup.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/backup.js +132 -0
- package/dist/adapters/postgresql/prompts/backup.js.map +1 -0
- package/dist/adapters/postgresql/prompts/citext.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/citext.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/citext.js +227 -0
- package/dist/adapters/postgresql/prompts/citext.js.map +1 -0
- package/dist/adapters/postgresql/prompts/extensionSetup.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/extensionSetup.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/extensionSetup.js +282 -0
- package/dist/adapters/postgresql/prompts/extensionSetup.js.map +1 -0
- package/dist/adapters/postgresql/prompts/health.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/health.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/health.js +118 -0
- package/dist/adapters/postgresql/prompts/health.js.map +1 -0
- package/dist/adapters/postgresql/prompts/index.d.ts +13 -0
- package/dist/adapters/postgresql/prompts/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/index.js +308 -0
- package/dist/adapters/postgresql/prompts/index.js.map +1 -0
- package/dist/adapters/postgresql/prompts/indexTuning.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/indexTuning.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/indexTuning.js +130 -0
- package/dist/adapters/postgresql/prompts/indexTuning.js.map +1 -0
- package/dist/adapters/postgresql/prompts/kcache.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/kcache.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/kcache.js +227 -0
- package/dist/adapters/postgresql/prompts/kcache.js.map +1 -0
- package/dist/adapters/postgresql/prompts/ltree.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/ltree.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/ltree.js +286 -0
- package/dist/adapters/postgresql/prompts/ltree.js.map +1 -0
- package/dist/adapters/postgresql/prompts/partman.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/partman.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/partman.js +211 -0
- package/dist/adapters/postgresql/prompts/partman.js.map +1 -0
- package/dist/adapters/postgresql/prompts/pgcron.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/pgcron.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/pgcron.js +233 -0
- package/dist/adapters/postgresql/prompts/pgcron.js.map +1 -0
- package/dist/adapters/postgresql/prompts/pgcrypto.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/pgcrypto.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/pgcrypto.js +299 -0
- package/dist/adapters/postgresql/prompts/pgcrypto.js.map +1 -0
- package/dist/adapters/postgresql/prompts/pgvector.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/pgvector.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/pgvector.js +148 -0
- package/dist/adapters/postgresql/prompts/pgvector.js.map +1 -0
- package/dist/adapters/postgresql/prompts/postgis.d.ts +8 -0
- package/dist/adapters/postgresql/prompts/postgis.d.ts.map +1 -0
- package/dist/adapters/postgresql/prompts/postgis.js +200 -0
- package/dist/adapters/postgresql/prompts/postgis.js.map +1 -0
- package/dist/adapters/postgresql/resources/activity.d.ts +9 -0
- package/dist/adapters/postgresql/resources/activity.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/activity.js +118 -0
- package/dist/adapters/postgresql/resources/activity.js.map +1 -0
- package/dist/adapters/postgresql/resources/capabilities.d.ts +9 -0
- package/dist/adapters/postgresql/resources/capabilities.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/capabilities.js +182 -0
- package/dist/adapters/postgresql/resources/capabilities.js.map +1 -0
- package/dist/adapters/postgresql/resources/cron.d.ts +9 -0
- package/dist/adapters/postgresql/resources/cron.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/cron.js +156 -0
- package/dist/adapters/postgresql/resources/cron.js.map +1 -0
- package/dist/adapters/postgresql/resources/crypto.d.ts +9 -0
- package/dist/adapters/postgresql/resources/crypto.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/crypto.js +191 -0
- package/dist/adapters/postgresql/resources/crypto.js.map +1 -0
- package/dist/adapters/postgresql/resources/extensions.d.ts +9 -0
- package/dist/adapters/postgresql/resources/extensions.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/extensions.js +85 -0
- package/dist/adapters/postgresql/resources/extensions.js.map +1 -0
- package/dist/adapters/postgresql/resources/health.d.ts +9 -0
- package/dist/adapters/postgresql/resources/health.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/health.js +185 -0
- package/dist/adapters/postgresql/resources/health.js.map +1 -0
- package/dist/adapters/postgresql/resources/index.d.ts +40 -0
- package/dist/adapters/postgresql/resources/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/index.js +87 -0
- package/dist/adapters/postgresql/resources/index.js.map +1 -0
- package/dist/adapters/postgresql/resources/indexes.d.ts +9 -0
- package/dist/adapters/postgresql/resources/indexes.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/indexes.js +130 -0
- package/dist/adapters/postgresql/resources/indexes.js.map +1 -0
- package/dist/adapters/postgresql/resources/kcache.d.ts +9 -0
- package/dist/adapters/postgresql/resources/kcache.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/kcache.js +219 -0
- package/dist/adapters/postgresql/resources/kcache.js.map +1 -0
- package/dist/adapters/postgresql/resources/locks.d.ts +9 -0
- package/dist/adapters/postgresql/resources/locks.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/locks.js +89 -0
- package/dist/adapters/postgresql/resources/locks.js.map +1 -0
- package/dist/adapters/postgresql/resources/partman.d.ts +9 -0
- package/dist/adapters/postgresql/resources/partman.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/partman.js +149 -0
- package/dist/adapters/postgresql/resources/partman.js.map +1 -0
- package/dist/adapters/postgresql/resources/performance.d.ts +9 -0
- package/dist/adapters/postgresql/resources/performance.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/performance.js +170 -0
- package/dist/adapters/postgresql/resources/performance.js.map +1 -0
- package/dist/adapters/postgresql/resources/pool.d.ts +9 -0
- package/dist/adapters/postgresql/resources/pool.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/pool.js +93 -0
- package/dist/adapters/postgresql/resources/pool.js.map +1 -0
- package/dist/adapters/postgresql/resources/postgis.d.ts +9 -0
- package/dist/adapters/postgresql/resources/postgis.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/postgis.js +232 -0
- package/dist/adapters/postgresql/resources/postgis.js.map +1 -0
- package/dist/adapters/postgresql/resources/replication.d.ts +9 -0
- package/dist/adapters/postgresql/resources/replication.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/replication.js +126 -0
- package/dist/adapters/postgresql/resources/replication.js.map +1 -0
- package/dist/adapters/postgresql/resources/schema.d.ts +10 -0
- package/dist/adapters/postgresql/resources/schema.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/schema.js +80 -0
- package/dist/adapters/postgresql/resources/schema.js.map +1 -0
- package/dist/adapters/postgresql/resources/settings.d.ts +9 -0
- package/dist/adapters/postgresql/resources/settings.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/settings.js +184 -0
- package/dist/adapters/postgresql/resources/settings.js.map +1 -0
- package/dist/adapters/postgresql/resources/stats.d.ts +10 -0
- package/dist/adapters/postgresql/resources/stats.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/stats.js +124 -0
- package/dist/adapters/postgresql/resources/stats.js.map +1 -0
- package/dist/adapters/postgresql/resources/tables.d.ts +9 -0
- package/dist/adapters/postgresql/resources/tables.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/tables.js +20 -0
- package/dist/adapters/postgresql/resources/tables.js.map +1 -0
- package/dist/adapters/postgresql/resources/vacuum.d.ts +9 -0
- package/dist/adapters/postgresql/resources/vacuum.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/vacuum.js +122 -0
- package/dist/adapters/postgresql/resources/vacuum.js.map +1 -0
- package/dist/adapters/postgresql/resources/vector.d.ts +9 -0
- package/dist/adapters/postgresql/resources/vector.d.ts.map +1 -0
- package/dist/adapters/postgresql/resources/vector.js +185 -0
- package/dist/adapters/postgresql/resources/vector.js.map +1 -0
- package/dist/adapters/postgresql/schemas/admin.d.ts +74 -0
- package/dist/adapters/postgresql/schemas/admin.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/admin.js +180 -0
- package/dist/adapters/postgresql/schemas/admin.js.map +1 -0
- package/dist/adapters/postgresql/schemas/backup.d.ts +68 -0
- package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/backup.js +114 -0
- package/dist/adapters/postgresql/schemas/backup.js.map +1 -0
- package/dist/adapters/postgresql/schemas/core.d.ts +443 -0
- package/dist/adapters/postgresql/schemas/core.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/core.js +628 -0
- package/dist/adapters/postgresql/schemas/core.js.map +1 -0
- package/dist/adapters/postgresql/schemas/cron.d.ts +131 -0
- package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/cron.js +218 -0
- package/dist/adapters/postgresql/schemas/cron.js.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions.d.ts +403 -0
- package/dist/adapters/postgresql/schemas/extensions.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions.js +600 -0
- package/dist/adapters/postgresql/schemas/extensions.js.map +1 -0
- package/dist/adapters/postgresql/schemas/index.d.ts +21 -0
- package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/index.js +72 -0
- package/dist/adapters/postgresql/schemas/index.js.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb.d.ts +94 -0
- package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb.js +198 -0
- package/dist/adapters/postgresql/schemas/jsonb.js.map +1 -0
- package/dist/adapters/postgresql/schemas/monitoring.d.ts +28 -0
- package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/monitoring.js +45 -0
- package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -0
- package/dist/adapters/postgresql/schemas/partitioning.d.ts +152 -0
- package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/partitioning.js +399 -0
- package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -0
- package/dist/adapters/postgresql/schemas/partman.d.ts +94 -0
- package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/partman.js +264 -0
- package/dist/adapters/postgresql/schemas/partman.js.map +1 -0
- package/dist/adapters/postgresql/schemas/performance.d.ts +52 -0
- package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/performance.js +57 -0
- package/dist/adapters/postgresql/schemas/performance.js.map +1 -0
- package/dist/adapters/postgresql/schemas/postgis.d.ts +693 -0
- package/dist/adapters/postgresql/schemas/postgis.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/postgis.js +662 -0
- package/dist/adapters/postgresql/schemas/postgis.js.map +1 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +171 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.js +235 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -0
- package/dist/adapters/postgresql/schemas/stats.d.ts +229 -0
- package/dist/adapters/postgresql/schemas/stats.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/stats.js +587 -0
- package/dist/adapters/postgresql/schemas/stats.js.map +1 -0
- package/dist/adapters/postgresql/schemas/text-search.d.ts +83 -0
- package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/text-search.js +132 -0
- package/dist/adapters/postgresql/schemas/text-search.js.map +1 -0
- package/dist/adapters/postgresql/schemas/vector.d.ts +143 -0
- package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/vector.js +123 -0
- package/dist/adapters/postgresql/schemas/vector.js.map +1 -0
- package/dist/adapters/postgresql/tools/admin.d.ts +13 -0
- package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/admin.js +417 -0
- package/dist/adapters/postgresql/tools/admin.js.map +1 -0
- package/dist/adapters/postgresql/tools/backup/dump.d.ts +12 -0
- package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/backup/dump.js +546 -0
- package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -0
- package/dist/adapters/postgresql/tools/backup/index.d.ts +16 -0
- package/dist/adapters/postgresql/tools/backup/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/backup/index.js +29 -0
- package/dist/adapters/postgresql/tools/backup/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/backup/planning.d.ts +22 -0
- package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/backup/planning.js +411 -0
- package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -0
- package/dist/adapters/postgresql/tools/citext.d.ts +18 -0
- package/dist/adapters/postgresql/tools/citext.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/citext.js +568 -0
- package/dist/adapters/postgresql/tools/citext.js.map +1 -0
- package/dist/adapters/postgresql/tools/codemode/index.d.ts +27 -0
- package/dist/adapters/postgresql/tools/codemode/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/codemode/index.js +171 -0
- package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/convenience.d.ts +192 -0
- package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/convenience.js +617 -0
- package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/health.d.ts +20 -0
- package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/health.js +360 -0
- package/dist/adapters/postgresql/tools/core/health.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/index.d.ts +15 -0
- package/dist/adapters/postgresql/tools/core/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/index.js +40 -0
- package/dist/adapters/postgresql/tools/core/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/indexes.d.ts +30 -0
- package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/indexes.js +232 -0
- package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/objects.d.ts +20 -0
- package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/objects.js +361 -0
- package/dist/adapters/postgresql/tools/core/objects.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/query.d.ts +16 -0
- package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/query.js +87 -0
- package/dist/adapters/postgresql/tools/core/query.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/schemas.d.ts +135 -0
- package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/schemas.js +221 -0
- package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -0
- package/dist/adapters/postgresql/tools/core/tables.d.ts +24 -0
- package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/tables.js +219 -0
- package/dist/adapters/postgresql/tools/core/tables.js.map +1 -0
- package/dist/adapters/postgresql/tools/cron.d.ts +16 -0
- package/dist/adapters/postgresql/tools/cron.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/cron.js +440 -0
- package/dist/adapters/postgresql/tools/cron.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts +33 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.js +681 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/basic.d.ts +20 -0
- package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/basic.js +654 -0
- package/dist/adapters/postgresql/tools/jsonb/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/index.d.ts +16 -0
- package/dist/adapters/postgresql/tools/jsonb/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/index.js +39 -0
- package/dist/adapters/postgresql/tools/jsonb/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/kcache.d.ts +20 -0
- package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/kcache.js +574 -0
- package/dist/adapters/postgresql/tools/kcache.js.map +1 -0
- package/dist/adapters/postgresql/tools/ltree.d.ts +8 -0
- package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/ltree.js +390 -0
- package/dist/adapters/postgresql/tools/ltree.js.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring.d.ts +13 -0
- package/dist/adapters/postgresql/tools/monitoring.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring.js +753 -0
- package/dist/adapters/postgresql/tools/monitoring.js.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning.d.ts +13 -0
- package/dist/adapters/postgresql/tools/partitioning.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning.js +500 -0
- package/dist/adapters/postgresql/tools/partitioning.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/index.d.ts +19 -0
- package/dist/adapters/postgresql/tools/partman/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partman/index.js +33 -0
- package/dist/adapters/postgresql/tools/partman/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/management.d.ts +28 -0
- package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partman/management.js +563 -0
- package/dist/adapters/postgresql/tools/partman/management.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/operations.d.ts +28 -0
- package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partman/operations.js +632 -0
- package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/analysis.d.ts +9 -0
- package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/analysis.js +383 -0
- package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/explain.d.ts +13 -0
- package/dist/adapters/postgresql/tools/performance/explain.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/explain.js +71 -0
- package/dist/adapters/postgresql/tools/performance/explain.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/index.d.ts +13 -0
- package/dist/adapters/postgresql/tools/performance/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/index.js +40 -0
- package/dist/adapters/postgresql/tools/performance/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/monitoring.d.ts +9 -0
- package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/monitoring.js +122 -0
- package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/optimization.d.ts +9 -0
- package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/optimization.js +315 -0
- package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/stats.d.ts +14 -0
- package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/stats.js +559 -0
- package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -0
- package/dist/adapters/postgresql/tools/pgcrypto.d.ts +8 -0
- package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/pgcrypto.js +239 -0
- package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/advanced.d.ts +21 -0
- package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/advanced.js +383 -0
- package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/basic.d.ts +16 -0
- package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/basic.js +479 -0
- package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/index.d.ts +17 -0
- package/dist/adapters/postgresql/tools/postgis/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/index.js +46 -0
- package/dist/adapters/postgresql/tools/postgis/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/standalone.d.ts +21 -0
- package/dist/adapters/postgresql/tools/postgis/standalone.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/postgis/standalone.js +150 -0
- package/dist/adapters/postgresql/tools/postgis/standalone.js.map +1 -0
- package/dist/adapters/postgresql/tools/schema.d.ts +13 -0
- package/dist/adapters/postgresql/tools/schema.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/schema.js +515 -0
- package/dist/adapters/postgresql/tools/schema.js.map +1 -0
- package/dist/adapters/postgresql/tools/stats/advanced.d.ts +24 -0
- package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/stats/advanced.js +876 -0
- package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -0
- package/dist/adapters/postgresql/tools/stats/basic.d.ts +24 -0
- package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/stats/basic.js +501 -0
- package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/stats/index.d.ts +17 -0
- package/dist/adapters/postgresql/tools/stats/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/stats/index.js +30 -0
- package/dist/adapters/postgresql/tools/stats/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/text.d.ts +13 -0
- package/dist/adapters/postgresql/tools/text.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/text.js +708 -0
- package/dist/adapters/postgresql/tools/text.js.map +1 -0
- package/dist/adapters/postgresql/tools/transactions.d.ts +13 -0
- package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/transactions.js +201 -0
- package/dist/adapters/postgresql/tools/transactions.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/advanced.d.ts +12 -0
- package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/advanced.js +902 -0
- package/dist/adapters/postgresql/tools/vector/advanced.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/basic.d.ts +25 -0
- package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/basic.js +1000 -0
- package/dist/adapters/postgresql/tools/vector/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/index.d.ts +13 -0
- package/dist/adapters/postgresql/tools/vector/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/index.js +33 -0
- package/dist/adapters/postgresql/tools/vector/index.js.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts +44 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.js +117 -0
- package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
- package/dist/auth/OAuthResourceServer.d.ts +42 -0
- package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
- package/dist/auth/OAuthResourceServer.js +80 -0
- package/dist/auth/OAuthResourceServer.js.map +1 -0
- package/dist/auth/TokenValidator.d.ts +36 -0
- package/dist/auth/TokenValidator.d.ts.map +1 -0
- package/dist/auth/TokenValidator.js +139 -0
- package/dist/auth/TokenValidator.js.map +1 -0
- package/dist/auth/errors.d.ts +63 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +102 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/index.d.ts +15 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +16 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +61 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +156 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/scopes.d.ts +65 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +189 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/auth/types.d.ts +208 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/args.d.ts +34 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +308 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +341 -0
- package/dist/cli.js.map +1 -0
- package/dist/codemode/api.d.ts +62 -0
- package/dist/codemode/api.d.ts.map +1 -0
- package/dist/codemode/api.js +1505 -0
- package/dist/codemode/api.js.map +1 -0
- package/dist/codemode/index.d.ts +13 -0
- package/dist/codemode/index.d.ts.map +1 -0
- package/dist/codemode/index.js +17 -0
- package/dist/codemode/index.js.map +1 -0
- package/dist/codemode/sandbox-factory.d.ts +72 -0
- package/dist/codemode/sandbox-factory.d.ts.map +1 -0
- package/dist/codemode/sandbox-factory.js +88 -0
- package/dist/codemode/sandbox-factory.js.map +1 -0
- package/dist/codemode/sandbox.d.ts +96 -0
- package/dist/codemode/sandbox.d.ts.map +1 -0
- package/dist/codemode/sandbox.js +345 -0
- package/dist/codemode/sandbox.js.map +1 -0
- package/dist/codemode/security.d.ts +44 -0
- package/dist/codemode/security.d.ts.map +1 -0
- package/dist/codemode/security.js +149 -0
- package/dist/codemode/security.js.map +1 -0
- package/dist/codemode/types.d.ts +137 -0
- package/dist/codemode/types.d.ts.map +1 -0
- package/dist/codemode/types.js +46 -0
- package/dist/codemode/types.js.map +1 -0
- package/dist/codemode/worker-sandbox.d.ts +82 -0
- package/dist/codemode/worker-sandbox.d.ts.map +1 -0
- package/dist/codemode/worker-sandbox.js +244 -0
- package/dist/codemode/worker-sandbox.js.map +1 -0
- package/dist/codemode/worker-script.d.ts +8 -0
- package/dist/codemode/worker-script.d.ts.map +1 -0
- package/dist/codemode/worker-script.js +113 -0
- package/dist/codemode/worker-script.js.map +1 -0
- package/dist/constants/ServerInstructions.d.ts +13 -0
- package/dist/constants/ServerInstructions.d.ts.map +1 -0
- package/dist/constants/ServerInstructions.js +405 -0
- package/dist/constants/ServerInstructions.js.map +1 -0
- package/dist/filtering/ToolConstants.d.ts +43 -0
- package/dist/filtering/ToolConstants.d.ts.map +1 -0
- package/dist/filtering/ToolConstants.js +352 -0
- package/dist/filtering/ToolConstants.js.map +1 -0
- package/dist/filtering/ToolFilter.d.ts +90 -0
- package/dist/filtering/ToolFilter.d.ts.map +1 -0
- package/dist/filtering/ToolFilter.js +315 -0
- package/dist/filtering/ToolFilter.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/pool/ConnectionPool.d.ts +70 -0
- package/dist/pool/ConnectionPool.d.ts.map +1 -0
- package/dist/pool/ConnectionPool.js +254 -0
- package/dist/pool/ConnectionPool.js.map +1 -0
- package/dist/server/McpServer.d.ts +50 -0
- package/dist/server/McpServer.d.ts.map +1 -0
- package/dist/server/McpServer.js +108 -0
- package/dist/server/McpServer.js.map +1 -0
- package/dist/transports/http.d.ts +126 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +303 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +8 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +7 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/adapters.d.ts +136 -0
- package/dist/types/adapters.d.ts.map +1 -0
- package/dist/types/adapters.js +7 -0
- package/dist/types/adapters.js.map +1 -0
- package/dist/types/database.d.ts +204 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/database.js +7 -0
- package/dist/types/database.js.map +1 -0
- package/dist/types/errors.d.ts +62 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +91 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/filtering.d.ts +39 -0
- package/dist/types/filtering.d.ts.map +1 -0
- package/dist/types/filtering.js +7 -0
- package/dist/types/filtering.js.map +1 -0
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.d.ts +31 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +7 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/oauth.d.ts +65 -0
- package/dist/types/oauth.d.ts.map +1 -0
- package/dist/types/oauth.js +7 -0
- package/dist/types/oauth.js.map +1 -0
- package/dist/types/schema.d.ts +110 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +7 -0
- package/dist/types/schema.js.map +1 -0
- package/dist/utils/annotations.d.ts +42 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/annotations.js +75 -0
- package/dist/utils/annotations.js.map +1 -0
- package/dist/utils/icons.d.ts +25 -0
- package/dist/utils/icons.d.ts.map +1 -0
- package/dist/utils/icons.js +212 -0
- package/dist/utils/icons.js.map +1 -0
- package/dist/utils/identifiers.d.ts +111 -0
- package/dist/utils/identifiers.d.ts.map +1 -0
- package/dist/utils/identifiers.js +270 -0
- package/dist/utils/identifiers.js.map +1 -0
- package/dist/utils/logger.d.ts +141 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +304 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/promptGenerator.d.ts +20 -0
- package/dist/utils/promptGenerator.d.ts.map +1 -0
- package/dist/utils/promptGenerator.js +81 -0
- package/dist/utils/promptGenerator.js.map +1 -0
- package/dist/utils/resourceAnnotations.d.ts +36 -0
- package/dist/utils/resourceAnnotations.d.ts.map +1 -0
- package/dist/utils/resourceAnnotations.js +57 -0
- package/dist/utils/resourceAnnotations.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pgcrypto Status Resource
|
|
3
|
+
*
|
|
4
|
+
* Provides pgcrypto extension availability and usage information.
|
|
5
|
+
*/
|
|
6
|
+
import { LOW_PRIORITY } from "../../../utils/resourceAnnotations.js";
|
|
7
|
+
/** Safely convert unknown value to string */
|
|
8
|
+
function toStr(value) {
|
|
9
|
+
return typeof value === "string" ? value : "";
|
|
10
|
+
}
|
|
11
|
+
export function createCryptoResource(adapter) {
|
|
12
|
+
return {
|
|
13
|
+
uri: "postgres://crypto",
|
|
14
|
+
name: "pgcrypto Status",
|
|
15
|
+
description: "pgcrypto extension availability, algorithms, and security recommendations",
|
|
16
|
+
mimeType: "application/json",
|
|
17
|
+
annotations: LOW_PRIORITY,
|
|
18
|
+
handler: async () => {
|
|
19
|
+
const result = {
|
|
20
|
+
extensionInstalled: false,
|
|
21
|
+
extensionVersion: null,
|
|
22
|
+
availableAlgorithms: {
|
|
23
|
+
hashing: { secure: [], legacy: [] },
|
|
24
|
+
hmac: [],
|
|
25
|
+
encryption: [],
|
|
26
|
+
},
|
|
27
|
+
securityNotes: null,
|
|
28
|
+
uuid: {
|
|
29
|
+
genRandomUuidAvailable: false,
|
|
30
|
+
uuidColumns: [],
|
|
31
|
+
},
|
|
32
|
+
passwordHashing: {
|
|
33
|
+
status: "not_checked",
|
|
34
|
+
detectedColumns: [],
|
|
35
|
+
},
|
|
36
|
+
encryptedColumns: [],
|
|
37
|
+
recommendations: [],
|
|
38
|
+
};
|
|
39
|
+
// Check if pgcrypto is installed (outside try-catch for correct error messaging)
|
|
40
|
+
const extCheck = await adapter.executeQuery(`SELECT extversion FROM pg_extension WHERE extname = 'pgcrypto'`);
|
|
41
|
+
if (!extCheck.rows || extCheck.rows.length === 0) {
|
|
42
|
+
result.recommendations.push("pgcrypto extension is not installed. Use pg_pgcrypto_create_extension to enable cryptographic functions.");
|
|
43
|
+
return JSON.stringify(result, null, 2);
|
|
44
|
+
}
|
|
45
|
+
result.extensionInstalled = true;
|
|
46
|
+
const extVersion = extCheck.rows[0]?.["extversion"];
|
|
47
|
+
result.extensionVersion =
|
|
48
|
+
typeof extVersion === "string" ? extVersion : null;
|
|
49
|
+
// Set available algorithms (these are built into pgcrypto)
|
|
50
|
+
// Categorize by security status to avoid conflating "exists" with "recommended"
|
|
51
|
+
result.availableAlgorithms = {
|
|
52
|
+
hashing: {
|
|
53
|
+
secure: ["sha256", "sha384", "sha512"],
|
|
54
|
+
legacy: ["md5", "sha1", "sha224"], // Available but not recommended for security
|
|
55
|
+
},
|
|
56
|
+
hmac: ["md5", "sha1", "sha256", "sha384", "sha512"],
|
|
57
|
+
encryption: ["bf", "aes128", "aes192", "aes256", "3des", "cast5"],
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
// Check if gen_random_uuid is available (can be from pgcrypto or PostgreSQL 13+)
|
|
61
|
+
try {
|
|
62
|
+
await adapter.executeQuery(`SELECT gen_random_uuid()`);
|
|
63
|
+
result.uuid.genRandomUuidAvailable = true;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
result.uuid.genRandomUuidAvailable = false;
|
|
67
|
+
}
|
|
68
|
+
// Find UUID columns
|
|
69
|
+
const uuidResult = await adapter.executeQuery(`SELECT
|
|
70
|
+
n.nspname as schema_name,
|
|
71
|
+
c.relname as table_name,
|
|
72
|
+
a.attname as column_name,
|
|
73
|
+
d.adbin IS NOT NULL as has_default
|
|
74
|
+
FROM pg_attribute a
|
|
75
|
+
JOIN pg_class c ON a.attrelid = c.oid
|
|
76
|
+
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
77
|
+
JOIN pg_type t ON a.atttypid = t.oid
|
|
78
|
+
LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = a.attnum
|
|
79
|
+
WHERE t.typname = 'uuid'
|
|
80
|
+
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
81
|
+
AND a.attnum > 0
|
|
82
|
+
AND NOT a.attisdropped
|
|
83
|
+
ORDER BY n.nspname, c.relname, a.attname`);
|
|
84
|
+
if (uuidResult.rows) {
|
|
85
|
+
for (const row of uuidResult.rows) {
|
|
86
|
+
result.uuid.uuidColumns.push({
|
|
87
|
+
schema: toStr(row["schema_name"]),
|
|
88
|
+
table: toStr(row["table_name"]),
|
|
89
|
+
column: toStr(row["column_name"]),
|
|
90
|
+
hasDefault: Boolean(row["has_default"]),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Detect password hashing (columns with names like password_hash, pwd_hash, etc.)
|
|
95
|
+
const pwdHashResult = await adapter.executeQuery(`SELECT n.nspname as schema_name, c.relname as table_name, a.attname as column_name
|
|
96
|
+
FROM pg_attribute a
|
|
97
|
+
JOIN pg_class c ON a.attrelid = c.oid
|
|
98
|
+
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
99
|
+
WHERE (
|
|
100
|
+
a.attname ILIKE '%password%hash%' OR
|
|
101
|
+
a.attname ILIKE '%pwd%hash%' OR
|
|
102
|
+
a.attname ILIKE '%pass%hash%' OR
|
|
103
|
+
a.attname = 'password_digest' OR
|
|
104
|
+
a.attname = 'encrypted_password'
|
|
105
|
+
)
|
|
106
|
+
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
107
|
+
AND a.attnum > 0
|
|
108
|
+
AND NOT a.attisdropped
|
|
109
|
+
LIMIT 20`);
|
|
110
|
+
if (pwdHashResult.rows && pwdHashResult.rows.length > 0) {
|
|
111
|
+
result.passwordHashing.status = "detected";
|
|
112
|
+
for (const row of pwdHashResult.rows) {
|
|
113
|
+
result.passwordHashing.detectedColumns.push({
|
|
114
|
+
schema: toStr(row["schema_name"]),
|
|
115
|
+
table: toStr(row["table_name"]),
|
|
116
|
+
column: toStr(row["column_name"]),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
result.passwordHashing.status = "none_found";
|
|
122
|
+
}
|
|
123
|
+
// Find potential encrypted columns (bytea columns that might contain encrypted data)
|
|
124
|
+
const byteaResult = await adapter.executeQuery(`SELECT
|
|
125
|
+
n.nspname as schema_name,
|
|
126
|
+
c.relname as table_name,
|
|
127
|
+
a.attname as column_name
|
|
128
|
+
FROM pg_attribute a
|
|
129
|
+
JOIN pg_class c ON a.attrelid = c.oid
|
|
130
|
+
JOIN pg_namespace n ON c.relnamespace = n.oid
|
|
131
|
+
JOIN pg_type t ON a.atttypid = t.oid
|
|
132
|
+
WHERE t.typname = 'bytea'
|
|
133
|
+
AND (
|
|
134
|
+
a.attname ILIKE '%encrypt%' OR
|
|
135
|
+
a.attname ILIKE '%secret%' OR
|
|
136
|
+
a.attname ILIKE '%secure%' OR
|
|
137
|
+
a.attname ILIKE '%cipher%'
|
|
138
|
+
)
|
|
139
|
+
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
140
|
+
AND a.attnum > 0
|
|
141
|
+
AND NOT a.attisdropped
|
|
142
|
+
ORDER BY n.nspname, c.relname, a.attname
|
|
143
|
+
LIMIT 20`);
|
|
144
|
+
if (byteaResult.rows) {
|
|
145
|
+
for (const row of byteaResult.rows) {
|
|
146
|
+
result.encryptedColumns.push({
|
|
147
|
+
schema: toStr(row["schema_name"]),
|
|
148
|
+
table: toStr(row["table_name"]),
|
|
149
|
+
column: toStr(row["column_name"]),
|
|
150
|
+
byteaType: true,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Generate recommendations
|
|
155
|
+
if (!result.uuid.genRandomUuidAvailable) {
|
|
156
|
+
result.recommendations.push("gen_random_uuid() not available. Upgrade PostgreSQL to 13+ or ensure pgcrypto is properly installed.");
|
|
157
|
+
}
|
|
158
|
+
const uuidColumnsWithoutDefault = result.uuid.uuidColumns.filter((c) => !c.hasDefault);
|
|
159
|
+
if (uuidColumnsWithoutDefault.length > 0) {
|
|
160
|
+
result.recommendations.push(`${String(uuidColumnsWithoutDefault.length)} UUID columns without default. Consider adding DEFAULT gen_random_uuid().`);
|
|
161
|
+
}
|
|
162
|
+
if (result.passwordHashing.status === "none_found") {
|
|
163
|
+
result.recommendations.push("No password hash columns detected. For auth systems, use crypt() + gen_salt('bf') for secure password storage.");
|
|
164
|
+
}
|
|
165
|
+
// Set security notes (informational, not warnings)
|
|
166
|
+
// These describe capabilities and best practices, not active issues
|
|
167
|
+
const passwordHashingNote = result.passwordHashing.status === "detected"
|
|
168
|
+
? "Password hash columns detected. Verify bcrypt (gen_salt('bf')) or SCRAM-SHA-256 is used for storage."
|
|
169
|
+
: null;
|
|
170
|
+
result.securityNotes = passwordHashingNote
|
|
171
|
+
? {
|
|
172
|
+
legacyAlgorithms: "MD5 and SHA-1 are available for compatibility but not recommended for security-sensitive hashing. Use SHA-256+ or bcrypt for new applications.",
|
|
173
|
+
passwordHashing: passwordHashingNote,
|
|
174
|
+
}
|
|
175
|
+
: {
|
|
176
|
+
legacyAlgorithms: "MD5 and SHA-1 are available for compatibility but not recommended for security-sensitive hashing. Use SHA-256+ or bcrypt for new applications.",
|
|
177
|
+
};
|
|
178
|
+
// Only add security best practices as a recommendation if no password columns detected
|
|
179
|
+
if (result.passwordHashing.status === "none_found") {
|
|
180
|
+
result.recommendations.push("Security best practices: Use bcrypt (gen_salt('bf')) for passwords, SHA-256+ for data integrity, AES-256 for encryption.");
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Extension is installed but data queries failed
|
|
185
|
+
result.recommendations.push("Error querying pgcrypto data. Check permissions.");
|
|
186
|
+
}
|
|
187
|
+
return JSON.stringify(result, null, 2);
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extensions Resource
|
|
3
|
+
*
|
|
4
|
+
* Extension inventory with versions and installation recommendations.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createExtensionsResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=extensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/extensions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAUjC,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CAwFpB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extensions Resource
|
|
3
|
+
*
|
|
4
|
+
* Extension inventory with versions and installation recommendations.
|
|
5
|
+
*/
|
|
6
|
+
import { LOW_PRIORITY } from "../../../utils/resourceAnnotations.js";
|
|
7
|
+
export function createExtensionsResource(adapter) {
|
|
8
|
+
return {
|
|
9
|
+
uri: "postgres://extensions",
|
|
10
|
+
name: "Extensions Info",
|
|
11
|
+
description: "Installed extensions with versions and installation recommendations",
|
|
12
|
+
mimeType: "application/json",
|
|
13
|
+
annotations: LOW_PRIORITY,
|
|
14
|
+
handler: async (_uri, _context) => {
|
|
15
|
+
// Get installed extensions
|
|
16
|
+
const installedResult = await adapter.executeQuery(`
|
|
17
|
+
SELECT
|
|
18
|
+
e.extname,
|
|
19
|
+
e.extversion,
|
|
20
|
+
e.extrelocatable,
|
|
21
|
+
n.nspname as schema,
|
|
22
|
+
d.description
|
|
23
|
+
FROM pg_extension e
|
|
24
|
+
LEFT JOIN pg_namespace n ON e.extnamespace = n.oid
|
|
25
|
+
LEFT JOIN pg_description d ON d.objoid = e.oid
|
|
26
|
+
ORDER BY e.extname
|
|
27
|
+
`);
|
|
28
|
+
const installed = installedResult.rows ?? [];
|
|
29
|
+
const installedNames = installed.map((e) => e["extname"]);
|
|
30
|
+
// Get available but not installed extensions
|
|
31
|
+
const availableResult = await adapter.executeQuery(`
|
|
32
|
+
SELECT name, default_version, comment
|
|
33
|
+
FROM pg_available_extensions
|
|
34
|
+
WHERE name NOT IN (SELECT extname FROM pg_extension)
|
|
35
|
+
AND name IN ('hypopg', 'pg_stat_statements', 'vector', 'postgis', 'pg_trgm', 'fuzzystrmatch')
|
|
36
|
+
ORDER BY name
|
|
37
|
+
`);
|
|
38
|
+
const available = availableResult.rows ?? [];
|
|
39
|
+
// Generate recommendations
|
|
40
|
+
const recommendations = [];
|
|
41
|
+
const criticalExtensions = ["pg_stat_statements", "hypopg"];
|
|
42
|
+
const optionalExtensions = [
|
|
43
|
+
"vector",
|
|
44
|
+
"postgis",
|
|
45
|
+
"pg_trgm",
|
|
46
|
+
"fuzzystrmatch",
|
|
47
|
+
];
|
|
48
|
+
for (const extName of criticalExtensions) {
|
|
49
|
+
if (!installedNames.includes(extName)) {
|
|
50
|
+
recommendations.push({
|
|
51
|
+
extension: extName,
|
|
52
|
+
priority: "HIGH",
|
|
53
|
+
sql: `CREATE EXTENSION IF NOT EXISTS ${extName};`,
|
|
54
|
+
reason: extName === "pg_stat_statements"
|
|
55
|
+
? "Critical for performance monitoring"
|
|
56
|
+
: "Enables risk-free index testing",
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const reasonMap = {
|
|
61
|
+
vector: "Enables AI-native semantic search",
|
|
62
|
+
postgis: "Enables geospatial operations",
|
|
63
|
+
pg_trgm: "Enables fuzzy text search",
|
|
64
|
+
fuzzystrmatch: "Enables phonetic matching",
|
|
65
|
+
};
|
|
66
|
+
for (const extName of optionalExtensions) {
|
|
67
|
+
if (!installedNames.includes(extName)) {
|
|
68
|
+
recommendations.push({
|
|
69
|
+
extension: extName,
|
|
70
|
+
priority: "OPTIONAL",
|
|
71
|
+
sql: `CREATE EXTENSION IF NOT EXISTS ${extName};`,
|
|
72
|
+
reason: reasonMap[extName] ?? "Adds useful functionality",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
installedCount: installed.length,
|
|
78
|
+
installedExtensions: installed,
|
|
79
|
+
availableExtensions: available,
|
|
80
|
+
recommendations,
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=extensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/extensions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AASrE,MAAM,UAAU,wBAAwB,CACtC,OAAwB;IAExB,OAAO;QACL,GAAG,EAAE,uBAAuB;QAC5B,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,qEAAqE;QACvE,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,QAAwB,EAAE,EAAE;YACxD,2BAA2B;YAC3B,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;;;;;;;;;;;aAW5C,CAAC,CAAC;YACT,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAClC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAW,CACvD,CAAC;YAEF,6CAA6C;YAC7C,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;;;;;;aAM5C,CAAC,CAAC;YACT,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC;YAE7C,2BAA2B;YAC3B,MAAM,eAAe,GAA8B,EAAE,CAAC;YAEtD,MAAM,kBAAkB,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;YAC5D,MAAM,kBAAkB,GAAG;gBACzB,QAAQ;gBACR,SAAS;gBACT,SAAS;gBACT,eAAe;aAChB,CAAC;YAEF,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;gBACzC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,eAAe,CAAC,IAAI,CAAC;wBACnB,SAAS,EAAE,OAAO;wBAClB,QAAQ,EAAE,MAAM;wBAChB,GAAG,EAAE,kCAAkC,OAAO,GAAG;wBACjD,MAAM,EACJ,OAAO,KAAK,oBAAoB;4BAC9B,CAAC,CAAC,qCAAqC;4BACvC,CAAC,CAAC,iCAAiC;qBACxC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAA2B;gBACxC,MAAM,EAAE,mCAAmC;gBAC3C,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE,2BAA2B;gBACpC,aAAa,EAAE,2BAA2B;aAC3C,CAAC;YAEF,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;gBACzC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,eAAe,CAAC,IAAI,CAAC;wBACnB,SAAS,EAAE,OAAO;wBAClB,QAAQ,EAAE,UAAU;wBACpB,GAAG,EAAE,kCAAkC,OAAO,GAAG;wBACjD,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,2BAA2B;qBAC1D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO;gBACL,cAAc,EAAE,SAAS,CAAC,MAAM;gBAChC,mBAAmB,EAAE,SAAS;gBAC9B,mBAAmB,EAAE,SAAS;gBAC9B,eAAe;aAChB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Resource
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive database health status.
|
|
5
|
+
*/
|
|
6
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
7
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
8
|
+
export declare function createHealthResource(adapter: PostgresAdapter): ResourceDefinition;
|
|
9
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/health.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AASjC,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,GACvB,kBAAkB,CAiNpB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Resource
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive database health status.
|
|
5
|
+
*/
|
|
6
|
+
import { HIGH_PRIORITY } from "../../../utils/resourceAnnotations.js";
|
|
7
|
+
export function createHealthResource(adapter) {
|
|
8
|
+
return {
|
|
9
|
+
uri: "postgres://health",
|
|
10
|
+
name: "Database Health",
|
|
11
|
+
description: "Comprehensive database health status across multiple dimensions",
|
|
12
|
+
mimeType: "application/json",
|
|
13
|
+
annotations: HIGH_PRIORITY,
|
|
14
|
+
handler: async (_uri, _context) => {
|
|
15
|
+
const checks = {};
|
|
16
|
+
// Execute all health checks in parallel for better performance
|
|
17
|
+
const [connResult, cacheResult, vacuumResult, wraparoundResult, longQueryResult,] = await Promise.all([
|
|
18
|
+
// 1. Connection health
|
|
19
|
+
adapter.executeQuery(`
|
|
20
|
+
SELECT
|
|
21
|
+
count(*) as active_connections,
|
|
22
|
+
(SELECT setting::int FROM pg_settings WHERE name = 'max_connections') as max_connections
|
|
23
|
+
FROM pg_stat_activity
|
|
24
|
+
WHERE state IS NOT NULL
|
|
25
|
+
`),
|
|
26
|
+
// 2. Cache health
|
|
27
|
+
adapter.executeQuery(`
|
|
28
|
+
SELECT
|
|
29
|
+
sum(heap_blks_read) as heap_read,
|
|
30
|
+
sum(heap_blks_hit) as heap_hit,
|
|
31
|
+
CASE WHEN sum(heap_blks_read) + sum(heap_blks_hit) > 0
|
|
32
|
+
THEN round(100.0 * sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)), 2)
|
|
33
|
+
ELSE 100
|
|
34
|
+
END as cache_hit_ratio
|
|
35
|
+
FROM pg_statio_user_tables
|
|
36
|
+
`),
|
|
37
|
+
// 3. Dead tuples (vacuum health)
|
|
38
|
+
adapter.executeQuery(`
|
|
39
|
+
SELECT
|
|
40
|
+
SUM(n_dead_tup) as total_dead,
|
|
41
|
+
SUM(n_live_tup) as total_live,
|
|
42
|
+
CASE WHEN SUM(n_live_tup) > 0
|
|
43
|
+
THEN round(100.0 * SUM(n_dead_tup) / SUM(n_live_tup), 2)
|
|
44
|
+
ELSE 0
|
|
45
|
+
END as dead_pct
|
|
46
|
+
FROM pg_stat_user_tables
|
|
47
|
+
`),
|
|
48
|
+
// 4. Transaction ID wraparound
|
|
49
|
+
adapter.executeQuery(`
|
|
50
|
+
SELECT
|
|
51
|
+
age(datfrozenxid) as xid_age,
|
|
52
|
+
round(100.0 * age(datfrozenxid) / 2147483648, 2) as percent_toward_wraparound
|
|
53
|
+
FROM pg_database
|
|
54
|
+
WHERE datname = current_database()
|
|
55
|
+
`),
|
|
56
|
+
// 5. Long-running queries
|
|
57
|
+
adapter.executeQuery(`
|
|
58
|
+
SELECT COUNT(*) as count
|
|
59
|
+
FROM pg_stat_activity
|
|
60
|
+
WHERE state = 'active'
|
|
61
|
+
AND query NOT LIKE '%pg_stat_activity%'
|
|
62
|
+
AND now() - query_start > interval '5 minutes'
|
|
63
|
+
`),
|
|
64
|
+
]);
|
|
65
|
+
// Process connection health
|
|
66
|
+
const connRow = connResult.rows?.[0];
|
|
67
|
+
const activeConns = Number(connRow?.["active_connections"] ?? 0);
|
|
68
|
+
const maxConns = Number(connRow?.["max_connections"] ?? 100);
|
|
69
|
+
const connPct = (activeConns / maxConns) * 100;
|
|
70
|
+
checks["connections"] = {
|
|
71
|
+
status: connPct > 80 ? "critical" : connPct > 60 ? "warning" : "healthy",
|
|
72
|
+
message: activeConns.toString() +
|
|
73
|
+
"/" +
|
|
74
|
+
maxConns.toString() +
|
|
75
|
+
" connections (" +
|
|
76
|
+
connPct.toFixed(1) +
|
|
77
|
+
"%)",
|
|
78
|
+
details: { active: activeConns, max: maxConns, percentage: connPct },
|
|
79
|
+
};
|
|
80
|
+
// Process cache health with cold cache detection
|
|
81
|
+
const cacheRow = cacheResult.rows?.[0];
|
|
82
|
+
const cacheRatio = Number(cacheRow?.["cache_hit_ratio"] ?? 100);
|
|
83
|
+
const totalBlocks = Number(cacheRow?.["heap_read"] ?? 0) +
|
|
84
|
+
Number(cacheRow?.["heap_hit"] ?? 0);
|
|
85
|
+
const isColdCache = totalBlocks < 1000; // Very little I/O activity indicates cold cache
|
|
86
|
+
// Don't warn about cache ratio for cold caches - insufficient data for meaningful metric
|
|
87
|
+
const cacheStatus = isColdCache
|
|
88
|
+
? "healthy"
|
|
89
|
+
: cacheRatio < 90
|
|
90
|
+
? "critical"
|
|
91
|
+
: cacheRatio < 95
|
|
92
|
+
? "warning"
|
|
93
|
+
: "healthy";
|
|
94
|
+
checks["cache"] = {
|
|
95
|
+
status: cacheStatus,
|
|
96
|
+
message: isColdCache
|
|
97
|
+
? `${cacheRatio.toString()}% cache hit ratio (cold cache - limited data)`
|
|
98
|
+
: `${cacheRatio.toString()}% cache hit ratio`,
|
|
99
|
+
details: {
|
|
100
|
+
cacheHitRatio: cacheRatio,
|
|
101
|
+
totalBlocks,
|
|
102
|
+
context: isColdCache
|
|
103
|
+
? "Cold cache - insufficient I/O activity for meaningful ratio. Normal for new/test databases."
|
|
104
|
+
: undefined,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
// Process vacuum health - check both aggregate AND per-table stats
|
|
108
|
+
const deadPct = Number(vacuumResult.rows?.[0]?.["dead_pct"] ?? 0);
|
|
109
|
+
// Query individual tables needing attention (>20% dead tuples)
|
|
110
|
+
let tablesNeedingAttention = 0;
|
|
111
|
+
try {
|
|
112
|
+
const perTableResult = await adapter.executeQuery(`
|
|
113
|
+
SELECT COUNT(*) as count
|
|
114
|
+
FROM pg_stat_user_tables
|
|
115
|
+
WHERE n_live_tup > 0
|
|
116
|
+
AND (100.0 * n_dead_tup / n_live_tup) > 20
|
|
117
|
+
`);
|
|
118
|
+
tablesNeedingAttention = Number(perTableResult.rows?.[0]?.["count"] ?? 0);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Query failed, continue with aggregate check only
|
|
122
|
+
}
|
|
123
|
+
// Status is warning if aggregate > 10% OR any individual table > 20%
|
|
124
|
+
const vacuumStatus = deadPct > 20 || tablesNeedingAttention > 0
|
|
125
|
+
? deadPct > 20
|
|
126
|
+
? "critical"
|
|
127
|
+
: "warning"
|
|
128
|
+
: deadPct > 10
|
|
129
|
+
? "warning"
|
|
130
|
+
: "healthy";
|
|
131
|
+
checks["vacuum"] = {
|
|
132
|
+
status: vacuumStatus,
|
|
133
|
+
message: tablesNeedingAttention > 0
|
|
134
|
+
? `${deadPct.toString()}% dead tuples overall, ${tablesNeedingAttention.toString()} tables need attention`
|
|
135
|
+
: `${deadPct.toString()}% dead tuples`,
|
|
136
|
+
details: {
|
|
137
|
+
deadTuples: Number(vacuumResult.rows?.[0]?.["total_dead"] ?? 0),
|
|
138
|
+
liveTuples: Number(vacuumResult.rows?.[0]?.["total_live"] ?? 0),
|
|
139
|
+
tablesNeedingAttention,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
// Process wraparound health
|
|
143
|
+
const wraparoundPct = Number(wraparoundResult.rows?.[0]?.["percent_toward_wraparound"] ?? 0);
|
|
144
|
+
checks["wraparound"] = {
|
|
145
|
+
status: wraparoundPct > 75
|
|
146
|
+
? "critical"
|
|
147
|
+
: wraparoundPct > 50
|
|
148
|
+
? "warning"
|
|
149
|
+
: "healthy",
|
|
150
|
+
message: wraparoundPct.toString() + "% toward transaction ID wraparound",
|
|
151
|
+
details: {
|
|
152
|
+
xidAge: Number(wraparoundResult.rows?.[0]?.["xid_age"] ?? 0),
|
|
153
|
+
percentage: wraparoundPct,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
// Process long-running queries
|
|
157
|
+
const longQueries = Number(longQueryResult.rows?.[0]?.["count"] ?? 0);
|
|
158
|
+
checks["longQueries"] = {
|
|
159
|
+
status: longQueries > 5
|
|
160
|
+
? "critical"
|
|
161
|
+
: longQueries > 0
|
|
162
|
+
? "warning"
|
|
163
|
+
: "healthy",
|
|
164
|
+
message: longQueries.toString() + " queries running > 5 minutes",
|
|
165
|
+
details: { count: longQueries },
|
|
166
|
+
};
|
|
167
|
+
// Overall status
|
|
168
|
+
const statuses = Object.values(checks).map((c) => c.status);
|
|
169
|
+
const overallStatus = statuses.includes("critical")
|
|
170
|
+
? "critical"
|
|
171
|
+
: statuses.includes("warning")
|
|
172
|
+
? "warning"
|
|
173
|
+
: "healthy";
|
|
174
|
+
return {
|
|
175
|
+
overallStatus,
|
|
176
|
+
checks,
|
|
177
|
+
timestamp: new Date().toISOString(),
|
|
178
|
+
nextSteps: overallStatus !== "healthy"
|
|
179
|
+
? "Review warnings and use appropriate tools to address issues"
|
|
180
|
+
: "No immediate action required",
|
|
181
|
+
};
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL MCP Resources
|
|
3
|
+
*
|
|
4
|
+
* Provides structured data access via URI patterns.
|
|
5
|
+
* 20 resources total.
|
|
6
|
+
*/
|
|
7
|
+
import type { PostgresAdapter } from "../PostgresAdapter.js";
|
|
8
|
+
import type { ResourceDefinition } from "../../../types/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Get all PostgreSQL resources (20 total)
|
|
11
|
+
*
|
|
12
|
+
* Core (6):
|
|
13
|
+
* - postgres://schema - Full database schema
|
|
14
|
+
* - postgres://tables - Table listing with metadata
|
|
15
|
+
* - postgres://settings - PostgreSQL configuration
|
|
16
|
+
* - postgres://stats - Table/index statistics with stale detection
|
|
17
|
+
* - postgres://activity - Active connections and queries
|
|
18
|
+
* - postgres://pool - Connection pool statistics
|
|
19
|
+
*
|
|
20
|
+
* Migrated from legacy server (8):
|
|
21
|
+
* - postgres://capabilities - Server version, extensions, tool categories
|
|
22
|
+
* - postgres://performance - pg_stat_statements query metrics
|
|
23
|
+
* - postgres://health - Comprehensive database health status
|
|
24
|
+
* - postgres://extensions - Extension inventory with recommendations
|
|
25
|
+
* - postgres://indexes - Index usage with unused detection
|
|
26
|
+
* - postgres://replication - Replication status and lag monitoring
|
|
27
|
+
* - postgres://vacuum - Vacuum stats and wraparound warnings
|
|
28
|
+
* - postgres://locks - Lock contention detection
|
|
29
|
+
*
|
|
30
|
+
* Extension status (6):
|
|
31
|
+
* - postgres://cron - pg_cron job status and history
|
|
32
|
+
* - postgres://partman - pg_partman partition configuration
|
|
33
|
+
* - postgres://kcache - pg_stat_kcache CPU/I/O metrics
|
|
34
|
+
* - postgres://vector - pgvector columns and indexes
|
|
35
|
+
* - postgres://postgis - PostGIS spatial columns and indexes
|
|
36
|
+
* - postgres://crypto - pgcrypto availability and recommendations
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
export declare function getPostgresResources(adapter: PostgresAdapter): ResourceDefinition[];
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/resources/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA4BlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,GACvB,kBAAkB,EAAE,CA0BtB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL MCP Resources
|
|
3
|
+
*
|
|
4
|
+
* Provides structured data access via URI patterns.
|
|
5
|
+
* 20 resources total.
|
|
6
|
+
*/
|
|
7
|
+
// Core resources
|
|
8
|
+
import { createSchemaResource } from "./schema.js";
|
|
9
|
+
import { createTablesResource } from "./tables.js";
|
|
10
|
+
import { createSettingsResource } from "./settings.js";
|
|
11
|
+
import { createStatsResource } from "./stats.js";
|
|
12
|
+
import { createActivityResource } from "./activity.js";
|
|
13
|
+
import { createPoolResource } from "./pool.js";
|
|
14
|
+
// Migrated resources from legacy postgres-mcp-server
|
|
15
|
+
import { createCapabilitiesResource } from "./capabilities.js";
|
|
16
|
+
import { createPerformanceResource } from "./performance.js";
|
|
17
|
+
import { createHealthResource } from "./health.js";
|
|
18
|
+
import { createExtensionsResource } from "./extensions.js";
|
|
19
|
+
import { createIndexesResource } from "./indexes.js";
|
|
20
|
+
import { createReplicationResource } from "./replication.js";
|
|
21
|
+
import { createVacuumResource } from "./vacuum.js";
|
|
22
|
+
import { createLocksResource } from "./locks.js";
|
|
23
|
+
// Extension status resources
|
|
24
|
+
import { createCronResource } from "./cron.js";
|
|
25
|
+
import { createPartmanResource } from "./partman.js";
|
|
26
|
+
import { createKcacheResource } from "./kcache.js";
|
|
27
|
+
import { createVectorResource } from "./vector.js";
|
|
28
|
+
import { createPostgisResource } from "./postgis.js";
|
|
29
|
+
import { createCryptoResource } from "./crypto.js";
|
|
30
|
+
/**
|
|
31
|
+
* Get all PostgreSQL resources (20 total)
|
|
32
|
+
*
|
|
33
|
+
* Core (6):
|
|
34
|
+
* - postgres://schema - Full database schema
|
|
35
|
+
* - postgres://tables - Table listing with metadata
|
|
36
|
+
* - postgres://settings - PostgreSQL configuration
|
|
37
|
+
* - postgres://stats - Table/index statistics with stale detection
|
|
38
|
+
* - postgres://activity - Active connections and queries
|
|
39
|
+
* - postgres://pool - Connection pool statistics
|
|
40
|
+
*
|
|
41
|
+
* Migrated from legacy server (8):
|
|
42
|
+
* - postgres://capabilities - Server version, extensions, tool categories
|
|
43
|
+
* - postgres://performance - pg_stat_statements query metrics
|
|
44
|
+
* - postgres://health - Comprehensive database health status
|
|
45
|
+
* - postgres://extensions - Extension inventory with recommendations
|
|
46
|
+
* - postgres://indexes - Index usage with unused detection
|
|
47
|
+
* - postgres://replication - Replication status and lag monitoring
|
|
48
|
+
* - postgres://vacuum - Vacuum stats and wraparound warnings
|
|
49
|
+
* - postgres://locks - Lock contention detection
|
|
50
|
+
*
|
|
51
|
+
* Extension status (6):
|
|
52
|
+
* - postgres://cron - pg_cron job status and history
|
|
53
|
+
* - postgres://partman - pg_partman partition configuration
|
|
54
|
+
* - postgres://kcache - pg_stat_kcache CPU/I/O metrics
|
|
55
|
+
* - postgres://vector - pgvector columns and indexes
|
|
56
|
+
* - postgres://postgis - PostGIS spatial columns and indexes
|
|
57
|
+
* - postgres://crypto - pgcrypto availability and recommendations
|
|
58
|
+
*
|
|
59
|
+
*/
|
|
60
|
+
export function getPostgresResources(adapter) {
|
|
61
|
+
return [
|
|
62
|
+
// Core resources
|
|
63
|
+
createSchemaResource(adapter),
|
|
64
|
+
createTablesResource(adapter),
|
|
65
|
+
createSettingsResource(adapter),
|
|
66
|
+
createStatsResource(adapter),
|
|
67
|
+
createActivityResource(adapter),
|
|
68
|
+
createPoolResource(adapter),
|
|
69
|
+
// Migrated resources
|
|
70
|
+
createCapabilitiesResource(adapter),
|
|
71
|
+
createPerformanceResource(adapter),
|
|
72
|
+
createHealthResource(adapter),
|
|
73
|
+
createExtensionsResource(adapter),
|
|
74
|
+
createIndexesResource(adapter),
|
|
75
|
+
createReplicationResource(adapter),
|
|
76
|
+
createVacuumResource(adapter),
|
|
77
|
+
createLocksResource(adapter),
|
|
78
|
+
// Extension status resources
|
|
79
|
+
createCronResource(adapter),
|
|
80
|
+
createPartmanResource(adapter),
|
|
81
|
+
createKcacheResource(adapter),
|
|
82
|
+
createVectorResource(adapter),
|
|
83
|
+
createPostgisResource(adapter),
|
|
84
|
+
createCryptoResource(adapter),
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=index.js.map
|