• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / storage / 25639316851

10 May 2026 08:44PM UTC coverage: 74.164% (-0.09%) from 74.255%
25639316851

Pull #1094

github

web-flow
Merge db2c619cb into a4d3fb5c3
Pull Request #1094: feat: embedded vector store

4138 of 6145 branches covered (67.34%)

Branch coverage included in aggregate %.

230 of 301 new or added lines in 7 files covered. (76.41%)

2 existing lines in 1 file now uncovered.

8257 of 10568 relevant lines covered (78.13%)

399.25 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

62.26
/src/http/plugins/vector.ts
1
import { getTenantConfig, multitenantKnex } from '@internal/database'
2
import { ERRORS } from '@internal/errors'
3
import {
4
  BucketScopedSingleShard,
5
  KnexShardStoreFactory,
6
  ShardCatalog,
7
  Sharder,
8
  SingleShard,
9
} from '@internal/sharding'
10
import {
11
  createEmbeddedVectorStore,
12
  createS3VectorClient,
13
  EmbeddedVectorStore,
14
  KnexVectorMetadataDB,
15
  S3Vector,
16
  VectorStore,
17
  VectorStoreManager,
18
} from '@storage/protocols/vector'
19
import { FastifyInstance } from 'fastify'
20
import fastifyPlugin from 'fastify-plugin'
21
import { getConfig } from '../../config'
22

23
declare module 'fastify' {
24
  interface FastifyRequest {
25
    s3Vector: VectorStoreManager
26
  }
27
}
28

29
export const s3vector = fastifyPlugin(async function (fastify: FastifyInstance) {
28✔
30
  const config = getConfig()
266✔
31
  const { vectorBackend, vectorEmbeddedPath, vectorS3Buckets } = config
266✔
32

33
  let adapter: VectorStore | undefined
34
  let backendEnabled = false
266✔
35

36
  if (vectorBackend === 'embedded') {
266!
NEW
37
    if (!vectorEmbeddedPath) {
×
38
      // Plugin still registers; preHandler will throw FeatureNotEnabled.
NEW
39
      backendEnabled = false
×
40
    } else {
NEW
41
      adapter = await createEmbeddedVectorStore({
×
42
        basePath: vectorEmbeddedPath,
43
        ttlMs: 60_000,
44
      })
NEW
45
      backendEnabled = true
×
46
    }
47
  } else if (vectorBackend === 's3') {
266!
48
    if (vectorS3Buckets.length > 0) {
266✔
49
      adapter = new S3Vector(createS3VectorClient())
265✔
50
      backendEnabled = true
265✔
51
    }
52
  }
53

54
  fastify.addHook('preHandler', async (req) => {
266✔
55
    if (!backendEnabled || !adapter) {
118✔
56
      throw ERRORS.FeatureNotEnabled('vector', 'Vector service not configured')
1✔
57
    }
58

59
    const { isMultitenant, vectorMaxBucketsCount, vectorMaxIndexesCount } = config
117✔
60

61
    let maxBucketCount = vectorMaxBucketsCount
117✔
62
    let maxIndexCount = vectorMaxIndexesCount
117✔
63

64
    if (isMultitenant) {
117!
65
      const { features } = await getTenantConfig(req.tenantId)
×
66
      maxBucketCount = features?.vectorBuckets?.maxBuckets || vectorMaxBucketsCount
×
67
      maxIndexCount = features?.vectorBuckets?.maxIndexes || vectorMaxIndexesCount
×
68
    }
69

70
    const db = req.db.pool.acquire()
117✔
71
    const store = new KnexVectorMetadataDB(db)
117✔
72

73
    let shard: Sharder
74
    if (vectorBackend === 'embedded') {
117!
NEW
75
      shard = new BucketScopedSingleShard({
×
76
        keyPrefix: 'embedded__',
77
        capacity: Number.MAX_SAFE_INTEGER,
78
      })
79
    } else if (isMultitenant) {
117!
NEW
80
      shard = new ShardCatalog(new KnexShardStoreFactory(multitenantKnex))
×
81
    } else {
82
      shard = new SingleShard({
117✔
83
        shardKey: vectorS3Buckets[0],
84
        capacity: 10000,
85
      })
86
    }
87

88
    req.s3Vector = new VectorStoreManager(adapter, store, shard, {
117✔
89
      tenantId: req.tenantId,
90
      maxBucketCount,
91
      maxIndexCount,
92
    })
93
  })
94
})
95

96
// Re-export so existing callers that pulled from this module keep compiling.
97
export type { EmbeddedVectorStore }
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc