@ucptools/validator 1.0.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/dist/auth/config.d.ts +20 -0
  2. package/dist/auth/config.d.ts.map +1 -0
  3. package/dist/auth/config.js +114 -0
  4. package/dist/auth/config.js.map +1 -0
  5. package/dist/auth/index.d.ts +5 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +17 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/middleware.d.ts +45 -0
  10. package/dist/auth/middleware.d.ts.map +1 -0
  11. package/dist/auth/middleware.js +170 -0
  12. package/dist/auth/middleware.js.map +1 -0
  13. package/dist/auth/service.d.ts +80 -0
  14. package/dist/auth/service.d.ts.map +1 -0
  15. package/dist/auth/service.js +298 -0
  16. package/dist/auth/service.js.map +1 -0
  17. package/dist/cli/index.js +96 -0
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/mock-server.d.ts +20 -0
  20. package/dist/cli/mock-server.d.ts.map +1 -0
  21. package/dist/cli/mock-server.js +261 -0
  22. package/dist/cli/mock-server.js.map +1 -0
  23. package/dist/db/index.d.ts +8 -2
  24. package/dist/db/index.d.ts.map +1 -1
  25. package/dist/db/index.js +22 -5
  26. package/dist/db/index.js.map +1 -1
  27. package/dist/db/schema.d.ts +3570 -128
  28. package/dist/db/schema.d.ts.map +1 -1
  29. package/dist/db/schema.js +377 -17
  30. package/dist/db/schema.js.map +1 -1
  31. package/dist/db/utils.d.ts +252 -0
  32. package/dist/db/utils.d.ts.map +1 -0
  33. package/dist/db/utils.js +295 -0
  34. package/dist/db/utils.js.map +1 -0
  35. package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -1
  36. package/dist/feed-analyzer/feed-analyzer.js +218 -4
  37. package/dist/feed-analyzer/feed-analyzer.js.map +1 -1
  38. package/dist/feed-analyzer/types.d.ts +82 -1
  39. package/dist/feed-analyzer/types.d.ts.map +1 -1
  40. package/dist/feed-analyzer/types.js +13 -0
  41. package/dist/feed-analyzer/types.js.map +1 -1
  42. package/dist/generator/profile-builder.d.ts.map +1 -1
  43. package/dist/generator/profile-builder.js +158 -115
  44. package/dist/generator/profile-builder.js.map +1 -1
  45. package/dist/lib/analytics.d.ts +349 -0
  46. package/dist/lib/analytics.d.ts.map +1 -0
  47. package/dist/lib/analytics.js +198 -0
  48. package/dist/lib/analytics.js.map +1 -0
  49. package/dist/security/security-scanner.d.ts.map +1 -1
  50. package/dist/security/security-scanner.js +130 -2
  51. package/dist/security/security-scanner.js.map +1 -1
  52. package/dist/security/types.d.ts +32 -0
  53. package/dist/security/types.d.ts.map +1 -1
  54. package/dist/security/types.js.map +1 -1
  55. package/dist/services/analytics.d.ts +114 -0
  56. package/dist/services/analytics.d.ts.map +1 -0
  57. package/dist/services/analytics.js +862 -0
  58. package/dist/services/analytics.js.map +1 -0
  59. package/dist/services/badge.d.ts +31 -0
  60. package/dist/services/badge.d.ts.map +1 -0
  61. package/dist/services/badge.js +152 -0
  62. package/dist/services/badge.js.map +1 -0
  63. package/dist/services/cron.d.ts +127 -0
  64. package/dist/services/cron.d.ts.map +1 -0
  65. package/dist/services/cron.js +693 -0
  66. package/dist/services/cron.js.map +1 -0
  67. package/dist/services/directory.d.ts +2 -0
  68. package/dist/services/directory.d.ts.map +1 -1
  69. package/dist/services/directory.js +45 -27
  70. package/dist/services/directory.js.map +1 -1
  71. package/dist/services/email.d.ts +127 -0
  72. package/dist/services/email.d.ts.map +1 -0
  73. package/dist/services/email.js +876 -0
  74. package/dist/services/email.js.map +1 -0
  75. package/dist/services/hosted-profiles.d.ts +77 -0
  76. package/dist/services/hosted-profiles.d.ts.map +1 -0
  77. package/dist/services/hosted-profiles.js +433 -0
  78. package/dist/services/hosted-profiles.js.map +1 -0
  79. package/dist/services/latency.d.ts +67 -0
  80. package/dist/services/latency.d.ts.map +1 -0
  81. package/dist/services/latency.js +274 -0
  82. package/dist/services/latency.js.map +1 -0
  83. package/dist/services/manifest-compliance.d.ts +64 -0
  84. package/dist/services/manifest-compliance.d.ts.map +1 -0
  85. package/dist/services/manifest-compliance.js +271 -0
  86. package/dist/services/manifest-compliance.js.map +1 -0
  87. package/dist/services/monitoring-diff.d.ts +31 -0
  88. package/dist/services/monitoring-diff.d.ts.map +1 -0
  89. package/dist/services/monitoring-diff.js +189 -0
  90. package/dist/services/monitoring-diff.js.map +1 -0
  91. package/dist/services/notifications.d.ts +46 -0
  92. package/dist/services/notifications.d.ts.map +1 -0
  93. package/dist/services/notifications.js +88 -0
  94. package/dist/services/notifications.js.map +1 -0
  95. package/dist/services/posthog.d.ts +43 -0
  96. package/dist/services/posthog.d.ts.map +1 -0
  97. package/dist/services/posthog.js +110 -0
  98. package/dist/services/posthog.js.map +1 -0
  99. package/dist/services/stripe.d.ts +93 -0
  100. package/dist/services/stripe.d.ts.map +1 -0
  101. package/dist/services/stripe.js +490 -0
  102. package/dist/services/stripe.js.map +1 -0
  103. package/dist/services/validation-history.d.ts +99 -0
  104. package/dist/services/validation-history.d.ts.map +1 -0
  105. package/dist/services/validation-history.js +344 -0
  106. package/dist/services/validation-history.js.map +1 -0
  107. package/dist/services/validation-logging.d.ts +103 -0
  108. package/dist/services/validation-logging.d.ts.map +1 -0
  109. package/dist/services/validation-logging.js +210 -0
  110. package/dist/services/validation-logging.js.map +1 -0
  111. package/dist/services/validation.d.ts +119 -0
  112. package/dist/services/validation.d.ts.map +1 -0
  113. package/dist/services/validation.js +1185 -0
  114. package/dist/services/validation.js.map +1 -0
  115. package/dist/simulator/agent-simulator.d.ts.map +1 -1
  116. package/dist/simulator/agent-simulator.js +229 -9
  117. package/dist/simulator/agent-simulator.js.map +1 -1
  118. package/dist/simulator/types.d.ts +26 -0
  119. package/dist/simulator/types.d.ts.map +1 -1
  120. package/dist/simulator/types.js.map +1 -1
  121. package/dist/types/acp-validation.d.ts +87 -0
  122. package/dist/types/acp-validation.d.ts.map +1 -0
  123. package/dist/types/acp-validation.js +40 -0
  124. package/dist/types/acp-validation.js.map +1 -0
  125. package/dist/types/analytics.d.ts +182 -0
  126. package/dist/types/analytics.d.ts.map +1 -0
  127. package/dist/types/analytics.js +7 -0
  128. package/dist/types/analytics.js.map +1 -0
  129. package/dist/types/generator.d.ts +4 -0
  130. package/dist/types/generator.d.ts.map +1 -1
  131. package/dist/types/ucp-profile.d.ts +32 -2
  132. package/dist/types/ucp-profile.d.ts.map +1 -1
  133. package/dist/types/ucp-profile.js +31 -1
  134. package/dist/types/ucp-profile.js.map +1 -1
  135. package/dist/types/validation.d.ts +14 -0
  136. package/dist/types/validation.d.ts.map +1 -1
  137. package/dist/types/validation.js +19 -0
  138. package/dist/types/validation.js.map +1 -1
  139. package/dist/validator/acp/index.d.ts +31 -0
  140. package/dist/validator/acp/index.d.ts.map +1 -0
  141. package/dist/validator/acp/index.js +574 -0
  142. package/dist/validator/acp/index.js.map +1 -0
  143. package/dist/validator/network-validator.d.ts.map +1 -1
  144. package/dist/validator/network-validator.js +23 -13
  145. package/dist/validator/network-validator.js.map +1 -1
  146. package/dist/validator/rules-validator.d.ts +8 -0
  147. package/dist/validator/rules-validator.d.ts.map +1 -1
  148. package/dist/validator/rules-validator.js +159 -43
  149. package/dist/validator/rules-validator.js.map +1 -1
  150. package/dist/validator/structural-validator.d.ts.map +1 -1
  151. package/dist/validator/structural-validator.js +283 -53
  152. package/dist/validator/structural-validator.js.map +1 -1
  153. package/dist/validator/utils.d.ts +62 -0
  154. package/dist/validator/utils.d.ts.map +1 -0
  155. package/dist/validator/utils.js +151 -0
  156. package/dist/validator/utils.js.map +1 -0
  157. package/package.json +45 -12
  158. package/.claude/settings.local.json +0 -60
  159. package/.vercel/README.txt +0 -11
  160. package/.vercel/project.json +0 -1
  161. package/publish-output.txt +0 -0
  162. package/tsconfig.json +0 -20
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ /**
3
+ * UCP Mock Server
4
+ * Serves a valid UCP profile and mock endpoints for local development and testing.
5
+ * Usage: ucp-validate mock [--port 3001] [--config ./ucp-mock.json]
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.loadConfig = loadConfig;
12
+ exports.startMockServer = startMockServer;
13
+ const express_1 = __importDefault(require("express"));
14
+ const fs_1 = require("fs");
15
+ const path_1 = require("path");
16
+ const nanoid_1 = require("nanoid");
17
+ // Colors for terminal output
18
+ const colors = {
19
+ red: (s) => `\x1b[31m${s}\x1b[0m`,
20
+ green: (s) => `\x1b[32m${s}\x1b[0m`,
21
+ yellow: (s) => `\x1b[33m${s}\x1b[0m`,
22
+ blue: (s) => `\x1b[34m${s}\x1b[0m`,
23
+ gray: (s) => `\x1b[90m${s}\x1b[0m`,
24
+ bold: (s) => `\x1b[1m${s}\x1b[0m`,
25
+ cyan: (s) => `\x1b[36m${s}\x1b[0m`,
26
+ };
27
+ const DEFAULT_CONFIG = {
28
+ port: 3001,
29
+ merchant: {
30
+ name: 'UCP Demo Store',
31
+ domain: 'localhost',
32
+ description: 'A demo UCP merchant for development and testing',
33
+ email: 'demo@ucptools.dev',
34
+ },
35
+ capabilities: ['checkout', 'order'],
36
+ products: 10,
37
+ latencyMs: 0,
38
+ };
39
+ const SAMPLE_PRODUCTS = [
40
+ { id: 'prod_001', title: 'AI Commerce T-Shirt', description: 'Show your support for agentic commerce', price: 2500, currency: 'USD', image_url: 'https://placehold.co/400x400?text=T-Shirt', in_stock: true, sku: 'TSHIRT-001' },
41
+ { id: 'prod_002', title: 'UCP Developer Mug', description: 'Fuel your protocol work', price: 1500, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Mug', in_stock: true, sku: 'MUG-001' },
42
+ { id: 'prod_003', title: 'Checkout Flow Hoodie', description: 'Warm and compliant', price: 5500, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Hoodie', in_stock: true, sku: 'HOODIE-001' },
43
+ { id: 'prod_004', title: 'Agent Readiness Sticker Pack', description: '10 stickers for your laptop', price: 800, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Stickers', in_stock: true, sku: 'STICKER-001' },
44
+ { id: 'prod_005', title: 'Protocol Spec Notebook', description: 'For drafting your next integration', price: 1200, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Notebook', in_stock: true, sku: 'NOTEBOOK-001' },
45
+ { id: 'prod_006', title: 'Webhook Handler Hat', description: 'Stay signed and verified', price: 2000, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Hat', in_stock: true, sku: 'HAT-001' },
46
+ { id: 'prod_007', title: 'Discovery Profile Poster', description: 'UCP architecture wall art', price: 3000, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Poster', in_stock: false, sku: 'POSTER-001' },
47
+ { id: 'prod_008', title: 'JSON Schema Coaster Set', description: 'Validate your drinks', price: 900, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Coasters', in_stock: true, sku: 'COASTER-001' },
48
+ { id: 'prod_009', title: 'Payment Handler Keychain', description: 'Stripe, Google Pay, Apple Pay', price: 600, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Keychain', in_stock: true, sku: 'KEYCHAIN-001' },
49
+ { id: 'prod_010', title: 'UCP Compliance Certificate Frame', description: 'Display your A grade', price: 4500, currency: 'USD', image_url: 'https://placehold.co/400x400?text=Frame', in_stock: true, sku: 'FRAME-001' },
50
+ ];
51
+ function loadConfig(configPath) {
52
+ if (configPath) {
53
+ const fullPath = (0, path_1.resolve)(configPath);
54
+ if (!(0, fs_1.existsSync)(fullPath)) {
55
+ console.error(colors.red(`Config file not found: ${fullPath}`));
56
+ process.exit(1);
57
+ }
58
+ const raw = JSON.parse((0, fs_1.readFileSync)(fullPath, 'utf-8'));
59
+ return { ...DEFAULT_CONFIG, ...raw, merchant: { ...DEFAULT_CONFIG.merchant, ...raw.merchant } };
60
+ }
61
+ return DEFAULT_CONFIG;
62
+ }
63
+ function startMockServer(config) {
64
+ const app = (0, express_1.default)();
65
+ app.use(express_1.default.json());
66
+ const sessions = new Map();
67
+ const products = SAMPLE_PRODUCTS.slice(0, config.products);
68
+ const baseUrl = `http://localhost:${config.port}`;
69
+ // Latency middleware
70
+ if (config.latencyMs > 0) {
71
+ app.use((_req, _res, next) => {
72
+ setTimeout(next, config.latencyMs);
73
+ });
74
+ }
75
+ // Request logging
76
+ app.use((req, _res, next) => {
77
+ const timestamp = new Date().toISOString().slice(11, 19);
78
+ console.log(colors.gray(`[${timestamp}]`) + ` ${colors.cyan(req.method)} ${req.path}`);
79
+ next();
80
+ });
81
+ // CORS
82
+ app.use((_req, res, next) => {
83
+ res.header('Access-Control-Allow-Origin', '*');
84
+ res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
85
+ res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS');
86
+ next();
87
+ });
88
+ // ── UCP Discovery Profile ────────────────────────────────────
89
+ app.get('/.well-known/ucp', (_req, res) => {
90
+ const profile = {
91
+ ucp: {
92
+ version: '2026-01-11',
93
+ services: {
94
+ 'dev.ucp.shopping': {
95
+ version: '2026-01-11',
96
+ spec: 'https://ucp.dev/specification/overview/',
97
+ rest: {
98
+ schema: 'https://ucp.dev/services/shopping/rest.openapi.json',
99
+ endpoint: baseUrl,
100
+ },
101
+ },
102
+ },
103
+ capabilities: buildCapabilities(config.capabilities),
104
+ },
105
+ };
106
+ if (config.capabilities.includes('order')) {
107
+ profile.signing_keys = [
108
+ {
109
+ kty: 'EC',
110
+ kid: 'mock-webhook-key-1',
111
+ use: 'sig',
112
+ alg: 'ES256',
113
+ crv: 'P-256',
114
+ x: 'mock_x_coordinate_base64url',
115
+ y: 'mock_y_coordinate_base64url',
116
+ },
117
+ ];
118
+ }
119
+ res.json(profile);
120
+ });
121
+ // ── Products ─────────────────────────────────────────────────
122
+ app.get('/products', (_req, res) => {
123
+ res.json({ products, total: products.length });
124
+ });
125
+ app.get('/products/:id', (req, res) => {
126
+ const product = products.find(p => p.id === req.params.id);
127
+ if (!product)
128
+ return res.status(404).json({ error: 'Product not found' });
129
+ res.json(product);
130
+ });
131
+ // ── Checkout Sessions ────────────────────────────────────────
132
+ app.post('/checkout-sessions', (req, res) => {
133
+ const { items } = req.body || {};
134
+ const sessionItems = (items || [{ product_id: 'prod_001', quantity: 1 }]).map((item) => {
135
+ const product = products.find(p => p.id === item.product_id);
136
+ return {
137
+ product_id: item.product_id,
138
+ quantity: item.quantity || 1,
139
+ price: product?.price || 0,
140
+ };
141
+ });
142
+ const session = {
143
+ id: `cs_${(0, nanoid_1.nanoid)(12)}`,
144
+ status: 'open',
145
+ items: sessionItems,
146
+ total: sessionItems.reduce((sum, i) => sum + i.price * i.quantity, 0),
147
+ currency: 'USD',
148
+ created_at: new Date().toISOString(),
149
+ updated_at: new Date().toISOString(),
150
+ };
151
+ sessions.set(session.id, session);
152
+ res.status(201).json(session);
153
+ });
154
+ app.get('/checkout-sessions/:id', (req, res) => {
155
+ const session = sessions.get(req.params.id);
156
+ if (!session)
157
+ return res.status(404).json({ error: 'Session not found' });
158
+ res.json(session);
159
+ });
160
+ app.post('/checkout-sessions/:id/complete', (req, res) => {
161
+ const session = sessions.get(req.params.id);
162
+ if (!session)
163
+ return res.status(404).json({ error: 'Session not found' });
164
+ if (session.status !== 'open')
165
+ return res.status(400).json({ error: 'Session is not open' });
166
+ session.status = 'complete';
167
+ session.updated_at = new Date().toISOString();
168
+ res.json({
169
+ ...session,
170
+ order_id: `ord_${(0, nanoid_1.nanoid)(12)}`,
171
+ payment_status: 'paid',
172
+ });
173
+ });
174
+ // ── Orders (if enabled) ──────────────────────────────────────
175
+ if (config.capabilities.includes('order')) {
176
+ app.get('/orders/:id', (req, res) => {
177
+ res.json({
178
+ id: req.params.id,
179
+ status: 'confirmed',
180
+ items: [{ product_id: 'prod_001', quantity: 1, price: 2500 }],
181
+ total: 2500,
182
+ currency: 'USD',
183
+ shipping: { status: 'pending', carrier: 'USPS', tracking: null },
184
+ created_at: new Date().toISOString(),
185
+ });
186
+ });
187
+ }
188
+ // ── Health ────────────────────────────────────────────────────
189
+ app.get('/health', (_req, res) => {
190
+ res.json({ status: 'ok', uptime: process.uptime() });
191
+ });
192
+ // ── Start ────────────────────────────────────────────────────
193
+ app.listen(config.port, () => {
194
+ console.log('');
195
+ console.log(colors.bold(' UCP Mock Server'));
196
+ console.log(colors.gray(' ─'.repeat(25)));
197
+ console.log(` ${colors.green('●')} Running on ${colors.cyan(baseUrl)}`);
198
+ console.log(` ${colors.gray('Merchant:')} ${config.merchant.name}`);
199
+ console.log(` ${colors.gray('Products:')} ${products.length}`);
200
+ console.log(` ${colors.gray('Capabilities:')} ${config.capabilities.join(', ')}`);
201
+ if (config.latencyMs > 0) {
202
+ console.log(` ${colors.gray('Latency:')} ${config.latencyMs}ms`);
203
+ }
204
+ console.log('');
205
+ console.log(colors.bold(' Endpoints:'));
206
+ console.log(` ${colors.cyan('GET')} /.well-known/ucp ${colors.gray('UCP discovery profile')}`);
207
+ console.log(` ${colors.cyan('GET')} /products ${colors.gray('Product catalog')}`);
208
+ console.log(` ${colors.cyan('GET')} /products/:id ${colors.gray('Single product')}`);
209
+ console.log(` ${colors.cyan('POST')} /checkout-sessions ${colors.gray('Create checkout')}`);
210
+ console.log(` ${colors.cyan('GET')} /checkout-sessions/:id ${colors.gray('Get session')}`);
211
+ console.log(` ${colors.cyan('POST')} /checkout-sessions/:id/complete ${colors.gray('Complete checkout')}`);
212
+ if (config.capabilities.includes('order')) {
213
+ console.log(` ${colors.cyan('GET')} /orders/:id ${colors.gray('Get order')}`);
214
+ }
215
+ console.log(` ${colors.cyan('GET')} /health ${colors.gray('Health check')}`);
216
+ console.log('');
217
+ console.log(colors.bold(' Validate with:'));
218
+ console.log(` ${colors.yellow('ucp-validate validate -r localhost:' + config.port)}`);
219
+ console.log('');
220
+ console.log(colors.gray(' Press Ctrl+C to stop'));
221
+ console.log('');
222
+ });
223
+ }
224
+ function buildCapabilities(caps) {
225
+ const capabilities = [];
226
+ if (caps.includes('checkout')) {
227
+ capabilities.push({
228
+ name: 'dev.ucp.shopping.checkout',
229
+ version: '2026-01-11',
230
+ spec: 'https://ucp.dev/specification/checkout/',
231
+ schema: 'https://ucp.dev/schemas/shopping/checkout.json',
232
+ });
233
+ }
234
+ if (caps.includes('order')) {
235
+ capabilities.push({
236
+ name: 'dev.ucp.shopping.order',
237
+ version: '2026-01-11',
238
+ spec: 'https://ucp.dev/specification/order/',
239
+ schema: 'https://ucp.dev/schemas/shopping/order.json',
240
+ });
241
+ }
242
+ if (caps.includes('fulfillment')) {
243
+ capabilities.push({
244
+ name: 'dev.ucp.shopping.fulfillment',
245
+ version: '2026-01-11',
246
+ spec: 'https://ucp.dev/specification/fulfillment/',
247
+ schema: 'https://ucp.dev/schemas/shopping/fulfillment.json',
248
+ extends: 'dev.ucp.shopping.order',
249
+ });
250
+ }
251
+ if (caps.includes('discount')) {
252
+ capabilities.push({
253
+ name: 'dev.ucp.shopping.discount',
254
+ version: '2026-01-11',
255
+ spec: 'https://ucp.dev/specification/discount/',
256
+ schema: 'https://ucp.dev/schemas/shopping/discount.json',
257
+ });
258
+ }
259
+ return capabilities;
260
+ }
261
+ //# sourceMappingURL=mock-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-server.js","sourceRoot":"","sources":["../../src/cli/mock-server.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,17 @@
1
- import { NeonHttpDatabase } from 'drizzle-orm/neon-http';
1
+ import { NodePgDatabase } from 'drizzle-orm/node-postgres';
2
2
  import * as schema from './schema.js';
3
- type Database = NeonHttpDatabase<typeof schema>;
3
+ type Database = NodePgDatabase<typeof schema>;
4
4
  /**
5
5
  * Get the Drizzle database instance.
6
6
  * Lazily creates the connection on first use.
7
7
  */
8
8
  export declare function getDb(): Database;
9
+ /**
10
+ * Close database connection pool.
11
+ * Call this when shutting down the server.
12
+ */
13
+ export declare function closeDb(): Promise<void>;
9
14
  export * from './schema.js';
10
15
  export { schema };
16
+ export * from './utils.js';
11
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAGtC,KAAK,QAAQ,GAAG,gBAAgB,CAAC,OAAO,MAAM,CAAC,CAAC;AAKhD;;;GAGG;AACH,wBAAgB,KAAK,IAAI,QAAQ,CAShC;AAGD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAGtC,KAAK,QAAQ,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;AAM9C;;;GAGG;AACH,wBAAgB,KAAK,IAAI,QAAQ,CAWhC;AAED;;;GAGG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAM7C;AAGD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;AAGlB,cAAc,YAAY,CAAC"}
package/dist/db/index.js CHANGED
@@ -38,12 +38,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.schema = void 0;
40
40
  exports.getDb = getDb;
41
- const neon_http_1 = require("drizzle-orm/neon-http");
42
- const serverless_1 = require("@neondatabase/serverless");
41
+ exports.closeDb = closeDb;
42
+ const node_postgres_1 = require("drizzle-orm/node-postgres");
43
+ const pg_1 = require("pg");
43
44
  const schema = __importStar(require("./schema.js"));
44
45
  exports.schema = schema;
45
- // Lazy-loaded database instance (for serverless cold starts)
46
+ // Lazy-loaded database instance
46
47
  let dbInstance = null;
48
+ let pool = null;
47
49
  /**
48
50
  * Get the Drizzle database instance.
49
51
  * Lazily creates the connection on first use.
@@ -53,11 +55,26 @@ function getDb() {
53
55
  if (!process.env.DATABASE_URL) {
54
56
  throw new Error('DATABASE_URL environment variable is not set');
55
57
  }
56
- const sql = (0, serverless_1.neon)(process.env.DATABASE_URL);
57
- dbInstance = (0, neon_http_1.drizzle)(sql, { schema });
58
+ pool = new pg_1.Pool({
59
+ connectionString: process.env.DATABASE_URL,
60
+ });
61
+ dbInstance = (0, node_postgres_1.drizzle)(pool, { schema });
58
62
  }
59
63
  return dbInstance;
60
64
  }
65
+ /**
66
+ * Close database connection pool.
67
+ * Call this when shutting down the server.
68
+ */
69
+ async function closeDb() {
70
+ if (pool) {
71
+ await pool.end();
72
+ pool = null;
73
+ dbInstance = null;
74
+ }
75
+ }
61
76
  // Re-export schema for convenience
62
77
  __exportStar(require("./schema.js"), exports);
78
+ // Re-export utilities for convenience
79
+ __exportStar(require("./utils.js"), exports);
63
80
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,sBASC;AAvBD,qDAAkE;AAClE,yDAAgD;AAChD,oDAAsC;AAyB7B,wBAAM;AApBf,6DAA6D;AAC7D,IAAI,UAAU,GAAoB,IAAI,CAAC;AAEvC;;;GAGG;AACH,SAAgB,KAAK;IACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,iBAAI,EAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,UAAU,GAAG,IAAA,mBAAO,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,mCAAmC;AACnC,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,sBAWC;AAMD,0BAMC;AAtCD,6DAAoE;AACpE,2BAA0B;AAC1B,oDAAsC;AAwC7B,wBAAM;AAnCf,gCAAgC;AAChC,IAAI,UAAU,GAAoB,IAAI,CAAC;AACvC,IAAI,IAAI,GAAgB,IAAI,CAAC;AAE7B;;;GAGG;AACH,SAAgB,KAAK;IACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,GAAG,IAAI,SAAI,CAAC;YACd,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;SAC3C,CAAC,CAAC;QACH,UAAU,GAAG,IAAA,uBAAO,EAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,OAAO;IAC3B,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,IAAI,GAAG,IAAI,CAAC;QACZ,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC;AAED,mCAAmC;AACnC,8CAA4B;AAG5B,sCAAsC;AACtC,6CAA2B"}