module AnyCable::Streams

def signature(val)

def signature(val)
  key = AnyCable.config.streams_secret
  raise ArgumentError, "streams signing secret is missing" unless key
  ::OpenSSL::HMAC.hexdigest("SHA256", key, val)
end

def signed(stream_name)

def signed(stream_name)
  ::Base64.urlsafe_encode64(::JSON.dump(stream_name)).then do |encoded|
    "#{encoded}--#{signature(encoded)}"
  end
end

def verified(signed_stream_name)

def verified(signed_stream_name)
  encoded, sig = signed_stream_name.split("--")
  raise ArgumentError, "stream name has incorrect format" unless encoded
  return unless sig == signature(encoded)
  ::Base64.urlsafe_decode64(encoded).then do |decoded|
    ::JSON.parse(decoded)
  end
end