javascript-solid-server 0.0.16 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.claude/settings.local.json +8 -1
  2. package/LICENSE +661 -0
  3. package/README.md +28 -2
  4. package/bin/jss.js +6 -0
  5. package/data/.idp/accounts/_email_index.json +3 -0
  6. package/data/.idp/accounts/_webid_index.json +3 -0
  7. package/data/.idp/accounts/be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c.json +9 -0
  8. package/data/.idp/authorization_code/6MiwPzYssbmBMdZ0_yp9RUmeGKJpmChhcPNAT-xkwE1.json +18 -0
  9. package/data/.idp/authorization_code/eC1ZBx2mpNsr0OjKMKdkKK69E4EfKV1SwU8p0dWFQTj.json +18 -0
  10. package/data/.idp/authorization_code/puWy-HQtx9ONFDhm_Bv-sRcBfm3OQPppRalQ956hLR4.json +18 -0
  11. package/data/.idp/client/client_mjocmpsj_vdrkczw9.json +25 -0
  12. package/data/.idp/client/client_mjocnc8k_3sd1aoa6.json +25 -0
  13. package/data/.idp/client/client_mjocnlbf_dkm0ltze.json +25 -0
  14. package/data/.idp/grant/ImpM7BIsyKuhvme7UOctBmRUicTsZweHOrHk95wza0s.json +16 -0
  15. package/data/.idp/grant/R2aOui_2A-m6E_aeq_03IyMd6N5OrFJ-lT67cCTuzOL.json +16 -0
  16. package/data/.idp/grant/YFxdDUi4neEPXjx_riL4_Tyg_VXuyhax_qm9yFEvrWG.json +16 -0
  17. package/data/.idp/grant/k5rDpXSPbMMzYLaWILONhIojmzNP6f1hkWxajC_weW3.json +16 -0
  18. package/data/.idp/grant/luO7y4I33a7yWi1BnfgOtoNcr1-5vH8l3t-aIqG8IgI.json +16 -0
  19. package/data/.idp/grant/nkXTstzTTyrUEN5H0f8Q-YR5jMqk0WdDc6H6H1XD6lJ.json +16 -0
  20. package/data/.idp/registration_access_token/CPhAs33MGp8s-gCRvdnbqjdDDdi0g9vNwacfuLGhX6L.json +7 -0
  21. package/data/.idp/registration_access_token/dbOnxWLEW5O2_pYEfCFQJYbvpdqJJ_t35gr1dd7jC_6.json +7 -0
  22. package/data/.idp/registration_access_token/lAFc6diCNs1g9KLYHRD75O-cH5uv4dRX09HPIelMZbE.json +7 -0
  23. package/data/.idp/session/VXgvz6cHkuwDGG3Hp7CYWzck4AlTDH9qCOnCxVVAGOb.json +28 -0
  24. package/data/demo/.acl +47 -0
  25. package/data/demo/inbox/.acl +50 -0
  26. package/data/demo/index.html +80 -0
  27. package/data/demo/private/.acl +32 -0
  28. package/data/demo/public/.acl +50 -0
  29. package/data/demo/public/card.ttl +8 -0
  30. package/data/demo/settings/.acl +32 -0
  31. package/data/demo/settings/prefs +17 -0
  32. package/data/demo/settings/privateTypeIndex +7 -0
  33. package/data/demo/settings/publicTypeIndex +7 -0
  34. package/package.json +2 -2
  35. package/src/config.js +7 -0
  36. package/src/handlers/resource.js +22 -3
  37. package/src/idp/interactions.js +13 -12
  38. package/src/mashlib/index.js +98 -0
  39. package/src/server.js +7 -0
  40. package/src/utils/url.js +18 -2
  41. package/test-data-idp-accounts/.idp/accounts/_email_index.json +1 -1
  42. package/test-data-idp-accounts/.idp/accounts/_webid_index.json +1 -1
  43. package/test-data-idp-accounts/.idp/accounts/b49949d9-6d61-45a1-bcee-07295aa07579.json +9 -0
  44. package/test-data-idp-accounts/.idp/keys/jwks.json +8 -8
  45. package/test-data-idp-accounts/.idp/accounts/3c1cd503-1d7f-4ba0-a3af-ebedf519594d.json +0 -9
package/README.md CHANGED
@@ -54,7 +54,7 @@ npm run benchmark
54
54
 
55
55
  ## Features
56
56
 
57
- ### Implemented (v0.0.16)
57
+ ### Implemented (v0.0.17)
58
58
 
59
59
  - **LDP CRUD Operations** - GET, PUT, POST, DELETE, HEAD
60
60
  - **N3 Patch** - Solid's native patch format for RDF updates
@@ -66,6 +66,7 @@ npm run benchmark
66
66
  - **Container Management** - Create, list, and manage containers
67
67
  - **Multi-user Pods** - Path-based (`/alice/`) or subdomain-based (`alice.example.com`)
68
68
  - **Subdomain Mode** - XSS protection via origin isolation
69
+ - **Mashlib Data Browser** - Optional SolidOS UI for browsing RDF resources
69
70
  - **WebID Profiles** - JSON-LD structured data in HTML at pod root
70
71
  - **Web Access Control (WAC)** - `.acl` file-based authorization
71
72
  - **Solid-OIDC Identity Provider** - Built-in IdP with DPoP, dynamic registration
@@ -138,6 +139,8 @@ jss --help # Show help
138
139
  | `--idp-issuer <url>` | IdP issuer URL | (auto) |
139
140
  | `--subdomains` | Enable subdomain-based pods | false |
140
141
  | `--base-domain <domain>` | Base domain for subdomains | - |
142
+ | `--mashlib` | Enable Mashlib data browser | false |
143
+ | `--mashlib-version <ver>` | Mashlib version | 2.0.0 |
141
144
  | `-q, --quiet` | Suppress logs | false |
142
145
 
143
146
  ### Environment Variables
@@ -151,6 +154,7 @@ export JSS_SSL_CERT=/path/to/cert.pem
151
154
  export JSS_CONNEG=true
152
155
  export JSS_SUBDOMAINS=true
153
156
  export JSS_BASE_DOMAIN=example.com
157
+ export JSS_MASHLIB=true
154
158
  jss start
155
159
  ```
156
160
 
@@ -403,9 +407,29 @@ createServer({
403
407
  notifications: false, // Enable WebSocket notifications (default: false)
404
408
  subdomains: false, // Enable subdomain-based pods (default: false)
405
409
  baseDomain: null, // Base domain for subdomains (e.g., "example.com")
410
+ mashlib: false, // Enable Mashlib data browser (default: false)
411
+ mashlibVersion: '2.0.0', // Mashlib version to use
406
412
  });
407
413
  ```
408
414
 
415
+ ### Mashlib Data Browser
416
+
417
+ Enable the [SolidOS Mashlib](https://github.com/SolidOS/mashlib) data browser for RDF resources:
418
+
419
+ ```bash
420
+ jss start --mashlib --conneg
421
+ ```
422
+
423
+ When enabled, requesting an RDF resource with `Accept: text/html` returns an interactive data browser UI instead of raw data. Mashlib is loaded from the unpkg CDN.
424
+
425
+ **How it works:**
426
+ 1. Browser requests `/alice/public/data.ttl` with `Accept: text/html`
427
+ 2. Server returns Mashlib HTML wrapper (loads JS/CSS from CDN)
428
+ 3. Mashlib fetches the actual data via content negotiation
429
+ 4. Mashlib renders an interactive, editable view
430
+
431
+ **Note:** Mashlib works best with `--conneg` enabled for Turtle support. Pod profiles (`/alice/`) continue to serve our JSON-LD-in-HTML format.
432
+
409
433
  ### WebSocket Notifications
410
434
 
411
435
  Enable real-time notifications for resource changes:
@@ -528,4 +552,6 @@ Minimal dependencies for a fast, secure server:
528
552
 
529
553
  ## License
530
554
 
531
- MIT
555
+ AGPL-3.0-only
556
+
557
+ This project is licensed under the GNU Affero General Public License v3.0. If you run a modified version as a network service, you must make the source code available to users of that service.
package/bin/jss.js CHANGED
@@ -50,6 +50,9 @@ program
50
50
  .option('--subdomains', 'Enable subdomain-based pods (XSS protection)')
51
51
  .option('--no-subdomains', 'Disable subdomain-based pods')
52
52
  .option('--base-domain <domain>', 'Base domain for subdomain pods (e.g., "example.com")')
53
+ .option('--mashlib', 'Enable Mashlib data browser for RDF resources')
54
+ .option('--no-mashlib', 'Disable Mashlib data browser')
55
+ .option('--mashlib-version <version>', 'Mashlib version to use (default: 2.0.0)')
53
56
  .option('-q, --quiet', 'Suppress log output')
54
57
  .option('--print-config', 'Print configuration and exit')
55
58
  .action(async (options) => {
@@ -85,6 +88,8 @@ program
85
88
  root: config.root,
86
89
  subdomains: config.subdomains,
87
90
  baseDomain: config.baseDomain,
91
+ mashlib: config.mashlib,
92
+ mashlibVersion: config.mashlibVersion,
88
93
  });
89
94
 
90
95
  await server.listen({ port: config.port, host: config.host });
@@ -98,6 +103,7 @@ program
98
103
  if (config.notifications) console.log(' WebSocket: enabled');
99
104
  if (config.idp) console.log(` IdP: ${idpIssuer}`);
100
105
  if (config.subdomains) console.log(` Subdomains: ${config.baseDomain} (XSS protection enabled)`);
106
+ if (config.mashlib) console.log(` Mashlib: v${config.mashlibVersion} (data browser enabled)`);
101
107
  console.log('\n Press Ctrl+C to stop\n');
102
108
  }
103
109
 
@@ -0,0 +1,3 @@
1
+ {
2
+ "demo@example.com": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "http://localhost:4000/demo/#me": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c"
3
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
3
+ "email": "demo@example.com",
4
+ "passwordHash": "$2b$10$oNs/bKRsayWfBVgQBmjgEeyo0vt65Borrwhru3huSbA6.U9TyBerq",
5
+ "webId": "http://localhost:4000/demo/#me",
6
+ "podName": "demo",
7
+ "createdAt": "2025-12-27T13:40:57.822Z",
8
+ "lastLogin": "2025-12-27T13:41:20.530Z"
9
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "iat": 1766842885,
3
+ "exp": 1766843485,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "authTime": 1766842885,
6
+ "codeChallenge": "lFETalcnuAuriGuAQvsKeZcYVW-pRv-Hz5MTPXDj7r0",
7
+ "codeChallengeMethod": "S256",
8
+ "grantId": "ImpM7BIsyKuhvme7UOctBmRUicTsZweHOrHk95wza0s",
9
+ "redirectUri": "http://localhost:4000/demo/public/card.ttl",
10
+ "resource": "urn:solid",
11
+ "scope": "openid offline_access webid",
12
+ "sessionUid": "4uEOfXb2Z3tCyhmDQuG53CpYdqkNf2FfaejZWA-xnqf",
13
+ "kind": "AuthorizationCode",
14
+ "jti": "6MiwPzYssbmBMdZ0_yp9RUmeGKJpmChhcPNAT-xkwE1",
15
+ "clientId": "client_mjocmpsj_vdrkczw9",
16
+ "_id": "6MiwPzYssbmBMdZ0_yp9RUmeGKJpmChhcPNAT-xkwE1",
17
+ "_expiresAt": 1766843485104
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "iat": 1766842921,
3
+ "exp": 1766843521,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "authTime": 1766842885,
6
+ "codeChallenge": "BqdP4MPCzvEmeNtCuKNperx_wpsUZSd41h31qsKrjHs",
7
+ "codeChallengeMethod": "S256",
8
+ "grantId": "YFxdDUi4neEPXjx_riL4_Tyg_VXuyhax_qm9yFEvrWG",
9
+ "redirectUri": "http://localhost:4000/demo/public/card.ttl",
10
+ "resource": "urn:solid",
11
+ "scope": "openid offline_access webid",
12
+ "sessionUid": "4uEOfXb2Z3tCyhmDQuG53CpYdqkNf2FfaejZWA-xnqf",
13
+ "kind": "AuthorizationCode",
14
+ "jti": "eC1ZBx2mpNsr0OjKMKdkKK69E4EfKV1SwU8p0dWFQTj",
15
+ "clientId": "client_mjocnlbf_dkm0ltze",
16
+ "_id": "eC1ZBx2mpNsr0OjKMKdkKK69E4EfKV1SwU8p0dWFQTj",
17
+ "_expiresAt": 1766843521653
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "iat": 1766842908,
3
+ "exp": 1766843508,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "authTime": 1766842885,
6
+ "codeChallenge": "8mhdOmnnCBhXBjFUC_tIfIle7O4i-ySSck_ZNnAM-TI",
7
+ "codeChallengeMethod": "S256",
8
+ "grantId": "R2aOui_2A-m6E_aeq_03IyMd6N5OrFJ-lT67cCTuzOL",
9
+ "redirectUri": "http://localhost:4000/demo/public/card.ttl",
10
+ "resource": "urn:solid",
11
+ "scope": "openid offline_access webid",
12
+ "sessionUid": "4uEOfXb2Z3tCyhmDQuG53CpYdqkNf2FfaejZWA-xnqf",
13
+ "kind": "AuthorizationCode",
14
+ "jti": "puWy-HQtx9ONFDhm_Bv-sRcBfm3OQPppRalQ956hLR4",
15
+ "clientId": "client_mjocnc8k_3sd1aoa6",
16
+ "_id": "puWy-HQtx9ONFDhm_Bv-sRcBfm3OQPppRalQ956hLR4",
17
+ "_expiresAt": 1766843508522
18
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "application_type": "web",
3
+ "grant_types": [
4
+ "authorization_code",
5
+ "refresh_token"
6
+ ],
7
+ "id_token_signed_response_alg": "ES256",
8
+ "require_auth_time": false,
9
+ "response_types": [
10
+ "code"
11
+ ],
12
+ "subject_type": "public",
13
+ "token_endpoint_auth_method": "client_secret_basic",
14
+ "post_logout_redirect_uris": [],
15
+ "require_pushed_authorization_requests": false,
16
+ "dpop_bound_access_tokens": false,
17
+ "client_id_issued_at": 1766842877,
18
+ "client_id": "client_mjocmpsj_vdrkczw9",
19
+ "client_secret_expires_at": 0,
20
+ "client_secret": "uab7wwtWjqbYV6wpBcVyIo0pDhU7COlN2WEJ5AOr4EX2lmKmY3gxvGpb_YGs09ysVM9RiHs3pO0EsVIEW98XaQ",
21
+ "redirect_uris": [
22
+ "http://localhost:4000/demo/public/card.ttl"
23
+ ],
24
+ "_id": "client_mjocmpsj_vdrkczw9"
25
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "application_type": "web",
3
+ "grant_types": [
4
+ "authorization_code",
5
+ "refresh_token"
6
+ ],
7
+ "id_token_signed_response_alg": "ES256",
8
+ "require_auth_time": false,
9
+ "response_types": [
10
+ "code"
11
+ ],
12
+ "subject_type": "public",
13
+ "token_endpoint_auth_method": "client_secret_basic",
14
+ "post_logout_redirect_uris": [],
15
+ "require_pushed_authorization_requests": false,
16
+ "dpop_bound_access_tokens": false,
17
+ "client_id_issued_at": 1766842907,
18
+ "client_id": "client_mjocnc8k_3sd1aoa6",
19
+ "client_secret_expires_at": 0,
20
+ "client_secret": "bDLVLSo0s3P7u93bfPDrLw74PAaq8hguSjVfanz0il6V9cCFLshHECGUuNKA8fhgIpCuzdqOX2aBXv8jHwEL2g",
21
+ "redirect_uris": [
22
+ "http://localhost:4000/demo/public/card.ttl"
23
+ ],
24
+ "_id": "client_mjocnc8k_3sd1aoa6"
25
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "application_type": "web",
3
+ "grant_types": [
4
+ "authorization_code",
5
+ "refresh_token"
6
+ ],
7
+ "id_token_signed_response_alg": "ES256",
8
+ "require_auth_time": false,
9
+ "response_types": [
10
+ "code"
11
+ ],
12
+ "subject_type": "public",
13
+ "token_endpoint_auth_method": "client_secret_basic",
14
+ "post_logout_redirect_uris": [],
15
+ "require_pushed_authorization_requests": false,
16
+ "dpop_bound_access_tokens": false,
17
+ "client_id_issued_at": 1766842918,
18
+ "client_id": "client_mjocnlbf_dkm0ltze",
19
+ "client_secret_expires_at": 0,
20
+ "client_secret": "ag53idPGzSjObWZSvKjxAmaNTsF7p6o8YSwf-3RRucHfTDe-kTmlGU6DYrjqo4qlmWGbWB1jRuCZY8OByg6rqw",
21
+ "redirect_uris": [
22
+ "http://localhost:4000/demo/public/card.ttl"
23
+ ],
24
+ "_id": "client_mjocnlbf_dkm0ltze"
25
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "iat": 1766842880,
3
+ "exp": 1768052480,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "clientId": "client_mjocmpsj_vdrkczw9",
6
+ "kind": "Grant",
7
+ "jti": "ImpM7BIsyKuhvme7UOctBmRUicTsZweHOrHk95wza0s",
8
+ "openid": {
9
+ "scope": "openid offline_access webid"
10
+ },
11
+ "resources": {
12
+ "urn:solid": "openid offline_access webid"
13
+ },
14
+ "_id": "ImpM7BIsyKuhvme7UOctBmRUicTsZweHOrHk95wza0s",
15
+ "_expiresAt": 1768052480543
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "iat": 1766842907,
3
+ "exp": 1768052507,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "clientId": "client_mjocnc8k_3sd1aoa6",
6
+ "kind": "Grant",
7
+ "jti": "R2aOui_2A-m6E_aeq_03IyMd6N5OrFJ-lT67cCTuzOL",
8
+ "openid": {
9
+ "scope": "openid offline_access webid"
10
+ },
11
+ "resources": {
12
+ "urn:solid": "openid offline_access webid"
13
+ },
14
+ "_id": "R2aOui_2A-m6E_aeq_03IyMd6N5OrFJ-lT67cCTuzOL",
15
+ "_expiresAt": 1768052507087
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "iat": 1766842918,
3
+ "exp": 1768052518,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "clientId": "client_mjocnlbf_dkm0ltze",
6
+ "kind": "Grant",
7
+ "jti": "YFxdDUi4neEPXjx_riL4_Tyg_VXuyhax_qm9yFEvrWG",
8
+ "openid": {
9
+ "scope": "openid offline_access webid"
10
+ },
11
+ "resources": {
12
+ "urn:solid": "openid offline_access webid"
13
+ },
14
+ "_id": "YFxdDUi4neEPXjx_riL4_Tyg_VXuyhax_qm9yFEvrWG",
15
+ "_expiresAt": 1768052518858
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "iat": 1766842885,
3
+ "exp": 1768052485,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "clientId": "client_mjocmpsj_vdrkczw9",
6
+ "kind": "Grant",
7
+ "jti": "k5rDpXSPbMMzYLaWILONhIojmzNP6f1hkWxajC_weW3",
8
+ "openid": {
9
+ "scope": "openid offline_access webid"
10
+ },
11
+ "resources": {
12
+ "urn:solid": "openid offline_access webid"
13
+ },
14
+ "_id": "k5rDpXSPbMMzYLaWILONhIojmzNP6f1hkWxajC_weW3",
15
+ "_expiresAt": 1768052485093
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "iat": 1766842921,
3
+ "exp": 1768052521,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "clientId": "client_mjocnlbf_dkm0ltze",
6
+ "kind": "Grant",
7
+ "jti": "luO7y4I33a7yWi1BnfgOtoNcr1-5vH8l3t-aIqG8IgI",
8
+ "openid": {
9
+ "scope": "openid offline_access webid"
10
+ },
11
+ "resources": {
12
+ "urn:solid": "openid offline_access webid"
13
+ },
14
+ "_id": "luO7y4I33a7yWi1BnfgOtoNcr1-5vH8l3t-aIqG8IgI",
15
+ "_expiresAt": 1768052521645
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "iat": 1766842908,
3
+ "exp": 1768052508,
4
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
5
+ "clientId": "client_mjocnc8k_3sd1aoa6",
6
+ "kind": "Grant",
7
+ "jti": "nkXTstzTTyrUEN5H0f8Q-YR5jMqk0WdDc6H6H1XD6lJ",
8
+ "openid": {
9
+ "scope": "openid offline_access webid"
10
+ },
11
+ "resources": {
12
+ "urn:solid": "openid offline_access webid"
13
+ },
14
+ "_id": "nkXTstzTTyrUEN5H0f8Q-YR5jMqk0WdDc6H6H1XD6lJ",
15
+ "_expiresAt": 1768052508513
16
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "iat": 1766842907,
3
+ "clientId": "client_mjocnc8k_3sd1aoa6",
4
+ "kind": "RegistrationAccessToken",
5
+ "jti": "CPhAs33MGp8s-gCRvdnbqjdDDdi0g9vNwacfuLGhX6L",
6
+ "_id": "CPhAs33MGp8s-gCRvdnbqjdDDdi0g9vNwacfuLGhX6L"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "iat": 1766842918,
3
+ "clientId": "client_mjocnlbf_dkm0ltze",
4
+ "kind": "RegistrationAccessToken",
5
+ "jti": "dbOnxWLEW5O2_pYEfCFQJYbvpdqJJ_t35gr1dd7jC_6",
6
+ "_id": "dbOnxWLEW5O2_pYEfCFQJYbvpdqJJ_t35gr1dd7jC_6"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "iat": 1766842877,
3
+ "clientId": "client_mjocmpsj_vdrkczw9",
4
+ "kind": "RegistrationAccessToken",
5
+ "jti": "lAFc6diCNs1g9KLYHRD75O-cH5uv4dRX09HPIelMZbE",
6
+ "_id": "lAFc6diCNs1g9KLYHRD75O-cH5uv4dRX09HPIelMZbE"
7
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "iat": 1766842880,
3
+ "exp": 1768052521,
4
+ "uid": "4uEOfXb2Z3tCyhmDQuG53CpYdqkNf2FfaejZWA-xnqf",
5
+ "accountId": "be4cfcd3-f6dd-41de-b2f5-7e4045d3e78c",
6
+ "loginTs": 1766842885,
7
+ "authorizations": {
8
+ "client_mjocmpsj_vdrkczw9": {
9
+ "sid": "p_xkvzyOVCJq5ZLXM2vmqjV35OIzrYbsqAXzUvpknIc",
10
+ "grantId": "ImpM7BIsyKuhvme7UOctBmRUicTsZweHOrHk95wza0s",
11
+ "persistsLogout": true
12
+ },
13
+ "client_mjocnc8k_3sd1aoa6": {
14
+ "sid": "1SAM86GitibwBsMx8QL-9VCt9Wws4Yq4VMJn4Swf1OY",
15
+ "grantId": "R2aOui_2A-m6E_aeq_03IyMd6N5OrFJ-lT67cCTuzOL",
16
+ "persistsLogout": true
17
+ },
18
+ "client_mjocnlbf_dkm0ltze": {
19
+ "sid": "NuauxuaSNFbSm9ksu10YakHKPm7zhCcEqhLgM51b90b",
20
+ "grantId": "YFxdDUi4neEPXjx_riL4_Tyg_VXuyhax_qm9yFEvrWG",
21
+ "persistsLogout": true
22
+ }
23
+ },
24
+ "kind": "Session",
25
+ "jti": "VXgvz6cHkuwDGG3Hp7CYWzck4AlTDH9qCOnCxVVAGOb",
26
+ "_id": "VXgvz6cHkuwDGG3Hp7CYWzck4AlTDH9qCOnCxVVAGOb",
27
+ "_expiresAt": 1768052521654
28
+ }
package/data/demo/.acl ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "@context": {
3
+ "acl": "http://www.w3.org/ns/auth/acl#",
4
+ "foaf": "http://xmlns.com/foaf/0.1/"
5
+ },
6
+ "@graph": [
7
+ {
8
+ "@id": "#owner",
9
+ "@type": "acl:Authorization",
10
+ "acl:agent": {
11
+ "@id": "http://localhost:4000/demo/#me"
12
+ },
13
+ "acl:accessTo": {
14
+ "@id": "http://localhost:4000/demo/"
15
+ },
16
+ "acl:mode": [
17
+ {
18
+ "@id": "acl:Read"
19
+ },
20
+ {
21
+ "@id": "acl:Write"
22
+ },
23
+ {
24
+ "@id": "acl:Control"
25
+ }
26
+ ],
27
+ "acl:default": {
28
+ "@id": "http://localhost:4000/demo/"
29
+ }
30
+ },
31
+ {
32
+ "@id": "#public",
33
+ "@type": "acl:Authorization",
34
+ "acl:agentClass": {
35
+ "@id": "foaf:Agent"
36
+ },
37
+ "acl:accessTo": {
38
+ "@id": "http://localhost:4000/demo/"
39
+ },
40
+ "acl:mode": [
41
+ {
42
+ "@id": "acl:Read"
43
+ }
44
+ ]
45
+ }
46
+ ]
47
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "@context": {
3
+ "acl": "http://www.w3.org/ns/auth/acl#",
4
+ "foaf": "http://xmlns.com/foaf/0.1/"
5
+ },
6
+ "@graph": [
7
+ {
8
+ "@id": "#owner",
9
+ "@type": "acl:Authorization",
10
+ "acl:agent": {
11
+ "@id": "http://localhost:4000/demo/#me"
12
+ },
13
+ "acl:accessTo": {
14
+ "@id": "http://localhost:4000/demo/inbox/"
15
+ },
16
+ "acl:default": {
17
+ "@id": "http://localhost:4000/demo/inbox/"
18
+ },
19
+ "acl:mode": [
20
+ {
21
+ "@id": "acl:Read"
22
+ },
23
+ {
24
+ "@id": "acl:Write"
25
+ },
26
+ {
27
+ "@id": "acl:Control"
28
+ }
29
+ ]
30
+ },
31
+ {
32
+ "@id": "#public",
33
+ "@type": "acl:Authorization",
34
+ "acl:agentClass": {
35
+ "@id": "foaf:Agent"
36
+ },
37
+ "acl:accessTo": {
38
+ "@id": "http://localhost:4000/demo/inbox/"
39
+ },
40
+ "acl:default": {
41
+ "@id": "http://localhost:4000/demo/inbox/"
42
+ },
43
+ "acl:mode": [
44
+ {
45
+ "@id": "acl:Append"
46
+ }
47
+ ]
48
+ }
49
+ ]
50
+ }
@@ -0,0 +1,80 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>demo's Profile</title>
7
+ <script type="application/ld+json">
8
+ {
9
+ "@context": {
10
+ "foaf": "http://xmlns.com/foaf/0.1/",
11
+ "solid": "http://www.w3.org/ns/solid/terms#",
12
+ "schema": "http://schema.org/",
13
+ "pim": "http://www.w3.org/ns/pim/space#",
14
+ "ldp": "http://www.w3.org/ns/ldp#",
15
+ "inbox": {
16
+ "@id": "ldp:inbox",
17
+ "@type": "@id"
18
+ },
19
+ "storage": {
20
+ "@id": "pim:storage",
21
+ "@type": "@id"
22
+ },
23
+ "oidcIssuer": {
24
+ "@id": "solid:oidcIssuer",
25
+ "@type": "@id"
26
+ },
27
+ "preferencesFile": {
28
+ "@id": "pim:preferencesFile",
29
+ "@type": "@id"
30
+ }
31
+ },
32
+ "@graph": [
33
+ {
34
+ "@id": "http://localhost:4000/demo/",
35
+ "@type": "foaf:PersonalProfileDocument",
36
+ "foaf:maker": {
37
+ "@id": "http://localhost:4000/demo/#me"
38
+ },
39
+ "foaf:primaryTopic": {
40
+ "@id": "http://localhost:4000/demo/#me"
41
+ }
42
+ },
43
+ {
44
+ "@id": "http://localhost:4000/demo/#me",
45
+ "@type": [
46
+ "foaf:Person",
47
+ "schema:Person"
48
+ ],
49
+ "foaf:name": "demo",
50
+ "inbox": "http://localhost:4000/demo/inbox/",
51
+ "storage": "http://localhost:4000/demo/",
52
+ "oidcIssuer": "http://localhost:4000/",
53
+ "preferencesFile": "http://localhost:4000/demo/settings/prefs"
54
+ }
55
+ ]
56
+ }
57
+ </script>
58
+ <style>
59
+ body { font-family: system-ui, sans-serif; max-width: 600px; margin: 2rem auto; padding: 0 1rem; }
60
+ h1 { color: #333; }
61
+ .card { background: #f5f5f5; padding: 1.5rem; border-radius: 8px; }
62
+ dt { font-weight: bold; margin-top: 1rem; }
63
+ dd { margin-left: 0; color: #666; }
64
+ a { color: #7c4dff; }
65
+ </style>
66
+ </head>
67
+ <body>
68
+ <div class="card">
69
+ <h1>demo</h1>
70
+ <dl>
71
+ <dt>WebID</dt>
72
+ <dd><a href="http://localhost:4000/demo/#me">http://localhost:4000/demo/#me</a></dd>
73
+ <dt>Storage</dt>
74
+ <dd><a href="http://localhost:4000/demo/">http://localhost:4000/demo/</a></dd>
75
+ <dt>Inbox</dt>
76
+ <dd><a href="http://localhost:4000/demo/inbox/">http://localhost:4000/demo/inbox/</a></dd>
77
+ </dl>
78
+ </div>
79
+ </body>
80
+ </html>
@@ -0,0 +1,32 @@
1
+ {
2
+ "@context": {
3
+ "acl": "http://www.w3.org/ns/auth/acl#",
4
+ "foaf": "http://xmlns.com/foaf/0.1/"
5
+ },
6
+ "@graph": [
7
+ {
8
+ "@id": "#owner",
9
+ "@type": "acl:Authorization",
10
+ "acl:agent": {
11
+ "@id": "http://localhost:4000/demo/#me"
12
+ },
13
+ "acl:accessTo": {
14
+ "@id": "http://localhost:4000/demo/private/"
15
+ },
16
+ "acl:mode": [
17
+ {
18
+ "@id": "acl:Read"
19
+ },
20
+ {
21
+ "@id": "acl:Write"
22
+ },
23
+ {
24
+ "@id": "acl:Control"
25
+ }
26
+ ],
27
+ "acl:default": {
28
+ "@id": "http://localhost:4000/demo/private/"
29
+ }
30
+ }
31
+ ]
32
+ }