Skip to content

Commit d8a753a

Browse files
committed
chore: add getRecordSelector to selectors.ts
1 parent 5cd68ab commit d8a753a

File tree

3 files changed

+24
-35
lines changed

3 files changed

+24
-35
lines changed

packages/kad-dht/src/content-fetching/index.ts

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import map from 'it-map'
44
import parallel from 'it-parallel'
55
import { pipe } from 'it-pipe'
66
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
7-
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
87
import {
98
ALPHA
109
} from '../constants.js'
@@ -14,10 +13,10 @@ import {
1413
valueEvent,
1514
queryErrorEvent
1615
} from '../query/events.js'
17-
import { bestRecord } from '../record/selectors.js'
16+
import { bestRecord, getRecordSelector } from '../record/selectors.js'
1817
import { verifyRecord } from '../record/validators.js'
1918
import { createPutRecord, bufferToRecordKey } from '../utils.js'
20-
import type { KadDHTComponents, Validators, Selectors, ValueEvent, QueryEvent, SelectFn } from '../index.js'
19+
import type { KadDHTComponents, Validators, Selectors, ValueEvent, QueryEvent } from '../index.js'
2120
import type { Message } from '../message/dht.js'
2221
import type { Network, SendMessageOptions } from '../network.js'
2322
import type { PeerRouting } from '../peer-routing/index.js'
@@ -65,16 +64,6 @@ export class ContentFetching {
6564
}) ?? this.put
6665
}
6766

68-
private getRecordSelector (key: Uint8Array): SelectFn | undefined {
69-
const parts = uint8ArrayToString(key).split('/')
70-
71-
if (parts.length < 3) {
72-
return
73-
}
74-
75-
return this.selectors[parts[1].toString()]
76-
}
77-
7867
/**
7968
* Attempt to retrieve the value for the given key from
8069
* the local datastore
@@ -158,7 +147,7 @@ export class ContentFetching {
158147

159148
// store the record locally
160149
const dsKey = bufferToRecordKey(this.datastorePrefix, key)
161-
const selector = this.getRecordSelector(key)
150+
const selector = getRecordSelector(this.selectors, key)
162151

163152
if (selector != null) {
164153
try {

packages/kad-dht/src/record/selectors.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import { InvalidParametersError } from '@libp2p/interface'
22
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
33
import { MissingSelectorError } from '../errors.js'
4-
import type { Selectors } from '../index.js'
4+
import type { SelectFn, Selectors } from '../index.js'
5+
6+
export function getRecordSelector (selectors: Selectors, key: Uint8Array): SelectFn | undefined {
7+
const parts = uint8ArrayToString(key).split('/')
8+
9+
if (parts.length < 3) {
10+
return
11+
}
12+
13+
return selectors[parts[1].toString()]
14+
}
515

616
/**
717
* Select the best record out of the given records
@@ -11,16 +21,16 @@ export function bestRecord (selectors: Selectors, k: Uint8Array, records: Uint8A
1121
throw new InvalidParametersError('No records given')
1222
}
1323

14-
const kStr = uint8ArrayToString(k)
15-
const parts = kStr.split('/')
24+
const selector = getRecordSelector(selectors, k)
1625

17-
if (parts.length < 3) {
18-
throw new InvalidParametersError('Record key does not have a selector function')
19-
}
26+
if (selector == null) {
27+
const kStr = uint8ArrayToString(k)
28+
const parts = kStr.split('/')
2029

21-
const selector = selectors[parts[1].toString()]
30+
if (parts.length < 3) {
31+
throw new InvalidParametersError('Record key does not have a selector function')
32+
}
2233

23-
if (selector == null) {
2434
throw new MissingSelectorError(`No selector function configured for key type "${parts[1]}"`)
2535
}
2636

packages/kad-dht/src/rpc/handlers/put-value.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { InvalidMessageError } from '@libp2p/interface'
22
import { Libp2pRecord } from '@libp2p/record'
3-
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
3+
import { getRecordSelector } from '../../record/selectors.js'
44
import { verifyRecord } from '../../record/validators.js'
55
import { bufferToRecordKey } from '../../utils.js'
6-
import type { Selectors, SelectFn, Validators } from '../../index.js'
6+
import type { Selectors, Validators } from '../../index.js'
77
import type { Message } from '../../message/dht.js'
88
import type { DHTMessageHandler } from '../index.js'
99
import type { ComponentLogger, Logger, PeerId } from '@libp2p/interface'
@@ -38,16 +38,6 @@ export class PutValueHandler implements DHTMessageHandler {
3838
this.selectors = selectors
3939
}
4040

41-
private getRecordSelector (key: Uint8Array): SelectFn | undefined {
42-
const parts = uint8ArrayToString(key).split('/')
43-
44-
if (parts.length < 3) {
45-
return
46-
}
47-
48-
return this.selectors[parts[1].toString()]
49-
}
50-
5141
async handle (peerId: PeerId, msg: Message): Promise<Message> {
5242
const key = msg.key
5343
this.log('%p asked us to store value for key %b', peerId, key)
@@ -64,7 +54,7 @@ export class PutValueHandler implements DHTMessageHandler {
6454

6555
const recordKey = bufferToRecordKey(this.datastorePrefix, deserializedRecord.key)
6656

67-
const selector = this.getRecordSelector(deserializedRecord.key)
57+
const selector = getRecordSelector(this.selectors, deserializedRecord.key)
6858

6959
if (selector != null) {
7060
try {

0 commit comments

Comments
 (0)