@toolpack-sdk/knowledge 1.4.0 → 2.0.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.
- package/README.md +110 -1
- package/dist/index.cjs +31 -10
- package/dist/index.d.cts +135 -1
- package/dist/index.d.ts +135 -1
- package/dist/index.js +31 -10
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -122,6 +122,8 @@ const webSource = new WebUrlSource(['https://docs.example.com'], {
|
|
|
122
122
|
userAgent: 'MyApp/1.0', // Custom user agent
|
|
123
123
|
maxChunkSize: 1500, // Chunk size for web content
|
|
124
124
|
timeoutMs: 30000, // Request timeout
|
|
125
|
+
sameDomainOnly: true, // Only follow links on the same domain (default: true)
|
|
126
|
+
maxPagesPerDomain: 20, // Cap pages per domain (default: 10)
|
|
125
127
|
});
|
|
126
128
|
|
|
127
129
|
const kb = await Knowledge.create({
|
|
@@ -285,6 +287,8 @@ new WebUrlSource(['https://example.com', 'https://docs.example.com'], {
|
|
|
285
287
|
maxChunkSize: 2000, // Max tokens per chunk
|
|
286
288
|
chunkOverlap: 200, // Overlap between chunks
|
|
287
289
|
timeoutMs: 30000, // Request timeout (default: 30000ms)
|
|
290
|
+
sameDomainOnly: true, // Only follow links on the same domain (default: true)
|
|
291
|
+
maxPagesPerDomain: 10, // Max pages crawled per domain (default: 10)
|
|
288
292
|
namespace: 'web', // Chunk ID prefix
|
|
289
293
|
metadata: { source: 'web' }, // Added to all chunks
|
|
290
294
|
})
|
|
@@ -337,6 +341,67 @@ new ApiDataSource('https://api.example.com/data', {
|
|
|
337
341
|
- JSON path support
|
|
338
342
|
- Flexible content transformation
|
|
339
343
|
|
|
344
|
+
### JSONSource
|
|
345
|
+
|
|
346
|
+
Index data from local JSON files.
|
|
347
|
+
|
|
348
|
+
```typescript
|
|
349
|
+
import { JSONSource } from '@toolpack-sdk/knowledge';
|
|
350
|
+
|
|
351
|
+
new JSONSource('./data/products.json', {
|
|
352
|
+
toContent: (item: any) => `${item.name}\n\n${item.description}`, // Required
|
|
353
|
+
filter: (item: any) => item.active === true, // Optional: filter items
|
|
354
|
+
chunkSize: 100, // Items per chunk (default: 100)
|
|
355
|
+
namespace: 'products',
|
|
356
|
+
metadata: { source: 'products-db' },
|
|
357
|
+
})
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Features:**
|
|
361
|
+
- Parses JSON arrays (or single objects)
|
|
362
|
+
- Optional item-level filtering
|
|
363
|
+
- Required `toContent` callback to control what gets embedded
|
|
364
|
+
|
|
365
|
+
### SQLiteSource
|
|
366
|
+
|
|
367
|
+
Index rows from a SQLite database. Requires `better-sqlite3`.
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
import { SQLiteSource } from '@toolpack-sdk/knowledge';
|
|
371
|
+
|
|
372
|
+
new SQLiteSource('./data/app.db', {
|
|
373
|
+
query: 'SELECT id, title, body FROM articles WHERE published = 1', // Optional: defaults to all rows
|
|
374
|
+
toContent: (row) => `${row.title}\n\n${row.body}`, // Required
|
|
375
|
+
chunkSize: 50, // Rows per chunk (default: 100)
|
|
376
|
+
namespace: 'articles',
|
|
377
|
+
metadata: { source: 'sqlite' },
|
|
378
|
+
preLoadCSV: { // Optional: load a CSV into the DB before querying
|
|
379
|
+
tableName: 'articles',
|
|
380
|
+
csvPath: './data/articles.csv',
|
|
381
|
+
delimiter: ',',
|
|
382
|
+
headers: true,
|
|
383
|
+
},
|
|
384
|
+
})
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### PostgresSource
|
|
388
|
+
|
|
389
|
+
Index rows from a PostgreSQL database. Requires `pg`.
|
|
390
|
+
|
|
391
|
+
```typescript
|
|
392
|
+
import { PostgresSource } from '@toolpack-sdk/knowledge';
|
|
393
|
+
|
|
394
|
+
new PostgresSource({
|
|
395
|
+
connectionString: process.env.DATABASE_URL, // or use host/port/database/user/password
|
|
396
|
+
query: 'SELECT id, title, content FROM docs WHERE status = $1',
|
|
397
|
+
toContent: (row) => `${row.title}\n\n${row.content}`, // Required
|
|
398
|
+
chunkSize: 50,
|
|
399
|
+
namespace: 'docs',
|
|
400
|
+
metadata: { source: 'postgres' },
|
|
401
|
+
ssl: true,
|
|
402
|
+
})
|
|
403
|
+
```
|
|
404
|
+
|
|
340
405
|
## Embedders
|
|
341
406
|
|
|
342
407
|
### OllamaEmbedder
|
|
@@ -345,11 +410,34 @@ Local embeddings via Ollama. Zero API cost.
|
|
|
345
410
|
|
|
346
411
|
```typescript
|
|
347
412
|
new OllamaEmbedder({
|
|
348
|
-
model: 'nomic-embed-text', // or 'mxbai-embed-large'
|
|
413
|
+
model: 'nomic-embed-text', // or 'mxbai-embed-large', 'all-minilm', 'bge-m3', etc.
|
|
349
414
|
baseUrl: 'http://localhost:11434', // default
|
|
415
|
+
dimensions: 768, // optional: override auto-detected dimensions
|
|
416
|
+
retries: 3, // default
|
|
417
|
+
retryDelay: 1000, // ms, default
|
|
418
|
+
})
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
Known models: `nomic-embed-text` (768), `mxbai-embed-large` (1024), `all-minilm` (384), `snowflake-arctic-embed` (1024), `bge-m3` (1024), `bge-large` (1024). Pass `dimensions` for any other model.
|
|
422
|
+
|
|
423
|
+
### OpenRouterEmbedder
|
|
424
|
+
|
|
425
|
+
Embeddings via OpenRouter, giving access to OpenAI embedding models through a single API key.
|
|
426
|
+
|
|
427
|
+
```typescript
|
|
428
|
+
import { OpenRouterEmbedder } from '@toolpack-sdk/knowledge';
|
|
429
|
+
|
|
430
|
+
new OpenRouterEmbedder({
|
|
431
|
+
model: 'openai/text-embedding-3-small', // or 'openai/text-embedding-3-large', 'openai/text-embedding-ada-002'
|
|
432
|
+
apiKey: process.env.OPENROUTER_API_KEY!,
|
|
433
|
+
dimensions: 1536, // optional: override auto-detected dimensions
|
|
434
|
+
retries: 3, // default
|
|
435
|
+
retryDelay: 1000, // ms, default
|
|
350
436
|
})
|
|
351
437
|
```
|
|
352
438
|
|
|
439
|
+
Known models: `openai/text-embedding-3-small` (1536), `openai/text-embedding-3-large` (3072), `openai/text-embedding-ada-002` (1536). Pass `dimensions` for any other model.
|
|
440
|
+
|
|
353
441
|
### OpenAIEmbedder
|
|
354
442
|
|
|
355
443
|
OpenAI text-embedding models with retry logic.
|
|
@@ -364,6 +452,27 @@ new OpenAIEmbedder({
|
|
|
364
452
|
})
|
|
365
453
|
```
|
|
366
454
|
|
|
455
|
+
### VertexAIEmbedder
|
|
456
|
+
|
|
457
|
+
Google Cloud Vertex AI embedding models. Authenticates via [Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/application-default-credentials).
|
|
458
|
+
|
|
459
|
+
```typescript
|
|
460
|
+
import { VertexAIEmbedder } from '@toolpack-sdk/knowledge';
|
|
461
|
+
|
|
462
|
+
new VertexAIEmbedder({
|
|
463
|
+
projectId: 'my-gcp-project', // Required (or set VERTEX_AI_PROJECT / GOOGLE_CLOUD_PROJECT env var)
|
|
464
|
+
location: 'us-central1', // GCP region (default: 'us-central1')
|
|
465
|
+
model: 'gemini-embedding-001', // Embedding model (default: 'gemini-embedding-001')
|
|
466
|
+
outputDimensionality: 3072, // Optional: override output dimensions
|
|
467
|
+
retries: 3, // default
|
|
468
|
+
retryDelay: 1000, // ms, default
|
|
469
|
+
})
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
If `projectId` is not set in options, the embedder falls back to the `VERTEX_AI_PROJECT`, `TOOLPACK_VERTEXAI_PROJECT`, or `GOOGLE_CLOUD_PROJECT` environment variables.
|
|
473
|
+
|
|
474
|
+
Known models: `gemini-embedding-001` (3072), `text-embedding-005` (768), `text-multilingual-embedding-002` (768). Pass `outputDimensionality` for any other model.
|
|
475
|
+
|
|
367
476
|
## API Reference
|
|
368
477
|
|
|
369
478
|
### Knowledge.create()
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
"use strict";var ne=Object.create;var T=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var oe=Object.getPrototypeOf,ie=Object.prototype.hasOwnProperty;var ae=(a,e)=>{for(var t in e)T(a,t,{get:e[t],enumerable:!0})},B=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of se(e))!ie.call(a,n)&&n!==t&&T(a,n,{get:()=>e[n],enumerable:!(r=re(e,n))||r.enumerable});return a};var g=(a,e,t)=>(t=a!=null?ne(oe(a)):{},B(e||!a||!a.__esModule?T(t,"default",{value:a,enumerable:!0}):t,a)),ce=a=>B(T({},"__esModule",{value:!0}),a);var me={};ae(me,{ApiDataSource:()=>L,ChunkTooLargeError:()=>K,DimensionMismatchError:()=>C,EmbeddingError:()=>k,IngestionError:()=>b,Knowledge:()=>z,KnowledgeError:()=>w,KnowledgeProviderError:()=>v,MarkdownSource:()=>N,MemoryProvider:()=>I,OllamaEmbedder:()=>Q,OpenAIEmbedder:()=>U,PersistentKnowledgeProvider:()=>D,WebUrlSource:()=>$,combineScores:()=>A,keywordSearch:()=>E});module.exports=ce(me);var w=class extends Error{constructor(t,r){super(t);this.code=r;this.name="KnowledgeError"}code},k=class extends w{constructor(t,r){super(t,"EMBEDDING_ERROR");this.statusCode=r;this.name="EmbeddingError"}statusCode},b=class extends w{constructor(t,r){super(t,"INGESTION_ERROR");this.file=r;this.name="IngestionError"}file},K=class extends w{constructor(t,r){super(t,"CHUNK_TOO_LARGE");this.chunkSize=r;this.name="ChunkTooLargeError"}chunkSize},C=class extends w{expected;actual;constructor(e,t){super(`Dimension mismatch: expected ${e}, got ${t}`,"DIMENSION_MISMATCH"),this.name="DimensionMismatchError",this.expected=e,this.actual=t}},v=class extends w{constructor(e){super(e,"PROVIDER_ERROR"),this.name="KnowledgeProviderError"}};function E(a,e){let t=a.toLowerCase(),r=e.toLowerCase();if(t.includes(r))return 1;let n=r.split(/\s+/).filter(o=>o.length>2);if(n.length===0)return 0;let s=0;for(let o of n)t.includes(o)&&s++;return s/n.length}function A(a,e,t=.7){let r=1-t;return a*t+e*r}function M(a,e){if(a.length!==e.length)throw new Error("Vectors must have same dimensions");let t=0,r=0,n=0;for(let o=0;o<a.length;o++)t+=a[o]*e[o],r+=a[o]*a[o],n+=e[o]*e[o];let s=Math.sqrt(r)*Math.sqrt(n);return s===0?0:t/s}function x(a,e){if(!e)return!0;for(let[t,r]of Object.entries(e)){let n=a[t];if(typeof r=="object"&&r!==null&&!Array.isArray(r)){if("$in"in r){if(!r.$in.includes(n))return!1}else if("$gt"in r){let s=r.$gt;if(typeof n!="number"||n<=s)return!1}else if("$lt"in r){let s=r.$lt;if(typeof n!="number"||n>=s)return!1}}else if(n!==r)return!1}return!0}var z=class a{constructor(e,t,r,n,s){this.provider=e;this.embedder=t;this.description=r;this.sources=n;this.options=s}provider;embedder;description;sources;options;static async create(e){await e.provider.validateDimensions(e.embedder.dimensions);let t=new a(e.provider,e.embedder,e.description,e.sources,e),r=e.reSync!==!1;return!r&&"shouldReSync"in e.provider?(e.provider.shouldReSync()&&await t.sync(),t):(r&&await t.sync(),t)}async query(e,t){let r=t?.searchType??"semantic",n=t?.semanticWeight??.7;if(r==="keyword")return this.keywordQuery(e,t);if(r==="hybrid"){let[s,o]=await Promise.all([this.semanticQuery(e,t),this.keywordQuery(e,t)]);return this.combineHybridResults(s,o,n,t)}else return this.semanticQuery(e,t)}async semanticQuery(e,t){let r=await this.embedder.embed(e);return this.provider.query(r,t)}async keywordQuery(e,t){let{limit:r=10,threshold:n=.1,filter:s,includeMetadata:o=!0,includeVectors:c=!1}=t||{};if(typeof this.provider.keywordQuery=="function")return this.provider.keywordQuery(e,t);let m=await this.getAllChunks(),i=[];for(let d of m){if(s&&!x(d.metadata,s))continue;let u=E(d.content,e);u>=n&&i.push({chunk:{id:d.id,content:d.content,metadata:o?d.metadata:{},vector:c?d.vector:void 0},score:u,distance:1-u})}return i.sort((d,u)=>u.score-d.score),i.slice(0,r)}combineHybridResults(e,t,r,n){let{limit:s=10,threshold:o=.5,includeMetadata:c=!0,includeVectors:m=!1}=n||{},i=new Map(e.map(l=>[l.chunk.id,l])),d=new Map(t.map(l=>[l.chunk.id,l])),u=[],h=new Set([...i.keys(),...d.keys()]);for(let l of h){let p=i.get(l),P=d.get(l);if(!p&&!P)continue;let ee=p?.score??0,te=P?.score??0,F=A(ee,te,r);F>=o&&u.push({chunk:{id:l,content:p?.chunk.content??P.chunk.content,metadata:c?p?.chunk.metadata??P.chunk.metadata:{},vector:m?p?.chunk.vector??P.chunk.vector:void 0},score:F,distance:1-F})}return u.sort((l,p)=>p.score-l.score),u.slice(0,s)}async getAllChunks(){if(typeof this.provider.getAllChunks=="function")return this.provider.getAllChunks();let e=new Array(this.embedder.dimensions).fill(0);return(await this.provider.query(e,{limit:1e4,threshold:0})).map(t=>t.chunk)}async sync(){this.options.onSync?.({type:"start"});try{let e=this.embedder.dimensions;await this.provider.clear(),await this.provider.validateDimensions(e);let t=this.options.streamingBatchSize??100,r=0,n=[];for(let s of this.sources)for await(let o of s.load())if(n.push(o),n.length>=t){let c=await this.embedChunks(n);c.length>0&&(await this.provider.add(c),r+=c.length),n.length=0}if(n.length>0){let s=await this.embedChunks(n);s.length>0&&(await this.provider.add(s),r+=s.length)}this.options.onSync?.({type:"complete",chunksAffected:r})}catch(e){throw this.options.onSync?.({type:"error",error:e}),e}}async embedChunks(e){if(e.length===0)return[];let t=[];try{let r=e.map(s=>s.content),n=await this.embedder.embedBatch(r);for(let s=0;s<e.length;s++)t.push({...e[s],vector:n[s]}),this.options.onEmbeddingProgress?.({source:"sync",current:s+1,total:e.length,percent:Math.round((s+1)/e.length*100)})}catch(r){if(this.options.onError?.(r,{})==="abort")throw r;for(let s=0;s<e.length;s++)try{let o=await this.embedder.embed(e[s].content);t.push({...e[s],vector:o}),this.options.onEmbeddingProgress?.({source:"sync",current:s+1,total:e.length,percent:Math.round((s+1)/e.length*100)})}catch(o){if(this.options.onError?.(o,{chunk:e[s]})==="abort")throw o}}return t}async stop(){this.provider.close&&this.provider.close()}toTool(){return{name:"knowledge_search",displayName:"Knowledge Search",description:this.description||"Search the knowledge base for relevant information",category:"search",cacheable:!1,parameters:{type:"object",properties:{query:{type:"string",description:"Search query to find relevant information"},limit:{type:"number",description:"Maximum number of results to return (default: 10)"},threshold:{type:"number",description:"Minimum similarity threshold 0-1 (default: 0.7)"},filter:{type:"object",description:"Optional metadata filters"}},required:["query"]},execute:async e=>(await this.query(e.query,{limit:e.limit,threshold:e.threshold,filter:e.filter})).map(r=>({content:r.chunk.content,score:r.score,metadata:r.chunk.metadata}))}}};var I=class{constructor(e={}){this.options=e}options;chunks=new Map;dimensions;async validateDimensions(e){if(this.dimensions&&this.dimensions!==e)throw new C(this.dimensions,e);this.dimensions=e}async add(e){for(let t of e){if(!t.vector)throw new v("Chunk missing vector");if(this.options.maxChunks&&this.chunks.size>=this.options.maxChunks)throw new v(`Max chunks limit reached: ${this.options.maxChunks}`);this.chunks.set(t.id,{chunk:{id:t.id,content:t.content,metadata:t.metadata},vector:t.vector})}}async query(e,t={}){let{limit:r=10,threshold:n=.7,filter:s,includeMetadata:o=!0,includeVectors:c=!1}=t,m=[];for(let{chunk:i,vector:d}of this.chunks.values()){if(s&&!x(i.metadata,s))continue;let u=M(e,d);u>=n&&m.push({chunk:{id:i.id,content:i.content,metadata:o?i.metadata:{},vector:c?d:void 0},score:u,distance:1-u})}return m.sort((i,d)=>d.score-i.score),m.slice(0,r)}async keywordQuery(e,t={}){let{limit:r=10,threshold:n=.1,filter:s,includeMetadata:o=!0,includeVectors:c=!1}=t,m=[];for(let{chunk:i,vector:d}of this.chunks.values()){if(s&&!x(i.metadata,s))continue;let u=E(i.content,e);u>=n&&m.push({chunk:{id:i.id,content:i.content,metadata:o?i.metadata:{},vector:c?d:void 0},score:u,distance:1-u})}return m.sort((i,d)=>d.score-i.score),m.slice(0,r)}async delete(e){for(let t of e)this.chunks.delete(t)}async clear(){this.chunks.clear(),this.dimensions=void 0}async getAllChunks(){return Array.from(this.chunks.values()).map(({chunk:e,vector:t})=>({...e,vector:t}))}};var q=g(require("better-sqlite3"),1),W=g(require("fs"),1),_=g(require("path"),1),V=g(require("os"),1);var D=class{constructor(e){this.options=e;let t=e.storagePath||_.join(V.homedir(),".toolpack","knowledge");this.dbPath=_.join(t,`${e.namespace}.db`),W.mkdirSync(t,{recursive:!0}),this.db=new q.default(this.dbPath),this.db.pragma("journal_mode = WAL"),this.initSchema(),this.loadDimensions()}options;db;dimensions;dbPath;initSchema(){this.db.exec(`
|
|
1
|
+
"use strict";var Ss=Object.create;var we=Object.defineProperty;var vs=Object.getOwnPropertyDescriptor;var Es=Object.getOwnPropertyNames;var _s=Object.getPrototypeOf,ks=Object.prototype.hasOwnProperty;var cr=(r,e)=>()=>(r&&(e=r(r=0)),e);var g=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ur=(r,e)=>{for(var t in e)we(r,t,{get:e[t],enumerable:!0})},lr=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Es(e))!ks.call(r,s)&&s!==t&&we(r,s,{get:()=>e[s],enumerable:!(n=vs(e,s))||n.enumerable});return r};var _=(r,e,t)=>(t=r!=null?Ss(_s(r)):{},lr(e||!r||!r.__esModule?we(t,"default",{value:r,enumerable:!0}):t,r)),Cs=r=>lr(we({},"__esModule",{value:!0}),r);var l=cr(()=>{"use strict"});var st=g(vr=>{"use strict";l();vr.parse=function(r,e){return new nt(r,e).parse()};var nt=class r{constructor(e,t){this.source=e,this.transform=t||As,this.position=0,this.entries=[],this.recorded=[],this.dimension=0}isEof(){return this.position>=this.source.length}nextCharacter(){var e=this.source[this.position++];return e==="\\"?{value:this.source[this.position++],escaped:!0}:{value:e,escaped:!1}}record(e){this.recorded.push(e)}newEntry(e){var t;(this.recorded.length>0||e)&&(t=this.recorded.join(""),t==="NULL"&&!e&&(t=null),t!==null&&(t=this.transform(t)),this.entries.push(t),this.recorded=[])}consumeDimensions(){if(this.source[0]==="[")for(;!this.isEof();){var e=this.nextCharacter();if(e.value==="=")break}}parse(e){var t,n,s;for(this.consumeDimensions();!this.isEof();)if(t=this.nextCharacter(),t.value==="{"&&!s)this.dimension++,this.dimension>1&&(n=new r(this.source.substr(this.position-1),this.transform),this.entries.push(n.parse(!0)),this.position+=n.position-2);else if(t.value==="}"&&!s){if(this.dimension--,!this.dimension&&(this.newEntry(),e))return this.entries}else t.value==='"'&&!t.escaped?(s&&this.newEntry(!0),s=!s):t.value===","&&!s?this.newEntry():this.record(t.value);if(this.dimension!==0)throw new Error("array dimension not balanced");return this.entries}};function As(r){return r}});var it=g((uu,Er)=>{"use strict";l();var Rs=st();Er.exports={create:function(r,e){return{parse:function(){return Rs.parse(r,e)}}}}});var Cr=g((hu,kr)=>{"use strict";l();var Ts=/(\d{1,})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(\.\d{1,})?.*?( BC)?$/,Is=/^(\d{1,})-(\d{2})-(\d{2})( BC)?$/,Os=/([Z+-])(\d{2})?:?(\d{2})?:?(\d{2})?/,Ms=/^-?infinity$/;kr.exports=function(e){if(Ms.test(e))return Number(e.replace("i","I"));var t=Ts.exec(e);if(!t)return qs(e)||null;var n=!!t[8],s=parseInt(t[1],10);n&&(s=_r(s));var i=parseInt(t[2],10)-1,o=t[3],a=parseInt(t[4],10),u=parseInt(t[5],10),c=parseInt(t[6],10),h=t[7];h=h?1e3*parseFloat(h):0;var d,p=Ds(e);return p!=null?(d=new Date(Date.UTC(s,i,o,a,u,c,h)),ot(s)&&d.setUTCFullYear(s),p!==0&&d.setTime(d.getTime()-p)):(d=new Date(s,i,o,a,u,c,h),ot(s)&&d.setFullYear(s)),d};function qs(r){var e=Is.exec(r);if(e){var t=parseInt(e[1],10),n=!!e[4];n&&(t=_r(t));var s=parseInt(e[2],10)-1,i=e[3],o=new Date(t,s,i);return ot(t)&&o.setFullYear(t),o}}function Ds(r){if(r.endsWith("+00"))return 0;var e=Os.exec(r.split(" ")[1]);if(e){var t=e[1];if(t==="Z")return 0;var n=t==="-"?-1:1,s=parseInt(e[2],10)*3600+parseInt(e[3]||0,10)*60+parseInt(e[4]||0,10);return s*n*1e3}}function _r(r){return-(r-1)}function ot(r){return r>=0&&r<100}});var Pr=g((fu,xr)=>{"use strict";l();xr.exports=Qs;var Ls=Object.prototype.hasOwnProperty;function Qs(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var n in t)Ls.call(t,n)&&(r[n]=t[n])}return r}});var Tr=g((mu,Rr)=>{"use strict";l();var Ns=Pr();Rr.exports=J;function J(r){if(!(this instanceof J))return new J(r);Ns(this,Js(r))}var Bs=["seconds","minutes","hours","days","months","years"];J.prototype.toPostgres=function(){var r=Bs.filter(this.hasOwnProperty,this);return this.milliseconds&&r.indexOf("seconds")<0&&r.push("seconds"),r.length===0?"0":r.map(function(e){var t=this[e]||0;return e==="seconds"&&this.milliseconds&&(t=(t+this.milliseconds/1e3).toFixed(6).replace(/\.?0+$/,"")),t+" "+e},this).join(" ")};var Fs={years:"Y",months:"M",days:"D",hours:"H",minutes:"M",seconds:"S"},Us=["years","months","days"],js=["hours","minutes","seconds"];J.prototype.toISOString=J.prototype.toISO=function(){var r=Us.map(t,this).join(""),e=js.map(t,this).join("");return"P"+r+"T"+e;function t(n){var s=this[n]||0;return n==="seconds"&&this.milliseconds&&(s=(s+this.milliseconds/1e3).toFixed(6).replace(/0+$/,"")),s+Fs[n]}};var at="([+-]?\\d+)",$s=at+"\\s+years?",Hs=at+"\\s+mons?",zs=at+"\\s+days?",Gs="([+-])?([\\d]*):(\\d\\d):(\\d\\d)\\.?(\\d{1,6})?",Ks=new RegExp([$s,Hs,zs,Gs].map(function(r){return"("+r+")?"}).join("\\s*")),Ar={years:2,months:4,days:6,hours:9,minutes:10,seconds:11,milliseconds:12},Vs=["hours","minutes","seconds","milliseconds"];function Ws(r){var e=r+"000000".slice(r.length);return parseInt(e,10)/1e3}function Js(r){if(!r)return{};var e=Ks.exec(r),t=e[8]==="-";return Object.keys(Ar).reduce(function(n,s){var i=Ar[s],o=e[i];return!o||(o=s==="milliseconds"?Ws(o):parseInt(o,10),!o)||(t&&~Vs.indexOf(s)&&(o*=-1),n[s]=o),n},{})}});var Mr=g((gu,Or)=>{"use strict";l();var Ir=Buffer.from||Buffer;Or.exports=function(e){if(/^\\x/.test(e))return Ir(e.substr(2),"hex");for(var t="",n=0;n<e.length;)if(e[n]!=="\\")t+=e[n],++n;else if(/[0-7]{3}/.test(e.substr(n+1,3)))t+=String.fromCharCode(parseInt(e.substr(n+1,3),8)),n+=4;else{for(var s=1;n+s<e.length&&e[n+s]==="\\";)s++;for(var i=0;i<Math.floor(s/2);++i)t+="\\";n+=Math.floor(s/2)*2}return Ir(t,"binary")}});var Fr=g((wu,Br)=>{"use strict";l();var ce=st(),ue=it(),Re=Cr(),Dr=Tr(),Lr=Mr();function Te(r){return function(t){return t===null?t:r(t)}}function Qr(r){return r===null?r:r==="TRUE"||r==="t"||r==="true"||r==="y"||r==="yes"||r==="on"||r==="1"}function Ys(r){return r?ce.parse(r,Qr):null}function Xs(r){return parseInt(r,10)}function ct(r){return r?ce.parse(r,Te(Xs)):null}function Zs(r){return r?ce.parse(r,Te(function(e){return Nr(e).trim()})):null}var ei=function(r){if(!r)return null;var e=ue.create(r,function(t){return t!==null&&(t=dt(t)),t});return e.parse()},ut=function(r){if(!r)return null;var e=ue.create(r,function(t){return t!==null&&(t=parseFloat(t)),t});return e.parse()},M=function(r){if(!r)return null;var e=ue.create(r);return e.parse()},lt=function(r){if(!r)return null;var e=ue.create(r,function(t){return t!==null&&(t=Re(t)),t});return e.parse()},ti=function(r){if(!r)return null;var e=ue.create(r,function(t){return t!==null&&(t=Dr(t)),t});return e.parse()},ri=function(r){return r?ce.parse(r,Te(Lr)):null},ht=function(r){return parseInt(r,10)},Nr=function(r){var e=String(r);return/^\d+$/.test(e)?e:r},qr=function(r){return r?ce.parse(r,Te(JSON.parse)):null},dt=function(r){return r[0]!=="("?null:(r=r.substring(1,r.length-1).split(","),{x:parseFloat(r[0]),y:parseFloat(r[1])})},ni=function(r){if(r[0]!=="<"&&r[1]!=="(")return null;for(var e="(",t="",n=!1,s=2;s<r.length-1;s++){if(n||(e+=r[s]),r[s]===")"){n=!0;continue}else if(!n)continue;r[s]!==","&&(t+=r[s])}var i=dt(e);return i.radius=parseFloat(t),i},si=function(r){r(20,Nr),r(21,ht),r(23,ht),r(26,ht),r(700,parseFloat),r(701,parseFloat),r(16,Qr),r(1082,Re),r(1114,Re),r(1184,Re),r(600,dt),r(651,M),r(718,ni),r(1e3,Ys),r(1001,ri),r(1005,ct),r(1007,ct),r(1028,ct),r(1016,Zs),r(1017,ei),r(1021,ut),r(1022,ut),r(1231,ut),r(1014,M),r(1015,M),r(1008,M),r(1009,M),r(1040,M),r(1041,M),r(1115,lt),r(1182,lt),r(1185,lt),r(1186,Dr),r(1187,ti),r(17,Lr),r(114,JSON.parse.bind(JSON)),r(3802,JSON.parse.bind(JSON)),r(199,qr),r(3807,qr),r(3907,M),r(2951,M),r(791,M),r(1183,M),r(1270,M)};Br.exports={init:si}});var jr=g((vu,Ur)=>{"use strict";l();var A=1e6;function ii(r){var e=r.readInt32BE(0),t=r.readUInt32BE(4),n="";e<0&&(e=~e+(t===0),t=~t+1>>>0,n="-");var s="",i,o,a,u,c,h;{if(i=e%A,e=e/A>>>0,o=4294967296*i+t,t=o/A>>>0,a=""+(o-A*t),t===0&&e===0)return n+a+s;for(u="",c=6-a.length,h=0;h<c;h++)u+="0";s=u+a+s}{if(i=e%A,e=e/A>>>0,o=4294967296*i+t,t=o/A>>>0,a=""+(o-A*t),t===0&&e===0)return n+a+s;for(u="",c=6-a.length,h=0;h<c;h++)u+="0";s=u+a+s}{if(i=e%A,e=e/A>>>0,o=4294967296*i+t,t=o/A>>>0,a=""+(o-A*t),t===0&&e===0)return n+a+s;for(u="",c=6-a.length,h=0;h<c;h++)u+="0";s=u+a+s}return i=e%A,o=4294967296*i+t,a=""+o%A,n+a+s}Ur.exports=ii});var Kr=g((_u,Gr)=>{"use strict";l();var oi=jr(),S=function(r,e,t,n,s){t=t||0,n=n||!1,s=s||function(m,b,R){return m*Math.pow(2,R)+b};var i=t>>3,o=function(m){return n?~m&255:m},a=255,u=8-t%8;e<u&&(a=255<<8-e&255,u=e),t&&(a=a>>t%8);var c=0;t%8+e>=8&&(c=s(0,o(r[i])&a,u));for(var h=e+t>>3,d=i+1;d<h;d++)c=s(c,o(r[d]),8);var p=(e+t)%8;return p>0&&(c=s(c,o(r[h])>>8-p,p)),c},zr=function(r,e,t){var n=Math.pow(2,t-1)-1,s=S(r,1),i=S(r,t,1);if(i===0)return 0;var o=1,a=function(c,h,d){c===0&&(c=1);for(var p=1;p<=d;p++)o/=2,(h&1<<d-p)>0&&(c+=o);return c},u=S(r,e,t+1,!1,a);return i==Math.pow(2,t+1)-1?u===0?s===0?1/0:-1/0:NaN:(s===0?1:-1)*Math.pow(2,i-n)*u},ai=function(r){return S(r,1)==1?-1*(S(r,15,1,!0)+1):S(r,15,1)},$r=function(r){return S(r,1)==1?-1*(S(r,31,1,!0)+1):S(r,31,1)},ci=function(r){return zr(r,23,8)},ui=function(r){return zr(r,52,11)},li=function(r){var e=S(r,16,32);if(e==49152)return NaN;for(var t=Math.pow(1e4,S(r,16,16)),n=0,s=[],i=S(r,16),o=0;o<i;o++)n+=S(r,16,64+16*o)*t,t/=1e4;var a=Math.pow(10,S(r,16,48));return(e===0?1:-1)*Math.round(n*a)/a},Hr=function(r,e){var t=S(e,1),n=S(e,63,1),s=new Date((t===0?1:-1)*n/1e3+9466848e5);return r||s.setTime(s.getTime()+s.getTimezoneOffset()*6e4),s.usec=n%1e3,s.getMicroSeconds=function(){return this.usec},s.setMicroSeconds=function(i){this.usec=i},s.getUTCMicroSeconds=function(){return this.usec},s},le=function(r){for(var e=S(r,32),t=S(r,32,32),n=S(r,32,64),s=96,i=[],o=0;o<e;o++)i[o]=S(r,32,s),s+=32,s+=32;var a=function(c){var h=S(r,32,s);if(s+=32,h==4294967295)return null;var d;if(c==23||c==20)return d=S(r,h*8,s),s+=h*8,d;if(c==25)return d=r.toString(this.encoding,s>>3,(s+=h<<3)>>3),d;console.log("ERROR: ElementType not implemented: "+c)},u=function(c,h){var d=[],p;if(c.length>1){var m=c.shift();for(p=0;p<m;p++)d[p]=u(c,h);c.unshift(m)}else for(p=0;p<c[0];p++)d[p]=a(h);return d};return u(i,n)},hi=function(r){return r.toString("utf8")},di=function(r){return r===null?null:S(r,8)>0},fi=function(r){r(20,oi),r(21,ai),r(23,$r),r(26,$r),r(1700,li),r(700,ci),r(701,ui),r(16,di),r(1114,Hr.bind(null,!1)),r(1184,Hr.bind(null,!0)),r(1e3,le),r(1007,le),r(1016,le),r(1008,le),r(1009,le),r(25,hi)};Gr.exports={init:fi}});var Wr=g((Cu,Vr)=>{"use strict";l();Vr.exports={BOOL:16,BYTEA:17,CHAR:18,INT8:20,INT2:21,INT4:23,REGPROC:24,TEXT:25,OID:26,TID:27,XID:28,CID:29,JSON:114,XML:142,PG_NODE_TREE:194,SMGR:210,PATH:602,POLYGON:604,CIDR:650,FLOAT4:700,FLOAT8:701,ABSTIME:702,RELTIME:703,TINTERVAL:704,CIRCLE:718,MACADDR8:774,MONEY:790,MACADDR:829,INET:869,ACLITEM:1033,BPCHAR:1042,VARCHAR:1043,DATE:1082,TIME:1083,TIMESTAMP:1114,TIMESTAMPTZ:1184,INTERVAL:1186,TIMETZ:1266,BIT:1560,VARBIT:1562,NUMERIC:1700,REFCURSOR:1790,REGPROCEDURE:2202,REGOPER:2203,REGOPERATOR:2204,REGCLASS:2205,REGTYPE:2206,UUID:2950,TXID_SNAPSHOT:2970,PG_LSN:3220,PG_NDISTINCT:3361,PG_DEPENDENCIES:3402,TSVECTOR:3614,TSQUERY:3615,GTSVECTOR:3642,REGCONFIG:3734,REGDICTIONARY:3769,JSONB:3802,REGNAMESPACE:4089,REGROLE:4096}});var fe=g(de=>{"use strict";l();var pi=Fr(),mi=Kr(),yi=it(),gi=Wr();de.getTypeParser=bi;de.setTypeParser=wi;de.arrayParser=yi;de.builtins=gi;var he={text:{},binary:{}};function Jr(r){return String(r)}function bi(r,e){return e=e||"text",he[e]&&he[e][r]||Jr}function wi(r,e,t){typeof e=="function"&&(t=e,e="text"),he[e][r]=t}pi.init(function(r,e){he.text[r]=e});mi.init(function(r,e){he.binary[r]=e})});var pe=g((Ru,ft)=>{"use strict";l();var Yr;try{Yr=process.platform==="win32"?process.env.USERNAME:process.env.USER}catch{}ft.exports={host:"localhost",user:Yr,database:void 0,password:null,connectionString:void 0,port:5432,rows:0,binary:!1,max:10,idleTimeoutMillis:3e4,client_encoding:"",ssl:!1,application_name:void 0,fallback_application_name:void 0,options:void 0,parseInputDatesAsUTC:!1,statement_timeout:!1,lock_timeout:!1,idle_in_transaction_session_timeout:!1,query_timeout:!1,connect_timeout:0,keepalives:1,keepalives_idle:0};var Y=fe(),Si=Y.getTypeParser(20,"text"),vi=Y.getTypeParser(1016,"text");ft.exports.__defineSetter__("parseInt8",function(r){Y.setTypeParser(20,"text",r?Y.getTypeParser(23,"text"):Si),Y.setTypeParser(1016,"text",r?Y.getTypeParser(1007,"text"):vi)})});var X=g((Iu,en)=>{"use strict";l();var Ei=pe(),Xr=require("util"),{isDate:_i}=Xr.types||Xr;function ki(r){return'"'+r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}function Zr(r){let e="{";for(let t=0;t<r.length;t++)if(t>0&&(e=e+","),r[t]===null||typeof r[t]>"u")e=e+"NULL";else if(Array.isArray(r[t]))e=e+Zr(r[t]);else if(ArrayBuffer.isView(r[t])){let n=r[t];if(!(n instanceof Buffer)){let s=Buffer.from(n.buffer,n.byteOffset,n.byteLength);s.length===n.byteLength?n=s:n=s.slice(n.byteOffset,n.byteOffset+n.byteLength)}e+="\\\\x"+n.toString("hex")}else e+=ki(Ie(r[t]));return e=e+"}",e}var Ie=function(r,e){if(r==null)return null;if(typeof r=="object"){if(r instanceof Buffer)return r;if(ArrayBuffer.isView(r)){let t=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return t.length===r.byteLength?t:t.slice(r.byteOffset,r.byteOffset+r.byteLength)}return _i(r)?Ei.parseInputDatesAsUTC?Pi(r):xi(r):Array.isArray(r)?Zr(r):Ci(r,e)}return r.toString()};function Ci(r,e){if(r&&typeof r.toPostgres=="function"){if(e=e||[],e.indexOf(r)!==-1)throw new Error('circular reference detected while preparing "'+r+'" for query');return e.push(r),Ie(r.toPostgres(Ie),e)}return JSON.stringify(r)}function xi(r){let e=-r.getTimezoneOffset(),t=r.getFullYear(),n=t<1;n&&(t=Math.abs(t)+1);let s=String(t).padStart(4,"0")+"-"+String(r.getMonth()+1).padStart(2,"0")+"-"+String(r.getDate()).padStart(2,"0")+"T"+String(r.getHours()).padStart(2,"0")+":"+String(r.getMinutes()).padStart(2,"0")+":"+String(r.getSeconds()).padStart(2,"0")+"."+String(r.getMilliseconds()).padStart(3,"0");return e<0?(s+="-",e*=-1):s+="+",s+=String(Math.floor(e/60)).padStart(2,"0")+":"+String(e%60).padStart(2,"0"),n&&(s+=" BC"),s}function Pi(r){let e=r.getUTCFullYear(),t=e<1;t&&(e=Math.abs(e)+1);let n=String(e).padStart(4,"0")+"-"+String(r.getUTCMonth()+1).padStart(2,"0")+"-"+String(r.getUTCDate()).padStart(2,"0")+"T"+String(r.getUTCHours()).padStart(2,"0")+":"+String(r.getUTCMinutes()).padStart(2,"0")+":"+String(r.getUTCSeconds()).padStart(2,"0")+"."+String(r.getUTCMilliseconds()).padStart(3,"0");return n+="+00:00",t&&(n+=" BC"),n}function Ai(r,e,t){return r=typeof r=="string"?{text:r}:r,e&&(typeof e=="function"?r.callback=e:r.values=e),t&&(r.callback=t),r}var Ri=function(r){return'"'+r.replace(/"/g,'""')+'"'},Ti=function(r){let e=!1,t="'";if(r==null||typeof r!="string")return"''";for(let n=0;n<r.length;n++){let s=r[n];s==="'"?t+=s+s:s==="\\"?(t+=s+s,e=!0):t+=s}return t+="'",e===!0&&(t=" E"+t),t};en.exports={prepareValue:function(e){return Ie(e)},normalizeQueryConfig:Ai,escapeIdentifier:Ri,escapeLiteral:Ti}});var rn=g((Mu,tn)=>{"use strict";l();var Z=require("crypto");function pt(r){return Z.createHash("md5").update(r,"utf-8").digest("hex")}function Ii(r,e,t){let n=pt(e+r);return"md5"+pt(Buffer.concat([Buffer.from(n),t]))}function Oi(r){return Z.createHash("sha256").update(r).digest()}function Mi(r,e){return r=r.replace(/(\D)-/,"$1"),Z.createHash(r).update(e).digest()}function qi(r,e){return Z.createHmac("sha256",r).update(e).digest()}async function Di(r,e,t){return Z.pbkdf2Sync(r,e,t,32,"sha256")}tn.exports={postgresMd5PasswordHash:Ii,randomBytes:Z.randomBytes,deriveKey:Di,sha256:Oi,hashByName:Mi,hmacSha256:qi,md5:pt}});var an=g((Du,on)=>{"use strict";l();var nn=require("crypto");on.exports={postgresMd5PasswordHash:Qi,randomBytes:Li,deriveKey:Ui,sha256:Ni,hashByName:Bi,hmacSha256:Fi,md5:mt};var sn=nn.webcrypto||globalThis.crypto,z=sn.subtle,yt=new TextEncoder;function Li(r){return sn.getRandomValues(Buffer.alloc(r))}async function mt(r){try{return nn.createHash("md5").update(r,"utf-8").digest("hex")}catch{let t=typeof r=="string"?yt.encode(r):r,n=await z.digest("MD5",t);return Array.from(new Uint8Array(n)).map(s=>s.toString(16).padStart(2,"0")).join("")}}async function Qi(r,e,t){let n=await mt(e+r);return"md5"+await mt(Buffer.concat([Buffer.from(n),t]))}async function Ni(r){return await z.digest("SHA-256",r)}async function Bi(r,e){return await z.digest(r,e)}async function Fi(r,e){let t=await z.importKey("raw",r,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return await z.sign("HMAC",t,yt.encode(e))}async function Ui(r,e,t){let n=await z.importKey("raw",yt.encode(r),"PBKDF2",!1,["deriveBits"]),s={name:"PBKDF2",hash:"SHA-256",salt:e,iterations:t};return await z.deriveBits(s,n,256,["deriveBits"])}});var bt=g((Qu,gt)=>{"use strict";l();var ji=parseInt(process.versions&&process.versions.node&&process.versions.node.split(".")[0])<15;ji?gt.exports=rn():gt.exports=an()});var ln=g((Bu,un)=>{"use strict";l();function G(r,e){return new Error("SASL channel binding: "+r+" when parsing public certificate "+e.toString("base64"))}function wt(r,e){let t=r[e++];if(t<128)return{length:t,index:e};let n=t&127;if(n>4)throw G("bad length",r);t=0;for(let s=0;s<n;s++)t=t<<8|r[e++];return{length:t,index:e}}function cn(r,e){if(r[e++]!==6)throw G("non-OID data",r);let{length:t,index:n}=wt(r,e);e=n;let s=e+t,i=r[e++],o=(i/40>>0)+"."+i%40;for(;e<s;){let a=0;for(;e<s;){let u=r[e++];if(a=a<<7|u&127,u<128)break}o+="."+a}return{oid:o,index:e}}function me(r,e){if(r[e++]!==48)throw G("non-sequence data",r);return wt(r,e)}function $i(r,e){e===void 0&&(e=0),e=me(r,e).index;let{length:t,index:n}=me(r,e);e=n+t,e=me(r,e).index;let{oid:s,index:i}=cn(r,e);switch(s){case"1.2.840.113549.1.1.4":return"MD5";case"1.2.840.113549.1.1.5":return"SHA-1";case"1.2.840.113549.1.1.11":return"SHA-256";case"1.2.840.113549.1.1.12":return"SHA-384";case"1.2.840.113549.1.1.13":return"SHA-512";case"1.2.840.113549.1.1.14":return"SHA-224";case"1.2.840.113549.1.1.15":return"SHA512-224";case"1.2.840.113549.1.1.16":return"SHA512-256";case"1.2.840.10045.4.1":return"SHA-1";case"1.2.840.10045.4.3.1":return"SHA-224";case"1.2.840.10045.4.3.2":return"SHA-256";case"1.2.840.10045.4.3.3":return"SHA-384";case"1.2.840.10045.4.3.4":return"SHA-512";case"1.2.840.113549.1.1.10":{if(e=i,e=me(r,e).index,r[e++]!==160)throw G("non-tag data",r);e=wt(r,e).index,e=me(r,e).index;let{oid:o}=cn(r,e);switch(o){case"1.2.840.113549.2.5":return"MD5";case"1.3.14.3.2.26":return"SHA-1";case"2.16.840.1.101.3.4.2.1":return"SHA-256";case"2.16.840.1.101.3.4.2.2":return"SHA-384";case"2.16.840.1.101.3.4.2.3":return"SHA-512"}throw G("unknown hash OID "+o,r)}case"1.3.101.110":case"1.3.101.112":return"SHA-512";case"1.3.101.111":case"1.3.101.113":throw G("Ed448 certificate channel binding is not currently supported by Postgres")}throw G("unknown OID "+s,r)}un.exports={signatureAlgorithmHashFromCertificate:$i}});var pn=g((Uu,fn)=>{"use strict";l();var U=bt(),{signatureAlgorithmHashFromCertificate:Hi}=ln();function zi(r,e){let t=["SCRAM-SHA-256"];e&&t.unshift("SCRAM-SHA-256-PLUS");let n=t.find(o=>r.includes(o));if(!n)throw new Error("SASL: Only mechanism(s) "+t.join(" and ")+" are supported");if(n==="SCRAM-SHA-256-PLUS"&&typeof e.getPeerCertificate!="function")throw new Error("SASL: Mechanism SCRAM-SHA-256-PLUS requires a certificate");let s=U.randomBytes(18).toString("base64");return{mechanism:n,clientNonce:s,response:(n==="SCRAM-SHA-256-PLUS"?"p=tls-server-end-point":e?"y":"n")+",,n=*,r="+s,message:"SASLInitialResponse"}}async function Gi(r,e,t,n){if(r.message!=="SASLInitialResponse")throw new Error("SASL: Last message was not SASLInitialResponse");if(typeof e!="string")throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string");if(e==="")throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a non-empty string");if(typeof t!="string")throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: serverData must be a string");let s=Wi(t);if(s.nonce.startsWith(r.clientNonce)){if(s.nonce.length===r.clientNonce.length)throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce is too short")}else throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: server nonce does not start with client nonce");let i="n=*,r="+r.clientNonce,o="r="+s.nonce+",s="+s.salt+",i="+s.iteration,a=n?"eSws":"biws";if(r.mechanism==="SCRAM-SHA-256-PLUS"){let K=n.getPeerCertificate().raw,be=Hi(K);(be==="MD5"||be==="SHA-1")&&(be="SHA-256");let ws=await U.hashByName(be,K);a=Buffer.concat([Buffer.from("p=tls-server-end-point,,"),Buffer.from(ws)]).toString("base64")}let u="c="+a+",r="+s.nonce,c=i+","+o+","+u,h=Buffer.from(s.salt,"base64"),d=await U.deriveKey(e,h,s.iteration),p=await U.hmacSha256(d,"Client Key"),m=await U.sha256(p),b=await U.hmacSha256(m,c),R=Yi(Buffer.from(p),Buffer.from(b)).toString("base64"),Je=await U.hmacSha256(d,"Server Key"),Ye=await U.hmacSha256(Je,c);r.message="SASLResponse",r.serverSignature=Buffer.from(Ye).toString("base64"),r.response=u+",p="+R}function Ki(r,e){if(r.message!=="SASLResponse")throw new Error("SASL: Last message was not SASLResponse");if(typeof e!="string")throw new Error("SASL: SCRAM-SERVER-FINAL-MESSAGE: serverData must be a string");let{serverSignature:t}=Ji(e);if(t!==r.serverSignature)throw new Error("SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature does not match")}function Vi(r){if(typeof r!="string")throw new TypeError("SASL: text must be a string");return r.split("").map((e,t)=>r.charCodeAt(t)).every(e=>e>=33&&e<=43||e>=45&&e<=126)}function hn(r){return/^(?:[a-zA-Z0-9+/]{4})*(?:[a-zA-Z0-9+/]{2}==|[a-zA-Z0-9+/]{3}=)?$/.test(r)}function dn(r){if(typeof r!="string")throw new TypeError("SASL: attribute pairs text must be a string");return new Map(r.split(",").map(e=>{if(!/^.=/.test(e))throw new Error("SASL: Invalid attribute pair entry");let t=e[0],n=e.substring(2);return[t,n]}))}function Wi(r){let e=dn(r),t=e.get("r");if(t){if(!Vi(t))throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce must only contain printable characters")}else throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: nonce missing");let n=e.get("s");if(n){if(!hn(n))throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: salt must be base64")}else throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: salt missing");let s=e.get("i");if(s){if(!/^[1-9][0-9]*$/.test(s))throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: invalid iteration count")}else throw new Error("SASL: SCRAM-SERVER-FIRST-MESSAGE: iteration missing");let i=parseInt(s,10);return{nonce:t,salt:n,iteration:i}}function Ji(r){let t=dn(r).get("v");if(t){if(!hn(t))throw new Error("SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature must be base64")}else throw new Error("SASL: SCRAM-SERVER-FINAL-MESSAGE: server signature is missing");return{serverSignature:t}}function Yi(r,e){if(!Buffer.isBuffer(r))throw new TypeError("first argument must be a Buffer");if(!Buffer.isBuffer(e))throw new TypeError("second argument must be a Buffer");if(r.length!==e.length)throw new Error("Buffer lengths must match");if(r.length===0)throw new Error("Buffers cannot be empty");return Buffer.from(r.map((t,n)=>r[n]^e[n]))}fn.exports={startSession:zi,continueSession:Gi,finalizeSession:Ki}});var Me=g(($u,mn)=>{"use strict";l();var Xi=fe();function Oe(r){this._types=r||Xi,this.text={},this.binary={}}Oe.prototype.getOverrides=function(r){switch(r){case"text":return this.text;case"binary":return this.binary;default:return{}}};Oe.prototype.setTypeParser=function(r,e,t){typeof e=="function"&&(t=e,e="text"),this.getOverrides(e)[r]=t};Oe.prototype.getTypeParser=function(r,e){return e=e||"text",this.getOverrides(e)[r]||this._types.getTypeParser(r,e)};mn.exports=Oe});var bn=g((zu,gn)=>{"use strict";l();function ee(r,e={}){if(r.charAt(0)==="/"){let u=r.split(" ");return{host:u[0],database:u[1]}}let t={},n,s=!1;/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(r)&&(r=encodeURI(r).replace(/%25(\d\d)/g,"%$1"));try{try{n=new URL(r,"postgres://base")}catch{n=new URL(r.replace("@/","@___DUMMY___/"),"postgres://base"),s=!0}}catch(u){throw u.input&&(u.input="*****REDACTED*****"),u}for(let u of n.searchParams.entries())t[u[0]]=u[1];if(t.user=t.user||decodeURIComponent(n.username),t.password=t.password||decodeURIComponent(n.password),n.protocol=="socket:")return t.host=decodeURI(n.pathname),t.database=n.searchParams.get("db"),t.client_encoding=n.searchParams.get("encoding"),t;let i=s?"":n.hostname;t.host?i&&/^%2f/i.test(i)&&(n.pathname=i+n.pathname):t.host=decodeURIComponent(i),t.port||(t.port=n.port);let o=n.pathname.slice(1)||null;t.database=o?decodeURI(o):null,(t.ssl==="true"||t.ssl==="1")&&(t.ssl=!0),t.ssl==="0"&&(t.ssl=!1),(t.sslcert||t.sslkey||t.sslrootcert||t.sslmode)&&(t.ssl={});let a=t.sslcert||t.sslkey||t.sslrootcert?require("fs"):null;if(t.sslcert&&(t.ssl.cert=a.readFileSync(t.sslcert).toString()),t.sslkey&&(t.ssl.key=a.readFileSync(t.sslkey).toString()),t.sslrootcert&&(t.ssl.ca=a.readFileSync(t.sslrootcert).toString()),e.useLibpqCompat&&t.uselibpqcompat)throw new Error("Both useLibpqCompat and uselibpqcompat are set. Please use only one of them.");if(t.uselibpqcompat==="true"||e.useLibpqCompat)switch(t.sslmode){case"disable":{t.ssl=!1;break}case"prefer":{t.ssl.rejectUnauthorized=!1;break}case"require":{t.sslrootcert?t.ssl.checkServerIdentity=function(){}:t.ssl.rejectUnauthorized=!1;break}case"verify-ca":{if(!t.ssl.ca)throw new Error("SECURITY WARNING: Using sslmode=verify-ca requires specifying a CA with sslrootcert. If a public CA is used, verify-ca allows connections to a server that somebody else may have registered with the CA, making you vulnerable to Man-in-the-Middle attacks. Either specify a custom CA certificate with sslrootcert parameter or use sslmode=verify-full for proper security.");t.ssl.checkServerIdentity=function(){};break}case"verify-full":break}else switch(t.sslmode){case"disable":{t.ssl=!1;break}case"prefer":case"require":case"verify-ca":case"verify-full":{t.sslmode!=="verify-full"&&St(t.sslmode);break}case"no-verify":{t.ssl.rejectUnauthorized=!1;break}}return t}function Zi(r){return Object.entries(r).reduce((t,[n,s])=>(s!=null&&(t[n]=s),t),{})}function yn(r){return Object.entries(r).reduce((t,[n,s])=>{if(n==="ssl"){let i=s;typeof i=="boolean"&&(t[n]=i),typeof i=="object"&&(t[n]=Zi(i))}else if(s!=null)if(n==="port"){if(s!==""){let i=parseInt(s,10);if(isNaN(i))throw new Error(`Invalid ${n}: ${s}`);t[n]=i}}else t[n]=s;return t},{})}function eo(r){return yn(ee(r))}function St(r){!St.warned&&typeof process<"u"&&process.emitWarning&&(St.warned=!0,process.emitWarning(`SECURITY WARNING: The SSL modes 'prefer', 'require', and 'verify-ca' are treated as aliases for 'verify-full'.
|
|
2
|
+
In the next major version (pg-connection-string v3.0.0 and pg v9.0.0), these modes will adopt standard libpq semantics, which have weaker security guarantees.
|
|
3
|
+
|
|
4
|
+
To prepare for this change:
|
|
5
|
+
- If you want the current behavior, explicitly use 'sslmode=verify-full'
|
|
6
|
+
- If you want libpq compatibility now, use 'uselibpqcompat=true&sslmode=${r}'
|
|
7
|
+
|
|
8
|
+
See https://www.postgresql.org/docs/current/libpq-ssl.html for libpq SSL mode definitions.`))}gn.exports=ee;ee.parse=ee;ee.toClientConfig=yn;ee.parseIntoClientConfig=eo});var Et=g((Ku,vn)=>{"use strict";l();var to=require("dns"),Sn=pe(),wn=bn().parse,x=function(r,e,t){return e[r]?e[r]:(t===void 0?t=process.env["PG"+r.toUpperCase()]:t===!1||(t=process.env[t]),t||Sn[r])},ro=function(){switch(process.env.PGSSLMODE){case"disable":return!1;case"prefer":case"require":case"verify-ca":case"verify-full":return!0;case"no-verify":return{rejectUnauthorized:!1}}return Sn.ssl},te=function(r){return"'"+(""+r).replace(/\\/g,"\\\\").replace(/'/g,"\\'")+"'"},q=function(r,e,t){let n=e[t];n!=null&&r.push(t+"="+te(n))},vt=class{constructor(e){e=typeof e=="string"?wn(e):e||{},e.connectionString&&(e=Object.assign({},e,wn(e.connectionString))),this.user=x("user",e),this.database=x("database",e),this.database===void 0&&(this.database=this.user),this.port=parseInt(x("port",e),10),this.host=x("host",e),Object.defineProperty(this,"password",{configurable:!0,enumerable:!1,writable:!0,value:x("password",e)}),this.binary=x("binary",e),this.options=x("options",e),this.ssl=typeof e.ssl>"u"?ro():e.ssl,typeof this.ssl=="string"&&this.ssl==="true"&&(this.ssl=!0),this.ssl==="no-verify"&&(this.ssl={rejectUnauthorized:!1}),this.ssl&&this.ssl.key&&Object.defineProperty(this.ssl,"key",{enumerable:!1}),this.client_encoding=x("client_encoding",e),this.replication=x("replication",e),this.isDomainSocket=!(this.host||"").indexOf("/"),this.application_name=x("application_name",e,"PGAPPNAME"),this.fallback_application_name=x("fallback_application_name",e,!1),this.statement_timeout=x("statement_timeout",e,!1),this.lock_timeout=x("lock_timeout",e,!1),this.idle_in_transaction_session_timeout=x("idle_in_transaction_session_timeout",e,!1),this.query_timeout=x("query_timeout",e,!1),e.connectionTimeoutMillis===void 0?this.connect_timeout=process.env.PGCONNECT_TIMEOUT||0:this.connect_timeout=Math.floor(e.connectionTimeoutMillis/1e3),e.keepAlive===!1?this.keepalives=0:e.keepAlive===!0&&(this.keepalives=1),typeof e.keepAliveInitialDelayMillis=="number"&&(this.keepalives_idle=Math.floor(e.keepAliveInitialDelayMillis/1e3))}getLibpqConnectionString(e){let t=[];q(t,this,"user"),q(t,this,"password"),q(t,this,"port"),q(t,this,"application_name"),q(t,this,"fallback_application_name"),q(t,this,"connect_timeout"),q(t,this,"options");let n=typeof this.ssl=="object"?this.ssl:this.ssl?{sslmode:this.ssl}:{};if(q(t,n,"sslmode"),q(t,n,"sslca"),q(t,n,"sslkey"),q(t,n,"sslcert"),q(t,n,"sslrootcert"),this.database&&t.push("dbname="+te(this.database)),this.replication&&t.push("replication="+te(this.replication)),this.host&&t.push("host="+te(this.host)),this.isDomainSocket)return e(null,t.join(" "));this.client_encoding&&t.push("client_encoding="+te(this.client_encoding)),to.lookup(this.host,function(s,i){return s?e(s,null):(t.push("hostaddr="+te(i)),e(null,t.join(" ")))})}};vn.exports=vt});var kt=g((Wu,_n)=>{"use strict";l();var no=fe(),En=/^([A-Za-z]+)(?: (\d+))?(?: (\d+))?/,_t=class{constructor(e,t){this.command=null,this.rowCount=null,this.oid=null,this.rows=[],this.fields=[],this._parsers=void 0,this._types=t,this.RowCtor=null,this.rowAsArray=e==="array",this.rowAsArray&&(this.parseRow=this._parseRowAsArray),this._prebuiltEmptyResultObject=null}addCommandComplete(e){let t;e.text?t=En.exec(e.text):t=En.exec(e.command),t&&(this.command=t[1],t[3]?(this.oid=parseInt(t[2],10),this.rowCount=parseInt(t[3],10)):t[2]&&(this.rowCount=parseInt(t[2],10)))}_parseRowAsArray(e){let t=new Array(e.length);for(let n=0,s=e.length;n<s;n++){let i=e[n];i!==null?t[n]=this._parsers[n](i):t[n]=null}return t}parseRow(e){let t={...this._prebuiltEmptyResultObject};for(let n=0,s=e.length;n<s;n++){let i=e[n],o=this.fields[n].name;if(i!==null){let a=this.fields[n].format==="binary"?Buffer.from(i):i;t[o]=this._parsers[n](a)}else t[o]=null}return t}addRow(e){this.rows.push(e)}addFields(e){this.fields=e,this.fields.length&&(this._parsers=new Array(e.length));let t={};for(let n=0;n<e.length;n++){let s=e[n];t[s.name]=null,this._types?this._parsers[n]=this._types.getTypeParser(s.dataTypeID,s.format||"text"):this._parsers[n]=no.getTypeParser(s.dataTypeID,s.format||"text")}this._prebuiltEmptyResultObject={...t}}};_n.exports=_t});var Pn=g((Yu,xn)=>{"use strict";l();var{EventEmitter:so}=require("events"),kn=kt(),Cn=X(),Ct=class extends so{constructor(e,t,n){super(),e=Cn.normalizeQueryConfig(e,t,n),this.text=e.text,this.values=e.values,this.rows=e.rows,this.types=e.types,this.name=e.name,this.queryMode=e.queryMode,this.binary=e.binary,this.portal=e.portal||"",this.callback=e.callback,this._rowMode=e.rowMode,process.domain&&e.callback&&(this.callback=process.domain.bind(e.callback)),this._result=new kn(this._rowMode,this.types),this._results=this._result,this._canceledDueToError=!1}requiresPreparation(){return this.queryMode==="extended"||this.name||this.rows?!0:!this.text||!this.values?!1:this.values.length>0}_checkForMultirow(){this._result.command&&(Array.isArray(this._results)||(this._results=[this._result]),this._result=new kn(this._rowMode,this._result._types),this._results.push(this._result))}handleRowDescription(e){this._checkForMultirow(),this._result.addFields(e.fields),this._accumulateRows=this.callback||!this.listeners("row").length}handleDataRow(e){let t;if(!this._canceledDueToError){try{t=this._result.parseRow(e.fields)}catch(n){this._canceledDueToError=n;return}this.emit("row",t,this._result),this._accumulateRows&&this._result.addRow(t)}}handleCommandComplete(e,t){this._checkForMultirow(),this._result.addCommandComplete(e),this.rows&&t.sync()}handleEmptyQuery(e){this.rows&&e.sync()}handleError(e,t){if(this._canceledDueToError&&(e=this._canceledDueToError,this._canceledDueToError=!1),this.callback)return this.callback(e);this.emit("error",e)}handleReadyForQuery(e){if(this._canceledDueToError)return this.handleError(this._canceledDueToError,e);if(this.callback)try{this.callback(null,this._results)}catch(t){process.nextTick(()=>{throw t})}this.emit("end",this._results)}submit(e){if(typeof this.text!="string"&&typeof this.name!="string")return new Error("A query must have either text or a name. Supplying neither is unsupported.");let t=e.parsedStatements[this.name];if(this.text&&t&&this.text!==t)return new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`);if(this.values&&!Array.isArray(this.values))return new Error("Query values must be an array");if(this.requiresPreparation()){e.stream.cork&&e.stream.cork();try{this.prepare(e)}finally{e.stream.uncork&&e.stream.uncork()}}else e.query(this.text);return null}hasBeenParsed(e){return this.name&&e.parsedStatements[this.name]}handlePortalSuspended(e){this._getRows(e,this.rows)}_getRows(e,t){e.execute({portal:this.portal,rows:t}),t?e.flush():e.sync()}prepare(e){this.hasBeenParsed(e)||e.parse({text:this.text,name:this.name,types:this.types});try{e.bind({portal:this.portal,statement:this.name,values:this.values,binary:this.binary,valueMapper:Cn.prepareValue})}catch(t){this.handleError(t,e);return}e.describe({type:"P",name:this.portal||""}),this._getRows(e,this.rows)}handleCopyInResponse(e){e.sendCopyFail("No source stream defined")}handleCopyData(e,t){}};xn.exports=Ct});var Ft=g(y=>{"use strict";l();Object.defineProperty(y,"__esModule",{value:!0});y.NoticeMessage=y.DataRowMessage=y.CommandCompleteMessage=y.ReadyForQueryMessage=y.NotificationResponseMessage=y.BackendKeyDataMessage=y.AuthenticationMD5Password=y.ParameterStatusMessage=y.ParameterDescriptionMessage=y.RowDescriptionMessage=y.Field=y.CopyResponse=y.CopyDataMessage=y.DatabaseError=y.copyDone=y.emptyQuery=y.replicationStart=y.portalSuspended=y.noData=y.closeComplete=y.bindComplete=y.parseComplete=void 0;y.parseComplete={name:"parseComplete",length:5};y.bindComplete={name:"bindComplete",length:5};y.closeComplete={name:"closeComplete",length:5};y.noData={name:"noData",length:5};y.portalSuspended={name:"portalSuspended",length:5};y.replicationStart={name:"replicationStart",length:4};y.emptyQuery={name:"emptyQuery",length:4};y.copyDone={name:"copyDone",length:4};var xt=class extends Error{constructor(e,t,n){super(e),this.length=t,this.name=n}};y.DatabaseError=xt;var Pt=class{constructor(e,t){this.length=e,this.chunk=t,this.name="copyData"}};y.CopyDataMessage=Pt;var At=class{constructor(e,t,n,s){this.length=e,this.name=t,this.binary=n,this.columnTypes=new Array(s)}};y.CopyResponse=At;var Rt=class{constructor(e,t,n,s,i,o,a){this.name=e,this.tableID=t,this.columnID=n,this.dataTypeID=s,this.dataTypeSize=i,this.dataTypeModifier=o,this.format=a}};y.Field=Rt;var Tt=class{constructor(e,t){this.length=e,this.fieldCount=t,this.name="rowDescription",this.fields=new Array(this.fieldCount)}};y.RowDescriptionMessage=Tt;var It=class{constructor(e,t){this.length=e,this.parameterCount=t,this.name="parameterDescription",this.dataTypeIDs=new Array(this.parameterCount)}};y.ParameterDescriptionMessage=It;var Ot=class{constructor(e,t,n){this.length=e,this.parameterName=t,this.parameterValue=n,this.name="parameterStatus"}};y.ParameterStatusMessage=Ot;var Mt=class{constructor(e,t){this.length=e,this.salt=t,this.name="authenticationMD5Password"}};y.AuthenticationMD5Password=Mt;var qt=class{constructor(e,t,n){this.length=e,this.processID=t,this.secretKey=n,this.name="backendKeyData"}};y.BackendKeyDataMessage=qt;var Dt=class{constructor(e,t,n,s){this.length=e,this.processId=t,this.channel=n,this.payload=s,this.name="notification"}};y.NotificationResponseMessage=Dt;var Lt=class{constructor(e,t){this.length=e,this.status=t,this.name="readyForQuery"}};y.ReadyForQueryMessage=Lt;var Qt=class{constructor(e,t){this.length=e,this.text=t,this.name="commandComplete"}};y.CommandCompleteMessage=Qt;var Nt=class{constructor(e,t){this.length=e,this.fields=t,this.name="dataRow",this.fieldCount=t.length}};y.DataRowMessage=Nt;var Bt=class{constructor(e,t){this.length=e,this.message=t,this.name="notice"}};y.NoticeMessage=Bt});var An=g(qe=>{"use strict";l();Object.defineProperty(qe,"__esModule",{value:!0});qe.Writer=void 0;var Ut=class{constructor(e=256){this.size=e,this.offset=5,this.headerPosition=0,this.buffer=Buffer.allocUnsafe(e)}ensure(e){if(this.buffer.length-this.offset<e){let n=this.buffer,s=n.length+(n.length>>1)+e;this.buffer=Buffer.allocUnsafe(s),n.copy(this.buffer)}}addInt32(e){return this.ensure(4),this.buffer[this.offset++]=e>>>24&255,this.buffer[this.offset++]=e>>>16&255,this.buffer[this.offset++]=e>>>8&255,this.buffer[this.offset++]=e>>>0&255,this}addInt16(e){return this.ensure(2),this.buffer[this.offset++]=e>>>8&255,this.buffer[this.offset++]=e>>>0&255,this}addCString(e){if(!e)this.ensure(1);else{let t=Buffer.byteLength(e);this.ensure(t+1),this.buffer.write(e,this.offset,"utf-8"),this.offset+=t}return this.buffer[this.offset++]=0,this}addString(e=""){let t=Buffer.byteLength(e);return this.ensure(t),this.buffer.write(e,this.offset),this.offset+=t,this}add(e){return this.ensure(e.length),e.copy(this.buffer,this.offset),this.offset+=e.length,this}join(e){if(e){this.buffer[this.headerPosition]=e;let t=this.offset-(this.headerPosition+1);this.buffer.writeInt32BE(t,this.headerPosition+1)}return this.buffer.slice(e?0:5,this.offset)}flush(e){let t=this.join(e);return this.offset=5,this.headerPosition=0,this.buffer=Buffer.allocUnsafe(this.size),t}};qe.Writer=Ut});var Tn=g(Le=>{"use strict";l();Object.defineProperty(Le,"__esModule",{value:!0});Le.serialize=void 0;var jt=An(),w=new jt.Writer,io=r=>{w.addInt16(3).addInt16(0);for(let n of Object.keys(r))w.addCString(n).addCString(r[n]);w.addCString("client_encoding").addCString("UTF8");let e=w.addCString("").flush(),t=e.length+4;return new jt.Writer().addInt32(t).add(e).flush()},oo=()=>{let r=Buffer.allocUnsafe(8);return r.writeInt32BE(8,0),r.writeInt32BE(80877103,4),r},ao=r=>w.addCString(r).flush(112),co=function(r,e){return w.addCString(r).addInt32(Buffer.byteLength(e)).addString(e),w.flush(112)},uo=function(r){return w.addString(r).flush(112)},lo=r=>w.addCString(r).flush(81),Rn=[],ho=r=>{let e=r.name||"";e.length>63&&(console.error("Warning! Postgres only supports 63 characters for query names."),console.error("You supplied %s (%s)",e,e.length),console.error("This can cause conflicts and silent errors executing queries"));let t=r.types||Rn,n=t.length,s=w.addCString(e).addCString(r.text).addInt16(n);for(let i=0;i<n;i++)s.addInt32(t[i]);return w.flush(80)},re=new jt.Writer,fo=function(r,e){for(let t=0;t<r.length;t++){let n=e?e(r[t],t):r[t];n==null?(w.addInt16(0),re.addInt32(-1)):n instanceof Buffer?(w.addInt16(1),re.addInt32(n.length),re.add(n)):(w.addInt16(0),re.addInt32(Buffer.byteLength(n)),re.addString(n))}},po=(r={})=>{let e=r.portal||"",t=r.statement||"",n=r.binary||!1,s=r.values||Rn,i=s.length;return w.addCString(e).addCString(t),w.addInt16(i),fo(s,r.valueMapper),w.addInt16(i),w.add(re.flush()),w.addInt16(1),w.addInt16(n?1:0),w.flush(66)},mo=Buffer.from([69,0,0,0,9,0,0,0,0,0]),yo=r=>{if(!r||!r.portal&&!r.rows)return mo;let e=r.portal||"",t=r.rows||0,n=Buffer.byteLength(e),s=4+n+1+4,i=Buffer.allocUnsafe(1+s);return i[0]=69,i.writeInt32BE(s,1),i.write(e,5,"utf-8"),i[n+5]=0,i.writeUInt32BE(t,i.length-4),i},go=(r,e)=>{let t=Buffer.allocUnsafe(16);return t.writeInt32BE(16,0),t.writeInt16BE(1234,4),t.writeInt16BE(5678,6),t.writeInt32BE(r,8),t.writeInt32BE(e,12),t},$t=(r,e)=>{let n=4+Buffer.byteLength(e)+1,s=Buffer.allocUnsafe(1+n);return s[0]=r,s.writeInt32BE(n,1),s.write(e,5,"utf-8"),s[n]=0,s},bo=w.addCString("P").flush(68),wo=w.addCString("S").flush(68),So=r=>r.name?$t(68,`${r.type}${r.name||""}`):r.type==="P"?bo:wo,vo=r=>{let e=`${r.type}${r.name||""}`;return $t(67,e)},Eo=r=>w.add(r).flush(100),_o=r=>$t(102,r),De=r=>Buffer.from([r,0,0,0,4]),ko=De(72),Co=De(83),xo=De(88),Po=De(99),Ao={startup:io,password:ao,requestSsl:oo,sendSASLInitialResponseMessage:co,sendSCRAMClientFinalMessage:uo,query:lo,parse:ho,bind:po,execute:yo,describe:So,close:vo,flush:()=>ko,sync:()=>Co,end:()=>xo,copyData:Eo,copyDone:()=>Po,copyFail:_o,cancel:go};Le.serialize=Ao});var In=g(Qe=>{"use strict";l();Object.defineProperty(Qe,"__esModule",{value:!0});Qe.BufferReader=void 0;var Ht=class{constructor(e=0){this.offset=e,this.buffer=Buffer.allocUnsafe(0),this.encoding="utf-8"}setBuffer(e,t){this.offset=e,this.buffer=t}int16(){let e=this.buffer.readInt16BE(this.offset);return this.offset+=2,e}byte(){let e=this.buffer[this.offset];return this.offset++,e}int32(){let e=this.buffer.readInt32BE(this.offset);return this.offset+=4,e}uint32(){let e=this.buffer.readUInt32BE(this.offset);return this.offset+=4,e}string(e){let t=this.buffer.toString(this.encoding,this.offset,this.offset+e);return this.offset+=e,t}cstring(){let e=this.offset,t=e;for(;this.buffer[t++]!==0;);return this.offset=t,this.buffer.toString(this.encoding,e,t-1)}bytes(e){let t=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,t}};Qe.BufferReader=Ht});var Dn=g(Ne=>{"use strict";l();Object.defineProperty(Ne,"__esModule",{value:!0});Ne.Parser=void 0;var v=Ft(),Ro=In(),Gt=1,To=4,On=Gt+To,T=-1,zt=Buffer.allocUnsafe(0),Kt=class{constructor(e){if(this.buffer=zt,this.bufferLength=0,this.bufferOffset=0,this.reader=new Ro.BufferReader,e?.mode==="binary")throw new Error("Binary mode not supported yet");this.mode=e?.mode||"text"}parse(e,t){this.mergeBuffer(e);let n=this.bufferOffset+this.bufferLength,s=this.bufferOffset;for(;s+On<=n;){let i=this.buffer[s],o=this.buffer.readUInt32BE(s+Gt),a=Gt+o;if(a+s<=n){let u=this.handlePacket(s+On,i,o,this.buffer);t(u),s+=a}else break}s===n?(this.buffer=zt,this.bufferLength=0,this.bufferOffset=0):(this.bufferLength=n-s,this.bufferOffset=s)}mergeBuffer(e){if(this.bufferLength>0){let t=this.bufferLength+e.byteLength;if(t+this.bufferOffset>this.buffer.byteLength){let s;if(t<=this.buffer.byteLength&&this.bufferOffset>=this.bufferLength)s=this.buffer;else{let i=this.buffer.byteLength*2;for(;t>=i;)i*=2;s=Buffer.allocUnsafe(i)}this.buffer.copy(s,0,this.bufferOffset,this.bufferOffset+this.bufferLength),this.buffer=s,this.bufferOffset=0}e.copy(this.buffer,this.bufferOffset+this.bufferLength),this.bufferLength=t}else this.buffer=e,this.bufferOffset=0,this.bufferLength=e.byteLength}handlePacket(e,t,n,s){let{reader:i}=this;i.setBuffer(e,s);let o;switch(t){case 50:o=v.bindComplete;break;case 49:o=v.parseComplete;break;case 51:o=v.closeComplete;break;case 110:o=v.noData;break;case 115:o=v.portalSuspended;break;case 99:o=v.copyDone;break;case 87:o=v.replicationStart;break;case 73:o=v.emptyQuery;break;case 68:o=Fo(i);break;case 67:o=Oo(i);break;case 90:o=Io(i);break;case 65:o=Lo(i);break;case 82:o=$o(i,n);break;case 83:o=Uo(i);break;case 75:o=jo(i);break;case 69:o=Mn(i,"error");break;case 78:o=Mn(i,"notice");break;case 84:o=Qo(i);break;case 116:o=Bo(i);break;case 71:o=qo(i);break;case 72:o=Do(i);break;case 100:o=Mo(i,n);break;default:return new v.DatabaseError("received invalid response: "+t.toString(16),n,"error")}return i.setBuffer(0,zt),o.length=n,o}};Ne.Parser=Kt;var Io=r=>{let e=r.string(1);return new v.ReadyForQueryMessage(T,e)},Oo=r=>{let e=r.cstring();return new v.CommandCompleteMessage(T,e)},Mo=(r,e)=>{let t=r.bytes(e-4);return new v.CopyDataMessage(T,t)},qo=r=>qn(r,"copyInResponse"),Do=r=>qn(r,"copyOutResponse"),qn=(r,e)=>{let t=r.byte()!==0,n=r.int16(),s=new v.CopyResponse(T,e,t,n);for(let i=0;i<n;i++)s.columnTypes[i]=r.int16();return s},Lo=r=>{let e=r.int32(),t=r.cstring(),n=r.cstring();return new v.NotificationResponseMessage(T,e,t,n)},Qo=r=>{let e=r.int16(),t=new v.RowDescriptionMessage(T,e);for(let n=0;n<e;n++)t.fields[n]=No(r);return t},No=r=>{let e=r.cstring(),t=r.uint32(),n=r.int16(),s=r.uint32(),i=r.int16(),o=r.int32(),a=r.int16()===0?"text":"binary";return new v.Field(e,t,n,s,i,o,a)},Bo=r=>{let e=r.int16(),t=new v.ParameterDescriptionMessage(T,e);for(let n=0;n<e;n++)t.dataTypeIDs[n]=r.int32();return t},Fo=r=>{let e=r.int16(),t=new Array(e);for(let n=0;n<e;n++){let s=r.int32();t[n]=s===-1?null:r.string(s)}return new v.DataRowMessage(T,t)},Uo=r=>{let e=r.cstring(),t=r.cstring();return new v.ParameterStatusMessage(T,e,t)},jo=r=>{let e=r.int32(),t=r.int32();return new v.BackendKeyDataMessage(T,e,t)},$o=(r,e)=>{let t=r.int32(),n={name:"authenticationOk",length:e};switch(t){case 0:break;case 3:n.length===8&&(n.name="authenticationCleartextPassword");break;case 5:if(n.length===12){n.name="authenticationMD5Password";let s=r.bytes(4);return new v.AuthenticationMD5Password(T,s)}break;case 10:{n.name="authenticationSASL",n.mechanisms=[];let s;do s=r.cstring(),s&&n.mechanisms.push(s);while(s)}break;case 11:n.name="authenticationSASLContinue",n.data=r.string(e-8);break;case 12:n.name="authenticationSASLFinal",n.data=r.string(e-8);break;default:throw new Error("Unknown authenticationOk message type "+t)}return n},Mn=(r,e)=>{let t={},n=r.string(1);for(;n!=="\0";)t[n]=r.cstring(),n=r.string(1);let s=t.M,i=e==="notice"?new v.NoticeMessage(T,s):new v.DatabaseError(s,T,e);return i.severity=t.S,i.code=t.C,i.detail=t.D,i.hint=t.H,i.position=t.P,i.internalPosition=t.p,i.internalQuery=t.q,i.where=t.W,i.schema=t.s,i.table=t.t,i.column=t.c,i.dataType=t.d,i.constraint=t.n,i.file=t.F,i.line=t.L,i.routine=t.R,i}});var Vt=g(j=>{"use strict";l();Object.defineProperty(j,"__esModule",{value:!0});j.DatabaseError=j.serialize=j.parse=void 0;var Ho=Ft();Object.defineProperty(j,"DatabaseError",{enumerable:!0,get:function(){return Ho.DatabaseError}});var zo=Tn();Object.defineProperty(j,"serialize",{enumerable:!0,get:function(){return zo.serialize}});var Go=Dn();function Ko(r,e){let t=new Go.Parser;return r.on("data",n=>t.parse(n,e)),new Promise(n=>r.on("end",()=>n()))}j.parse=Ko});var Ln=g(Wt=>{"use strict";l();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.default={}});var Nn=g((fl,Qn)=>{"use strict";l();var{getStream:Vo,getSecureStream:Wo}=Zo();Qn.exports={getStream:Vo,getSecureStream:Wo};function Jo(){function r(t){let n=require("net");return new n.Socket}function e(t){return require("tls").connect(t)}return{getStream:r,getSecureStream:e}}function Yo(){function r(t){let{CloudflareSocket:n}=Ln();return new n(t)}function e(t){return t.socket.startTls(t),t.socket}return{getStream:r,getSecureStream:e}}function Xo(){if(typeof navigator=="object"&&navigator!==null&&typeof navigator.userAgent=="string")return navigator.userAgent==="Cloudflare-Workers";if(typeof Response=="function"){let r=new Response(null,{cf:{thing:!0}});if(typeof r.cf=="object"&&r.cf!==null&&r.cf.thing)return!0}return!1}function Zo(){return Xo()?Yo():Jo()}});var Yt=g((ml,Bn)=>{"use strict";l();var ea=require("events").EventEmitter,{parse:ta,serialize:C}=Vt(),{getStream:ra,getSecureStream:na}=Nn(),sa=C.flush(),ia=C.sync(),oa=C.end(),Jt=class extends ea{constructor(e){super(),e=e||{},this.stream=e.stream||ra(e.ssl),typeof this.stream=="function"&&(this.stream=this.stream(e)),this._keepAlive=e.keepAlive,this._keepAliveInitialDelayMillis=e.keepAliveInitialDelayMillis,this.parsedStatements={},this.ssl=e.ssl||!1,this._ending=!1,this._emitMessage=!1;let t=this;this.on("newListener",function(n){n==="message"&&(t._emitMessage=!0)})}connect(e,t){let n=this;this._connecting=!0,this.stream.setNoDelay(!0),this.stream.connect(e,t),this.stream.once("connect",function(){n._keepAlive&&n.stream.setKeepAlive(!0,n._keepAliveInitialDelayMillis),n.emit("connect")});let s=function(i){n._ending&&(i.code==="ECONNRESET"||i.code==="EPIPE")||n.emit("error",i)};if(this.stream.on("error",s),this.stream.on("close",function(){n.emit("end")}),!this.ssl)return this.attachListeners(this.stream);this.stream.once("data",function(i){switch(i.toString("utf8")){case"S":break;case"N":return n.stream.end(),n.emit("error",new Error("The server does not support SSL connections"));default:return n.stream.end(),n.emit("error",new Error("There was an error establishing an SSL connection"))}let a={socket:n.stream};n.ssl!==!0&&(Object.assign(a,n.ssl),"key"in n.ssl&&(a.key=n.ssl.key));let u=require("net");u.isIP&&u.isIP(t)===0&&(a.servername=t);try{n.stream=na(a)}catch(c){return n.emit("error",c)}n.attachListeners(n.stream),n.stream.on("error",s),n.emit("sslconnect")})}attachListeners(e){ta(e,t=>{let n=t.name==="error"?"errorMessage":t.name;this._emitMessage&&this.emit("message",t),this.emit(n,t)})}requestSsl(){this.stream.write(C.requestSsl())}startup(e){this.stream.write(C.startup(e))}cancel(e,t){this._send(C.cancel(e,t))}password(e){this._send(C.password(e))}sendSASLInitialResponseMessage(e,t){this._send(C.sendSASLInitialResponseMessage(e,t))}sendSCRAMClientFinalMessage(e){this._send(C.sendSCRAMClientFinalMessage(e))}_send(e){return this.stream.writable?this.stream.write(e):!1}query(e){this._send(C.query(e))}parse(e){this._send(C.parse(e))}bind(e){this._send(C.bind(e))}execute(e){this._send(C.execute(e))}flush(){this.stream.writable&&this.stream.write(sa)}sync(){this._ending=!0,this._send(ia)}ref(){this.stream.ref()}unref(){this.stream.unref()}end(){if(this._ending=!0,!this._connecting||!this.stream.writable){this.stream.end();return}return this.stream.write(oa,()=>{this.stream.end()})}close(e){this._send(C.close(e))}describe(e){this._send(C.describe(e))}sendCopyFromChunk(e){this._send(C.copyData(e))}endCopyFrom(){this._send(C.copyDone())}sendCopyFail(e){this._send(C.copyFail(e))}};Bn.exports=Jt});var $n=g((gl,jn)=>{"use strict";l();var{Transform:aa}=require("stream"),{StringDecoder:ca}=require("string_decoder"),$=Symbol("last"),Be=Symbol("decoder");function ua(r,e,t){let n;if(this.overflow){if(n=this[Be].write(r).split(this.matcher),n.length===1)return t();n.shift(),this.overflow=!1}else this[$]+=this[Be].write(r),n=this[$].split(this.matcher);this[$]=n.pop();for(let s=0;s<n.length;s++)try{Un(this,this.mapper(n[s]))}catch(i){return t(i)}if(this.overflow=this[$].length>this.maxLength,this.overflow&&!this.skipOverflow){t(new Error("maximum buffer reached"));return}t()}function la(r){if(this[$]+=this[Be].end(),this[$])try{Un(this,this.mapper(this[$]))}catch(e){return r(e)}r()}function Un(r,e){e!==void 0&&r.push(e)}function Fn(r){return r}function ha(r,e,t){switch(r=r||/\r?\n/,e=e||Fn,t=t||{},arguments.length){case 1:typeof r=="function"?(e=r,r=/\r?\n/):typeof r=="object"&&!(r instanceof RegExp)&&!r[Symbol.split]&&(t=r,r=/\r?\n/);break;case 2:typeof r=="function"?(t=e,e=r,r=/\r?\n/):typeof e=="object"&&(t=e,e=Fn)}t=Object.assign({},t),t.autoDestroy=!0,t.transform=ua,t.flush=la,t.readableObjectMode=!0;let n=new aa(t);return n[$]="",n[Be]=new ca("utf8"),n.matcher=r,n.mapper=e,n.maxLength=t.maxLength,n.skipOverflow=t.skipOverflow||!1,n.overflow=!1,n._destroy=function(s,i){this._writableState.errorEmitted=!1,i(s)},n}jn.exports=ha});var Gn=g((wl,D)=>{"use strict";l();var Hn=require("path"),da=require("stream").Stream,fa=$n(),zn=require("util"),pa=5432,Fe=process.platform==="win32",ye=process.stderr,ma=56,ya=7,ga=61440,ba=32768;function wa(r){return(r&ga)==ba}var ne=["host","port","database","user","password"],Xt=ne.length,Sa=ne[Xt-1];function Zt(){var r=ye instanceof da&&ye.writable===!0;if(r){var e=Array.prototype.slice.call(arguments).concat(`
|
|
9
|
+
`);ye.write(zn.format.apply(zn,e))}}Object.defineProperty(D.exports,"isWin",{get:function(){return Fe},set:function(r){Fe=r}});D.exports.warnTo=function(r){var e=ye;return ye=r,e};D.exports.getFileName=function(r){var e=r||process.env,t=e.PGPASSFILE||(Fe?Hn.join(e.APPDATA||"./","postgresql","pgpass.conf"):Hn.join(e.HOME||"./",".pgpass"));return t};D.exports.usePgPass=function(r,e){return Object.prototype.hasOwnProperty.call(process.env,"PGPASSWORD")?!1:Fe?!0:(e=e||"<unkn>",wa(r.mode)?r.mode&(ma|ya)?(Zt('WARNING: password file "%s" has group or world access; permissions should be u=rw (0600) or less',e),!1):!0:(Zt('WARNING: password file "%s" is not a plain file',e),!1))};var va=D.exports.match=function(r,e){return ne.slice(0,-1).reduce(function(t,n,s){return s==1&&Number(r[n]||pa)===Number(e[n])?t&&!0:t&&(e[n]==="*"||e[n]===r[n])},!0)};D.exports.getPassword=function(r,e,t){var n,s=e.pipe(fa());function i(u){var c=Ea(u);c&&_a(c)&&va(r,c)&&(n=c[Sa],s.end())}var o=function(){e.destroy(),t(n)},a=function(u){e.destroy(),Zt("WARNING: error on reading file: %s",u),t(void 0)};e.on("error",a),s.on("data",i).on("end",o).on("error",a)};var Ea=D.exports.parseLine=function(r){if(r.length<11||r.match(/^\s+#/))return null;for(var e="",t="",n=0,s=0,i=0,o={},a=!1,u=function(h,d,p){var m=r.substring(d,p);Object.hasOwnProperty.call(process.env,"PGPASS_NO_DEESCAPE")||(m=m.replace(/\\([:\\])/g,"$1")),o[ne[h]]=m},c=0;c<r.length-1;c+=1){if(e=r.charAt(c+1),t=r.charAt(c),a=n==Xt-1,a){u(n,s);break}c>=0&&e==":"&&t!=="\\"&&(u(n,s,c+1),s=c+2,n+=1)}return o=Object.keys(o).length===Xt?o:null,o},_a=D.exports.isValidEntry=function(r){for(var e={0:function(o){return o.length>0},1:function(o){return o==="*"?!0:(o=Number(o),isFinite(o)&&o>0&&o<9007199254740992&&Math.floor(o)===o)},2:function(o){return o.length>0},3:function(o){return o.length>0},4:function(o){return o.length>0}},t=0;t<ne.length;t+=1){var n=e[t],s=r[ne[t]]||"",i=n(s);if(!i)return!1}return!0}});var Vn=g((El,er)=>{"use strict";l();var vl=require("path"),Kn=require("fs"),Ue=Gn();er.exports=function(r,e){var t=Ue.getFileName();Kn.stat(t,function(n,s){if(n||!Ue.usePgPass(s,t))return e(void 0);var i=Kn.createReadStream(t);Ue.getPassword(r,i,e)})};er.exports.warnTo=Ue.warnTo});var Zn=g((kl,Xn)=>{"use strict";l();var ka=require("events").EventEmitter,Wn=X(),ge=require("util"),tr=pn(),Ca=Me(),xa=Et(),Yn=Pn(),Pa=pe(),Aa=Yt(),Ra=bt(),Jn=ge.deprecate(()=>{},"Client.activeQuery is deprecated and will be removed in pg@9.0"),Ta=ge.deprecate(()=>{},"Client.queryQueue is deprecated and will be removed in pg@9.0."),Ia=ge.deprecate(()=>{},"pgpass support is deprecated and will be removed in pg@9.0. You can provide an async function as the password property to the Client/Pool constructor that returns a password instead. Within this function you can call the pgpass module in your own code."),Oa=ge.deprecate(()=>{},"Passing a custom Promise implementation to the Client/Pool constructor is deprecated and will be removed in pg@9.0."),Ma=ge.deprecate(()=>{},"Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead."),je=class extends ka{constructor(e){super(),this.connectionParameters=new xa(e),this.user=this.connectionParameters.user,this.database=this.connectionParameters.database,this.port=this.connectionParameters.port,this.host=this.connectionParameters.host,Object.defineProperty(this,"password",{configurable:!0,enumerable:!1,writable:!0,value:this.connectionParameters.password}),this.replication=this.connectionParameters.replication;let t=e||{};t.Promise&&Oa(),this._Promise=t.Promise||global.Promise,this._types=new Ca(t.types),this._ending=!1,this._ended=!1,this._connecting=!1,this._connected=!1,this._connectionError=!1,this._queryable=!0,this._activeQuery=null,this.enableChannelBinding=!!t.enableChannelBinding,this.connection=t.connection||new Aa({stream:t.stream,ssl:this.connectionParameters.ssl,keepAlive:t.keepAlive||!1,keepAliveInitialDelayMillis:t.keepAliveInitialDelayMillis||0,encoding:this.connectionParameters.client_encoding||"utf8"}),this._queryQueue=[],this.binary=t.binary||Pa.binary,this.processID=null,this.secretKey=null,this.ssl=this.connectionParameters.ssl||!1,this.ssl&&this.ssl.key&&Object.defineProperty(this.ssl,"key",{enumerable:!1}),this._connectionTimeoutMillis=t.connectionTimeoutMillis||0}get activeQuery(){return Jn(),this._activeQuery}set activeQuery(e){Jn(),this._activeQuery=e}_getActiveQuery(){return this._activeQuery}_errorAllQueries(e){let t=s=>{process.nextTick(()=>{s.handleError(e,this.connection)})},n=this._getActiveQuery();n&&(t(n),this._activeQuery=null),this._queryQueue.forEach(t),this._queryQueue.length=0}_connect(e){let t=this,n=this.connection;if(this._connectionCallback=e,this._connecting||this._connected){let s=new Error("Client has already been connected. You cannot reuse a client.");process.nextTick(()=>{e(s)});return}this._connecting=!0,this._connectionTimeoutMillis>0&&(this.connectionTimeoutHandle=setTimeout(()=>{n._ending=!0,n.stream.destroy(new Error("timeout expired"))},this._connectionTimeoutMillis),this.connectionTimeoutHandle.unref&&this.connectionTimeoutHandle.unref()),this.host&&this.host.indexOf("/")===0?n.connect(this.host+"/.s.PGSQL."+this.port):n.connect(this.port,this.host),n.on("connect",function(){t.ssl?n.requestSsl():n.startup(t.getStartupConf())}),n.on("sslconnect",function(){n.startup(t.getStartupConf())}),this._attachListeners(n),n.once("end",()=>{let s=this._ending?new Error("Connection terminated"):new Error("Connection terminated unexpectedly");clearTimeout(this.connectionTimeoutHandle),this._errorAllQueries(s),this._ended=!0,this._ending||(this._connecting&&!this._connectionError?this._connectionCallback?this._connectionCallback(s):this._handleErrorEvent(s):this._connectionError||this._handleErrorEvent(s)),process.nextTick(()=>{this.emit("end")})})}connect(e){if(e){this._connect(e);return}return new this._Promise((t,n)=>{this._connect(s=>{s?n(s):t(this)})})}_attachListeners(e){e.on("authenticationCleartextPassword",this._handleAuthCleartextPassword.bind(this)),e.on("authenticationMD5Password",this._handleAuthMD5Password.bind(this)),e.on("authenticationSASL",this._handleAuthSASL.bind(this)),e.on("authenticationSASLContinue",this._handleAuthSASLContinue.bind(this)),e.on("authenticationSASLFinal",this._handleAuthSASLFinal.bind(this)),e.on("backendKeyData",this._handleBackendKeyData.bind(this)),e.on("error",this._handleErrorEvent.bind(this)),e.on("errorMessage",this._handleErrorMessage.bind(this)),e.on("readyForQuery",this._handleReadyForQuery.bind(this)),e.on("notice",this._handleNotice.bind(this)),e.on("rowDescription",this._handleRowDescription.bind(this)),e.on("dataRow",this._handleDataRow.bind(this)),e.on("portalSuspended",this._handlePortalSuspended.bind(this)),e.on("emptyQuery",this._handleEmptyQuery.bind(this)),e.on("commandComplete",this._handleCommandComplete.bind(this)),e.on("parseComplete",this._handleParseComplete.bind(this)),e.on("copyInResponse",this._handleCopyInResponse.bind(this)),e.on("copyData",this._handleCopyData.bind(this)),e.on("notification",this._handleNotification.bind(this))}_getPassword(e){let t=this.connection;if(typeof this.password=="function")this._Promise.resolve().then(()=>this.password(this.connectionParameters)).then(n=>{if(n!==void 0){if(typeof n!="string"){t.emit("error",new TypeError("Password must be a string"));return}this.connectionParameters.password=this.password=n}else this.connectionParameters.password=this.password=null;e()}).catch(n=>{t.emit("error",n)});else if(this.password!==null)e();else try{Vn()(this.connectionParameters,s=>{s!==void 0&&(Ia(),this.connectionParameters.password=this.password=s),e()})}catch(n){this.emit("error",n)}}_handleAuthCleartextPassword(e){this._getPassword(()=>{this.connection.password(this.password)})}_handleAuthMD5Password(e){this._getPassword(async()=>{try{let t=await Ra.postgresMd5PasswordHash(this.user,this.password,e.salt);this.connection.password(t)}catch(t){this.emit("error",t)}})}_handleAuthSASL(e){this._getPassword(()=>{try{this.saslSession=tr.startSession(e.mechanisms,this.enableChannelBinding&&this.connection.stream),this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism,this.saslSession.response)}catch(t){this.connection.emit("error",t)}})}async _handleAuthSASLContinue(e){try{await tr.continueSession(this.saslSession,this.password,e.data,this.enableChannelBinding&&this.connection.stream),this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)}catch(t){this.connection.emit("error",t)}}_handleAuthSASLFinal(e){try{tr.finalizeSession(this.saslSession,e.data),this.saslSession=null}catch(t){this.connection.emit("error",t)}}_handleBackendKeyData(e){this.processID=e.processID,this.secretKey=e.secretKey}_handleReadyForQuery(e){this._connecting&&(this._connecting=!1,this._connected=!0,clearTimeout(this.connectionTimeoutHandle),this._connectionCallback&&(this._connectionCallback(null,this),this._connectionCallback=null),this.emit("connect"));let t=this._getActiveQuery();this._activeQuery=null,this.readyForQuery=!0,t&&t.handleReadyForQuery(this.connection),this._pulseQueryQueue()}_handleErrorWhileConnecting(e){if(!this._connectionError){if(this._connectionError=!0,clearTimeout(this.connectionTimeoutHandle),this._connectionCallback)return this._connectionCallback(e);this.emit("error",e)}}_handleErrorEvent(e){if(this._connecting)return this._handleErrorWhileConnecting(e);this._queryable=!1,this._errorAllQueries(e),this.emit("error",e)}_handleErrorMessage(e){if(this._connecting)return this._handleErrorWhileConnecting(e);let t=this._getActiveQuery();if(!t){this._handleErrorEvent(e);return}this._activeQuery=null,t.handleError(e,this.connection)}_handleRowDescription(e){let t=this._getActiveQuery();if(t==null){let n=new Error("Received unexpected rowDescription message from backend.");this._handleErrorEvent(n);return}t.handleRowDescription(e)}_handleDataRow(e){let t=this._getActiveQuery();if(t==null){let n=new Error("Received unexpected dataRow message from backend.");this._handleErrorEvent(n);return}t.handleDataRow(e)}_handlePortalSuspended(e){let t=this._getActiveQuery();if(t==null){let n=new Error("Received unexpected portalSuspended message from backend.");this._handleErrorEvent(n);return}t.handlePortalSuspended(this.connection)}_handleEmptyQuery(e){let t=this._getActiveQuery();if(t==null){let n=new Error("Received unexpected emptyQuery message from backend.");this._handleErrorEvent(n);return}t.handleEmptyQuery(this.connection)}_handleCommandComplete(e){let t=this._getActiveQuery();if(t==null){let n=new Error("Received unexpected commandComplete message from backend.");this._handleErrorEvent(n);return}t.handleCommandComplete(e,this.connection)}_handleParseComplete(){let e=this._getActiveQuery();if(e==null){let t=new Error("Received unexpected parseComplete message from backend.");this._handleErrorEvent(t);return}e.name&&(this.connection.parsedStatements[e.name]=e.text)}_handleCopyInResponse(e){let t=this._getActiveQuery();if(t==null){let n=new Error("Received unexpected copyInResponse message from backend.");this._handleErrorEvent(n);return}t.handleCopyInResponse(this.connection)}_handleCopyData(e){let t=this._getActiveQuery();if(t==null){let n=new Error("Received unexpected copyData message from backend.");this._handleErrorEvent(n);return}t.handleCopyData(e,this.connection)}_handleNotification(e){this.emit("notification",e)}_handleNotice(e){this.emit("notice",e)}getStartupConf(){let e=this.connectionParameters,t={user:e.user,database:e.database},n=e.application_name||e.fallback_application_name;return n&&(t.application_name=n),e.replication&&(t.replication=""+e.replication),e.statement_timeout&&(t.statement_timeout=String(parseInt(e.statement_timeout,10))),e.lock_timeout&&(t.lock_timeout=String(parseInt(e.lock_timeout,10))),e.idle_in_transaction_session_timeout&&(t.idle_in_transaction_session_timeout=String(parseInt(e.idle_in_transaction_session_timeout,10))),e.options&&(t.options=e.options),t}cancel(e,t){if(e.activeQuery===t){let n=this.connection;this.host&&this.host.indexOf("/")===0?n.connect(this.host+"/.s.PGSQL."+this.port):n.connect(this.port,this.host),n.on("connect",function(){n.cancel(e.processID,e.secretKey)})}else e._queryQueue.indexOf(t)!==-1&&e._queryQueue.splice(e._queryQueue.indexOf(t),1)}setTypeParser(e,t,n){return this._types.setTypeParser(e,t,n)}getTypeParser(e,t){return this._types.getTypeParser(e,t)}escapeIdentifier(e){return Wn.escapeIdentifier(e)}escapeLiteral(e){return Wn.escapeLiteral(e)}_pulseQueryQueue(){if(this.readyForQuery===!0){this._activeQuery=this._queryQueue.shift();let e=this._getActiveQuery();if(e){this.readyForQuery=!1,this.hasExecuted=!0;let t=e.submit(this.connection);t&&process.nextTick(()=>{e.handleError(t,this.connection),this.readyForQuery=!0,this._pulseQueryQueue()})}else this.hasExecuted&&(this._activeQuery=null,this.emit("drain"))}}query(e,t,n){let s,i,o,a,u;if(e==null)throw new TypeError("Client was passed a null or undefined query");return typeof e.submit=="function"?(o=e.query_timeout||this.connectionParameters.query_timeout,i=s=e,s.callback||(typeof t=="function"?s.callback=t:n&&(s.callback=n))):(o=e.query_timeout||this.connectionParameters.query_timeout,s=new Yn(e,t,n),s.callback||(i=new this._Promise((c,h)=>{s.callback=(d,p)=>d?h(d):c(p)}).catch(c=>{throw Error.captureStackTrace(c),c}))),o&&(u=s.callback||(()=>{}),a=setTimeout(()=>{let c=new Error("Query read timeout");process.nextTick(()=>{s.handleError(c,this.connection)}),u(c),s.callback=()=>{};let h=this._queryQueue.indexOf(s);h>-1&&this._queryQueue.splice(h,1),this._pulseQueryQueue()},o),s.callback=(c,h)=>{clearTimeout(a),u(c,h)}),this.binary&&!s.binary&&(s.binary=!0),s._result&&!s._result._types&&(s._result._types=this._types),this._queryable?this._ending?(process.nextTick(()=>{s.handleError(new Error("Client was closed and is not queryable"),this.connection)}),i):(this._queryQueue.length>0&&Ma(),this._queryQueue.push(s),this._pulseQueryQueue(),i):(process.nextTick(()=>{s.handleError(new Error("Client has encountered a connection error and is not queryable"),this.connection)}),i)}ref(){this.connection.ref()}unref(){this.connection.unref()}end(e){if(this._ending=!0,!this.connection._connecting||this._ended)if(e)e();else return this._Promise.resolve();if(this._getActiveQuery()||!this._queryable?this.connection.stream.destroy():this.connection.end(),e)this.connection.once("end",e);else return new this._Promise(t=>{this.connection.once("end",t)})}get queryQueue(){return Ta(),this._queryQueue}};je.Query=Yn;Xn.exports=je});var rs=g((xl,ts)=>{"use strict";l();var qa=require("events").EventEmitter,rr=function(){},es=(r,e)=>{let t=r.findIndex(e);return t===-1?void 0:r.splice(t,1)[0]},nr=class{constructor(e,t,n){this.client=e,this.idleListener=t,this.timeoutId=n}},se=class{constructor(e){this.callback=e}};function Da(){throw new Error("Release called on client which has already been released to the pool.")}function $e(r,e){if(e)return{callback:e,result:void 0};let t,n,s=function(o,a){o?t(o):n(a)},i=new r(function(o,a){n=o,t=a}).catch(o=>{throw Error.captureStackTrace(o),o});return{callback:s,result:i}}function La(r,e){return function t(n){n.client=e,e.removeListener("error",t),e.on("error",()=>{r.log("additional client error after disconnection due to error",n)}),r._remove(e),r.emit("error",n,e)}}var sr=class extends qa{constructor(e,t){super(),this.options=Object.assign({},e),e!=null&&"password"in e&&Object.defineProperty(this.options,"password",{configurable:!0,enumerable:!1,writable:!0,value:e.password}),e!=null&&e.ssl&&e.ssl.key&&Object.defineProperty(this.options.ssl,"key",{enumerable:!1}),this.options.max=this.options.max||this.options.poolSize||10,this.options.min=this.options.min||0,this.options.maxUses=this.options.maxUses||1/0,this.options.allowExitOnIdle=this.options.allowExitOnIdle||!1,this.options.maxLifetimeSeconds=this.options.maxLifetimeSeconds||0,this.log=this.options.log||function(){},this.Client=this.options.Client||t||ir().Client,this.Promise=this.options.Promise||global.Promise,typeof this.options.idleTimeoutMillis>"u"&&(this.options.idleTimeoutMillis=1e4),this._clients=[],this._idle=[],this._expired=new WeakSet,this._pendingQueue=[],this._endCallback=void 0,this.ending=!1,this.ended=!1}_promiseTry(e){let t=this.Promise;return typeof t.try=="function"?t.try(e):new t(n=>n(e()))}_isFull(){return this._clients.length>=this.options.max}_isAboveMin(){return this._clients.length>this.options.min}_pulseQueue(){if(this.log("pulse queue"),this.ended){this.log("pulse queue ended");return}if(this.ending){this.log("pulse queue on ending"),this._idle.length&&this._idle.slice().map(t=>{this._remove(t.client)}),this._clients.length||(this.ended=!0,this._endCallback());return}if(!this._pendingQueue.length){this.log("no queued requests");return}if(!this._idle.length&&this._isFull())return;let e=this._pendingQueue.shift();if(this._idle.length){let t=this._idle.pop();clearTimeout(t.timeoutId);let n=t.client;n.ref&&n.ref();let s=t.idleListener;return this._acquireClient(n,e,s,!1)}if(!this._isFull())return this.newClient(e);throw new Error("unexpected condition")}_remove(e,t){let n=es(this._idle,i=>i.client===e);n!==void 0&&clearTimeout(n.timeoutId),this._clients=this._clients.filter(i=>i!==e);let s=this;e.end(()=>{s.emit("remove",e),typeof t=="function"&&t()})}connect(e){if(this.ending){let s=new Error("Cannot use a pool after calling end on the pool");return e?e(s):this.Promise.reject(s)}let t=$e(this.Promise,e),n=t.result;if(this._isFull()||this._idle.length){if(this._idle.length&&process.nextTick(()=>this._pulseQueue()),!this.options.connectionTimeoutMillis)return this._pendingQueue.push(new se(t.callback)),n;let s=(a,u,c)=>{clearTimeout(o),t.callback(a,u,c)},i=new se(s),o=setTimeout(()=>{es(this._pendingQueue,a=>a.callback===s),i.timedOut=!0,t.callback(new Error("timeout exceeded when trying to connect"))},this.options.connectionTimeoutMillis);return o.unref&&o.unref(),this._pendingQueue.push(i),n}return this.newClient(new se(t.callback)),n}newClient(e){let t=new this.Client(this.options);this._clients.push(t);let n=La(this,t);this.log("checking client timeout");let s,i=!1;this.options.connectionTimeoutMillis&&(s=setTimeout(()=>{t.connection?(this.log("ending client due to timeout"),i=!0,t.connection.stream.destroy()):t.isConnected()||(this.log("ending client due to timeout"),i=!0,t.end())},this.options.connectionTimeoutMillis)),this.log("connecting new client"),t.connect(o=>{if(s&&clearTimeout(s),t.on("error",n),o)this.log("client failed to connect",o),this._clients=this._clients.filter(a=>a!==t),i&&(o=new Error("Connection terminated due to connection timeout",{cause:o})),this._pulseQueue(),e.timedOut||e.callback(o,void 0,rr);else{if(this.log("new client connected"),this.options.onConnect){this._promiseTry(()=>this.options.onConnect(t)).then(()=>{this._afterConnect(t,e,n)},a=>{this._clients=this._clients.filter(u=>u!==t),t.end(()=>{this._pulseQueue(),e.timedOut||e.callback(a,void 0,rr)})});return}return this._afterConnect(t,e,n)}})}_afterConnect(e,t,n){if(this.options.maxLifetimeSeconds!==0){let s=setTimeout(()=>{this.log("ending client due to expired lifetime"),this._expired.add(e),this._idle.findIndex(o=>o.client===e)!==-1&&this._acquireClient(e,new se((o,a,u)=>u()),n,!1)},this.options.maxLifetimeSeconds*1e3);s.unref(),e.once("end",()=>clearTimeout(s))}return this._acquireClient(e,t,n,!0)}_acquireClient(e,t,n,s){s&&this.emit("connect",e),this.emit("acquire",e),e.release=this._releaseOnce(e,n),e.removeListener("error",n),t.timedOut?s&&this.options.verify?this.options.verify(e,e.release):e.release():s&&this.options.verify?this.options.verify(e,i=>{if(i)return e.release(i),t.callback(i,void 0,rr);t.callback(void 0,e,e.release)}):t.callback(void 0,e,e.release)}_releaseOnce(e,t){let n=!1;return s=>{n&&Da(),n=!0,this._release(e,t,s)}}_release(e,t,n){if(e.on("error",t),e._poolUseCount=(e._poolUseCount||0)+1,this.emit("release",n,e),n||this.ending||!e._queryable||e._ending||e._poolUseCount>=this.options.maxUses)return e._poolUseCount>=this.options.maxUses&&this.log("remove expended client"),this._remove(e,this._pulseQueue.bind(this));if(this._expired.has(e))return this.log("remove expired client"),this._expired.delete(e),this._remove(e,this._pulseQueue.bind(this));let i;this.options.idleTimeoutMillis&&this._isAboveMin()&&(i=setTimeout(()=>{this._isAboveMin()&&(this.log("remove idle client"),this._remove(e,this._pulseQueue.bind(this)))},this.options.idleTimeoutMillis),this.options.allowExitOnIdle&&i.unref()),this.options.allowExitOnIdle&&e.unref(),this._idle.push(new nr(e,t,i)),this._pulseQueue()}query(e,t,n){if(typeof e=="function"){let i=$e(this.Promise,e);return setImmediate(function(){return i.callback(new Error("Passing a function as the first parameter to pool.query is not supported"))}),i.result}typeof t=="function"&&(n=t,t=void 0);let s=$e(this.Promise,n);return n=s.callback,this.connect((i,o)=>{if(i)return n(i);let a=!1,u=c=>{a||(a=!0,o.release(c),n(c))};o.once("error",u),this.log("dispatching query");try{o.query(e,t,(c,h)=>{if(this.log("query dispatched"),o.removeListener("error",u),!a)return a=!0,o.release(c),c?n(c):n(void 0,h)})}catch(c){return o.release(c),n(c)}}),s.result}end(e){if(this.log("ending"),this.ending){let n=new Error("Called end on pool more than once");return e?e(n):this.Promise.reject(n)}this.ending=!0;let t=$e(this.Promise,e);return this._endCallback=t.callback,this._pulseQueue(),t.result}get waitingCount(){return this._pendingQueue.length}get idleCount(){return this._idle.length}get expiredCount(){return this._clients.reduce((e,t)=>e+(this._expired.has(t)?1:0),0)}get totalCount(){return this._clients.length}};ts.exports=sr});var is=g((Al,ss)=>{"use strict";l();var ns=require("events").EventEmitter,Qa=require("util"),or=X(),ie=ss.exports=function(r,e,t){ns.call(this),r=or.normalizeQueryConfig(r,e,t),this.text=r.text,this.values=r.values,this.name=r.name,this.queryMode=r.queryMode,this.callback=r.callback,this.state="new",this._arrayMode=r.rowMode==="array",this._emitRowEvents=!1,this.on("newListener",function(n){n==="row"&&(this._emitRowEvents=!0)}.bind(this))};Qa.inherits(ie,ns);var Na={sqlState:"code",statementPosition:"position",messagePrimary:"message",context:"where",schemaName:"schema",tableName:"table",columnName:"column",dataTypeName:"dataType",constraintName:"constraint",sourceFile:"file",sourceLine:"line",sourceFunction:"routine"};ie.prototype.handleError=function(r){let e=this.native.pq.resultErrorFields();if(e)for(let t in e){let n=Na[t]||t;r[n]=e[t]}this.callback?this.callback(r):this.emit("error",r),this.state="error"};ie.prototype.then=function(r,e){return this._getPromise().then(r,e)};ie.prototype.catch=function(r){return this._getPromise().catch(r)};ie.prototype._getPromise=function(){return this._promise?this._promise:(this._promise=new Promise(function(r,e){this._once("end",r),this._once("error",e)}.bind(this)),this._promise)};ie.prototype.submit=function(r){this.state="running";let e=this;this.native=r.native,r.native.arrayMode=this._arrayMode;let t=function(n,s,i){if(r.native.arrayMode=!1,setImmediate(function(){e.emit("_done")}),n)return e.handleError(n);e._emitRowEvents&&(i.length>1?s.forEach((o,a)=>{o.forEach(u=>{e.emit("row",u,i[a])})}):s.forEach(function(o){e.emit("row",o,i)})),e.state="end",e.emit("end",i),e.callback&&e.callback(null,i)};if(process.domain&&(t=process.domain.bind(t)),this.name){this.name.length>63&&(console.error("Warning! Postgres only supports 63 characters for query names."),console.error("You supplied %s (%s)",this.name,this.name.length),console.error("This can cause conflicts and silent errors executing queries"));let n=(this.values||[]).map(or.prepareValue);if(r.namedQueries[this.name]){if(this.text&&r.namedQueries[this.name]!==this.text){let s=new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`);return t(s)}return r.native.execute(this.name,n,t)}return r.native.prepare(this.name,this.text,n.length,function(s){return s?t(s):(r.namedQueries[e.name]=e.text,e.native.execute(e.name,n,t))})}else if(this.values){if(!Array.isArray(this.values)){let s=new Error("Query values must be an array");return t(s)}let n=this.values.map(or.prepareValue);r.native.query(this.text,n,t)}else this.queryMode==="extended"?r.native.query(this.text,[],t):r.native.query(this.text,t)}});var ls=g((Tl,us)=>{"use strict";l();var Ba=require("util"),os;try{os=require("pg-native")}catch(r){throw r}var Fa=Me(),as=require("events").EventEmitter,Ua=require("util"),ja=Et(),cs=is(),$a=Ba.deprecate(()=>{},"Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead."),P=us.exports=function(r){as.call(this),r=r||{},this._Promise=r.Promise||global.Promise,this._types=new Fa(r.types),this.native=new os({types:this._types}),this._queryQueue=[],this._ending=!1,this._connecting=!1,this._connected=!1,this._queryable=!0;let e=this.connectionParameters=new ja(r);r.nativeConnectionString&&(e.nativeConnectionString=r.nativeConnectionString),this.user=e.user,Object.defineProperty(this,"password",{configurable:!0,enumerable:!1,writable:!0,value:e.password}),this.database=e.database,this.host=e.host,this.port=e.port,this.namedQueries={}};P.Query=cs;Ua.inherits(P,as);P.prototype._errorAllQueries=function(r){let e=t=>{process.nextTick(()=>{t.native=this.native,t.handleError(r)})};this._hasActiveQuery()&&(e(this._activeQuery),this._activeQuery=null),this._queryQueue.forEach(e),this._queryQueue.length=0};P.prototype._connect=function(r){let e=this;if(this._connecting){process.nextTick(()=>r(new Error("Client has already been connected. You cannot reuse a client.")));return}this._connecting=!0,this.connectionParameters.getLibpqConnectionString(function(t,n){if(e.connectionParameters.nativeConnectionString&&(n=e.connectionParameters.nativeConnectionString),t)return r(t);e.native.connect(n,function(s){if(s)return e.native.end(),r(s);e._connected=!0,e.native.on("error",function(i){e._queryable=!1,e._errorAllQueries(i),e.emit("error",i)}),e.native.on("notification",function(i){e.emit("notification",{channel:i.relname,payload:i.extra})}),e.emit("connect"),e._pulseQueryQueue(!0),r(null,this)})})};P.prototype.connect=function(r){if(r){this._connect(r);return}return new this._Promise((e,t)=>{this._connect(n=>{n?t(n):e(this)})})};P.prototype.query=function(r,e,t){let n,s,i,o,a;if(r==null)throw new TypeError("Client was passed a null or undefined query");if(typeof r.submit=="function")i=r.query_timeout||this.connectionParameters.query_timeout,s=n=r,typeof e=="function"&&(r.callback=e);else if(i=r.query_timeout||this.connectionParameters.query_timeout,n=new cs(r,e,t),!n.callback){let u,c;s=new this._Promise((h,d)=>{u=h,c=d}).catch(h=>{throw Error.captureStackTrace(h),h}),n.callback=(h,d)=>h?c(h):u(d)}return i&&(a=n.callback||(()=>{}),o=setTimeout(()=>{let u=new Error("Query read timeout");process.nextTick(()=>{n.handleError(u,this.connection)}),a(u),n.callback=()=>{};let c=this._queryQueue.indexOf(n);c>-1&&this._queryQueue.splice(c,1),this._pulseQueryQueue()},i),n.callback=(u,c)=>{clearTimeout(o),a(u,c)}),this._queryable?this._ending?(n.native=this.native,process.nextTick(()=>{n.handleError(new Error("Client was closed and is not queryable"))}),s):(this._queryQueue.length>0&&$a(),this._queryQueue.push(n),this._pulseQueryQueue(),s):(n.native=this.native,process.nextTick(()=>{n.handleError(new Error("Client has encountered a connection error and is not queryable"))}),s)};P.prototype.end=function(r){let e=this;this._ending=!0,this._connected||this.once("connect",this.end.bind(this,r));let t;return r||(t=new this._Promise(function(n,s){r=i=>i?s(i):n()})),this.native.end(function(){e._connected=!1,e._errorAllQueries(new Error("Connection terminated")),process.nextTick(()=>{e.emit("end"),r&&r()})}),t};P.prototype._hasActiveQuery=function(){return this._activeQuery&&this._activeQuery.state!=="error"&&this._activeQuery.state!=="end"};P.prototype._pulseQueryQueue=function(r){if(!this._connected||this._hasActiveQuery())return;let e=this._queryQueue.shift();if(!e){r||this.emit("drain");return}this._activeQuery=e,e.submit(this);let t=this;e.once("_done",function(){t._pulseQueryQueue()})};P.prototype.cancel=function(r){this._activeQuery===r?this.native.cancel(function(){}):this._queryQueue.indexOf(r)!==-1&&this._queryQueue.splice(this._queryQueue.indexOf(r),1)};P.prototype.ref=function(){};P.prototype.unref=function(){};P.prototype.setTypeParser=function(r,e,t){return this._types.setTypeParser(r,e,t)};P.prototype.getTypeParser=function(r,e){return this._types.getTypeParser(r,e)};P.prototype.isConnected=function(){return this._connected}});var ar=g((Ol,hs)=>{"use strict";l();hs.exports=ls()});var ir=g((Dl,He)=>{"use strict";l();var Ha=Zn(),za=pe(),Ga=Yt(),Ka=kt(),Va=X(),Wa=rs(),Ja=Me(),{DatabaseError:Ya}=Vt(),{escapeIdentifier:Xa,escapeLiteral:Za}=X(),ec=r=>class extends Wa{constructor(t){super(t,r)}},ds=function(r){this.defaults=za,this.Client=r,this.Query=this.Client.Query,this.Pool=ec(this.Client),this._pools=[],this.Connection=Ga,this.types=fe(),this.DatabaseError=Ya,this.TypeOverrides=Ja,this.escapeIdentifier=Xa,this.escapeLiteral=Za,this.Result=Ka,this.utils=Va},fs=Ha,ps=!1;try{ps=!!process.env.NODE_PG_FORCE_NATIVE}catch{}ps&&(fs=ar());He.exports=new ds(fs);Object.defineProperty(He.exports,"native",{configurable:!0,enumerable:!1,get(){let r=null;try{r=new ds(ar())}catch(e){if(e.code!=="MODULE_NOT_FOUND")throw e}return Object.defineProperty(He.exports,"native",{value:r}),r}})});var ms={};ur(ms,{Client:()=>tc,Connection:()=>nc,DatabaseError:()=>oc,Pool:()=>rc,Query:()=>ic,Result:()=>uc,TypeOverrides:()=>lc,default:()=>dc,defaults:()=>hc,escapeIdentifier:()=>ac,escapeLiteral:()=>cc,types:()=>sc});var I,tc,rc,nc,sc,ic,oc,ac,cc,uc,lc,hc,dc,ys=cr(()=>{"use strict";l();I=_(ir(),1),tc=I.default.Client,rc=I.default.Pool,nc=I.default.Connection,sc=I.default.types,ic=I.default.Query,oc=I.default.DatabaseError,ac=I.default.escapeIdentifier,cc=I.default.escapeLiteral,uc=I.default.Result,lc=I.default.TypeOverrides,hc=I.default.defaults,dc=I.default});var mc={};ur(mc,{ApiDataSource:()=>xe,ChunkTooLargeError:()=>Xe,DimensionMismatchError:()=>H,EmbeddingError:()=>k,IngestionError:()=>E,JSONSource:()=>Pe,Knowledge:()=>Ze,KnowledgeError:()=>L,KnowledgeProviderError:()=>Q,MarkdownSource:()=>ke,MemoryProvider:()=>Ee,OllamaEmbedder:()=>Ge,OpenAIEmbedder:()=>Ke,OpenRouterEmbedder:()=>Ve,PersistentKnowledgeProvider:()=>_e,PostgresSource:()=>ze,SQLiteSource:()=>Ae,VertexAIEmbedder:()=>We,WebUrlSource:()=>Ce,combineScores:()=>Se,keywordSearch:()=>N});module.exports=Cs(mc);l();l();l();var L=class extends Error{constructor(t,n){super(t);this.code=n;this.name="KnowledgeError"}code},k=class extends L{constructor(t,n){super(t,"EMBEDDING_ERROR");this.statusCode=n;this.name="EmbeddingError"}statusCode},E=class extends L{constructor(t,n){super(t,"INGESTION_ERROR");this.file=n;this.name="IngestionError"}file},Xe=class extends L{constructor(t,n){super(t,"CHUNK_TOO_LARGE");this.chunkSize=n;this.name="ChunkTooLargeError"}chunkSize},H=class extends L{expected;actual;constructor(e,t){super(`Dimension mismatch: expected ${e}, got ${t}`,"DIMENSION_MISMATCH"),this.name="DimensionMismatchError",this.expected=e,this.actual=t}},Q=class extends L{constructor(e){super(e,"PROVIDER_ERROR"),this.name="KnowledgeProviderError"}};l();var hr=require("crypto");l();function N(r,e){let t=r.toLowerCase(),n=e.toLowerCase();if(t.includes(n))return 1;let s=n.split(/\s+/).filter(o=>o.length>2);if(s.length===0)return 0;let i=0;for(let o of s)t.includes(o)&&i++;return i/s.length}function Se(r,e,t=.7){let n=1-t;return r*t+e*n}l();function ve(r,e){if(r.length!==e.length)throw new Error("Vectors must have same dimensions");let t=0,n=0,s=0;for(let o=0;o<r.length;o++)t+=r[o]*e[o],n+=r[o]*r[o],s+=e[o]*e[o];let i=Math.sqrt(n)*Math.sqrt(s);return i===0?0:t/i}function B(r,e){if(!e)return!0;for(let[t,n]of Object.entries(e)){let s=r[t];if(typeof n=="object"&&n!==null&&!Array.isArray(n)){if("$in"in n){if(!n.$in.includes(s))return!1}else if("$gt"in n){let i=n.$gt;if(typeof s!="number"||s<=i)return!1}else if("$lt"in n){let i=n.$lt;if(typeof s!="number"||s>=i)return!1}}else if(s!==n)return!1}return!0}var Ze=class r{constructor(e,t,n,s,i){this.provider=e;this.embedder=t;this.description=n;this.sources=s;this.options=i}provider;embedder;description;sources;options;static async create(e){await e.provider.validateDimensions(e.embedder.dimensions);let t=new r(e.provider,e.embedder,e.description,e.sources,e),n=e.reSync!==!1;return!n&&"shouldReSync"in e.provider?(e.provider.shouldReSync()&&await t.sync(),t):(n&&await t.sync(),t)}async query(e,t){let n=t?.searchType??"semantic",s=t?.semanticWeight??.7;if(n==="keyword")return this.keywordQuery(e,t);if(n==="hybrid"){let[i,o]=await Promise.all([this.semanticQuery(e,t),this.keywordQuery(e,t)]);return this.combineHybridResults(i,o,s,t)}else return this.semanticQuery(e,t)}async semanticQuery(e,t){let n=await this.embedder.embed(e);return this.provider.query(n,t)}async keywordQuery(e,t){let{limit:n=10,threshold:s=.1,filter:i,includeMetadata:o=!0,includeVectors:a=!1}=t||{};if(typeof this.provider.keywordQuery=="function")return this.provider.keywordQuery(e,t);let u=await this.getAllChunks(),c=[];for(let h of u){if(i&&!B(h.metadata,i))continue;let d=N(h.content,e);d>=s&&c.push({chunk:{id:h.id,content:h.content,metadata:o?h.metadata:{},vector:a?h.vector:void 0},score:d,distance:1-d})}return c.sort((h,d)=>d.score-h.score),c.slice(0,n)}combineHybridResults(e,t,n,s){let{limit:i=10,threshold:o=.5,includeMetadata:a=!0,includeVectors:u=!1}=s||{},c=new Map(e.map(m=>[m.chunk.id,m])),h=new Map(t.map(m=>[m.chunk.id,m])),d=[],p=new Set([...c.keys(),...h.keys()]);for(let m of p){let b=c.get(m),R=h.get(m);if(!b&&!R)continue;let Je=b?.score??0,Ye=R?.score??0,K=Se(Je,Ye,n);K>=o&&d.push({chunk:{id:m,content:b?.chunk.content??R.chunk.content,metadata:a?b?.chunk.metadata??R.chunk.metadata:{},vector:u?b?.chunk.vector??R.chunk.vector:void 0},score:K,distance:1-K})}return d.sort((m,b)=>b.score-m.score),d.slice(0,i)}async getAllChunks(){if(typeof this.provider.getAllChunks=="function")return this.provider.getAllChunks();let e=new Array(this.embedder.dimensions).fill(0);return(await this.provider.query(e,{limit:1e4,threshold:0})).map(t=>t.chunk)}async sync(){this.options.onSync?.({type:"start"});try{let e=this.embedder.dimensions;await this.provider.clear(),await this.provider.validateDimensions(e);let t=this.options.streamingBatchSize??100,n=0,s=[];for(let i of this.sources)for await(let o of i.load())if(s.push(o),s.length>=t){let a=await this.embedChunks(s);a.length>0&&(await this.provider.add(a),n+=a.length),s.length=0}if(s.length>0){let i=await this.embedChunks(s);i.length>0&&(await this.provider.add(i),n+=i.length)}this.options.onSync?.({type:"complete",chunksAffected:n})}catch(e){throw this.options.onSync?.({type:"error",error:e}),e}}async embedChunks(e){if(e.length===0)return[];let t=[];try{let n=e.map(i=>i.content),s=await this.embedder.embedBatch(n);for(let i=0;i<e.length;i++)t.push({...e[i],vector:s[i]}),this.options.onEmbeddingProgress?.({source:"sync",current:i+1,total:e.length,percent:Math.round((i+1)/e.length*100)})}catch(n){if(this.options.onError?.(n,{})==="abort")throw n;for(let i=0;i<e.length;i++)try{let o=await this.embedder.embed(e[i].content);t.push({...e[i],vector:o}),this.options.onEmbeddingProgress?.({source:"sync",current:i+1,total:e.length,percent:Math.round((i+1)/e.length*100)})}catch(o){if(this.options.onError?.(o,{chunk:e[i]})==="abort")throw o}}return t}async add(e,t){try{let n=(0,hr.randomUUID)(),s=await this.embedder.embed(e),i={id:n,content:e,metadata:t||{},vector:s};return await this.provider.add([i]),n}catch(n){throw new E(`Failed to add content to knowledge base: ${n.message}`,"add")}}async stop(){this.provider.close&&this.provider.close()}toTool(){return{name:"knowledge_search",displayName:"Knowledge Search",description:this.description||"Search the knowledge base for relevant information",category:"search",cacheable:!1,parameters:{type:"object",properties:{query:{type:"string",description:"Search query to find relevant information"},limit:{type:"number",description:"Maximum number of results to return (default: 10)"},threshold:{type:"number",description:"Minimum similarity threshold 0-1 (default: 0.3)"},filter:{type:"object",description:"Optional metadata filters"}},required:["query"]},execute:async e=>(await this.query(e.query,{limit:e.limit,threshold:e.threshold??.3,filter:e.filter,searchType:"hybrid"})).map(n=>({content:n.chunk.content,score:n.score,metadata:n.chunk.metadata}))}}};l();var Ee=class{constructor(e={}){this.options=e}options;chunks=new Map;dimensions;async validateDimensions(e){if(this.dimensions&&this.dimensions!==e)throw new H(this.dimensions,e);this.dimensions=e}async add(e){for(let t of e){if(!t.vector)throw new Q("Chunk missing vector");if(this.options.maxChunks&&this.chunks.size>=this.options.maxChunks)throw new Q(`Max chunks limit reached: ${this.options.maxChunks}`);this.chunks.set(t.id,{chunk:{id:t.id,content:t.content,metadata:t.metadata},vector:t.vector})}}async query(e,t={}){let{limit:n=10,threshold:s=.7,filter:i,includeMetadata:o=!0,includeVectors:a=!1}=t,u=[];for(let{chunk:c,vector:h}of this.chunks.values()){if(i&&!B(c.metadata,i))continue;let d=ve(e,h);d>=s&&u.push({chunk:{id:c.id,content:c.content,metadata:o?c.metadata:{},vector:a?h:void 0},score:d,distance:1-d})}return u.sort((c,h)=>h.score-c.score),u.slice(0,n)}async keywordQuery(e,t={}){let{limit:n=10,threshold:s=.1,filter:i,includeMetadata:o=!0,includeVectors:a=!1}=t,u=[];for(let{chunk:c,vector:h}of this.chunks.values()){if(i&&!B(c.metadata,i))continue;let d=N(c.content,e);d>=s&&u.push({chunk:{id:c.id,content:c.content,metadata:o?c.metadata:{},vector:a?h:void 0},score:d,distance:1-d})}return u.sort((c,h)=>h.score-c.score),u.slice(0,n)}async delete(e){for(let t of e)this.chunks.delete(t)}async clear(){this.chunks.clear(),this.dimensions=void 0}async getAllChunks(){return Array.from(this.chunks.values()).map(({chunk:e,vector:t})=>({...e,vector:t}))}};l();var dr=_(require("better-sqlite3"),1),oe=_(require("fs"),1),F=_(require("path"),1),fr=_(require("os"),1);var _e=class{constructor(e){this.options=e;let t=fr.homedir(),n=`${e.namespace}.db`,s;if(e.storagePath)s=e.storagePath;else{let i=F.join(t,".toolpack","db","knowledge"),o=F.join(t,".toolpack","knowledge"),a=F.join(i,n),u=F.join(o,n);oe.existsSync(u)&&!oe.existsSync(a)?s=o:s=i}this.dbPath=F.join(s,n),oe.mkdirSync(F.dirname(this.dbPath),{recursive:!0}),this.db=new dr.default(this.dbPath),this.db.pragma("journal_mode = WAL"),this.initSchema(),this.loadDimensions()}options;db;dimensions;dbPath;initSchema(){this.db.exec(`
|
|
2
10
|
CREATE TABLE IF NOT EXISTS chunks (
|
|
3
11
|
id TEXT PRIMARY KEY,
|
|
4
12
|
content TEXT NOT NULL,
|
|
@@ -30,22 +38,35 @@
|
|
|
30
38
|
BEGIN
|
|
31
39
|
UPDATE chunks_fts SET content = new.content, metadata = new.metadata WHERE id = new.id;
|
|
32
40
|
END;
|
|
33
|
-
`)}loadDimensions(){let e=this.db.prepare("SELECT value FROM provider_meta WHERE key = ?").get("dimensions");e&&(this.dimensions=parseInt(e.value,10))}async validateDimensions(e){if(this.dimensions&&this.dimensions!==e)throw new
|
|
41
|
+
`)}loadDimensions(){let e=this.db.prepare("SELECT value FROM provider_meta WHERE key = ?").get("dimensions");e&&(this.dimensions=parseInt(e.value,10))}async validateDimensions(e){if(this.dimensions&&this.dimensions!==e)throw new H(this.dimensions,e);this.dimensions||(this.db.prepare("INSERT OR REPLACE INTO provider_meta (key, value) VALUES (?, ?)").run("dimensions",e.toString()),this.dimensions=e)}async add(e){let t=this.db.prepare(`
|
|
34
42
|
INSERT OR REPLACE INTO chunks (id, content, metadata, vector, synced_at)
|
|
35
43
|
VALUES (?, ?, ?, ?, ?)
|
|
36
|
-
`);this.db.transaction(
|
|
44
|
+
`);this.db.transaction(s=>{for(let i of s){if(!i.vector)throw new Q("Chunk missing vector");let o=Buffer.from(new Float32Array(i.vector).buffer);t.run(i.id,i.content,JSON.stringify(i.metadata),o,Date.now())}})(e)}async query(e,t={}){let{limit:n=10,threshold:s=.7,filter:i,includeMetadata:o=!0,includeVectors:a=!1}=t,u=this.db.prepare("SELECT id, content, metadata, vector FROM chunks").all(),c=[];for(let h of u){let d=JSON.parse(h.metadata);if(i&&!B(d,i))continue;let p=new Float32Array(h.vector.buffer,h.vector.byteOffset,h.vector.byteLength/4),m=Array.from(p),b=ve(e,m);b>=s&&c.push({chunk:{id:h.id,content:h.content,metadata:o?d:{},vector:a?m:void 0},score:b,distance:1-b})}return c.sort((h,d)=>d.score-h.score),c.slice(0,n)}async keywordQuery(e,t={}){let{limit:n=10,threshold:s=.1,filter:i,includeMetadata:o=!0,includeVectors:a=!1}=t,u=e.split(/\s+/).map(d=>`"${d}"`).join(" OR "),c=this.db.prepare(`
|
|
37
45
|
SELECT c.id, c.content, c.metadata, c.vector, highlight(chunks_fts, 1, '<mark>', '</mark>') as highlighted
|
|
38
46
|
FROM chunks_fts fts
|
|
39
47
|
JOIN chunks c ON fts.id = c.id
|
|
40
48
|
WHERE chunks_fts MATCH ?
|
|
41
49
|
ORDER BY bm25(chunks_fts) DESC
|
|
42
50
|
LIMIT ?
|
|
43
|
-
`).all(
|
|
51
|
+
`).all(u,n*2),h=[];for(let d of c){let p=JSON.parse(d.metadata);if(i&&!B(p,i))continue;let m=N(d.content,e);if(m>=s){let b=new Float32Array(d.vector.buffer,d.vector.byteOffset,d.vector.byteLength/4);h.push({chunk:{id:d.id,content:d.content,metadata:o?p:{},vector:a?Array.from(b):void 0},score:m,distance:1-m})}}return h.sort((d,p)=>p.score-d.score),h.slice(0,n)}async delete(e){let t=this.db.prepare("DELETE FROM chunks WHERE id = ?");this.db.transaction(s=>{for(let i of s)t.run(i)})(e)}async clear(){this.db.prepare("DELETE FROM chunks").run(),this.db.prepare("DELETE FROM provider_meta WHERE key = ?").run("dimensions"),this.dimensions=void 0}async getAllChunks(){return this.db.prepare("SELECT id, content, metadata, vector FROM chunks").all().map(t=>{let n=JSON.parse(t.metadata),s=new Float32Array(t.vector.buffer,t.vector.byteOffset,t.vector.byteLength/4);return{id:t.id,content:t.content,metadata:n,vector:Array.from(s)}})}shouldReSync(){return this.options.reSync===!1?this.db.prepare("SELECT COUNT(*) as count FROM chunks").get().count===0:!0}close(){this.db.close()}};l();var pr=_(require("fs/promises"),1),ae=_(require("path"),1),mr=_(require("crypto"),1),yr=_(require("fast-glob"),1);l();function O(r){return Math.ceil(r.length/4)}function xs(r,e){let t=r.split(/\n\n+/),n=[],s="";for(let i of t){let o=O(i);O(s)+o>e&&s?(n.push(s.trim()),s=i):s+=(s?`
|
|
52
|
+
|
|
53
|
+
`:"")+i}return s&&n.push(s.trim()),n}function Ps(r,e){let t=r.match(/[^.!?]+[.!?]+/g)||[r],n=[],s="";for(let i of t){let o=O(i);O(s)+o>e&&s?(n.push(s.trim()),s=i):s+=(s?" ":"")+i}return s&&n.push(s.trim()),n}function V(r,e){if(r.length<=1||e===0)return r;let t=[];for(let n=0;n<r.length;n++){let s=r[n];if(n>0){let o=r[n-1].split(/\s+/),a=Math.ceil(e/4);s=o.slice(-a).join(" ")+" "+s}t.push(s)}return t}function W(r,e){if(O(r)<=e)return[r];let n=xs(r,e),s=[];for(let i of n)O(i)>e?s.push(...Ps(i,e)):s.push(i);return s}var ke=class{constructor(e,t={}){this.pattern=e;this.options={maxChunkSize:t.maxChunkSize??2e3,chunkOverlap:t.chunkOverlap??200,minChunkSize:t.minChunkSize??100,namespace:t.namespace??"markdown",metadata:t.metadata??{}}}pattern;options;async*load(){let e=this.pattern.replace(/\\/g,"/"),t=await(0,yr.default)(e,{absolute:!0});for(let n of t)try{let s=await pr.readFile(n,"utf-8"),i=this.chunkMarkdown(s,n);for(let o of i)yield o}catch(s){throw new E(`Failed to process file: ${s.message}`,n)}}chunkMarkdown(e,t){let n=this.extractFrontmatter(e),s=this.removeFrontmatter(e),i=this.parseHeadings(s),o=[],a=0;for(let u of i){let c=/```[\s\S]*?```/.test(u.content),h=O(u.content);if(h<this.options.minChunkSize&&o.length>0){let p=o[o.length-1];p.content+=`
|
|
54
|
+
|
|
55
|
+
`+u.content,c&&(p.metadata.hasCode=!0);continue}let d;h>this.options.maxChunkSize?d=W(u.content,this.options.maxChunkSize):d=[u.content],this.options.chunkOverlap>0&&d.length>1&&(d=V(d,this.options.chunkOverlap));for(let p=0;p<d.length;p++){let m=d[p],b=this.generateChunkId(t,m,a);o.push({id:b,content:m,metadata:{...this.options.metadata,...n,heading:u.heading,hasCode:c,source:ae.basename(t),sourcePath:t,chunkIndex:a,totalChunks:d.length}}),a++}}return o}parseHeadings(e){let t=e.split(`
|
|
56
|
+
`),n=[],s=[],i=[];for(let o of t){let a=o.match(/^(#{1,6})\s+(.+)$/);if(a){if(i.length>0){let h=s.map(d=>d.text);n.push({heading:h.length>0?[...h]:[""],content:i.join(`
|
|
57
|
+
`).trim(),level:s.length>0?s[s.length-1].level:0}),i=[]}let u=a[1].length,c=a[2].trim();for(;s.length>0&&s[s.length-1].level>=u;)s.pop();s.push({level:u,text:c}),i.push(o)}else i.push(o)}if(i.length>0){let o=s.map(a=>a.text);n.push({heading:o.length>0?[...o]:[""],content:i.join(`
|
|
58
|
+
`).trim(),level:s.length>0?s[s.length-1].level:0})}return n.filter(o=>o.content.length>0)}extractFrontmatter(e){let t=e.match(/^---\n([\s\S]*?)\n---/);if(!t)return{};let n=t[1],s={},i=n.split(`
|
|
59
|
+
`);for(let o of i){let a=o.match(/^(\w+):\s*(.+)$/);if(a){let u=a[1],c=a[2].trim();c==="true"?c=!0:c==="false"?c=!1:isNaN(Number(c))?typeof c=="string"&&c.startsWith("[")&&c.endsWith("]")&&(c=c.slice(1,-1).split(",").map(h=>h.trim())):c=Number(c),s[u]=c}}return s}removeFrontmatter(e){return e.replace(/^---\n[\s\S]*?\n---\n/,"")}generateChunkId(e,t,n){let s=mr.createHash("md5").update(t).digest("hex").substring(0,8),i=ae.basename(e,ae.extname(e));return`${this.options.namespace}:${i}:${n}:${s}`}};l();var et=_(require("crypto"),1),gr=_(require("cheerio"),1);var Ce=class{constructor(e,t={}){this.urls=e;this.options={maxChunkSize:t.maxChunkSize??2e3,chunkOverlap:t.chunkOverlap??200,minChunkSize:t.minChunkSize??100,namespace:t.namespace??"web",metadata:t.metadata??{},maxDepth:t.maxDepth??1,userAgent:t.userAgent??"Toolpack-Knowledge/1.0",delayMs:t.delayMs??1e3,timeoutMs:t.timeoutMs??3e4,sameDomainOnly:t.sameDomainOnly??!0,maxPagesPerDomain:t.maxPagesPerDomain??10}}urls;options;crawledUrls=new Set;domainPageCount=new Map;lastRequestTime=new Map;async*load(){let e=await this.crawlUrls(this.urls,0);for(let t of e)try{let n=this.chunkPage(t);for(let s of n)yield s}catch(n){throw new E(`Failed to process URL ${t.url}: ${n.message}`,t.url)}}async crawlUrls(e,t){if(t>=this.options.maxDepth)return[];let n=[],s=[],i=new Set(e.map(o=>new URL(o).hostname));for(let o of e){if(this.crawledUrls.has(o))continue;let a=new URL(o).hostname,u=this.domainPageCount.get(a)??0;if(!(this.options.sameDomainOnly&&!i.has(a))&&!(u>=this.options.maxPagesPerDomain)){this.crawledUrls.add(o),this.domainPageCount.set(a,u+1);try{let c=this.lastRequestTime.get(a)??0,h=Date.now()-c;h<this.options.delayMs&&await new Promise(p=>setTimeout(p,this.options.delayMs-h));let d=await this.fetchPage(o);n.push(d),this.lastRequestTime.set(a,Date.now()),t<this.options.maxDepth-1&&s.push(...d.links)}catch(c){console.warn(`Failed to crawl ${o}: ${c.message}`)}}}if(s.length>0){let o=await this.crawlUrls(s,t+1);n.push(...o)}return n}async fetchPage(e){let t=new AbortController,n=setTimeout(()=>t.abort(),this.options.timeoutMs);try{let s=await fetch(e,{signal:t.signal,headers:{"User-Agent":this.options.userAgent}});if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);let i=await s.text(),o=gr.load(i);o("script, style, nav, header, footer, aside").remove();let a=o("title").text().trim()||o("h1").first().text().trim()||"Untitled",u=["main","article",".content","#content","body"],c="";for(let d of u){let p=o(d);if(p.length>0){c=p.text().trim();break}}c||(c=o("body").text().trim()),c=c.replace(/\s+/g," ").trim();let h=[];return o("a[href]").each((d,p)=>{let m=o(p).attr("href");if(m)try{let b=new URL(m,e).href;b.startsWith("http")&&!b.includes("#")&&h.push(b)}catch{}}),{url:e,title:a,content:c,links:[...new Set(h)]}}finally{clearTimeout(n)}}chunkPage(e){let t=[],n=O(e.content),s;n>this.options.maxChunkSize?s=W(e.content,this.options.maxChunkSize):s=[e.content],this.options.chunkOverlap>0&&s.length>1&&(s=V(s,this.options.chunkOverlap));for(let i=0;i<s.length;i++){let o=s[i],a=this.generateChunkId(e.url,o,i);t.push({id:a,content:o,metadata:{...this.options.metadata,title:e.title,url:e.url,source:"web",chunkIndex:i,totalChunks:s.length}})}return t}generateChunkId(e,t,n){let s=et.createHash("md5").update(t).digest("hex").substring(0,8),i=et.createHash("md5").update(e).digest("hex").substring(0,8);return`${this.options.namespace}:${i}:${n}:${s}`}};l();var tt=_(require("crypto"),1);var xe=class{constructor(e,t={}){this.url=e;this.options={maxChunkSize:t.maxChunkSize??2e3,chunkOverlap:t.chunkOverlap??200,minChunkSize:t.minChunkSize??100,namespace:t.namespace??"api",metadata:t.metadata??{},headers:t.headers??{},method:t.method??"GET",timeoutMs:t.timeoutMs??3e4,pagination:t.pagination,dataPath:t.dataPath??"",contentExtractor:t.contentExtractor??this.defaultContentExtractor,metadataExtractor:t.metadataExtractor??this.defaultMetadataExtractor}}url;options;async*load(){let e=await this.fetchData();for(let t of e)try{let n=this.chunkItem(t);for(let s of n)yield s}catch(n){throw new E(`Failed to process API item: ${n.message}`,this.url)}}async fetchData(){let e=[],t=this.options.pagination?.start??0,n=this.options.pagination?.maxPages??1;for(;t<n;){let s=this.buildUrl(t),i=await this.fetchPage(s);if(i.length===0||(e.push(...i),t++,!this.options.pagination))break}return e}buildUrl(e){if(!this.options.pagination)return this.url;let t=new URL(this.url);return t.searchParams.set(this.options.pagination.param,e.toString()),t.href}async fetchPage(e){let t=new AbortController,n=setTimeout(()=>t.abort(),this.options.timeoutMs);try{let s=await fetch(e,{method:this.options.method,headers:{"Content-Type":"application/json",...this.options.headers},body:this.options.body?JSON.stringify(this.options.body):void 0,signal:t.signal});if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);let i=await s.json();return this.extractItems(i)}finally{clearTimeout(n)}}extractItems(e){if(!this.options.dataPath)return Array.isArray(e)?e:[e];let t=this.options.dataPath.split("."),n=e;for(let s of t)if(n&&typeof n=="object"&&s in n)n=n[s];else throw new Error(`Data path '${this.options.dataPath}' not found in response`);return Array.isArray(n)?n:[n]}chunkItem(e){let t=this.options.contentExtractor(e),n=this.options.metadataExtractor(e),s=O(t),i;s>(this.options.maxChunkSize??2e3)?i=W(t,this.options.maxChunkSize??2e3):i=[t],(this.options.chunkOverlap??200)>0&&i.length>1&&(i=V(i,this.options.chunkOverlap??200));let o=[];for(let a=0;a<i.length;a++){let u=i[a],c=this.generateChunkId(e,u,a);o.push({id:c,content:u,metadata:{...this.options.metadata,...n,source:"api",apiUrl:this.url,chunkIndex:a,totalChunks:i.length}})}return o}defaultContentExtractor(e){if(typeof e=="string")return e;if(typeof e=="object"&&e!==null){let t=["content","text","description","body","message"];for(let n of t)if(n in e&&typeof e[n]=="string")return e[n];return JSON.stringify(e)}return String(e)}defaultMetadataExtractor(e){if(typeof e=="object"&&e!==null){let t={},n=["id","title","name","created_at","updated_at","author","tags"];for(let s of n)s in e&&(t[s]=e[s]);return t}return{}}generateChunkId(e,t,n){let s=tt.createHash("md5").update(t).digest("hex").substring(0,8),i=tt.createHash("md5").update(JSON.stringify(e)).digest("hex").substring(0,8);return`${this.options.namespace}:${i}:${n}:${s}`}};l();var br=_(require("fs/promises"),1),rt=_(require("path"),1);var Pe=class{constructor(e,t){this.filePath=e;if(!t.toContent)throw new E("JSONSource requires a toContent callback. Example: toContent: (item) => `Name: ${item.name}`",this.filePath);this.options={namespace:t.namespace??"json",metadata:t.metadata??{},filter:t.filter??(()=>!0),chunkSize:t.chunkSize??100,toContent:t.toContent}}filePath;options;async*load(){let e;try{let t=await br.readFile(this.filePath,"utf-8");e=JSON.parse(t)}catch(t){throw new E(`Failed to parse JSON file: ${t.message}`,this.filePath)}if(Array.isArray(e)){let n=e.filter(this.options.filter).map(this.options.toContent);for(let s=0;s<n.length;s+=this.options.chunkSize){let o=n.slice(s,s+this.options.chunkSize).join(`
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
`);yield{id:`json:${this.options.namespace}:${s}`,content:o,metadata:{...this.options.metadata,source:rt.basename(this.filePath),type:"json_array_chunk",startIndex:s,endIndex:Math.min(s+this.options.chunkSize,n.length),totalItems:n.length}}}}else{let t=typeof e=="object"&&e!==null?this.options.toContent(e):typeof e=="string"?e:JSON.stringify(e);yield{id:`json:${this.options.namespace}:0`,content:t,metadata:{...this.options.metadata,source:rt.basename(this.filePath),type:"json_object"}}}}};l();var wr=_(require("fs/promises"),1),Sr=_(require("path"),1);var Ae=class{constructor(e,t){this.dbPath=e;if(!t.toContent)throw new E("SQLiteSource requires a toContent callback. Example: toContent: (row) => `Name: ${row.name}`",this.dbPath);this.options={namespace:t.namespace??"sqlite",metadata:t.metadata??{},chunkSize:t.chunkSize??100,toContent:t.toContent,query:t.query,preLoadCSV:t.preLoadCSV}}dbPath;options;async*load(){let e;try{e=(await import("better-sqlite3")).default}catch{throw new E('SQLite source requires "better-sqlite3" package. Install with: npm install better-sqlite3',this.dbPath)}try{await wr.access(this.dbPath)}catch{throw new E("SQLite database file not found",this.dbPath)}let t=new e(this.dbPath);try{this.options.preLoadCSV&&await this.loadCSV(t,this.options.preLoadCSV);let n=this.options.query??'SELECT * FROM sqlite_master WHERE type = "table"',o=t.prepare(n).all().map(a=>this.options.toContent(a));for(let a=0;a<o.length;a+=this.options.chunkSize){let c=o.slice(a,a+this.options.chunkSize).join(`
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
`);yield{id:`sqlite:${this.options.namespace}:${a}`,content:c,metadata:{...this.options.metadata,source:Sr.basename(this.dbPath),type:"sqlite_query_result",query:n,startIndex:a,endIndex:Math.min(a+this.options.chunkSize,o.length),totalRows:o.length}}}}finally{t.exec("VACUUM;")}}async loadCSV(e,t){let s=await(await import("fs")).promises.readFile(t.csvPath,"utf-8"),i=t.delimiter??",",o=s.split(`
|
|
68
|
+
`).filter(m=>m.trim());if(o.length===0)return;let a,u;t.headers!==!1?(a=o[0].split(i).map(m=>m.trim().replace(/^["']|["']$/g,"")),u=1):(a=o[0].split(i).map((b,R)=>`col${R}`),u=0);let c=t.tableName.replace(/[^a-zA-Z0-9_]/g,"_"),h=a.map(m=>`"${m.replace(/"/g,'""')}" TEXT`).join(", ");e.exec(`DROP TABLE IF EXISTS "${c}";`),e.exec(`CREATE TABLE "${c}" (${h});`);let d=a.map(()=>"?").join(", "),p=e.prepare(`INSERT INTO "${c}" VALUES (${d})`);for(let m=u;m<o.length;m++){let b=o[m].split(i).map(R=>R.trim().replace(/^["']|["']$/g,""));p.run(b)}}};l();var ze=class{options;constructor(e){if(!e.query)throw new E("PostgresSource requires a query","config");if(!e.toContent)throw new E("PostgresSource requires a toContent callback. Example: toContent: (row) => `Name: ${row.name}`","config");this.options={namespace:e.namespace??"postgres",metadata:e.metadata??{},chunkSize:e.chunkSize??100,toContent:e.toContent,query:e.query,connectionString:e.connectionString,host:e.host,port:e.port,database:e.database,user:e.user,password:e.password,ssl:e.ssl}}async*load(){let e;try{e=(await Promise.resolve().then(()=>(ys(),ms))).Client}catch{throw new E('PostgreSQL source requires "pg" package. Install with: npm install pg',"config")}let t=this.options.connectionString?{connectionString:this.options.connectionString}:{host:this.options.host??"localhost",port:this.options.port??5432,database:this.options.database,user:this.options.user,password:this.options.password,ssl:this.options.ssl},n=new e(t);try{await n.connect();let o=(await n.query(this.options.query)).rows.map(a=>this.options.toContent(a));for(let a=0;a<o.length;a+=this.options.chunkSize){let c=o.slice(a,a+this.options.chunkSize).join(`
|
|
44
69
|
|
|
45
|
-
|
|
70
|
+
---
|
|
46
71
|
|
|
47
|
-
|
|
48
|
-
`),r=[],n=[],s=[];for(let o of t){let c=o.match(/^(#{1,6})\s+(.+)$/);if(c){if(s.length>0){let d=n.map(u=>u.text);r.push({heading:d.length>0?[...d]:[""],content:s.join(`
|
|
49
|
-
`).trim(),level:n.length>0?n[n.length-1].level:0}),s=[]}let m=c[1].length,i=c[2].trim();for(;n.length>0&&n[n.length-1].level>=m;)n.pop();n.push({level:m,text:i}),s.push(o)}else s.push(o)}if(s.length>0){let o=n.map(c=>c.text);r.push({heading:o.length>0?[...o]:[""],content:s.join(`
|
|
50
|
-
`).trim(),level:n.length>0?n[n.length-1].level:0})}return r.filter(o=>o.content.length>0)}extractFrontmatter(e){let t=e.match(/^---\n([\s\S]*?)\n---/);if(!t)return{};let r=t[1],n={},s=r.split(`
|
|
51
|
-
`);for(let o of s){let c=o.match(/^(\w+):\s*(.+)$/);if(c){let m=c[1],i=c[2].trim();i==="true"?i=!0:i==="false"?i=!1:isNaN(Number(i))?typeof i=="string"&&i.startsWith("[")&&i.endsWith("]")&&(i=i.slice(1,-1).split(",").map(d=>d.trim())):i=Number(i),n[m]=i}}return n}removeFrontmatter(e){return e.replace(/^---\n[\s\S]*?\n---\n/,"")}generateChunkId(e,t,r){let n=X.createHash("md5").update(t).digest("hex").substring(0,8),s=R.basename(e,R.extname(e));return`${this.options.namespace}:${s}:${r}:${n}`}};var H=g(require("crypto"),1),Y=g(require("cheerio"),1);var $=class{constructor(e,t={}){this.urls=e;this.options={maxChunkSize:t.maxChunkSize??2e3,chunkOverlap:t.chunkOverlap??200,minChunkSize:t.minChunkSize??100,namespace:t.namespace??"web",metadata:t.metadata??{},maxDepth:t.maxDepth??1,userAgent:t.userAgent??"Toolpack-Knowledge/1.0",delayMs:t.delayMs??1e3,timeoutMs:t.timeoutMs??3e4,sameDomainOnly:t.sameDomainOnly??!0,maxPagesPerDomain:t.maxPagesPerDomain??10}}urls;options;crawledUrls=new Set;domainPageCount=new Map;lastRequestTime=new Map;async*load(){let e=await this.crawlUrls(this.urls,0);for(let t of e)try{let r=this.chunkPage(t);for(let n of r)yield n}catch(r){throw new b(`Failed to process URL ${t.url}: ${r.message}`,t.url)}}async crawlUrls(e,t){if(t>=this.options.maxDepth)return[];let r=[],n=[],s=new Set(e.map(o=>new URL(o).hostname));for(let o of e){if(this.crawledUrls.has(o))continue;let c=new URL(o).hostname,m=this.domainPageCount.get(c)??0;if(!(this.options.sameDomainOnly&&!s.has(c))&&!(m>=this.options.maxPagesPerDomain)){this.crawledUrls.add(o),this.domainPageCount.set(c,m+1);try{let i=this.lastRequestTime.get(c)??0,d=Date.now()-i;d<this.options.delayMs&&await new Promise(h=>setTimeout(h,this.options.delayMs-d));let u=await this.fetchPage(o);r.push(u),this.lastRequestTime.set(c,Date.now()),t<this.options.maxDepth-1&&n.push(...u.links)}catch(i){console.warn(`Failed to crawl ${o}: ${i.message}`)}}}if(n.length>0){let o=await this.crawlUrls(n,t+1);r.push(...o)}return r}async fetchPage(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.options.timeoutMs);try{let n=await fetch(e,{signal:t.signal,headers:{"User-Agent":this.options.userAgent}});if(!n.ok)throw new Error(`HTTP ${n.status}: ${n.statusText}`);let s=await n.text(),o=Y.load(s);o("script, style, nav, header, footer, aside").remove();let c=o("title").text().trim()||o("h1").first().text().trim()||"Untitled",m=["main","article",".content","#content","body"],i="";for(let u of m){let h=o(u);if(h.length>0){i=h.text().trim();break}}i||(i=o("body").text().trim()),i=i.replace(/\s+/g," ").trim();let d=[];return o("a[href]").each((u,h)=>{let l=o(h).attr("href");if(l)try{let p=new URL(l,e).href;p.startsWith("http")&&!p.includes("#")&&d.push(p)}catch{}}),{url:e,title:c,content:i,links:[...new Set(d)]}}finally{clearTimeout(r)}}chunkPage(e){let t=[],r=y(e.content),n;r>this.options.maxChunkSize?n=O(e.content,this.options.maxChunkSize):n=[e.content],this.options.chunkOverlap>0&&n.length>1&&(n=S(n,this.options.chunkOverlap));for(let s=0;s<n.length;s++){let o=n[s],c=this.generateChunkId(e.url,o,s);t.push({id:c,content:o,metadata:{...this.options.metadata,title:e.title,url:e.url,source:"web",chunkIndex:s,totalChunks:n.length}})}return t}generateChunkId(e,t,r){let n=H.createHash("md5").update(t).digest("hex").substring(0,8),s=H.createHash("md5").update(e).digest("hex").substring(0,8);return`${this.options.namespace}:${s}:${r}:${n}`}};var j=g(require("crypto"),1);var L=class{constructor(e,t={}){this.url=e;this.options={maxChunkSize:t.maxChunkSize??2e3,chunkOverlap:t.chunkOverlap??200,minChunkSize:t.minChunkSize??100,namespace:t.namespace??"api",metadata:t.metadata??{},headers:t.headers??{},method:t.method??"GET",timeoutMs:t.timeoutMs??3e4,pagination:t.pagination,dataPath:t.dataPath??"",contentExtractor:t.contentExtractor??this.defaultContentExtractor,metadataExtractor:t.metadataExtractor??this.defaultMetadataExtractor}}url;options;async*load(){let e=await this.fetchData();for(let t of e)try{let r=this.chunkItem(t);for(let n of r)yield n}catch(r){throw new b(`Failed to process API item: ${r.message}`,this.url)}}async fetchData(){let e=[],t=this.options.pagination?.start??0,r=this.options.pagination?.maxPages??1;for(;t<r;){let n=this.buildUrl(t),s=await this.fetchPage(n);if(s.length===0||(e.push(...s),t++,!this.options.pagination))break}return e}buildUrl(e){if(!this.options.pagination)return this.url;let t=new URL(this.url);return t.searchParams.set(this.options.pagination.param,e.toString()),t.href}async fetchPage(e){let t=new AbortController,r=setTimeout(()=>t.abort(),this.options.timeoutMs);try{let n=await fetch(e,{method:this.options.method,headers:{"Content-Type":"application/json",...this.options.headers},body:this.options.body?JSON.stringify(this.options.body):void 0,signal:t.signal});if(!n.ok)throw new Error(`HTTP ${n.status}: ${n.statusText}`);let s=await n.json();return this.extractItems(s)}finally{clearTimeout(r)}}extractItems(e){if(!this.options.dataPath)return Array.isArray(e)?e:[e];let t=this.options.dataPath.split("."),r=e;for(let n of t)if(r&&typeof r=="object"&&n in r)r=r[n];else throw new Error(`Data path '${this.options.dataPath}' not found in response`);return Array.isArray(r)?r:[r]}chunkItem(e){let t=this.options.contentExtractor(e),r=this.options.metadataExtractor(e),n=y(t),s;n>(this.options.maxChunkSize??2e3)?s=O(t,this.options.maxChunkSize??2e3):s=[t],(this.options.chunkOverlap??200)>0&&s.length>1&&(s=S(s,this.options.chunkOverlap??200));let o=[];for(let c=0;c<s.length;c++){let m=s[c],i=this.generateChunkId(e,m,c);o.push({id:i,content:m,metadata:{...this.options.metadata,...r,source:"api",apiUrl:this.url,chunkIndex:c,totalChunks:s.length}})}return o}defaultContentExtractor(e){if(typeof e=="string")return e;if(typeof e=="object"&&e!==null){let t=["content","text","description","body","message"];for(let r of t)if(r in e&&typeof e[r]=="string")return e[r];return JSON.stringify(e)}return String(e)}defaultMetadataExtractor(e){if(typeof e=="object"&&e!==null){let t={},r=["id","title","name","created_at","updated_at","author","tags"];for(let n of r)n in e&&(t[n]=e[n]);return t}return{}}generateChunkId(e,t,r){let n=j.createHash("md5").update(t).digest("hex").substring(0,8),s=j.createHash("md5").update(JSON.stringify(e)).digest("hex").substring(0,8);return`${this.options.namespace}:${s}:${r}:${n}`}};var Q=class{constructor(e){this.options=e;this.baseUrl=e.baseUrl||"http://localhost:11434",this.dimensions=e.dimensions||this.getModelDimensions(e.model)}options;dimensions;baseUrl;getModelDimensions(e){let t={"nomic-embed-text":768,"mxbai-embed-large":1024,"all-minilm":384,"snowflake-arctic-embed":1024,"bge-m3":1024,"bge-large":1024,"all-minilm:l6-v2":384,"all-minilm:l12-v2":384},r=t[e];if(!r)throw new k(`Unknown Ollama model '${e}'. Provide 'dimensions' in OllamaEmbedderOptions or use a known model: ${Object.keys(t).join(", ")}`);return r}async embed(e){let t=null,r=this.options.retries||3,n=this.options.retryDelay||1e3;for(let s=0;s<r;s++)try{let o=await fetch(`${this.baseUrl}/api/embeddings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:this.options.model,prompt:e})});if(!o.ok)throw new k(`Ollama embedding failed: ${o.statusText}`,o.status);return(await o.json()).embedding}catch(o){if(t=o,o instanceof k&&o.statusCode&&o.statusCode>=400&&o.statusCode<500)throw o;s<r-1&&await new Promise(c=>setTimeout(c,n))}throw new k(`Ollama embedding failed after ${r} retries: ${t?.message}`)}async embedBatch(e){let t=[];for(let r of e)t.push(await this.embed(r));return t}};var Z=g(require("openai"),1);var U=class{constructor(e){this.options=e;this.client=new Z.default({apiKey:e.apiKey,timeout:e.timeout||3e4}),this.dimensions=this.getModelDimensions(e.model)}options;dimensions;client;getModelDimensions(e){return{"text-embedding-3-small":1536,"text-embedding-3-large":3072,"text-embedding-ada-002":1536}[e]||1536}async embed(e){let t=null,r=this.options.retries||3;for(let n=0;n<r;n++)try{return(await this.client.embeddings.create({model:this.options.model,input:e})).data[0].embedding}catch(s){t=s,n<r-1&&await new Promise(o=>setTimeout(o,this.options.retryDelay||1e3))}throw new k(`OpenAI embedding failed after ${r} retries: ${t?.message}`)}async embedBatch(e){let t=null,r=this.options.retries||3;for(let n=0;n<r;n++)try{return(await this.client.embeddings.create({model:this.options.model,input:e})).data.map(o=>o.embedding)}catch(s){t=s,n<r-1&&await new Promise(o=>setTimeout(o,this.options.retryDelay||1e3))}throw new k(`OpenAI batch embedding failed after ${r} retries: ${t?.message}`)}};0&&(module.exports={ApiDataSource,ChunkTooLargeError,DimensionMismatchError,EmbeddingError,IngestionError,Knowledge,KnowledgeError,KnowledgeProviderError,MarkdownSource,MemoryProvider,OllamaEmbedder,OpenAIEmbedder,PersistentKnowledgeProvider,WebUrlSource,combineScores,keywordSearch});
|
|
72
|
+
`);yield{id:`postgres:${this.options.namespace}:${a}`,content:c,metadata:{...this.options.metadata,type:"postgres_query_result",query:this.options.query,startIndex:a,endIndex:Math.min(a+this.options.chunkSize,o.length),totalRows:o.length}}}}finally{await n.end()}}};l();var Ge=class{constructor(e){this.options=e;this.baseUrl=e.baseUrl||"http://localhost:11434",this.dimensions=e.dimensions||this.getModelDimensions(e.model)}options;dimensions;baseUrl;getModelDimensions(e){let t={"nomic-embed-text":768,"mxbai-embed-large":1024,"all-minilm":384,"snowflake-arctic-embed":1024,"bge-m3":1024,"bge-large":1024,"all-minilm:l6-v2":384,"all-minilm:l12-v2":384},n=t[e];if(!n)throw new k(`Unknown Ollama model '${e}'. Provide 'dimensions' in OllamaEmbedderOptions or use a known model: ${Object.keys(t).join(", ")}`);return n}async embed(e){let t=null,n=this.options.retries||3,s=this.options.retryDelay||1e3;for(let i=0;i<n;i++)try{let o=await fetch(`${this.baseUrl}/api/embeddings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:this.options.model,prompt:e})});if(!o.ok)throw new k(`Ollama embedding failed: ${o.statusText}`,o.status);return(await o.json()).embedding}catch(o){if(t=o,o instanceof k&&o.statusCode&&o.statusCode>=400&&o.statusCode<500)throw o;i<n-1&&await new Promise(a=>setTimeout(a,s))}throw new k(`Ollama embedding failed after ${n} retries: ${t?.message}`)}async embedBatch(e){let t=[];for(let n of e)t.push(await this.embed(n));return t}};l();var gs=_(require("openai"),1);var Ke=class{constructor(e){this.options=e;this.client=new gs.default({apiKey:e.apiKey,timeout:e.timeout||3e4}),this.dimensions=this.getModelDimensions(e.model)}options;dimensions;client;getModelDimensions(e){return{"text-embedding-3-small":1536,"text-embedding-3-large":3072,"text-embedding-ada-002":1536}[e]||1536}async embed(e){let t=null,n=this.options.retries||3;for(let s=0;s<n;s++)try{return(await this.client.embeddings.create({model:this.options.model,input:e})).data[0].embedding}catch(i){t=i,s<n-1&&await new Promise(o=>setTimeout(o,this.options.retryDelay||1e3))}throw new k(`OpenAI embedding failed after ${n} retries: ${t?.message}`)}async embedBatch(e){let t=null,n=this.options.retries||3;for(let s=0;s<n;s++)try{return(await this.client.embeddings.create({model:this.options.model,input:e})).data.map(o=>o.embedding)}catch(i){t=i,s<n-1&&await new Promise(o=>setTimeout(o,this.options.retryDelay||1e3))}throw new k(`OpenAI batch embedding failed after ${n} retries: ${t?.message}`)}};l();var bs=_(require("openai"),1);var fc="https://openrouter.ai/api/v1",Ve=class{constructor(e){this.options=e;this.client=new bs.default({apiKey:e.apiKey,baseURL:fc,timeout:e.timeout||3e4}),this.dimensions=e.dimensions??this.getModelDimensions(e.model)}options;dimensions;client;getModelDimensions(e){let t={"nvidia/llama-nemotron-embed-vl-1b-v2":4096,"nvidia/llama-nemotron-embed-vl-1b-v2:free":4096,"openai/text-embedding-3-small":1536,"openai/text-embedding-3-large":3072,"openai/text-embedding-ada-002":1536},n=t[e];if(n===void 0)throw new k(`Unknown OpenRouter embedding model '${e}'. Pass 'dimensions' in OpenRouterEmbedderOptions or use a known model: ${Object.keys(t).join(", ")}`);return n}async embed(e){let t=null,n=this.options.retries??3;for(let s=0;s<n;s++)try{return(await this.client.embeddings.create({model:this.options.model,input:e})).data[0].embedding}catch(i){t=i,s<n-1&&await new Promise(o=>setTimeout(o,this.options.retryDelay??1e3))}throw new k(`OpenRouter embedding failed after ${n} retries: ${t?.message}`)}async embedBatch(e){let t=null,n=this.options.retries??3;for(let s=0;s<n;s++)try{return(await this.client.embeddings.create({model:this.options.model,input:e})).data.map(o=>o.embedding)}catch(i){t=i,s<n-1&&await new Promise(o=>setTimeout(o,this.options.retryDelay??1e3))}throw new k(`OpenRouter batch embedding failed after ${n} retries: ${t?.message}`)}};l();var pc={"gemini-embedding-001":3072,"text-embedding-005":768,"text-multilingual-embedding-002":768},We=class{dimensions;projectId;location;model;outputDimensionality;retries;retryDelay;constructor(e={}){this.model=e.model??"gemini-embedding-001",this.location=e.location??process.env.VERTEX_AI_LOCATION??process.env.TOOLPACK_VERTEXAI_LOCATION??"us-central1";let t=e.projectId??process.env.VERTEX_AI_PROJECT??process.env.TOOLPACK_VERTEXAI_PROJECT??process.env.GOOGLE_CLOUD_PROJECT;if(!t)throw new k("VertexAIEmbedder requires a GCP project ID. Pass projectId in options or set VERTEX_AI_PROJECT / GOOGLE_CLOUD_PROJECT.");this.projectId=t,this.dimensions=e.outputDimensionality??pc[this.model]??3072,this.outputDimensionality=this.dimensions,this.retries=e.retries??3,this.retryDelay=e.retryDelay??1e3}async embed(e){return(await this.embedBatch([e]))[0]}async embedBatch(e){let t=null;for(let n=0;n<this.retries;n++)try{return await this._request(e)}catch(s){t=s,console.error(`[${new Date().toISOString()}] [ERROR] [VertexAI Embedder] attempt ${n+1}/${this.retries} failed: ${t.message}`),n<this.retries-1&&await new Promise(i=>setTimeout(i,this.retryDelay))}throw new k(`VertexAI embedding failed after ${this.retries} retries: ${t?.message}`)}async _request(e){let t=()=>new Date().toISOString();console.debug(`[${t()}] [DEBUG] [VertexAI Embedder] embed texts=${e.length} model=${this.model}`);let n=await this._getAccessToken(),s=`https://${this.location}-aiplatform.googleapis.com/v1/projects/${this.projectId}/locations/${this.location}/publishers/google/models/${this.model}:predict`,i=await fetch(s,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify({instances:e.map(u=>({content:u,taskType:"RETRIEVAL_DOCUMENT"})),parameters:{outputDimensionality:this.outputDimensionality}})});if(!i.ok){let u=await i.text();throw new k(`VertexAI embeddings API error ${i.status}: ${u}`)}let o=await i.json(),a=o.predictions[0]?.embeddings?.values?.length??0;return console.debug(`[${t()}] [DEBUG] [VertexAI Embedder] embed complete dims=${a}`),o.predictions.map(u=>u.embeddings.values)}async _getAccessToken(){let{GoogleAuth:e}=await import("google-auth-library"),s=await(await new e({scopes:["https://www.googleapis.com/auth/cloud-platform"]}).getClient()).getAccessToken();if(!s.token)throw new k("Failed to obtain Google access token via ADC.");return s.token}};0&&(module.exports={ApiDataSource,ChunkTooLargeError,DimensionMismatchError,EmbeddingError,IngestionError,JSONSource,Knowledge,KnowledgeError,KnowledgeProviderError,MarkdownSource,MemoryProvider,OllamaEmbedder,OpenAIEmbedder,OpenRouterEmbedder,PersistentKnowledgeProvider,PostgresSource,SQLiteSource,VertexAIEmbedder,WebUrlSource,combineScores,keywordSearch});
|