Receiving events over websocket

It’s nice to see some data when playing with the debugging endpoint. Use strm sim run-random demo to generate random data on the demo stream. stream.

In one terminal:

strm create stream demo --save
strm simulate random-events demo (1)

Starting to simulate random strmprivacy/demo/1.0.2 events to stream demo.
Sending one event every 1000 ms.
Sent 5 events
...
1 you don’t need to specify credentials because you created the stream with the --save flag.

The strm listen web-socket command is used for showing the events in real time.

$ strm listen web-socket --help
Read events via the web-socket (not for production purposes)

Usage:
  strm listen web-socket (stream-name) [flags]

Flags:
      --client-id string       Client id to be used for receiving data
      --client-secret string   Client secret to be used for receiving data

client-id and client-secret are optional, but required if you didn’t create the stream with the --save option. See cli docs.

Now lets consume the events from the simulator; in another terminal do:

$ strm listen web-socket demo
{
  "strmMeta": {
    "eventContractRef": "strmprivacy/example/1.3.0",
    "nonce": 159456216,
    "timestamp": 1629202317371,
    "keyLink": "1e3a47c9-2b4a-4820-b16c-975a63d69d9d",
    "billingId": "demo8542234275",
    "consentLevels": [ 0 ]
  },
  "uniqueIdentifier": "AW0ku+QlmuzFHUc5asuBS/S2aPhnJFRXMkd9Sl8Z",
  "consistentValue": "AW0ku+SxBlO/YwVHZ8kbq7PbRiS9UqoafqYsGrYm2p8=",
  "someSensitiveValue": "AW0ku+Tf+Plyd/WN6E4NEpEaBEGVBHReySSdbmrjacAe",
  "notSensitiveValue": "not-sensitive-5"
}
...
The debugging endpoint shows json values, even when the actual wire format is Avro binary in this case. This is to make it easier to inspect the values.

The Hard Way

We don’t have to use the strm command, we can use any websocket client to interact with the STRM Privacy web-socket endpoint.

First generate an OAuth2 idToken as described here.

Here we use wscat to connect to the websocket endpoint.

wscat -H "authorization:Bearer $idToken" -c wss://websocket.strmprivacy.io/ws
Connected (press CTRL+C to quit)
< {
  "strmMeta": {
    "eventContractRef": "strmprivacy/example/1.3.0",
    "nonce": -1234364567,
    "timestamp": 1629192610656,
    "keyLink": "57ff8035-ae35-4e82-9bf2-a4d0a544c89d",
    "billingId": "demo8542234275",
    "consentLevels": [ 0, 1, 2, 3 ]
  },
  "uniqueIdentifier": "ARYe0czxEBMEC6jh5GWYicyvqBD0JBOMRoQSm2PO",
  "consistentValue": "ARYe0cxg2b9W++VYEMYKbZXLzgQf+cAkcZuqUh82lMw=",
  "someSensitiveValue": "ARYe0cwC5ImORtYRIzKPzaxKyjErTn/9fyGhVTseDxg=",
  "notSensitiveValue": "not-sensitive-48"
}

Note the encryption of all fields labelled PII in the strmprivacy/example/1.3.0 event contract.