├── .gitignore
├── .nvmrc
├── LICENSE.md
├── README.md
├── documentation
├── SolidOS_fetcher.md
├── Using_Private_Resources_In_SolidOS.md
├── auth-upgrade-to-use-DPoP.md
├── guidelines
│ ├── coding_guidelines.md
│ ├── dependencies_and_release_guidelines.md
│ └── testing_guidelines.md
├── resources
│ └── architecture.svg
└── solidos_dependencies.svg
├── lerna.json
├── package-lock.json
├── package.json
└── scripts
├── add
├── delete
├── install
├── release
├── reset
├── start
├── start-css
├── start-nss
├── switch-branch
├── update-mashlib-repo.sh
├── update-solid-panes-repo.sh
├── update-this-panes-repo.sh
├── watch
└── watch-css
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/git,osx,node,webstorm,intellij,visualstudiocode
3 | # Edit at https://www.gitignore.io/?templates=git,osx,node,webstorm,intellij,visualstudiocode
4 |
5 | ### Git ###
6 | # Created by git for backups. To disable backups in Git:
7 | # $ git config --global mergetool.keepBackup false
8 | *.orig
9 |
10 | # Created by git when using merge tools for conflicts
11 | *.BACKUP.*
12 | *.BASE.*
13 | *.LOCAL.*
14 | *.REMOTE.*
15 | *_BACKUP_*.txt
16 | *_BASE_*.txt
17 | *_LOCAL_*.txt
18 | *_REMOTE_*.txt
19 |
20 | ### Intellij ###
21 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
22 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
23 |
24 | # User-specific stuff
25 | .idea/**/workspace.xml
26 | .idea/**/tasks.xml
27 | .idea/**/usage.statistics.xml
28 | .idea/**/dictionaries
29 | .idea/**/shelf
30 |
31 | # Generated files
32 | .idea/**/contentModel.xml
33 |
34 | # Sensitive or high-churn files
35 | .idea/**/dataSources/
36 | .idea/**/dataSources.ids
37 | .idea/**/dataSources.local.xml
38 | .idea/**/sqlDataSources.xml
39 | .idea/**/dynamic.xml
40 | .idea/**/uiDesigner.xml
41 | .idea/**/dbnavigator.xml
42 |
43 | # Gradle
44 | .idea/**/gradle.xml
45 | .idea/**/libraries
46 |
47 | # Gradle and Maven with auto-import
48 | # When using Gradle or Maven with auto-import, you should exclude module files,
49 | # since they will be recreated, and may cause churn. Uncomment if using
50 | # auto-import.
51 | # .idea/modules.xml
52 | # .idea/*.iml
53 | # .idea/modules
54 | # *.iml
55 | # *.ipr
56 |
57 | # CMake
58 | cmake-build-*/
59 |
60 | # Mongo Explorer plugin
61 | .idea/**/mongoSettings.xml
62 |
63 | # File-based project format
64 | *.iws
65 |
66 | # IntelliJ
67 | out/
68 |
69 | # mpeltonen/sbt-idea plugin
70 | .idea_modules/
71 |
72 | # JIRA plugin
73 | atlassian-ide-plugin.xml
74 |
75 | # Cursive Clojure plugin
76 | .idea/replstate.xml
77 |
78 | # Crashlytics plugin (for Android Studio and IntelliJ)
79 | com_crashlytics_export_strings.xml
80 | crashlytics.properties
81 | crashlytics-build.properties
82 | fabric.properties
83 |
84 | # Editor-based Rest Client
85 | .idea/httpRequests
86 |
87 | # Android studio 3.1+ serialized cache file
88 | .idea/caches/build_file_checksums.ser
89 |
90 | ### Intellij Patch ###
91 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
92 |
93 | # *.iml
94 | # modules.xml
95 | # .idea/misc.xml
96 | # *.ipr
97 |
98 | # Sonarlint plugin
99 | .idea/sonarlint
100 |
101 | ### Node ###
102 | # Logs
103 | logs
104 | *.log
105 | npm-debug.log*
106 | yarn-debug.log*
107 | yarn-error.log*
108 | lerna-debug.log*
109 |
110 | # Diagnostic reports (https://nodejs.org/api/report.html)
111 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
112 |
113 | # Runtime data
114 | pids
115 | *.pid
116 | *.seed
117 | *.pid.lock
118 |
119 | # Directory for instrumented libs generated by jscoverage/JSCover
120 | lib-cov
121 |
122 | # Coverage directory used by tools like istanbul
123 | coverage
124 | *.lcov
125 |
126 | # nyc test coverage
127 | .nyc_output
128 |
129 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
130 | .grunt
131 |
132 | # Bower dependency directory (https://bower.io/)
133 | bower_components
134 |
135 | # node-waf configuration
136 | .lock-wscript
137 |
138 | # Compiled binary addons (https://nodejs.org/api/addons.html)
139 | build/Release
140 |
141 | # Dependency directories
142 | node_modules/
143 | jspm_packages/
144 |
145 | # TypeScript v1 declaration files
146 | typings/
147 |
148 | # TypeScript cache
149 | *.tsbuildinfo
150 |
151 | # Optional npm cache directory
152 | .npm
153 |
154 | # Optional eslint cache
155 | .eslintcache
156 |
157 | # Optional REPL history
158 | .node_repl_history
159 |
160 | # Output of 'npm pack'
161 | *.tgz
162 |
163 | # Yarn Integrity file
164 | .yarn-integrity
165 |
166 | # dotenv environment variables file
167 | .env
168 | .env.test
169 |
170 | # parcel-bundler cache (https://parceljs.org/)
171 | .cache
172 |
173 | # next.js build output
174 | .next
175 |
176 | # nuxt.js build output
177 | .nuxt
178 |
179 | # vuepress build output
180 | .vuepress/dist
181 |
182 | # Serverless directories
183 | .serverless/
184 |
185 | # FuseBox cache
186 | .fusebox/
187 |
188 | # DynamoDB Local files
189 | .dynamodb/
190 |
191 | ### OSX ###
192 | # General
193 | .DS_Store
194 | .AppleDouble
195 | .LSOverride
196 |
197 | # Icon must end with two \r
198 | Icon
199 |
200 | # Thumbnails
201 | ._*
202 |
203 | # Files that might appear in the root of a volume
204 | .DocumentRevisions-V100
205 | .fseventsd
206 | .Spotlight-V100
207 | .TemporaryItems
208 | .Trashes
209 | .VolumeIcon.icns
210 | .com.apple.timemachine.donotpresent
211 |
212 | # Directories potentially created on remote AFP share
213 | .AppleDB
214 | .AppleDesktop
215 | Network Trash Folder
216 | Temporary Items
217 | .apdisk
218 |
219 | ### VisualStudioCode ###
220 | .vscode/*
221 | !.vscode/settings.json
222 | !.vscode/tasks.json
223 | !.vscode/launch.json
224 | !.vscode/extensions.json
225 |
226 | ### VisualStudioCode Patch ###
227 | # Ignore all local history of files
228 | .history
229 |
230 | ### WebStorm ###
231 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
232 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
233 |
234 | # User-specific stuff
235 |
236 | # Generated files
237 |
238 | # Sensitive or high-churn files
239 |
240 | # Gradle
241 |
242 | # Gradle and Maven with auto-import
243 | # When using Gradle or Maven with auto-import, you should exclude module files,
244 | # since they will be recreated, and may cause churn. Uncomment if using
245 | # auto-import.
246 | # .idea/modules.xml
247 | # .idea/*.iml
248 | # .idea/modules
249 | # *.iml
250 | # *.ipr
251 |
252 | # CMake
253 |
254 | # Mongo Explorer plugin
255 |
256 | # File-based project format
257 |
258 | # IntelliJ
259 |
260 | # mpeltonen/sbt-idea plugin
261 |
262 | # JIRA plugin
263 |
264 | # Cursive Clojure plugin
265 |
266 | # Crashlytics plugin (for Android Studio and IntelliJ)
267 |
268 | # Editor-based Rest Client
269 |
270 | # Android studio 3.1+ serialized cache file
271 |
272 | ### WebStorm Patch ###
273 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
274 |
275 | # *.iml
276 | # modules.xml
277 | # .idea/misc.xml
278 | # *.ipr
279 |
280 | # Sonarlint plugin
281 |
282 | # End of https://www.gitignore.io/api/git,osx,node,webstorm,intellij,visualstudiocode
283 |
284 | .idea
285 | workspaces/*
286 | !workspaces/.gitkeep
287 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 18.12.1
2 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright 2019 - present
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included
13 | in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
20 | OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 🤗 Welcome to the repo of SolidOS
2 |
3 |
4 |
5 | [](https://github.com/solidos/solidos/blob/main/LICENSE.md)
6 | [](https://github.com/solidos/solidos/issues)
7 | [](https://app.element.io/#/room/#solid_solidos:gitter.im)
8 |
9 | If you made it here you must already have heard about [Solid](https://solidproject.org).
10 | This space is home to the SolidOS code. Keep reading if you want to know:
11 |
12 | - 🤔 [What is SolidOS](#-What-is-SolidOS)
13 | - [What you can do today with SolidOS](#What-you-can-do-today-with-SolidOS)
14 | - [SolidOS vision, mission and roadmap](#solidos-vision-mission-and-roadmap)
15 | - 👩🏽💻 [SolidOS technical intro](#-solidos-technical-intro)
16 | - [SolidOS deeper technical topics](#solidos-deeper-technical-topics)
17 | - 👯 [How the SolidOS team works](#-How-the-SolidOS-team-works)
18 | - [SolidOS team meetings](#SolidOS-team-meetings)
19 | - [SolidOS team instant chat](#SolidOS-team-instant-chat)
20 | - [SolidOS team discussions](#SolidOS-team-discussions)
21 | - [SolidOS tasks](#SolidOS-tasks)
22 | - 🙋🏻 [How you can contribute and help SolidOS thrive](#-How-you-can-contribute-and-help-SolidOS-thrive)
23 | - [For anyone up to writing some code](#For-anyone-up-to-writing-some-code)
24 | - [For anyone who likes builds or releases or GitHub CI or deployments](#for-anyone-who-likes-builds-or-github-ci-or-releases-or-deployments)
25 | - [For anyone who likes writing text](#For-anyone-who-likes-writing-text)
26 | - [For anyone with an eye for design](#For-anyone-with-an-eye-for-design)
27 | - 🆕 [Getting started with the SolidOS code](#-Getting-started-with-the-SolidOS-code)
28 | - [SolidOS first time setup of code](#SolidOS-first-time-setup-of-code)
29 | - [How to use SolidOS on localhost](#How-to-use-SolidOS-on-localhost)
30 | - [How to make changes in repos](#How-to-make-changes-in-repos)
31 | - [Developing SolidOS code](#Developing-SolidOS-code)
32 | - [Testing SolidOS code](#Testing-SolidOS-code)
33 | - [SolidOS build & release](#SolidOS-build-and-release)
34 | - 📜 [License](#-License)
35 | - 🎤 [Feedback and questions](#-Feedback-and-questions)
36 |
37 | For experimenting with SolidOS implementations, you can:
38 |
39 | - try SolidOS on a [test-pod](https://test-pod.solidcommunity.net:8443/) (provider: `https://solidcommunity.net:8443`, user and password: `test-pod`)
40 | - take a pod on or [another provider](https://solidproject.org/users/get-a-pod#get-a-pod-from-a-pod-provider)
41 | - check out the [SolidOS WebApp](https://solidos.github.io/mashlib/dist/browse.html)
42 | - use as a stand-alone desktop app with [Data-Kitchen](https://github.com/solidos/data-kitchen)
43 |
44 | If you are looking for something else, let us try and guide you:
45 |
46 | - for learning about Solid, read [about Solid](https://github.com/solid/solid) and visit [solidproject.org](https://solidproject.org)
47 | - to try out Solid, head over to [getting started with Solid](https://solidproject.org/developers/tutorials/getting-started)
48 | - for how SolidOS works, [visit the user guide](https://github.com/solidos/userguide) and [SolidOS project Pod](https://solidos.solidcommunity.net/)
49 | - for how the community works, go over to [Solid process](https://github.com/solid/process)
50 | - chat with others about Solid on the [forum](https://forum.solidproject.org/) and on [instant chats](https://gitter.im/solid/home)
51 | - join an event over at [Solid events](https://solidproject.org/events) or sign up for the [Solid newsletter](https://solidproject.org/newsletter) to not miss any news
52 | - read the Solid community code of conduct at [Solid CoC](https://github.com/solid/process/blob/main/code-of-conduct.md)
53 |
54 | Further links:
55 |
56 | - [SolidOS explanation video](https://vimeo.com/643594034#t=9m39s)
57 | - [SolidOS goals & roadmap](https://solidos.solidcommunity.net/Team/docs/SolidOSNorthStar.html)
58 | - [SolidOS FAQs](https://github.com/solidos/solidos/wiki/FAQs)
59 | - [SolidOS Wiki](https://github.com/solidos/solidos/wiki)
60 | - [SolidOS Guidelines](./documentation/guidelines/)
61 | - report a problem with SolidOS by [creating a git issue](https://github.com/solidos/solidos/issues)
62 | - have a new idea? Create a Solid [user story/new idea ticket](https://github.com/solid/user-stories)
63 | - check out the in-progress [Solid specification](https://solidproject.org/TR/protocol) and in-progress [Solid specification repo](https://solid.github.io/specification/). Find the previous specifications, now outdated but still in use if you work with NSS: [https://github.com/solid/solid-spec](https://github.com/solid/solid-spec).
64 | - [Glossary](https://github.com/solid/solidcommunity.net/wiki/Glossary) of terms frequently used in Solid environment
65 |
66 | ## 🤔 What is SolidOS?
67 |
68 | _**🌟🌟🌟 SolidOS is an Operating System for Solid. 🌟🌟🌟**_
69 |
70 | [Solid](https://solidproject.org) is developing into a booming ecosystem which involves specifications 📃, tech stack 🛠, servers 💻, and apps 🕹. We, the SolidOS team, believe that this ecosystem also needs an Operating System.
71 |
72 | When you get a new phone, PC, or tablet, they usually come with an operating system that provides some basic functionality to get started and be productive. More importantly, you can personalize your OS to your needs, by installing apps, managing content, and much more.
73 |
74 | Solid is not shipped with a piece of hardware (who knows, maybe in the future it will...). For now, you get into the ecosystem once you create a WebID and provision your own personal data store (often called a "Pod") ([see getting started with Solid - get a pod](https://solidproject.org/users/get-a-pod#get-a-pod-from-a-pod-provider)). Immediately after getting your new Solid WebID and Pod space, SolidOS is helping you to navigate the Solid ecosystem.
75 |
76 | SolidOS is much more. SolidOS showcases the possibility of [Solid](https://solidproject.org) for the future, by which we mean —
77 |
78 | - **true data ownership** — management of personal data & authorization control
79 | - **avoidance of vendor lock-in to services** — easy moving to a different Pod or WebID provider
80 | - **data reuse between applications** — with help of data interoperability and data discoverability
81 |
82 | Watch a [SolidOS explanation video](https://vimeo.com/643594034#t=9m39s) as part of the [Solid World event series](https://solidproject.org/events).
83 |
84 | ### What you can do today with SolidOS
85 |
86 | Take a look at an example: [SolidOS project Pod](https://solidos.solidcommunity.net/). SolidOS implemented features:
87 |
88 | - 📰 create a personal webpage
89 | - 📝 manage your WebID and the data about yourself
90 | - 📝 manage personal data/files on your Pod
91 | - 🤝 directly connect and engage with other people who are part of the ecosystem (add friends, chat, ...)
92 | - 💡 make use of interconnected apps
93 | - 🔧 create your own app [with Inrupt's Solid Reach SDK](https://docs.inrupt.com/developer-tools/javascript/react-sdk/application/) or [get inspired from a blog post](https://solidos.solidcommunity.net/public/2021/BuildingSolidAppsUsingPublicData-V3.html)
94 | - and more ([see SolidOS user guide](https://github.com/solidos/userguide))
95 |
96 | ### SolidOS vision, mission and roadmap
97 |
98 | Read more about the current SolidOS 🌟 vision, goals 🎯, and roadmap 🚗 on the [SolidOS project Pod](https://solidos.solidcommunity.net/Team/docs/SolidOSNorthStar.html).
99 |
100 | _**Note:** SolidOS is also known by names like Data Browser (default) or Databrowser, and at times as mashlib._ Which name is used depends on which flavour of SolidOS you are referring to:
101 |
102 | - The SolidOS Databrowser Frontend - a frontend for Solid Servers like [solidcommunity.net](https://solidcommunity.net), represented by this codebase;
103 | - The SolidOS Databrowser Webapp - a stand-alone web app served from mashlib: [https://solidos.github.io/mashlib/dist/browse.html](https://solidos.github.io/mashlib/dist/browse.html);
104 | - The SolidOS Data-Kitchen - a stand-alone desktop app: [https://github.com/solidos/data-kitchen](https://github.com/solidos/data-kitchen);
105 | - The SolidOS software stack - a set of libraries that may be used independently of the databrowser, see next section.
106 |
107 | ## 👩🏽💻 SolidOS technical intro
108 |
109 | The SolidOS stack contains —
110 |
111 | - [Node.js](https://nodejs.dev/)
112 | - [Javascript](https://www.w3schools.com/js/)
113 | - [Typescript](https://www.typescriptlang.org/)
114 | - [npm](https://www.npmjs.com/)
115 | - [Node Version Manager (nvm)](https://github.com/nvm-sh/nvm)
116 | - [Lerna](https://lerna.js.org/)
117 | - [GitHub CI](https://docs.github.com/en/actions/automating-builds-and-tests/about-continuous-integration)
118 | - [bash scripts](https://www.gnu.org/software/bash/manual/html_node/index.html)
119 |
120 | It also makes use of —
121 |
122 | - [Storybook](https://storybook.js.org/)
123 | - [Webpack](https://webpack.js.org/)
124 | - [Jest](https://jestjs.io/)
125 | - [Cypress](https://www.cypress.io/)
126 | - [ESLint](https://eslint.org/)
127 | - [Babel](https://babeljs.io/)
128 | - [Travis](https://travis-ci.org/)
129 |
130 | Let's take a look at an architecture diagram of SolidOS:
131 | 
132 |
133 | A colorful dependency tree can be seen here:
134 | 
135 |
136 | As you can see, SolidOS is composed of several repositories:
137 |
138 | - [**rdflib.js**](https://github.com/linkeddata/rdflib.js) — Javascript RDF library for browsers and Node.js
139 | - [**solid-logic**](https://github.com/solidos/solid-logic) — core business logic of SolidOS
140 | - [**mashlib**](https://github.com/solidos/mashlib/) — a solid-compatible code library of application-level functionality for the world of Solid
141 | - [**solid-panes**](https://github.com/solidos/solid-panes) — a set of core solid-compatible panes based on solid-ui
142 | - [**solid-ui**](https://github.com/solidos/solid-ui) — User Interface widgets and utilities for Solid. Building blocks for solid-based apps
143 |
144 | In the above diagram, SolidOS is deployed on the [Node Solid Server (NSS)](https://github.com/solid/node-solid-server), but it can also be set up to run on the [Community Solid Server (CSS)](https://github.com/CommunitySolidServer) or on ANY Solid-compliant server. When you download and compile the SolidOS code, an NSS is also installed locally, to have everything ready to develop.
145 |
146 | ### SolidOS deeper technical topics
147 |
148 | For further details about each GitHub repository, please visit them via the links above for `Documentation`.
149 |
150 | We collect SolidOS code good practices and know how in [SolidOS documentation pages](https://github.com/solidos/solidos/tree/main/documentation).
151 |
152 | [SolidOS FAQs](https://github.com/solidos/solidos/wiki/FAQs) part of the [SolidOS developer guide](https://github.com/solidos/solidos/wiki) also contains some Q&A and technical troubleshooting infos.
153 |
154 | ## 👯 How the SolidOS team works
155 |
156 | First and foremost who are the contributors of SolidOS?
157 |
158 | The SolidOS codebase has a long history and there have been a lot of contributors over the years (see: [GitHub contributors](https://github.com/solidos/solidos/graphs/contributors)). The most active team members are mentioned in the SolidOS Team on the [SolidOS Pod Contacts](https://solidos.solidcommunity.net/Contacts/).
159 |
160 | ### SolidOS team meetings
161 |
162 | The SolidOS team meets every week for a 1h touchdown. We discuss what was done over the past week, what needs to be done next, and delegation of tasks. Find the meeting time and link on the [SolidOS project Pod](https://solidos.solidcommunity.net/Team/team%20meetings/schedule.html).
163 |
164 | We take minutes on our meetings. You can find them on the [SolidOS pod](https://solidos.solidcommunity.net/public/SolidOS%20team%20meetings/).
165 |
166 | ### SolidOS team instant chat
167 |
168 | In between team meetings, we avidly communicate over at the [gitter SolidOS channel](https://gitter.im/solid/solidos). Drop by to chat with us, ask questions, or simply say "Hi".
169 |
170 | ### SolidOS team discussions
171 |
172 | Sometimes some ideas need an incubation period and further discussion. We make use of [GitHub discussions](https://github.com/solidos/solidos/discussions) for that.
173 |
174 | ### SolidOS tasks
175 |
176 | For daily tasks, we have a [Project Board](https://github.com/orgs/SolidOS/projects/1) with different views.
177 |
178 | For a longer-term roadmap, we use a [Solid task manager](https://solidos.solidcommunity.net/public/Roadmap/Tasks/), and plan the next milestones on Kanban.
179 |
180 | ### Additional useful information
181 |
182 | - Find answers over at [SolidOS FAQs](https://github.com/solidos/solidos/wiki/FAQs) or at the [SolidOS Wiki](https://github.com/solidos/solidos/wiki).
183 | - For an overall description of how the whole ecosystem works head over to [solid process](https://github.com/solid/process).
184 | - Make sure to get into discussions on the [forum](https://forum.solidproject.org/) and on Solid [instant chat channels](https://gitter.im/solid/home).
185 | - Join an event over at [Solid events](https://solidproject.org/events) or sign up for the [Solid newsletter](https://solidproject.org/newsletter) to not miss any news
186 | - Read the community code of conduct [Solid CoC](https://github.com/solid/process/blob/main/code-of-conduct.md).
187 |
188 | ## 🙋🏽 How you can contribute and help SolidOS thrive
189 |
190 | The SolidOS team is always looking for volunteers to help improve SolidOS. Pull Requests (PRs) and edits are always welcome from code, to text, to style. We are looking for UX designers, technical writers, frontend developers, backend developers, DevOps. Don't let these titles intimidate you; they are just some examples. You can find your own place no matter the level of knowledge you are at.
191 |
192 | To check for tasks you might help with immediately, look at the [Newcomer View in the Project Board](https://github.com/orgs/SolidOS/projects/1/views/3). You are welcome to visit us at a [weekly team meeting](https://solidos.solidcommunity.net/Team/2021/schedule/solidos-schedule.html) or on the [ongoing Gitter-based chat](https://gitter.im/solid/solidos) to say 'Hi' or let us know about any blocker you might have encountered.
193 |
194 | ### For anyone up to writing some code
195 |
196 | We keep track of stuff to do in Git issues of each repo. [An overview](https://github.com/orgs/SolidOS/projects/1/views/4) you can find on the project board.
197 |
198 | Writing tests as a way to understand the code is always a good idea. Tests, in each repo, should be found in the `test` folder. One can start from there or/and add tests.
199 |
200 | _**Note:** Please get familiar with [coding](./documentation/guidelines/coding_guidelines.md) and [testing](./documentation/guidelines/testing_guidelines.md) guidelines._
201 |
202 | ### For anyone who likes builds or GitHub CI or releases or deployments
203 |
204 | There is an existing process and codebase in place to help with SolidOS releases. However, we would like to get better and automate as much as possible. Open issues can be found on the [Project Board](https://github.com/orgs/SolidOS/projects/1/views/4) under the CI category.
205 |
206 | _**Note:** Please get familiar with [release guidelines](./documentation/guidelines/dependencies_and_release_guidelines.md)._
207 |
208 | #### Builds
209 |
210 | SolidOS contains different repositories (mashlib, solid-logic, solid-ui, solid-panes, ...). Each repository contains a `package.json` with `scripts`. Most repos contain an `npm run build` which is used to build the project.
211 |
212 | #### GitHub CI
213 |
214 | When you push or PR a change to a repo, a git CI is activated and runs every time. An example is the [solid-panes workflow](https://github.com/solidos/solid-panes/blob/main/.github/workflows/ci.yml). This CI YML can contain instructions to test and build the repo on different Node versions. If upon push or PR, an instruction fails, one should take care to fix it and keep the branches green.
215 |
216 | #### Testing & releasing a new SolidOS version
217 |
218 | In SolidOS, you will find a `bash scripts` under [scripts](https://github.com/solidos/solidos/tree/main/scripts) which is related to releasing a new SolidOS stack. The [release script](https://github.com/solidos/solidos/blob/main/scripts/release) is also used to update dependencies in each repo.
219 |
220 | Following best practices, we deploy the new version on the [testserver](https://solidcommunity.net:8443/) as mentioned [here](https://github.com/solid/solidcommunity.net/wiki#solidcommunitynet8443-test-server-instance).
221 |
222 | #### Deployment on solidcommunity.net server
223 |
224 | Before you start, make sure you have access to all the GitHub repos and all the `npm` packages. Using Ubuntu or other Unix-like OS, `ssh` into the server as `root`.
225 |
226 | ```sh
227 | tmux new
228 | adduser --shell /bin/bash --home /home/build --ingroup sudo build
229 | su - build
230 | whoami
231 | sudo whoami
232 | ```
233 |
234 | Then:
235 |
236 | ```s
237 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash
238 | export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
239 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
240 | nvm install 16
241 | nvm use 16
242 |
243 | ssh-keygen -t ed25519 -C "michiel+build@unhosted.org"
244 | git config --global user.name "Solid OS Build (Michiel)"
245 | git config --global user.email "michiel+build@unhosted.org"
246 | cat .ssh/id_ed25519.pub
247 | npm login
248 | ```
249 |
250 | Log in to npm with your npm account and add the SSH public key to your GitHub account. Then continue:
251 |
252 | ```sh
253 | git clone https://github.com/solidos/solidos
254 | cd solidos
255 | npm run install-nvm
256 | npm run release
257 | ```
258 |
259 | More information can be also found over at the [server, solidcommunity.net, repo](https://github.com/solid/solidcommunity.net/wiki).
260 |
261 | ### For anyone who likes writing text
262 |
263 | SolidOS has quite some documentation around that needs constant improvement.
264 | Places to start:
265 |
266 | - for how SolidOS works [visit the user guide](https://github.com/solidos/userguide) and [SolidOS project Pod](https://solidos.solidcommunity.net/);
267 | - [SolidOS FAQs](https://github.com/solidos/solidos/wiki/FAQs);
268 | - [SolidOS Wiki](https://github.com/solidos/solidos/wiki).
269 |
270 | We are open to suggestions to improve these resources from structure, translation, UI to content in general.
271 |
272 | ### For anyone with an eye for design
273 |
274 | [Solid-ui](https://github.com/solidos/solid-ui) does the heavy lifting to all things UI for SolidOS.
275 | Currently, we use [Storybook](https://storybook.js.org/) to help develop components independent of other panes. Make sure to visit the [solid-ui readme](https://github.com/solidos/solid-ui) for information on how to set it up and get started.
276 | There is a second option to run solid-ui on its own. Read about it at [Debugging solid-ui using Solid Pane Tester](https://github.com/solidos/solidos/wiki/1.-SolidOS-know-how#debugging-solid-ui-using-solid-pane-tester).
277 |
278 | You can also find the current issues over at the [solid-ui issues](https://github.com/solidos/solid-ui/issues). And some more information over at the [SolidOS Wiki](https://github.com/solidos/solidos/wiki/2.-Solid-UI-know-how).
279 |
280 | SolidOS needs a lot of improvements on UI, including UX and style-guides. Maybe you are the one who can help out? Visit the [Project Board](https://github.com/orgs/SolidOS/projects/1/views/4) and look for UX and UI categories.
281 |
282 | ## 🆕 Getting started with the SolidOS code
283 |
284 | Before you start coding, please review our guidelines:
285 |
286 | - [coding guidelines](./documentation/guidelines/coding_guidelines.md);
287 | - [testing guidelines](./documentation/guidelines/testing_guidelines.md);
288 | - [dependency and release guidelines](./documentation/guidelines/dependencies_and_release_guidelines.md).
289 |
290 | ### SolidOS first time setup of code
291 |
292 | Make sure you have the needed environment: [nvm for SolidOS](https://github.com/solidos/solidos/wiki/FAQs#setting-up-nvm-to-develop-for-solidos), npm, Node. If you have problems with node versions on the Apple M1 chip, in the [Troubleshooting SolidOS](https://github.com/solidos/solidos/wiki/Troubleshooting-SolidOS) you can find a solution.
293 |
294 | ```
295 | git clone https://github.com/solidos/solidos
296 | cd solidos
297 | npm run setup
298 | ```
299 |
300 | _**Note:** It might prompt you to install a specific `node` version, something like `nvm install xxx # version missing mentioned in console log`._
301 |
302 | _**Note:** In case of errors, try to follow what the output messages (errors) suggest in the console to fix the problems, and let us know on the [SolidOS team chat](https://gitter.im/solid/solidos)._
303 |
304 | Run the above lines in a terminal of your choice to setup your SolidOS project folder. By default, some dependent repos are also set up for you:
305 |
306 | - [rdflib.js](https://github.com/linkeddata/rdflib.js): Javascript RDF library for browsers and Node.js
307 | - [solid-logic](https://github.com/solidos/solid-logic): core business logic of SolidOS
308 | - [pane-registry](https://github.com/solidos/pane-registry): an index to hold all loaded solid panes
309 | - [mashlib](https://github.com/solidos/mashlib/): a solid-compatible code library of application-level functionality for the world of Solid
310 | - [solid-panes](https://github.com/solidos/solid-panes): a set of core solid-compatible panes based on solid-ui
311 | - [solid-ui](https://github.com/solidos/solid-ui): User Interface widgets and utilities for Solid. Building blocks for solid-based apps
312 | - [node-solid-server](https://github.com/solid/node-solid-server): the server that allows you to test your changes
313 |
314 | You can start your server and test out your code with:
315 |
316 | ```
317 | npm start
318 | ```
319 |
320 | If you get into problems check out [SolidOS FAQs](https://github.com/solidos/solidos/wiki/FAQs) or ask us directly at [SolidOS team chat](https://.im/solid/solidos).
321 |
322 | _**Note:** The NPM scripts are using `bash` scripts. These might not work if you're developing on a Windows machine. Let us know, over at [SolidOS team chat](https://gitter.im/solid/solidos) if you want support for this._
323 |
324 | ### How to use SolidOS on localhost
325 |
326 | Once you managed to get SolidOS running locally (`npm start`) you can see it over at `https://localhost:8443/`. If you encounter any problems make sure to check the [Troubleshooting SolidOS page](https://github.com/solidos/solidos/wiki/Troubleshooting-SolidOS).
327 |
328 | To work on localhost, first you need to register a local user, so hit `register` on `https://localhost:8443/`. After you have created your user, you can navigate to your new pod over at `https://username.localhost:8443/`.
329 | Whenever you need to login again, remember to put `https://localhost:8443/` in the `Enter the URL of your identity provider:` input field. Otherwise you will be logged in with a different provider and redirected out of the localhost environment.
330 |
331 | ### How to make changes in repos
332 |
333 | As a newcomer, you do not have direct access to the repos, but you can still contribute through Pull Requests (PRs). First, navigate to the repo you want to work on, and create a fork. Make your changes on your fork, and then create a PR. We will be notified, and you will receive feedback on your changes. For more details on how to do this, visit [the GitHub documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request), which explains it much better than we ever could.
334 |
335 | If you do have direct access to the repos, it is usual to create a branch for your changes and then a PR. A PR helps you receive feedback and lets us know easily about any changes to the code. Read more about Pull Requests over at the GitHub documentation.
336 |
337 | Make sure to read more about working with branches and missing repos over at the [SolidOS Wiki](https://github.com/solidos/solidos/wiki/1.-SolidOS-know-how#dealing-with-github-branches).
338 |
339 | ### Developing SolidOS code
340 |
341 | Very likely you will want to make changes in the dependent packages/repos of SolidOS (mashlib, solid-logic, solid-ui, solid-panes...).
342 |
343 | You have two choices:
344 |
345 | - [work directly in SolidOS](#Work-directly-in-SolidOS)
346 | - [work in the according dependent package](#Work-in-the-according-dependent-package)
347 |
348 | #### Work directly in SolidOS
349 |
350 | The `npm start` script contains a lerna command: `npx lerna bootstrap --force-local` which makes sure that packages are bootstrapped/taken from your local machine even if versions don't match.
351 |
352 | If you need to bootstrap any packages again (e.g. you've run `npm install` in any of the projects) and don't want to stop the server, you can do `npx lerna bootstrap --force-local` only. You do not need to stop the server and start it again (`npm start`).
353 |
354 | Another option is to start SolidOS with the `npm run watch` script. This triggers the watch-script for mashlib, solid-ui, and solid-panes. If you want to run watch-script for rdflib or any of the panes, you'll have to open another terminal window, navigate to the respective project and start its watch-script doing `npm run watch`.
355 |
356 | The output for the watch-script can be a bit difficult to interpret since all output for mashlib, solid-ui, and solid-panes are presented in the same window. You might also consider having each watch scripts running in a separate terminal window. The downside of using this approach is that at its worst, you'll have five separate watch-scripts running (in addition to the terminal window where you started the server) when working on a pane that needs to pick up a change in rdflib. If you find this unwieldy for your setup, or require too many resources, you should consider to [work in the according dependent package](#Work-in-the-according-dependent-package).
357 |
358 | #### Work in the according dependent package
359 |
360 | Any changes you do in a project need to be committed to their original repos and eventually be pushed to NPM manually (this is the part of Lerna that we do not use for this project).
361 |
362 | Some projects require you to build a package before you can see changes, so check the various package.json files to see which scripts are available. You can usually do `npm run build`, and some also support `npm run watch` which builds a new version each time you do a local change.
363 |
364 | Be aware, the packages depend on one another. Here's a simplified view of the dependencies:
365 |
366 | ```
367 | node-solid-server --> rdflib
368 | node-solid-server --> mashlib --> rdflib
369 | node-solid-server --> mashlib --> solid-panes --> rdflib
370 | node-solid-server --> mashlib --> solid-panes --> solid-ui --> rdflib
371 | node-solid-server --> mashlib --> solid-panes --> [pane project] --> solid-ui --> rdflib
372 | ```
373 |
374 | This means that if you do a change in solid-panes and want to see the result on your local NSS, you need to make sure that mashlib compiles the changes as well. Similarly, if you do changes to solid-ui, and some pane relies on those changes, you need to make sure that the pane compiles those changes, that solid-panes compiles the changes from the pane, and finally that mashlib compiles the changes from solid-panes. This quickly becomes hard to track, so we've devised a couple of ways to mitigate this.
375 |
376 | Read about in detail how each pane can be debugged over at the [SolidOS Wiki](https://github.com/solidos/solidos/wiki/1.-SolidOS-know-how#debugging-panesrepos-standalone-without-running-whole-solidos).
377 |
378 | ### Testing SolidOS code
379 |
380 | Most of the modules in SolidOS have a `test` script which can be called with `npm run test`.
381 | In some cases the tests run an [ESLint](https://eslint.org/) command `eslint 'src/**/*.ts'` or a [jest](https://jestjs.io/) test or both.
382 |
383 | Jest can also offer information related to test coverage by simply runnig `npm run coverage`.
384 |
385 | You can find a repo's tests usually in a dedicated folder called `test`.
386 |
387 | ### SolidOS build and release
388 |
389 | The SolidOS code stack build and release are [described above](#For-anyone-who-likes-builds-or-GitHub-CI-or-releases-or-deployments).
390 |
391 | ## 📜 License
392 |
393 | The SolidOS code is available under the MIT License.
394 |
395 | ## 🎤 Feedback and questions
396 |
397 | Don't hesitate to [chat with us on gitter](https://gitter.im/solid/home) or [report a bug](https://github.com/solidos/solidos/issues).
398 |
--------------------------------------------------------------------------------
/documentation/SolidOS_fetcher.md:
--------------------------------------------------------------------------------
1 | # SolidOS Fetcher
2 | ## Redefining the fetch method in rdflib and SolidOS
3 |
4 | An app may wish to redefine the method rdflib and SolidOS use to read and write data. One reason is to handle protocols other than https:, e.g. file: or browser:. Another reason would be local-first replicating fetches. Once rdflib's fetch is redefined, the new fetch will be used by all fetcher and updateManager methods (load, webOperation, update, etc).
5 |
6 | ### An app using *rdflib*
7 | Can override the fetch globally
8 | ```
9 | window.solidFetch = myFetchMethod // in browser
10 | global.solidFetch = myFetchMethod // in nodejs
11 | ```
12 | Or modify a specific fetcher
13 | ```
14 | myFetcher = $rdf.fetcher(store,{fetch:myFetchMethod})
15 | ```
16 |
17 | ### An app using mashlib or panes
18 | Can override the fetch globally
19 | ```
20 | panes.UI.store.fetcher._fetch = myFetchMethod
21 | ```
22 |
23 | ### Additional details
24 |
25 | Please keep in mind that rdflib's fetcher object does a lot more than simply fetch a document, it loads the headers and other details into the store and performs various checks. Redefining the *fetch* only redefines the actual reading and writing, all other parts of what the fetcher does remain in place. This includes checking authentication status when needed. Redefining the fetch has no necessary impact on the authentication process, to alter that see [the documentation on private resources in SolidOS](https://github.com/solidos/solidos/blob/main/documentation/Using_Private_Resources_In_SolidOS.md).
26 |
27 | The fetcher object's other activities mean that the fetch you redefine must conform to the Solid REST Protocol - content-types are required for methods that write, wac-allow headers are expected in responses, etc. Without these, you can do a simple fetcher.webOperation but fetcher.load and updateManager.update will fail somewhere within rdflib or SolidOS. The [Solid Rest](https://github.com/solid/solid-rest) library provides an in-client version of REST that reads incoming headers and sends back appropriate Solid REST responses. An app wishing to redefine the fetch will need to use Solid Rest or an equivalent layer that interprets incoming requests and formulates outgoing responses.
28 |
29 | ### Note for SolidOS developers
30 |
31 | Within the SolidOS stack, please do not ever use `window.fetch` or `cross-fetch` unless you are certain it will not interfere with user-defined fetches. Instead use `fetcher.webOperation()` which will respect any user defined fetch and fallback to cross-fetch or Inrupt authenticated fetch when needed.
32 |
33 | ### A code example
34 |
35 | This example creates a trivial fetch method that does nothing but return a new Response object, which, by default has a status of 200. We then try to fetch a non-existant URI. The default fetch gives 404 and the altered fetch 200 for the same URI. This proves we have redefined the fetch.
36 | ```
37 | const $rdf = require('rdflib');
38 | const store = $rdf.graph();
39 | const uri = 'https://example.com/fribble-frabble';
40 |
41 | const myFetchMethod = async ()=> { return new Response(); }
42 | const defaultFetcher = $rdf.fetcher(store);
43 | const alteredFetcher = $rdf.fetcher(store,{fetch:myFetchMethod});
44 |
45 | (async()=>{
46 | console.log('Default fetch status : '+ await getStatus(uri,defaultFetcher));
47 | console.log('Altered fetch status : '+ await getStatus(uri,alteredFetcher));
48 | })();
49 |
50 | async function getStatus(uri,fetcher){
51 | try {
52 | response = await fetcher.webOperation('GET',uri);
53 | return response.status;
54 | }
55 | catch(e){
56 | return e.response.status;
57 | }
58 | }
59 | ```
60 |
61 | See also [the original issue on github](https://github.com/solidos/solidos/issues/72)
62 |
63 | ## Requesting public data through using the fetcher
64 |
65 | Each `store` (or rdflib.graph()) has a fetcher (see [code in rdflib](https://github.com/linkeddata/rdflib.js/blob/f8a0b35364313157f6af511738e830881f18f312/src/index.ts#L125). And so does the `store` in SolidOS, see [code in solid-logic](https://github.com/solidos/solid-logic/blob/1f5bc16a9b5eaa2af97267ec8e48b66a8cc4a2c2/src/logic/SolidLogic.ts#L37)).
66 |
67 | The rdflib fetcher has code which tries to fetch a URL on the web, first with credentials, after a failed request with credentials it checkes without (see [code](https://github.com/linkeddata/rdflib.js/blob/f8a0b35364313157f6af511738e830881f18f312/src/fetcher.ts#L1847)).
68 |
69 | Tim BL: "It is a pain that you can’t just look up a URI online, in general without knowing an extra bit of data “is it public”. This sort of breaks the web a bit."
70 |
71 | When you as a web app do a http request with the credentials omitted, then the browser is kinder to you CORS wise. It allows access to servers which use the “*” wildcard for origins they trust.
72 | For public data, therefore, it is good to force credentials to be omiteed. You don’t want the fetcher trying to log into wikidata with solidOS for example.
73 |
74 | The possibility to omit credentials is also used in the SolidOS fetcher (see [code in solid-logic](https://github.com/solidos/solid-logic/blob/1f5bc16a9b5eaa2af97267ec8e48b66a8cc4a2c2/src/logic/solidLogicSingleton.ts#L6)). And is propagated in [solid-ui for wikidata](https://github.com/solidos/solid-ui/blob/c5a8888d6cb61363bc0445be007e3c96de593338/src/widgets/forms/autocomplete/publicData.ts#L98) and [solid-ui SPARQL query](https://github.com/solidos/solid-ui/blob/c5a8888d6cb61363bc0445be007e3c96de593338/src/widgets/forms/autocomplete/publicData.ts#L376).
75 |
--------------------------------------------------------------------------------
/documentation/Using_Private_Resources_In_SolidOS.md:
--------------------------------------------------------------------------------
1 | # Using Private Resources in SolidOS
2 |
3 | ## Short Answer
4 |
5 | In SolidOS, always use `solid-ui.authn.currentUser()` to check if the user has a webID; do not directly check
6 | `authSession.info.webId` **except during operations on the `authSession` itself**.
7 |
8 | * use `me = authn.currentUser()` in places not directly part of `authSession` management
9 | * use `me = authn.authSession.info.webId` during `authSession` operations such as `box.refresh` and other login functions
10 | * use `await authn.checkUser()` when you need to activate a session after login
11 | * check URLs like `http//foo/?uri=http://bar` or web app and Dk will not function
12 |
13 | The basic idea is that `currentUser()` is for answering the question, "should this user have access to this resource?",
14 | while `checkUser` and `session.info.webId` are for answering the question, "is this user logged in?" These are the same
15 | thing on a normal server, but they are two different things when dealing with apps similar to Data-Kitchen, which need
16 | to differentiate between _having access to the local server without being logged in_ and _needing to login to access
17 | private respources on remote pods_.
18 |
19 | ## Longer answer
20 |
21 | We want the SolidOS experience of private resources, like local file systems and cloud storages, to be the same as for
22 | Pods, except that the user is treated as already logged-in for the private resources, assuming that they have their own
23 | authentication system outside of Solid.
24 |
25 | An app — a deployment of `mashlib/dist/browse.html` — can mark itself as serving private resources that do not need Solid
26 | authentication. For example, a desktop app might serve local files, or proxy to Dropbox files, like so:
27 | ```
28 | window.SolidAppContext = {
29 | noAuth : 'http://localhost:3000/',
30 | webId : 'http://localhost:3000/localUser/profile/card#me',
31 | }
32 | ```
33 | That says, "when viewing pages on this private site, don't try to login or authenticate; use the webId I have supplied
34 | instead, and treat me as always logged in to this site". If the private site has profiles, preferences, etc., SolidOS
35 | can now serve them as they would to an authenticated page using that webId; for example, displaying a dashboard.
36 |
37 | From the point of view of SolidOS, this means that we should not directly use `solid-ui.authn.authSession.webId` as a way
38 | to treat the user as logged in. Instead, we should use the `solid-ui.authn.currentUser()` method, which now does a check
39 | for the `window.SolidAppContext`. Instead of checking for "is authenticated", this will check for "is logged in", which
40 | includes authenticated access to non-private sites AND unauthenticated access to a private site.
41 |
42 | Here's how the `currentUser` method (or technically, the `appContext` method it calls) knows which pages to authenticate:
43 | If the user has specified a site as `noAuth`, and the current `location.href` hostname is that site, and the `uri`
44 | parameter of the `location.href` is also on that site, treat it as a `noAuth` request. So if the databrowser is being
45 | served from a private site AND the databrowser is viewing a page on that private site, don't require authentication
46 | check or login. However, if the databrowser is served from the private site and viewing a page on any other site, _do_
47 | require an authentication check and possible login. This point is relevant everywhere, not just login — if you are
48 | using a URL, check to see if it is viewing one page from another page, and do the action on the page being viewed.
49 |
50 | The worst that happens if someone tries to spoof things is that the UI lies about the user being logged in, and when
51 | they try to access something that requires Solid authentication, they'll get a `401 Unauthorized` response.
52 |
--------------------------------------------------------------------------------
/documentation/auth-upgrade-to-use-DPoP.md:
--------------------------------------------------------------------------------
1 | # This documentation talk about the Sep 2021 auth upgrade in SolidOS
2 |
3 | SolidOS underwent a major refactoring in which the deprecated [solid-auth-client](https://github.com/solid/solid-auth-client/blob/main/src/solid-auth-client.js) lib was exchnaged with the [solid-auth-client] lib. At that time the changed code was part of solid-ui, see [here](https://github.com/solidos/solid-ui/blob/a25381feb9279d98ee58f59aef03fc05bc6fe021/src/authn/authn.ts) a previous solid-ui version that contains the old authn.
4 | The new authentication refactoring was fully merged in [this version](https://github.com/solidos/solid-ui/blob/da0a788397049a2b53eea42d2b893cf1c2f7d92e/src/authn/authn.ts) (still in solid-ui).
5 | As of February 2022 this part of the code was further refactored and is now part of solid-logic.
6 |
7 | ## What has changed?
8 |
9 | ### Code review
10 |
11 | For a detailed view of what changed, the team had a code review which was recorded and stored in the team videos, look for [auth-upgrade code review](https://solidos.solidcommunity.net/public/SolidOS%20team%20meetings/SolidOS_team_videos.html). At the same location find also videos about a knowledge transfer regarding the new authentication (look for 'Solid-OIDC').
12 |
13 | ### UX upon login from NSS
14 |
15 | There was also a diagram created before and after auth upgrade to record the UX upon login when one comes from the server. See diagrams [here](https://github.com/solidos/solidos/discussions/54) (diagram is NSS dependent).
16 |
17 | ## How does this affect the SolidOS developer?
18 |
19 | ### Login
20 |
21 | A compact code example how to login using SolidOS code is:
22 | ```
23 | import { sym } from "rdflib";
24 | import { default as pane } from "../src";
25 | import { context, fetcher } from "./context";
26 | import { authn, authSession } from "solid-logic";
27 | import * as UI from "solid-ui";
28 |
29 | const loginBanner = document.getElementById("loginBanner");
30 | const webId = document.getElementById("webId");
31 |
32 | loginBanner.appendChild(UI.login.loginStatusBox(document, null, {}));
33 |
34 | async function finishLogin() {
35 | await authSession.handleIncomingRedirect();
36 | const session = authSession;
37 | if (session.info.isLoggedIn) {
38 | // Update the page with the status.
39 | webId.innerHTML = "Logged in as: " + authn.currentUser().uri;
40 | } else {
41 | webId.innerHTML = "";
42 | }
43 | }
44 |
45 | finishLogin();
46 | ```
47 |
48 | Full code is in [profile-pane](https://github.com/solidos/profile-pane/blob/main/dev/index.ts).
49 |
50 | A code example to use login in a website by embedding mashlib.js is in the [SolidOS Databrowser Webapp](https://github.com/solidos/mashlib/blob/main/static/browse.html).
51 |
52 | ### Redirects
53 |
54 | One of the biggest changes is probably how login redirects behave. Lets say your application A is under a domain https://applicationAdomain.com and your login code is activated under this domain A BUT after a successfull login you want to redirect the user to domain B (another domain). Well, this will not work anymore!
55 | The fact that you could before, login to domainA and get redirected to domainB was quite debatable a security gap. However, the fact that you cannot do that anymore is restrictive for some use cases.
56 | You are invited to read further about it [here](https://github.com/inrupt/solid-client-authn-js/issues/1473#issuecomment-908202681).
57 | Workarounds and hacks are welcome to be reported, let us know on gitter channel is you found any. Do handle with care.
58 |
59 | ## How does this effect other developer?
60 |
61 | ### Login code must be adapted in all previous Solid Apps
62 |
63 | All previous Solid Apps should be updated to be able to work with the current Solid Server. This effort is recorded in [this ticket](https://github.com/solid/team/issues/19). The ticket also shows further examples how to upgrade and which Apps are affected.
64 |
65 | ### Login from an iFrame
66 |
67 | One cannot login/logout from an iFrame anymore.
68 |
69 | ### Logout
70 |
71 | The way logging out is experienced is different. In the decentralized ecosystem one does not simply log into an application but at the OpenID Provider endpoint (Identity Provider IdP). The IdP than consents access to the application to access the resource on the resource server (Pod). So LogOut is at least, in this use case, a double action - do not have access to the application frontend; - do not consent the application to access the resource server anymore. In both cases, these actions need to be coded in the application by invalidating cookies and session. The IdP can possibly expire the access/id token but that depends on the IdP provider configuration.
72 |
--------------------------------------------------------------------------------
/documentation/guidelines/coding_guidelines.md:
--------------------------------------------------------------------------------
1 | # 🤗 Welcome CONTRIBUTOR
2 |
3 | This is a document about coding guidelines and processes. These topics reflect the way SolidOS stack contributors work.
4 |
5 | Table of content:
6 |
7 | - [🤗 Welcome CONTRIBUTOR](#-welcome-contributor)
8 | - [General rules](#general-rules)
9 | - [Documenting your code](#documenting-your-code)
10 | - [General comments](#general-comments)
11 | - [Adding a TODO](#adding-a-todo)
12 | - [Refactoring code](#refactoring-code)
13 | - [Conversion to TypeScript](#conversion-to-typescript)
14 | - [Windows developers](#windows-developers)
15 |
16 | ## General rules
17 |
18 | - In any given branch/PR, there should be no more than a couple files modified. In general, try to stick to one, though you may need two for testing — one for the test, and one for the code you are testing.
19 | - Name branch as you want.
20 | - include **WIP** in the title of the PR if you want a review.
21 |
22 | ## Documenting your code
23 |
24 | ### General comments
25 |
26 | In general, if the code is clean, it is easy to understand the algorithm, but sometimes it may make sense to include comments to explain or give an example.
27 |
28 | Comment blocks look like this:
29 |
30 | ```js
31 | /**
32 | * comments
33 | * more comments
34 | */
35 | doSomething()
36 | ```
37 |
38 | One-line comments look like this:
39 |
40 | ```js
41 | // comments
42 | doSomething()
43 | ```
44 |
45 | ### Adding a TODO
46 |
47 | An example of when you need a TODO is when you refactor code. There may be times you run across code that cannot be easily changed or that may be better suited for an alternate branch. In this case you can:
48 |
49 | 1. Create a follow-up issue
50 | 2. Document the code with a comment such as that shown below
51 | `/* @@ TODO [comment about what needs to be done and/or why it is a problem]. See [link to issue]`
52 |
53 | ## Refactoring code
54 |
55 | ### Conversion to TypeScript
56 |
57 | One of the long-term goals of the SolidOS stack is to convert the code in TypeScript.
58 |
59 | Steps:
60 |
61 | 1. Rename file to `.ts`
62 | 2. Add types to public methods (if this is difficult, you can add the `any` type and add comments as described above to indicate it needs further work)
63 | 3. Add a comment that the file was previously javascript
64 | 4. No Logic changes; only minor refactoring
65 | 5. PR is reviewed by at least one other engineer and merged to `main` branch
66 | 6. Write unit tests
67 | 7. Write examples
68 | 8. Refactor
69 |
70 | ## Windows developers
71 |
72 | Notes: Single quotes can't be used in scripts on Windows; need to use `\"` instead.
73 | Builds must be run using `bash`, because of `sh` command.
74 |
--------------------------------------------------------------------------------
/documentation/guidelines/dependencies_and_release_guidelines.md:
--------------------------------------------------------------------------------
1 |
2 | # 🤗 Welcome CONTRIBUTOR
3 |
4 | This document talks about SolidOS stack Node versions, and about work required upon release; in particular, about dependency upgrades.
5 |
6 | Table of contents:
7 |
8 | - [🤗 Welcome CONTRIBUTOR](#-welcome-contributor)
9 | - [Usage of Node versions in SolidOS](#usage-of-node-versions-in-solidos)
10 | - [Update Node version used in SolidOS](#update-node-version-used-in-solidos)
11 | - [Dependency upgrades](#dependency-upgrades)
12 | - [To update dependencies you can use](#to-update-dependencies-you-can-use)
13 | - [Checklist upon relase of a new SolidOS stack](#checklist-upon-relase-of-a-new-solidos-stack)
14 |
15 | ## Usage of Node versions in SolidOS
16 |
17 | Local development should be built with the latest used Node version. One can make sure this is the case by running `nvm use` in the root of the repo. This command will look for a file named `.nvmrc`, and use the node version specified therein.
18 | Since the whole SolidOS stack is built into the `mashlib.js` at the end, the Node version used is not vitally important, but best practice is still to so do it so.
19 |
20 | ## Update Node version used in SolidOS
21 |
22 | Once a year, you should upgrade the Node version you're using. In April of each year, Node releases an even-numbered Node version which will be taken into [LTS (long term support) releases](https://nodejs.org/en/about/releases/).
23 |
24 | To upgrade the Node version in SolidOS:
25 |
26 | - change the Node version in CI of each affected SolidOS repo (including `release.yml` if available)
27 | - ensure the published node version in CI is at least one version earlier than latest release, but make sure it is still in LTS by checking the [Node Releases](https://nodejs.org/en/about/releases/)
28 | - update the officially supported development Node version on SolidOS stack mentioned in `.nvmrc`. The `.nvmrc` file is available on each repo, [for example on SolidOS repo](https://github.com/solid/solidos/blob/main/.nvmrc).
29 |
30 | ## Dependency upgrades
31 |
32 | - there are a few ways to check the dependency status of a repo, such as `npm outdated`, `npx npm-check-updates`, and `npx npm-check`.
33 | - patch-up versions can be updated without any concern using `npm update` BUT this only works if the dependencies in `package.json` include tilde (`~`). Tilde allows dependencies to ONLY be updated on the semver version. If a dependency has a caret (`^`), that dependency is also updated to latest minor release.
34 |
35 | ***Note:*** Our work follows the [Semantic Versioning practices](https://semver.org/) in which, given a version number `MAJOR.MINOR.PATCH` of a repository, increment the:
36 |
37 | - `MAJOR` version when you make incompatible API changes
38 | - `MINOR` version when you add functionality in a backwards compatible manner
39 | - `PATCH` version when you make bug fixes in a backwards compatible manner
40 |
41 | When starting a new module always start with version 1.0.0.
42 |
43 | ### To update dependencies you can use
44 |
45 | - `npm update` which updates ONLY safe minor and patch versions
46 | - `npx npm-check-updates -u` which also updates major versions
47 |
48 | - it is also good to run an `npm audit` from time to time, and run a `npm audit fix` as needed
49 |
50 | ## Checklist upon relase of a new SolidOS stack
51 |
52 | The following is a guideline of what should be considered upon a release. It is not an exhaustive list, but covers most situations.
53 |
54 | - In each repository to be released, you need to do a dependency upgrade with `npx npm-check-updates -u`. This upgrades all dependencies to major versions. Afterwards, you need to make sure the repo builds and all tests pass.
55 | - The `main` branch of each repository should be green in GitHub CI.
56 | - The build must follow a strict order because the repositories depend on each other. The priority is as follows:
57 | - rdflib
58 | - solid-logic
59 | - solid-ui
60 | - activitystreams-pane
61 | - chat-pane
62 | - contacts-pane
63 | - folder-pane
64 | - issue-pane
65 | - meeting-pane
66 | - profile-pane
67 | - source-pane
68 | - solid-panes
69 | - mashlib
70 | - NSS
71 | - solidos
72 | _**Note:** The strict build order means, for example, if you make a change in `solid-ui`, all the following panes that make use of the `solid-ui` changes also need to be upgraded; then `solid-panes` must be upgraded to contain the new `solid-ui` version, and because `solid-panes` version changes, the `mashlib` version also needs to change._
73 |
74 | To ease this work, SolidOS contains a [release script](https://github.com/SolidOS/solidos/blob/main/scripts/release); however, the release script also updates ALL dependencies in ALL repos to major versions, which means the above steps MUST be done beforehand.
75 |
--------------------------------------------------------------------------------
/documentation/guidelines/testing_guidelines.md:
--------------------------------------------------------------------------------
1 | # 🤗 Welcome CONTRIBUTOR
2 |
3 | This document helps contributors improve testing habits with guidelines and know-how.
4 |
5 | Table of contents:
6 |
7 | - [🤗 Welcome CONTRIBUTOR](#-welcome-contributor)
8 | - [Testing guidelines](#testing-guidelines)
9 | - [Testing strategy](#testing-strategy)
10 | - [Testing know-how](#testing-know-how)
11 | - [Videos about testing knowledge transfer](#videos-about-testing-knowledge-transfer)
12 | - [General information](#general-information)
13 | - [Data fixtures](#data-fixtures)
14 | - [Using custom matchers](#using-custom-matchers)
15 |
16 | ## Testing guidelines
17 |
18 | - When you fix a bug, start by creating a test to reproduce it, and then fix it.
19 | - Tests throughout the SolidOS stack should be in dedicated folders called 'test'.
20 |
21 | ## Testing strategy
22 |
23 | - At first, we will work to have more integration tests, as it is currently hard to write unit tests. As time goes on, it will eventually flip. At the same time, we will refactor code to be more modular to do unit tests.
24 | - Both unit tests and integration tests will be in all repos.
25 | - No end-to-end (e2e) tests currently; we may do some of these outside of the repos.
26 | - Add `rdflib` to the list of repos to be tested.
27 |
28 | ## Testing know-how
29 |
30 | ### Videos about testing knowledge transfer
31 |
32 | The SolidOS team did a few workshops and presentations about how to do testing in general and on the SolidOS stack. You can revisit them [here](https://solidos.solidcommunity.net/public/SolidOS%20team%20meetings/SolidOS_team_videos.html).
33 |
34 | ### General information
35 |
36 | The original code was not written with testing in mind. To make testing more efficient, you may find it easier to export a function. To do this, include the following comment above the function so that it does not get picked up by `Typedoc`.
37 | `@ignore exporting this only for the unit test`
38 |
39 | There will also be times that even exporting the function isn't enough to enable proper tests to be developed.
40 | In this case, follow the commenting procedures in the Code `Readme.md`, which is to add the comment
41 | ` \* @@ TODO` and describe the problem.
42 |
43 | You can reference in your [`TODO` comment](./coding_guidelines.md#adding-a-todo) if the code is hard to test due to DOM manipulation.
44 |
45 | ### Data fixtures
46 |
47 | See for an example of how to use `store.add` in a
48 | unit test to set up some data in the store. Don't forget to [`clearStore afterEach`](https://github.com/solidos/solid-ui/blob/5fd8fb0/test/unit/widgets/buttons.test.ts#L214).
49 |
50 | ### Using custom matchers
51 |
52 | We have added some custom matchers to ease the testing. You can see the full list at `test/setup.ts`, in
53 | the `expect.extend` part.
54 |
55 | - `expect(A).toEqualGraph(B)`: Use this matcher to check whether graphs A and B are equal (meaning they contain the
56 | same set of triples)
57 | - `expect(A).toContainGraph(B)`: Use this matcher to check whether graph B is contained in graph A.
58 |
--------------------------------------------------------------------------------
/documentation/resources/architecture.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/documentation/solidos_dependencies.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
182 |
--------------------------------------------------------------------------------
/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": [
3 | "workspaces/*"
4 | ],
5 | "version": "independent"
6 | }
7 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "solidos",
3 | "private": true,
4 | "description": "SolidOS - Operating System for Solid",
5 | "repository": {
6 | "type": "git",
7 | "url": "https://github.com/solidos/solidos"
8 | },
9 | "keywords": [
10 | "solidos",
11 | "solid",
12 | "decentralized"
13 | ],
14 | "author": "Tim Berners-Lee ",
15 | "contributors": [
16 | "https://github.com/solidos/solidos/graphs/contributors"
17 | ],
18 | "license": "MIT",
19 | "bugs": {
20 | "url": "https://github.com/solidos/solidos/issues"
21 | },
22 | "homepage": "https://solidos.solidcommunity.net/",
23 | "scripts": {
24 | "start": "scripts/start",
25 | "start-css": "scripts/start-css",
26 | "start-nss": "scripts/start-nss",
27 | "watch": "scripts/watch",
28 | "add": "scripts/add",
29 | "addPanes": "npm run add activitystreams && npm run add chat && npm run add contacts && npm run add folder && npm run add issue && npm run add meeting && npm run add profile && npm run add source",
30 | "delete": "scripts/delete",
31 | "deletePanes": "npm run add activitystreams-pane && npm run delete chat-pane && npm run delete contacts-pane && npm run delete folder-pane && npm run delete issue-pane && npm run delete meeting-pane && npm run delete profile-pane && npm run delete source-pane",
32 | "reset": "scripts/reset",
33 | "setup": "scripts/install && scripts/reset",
34 | "release": "/bin/bash scripts/release",
35 | "bootstrap": "lerna bootstrap --force-local --scope ",
36 | "switchToBranch": "scripts/delete && scripts/switch-branch"
37 | },
38 | "devDependencies": {
39 | "concurrently": "5.3.0",
40 | "lerna": "3.22.1"
41 | },
42 | "dependencies": {
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/scripts/add:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 |
4 | unset PREFIX npm_config_prefix
5 | export NVM_DIR="$HOME/.nvm"
6 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
7 |
8 | FOLDER=$1
9 | GIT_URL=$2
10 | case $1 in
11 | 'acl-check')
12 | GIT_URL='https://github.com/solid/acl-check.git'
13 | ;;
14 | 'activitystreams' | 'activitystreams-pane')
15 | FOLDER='activitystreams-pane'
16 | GIT_URL='https://github.com/solidos/activitystreams-pane'
17 | ;;
18 | 'chat' | 'chat-pane')
19 | FOLDER='chat-pane'
20 | GIT_URL='https://github.com/solidos/chat-pane'
21 | ;;
22 | 'contacts' | 'contacts-pane')
23 | FOLDER='contacts-pane'
24 | GIT_URL='https://github.com/solidos/contacts-pane'
25 | ;;
26 | 'css' | 'css-mashlib')
27 | FOLDER='css-mashlib'
28 | GIT_URL='https://github.com/solidos/css-mashlib'
29 | ;;
30 | 'folder' | 'folder-pane')
31 | FOLDER='folder-pane'
32 | GIT_URL='https://github.com/solidos/folder-pane'
33 | ;;
34 | 'github-solid')
35 | GIT_URL='https://github.com/solid/github-solid'
36 | ;;
37 | 'gitter-solid')
38 | GIT_URL='https://github.com/solid/gitter-solid'
39 | ;;
40 | 'issue' | 'issue-pane')
41 | FOLDER='issue-pane'
42 | GIT_URL='https://github.com/solidos/issue-pane'
43 | ;;
44 | 'profile' | 'profile-pane')
45 | FOLDER='profile-pane'
46 | GIT_URL='https://github.com/solidos/profile-pane'
47 | ;;
48 | 'jose')
49 | GIT_URL='https://github.com/solid/jose'
50 | ;;
51 | 'keychain')
52 | GIT_URL='https://github.com/solid/keychain'
53 | ;;
54 | 'markdown' | 'markdown-pane')
55 | FOLDER='markdown-pane'
56 | GIT_URL='https://github.com/solidos/markdown-pane'
57 | ;;
58 | 'mashlib')
59 | GIT_URL='https://github.com/solidos/mashlib'
60 | ;;
61 | 'meeting' | 'meeting-pane')
62 | FOLDER='meeting-pane'
63 | GIT_URL='https://github.com/solidos/meeting-pane'
64 | ;;
65 | 'node-solid-server')
66 | GIT_URL='https://github.com/solid/node-solid-server'
67 | ;;
68 | 'node-solid-ws')
69 | GIT_URL='https://github.com/solid/node-solid-ws.git'
70 | ;;
71 | 'node-webid')
72 | GIT_URL='https://github.com/linkeddata/node-webid.git'
73 | ;;
74 | 'oidc-auth-manager')
75 | GIT_URL='https://github.com/solid/oidc-auth-manager.git'
76 | ;;
77 | 'oidc-op')
78 | GIT_URL='https://github.com/solid/oidc-op'
79 | ;;
80 | 'oidc-rp')
81 | GIT_URL='https://github.com/solid/oidc-rp'
82 | ;;
83 | 'oidc-rs')
84 | GIT_URL='https://github.com/solid/oidc-rs'
85 | ;;
86 | 'pane-registry' | 'registry')
87 | GIT_URL='https://github.com/solidos/pane-registry'
88 | ;;
89 | 'rdflib')
90 | GIT_URL='https://github.com/linkeddata/rdflib.js.git'
91 | ;;
92 | 'solid-auth-cli')
93 | GIT_URL='https://github.com/jeff-zucker/solid-auth-cli.git'
94 | ;;
95 | 'solid-auth-client')
96 | GIT_URL='https://github.com/solid/solid-auth-client.git'
97 | ;;
98 | 'solid-auth-fetcher')
99 | GIT_URL='https://github.com/solid/solid-auth-fetcher.git'
100 | ;;
101 | 'solid-auth-oidc')
102 | GIT_URL='https://github.com/solid/solid-auth-oidc.git'
103 | ;;
104 | 'solid-auth-tls')
105 | GIT_URL='https://github.com/solid/solid-auth-tls.git'
106 | ;;
107 | 'solid-cli')
108 | GIT_URL='https://github.com/solid/solid-cli.git'
109 | ;;
110 | 'solid-crud-tests')
111 | GIT_URL='https://github.com/solid/solid-crud-tests.git'
112 | ;;
113 | 'solid-logic')
114 | GIT_URL='https://github.com/solidos/solid-logic.git'
115 | ;;
116 | 'money-pane')
117 | GIT_URL='https://github.com/solidos/money-pane.git'
118 | ;;
119 | 'solid-multi-rp-client')
120 | GIT_URL='https://github.com/solid/solid-multi-rp-client.git'
121 | ;;
122 | 'solid-namespace')
123 | GIT_URL='https://github.com/solid/solid-namespace'
124 | ;;
125 | 'solid-node-client')
126 | GIT_URL='https://github.com/solid/solid-node-client'
127 | ;;
128 | 'solid-panes')
129 | GIT_URL='https://github.com/solidos/solid-panes'
130 | ;;
131 | 'solid-rest')
132 | GIT_URL='https://github.com/solid/solid-rest.git'
133 | ;;
134 | 'solid-ui')
135 | GIT_URL='https://github.com/solidos/solid-ui'
136 | ;;
137 | 'source' | 'source-pane')
138 | FOLDER='source-pane'
139 | GIT_URL='https://github.com/solidos/source-pane'
140 | ;;
141 | 'web-access-control-tests')
142 | GIT_URL='https://github.com/solid/web-access-control-tests.git'
143 | ;;
144 | 'webid-provider-tests')
145 | GIT_URL='https://github.com/solid/webid-provider-tests.git'
146 | ;;
147 | esac
148 |
149 | if test -z "$GIT_URL"
150 | then
151 | echo "repo not recognized, please provide URL to Git repo"
152 | exit 1
153 | fi
154 |
155 | echo $GIT_URL
156 |
157 | echo ">>>>> ADDING REPO - $GIT_URL to $FOLDER"
158 | cd workspaces
159 | git clone $GIT_URL $FOLDER
160 | cd $FOLDER
161 | nvm use --delete-prefix
162 | npm i
163 | cd ../..
164 |
--------------------------------------------------------------------------------
/scripts/delete:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo ">>>>> DELETING REPO - $1"
4 | cd workspaces
5 | rm -rf $1
6 | cd ..
7 | npx lerna clean --yes
8 |
--------------------------------------------------------------------------------
/scripts/install:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 |
4 | unset PREFIX npm_config_prefix
5 | export NVM_DIR="$HOME/.nvm"
6 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
7 |
8 | nvm use --delete-prefix
9 |
10 | echo ">>>>> INSTALLING NPM DEPENDENCIES"
11 | rm -rf node_modules
12 | npm install
13 |
--------------------------------------------------------------------------------
/scripts/release:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 |
4 | unset PREFIX npm_config_prefix
5 | export NVM_DIR="$HOME/.nvm"
6 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
7 |
8 | function gitCheckoutMainOf {
9 | if [ ! -d workspaces/$1 ]; then
10 | echo "Creating workspace $1"
11 | npm run add $1
12 | fi
13 | if [ ! -d workspaces/$1 ]; then
14 | echo "Workspace not found! $1" 1>&2
15 | exit 64
16 | fi
17 | echo Checkout $1
18 | cd workspaces/$1
19 | sed -i -e 's/https...github.com./git@github.com:/g' .git/config
20 | git checkout main
21 | git reset origin/main
22 | git checkout -- .
23 | git pull
24 | }
25 | function npmInstallUpdateOf {
26 | echo update dependencies $1
27 | nvm use --delete-prefix
28 | rm -rf node_modules
29 | rm package-lock.json
30 | npx npm-check-updates -u --target minor # patch, minor, major
31 | # npm install --save-dev eslint@7 # eslint@8 do not works with node.j < 16
32 | }
33 | function testBuildPushTagOn {
34 | echo install $1
35 | npm install
36 | echo Test, Build and Create tag of $1
37 | npm test
38 | npm run build
39 | ( git commit -am"Update dependencies" && npm version patch && npm publish -timeout=9999999 ) || echo No change in $1
40 | git push origin main --follow-tags
41 | cd ../..
42 | echo Finished $1
43 | }
44 | function updateRepo {
45 | echo Starting $1
46 | gitCheckoutMainOf $1
47 | npmInstallUpdateOf $1
48 | testBuildPushTagOn $1
49 | }
50 |
51 | # This is a here-document
52 | << REMOVED
53 | Any code in between is not executed.
54 | REMOVED
55 |
56 | updateRepo solid-namespace # solid-namespace
57 |
58 | gitCheckoutMainOf rdflib # rdflib (jsonld, n3, xmldom)
59 | npmInstallUpdateOf rdflib
60 | npm install --save-dev node-fetch@2 # node-fetch@3 needs import
61 | testBuildPushTagOn rdflib
62 |
63 | updateRepo solid-logic # solid-logic (rdflib, solid-namespace)
64 | updateRepo pane-registry # pane-registry (solid-logic, rdflib)
65 |
66 | gitCheckoutMainOf solid-ui # solid-ui (pane-registry, solid-logic, rdflib, solid-namespace)
67 | npm install pane-registry solid-logic rdflib solid-namespace # temporary until storybook updated to react 18
68 | # npmInstallUpdateOf solid-ui
69 | # npm install --save-dev @testing-library/user-event@13
70 | # npm install --save react@17 react-dom@17 react-is@17 # for storybook@6.4.19
71 | testBuildPushTagOn solid-ui
72 |
73 | gitCheckoutMainOf activitystreams-pane # activity-streams (solid-ui, pane-registry, solid-logic, rdflib)
74 | npm install solid-ui pane-registry solid-logic rdflib # temporary until storybook updated to react 18
75 | # npmInstallUpdateOf activitystreams-pane
76 | # npm install --save react@17 react-dom@17 # for storybook@6.4.19
77 | testBuildPushTagOn activitystreams-pane
78 |
79 | updateRepo chat-pane # chat-pane (solid-ui, solid-logic, rdflib)
80 | updateRepo folder-pane # folder-pane (solid-ui, solid-logic)
81 | updateRepo issue-pane # issue-pane (solid-ui, pane-registry, rdflib)
82 | updateRepo meeting-pane # meeting-pane (solid-ui, solid-logic, rdflib)
83 | updateRepo contacts-pane # contacts-pane (solid-ui, pane-registry, solid-logic, rdflib)
84 | updateRepo profile-pane # profile-pane (contacts-pane, solid-ui, pane-registry, solid-logic, rdflib)
85 | updateRepo source-pane # source-pane (solid-ui)
86 | updateRepo folder-pane # folder-pane (solid-ui, solid-logic)
87 | updateRepo solid-panes # solid-panes (chat-pane, contacts-pane, folder-pane, issue-pane, meeting-pane, pane-registry, rdflib, solid-ui, source-pane)
88 |
89 | updateRepo mashlib # mashlib (rdflib, solid-panes, solid-ui)
90 |
91 | << REMOVED
92 | updateRepo jose # @solid/jose
93 | updateRepo oidc-rp # @solid/oidc-rp (@solid/jose)
94 |
95 | gitCheckoutMainOf solid-auth-client # solid-auth-client (@babel/runtime, auth-header, commander, isomorphic-fetch, @solid/oidc-rp)
96 | # npmInstallUpdateOf solid-auth-client
97 | npm install @solid/oidc-rp@latest
98 | testBuildPushTagOn solid-auth-client
99 |
100 | updateRepo node-solid-ws # solid-ws ()
101 | updateRepo node-webid # webid (rdflib)
102 | updateRepo acl-check # @solid/acl-check (rdflib, solid-namespace)
103 | updateRepo keychain # @solid/keychain
104 | updateRepo oidc-op # @solid/oidc-op (@solid/keychain)
105 | updateRepo oidc-rs # @solid/oidc-rs (@solid/jose)
106 | updateRepo solid-multi-rp-client # @solid/solid-multi-rp-client (oidc-rp)
107 | updateRepo oidc-auth-manager # @solid/oidc-auth-manager (oidc-rp, oidc-op, oidc-rs, solid-multi-rp-client)
108 | updateRepo solid-auth-oidc # @solid/solid-auth-oidc (@solid/oidc-rp)
109 |
110 | gitCheckoutMainOf node-solid-server # solid-server (@solid/acl-check, @solid/oidc-auth-manager, rdflib, mashlib, solid-auth-client, solid-namespace, solid-ws, @solid/oidc-op, @solid/solid-auth-oidc, webid)
111 | npmInstallUpdateOf node-solid-server
112 | npm install bootstrap@3
113 | npm install get-folder-size@2 # require needed
114 | npm install into-stream@6 # require needed
115 | npm install --save-dev @solid/solid-auth-oidc@0.3.0
116 | testBuildPushTagOn node-solid-server
117 |
118 | gitCheckoutMainOf solid-rest # solid-rest (concat-stream, cross-fetch, fs-extra, mime-types)
119 | nvm use --delete-prefix
120 | rm -rf node_modules
121 | rm package-lock.json
122 | npx npm-check-updates -u
123 | npm install --save-dev webpack@4
124 | testBuildPushTagOn solid-rest
125 |
126 | updateRepo solid-cli # solid-cli (@solid/oidc-rp)
127 |
128 | # FIXME: https://github.com/solid/solid-auth-fetcher/issues/15
129 | # updateRepo solid-auth-fetcher
130 | updateRepo solid-node-client # solid-node-client (rdflib, solid-auth-fetcher, solid-rest)
131 | updateRepo webid-provider-tests
132 | updateRepo solid-crud-tests
133 | updateRepo web-access-control-tests
134 |
135 | # FIXME: https://github.com/solid/github-solid/pull/2
136 | # updateRepo gitter-solid
137 | # FIXME: https://github.com/solid/gitter-solid/pull/12
138 | # updateRepo github-solid
139 | REMOVED
140 |
--------------------------------------------------------------------------------
/scripts/reset:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 |
4 | unset PREFIX npm_config_prefix
5 | export NVM_DIR="$HOME/.nvm"
6 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
7 |
8 | nvm use --delete-prefix
9 |
10 | echo ">>>>> SETTING UP/RESETTING PROJECT"
11 | mkdir -p workspaces
12 | rm -rf workspaces/*
13 |
14 | declare -a packages=(
15 | "css-mashlib"
16 | "node-solid-server"
17 | "mashlib"
18 | "solid-panes"
19 | "solid-ui"
20 | "pane-registry"
21 | "solid-logic"
22 | "rdflib")
23 |
24 | # Clone and npm install dependent packages
25 | for package in "${packages[@]}"
26 | do
27 | echo ""
28 | echo "# Installing $package"
29 | npm run add $package
30 | done
31 |
32 | # Build dependent packages, ensuring each is in proper Node environment via nvm
33 | for package in "${packages[@]}"
34 | do
35 | echo ""
36 | echo "# Building $package"
37 | pushd workspaces/$package
38 | nvm use --delete-prefix
39 | npm run build
40 | popd
41 | done
42 |
43 | openssl req -outform PEM -keyform PEM -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout workspaces/privkey.pem -days 365 -out workspaces/fullchain.pem -subj "/C=RO/ST=Bucharest/L=Bucharest/O=IT/CN=localhost"
44 |
--------------------------------------------------------------------------------
/scripts/start:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | unset PREFIX npm_config_prefix
4 | export NVM_DIR="$HOME/.nvm"
5 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
6 |
7 | npx lerna bootstrap --force-local
8 |
9 | cd workspaces/node-solid-server
10 | nvm use --delete-prefix
11 | ./bin/solid-test start --root ./data --port 8443 --ssl-key ../privkey.pem --ssl-cert ../fullchain.pem & # & to run in background
12 |
13 | cd ../css-mashlib
14 | nvm use --delete-prefix
15 | npm run start
16 |
--------------------------------------------------------------------------------
/scripts/start-css:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | unset PREFIX npm_config_prefix
4 | export NVM_DIR="$HOME/.nvm"
5 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
6 |
7 | npx lerna bootstrap --force-local
8 |
9 | cd workspaces/css-mashlib
10 | nvm use --delete-prefix
11 | npm run start
12 |
--------------------------------------------------------------------------------
/scripts/start-nss:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | unset PREFIX npm_config_prefix
4 | export NVM_DIR="$HOME/.nvm"
5 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
6 |
7 | npx lerna bootstrap --force-local
8 |
9 | cd workspaces/node-solid-server
10 | nvm use --delete-prefix
11 | ./bin/solid-test start --root ./data --port 8443 --ssl-key ../privkey.pem --ssl-cert ../fullchain.pem
12 |
13 |
--------------------------------------------------------------------------------
/scripts/switch-branch:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 |
4 | unset PREFIX npm_config_prefix
5 | export NVM_DIR="$HOME/.nvm"
6 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
7 |
8 | nvm use --delete-prefix
9 |
10 | FOLDER=$1
11 |
12 | echo ">>>>> SETTING UP PROJECT WITH NEW BRANCH $1"
13 | mkdir -p workspaces
14 | rm -rf workspaces/*
15 |
16 | declare -a packages=(
17 | "rdflib"
18 | "solid-logic"
19 | "pane-registry"
20 | "solid-ui"
21 | "solid-panes"
22 | "mashlib"
23 | "node-solid-server")
24 |
25 | # Clone and npm install dependent packages
26 | for package in "${packages[@]}"
27 | do
28 | echo ""
29 | echo "# Installing $package"
30 | npm run add $package
31 | done
32 |
33 | # checkout specified branch
34 | for package in "${packages[@]}"
35 | do
36 | echo ""
37 | echo "# Checking out $1 for $package"
38 | pushd workspaces/$package
39 | git checkout $1 || true
40 | git pull
41 | npm i
42 | popd
43 | done
44 |
45 | # Build dependent packages, ensuring each is in proper Node environment via nvm
46 | for package in "${packages[@]}"
47 | do
48 | echo ""
49 | echo "# Building $package"
50 | pushd workspaces/$package
51 | nvm use --delete-prefix
52 | npm run build
53 | popd
54 | done
55 |
56 | for x in workspaces/* ; do ( echo "###### " $x; cd $x; git status) done
57 |
58 | openssl req -outform PEM -keyform PEM -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout workspaces/privkey.pem -days 365 -out workspaces/fullchain.pem -subj "/C=RO/ST=Bucharest/L=Bucharest/O=IT/CN=localhost"
59 |
--------------------------------------------------------------------------------
/scripts/update-mashlib-repo.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | git checkout master
4 | git pull
5 | npm install rdflib@latest solid-namespace@latest solid-ui@latest solid-panes@latest
6 | git commit -am'npm install rdflib@latest solid-namespace@latest solid-ui@latest solid-panes@latest'
7 | npm version minor
8 | npm publish -timeout=9999999
9 |
--------------------------------------------------------------------------------
/scripts/update-solid-panes-repo.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | git checkout master
4 | git pull
5 | npm install solid-ui@latest chat-pane@latest contacts-pane@latest folder-pane@latest issue-pane@latest meeting-pane@latest source-pane@latest
6 | git commit -am'npm install solid-ui@latest chat-pane@latest contacts-pane@latest folder-pane@latest issue-pane@latest meeting-pane@latest source-pane@latest'
7 | npm version minor
8 | npm publish -timeout=9999999
9 |
--------------------------------------------------------------------------------
/scripts/update-this-panes-repo.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | git checkout master
4 | git pull
5 | npm install solid-ui@latest
6 | git commit -am'npm install solid-ui@latest'
7 | npm version minor
8 | npm publish -timeout=9999999
9 |
--------------------------------------------------------------------------------
/scripts/watch:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | unset PREFIX npm_config_prefix
4 | export NVM_DIR="$HOME/.nvm"
5 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
6 |
7 | nvm use --delete-prefix
8 |
9 | npx lerna bootstrap --force-local
10 |
11 | declare -a packageNames=(
12 | "rdflib"
13 | "solid-logic"
14 | "pane-registry"
15 | "solid-ui"
16 | "solid-panes"
17 | "mashlib"
18 | "node-solid-server"
19 | )
20 |
21 | # Via https://zaiste.net/posts/how-to-join-elements-of-array-bash/
22 | function join { local IFS="$1"; shift; echo "$*"; }
23 |
24 | # Build the string of package names for use by concurrently
25 | packageNamesString=$(join , ${packageNames[@]})
26 |
27 | # Concurrently start a `watch` task for solid-ui, solid-panes, and mashlib, and start Node Solid Server.
28 | # Note that mashlib chokes if the watch task of solid-panes is still starting up while it's running;
29 | # a hacky workaround to that is to delay it by 20 seconds before starting (`sleep 20`).
30 | packageCommands=()
31 | for package in "${packageNames[@]}"
32 | do
33 | command="npm run watch"
34 | if [[ "$package" == "mashlib" ]]; then
35 | command="sleep 20 && $command"
36 | elif [[ "$package" == "node-solid-server" ]]; then
37 | command="./bin/solid-test start --root ./data --port 8443 --ssl-key ../privkey.pem --ssl-cert ../fullchain.pem"
38 | fi
39 | # command="echo '---' && pwd && echo '---'"
40 |
41 | command=". $HOME/.nvm/nvm.sh; cd workspaces/$package; nvm use --delete-prefix; $command"
42 | packageCommands+=("$command")
43 | done
44 |
45 | # The next line will execute:
46 | # npx concurrently --names rdflib,solid-logic,pane-registry,solid-ui,solid-panes,mashlib,node-solid-server
47 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/rdflib; nvm use --delete-prefix; npm run watch
48 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/solid-logic; nvm use --delete-prefix; npm run watch
49 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/pane-registry; nvm use --delete-prefix; npm run watch
50 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/solid-ui; nvm use --delete-prefix; npm run watch
51 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/solid-panes; nvm use --delete-prefix; npm run watch
52 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/mashlib; nvm use --delete-prefix; sleep 20 && npm run watch
53 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/node-solid-server; nvm use --delete-prefix;
54 | #./bin/solid-test start --root ./data --port 8443 --ssl-key ../privkey.pem --ssl-cert ../fullchain.pem
55 |
56 | npx concurrently --names "$packageNamesString" "${packageCommands[@]}"
57 |
--------------------------------------------------------------------------------
/scripts/watch-css:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | unset PREFIX npm_config_prefix
4 | export NVM_DIR="$HOME/.nvm"
5 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
6 |
7 | nvm use --delete-prefix
8 |
9 | npx lerna bootstrap --force-local
10 |
11 | declare -a packageNames=(
12 | source-pane
13 | solid-panes
14 | mashlib
15 | css-mashlib
16 | )
17 |
18 | # Via https://zaiste.net/posts/how-to-join-elements-of-array-bash/
19 | function join { local IFS="$1"; shift; echo "$*"; }
20 |
21 | # Build the string of package names for use by concurrently
22 | packageNamesString=$(join , ${packageNames[@]})
23 |
24 | # Concurrently start a `watch` task for solid-ui, solid-panes, and mashlib, and start Node Solid Server.
25 | # Note that mashlib chokes if the watch task of solid-panes is still starting up while it's running;
26 | # a hacky workaround to that is to delay it by 20 seconds before starting (`sleep 20`).
27 | packageCommands=()
28 | for package in "${packageNames[@]}"
29 | do
30 | command="npm run watch"
31 | if [[ "$package" == "mashlib" ]]; then
32 | command="sleep 20 && $command"
33 | elif [[ "$package" == "css-mashlib" ]]; then
34 | command="npx community-solid-server -c ./config/http-mashlib-suffix-file.json -f ./data"
35 | fi
36 | # command="echo '---' && pwd && echo '---'"
37 |
38 | command=". $HOME/.nvm/nvm.sh; cd workspaces/$package; nvm use --delete-prefix; $command"
39 | packageCommands+=("$command")
40 | done
41 |
42 | # The next line will execute:
43 | # npx concurrently --names rdflib,solid-logic,pane-registry,solid-ui,solid-panes,mashlib,node-solid-server
44 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/rdflib; nvm use --delete-prefix; npm run watch
45 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/solid-logic; nvm use --delete-prefix; npm run watch
46 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/pane-registry; nvm use --delete-prefix; npm run watch
47 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/solid-ui; nvm use --delete-prefix; npm run watch
48 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/solid-panes; nvm use --delete-prefix; npm run watch
49 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/mashlib; nvm use --delete-prefix; sleep 20 && npm run watch
50 | #. /Users/imyshor/.nvm/nvm.sh; cd workspaces/node-solid-server; nvm use --delete-prefix;
51 | #./bin/solid-test start --root ./data --port 8443 --ssl-key ../privkey.pem --ssl-cert ../fullchain.pem
52 |
53 | npx concurrently --names "$packageNamesString" "${packageCommands[@]}"
54 |
--------------------------------------------------------------------------------