Skip to content

Commit 3ad1d60

Browse files
Added support for tag query mode
1 parent 3ff2c55 commit 3ad1d60

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

src/kvstore/__tests/GlobalKVStore.test.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,54 @@ describe('GlobalKVStore', () => {
373373
})
374374
})
375375

376+
it('forwards tagQueryMode "all" to the resolver (default)', async () => {
377+
primeResolverEmpty(mockResolver)
378+
379+
const tags = ['music', 'rock']
380+
const result = await kvStore.get({ tags, tagQueryMode: 'all' })
381+
382+
expect(Array.isArray(result)).toBe(true)
383+
expect(mockResolver.query).toHaveBeenCalledWith({
384+
service: 'ls_kvstore',
385+
query: expect.objectContaining({
386+
tags,
387+
tagQueryMode: 'all'
388+
})
389+
})
390+
})
391+
392+
it('forwards tagQueryMode "any" to the resolver', async () => {
393+
primeResolverEmpty(mockResolver)
394+
395+
const tags = ['music', 'jazz']
396+
const result = await kvStore.get({ tags, tagQueryMode: 'any' })
397+
398+
expect(Array.isArray(result)).toBe(true)
399+
expect(mockResolver.query).toHaveBeenCalledWith({
400+
service: 'ls_kvstore',
401+
query: expect.objectContaining({
402+
tags,
403+
tagQueryMode: 'any'
404+
})
405+
})
406+
})
407+
408+
it('defaults to tagQueryMode "all" when not specified', async () => {
409+
primeResolverEmpty(mockResolver)
410+
411+
const tags = ['category:news']
412+
const result = await kvStore.get({ tags })
413+
414+
expect(Array.isArray(result)).toBe(true)
415+
expect(mockResolver.query).toHaveBeenCalledWith({
416+
service: 'ls_kvstore',
417+
query: expect.objectContaining({ tags })
418+
})
419+
// Verify tagQueryMode is not explicitly set (will default to 'all' on server side)
420+
const call = (mockResolver.query as jest.Mock).mock.calls[0][0]
421+
expect(call.query.tagQueryMode).toBeUndefined()
422+
})
423+
376424
it('includes token data when includeToken=true for key queries', async () => {
377425
primeResolverWithOneOutput(mockResolver)
378426

src/kvstore/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ export interface KVStoreQuery {
4242
controller?: PubKeyHex
4343
protocolID?: WalletProtocol
4444
tags?: string[]
45+
/**
46+
* Controls tag matching behavior when tags are specified.
47+
* - 'all': Requires all specified tags to be present (default)
48+
* - 'any': Requires at least one of the specified tags to be present
49+
*/
50+
tagQueryMode?: 'all' | 'any'
4551
limit?: number
4652
skip?: number
4753
sortOrder?: 'asc' | 'desc'

0 commit comments

Comments
 (0)