29 lines
861 B
TypeScript
29 lines
861 B
TypeScript
import { Base64Message } from '../../../backend/src/Model/Base64Message'
|
|
import { Decoder } from '../../../backend/src/Model/Decoder'
|
|
import { get } from 'sparkplug-payload'
|
|
import { MessageDecoder } from './MessageDecoder'
|
|
var sparkplug = get('spBv1.0')
|
|
|
|
export const SparkplugDecoder: MessageDecoder = {
|
|
formats: ['Sparkplug'],
|
|
canDecodeTopic(topic: string) {
|
|
return !!topic.match(/^spBv1\.0\/[^/]+\/[ND](DATA|CMD|DEATH|BIRTH)\/[^/]+(\/[^/]+)?$/u)
|
|
},
|
|
decode(input) {
|
|
try {
|
|
const message = Base64Message.fromString(
|
|
JSON.stringify(
|
|
// @ts-ignore
|
|
sparkplug.decodePayload(new Uint8Array(input.toBuffer()))
|
|
)
|
|
)
|
|
return { message, decoder: Decoder.SPARKPLUG }
|
|
} catch {
|
|
return {
|
|
error: 'Failed to decode sparkplugb payload',
|
|
decoder: Decoder.NONE,
|
|
}
|
|
}
|
|
},
|
|
}
|