The Express, Node.js, TypeScript, MySQL based server for indexing specific relationships on Solid Pods. This way it is possible to find indexed people by these specific relationships.
Right now it's hardcoded to index triples
(Person) [is interested in] (Something)
where (Person)
is a person (uri) of type foaf:Person
,
[is interested in]
is predicate foaf:topic_interest
,
and (Something)
is an uri representing anything, typically wikidata entity
(Dit) [has topic] (Something)
where (Dit)
is of type https://ditup.example/#Idea
or https://ditup.example/#Problem
,
[has topic]
is predicate as:tag
,
and (Something)
is same as above
You need to have MySQL (or MariaDB) installed on your machine Create a mysql database.
CREATE DATABASE your_new_database_name;
For added security, create a separate database user, and grant them all rights to this database. You can use your root account instead, but that's not as safe. If your password leaks, you're exposing all your mysql databases
CREATE USER 'your_new_username'@'localhost' IDENTIFIED BY 'your_preferably_secure_password';
GRANT ALL PRIVILEGES TO 'your_new_username'@'localhost' ON 'your_new_database_name'.*;
FLUSH PRIVILEGES;
git clone https://github.com/ditup/solid-index.git
cd solid-index/
yarn # or npm install
cp .env.sample to dev.env
And edit dev.env with your database connection info
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=your_new_username
DB_PASSWORD=your_preferably_secure_password
DB_DATABASE=your_new_database_name
yarn start
# or npm start
Now, you can send POST http://localhost:3000/inbox
with header content-type:application/ld+json;profile="https://www.w3.org/ns/activitystreams"
and body
{
"@context": "https://www.w3.org/ns/activitystreams",
"@id": "",
"@type": "Announce", // or "Remove"
"actor": "[your Solid identity uri]",
"object": "[(Person) or (Dit)]***"
}
The request must also be authenticated with a Solid identity, perhaps using fetch
from @inrupt/solid-client-authn-browser library
To succeed with authentication, you must have the following triple in your profile document: <you> solid:oidcIssuer <your_issuer>
, e.g. <https://test.solidcommunity.net/profile/card#me> solid:oidcIssuer <https://solidcommunity.net>.
, and the index server must be able to find it (it must be public).
*** (Person) or (Dit) should be your Solid identity uri, or uri of something you created and wish to add to the index
(This request tries to follow Linked Data Notifications specification, but does so only lousily at this point.)
If all goes well, you should receive response 202 Accepted
. That means that your desire to index (or unindex) object
has been saved, and it will soon be processed and become (or stop being) discoverable.
This index only processes profiles and items that are public.
In the future, it will be possible to withdraw profiles and things from the index, however it doesn't work now. (We'll need to include Solid-OIDC authentication for that.)
Currently, people can both add and remove themselves and their stuff.
You're supposed to run Linked Data Fragments server on top of this database. TODO and repository coming soon...
This project is in an early alpha state. Use at your own risk.
We run it in production, with LDF server serving the data, with pm2 and Nginx. Documentation shall be added.
- you need to authenticate
- to authenticate, the profile needs to contain
me: solid:oidcIssuer <issuer url e.g. https://solidcommunity.net>.