Podcastindex-org / podping-hivewriter

The hive writer component of podping.
MIT License
15 stars 5 forks source link

Add "updateExt" reason #64

Open agates opened 1 year ago

agates commented 1 year ago

Add "updateExt" reason

Podping currently only serves to notify consumers of changes in Podcasting 2.0 RSS feeds. If a change is made to an external file referenced from an RSS feed, we currently have no way to notify consumers of such a change (beyond mechanisms built into HTTP, which don't translate to other protocols).

If we want to solve this the most straightforward solution would be to include a list of strings of external resources changed in a given feed. The problem with this is we only have so much space available to us and there's really no need to reference the external resources directly in Podping.

Therefore, we can remedy this with Podping by adding a new reason code that notifies consumers when an existing RSS feed that utilizes The Podcast Namespace and has a defined <podcast:guid> along with a list of digests of the resources that have been changed.

The digest provided does not need to be secure and should be as small as possible. I am leaning toward CRC32 as it is small and fast. CRC16 is another possibility if we determine it's unique enough and can decide on a specific implementation.

The CRC is of the resource URI/IRI, not the resource content. For example, the CRC32 of the string "https://noagendaassets.com/enc/1601061118.678_pciavatar.jpg" is 3756971431.

The proposed definition of this reason is as follows:

As well as the following proposed Podping schema change:

{
    "version": "2.0",
    "medium": "<ex: podcast>",
    "reason": "<ex: update>",
    "iris": ["list", "of", "iris", "example"],
    "guids": ["list", "of", "<podcast:guid>s", "00000000-0000-0000-0000-000000000000"],
    "crcs": [[1, 2], [1, 2, 3], [4200000000, 3300000000], [1000000000]]
}

Where version becomes 2.0 and crcs is a new optional property of a valid list of lists of CRC numbers that must match in length to guids. The order of crcs MUST match the order of guids for sake of correlation. When the reason is updateExt, iris becomes optional and SHOULD NOT be set for the sake of efficiency. The CRCs are digests of the identifiers of the resources, not the resources themselves.

The logic behind iris becoming optional for the updateExt reason is external resources can only ever be updated if the feed already exists.