Dolores (named for Dolores del Rio the first latin american actress to break into hollywood) is a mini-service for the uploading and streaming of short-form video.
In 2013, an app called Vine hit the iOS App Store. It allowed users the ability to create short (six second) videos that were shared timeline-style with the world. It was brilliant.
And like everything brilliant on the internet, it was purchased by a gigantocorp, Twitter in this case, filled with ads and spyware, and eventually killed after being ruined.
The legacy of Vine lives on in the current age as TikTok, Instagram Reels, and YouTube Shorts, all of which are agressive spyware serving you user created content in order to extract from you your interests and marketable demographics so as to better sell advertising and/or other things....
The conceit of all this is that the storage and serving of video content is both hard and expensive, and thus the excessive marketing is necessary. Dolores is an attempt to reduce this storage and serving to its barebones, to see if the modern web can do so in a cost-effective way.
Gotta keep it CRUDy on this one.
PUT
/user/create
Creates a new user if pubKey does not exist, and returns existing uuid if it does.
name required data type description pubKey true string (hex) the publicKey of the user's keypair timestamp true string in a production system timestamps narrow window for replay attacks signature true string (signature) the signature from sessionless for the message
http code content-type response 200
application/json
USER
400
application/json
{"code":"400","message":"Bad Request"}
curl -X PUT -H "Content-Type: application/json" -d '{"pubKey": "key", "timestamp": "now", "signature": "sig"}' https://<placeholderURL>/user/create
GET
/user/:uuid?timestamp=&signature=
Returns a user by their uuid
name required data type description timestamp true string in a production system timestamps prevent replay attacks signature true string (signature) the signature from sessionless for the message
http code content-type response 200
application/json
USER
406
application/json
{"code":"406","message":"Not acceptable"}
curl -X GET -H "Content-Type: application/json" https://<placeholderURL>/<uuid>?timestamp=123&signature=signature
PUT
/user/:uuid/short-form/:title/video
Puts a video with the given title
name required data type description x-pn-artifact-type true video type x-pn-timestamp true string in a production system timestamps narrow window for replay attacks x-pn-signature true string (signature) the signature from sessionless for the message
name required data type description video true video type the video to upload
http code content-type response 200
application/json
USER
400
application/json
{"code":"400","message":"Bad Request"}
TODO
GET
/user/:uuid/short-form/:title/video
Gets the video with the given title
name required data type description x-pn-timestamp true string in a production system timestamps narrow window for replay attacks x-pn-signature true string (signature) the signature from sessionless for the message
http code content-type response 200
application/json
video
400
application/json
{"code":"400","message":"Bad Request"}
TODO
DELETE
/user/:uuid/short-form/:title/video
Deletes the user's video with the given title
name required data type description x-pn-artifact-type true video type x-pn-timestamp true string in a production system timestamps narrow window for replay attacks x-pn-signature true string (signature) the signature from sessionless for the message
http code content-type response 200
application/json
USER
400
application/json
{"code":"400","message":"Bad Request"}
TODO