MCPcopy Index your code
hub / github.com/TrsstProject/trsst

github.com/TrsstProject/trsst @v0.2.6

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.6 ↗ · + Follow
494 symbols 1,310 edges 36 files 157 documented · 32%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

trsst

What is trsst?

It depends on who you are.

  • For most users, trsst looks like a microblogging social network -- a twitter clone -- where you can follow other people and news feeds.

  • For other users, trsst looks like a stream-style RSS reader with built-in microblog publishing capabilities.

  • And for a few, trsst looks like an extension to the Atom Publishing Protocol where anyone can anonymously create self-signed and/or self-encrypted feeds and entries and publish them to any participating server.

All of these are correct.

Download Alpha v0.2

Current binaries are downloadable here: https://github.com/TrsstProject/trsst/releases

Frequently Asked Questions

The FAQ is currently kept here: https://github.com/TrsstProject/trsst/wiki/Frequently-Asked-Questions

Development Howto

Requires Java and Maven.

To build:

mvn clean install

To run:

java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar

Usage:

post [<id>] [--status <text>] [--encrypt <pubkey>]
 -a,--attach             Attach the specified file, or - for std input
 -b,--base <url>         Set base URL for this feed
 -c,--content <text>     Specify entry content on command line
 -e,--encrypt <pubkey>   Encrypt entry for specified public key
 -g,--tag <text>         Add a tag
 -i,--icon <url>         Set as this feed's icon or specify url
 -l,--logo <url>         Set as this feed's logo or specify url
 -m,--mail <email>       Set this feed's author email
 -n,--name <text>        Set this feed's author name
 -p,--pass <text>        Specify passphrase on the command line
 -r,--mention <id>       Add a mention
 -s,--status <text>      Specify status update on command line
    --strict             Require SSL certs
    --subtitle <text>    Set this feed's subtitle
 -t,--title <text>       Set this feed's title
 -u,--url <url>          Attach the specified url to the new entry
 -v,--verb <verb>        Specify an activitystreams verb for this entry
    --vanity <prefix>    Generate feed id with specified prefix

pull <id>...
 -d,--decrypt <id>   Decrypt entries as specified recipient id
 -h,--host <url>     Set host server for this operation

push <url> <id>...
 -d,--decrypt <id>   Decrypt entries as specified recipient id
 -h,--host <url>     Set host server for this operation

serve
    --api          Expose client API
    --clear        Turn off SSL
    --gui          Launch embedded GUI
    --port <arg>   Specify port
    --tor          Use TOR (experimental)

Example: start a server.

$ java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar serve --port 8181

Services now available at: https://192.168.1.5:8181/feed

Example: create a new empty feed.

$ java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar post

Starting temporary service at: http://192.168.1.5:51341
Generating new feed id... 
New feed id created: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:trsst="http://trsst.com/spec/0.1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xml:space="default">
  <updated>2014-03-10T20:34:13.440Z</updated>
  <trsst:sign>
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvzJUjrJSRS0NHsKq1yHur5xdhH35ao4IVTDF_WuwZti3AiAt2gZ8Sehp83PV8yD9ONlw5-DiXYbgY5PUgJTVcQ</trsst:sign>
  <trsst:encrypt>
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE9FJDVs846H1ne1G5upDY8CIgF_HhmCILl-967JRQTjYTzRVwHMz5mFakwOKdYBcea9Q_1wLL1L-nqWznUh_uQg</trsst:encrypt>
  <id>urn:feed:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1</id>
  <ds:Signature>
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
      <ds:Reference URI="">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <ds:DigestValue>
        GK1D1kLSydLFRXCHJnPk2p9LjUQ=</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>
    CGjdfB+n6uAjIDQ8UCp+GMyjlP4OazvIwzoHKZ2FL8dRGK7PVfLq/dPaGt2SysHHlmCKNhmvQ2BE
    2+hQAUtQ7g==</ds:SignatureValue>
  </ds:Signature>
</feed>

Example: create a new post on a preexisting feed.

$ java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar post --status "First Post" M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1

Starting temporary service at: http://192.168.1.5:51371
Obtaining keys for feed id: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
Using existing account id: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xml:space="default" xml:base="http://192.168.1.5:51371/M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1">
  <updated>2014-03-10T20:35:03.379Z</updated>
  <id>urn:feed:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1</id>
  <sign xmlns="http://trsst.com/spec/0.1">
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvzJUjrJSRS0NHsKq1yHur5xdhH35ao4IVTDF_WuwZti3AiAt2gZ8Sehp83PV8yD9ONlw5-DiXYbgY5PUgJTVcQ</sign>
  <encrypt xmlns="http://trsst.com/spec/0.1">
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE9FJDVs846H1ne1G5upDY8CIgF_HhmCILl-967JRQTjYTzRVwHMz5mFakwOKdYBcea9Q_1wLL1L-nqWznUh_uQg</encrypt>
  <ds:Signature>
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
      <ds:Reference URI="">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <ds:DigestValue>
        n/4ocrBhhFr/9+uIzmKkGQ0ufbk=</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>
    68l6RxoG8ZAs3QvRs3HNeQipHE/QYuRD9jhqfZzoJO2PzfdCJ9DU2/XdDEwFBJzp96fJjW/fmQWI
    VEuQa+GBQw==</ds:SignatureValue>
  </ds:Signature>
  <entry>
    <updated>2014-03-10T20:35:03.379Z</updated>
    <id>
    urn:entry:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1:144adb4ae53</id>
    <published>2014-03-10T20:35:03.379Z</published>
    <title type="text">First Post</title>
    <rights type="text">attribution, no derivatives, revoked if
    deleted</rights>
    <ds:Signature>
      <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
        <ds:Reference URI="">
          <ds:Transforms>
            <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          </ds:Transforms>
          <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
          <ds:DigestValue>
          fghpP3mG0nzB5Sj4kyqlNbRGsDY=</ds:DigestValue>
        </ds:Reference>
      </ds:SignedInfo>
      <ds:SignatureValue>
      ys+J0FryCApGD/juC20q9YrbVTIH5wQqmhgvuFmYZdBlhEVpIUg6XaFNbjc4eiAnxMs5r1qACp9n
      NB1GrL7MuQ==</ds:SignatureValue>
    </ds:Signature>
  </entry>
</feed>

Example: create an encrypted post on a preexisting feed.

$ java -jar target/trsst-client-0.2-SNAPSHOT-exe.jar post --status "Secret Post" M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
-- encrypt MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEQn1eOiToQlurH0gIE0AsBTJNBF1jrOSSIr8i4RSRdvx7dtkD1hre0vgPabJMLH9QktK6AYhl31xkf3xqp_mPxw

Starting temporary service at: http://192.168.1.5:51384
Obtaining keys for feed id: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
Using existing account id: M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xml:space="default" xml:base="http://192.168.1.5:51371/M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1">
  <updated>2014-03-10T20:37:10.244Z</updated>
  <id>urn:feed:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1</id>
  <sign xmlns="http://trsst.com/spec/0.1">
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvzJUjrJSRS0NHsKq1yHur5xdhH35ao4IVTDF_WuwZti3AiAt2gZ8Sehp83PV8yD9ONlw5-DiXYbgY5PUgJTVcQ</sign>
  <encrypt xmlns="http://trsst.com/spec/0.1">
  MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE9FJDVs846H1ne1G5upDY8CIgF_HhmCILl-967JRQTjYTzRVwHMz5mFakwOKdYBcea9Q_1wLL1L-nqWznUh_uQg</encrypt>
  <ds:Signature>
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
      <ds:Reference URI="">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <ds:DigestValue>
        5KBNuLZ9TTbN0UL65hFSjLN+myE=</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>
    aCS1AhKl29Pdlcgs6SRhI6oNhEWpak1/8Ft8CrgwTF/qjh7Bcy3H7UjiBC97YI2bHZcedV5Z0BRf
    htGt6UCGUQ==</ds:SignatureValue>
  </ds:Signature>
  <entry>
    <id>
    urn:entry:M4QovUyLYdyMy2ZB4s7BwLztwYcyJqrJ1:144adb69de4</id>
    <updated>2014-03-10T20:37:10.244Z</updated>
    <published>2014-03-10T20:37:10.244Z</published>
    <predecessor xmlns="http://trsst.com/spec/0.1">
    ys+J0FryCApGD/juC20q9YrbVTIH5wQqmhgvuFmYZdBlhEVpIUg6XaFNbjc4eiAnxMs5r1qACp9n
    NB1GrL7MuQ==</predecessor>
    <title type="text">Encrypted content</title>
    <content type="application/xenc+xml">
      <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
        <CipherData>
          <CipherValue>
          BO8MZ3_KSnwnTD3g0apIsP6GnmzF4RrXMhVXV7VgcqBYuITqfAcKwR6s0rjb0BBGRrtxuiiqz6dIDbRGcTSuxVdIgTPcWMvDsixO-I6wnQTT5KXl6_DhoIO_perg9ap0cT-dTi6qS-mKdaN0ADqf3E6vTsgpGTt3h_8mNQCYo9baJbobFgdmzjRi75KIMyXijA</CipherValue>
        </CipherData>
      </EncryptedData>
      <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
        <CipherData>
          <CipherValue>
          BAr8zcyj6SrI0T70_-U44V4edUxB9jNNaNLfFumWrL-yj_DoOm-DcDy4lwW3SnjqeFb-_at-72bb-mPrmaMnbAk6CVVfHDgg4pRDTriBQiCxwX8VDlCA5ileCdX0qi40c2NTgsEGS7IWwmnHwfIGj5_C7bmeyiIEhB9PiU_v7t-KRXrNPblcNarZ3Gbsu71SJw</CipherValue>
        </CipherData>
      </EncryptedData>
      <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
        <CipherData>
          <CipherValue>
          nxTxeHPGnONdAEvpWtClWbA7C5SQsAdjFeleXDnMrOPb8YqTuAy_Uc4d39ycT7aoMmZlH1VWPfWyjJq43azenQbtmluNaw1ABxRvI8yWfNJZYb6fIxDQLL4en_bQ9GW5Z2epJuPU0IxU4gj99YZ_hOjyO5jpOnUO7shoTt8CRvRdtoEqI8QGT8-nmJyIg4wNMeLRTEcQ503dekG8ks6TrFGkrYAa5nlDMxrlAe_2etfr1eBDctgHkk18gCFTjO18Ydjx955DzsbZHqmnqok4eom6SNVdkHXWjQMt4bhWgJWFDjnwpaYoiqcms8upDNope6G98sib8vNX6Muw8liEq787xy4LMLbS6fbMPHzHDYV7yZV1xKA4YRKV99mWkENnhmjGrNjMrV5WVmBg_8VU2h4FicGkYtBl3mPD_Q967-CyTJlwdNWmtrECascazcdSROI7fpB0ZDnE9gdNPUlUC6YACXemjYRCY1OFyOwiVBFX8UhqR9CLsb0KzQtC_WOavNpGneZoPEO3hGVyQusawYb4ESZumuDPLSYkm6TTiRBxxlgCgmWu45zBNidOmDy2ARzq_f-aEozbKyzDJEy7hR-jXWbRrxvVUV24eiJd0gV8c7AEJYT6edXnO2PXbEjR3Itl-JOBec4k8Y2dTkUDXvdO1u1hk6uZ_oD1-RizQVo</CipherValue>
        </CipherData>
      </EncryptedData>
    </content>
    <ds:Signature>
      <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
        <ds:Reference URI="">
          <ds:Transforms>
            <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          </ds:Transforms>
          <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
          <ds:DigestValue>
          1Izt6hPxvZExmTWiSPT5QbMuoKs=</ds:DigestValue>
        </ds:Reference>
      </ds:SignedInfo>
      <ds:SignatureValue>
      iUFSwxDvxti1hjDFgmux7NPrk3PEEFAnhNnNqlad2VB42iir2Xl8RPcEZA1Sne7Rc51b376E9Iy0
      qT5shelegQ==</ds:SignatureValue>
    </ds:Signature>
  </entry>
</feed>

Extension points exported contracts — how you extend this code

Storage (Interface)
Storage handles all read and write persistence for a trsst server. Implementors will only need to implement this class i [6 …
src/main/java/com/trsst/server/Storage.java

Core symbols most depended-on inside this repo

getId
called by 77
src/main/java/com/trsst/server/TrsstAdapter.java
push
called by 75
src/main/java/com/trsst/client/Client.java
get
called by 74
src/main/java/com/trsst/server/CachingStorage.java
call
called by 69
src/main/java/com/trsst/ui/AppMain.java
equals
called by 60
src/main/java/com/trsst/client/AnonymSSLSocketFactory.java
getInstance
called by 56
src/main/java/com/trsst/ui/AppMain.java
jQuery
called by 50
src/main/resources/com/trsst/ui/site/jquery-1.10.1.js
put
called by 36
src/main/java/com/trsst/server/CachingStorage.java

Shape

Method 341
Function 128
Class 24
Interface 1

Languages

Java74%
TypeScript26%

Modules by API surface

src/main/resources/com/trsst/ui/site/jquery-1.10.1.js87 symbols
src/main/java/com/trsst/Common.java51 symbols
src/main/java/com/trsst/server/TrsstAdapter.java42 symbols
src/main/java/com/trsst/server/LuceneStorage.java32 symbols
src/main/java/com/trsst/server/FileStorage.java25 symbols
src/main/java/com/trsst/client/EntryOptions.java24 symbols
src/main/resources/com/trsst/ui/site/controller.js23 symbols
src/main/java/com/trsst/server/CachingStorage.java21 symbols
src/main/java/com/trsst/client/FeedOptions.java21 symbols
src/main/java/com/trsst/Command.java20 symbols
src/main/java/com/trsst/server/AbderaProvider.java17 symbols
src/main/java/com/trsst/server/Storage.java16 symbols

For agents

$ claude mcp add trsst \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact