diff options
Diffstat (limited to 'extension/src/webext-bridge/internal/connection-args.ts')
-rw-r--r-- | extension/src/webext-bridge/internal/connection-args.ts | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/extension/src/webext-bridge/internal/connection-args.ts b/extension/src/webext-bridge/internal/connection-args.ts new file mode 100644 index 0000000..9b93e19 --- /dev/null +++ b/extension/src/webext-bridge/internal/connection-args.ts @@ -0,0 +1,31 @@ +import type { EndpointFingerprint } from './endpoint-fingerprint' + +export interface ConnectionArgs { + endpointName: string + fingerprint: EndpointFingerprint +} + +const isValidConnectionArgs = ( + args: unknown, + requiredKeys: (keyof ConnectionArgs)[] = ['endpointName', 'fingerprint'], +): args is ConnectionArgs => + typeof args === 'object' + && args !== null + && requiredKeys.every(k => k in args) + +export const encodeConnectionArgs = (args: ConnectionArgs) => { + if (!isValidConnectionArgs(args)) + throw new TypeError('Invalid connection args') + + return JSON.stringify(args) +} + +export const decodeConnectionArgs = (encodedArgs: string): ConnectionArgs => { + try { + const args = JSON.parse(encodedArgs) + return isValidConnectionArgs(args) ? args : null + } + catch (error) { + return null + } +} |