@agentuity/postgres
Advanced tools
@@ -10,4 +10,4 @@ /** | ||
| * | ||
| * When @agentuity/runtime is available, this module automatically registers | ||
| * a shutdown hook so all postgres clients/pools are closed during graceful shutdown. | ||
| * Automatically registers process shutdown hooks (beforeExit, SIGTERM, SIGINT) | ||
| * so all postgres clients/pools are closed during graceful shutdown. | ||
| */ | ||
@@ -14,0 +14,0 @@ /** |
+14
-24
@@ -10,4 +10,4 @@ /** | ||
| * | ||
| * When @agentuity/runtime is available, this module automatically registers | ||
| * a shutdown hook so all postgres clients/pools are closed during graceful shutdown. | ||
| * Automatically registers process shutdown hooks (beforeExit, SIGTERM, SIGINT) | ||
| * so all postgres clients/pools are closed during graceful shutdown. | ||
| */ | ||
@@ -145,10 +145,10 @@ /** | ||
| /** | ||
| * Attempts to register a shutdown hook with @agentuity/runtime if available. | ||
| * This is called automatically when the first client is registered. | ||
| * Registers a process shutdown hook to gracefully close all connections. | ||
| * Uses standard Node.js/Bun process events instead of framework-specific hooks. | ||
| * | ||
| * @internal | ||
| */ | ||
| function tryRegisterRuntimeHook() { | ||
| function registerProcessShutdownHook() { | ||
| const global = globalThis; | ||
| // Only try once | ||
| // Only register once | ||
| if (global[RUNTIME_HOOK_REGISTERED]) { | ||
@@ -158,21 +158,11 @@ return; | ||
| global[RUNTIME_HOOK_REGISTERED] = true; | ||
| // Try to dynamically import the runtime and register our shutdown hook | ||
| // This is done asynchronously to avoid blocking client creation | ||
| // and to handle the case where runtime is not available | ||
| // Using Function constructor to avoid TypeScript trying to resolve the module at build time | ||
| const dynamicImport = new Function('specifier', 'return import(specifier)'); | ||
| dynamicImport('@agentuity/runtime') | ||
| .then((runtime) => { | ||
| if (typeof runtime.registerShutdownHook === 'function') { | ||
| runtime.registerShutdownHook(async () => { | ||
| await shutdownAll(5000); // 5 second timeout for graceful shutdown | ||
| }); | ||
| } | ||
| }) | ||
| .catch(() => { | ||
| // Runtime not available - that's fine, user can call shutdownAll manually | ||
| }); | ||
| const shutdown = () => { | ||
| shutdownAll(5000).catch(() => { }); | ||
| }; | ||
| process.on('beforeExit', shutdown); | ||
| process.on('SIGTERM', shutdown); | ||
| process.on('SIGINT', shutdown); | ||
| } | ||
| // Try to register with runtime when this module is first loaded | ||
| tryRegisterRuntimeHook(); | ||
| // Register shutdown hook when this module is first loaded | ||
| registerProcessShutdownHook(); | ||
| //# sourceMappingURL=registry.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"} |
+52
-56
| { | ||
| "name": "@agentuity/postgres", | ||
| "version": "2.0.8", | ||
| "license": "Apache-2.0", | ||
| "author": "Agentuity employees and contributors", | ||
| "type": "module", | ||
| "description": "Resilient PostgreSQL client with automatic reconnection for Agentuity projects", | ||
| "main": "./dist/index.js", | ||
| "module": "./dist/index.js", | ||
| "types": "./dist/index.d.ts", | ||
| "files": [ | ||
| "AGENTS.md", | ||
| "README.md", | ||
| "src", | ||
| "dist" | ||
| ], | ||
| "exports": { | ||
| ".": "./dist/index.js" | ||
| }, | ||
| "typesVersions": { | ||
| "*": { | ||
| ".": [ | ||
| "./dist/index.d.ts" | ||
| ] | ||
| } | ||
| }, | ||
| "scripts": { | ||
| "clean": "rm -rf dist tsconfig.tsbuildinfo", | ||
| "build": "bunx tsc --build --force", | ||
| "typecheck": "bunx tsc --noEmit", | ||
| "prepublishOnly": "bun run clean && bun run build" | ||
| }, | ||
| "dependencies": { | ||
| "@agentuity/core": "2.0.8", | ||
| "pg": "^8.13.1" | ||
| }, | ||
| "peerDependencies": { | ||
| "@agentuity/runtime": "2.0.8" | ||
| }, | ||
| "peerDependenciesMeta": { | ||
| "@agentuity/runtime": { | ||
| "optional": true | ||
| } | ||
| }, | ||
| "devDependencies": { | ||
| "@agentuity/runtime": "2.0.8", | ||
| "@agentuity/test-utils": "2.0.8", | ||
| "@types/bun": "latest", | ||
| "@types/pg": "^8.11.14", | ||
| "bun-types": "latest", | ||
| "kysely": "^0.27.6", | ||
| "typescript": "^5.9.0" | ||
| }, | ||
| "publishConfig": { | ||
| "access": "public" | ||
| }, | ||
| "sideEffects": false | ||
| "name": "@agentuity/postgres", | ||
| "version": "2.0.9-v3.cdab389", | ||
| "license": "Apache-2.0", | ||
| "author": "Agentuity employees and contributors", | ||
| "type": "module", | ||
| "description": "Resilient PostgreSQL client with automatic reconnection for Agentuity projects", | ||
| "main": "./dist/index.js", | ||
| "module": "./dist/index.js", | ||
| "types": "./dist/index.d.ts", | ||
| "files": [ | ||
| "AGENTS.md", | ||
| "README.md", | ||
| "src", | ||
| "dist" | ||
| ], | ||
| "exports": { | ||
| ".": "./dist/index.js" | ||
| }, | ||
| "typesVersions": { | ||
| "*": { | ||
| ".": [ | ||
| "./dist/index.d.ts" | ||
| ] | ||
| } | ||
| }, | ||
| "scripts": { | ||
| "clean": "rm -rf dist tsconfig.tsbuildinfo", | ||
| "build": "bunx tsc --build --force", | ||
| "typecheck": "bunx tsc --noEmit", | ||
| "prepublishOnly": "bun run clean && bun run build" | ||
| }, | ||
| "dependencies": { | ||
| "@agentuity/core": "2.0.9-v3.cdab389", | ||
| "pg": "^8.13.1" | ||
| }, | ||
| "devDependencies": { | ||
| "@agentuity/test-utils": "2.0.9-v3.cdab389", | ||
| "@types/bun": "latest", | ||
| "@types/pg": "^8.11.14", | ||
| "bun-types": "latest", | ||
| "kysely": "^0.27.6", | ||
| "typescript": "^5.9.0" | ||
| }, | ||
| "publishConfig": { | ||
| "access": "public" | ||
| }, | ||
| "sideEffects": false, | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "https://github.com/agentuity/sdk.git", | ||
| "directory": "packages/postgres" | ||
| } | ||
| } |
+14
-26
@@ -10,4 +10,4 @@ /** | ||
| * | ||
| * When @agentuity/runtime is available, this module automatically registers | ||
| * a shutdown hook so all postgres clients/pools are closed during graceful shutdown. | ||
| * Automatically registers process shutdown hooks (beforeExit, SIGTERM, SIGINT) | ||
| * so all postgres clients/pools are closed during graceful shutdown. | ||
| */ | ||
@@ -178,11 +178,11 @@ | ||
| /** | ||
| * Attempts to register a shutdown hook with @agentuity/runtime if available. | ||
| * This is called automatically when the first client is registered. | ||
| * Registers a process shutdown hook to gracefully close all connections. | ||
| * Uses standard Node.js/Bun process events instead of framework-specific hooks. | ||
| * | ||
| * @internal | ||
| */ | ||
| function tryRegisterRuntimeHook(): void { | ||
| function registerProcessShutdownHook(): void { | ||
| const global = globalThis as Record<symbol, boolean>; | ||
| // Only try once | ||
| // Only register once | ||
| if (global[RUNTIME_HOOK_REGISTERED]) { | ||
@@ -193,24 +193,12 @@ return; | ||
| // Try to dynamically import the runtime and register our shutdown hook | ||
| // This is done asynchronously to avoid blocking client creation | ||
| // and to handle the case where runtime is not available | ||
| // Using Function constructor to avoid TypeScript trying to resolve the module at build time | ||
| const dynamicImport = new Function('specifier', 'return import(specifier)') as ( | ||
| specifier: string | ||
| ) => Promise<{ registerShutdownHook?: (hook: () => Promise<void> | void) => void }>; | ||
| const shutdown = () => { | ||
| shutdownAll(5000).catch(() => {}); | ||
| }; | ||
| dynamicImport('@agentuity/runtime') | ||
| .then((runtime) => { | ||
| if (typeof runtime.registerShutdownHook === 'function') { | ||
| runtime.registerShutdownHook(async () => { | ||
| await shutdownAll(5000); // 5 second timeout for graceful shutdown | ||
| }); | ||
| } | ||
| }) | ||
| .catch(() => { | ||
| // Runtime not available - that's fine, user can call shutdownAll manually | ||
| }); | ||
| process.on('beforeExit', shutdown); | ||
| process.on('SIGTERM', shutdown); | ||
| process.on('SIGINT', shutdown); | ||
| } | ||
| // Try to register with runtime when this module is first loaded | ||
| tryRegisterRuntimeHook(); | ||
| // Register shutdown hook when this module is first loaded | ||
| registerProcessShutdownHook(); |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
2
-33.33%6
-14.29%40
-2.44%0
-100%324130
-0.42%7416
-0.3%2
100%+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed