Protocol

Record

The core unit of data of the BAQ network.

{
  "author": {
    "entity": "maggie.baq.run"
  },
  "id": "bdfb0c15ebb9491d97f90ec0138f4509",
  "created_at": "2023-09-05T09:42:05+00:00",
  "version": {
    "author": {
      "entity": "maggie.baq.run"
    },
    "hash": "63c5b5c54c014f498ac19d20335f5c18bdc10d089de64489952fcf1f79adcb06",
    "created_at": "2023-09-05T09:42:05+00:00"
  },
  "permissions": {
    "read": "public"
  },
  "type": {
    "entity": "types.baq.dev",
    "record_id": "bf48729e2b984bb29c67e9da9683cdce",
    "version_hash": "2bdcebd2206ae6d1d3fe2c1937d4d3585ca50be8b09bdf8010c90713fd809781"
  },
  "content": {...}
}

Properties

  • author EntityLink

    • Entity link to the initial author of the record.
  • id RecordId

    • Unique identifier of the record within the scope of its initial author.
  • created_at RecordDate

    • Date at which the record was initially created according to its initial author.
  • version RecordVersion

    • Version-specific details.
  • permissions RecordPermissions

    • Access control information.
  • type VersionLink

    • Version link to the type record defining the record’s schema.
  • content optional

    • Content of the record, must conform to the record’s schema.
  • no_content RecordNoContent optional

    • Record tombstone after deletion.

      Mutually exclusive with content.

User-dependent properties

These are not part of the original record and are added by the server to provide additional information to the user.

  • source enum

    • Where the record came from.

    • Possible values from highest to lowest priority:

      • self : Created by the server’s user.

      • resolution : Record downloaded from a link.

      • notification : Received through a notification.

      • notification_unknown : From a user with no Standing record­.

      • subscription : Received through a subscription­.

      • proxy : Proxied record.

    • When two values apply, the highest priority takes precedence.

  • received_at RecordDate

    • Date at which the record was received by the server.

Notes

  • The record envelope is the same for every record.

  • The expected content changes depending on the type.

  • A record is uniquely identified by it’s author and id.

Versioning information specific to a given version of the record.

Properties

  • author EntityLink

    • Entity link to the author of the record version.
  • hash VersionHash

  • created_at RecordDate

    • Date at which the record version was created according to the author.
  • parent_hash string optional

    • Version hash of this version’s parent, if any.

User-dependent properties

These are not part of the original record version and are added by the server to provide additional information to the user.

  • received_at RecordDate

    • Date at which the record version was received by the server.

Access control information for the record.

Properties

  • read “public” | EntityLink[] optional

    • Read permissions for the record.

      "public" exposes it to everyone, including unauthenticated requests.

      Defaults to [{author}].

  • write EntityLink[] optional

    • Write permissions for the record.

      Must be a subset of read.

      Defaults to [{author}].

  • notify EntityLink[] optional

    • Entities to notify about the record.

      Must be a subset of read.

      Defaults to every entity in read.

Notes

  • Because of the default values for read, write, and notify, the empty object {} represents private permissions where only the author can access the record.

Record tombstone after deletion.

Includes information that makes it possible to query the tombstone for synchronization purposes.

Properties

  • action enum

    • Action that resulted in the record being deleted.

      • "delete"
      • "local"
      • "leave"
  • links BonusLink[]

    • Links that were in the record’s content prior to deletion.

This record has empty permissions and can only be accessed by its author. The content matches the File­ record type.

{
  "author": {
    "entity": "sean.baq.run"
  },
  "id": "bdfb0c15ebb9491d97f90ec0138f4509",
  "created_at": "2023-09-05T09:42:05+00:00",
  "version": {
    "author": {
      "entity": "sean.baq.run"
    },
    "hash": "63c5b5c54c014f498ac19d20335f5c18bdc10d089de64489952fcf1f79adcb06",
    "created_at": "2023-09-05T09:42:05+00:00"
  },
  "permissions": {},
  "type": {
    "entity": "types.baq.dev",
    "record_id": "bf48729e2b984bb29c67e9da9683cdce",
    "version_hash": "2bdcebd2206ae6d1d3fe2c1937d4d3585ca50be8b09bdf8010c90713fd809781"
  },
  "content": {
    "blob": {
      "hash": "efeffbbafe60450d8217acec395386932dadb8f146c24a7f91491aa80429d6a5",
      "type": "audio/mpeg",
      "name": "soundtrack.mp3"
    },
    "size": 3554267
  }
}

This record is shared between the author and one other entity. That entity was notified upon creation of the record. The content matches the Message­ record type.

{
  "author": {
    "entity": "andersen.baq.run"
  },
  "id": "bdfb0c15ebb9491d97f90ec0138f4509",
  "created_at": "2023-09-05T09:42:05+00:00",
  "version": {
    "author": {
      "entity": "andersen.baq.run"
    },
    "hash": "63c5b5c54c014f498ac19d20335f5c18bdc10d089de64489952fcf1f79adcb06",
    "created_at": "2023-09-05T09:42:05+00:00"
  },
  "permissions": {
    "read": [
      {"entity": "andersen.baq.run"},
      {"entity": "samantha.baq.run"}
    ]
  },
  "type": {
    "entity": "types.baq.dev",
    "record_id": "91c81f5e1f124f55a3483d50845dd8d8",
    "version_hash": "863debdf824ab35e1f41fefc507492beeb65841832711fb01dcf3000e5ab83b6"
  },
  "content": {
    "conversation": {
      "entity": "andersen.baq.run",
      "record_id": "4e5da49d38b44ea7804817bd42e43768"
    },
    "text": "Hey Sam, how's it going?"
  }
}

This record is publicly accessible and can be fetched with a simple unauthenticated HTTP request. The content matches the Article­ record type.

{
  "author": {
    "entity": "samantha.baq.run"
  },
  "id": "bdfb0c15ebb9491d97f90ec0138f4509",
  "created_at": "2023-09-05T09:42:05+00:00",
  "version": {
    "author": {
      "entity": "samantha.baq.run"
    },
    "hash": "63c5b5c54c014f498ac19d20335f5c18bdc10d089de64489952fcf1f79adcb06",
    "created_at": "2023-09-05T09:42:05+00:00"
  },
  "permissions": {
    "read": "public"
  },
  "type": {
    "entity": "types.baq.dev",
    "record_id": "6a6d633527b1429db700161c24e356cf",
    "version_hash": "03679484a55b476f99b883c81b7cc30b92876f5cd00144b5972f7196e4174977"
  },
  "content": {
    "title": "Federated content in 2024",
    "summary": "...",
    "content": "...",
    "published_at": "2023-09-05T14:42:05+00:00"
  }
}

This record was deleted by its author. It remains as a tombstone for synchronization purposes. The content was replaced by a no_content object that carries over the links the record previously had. This makes it possible for clients to fetch the tombstone even when filtering by link.

{
  "author": {
    "entity": "andersen.baq.run"
  },
  "id": "bdfb0c15ebb9491d97f90ec0138f4509",
  "created_at": "2023-09-05T09:42:05+00:00",
  "version": {
    "author": {
      "entity": "andersen.baq.run"
    },
    "hash": "99f85638200443138dc7a8166aeecb2e87fd5b0ae7fb46d8aaa461c4ef1d88e4",
    "parent_hash": "63c5b5c54c014f498ac19d20335f5c18bdc10d089de64489952fcf1f79adcb06",
    "created_at": "2023-09-05T09:42:05+00:00"
  },
  "permissions": {
    "read": [
      {"entity": "andersen.baq.run"},
      {"entity": "samantha.baq.run"}
    ]
  },
  "type": {
    "entity": "types.baq.dev",
    "record_id": "91c81f5e1f124f55a3483d50845dd8d8",
    "version_hash": "863debdf824ab35e1f41fefc507492beeb65841832711fb01dcf3000e5ab83b6"
  },
  "no_content": {
    "action": "delete",
    "links": [
      {
        "path": "$['content']['conversation']",
        "type": "record",
        "link": {
          "entity": "andersen.baq.run",
          "record_id": "4e5da49d38b44ea7804817bd42e43768"
        }
      }
    ]
  }
}
© 2024 Quentez