2023-11-14 21:22:52 +05:30
import type { PubsubTopic , ShardInfo } from "@waku/interfaces" ;
2023-10-10 20:18:02 +05:30
2023-11-14 21:22:52 +05:30
export const shardInfoToPubsubTopics = (
2023-10-10 20:18:02 +05:30
shardInfo : ShardInfo
2023-11-14 21:22:52 +05:30
) : PubsubTopic [ ] = > {
2023-10-10 20:18:02 +05:30
return shardInfo . indexList . map (
( index ) = > ` /waku/2/rs/ ${ shardInfo . cluster } / ${ index } `
) ;
} ;
2023-09-27 15:28:07 +05:30
export function ensurePubsubTopicIsConfigured (
2023-11-14 21:22:52 +05:30
pubsubTopic : PubsubTopic ,
configuredTopics : PubsubTopic [ ]
2023-09-27 15:28:07 +05:30
) : void {
if ( ! configuredTopics . includes ( pubsubTopic ) ) {
throw new Error (
2023-11-14 21:22:52 +05:30
` Pubsub topic ${ pubsubTopic } has not been configured on this instance. Configured topics are: ${ configuredTopics } . Please update your configuration by passing in the topic during Waku node instantiation. `
2023-09-27 15:28:07 +05:30
) ;
}
}
2023-11-07 20:06:44 -08:00
/ * *
* Given a string , will throw an error if it is not formatted as a valid content topic for autosharding based on https : //rfc.vac.dev/spec/51/
* @param contentTopic String to validate
* /
export function ensureValidContentTopic ( contentTopic : string ) : void {
const parts = contentTopic . split ( "/" ) ;
if ( parts . length < 5 || parts . length > 6 ) {
throw Error ( "Content topic format is invalid" ) ;
}
// Validate generation field if present
if ( parts . length == 6 ) {
const generation = parseInt ( parts [ 1 ] ) ;
if ( isNaN ( generation ) ) {
throw new Error ( "Invalid generation field in content topic" ) ;
}
if ( generation > 0 ) {
throw new Error ( "Generation greater than 0 is not supported" ) ;
}
}
// Validate remaining fields
const fields = parts . splice ( - 4 ) ;
// Validate application field
if ( fields [ 0 ] . length == 0 ) {
throw new Error ( "Application field cannot be empty" ) ;
}
// Validate version field
if ( fields [ 1 ] . length == 0 ) {
throw new Error ( "Version field cannot be empty" ) ;
}
// Validate topic name field
if ( fields [ 2 ] . length == 0 ) {
throw new Error ( "Topic name field cannot be empty" ) ;
}
// Validate encoding field
if ( fields [ 3 ] . length == 0 ) {
throw new Error ( "Encoding field cannot be empty" ) ;
}
}