fedipod-server 0.28.1 → 0.30.0
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.
- package/README.md +38 -34
- package/config/server.json +22 -0
- package/dist/claims.js +3 -2
- package/dist/directory.d.ts +2 -0
- package/dist/door.d.ts +4 -0
- package/dist/door.js +31 -0
- package/dist/fedipod.d.ts +16 -0
- package/dist/fedipod.js +13 -0
- package/dist/front.d.ts +3 -0
- package/dist/front.js +94 -0
- package/dist/handler.d.ts +39 -101
- package/dist/handler.js +86 -617
- package/dist/handler.jsonld +6 -30
- package/dist/identities.d.ts +62 -0
- package/dist/identities.js +236 -0
- package/dist/mounts.d.ts +43 -0
- package/dist/mounts.js +123 -0
- package/dist/opt-in.d.ts +46 -0
- package/dist/opt-in.js +176 -0
- package/dist/store-pod.js +37 -0
- package/package.json +10 -18
- package/lib/client/c2s.mjs +0 -582
- package/lib/client/localapi.mjs +0 -87
- package/lib/client/masto/accounts.mjs +0 -309
- package/lib/client/masto/body.mjs +0 -156
- package/lib/client/masto/index.mjs +0 -206
- package/lib/client/masto/instance.mjs +0 -112
- package/lib/client/masto/media.mjs +0 -79
- package/lib/client/masto/oauth.mjs +0 -656
- package/lib/client/masto/render.mjs +0 -518
- package/lib/client/masto/statuses.mjs +0 -372
- package/lib/client/masto/timelines.mjs +0 -438
- package/lib/client/oidc-auth.mjs +0 -62
- package/lib/client/streaming.mjs +0 -154
- package/lib/client/webpush.mjs +0 -98
- package/lib/connections/acctfeed.mjs +0 -257
- package/lib/connections/atproto.mjs +0 -309
- package/lib/connections/bskyfeed.mjs +0 -243
- package/lib/connections/bskygroup.mjs +0 -162
- package/lib/connections/fediacct.mjs +0 -253
- package/lib/connections/import.mjs +0 -357
- package/lib/connections/tagfeed.mjs +0 -212
- package/lib/connections/vault.mjs +0 -114
- package/lib/core/as2.mjs +0 -206
- package/lib/core/contexts/activitystreams.json +0 -379
- package/lib/core/contexts/anno.json +0 -126
- package/lib/core/contexts/did-v1.json +0 -57
- package/lib/core/contexts/fep-5711.json +0 -36
- package/lib/core/contexts/gotosocial.json +0 -86
- package/lib/core/contexts/identity-v1.json +0 -152
- package/lib/core/contexts/index.mjs +0 -63
- package/lib/core/contexts/join-lemmy.json +0 -33
- package/lib/core/contexts/joinmastodon.json +0 -28
- package/lib/core/contexts/litepub-0.1.json +0 -60
- package/lib/core/contexts/map.json +0 -19
- package/lib/core/contexts/miscellany.json +0 -19
- package/lib/core/contexts/quotes.json +0 -18
- package/lib/core/contexts/schemaorg.json +0 -8845
- package/lib/core/contexts/security-data-integrity-v1.json +0 -78
- package/lib/core/contexts/security-data-integrity-v2.json +0 -81
- package/lib/core/contexts/security-multikey-v1.json +0 -35
- package/lib/core/contexts/security-v1.json +0 -74
- package/lib/core/contexts/webfinger.json +0 -10
- package/lib/core/deliver.mjs +0 -371
- package/lib/core/graphview.mjs +0 -327
- package/lib/core/intake/activities.mjs +0 -633
- package/lib/core/intake/activity.mjs +0 -318
- package/lib/core/intake/channel.mjs +0 -144
- package/lib/core/intake/group.mjs +0 -256
- package/lib/core/intake/index.mjs +0 -701
- package/lib/core/intake/notes.mjs +0 -360
- package/lib/core/intake/verify.mjs +0 -142
- package/lib/core/keys.mjs +0 -153
- package/lib/core/lease.mjs +0 -206
- package/lib/core/polls.mjs +0 -105
- package/lib/core/profile-page.mjs +0 -104
- package/lib/core/proof.mjs +0 -79
- package/lib/core/publisher/collections.mjs +0 -237
- package/lib/core/publisher/index.mjs +0 -500
- package/lib/core/publisher/notes.mjs +0 -453
- package/lib/core/publisher/questions.mjs +0 -239
- package/lib/core/publisher/restore.mjs +0 -224
- package/lib/core/shapes/activitystreams.ttl +0 -157
- package/lib/core/shapes/index.mjs +0 -132
- package/lib/core/shapes/shapes-text.mjs +0 -13
- package/lib/core/social.mjs +0 -531
- package/lib/core/storage.mjs +0 -176
- package/lib/core/store.mjs +0 -568
- package/lib/core/wire-quotes.mjs +0 -71
- package/lib/core/wire.mjs +0 -889
- package/lib/device/account.mjs +0 -87
- package/lib/device/admin/index.mjs +0 -13
- package/lib/device/admin/origins.mjs +0 -35
- package/lib/device/admin/routes/connections.mjs +0 -144
- package/lib/device/admin/routes/gateway.mjs +0 -199
- package/lib/device/admin/routes/lifecycle.mjs +0 -200
- package/lib/device/admin/routes/owner.mjs +0 -322
- package/lib/device/admin/routes/setup.mjs +0 -412
- package/lib/device/admin/routes/social.mjs +0 -188
- package/lib/device/admin/server.mjs +0 -95
- package/lib/device/admin/static.mjs +0 -247
- package/lib/device/admin/surface.mjs +0 -315
- package/lib/device/certs.mjs +0 -281
- package/lib/device/cli/commands/account.mjs +0 -586
- package/lib/device/cli/commands/run.mjs +0 -278
- package/lib/device/cli/commands/service.mjs +0 -221
- package/lib/device/cli/commands/setup.mjs +0 -447
- package/lib/device/cli/commands/state.mjs +0 -561
- package/lib/device/cli/context.mjs +0 -288
- package/lib/device/export-collections.mjs +0 -161
- package/lib/device/gateway-move.mjs +0 -58
- package/lib/device/home.mjs +0 -161
- package/lib/device/migrate.mjs +0 -115
- package/lib/device/ports.mjs +0 -27
- package/lib/device/remote.mjs +0 -54
- package/lib/device/setup.mjs +0 -459
- package/lib/device/update.mjs +0 -96
- package/lib/gateway/caches.mjs +0 -36
- package/lib/gateway/directory.mjs +0 -90
- package/lib/gateway/front-core.mjs +0 -970
- package/lib/gateway/gateway-core.mjs +0 -165
- package/lib/gateway/headers.mjs +0 -49
- package/lib/gateway/httpsig.mjs +0 -159
- package/lib/gateway/notices.mjs +0 -84
- package/lib/gateway/quiet.mjs +0 -189
- package/lib/pod/README.md +0 -61
- package/lib/pod/actor.mjs +0 -96
- package/lib/pod/collection.mjs +0 -77
- package/lib/pod/containers.mjs +0 -140
- package/lib/pod/discovery.mjs +0 -46
- package/lib/pod/featured.mjs +0 -18
- package/lib/pod/followers.mjs +0 -24
- package/lib/pod/following.mjs +0 -10
- package/lib/pod/http.mjs +0 -74
- package/lib/pod/inbox.mjs +0 -166
- package/lib/pod/links.mjs +0 -35
- package/lib/pod/media.mjs +0 -27
- package/lib/pod/notes.mjs +0 -80
- package/lib/pod/notifications.mjs +0 -89
- package/lib/pod/outbox.mjs +0 -18
- package/lib/pod/package.json +0 -19
- package/lib/pod/policy.mjs +0 -58
- package/lib/pod/private.mjs +0 -19
- package/lib/pod/root.mjs +0 -104
- package/lib/pod/state.mjs +0 -40
- package/lib/pod/transport.mjs +0 -525
- package/lib/pod/urls.mjs +0 -85
- package/lib/server/embed.mjs +0 -423
- package/lib/session/README.md +0 -137
- package/lib/session/demo.html +0 -94
- package/lib/session/fedi-account.mjs +0 -408
- package/lib/session/fedi-login.mjs +0 -123
- package/lib/session/oidc-session.mjs +0 -233
- package/lib/session/package.json +0 -49
- package/lib/shared/guard.mjs +0 -213
- package/lib/shared/links.mjs +0 -9
- package/lib/shared/safefetch.mjs +0 -235
- package/lib/shared/ua.mjs +0 -29
- package/phanpy/dist/404.html +0 -40
- package/phanpy/dist/_headers +0 -2
- package/phanpy/dist/apple-touch-icon.png +0 -0
- package/phanpy/dist/assets/ICONS-DIPJeU0C.js +0 -2
- package/phanpy/dist/assets/ICONS-DIPJeU0C.js.map +0 -1
- package/phanpy/dist/assets/ScheduledAtField-D-Abfo4J.js +0 -183
- package/phanpy/dist/assets/ScheduledAtField-D-Abfo4J.js.map +0 -1
- package/phanpy/dist/assets/Temml-CCjoacWt.woff2 +0 -0
- package/phanpy/dist/assets/__vite-browser-external-C7iut881.js +0 -2
- package/phanpy/dist/assets/__vite-browser-external-C7iut881.js.map +0 -1
- package/phanpy/dist/assets/boosts-carousel-BiOaNdMT.jpg +0 -0
- package/phanpy/dist/assets/catch-up-O5q5C75Z.png +0 -0
- package/phanpy/dist/assets/chunk-aKtaBQYM.js +0 -1
- package/phanpy/dist/assets/compose-CFEx7wb4.js +0 -2
- package/phanpy/dist/assets/compose-CFEx7wb4.js.map +0 -1
- package/phanpy/dist/assets/compose-ZJN5xSb4.js +0 -35
- package/phanpy/dist/assets/compose-ZJN5xSb4.js.map +0 -1
- package/phanpy/dist/assets/debug.module-YFQgwnIr.js +0 -52
- package/phanpy/dist/assets/debug.module-YFQgwnIr.js.map +0 -1
- package/phanpy/dist/assets/dom-p1YcJ5Rw.js +0 -2
- package/phanpy/dist/assets/dom-p1YcJ5Rw.js.map +0 -1
- package/phanpy/dist/assets/home-mobile-dark@2x-Dc-J8-SM.png +0 -0
- package/phanpy/dist/assets/home-mobile-light@2x-Bd3fod8m.png +0 -0
- package/phanpy/dist/assets/home-tablet-dark@2x-BgcNI8le.png +0 -0
- package/phanpy/dist/assets/home-tablet-light@2x-BW2RV9T6.png +0 -0
- package/phanpy/dist/assets/icons/add-circle-line-WD0mwORD.js +0 -1
- package/phanpy/dist/assets/icons/alert-line-CpFUMf9s.js +0 -1
- package/phanpy/dist/assets/icons/android-2-line-Bzxnrd3S.js +0 -1
- package/phanpy/dist/assets/icons/announcement-line-5nwaJFJm.js +0 -1
- package/phanpy/dist/assets/icons/arrow-down-circle-line-a7Id9-Iv.js +0 -1
- package/phanpy/dist/assets/icons/arrow-down-line-B8uzXzq6.js +0 -1
- package/phanpy/dist/assets/icons/arrow-left-line-CGrGT9C-.js +0 -1
- package/phanpy/dist/assets/icons/arrow-right-line-CE-HERfX.js +0 -1
- package/phanpy/dist/assets/icons/arrow-to-up-line-CvdQjmcy.js +0 -1
- package/phanpy/dist/assets/icons/arrow-up-circle-line-DEparSNF.js +0 -1
- package/phanpy/dist/assets/icons/arrow-up-line-C7yBeugc.js +0 -1
- package/phanpy/dist/assets/icons/arrows-right-line-BtbXmJGP.js +0 -1
- package/phanpy/dist/assets/icons/at-line-CF66Bznk.js +0 -1
- package/phanpy/dist/assets/icons/attachment-line-BY8It-l9.js +0 -1
- package/phanpy/dist/assets/icons/blockquote-line-BS6pU_hm.js +0 -1
- package/phanpy/dist/assets/icons/board-line-C0UWXyA6.js +0 -1
- package/phanpy/dist/assets/icons/bookmark-line-1CtX5JLF.js +0 -1
- package/phanpy/dist/assets/icons/building-5-line-Dd59MzbO.js +0 -1
- package/phanpy/dist/assets/icons/bus-2-line-6_dvA0GG.js +0 -1
- package/phanpy/dist/assets/icons/calendar-day-line-Crpl_fmu.js +0 -1
- package/phanpy/dist/assets/icons/calendar-month-line-vommts2C.js +0 -1
- package/phanpy/dist/assets/icons/calendar-time-add-line-BU_DTlQk.js +0 -1
- package/phanpy/dist/assets/icons/camera-line-Cv69MEei.js +0 -1
- package/phanpy/dist/assets/icons/celebrate-line-B8DvIoi0.js +0 -1
- package/phanpy/dist/assets/icons/chart-bar-line-FK-QOmtF.js +0 -1
- package/phanpy/dist/assets/icons/chart-line-line-BGcJAFWw.js +0 -1
- package/phanpy/dist/assets/icons/chat-3-line-YFK2-hwz.js +0 -1
- package/phanpy/dist/assets/icons/check-circle-line-DsAxFr5-.js +0 -1
- package/phanpy/dist/assets/icons/clipboard-line-BBp364gJ.js +0 -1
- package/phanpy/dist/assets/icons/close-circle-line-CICdiuGz.js +0 -1
- package/phanpy/dist/assets/icons/close-line-DYrFWcjv.js +0 -1
- package/phanpy/dist/assets/icons/cloud-line-tiQAbah8.js +0 -1
- package/phanpy/dist/assets/icons/code-line-fAl8iiV3.js +0 -1
- package/phanpy/dist/assets/icons/comment-2-line-CR3g7WeB.js +0 -1
- package/phanpy/dist/assets/icons/copy-2-line-CLW69yF5.js +0 -1
- package/phanpy/dist/assets/icons/delete-2-line-B8xmbr4n.js +0 -1
- package/phanpy/dist/assets/icons/document-3-line-DBGNhAg2.js +0 -1
- package/phanpy/dist/assets/icons/document-line-C7mb9sb7.js +0 -1
- package/phanpy/dist/assets/icons/down-line-BGqSSThd.js +0 -1
- package/phanpy/dist/assets/icons/edit-4-line-DcgGaEhx.js +0 -1
- package/phanpy/dist/assets/icons/emoji-2-line-D8YgnM-y.js +0 -1
- package/phanpy/dist/assets/icons/exit-line-Dc07BS-x.js +0 -1
- package/phanpy/dist/assets/icons/external-link-line-BvpSkmjO.js +0 -1
- package/phanpy/dist/assets/icons/eye-2-line-CiWXx-f_.js +0 -1
- package/phanpy/dist/assets/icons/eye-close-line-BgTaSJ4P.js +0 -1
- package/phanpy/dist/assets/icons/filter-2-line-B_mR2usy.js +0 -1
- package/phanpy/dist/assets/icons/filter-line-C_nm-3cU.js +0 -1
- package/phanpy/dist/assets/icons/flag-1-line-C2HB05I0.js +0 -1
- package/phanpy/dist/assets/icons/forbid-circle-line-D3LTT9yd.js +0 -1
- package/phanpy/dist/assets/icons/formula-line-DLrt2d6j.js +0 -1
- package/phanpy/dist/assets/icons/grid-line-CgUmEikf.js +0 -1
- package/phanpy/dist/assets/icons/group-line-C5fnX0wU.js +0 -1
- package/phanpy/dist/assets/icons/hand-finger-2-line-BGgxbuL9.js +0 -1
- package/phanpy/dist/assets/icons/hashtag-line-CyTEEXBb.js +0 -1
- package/phanpy/dist/assets/icons/heart-crack-line-BZddbO2C.js +0 -1
- package/phanpy/dist/assets/icons/heart-line-CJ7K47J4.js +0 -1
- package/phanpy/dist/assets/icons/history-2-line-kWWvFzqv.js +0 -1
- package/phanpy/dist/assets/icons/history-line-bGQiwbTH.js +0 -1
- package/phanpy/dist/assets/icons/home-3-line-fRU1zeLG.js +0 -1
- package/phanpy/dist/assets/icons/information-line-iNk6-sOY.js +0 -1
- package/phanpy/dist/assets/icons/keyboard-line-DsCyuQNz.js +0 -1
- package/phanpy/dist/assets/icons/layout-4-line-CZkOX52Z.js +0 -1
- package/phanpy/dist/assets/icons/layout-5-line-B_znt5wO.js +0 -1
- package/phanpy/dist/assets/icons/left-line-eUw0tya4.js +0 -1
- package/phanpy/dist/assets/icons/lightning-line-DaKoDdix.js +0 -1
- package/phanpy/dist/assets/icons/link-2-line-DCqLmMA7.js +0 -1
- package/phanpy/dist/assets/icons/list-check-line-BAxosBh9.js +0 -1
- package/phanpy/dist/assets/icons/lock-line-CPoaXeUW.js +0 -1
- package/phanpy/dist/assets/icons/mail-line-B0P8aa1L.js +0 -1
- package/phanpy/dist/assets/icons/moon-line-CEqNAToP.js +0 -1
- package/phanpy/dist/assets/icons/more-1-fill-Dw2e5xab.js +0 -1
- package/phanpy/dist/assets/icons/more-3-line-BIiVjYTz.js +0 -1
- package/phanpy/dist/assets/icons/notification-line-BZZq2Gtu.js +0 -1
- package/phanpy/dist/assets/icons/pencil-line-CKh8-A1v.js +0 -1
- package/phanpy/dist/assets/icons/photo-album-line-Bnfg2u40.js +0 -1
- package/phanpy/dist/assets/icons/pin-line-DpTolyhs.js +0 -1
- package/phanpy/dist/assets/icons/play-fill-B0-G_8lX.js +0 -1
- package/phanpy/dist/assets/icons/qrcode-2-line-B6SPCaHn.js +0 -1
- package/phanpy/dist/assets/icons/quill-pen-line-B6LUrnCP.js +0 -1
- package/phanpy/dist/assets/icons/quote-left-fill-hQZ1cj_6.js +0 -1
- package/phanpy/dist/assets/icons/radar-line-CKyroTth.js +0 -1
- package/phanpy/dist/assets/icons/react-line-CoIKhhtK.js +0 -1
- package/phanpy/dist/assets/icons/refresh-2-line-D0mTF97S.js +0 -1
- package/phanpy/dist/assets/icons/right-line-B3KWJaqc.js +0 -1
- package/phanpy/dist/assets/icons/rocket-line-4KZl537D.js +0 -1
- package/phanpy/dist/assets/icons/round-fill-C69NTrZ0.js +0 -1
- package/phanpy/dist/assets/icons/round-line-B9k_1uo-.js +0 -1
- package/phanpy/dist/assets/icons/route-line-B28ReHcE.js +0 -1
- package/phanpy/dist/assets/icons/rows-4-line-CrBniagM.js +0 -1
- package/phanpy/dist/assets/icons/scan-line-DSf74YdP.js +0 -1
- package/phanpy/dist/assets/icons/search-2-line-B6geIU1z.js +0 -1
- package/phanpy/dist/assets/icons/settings-3-line-azJwK47w.js +0 -1
- package/phanpy/dist/assets/icons/settings-6-line-C_5zc5YR.js +0 -1
- package/phanpy/dist/assets/icons/share-2-line-D5MxWjrm.js +0 -1
- package/phanpy/dist/assets/icons/share-forward-line-Cp61fZzZ.js +0 -1
- package/phanpy/dist/assets/icons/sparkles-2-line-DYYyXTaW.js +0 -1
- package/phanpy/dist/assets/icons/sparkles-line-C2hY1s6I.js +0 -1
- package/phanpy/dist/assets/icons/time-line-BF3eet1v.js +0 -1
- package/phanpy/dist/assets/icons/transfer-4-line-oisfvTBw.js +0 -1
- package/phanpy/dist/assets/icons/translate-line-BFWol2Ce.js +0 -1
- package/phanpy/dist/assets/icons/unlock-line-X_x5vwv3.js +0 -1
- package/phanpy/dist/assets/icons/upload-3-line-DgzwUJeW.js +0 -1
- package/phanpy/dist/assets/icons/user-4-line-BVSynZCp.js +0 -1
- package/phanpy/dist/assets/icons/user-add-2-line-BlGS5Q8q.js +0 -1
- package/phanpy/dist/assets/icons/user-add-line-BbXdHG4z.js +0 -1
- package/phanpy/dist/assets/icons/user-edit-line-BFAHOV0X.js +0 -1
- package/phanpy/dist/assets/icons/user-follow-line-BXux0wSd.js +0 -1
- package/phanpy/dist/assets/icons/user-star-line-DdYlpHLU.js +0 -1
- package/phanpy/dist/assets/icons/user-warning-line-Cj43j0_E.js +0 -1
- package/phanpy/dist/assets/icons/user-x-line-DIDgNlPH.js +0 -1
- package/phanpy/dist/assets/icons/volume-line-Bs390KQt.js +0 -1
- package/phanpy/dist/assets/icons/volume-mute-line-DzlzIqFZ.js +0 -1
- package/phanpy/dist/assets/icons/walk-line-yNXfB-md.js +0 -1
- package/phanpy/dist/assets/icons/world-2-line-CenkGIwj.js +0 -1
- package/phanpy/dist/assets/icons/zoom-in-line-CaENUphf.js +0 -1
- package/phanpy/dist/assets/icons/zoom-out-line-BDNk0EWo.js +0 -1
- package/phanpy/dist/assets/instances-BNPptnn-.json +0 -333
- package/phanpy/dist/assets/locales/ar-SA-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/locales/ca-ES-DHRW86Tz.js +0 -1
- package/phanpy/dist/assets/locales/cs-CZ-CKoqEuA1.js +0 -1
- package/phanpy/dist/assets/locales/de-DE-ByRPMRFy.js +0 -1
- package/phanpy/dist/assets/locales/eo-UY-CPC7wLCS.js +0 -1
- package/phanpy/dist/assets/locales/es-ES-dJa0Fd9t.js +0 -1
- package/phanpy/dist/assets/locales/eu-ES-C3djlPR2.js +0 -1
- package/phanpy/dist/assets/locales/fa-IR-DTT490Ck.js +0 -1
- package/phanpy/dist/assets/locales/fi-FI-B23MCPuz.js +0 -1
- package/phanpy/dist/assets/locales/fr-FR-BcaQsO5C.js +0 -1
- package/phanpy/dist/assets/locales/gl-ES-BR-CVKBN.js +0 -1
- package/phanpy/dist/assets/locales/he-IL-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/locales/hu-HU-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/locales/it-IT-C1136UFV.js +0 -1
- package/phanpy/dist/assets/locales/ja-JP-CRZmRAhD.js +0 -1
- package/phanpy/dist/assets/locales/kab-Cz8xH_TT.js +0 -1
- package/phanpy/dist/assets/locales/ko-KR-CG9UiY4o.js +0 -1
- package/phanpy/dist/assets/locales/lt-LT-CJcI6sHZ.js +0 -1
- package/phanpy/dist/assets/locales/nb-NO-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/locales/nl-NL-DxN4Yc1t.js +0 -1
- package/phanpy/dist/assets/locales/oc-FR-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/locales/pl-PL-DkwGXf6P.js +0 -1
- package/phanpy/dist/assets/locales/pseudo-LOCALE-CQ4XxkQ0.js +0 -1
- package/phanpy/dist/assets/locales/pt-BR-nGL0HdFS.js +0 -1
- package/phanpy/dist/assets/locales/pt-PT-Cp17aj2z.js +0 -1
- package/phanpy/dist/assets/locales/ru-RU-0Y8cIoaK.js +0 -1
- package/phanpy/dist/assets/locales/th-TH-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/locales/tok-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/locales/tr-TR-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/locales/uk-UA-C5E3dFBf.js +0 -1
- package/phanpy/dist/assets/locales/zh-CN-BHJi7_et.js +0 -1
- package/phanpy/dist/assets/locales/zh-TW-CfheRbCu.js +0 -1
- package/phanpy/dist/assets/main-BdqNbG-a.js +0 -26
- package/phanpy/dist/assets/main-BdqNbG-a.js.map +0 -1
- package/phanpy/dist/assets/mock-home-DGhR__He.js +0 -2
- package/phanpy/dist/assets/mock-home-DGhR__He.js.map +0 -1
- package/phanpy/dist/assets/multi-column-ROck0NVt.jpg +0 -0
- package/phanpy/dist/assets/multi-hashtag-timeline-DH5INVHi.jpg +0 -0
- package/phanpy/dist/assets/nested-comments-thread-hv59kZLc.jpg +0 -0
- package/phanpy/dist/assets/polyfill-force-H8sUkLGp.js +0 -2
- package/phanpy/dist/assets/polyfill-force-H8sUkLGp.js.map +0 -1
- package/phanpy/dist/assets/pwa-viewport-ogKbF51K.js +0 -20
- package/phanpy/dist/assets/pwa-viewport-ogKbF51K.js.map +0 -1
- package/phanpy/dist/assets/style-B1iLPTPR.css +0 -2
- package/phanpy/dist/assets/temml-DuyIQMei.js +0 -97
- package/phanpy/dist/assets/temml-DuyIQMei.js.map +0 -1
- package/phanpy/dist/assets/tinyld.light.node-DtbBhLYC.js +0 -2
- package/phanpy/dist/assets/tinyld.light.node-DtbBhLYC.js.map +0 -1
- package/phanpy/dist/assets/year-in-posts-B2lywqdx.png +0 -0
- package/phanpy/dist/assets/year-in-posts-DJv_star.js +0 -3
- package/phanpy/dist/assets/year-in-posts-DJv_star.js.map +0 -1
- package/phanpy/dist/compose/index.html +0 -20
- package/phanpy/dist/favicon.ico +0 -0
- package/phanpy/dist/index.html +0 -73
- package/phanpy/dist/logo-192.png +0 -0
- package/phanpy/dist/logo-512.png +0 -0
- package/phanpy/dist/logo-badge-72.png +0 -0
- package/phanpy/dist/logo-maskable-512.png +0 -0
- package/phanpy/dist/logo-monochrome-512.png +0 -0
- package/phanpy/dist/logo-monochrome-maskable-512.png +0 -0
- package/phanpy/dist/manifest.webmanifest +0 -1
- package/phanpy/dist/og-image-2.jpg +0 -0
- package/phanpy/dist/og-image.png +0 -0
- package/phanpy/dist/robots.txt +0 -2
- package/phanpy/dist/sw.js +0 -2
- package/phanpy/dist/sw.js.map +0 -1
- package/phanpy/dist/version.json +0 -1
- package/run-agent.mjs +0 -897
- package/vendor/gate.cjs +0 -138
- package/vendor/idp-grant.cjs +0 -394
- package/vendor/jfetch.cjs +0 -16
- package/web/admin/actors.js +0 -145
- package/web/admin/bar.css +0 -126
- package/web/admin/bar.js +0 -99
- package/web/admin/client/client.js +0 -66
- package/web/admin/client/index.html +0 -69
- package/web/admin/client-pick.js +0 -79
- package/web/admin/common.js +0 -23
- package/web/admin/connections.js +0 -112
- package/web/admin/gateway.js +0 -133
- package/web/admin/group.js +0 -258
- package/web/admin/index.html +0 -603
- package/web/admin/notices-bar.js +0 -90
- package/web/admin/oauth-signin.mjs +0 -37
- package/web/admin/record.js +0 -390
- package/web/admin/setup/index.html +0 -241
- package/web/admin/setup/setup.js +0 -326
- package/web/admin/tokens.css +0 -68
- package/web/admin/upkeep.js +0 -177
- package/web/admin/window.css +0 -55
- package/web/admin/window.js +0 -136
- package/web/app/README.md +0 -81
- package/web/app/admin-facade.mjs +0 -588
- package/web/app/agent.mjs +0 -663
- package/web/app/atproto-browser.mjs +0 -86
- package/web/app/authorize_interaction.html +0 -56
- package/web/app/authorize_interaction.js +0 -69
- package/web/app/boot.mjs +0 -576
- package/web/app/deliver-relay.mjs +0 -129
- package/web/app/dist/boot.js +0 -34218
- package/web/app/dist/boot.js.map +0 -7
- package/web/app/dist/sw.js +0 -72810
- package/web/app/dist/sw.js.map +0 -7
- package/web/app/fediacct-browser.mjs +0 -146
- package/web/app/gateway-move.mjs +0 -60
- package/web/app/idb-kv.mjs +0 -35
- package/web/app/index.html +0 -242
- package/web/app/keys-browser.mjs +0 -71
- package/web/app/keystore.mjs +0 -82
- package/web/app/oidc-session.mjs +0 -6
- package/web/app/pod-auth.mjs +0 -248
- package/web/app/pod-remote.mjs +0 -84
- package/web/app/shims/_globals.mjs +0 -2
- package/web/app/shims/fedify-sig.mjs +0 -77
- package/web/app/shims/node-crypto.mjs +0 -113
- package/web/app/shims/node-fs.mjs +0 -17
- package/web/app/shims/node-path.mjs +0 -19
- package/web/app/shims/node-url.mjs +0 -7
- package/web/app/shims/prelude.js +0 -58
- package/web/app/shims/safefetch.mjs +0 -58
- package/web/app/shims/shapes-text.mjs +0 -8
- package/web/app/shims/web-push.mjs +0 -14
- package/web/app/signup.mjs +0 -318
- package/web/app/sw-src.mjs +0 -220
- package/web/app/update.js +0 -70
- package/web/front/admin.html +0 -55
- package/web/front/admin.js +0 -89
- package/web/front/install.sh +0 -69
- package/web/front/new-account.html +0 -35
- package/web/front/new-account.js +0 -13
- package/web/front/notices.html +0 -69
- package/web/front/notices.js +0 -107
- package/web/front/run.html +0 -58
- package/web/front/run.js +0 -195
- package/web/front/solid-oidc-client.js +0 -6
- package/web/icons/forum.svg +0 -11
- package/web/icons/gateway.svg +0 -14
- package/web/icons/local.svg +0 -11
package/dist/opt-in.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// opt-in.ts — what a pod owner asks of this server: to run their identity,
|
|
3
|
+
// to stop running it, and to say what their pod would be as an identity
|
|
4
|
+
// here; and reading who the server's own account session belongs to.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.webIdsFromSession = webIdsFromSession;
|
|
7
|
+
exports.optInPod = optInPod;
|
|
8
|
+
exports.describePod = describePod;
|
|
9
|
+
exports.optOutPod = optOutPod;
|
|
10
|
+
const store_pod_1 = require("./store-pod");
|
|
11
|
+
const directory_1 = require("./directory");
|
|
12
|
+
const fedipod_1 = require("./fedipod");
|
|
13
|
+
const mounts_1 = require("./mounts");
|
|
14
|
+
const identities_1 = require("./identities");
|
|
15
|
+
/**
|
|
16
|
+
* The WebIDs behind the account session in the request, or none. The server
|
|
17
|
+
* keeps that session in a `css-account` cookie; its own account API is what
|
|
18
|
+
* says which WebIDs the session owns, and it takes the same cookie. Nothing
|
|
19
|
+
* here trusts the cookie's presence — the account API does the deciding, and
|
|
20
|
+
* the caller picks the WebID that owns the pod being claimed.
|
|
21
|
+
*/
|
|
22
|
+
async function webIdsFromSession(h, request) {
|
|
23
|
+
const s = h.internals();
|
|
24
|
+
const cookie = request.headers.get('cookie');
|
|
25
|
+
if (!cookie || !/(?:^|;\s*)css-account=/u.test(cookie))
|
|
26
|
+
return [];
|
|
27
|
+
const base = s.args.frontOrigin.replace(/\/$/u, '');
|
|
28
|
+
const asJson = { cookie, accept: 'application/json' };
|
|
29
|
+
try {
|
|
30
|
+
const index = await fetch(`${base}/.account/`, { headers: asJson });
|
|
31
|
+
if (!index.ok)
|
|
32
|
+
return [];
|
|
33
|
+
const controls = (await index.json()).controls;
|
|
34
|
+
const webIdLink = controls?.account?.webId;
|
|
35
|
+
if (!webIdLink)
|
|
36
|
+
return [];
|
|
37
|
+
const linked = await fetch(webIdLink, { headers: asJson });
|
|
38
|
+
if (!linked.ok)
|
|
39
|
+
return [];
|
|
40
|
+
const links = (await linked.json()).webIdLinks ?? {};
|
|
41
|
+
return Object.keys(links);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A pod owner, already proven to control podBase, asks this server to run
|
|
49
|
+
* their identity. Returns { httpStatus, ...body }; the secret appears in the
|
|
50
|
+
* reply and nowhere else. Re-opting-in rotates the secret — that is how a
|
|
51
|
+
* lost one is recovered.
|
|
52
|
+
*/
|
|
53
|
+
async function optInPod(h, { podBase, webId, container = '', createIndex = false }) {
|
|
54
|
+
const s = h.internals();
|
|
55
|
+
if (!s.registry)
|
|
56
|
+
return { httpStatus: 501, error: 'this server does not offer runtime opt-in' };
|
|
57
|
+
if (s.args.clusterManager && !s.args.clusterManager.isSingleThreaded()) {
|
|
58
|
+
return { httpStatus: 503, error: 'runtime opt-in needs a single-worker server (--workers 1)' };
|
|
59
|
+
}
|
|
60
|
+
const base = podBase.endsWith('/') ? podBase : `${podBase}/`;
|
|
61
|
+
const handle = (0, mounts_1.deriveHandle)(base);
|
|
62
|
+
// Already running here from an earlier opt-in: proving pod
|
|
63
|
+
// control again buys a fresh secret, nothing else.
|
|
64
|
+
if (s.agentHandles.get(handle) === base) {
|
|
65
|
+
const door = await (0, identities_1.doorSecretFor)(h, base, undefined, { rotate: true });
|
|
66
|
+
s.doorSecrets.set(base, door.secret);
|
|
67
|
+
return { httpStatus: 201, ok: true, handle, host: new URL(base).host.toLowerCase(),
|
|
68
|
+
doorSecret: door.secret, doorPath: s.uiPath, status: 'rotated' };
|
|
69
|
+
}
|
|
70
|
+
let claim;
|
|
71
|
+
try {
|
|
72
|
+
claim = (0, mounts_1.validateAgentPod)(h, base);
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
return { httpStatus: 409, error: e.message };
|
|
76
|
+
}
|
|
77
|
+
const { host } = claim;
|
|
78
|
+
// Where on the pod: the container its owner named holds `fedipod/`. The
|
|
79
|
+
// place is recorded in their public type index — made only on their yes —
|
|
80
|
+
// before anything else is written, and read here with the server's own
|
|
81
|
+
// access to the pod.
|
|
82
|
+
const place = await (0, fedipod_1.esmImport)(fedipod_1.PLACE);
|
|
83
|
+
const chosen = place.chosenRoot(base, container);
|
|
84
|
+
if (chosen.problem || !chosen.root)
|
|
85
|
+
return { httpStatus: 400, error: `Where to store it: ${chosen.problem}.` };
|
|
86
|
+
const root = chosen.root;
|
|
87
|
+
const { PodTransport } = await (0, fedipod_1.esmImport)(fedipod_1.TRANSPORT);
|
|
88
|
+
const pod = new PodTransport((0, store_pod_1.makeStoreSession)(s.args.resourceStore, base), { webId });
|
|
89
|
+
if (!createIndex && !await place.hasPublicIndex(pod, base)) {
|
|
90
|
+
return { httpStatus: 409, code: 'needs-index',
|
|
91
|
+
error: 'Your pod has no public type index, the list Solid apps use to find your things. '
|
|
92
|
+
+ 'FediPod needs one to record where your account lives.' };
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
await place.recordPlace(pod, base, `${base}${root}ap/actor`, { create: createIndex });
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
return { httpStatus: 500, error: `could not record where the account lives in your type index (${e.message})` };
|
|
99
|
+
}
|
|
100
|
+
s.roots.set(base, root);
|
|
101
|
+
try {
|
|
102
|
+
await s.registry.add({ podBase: base, handle, host, webId, root, optedInAt: new Date().toISOString() });
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
s.logger.error(`opt-in row for ${base} could not be written: ${e.message}`);
|
|
106
|
+
return { httpStatus: 500, error: 'could not record the opt-in' };
|
|
107
|
+
}
|
|
108
|
+
// From this instant the pod's identity routes answer 503 instead of LDP,
|
|
109
|
+
// until the agent registers its surface.
|
|
110
|
+
s.claimed.set(base, claim);
|
|
111
|
+
s.agentHandles.set(handle, base);
|
|
112
|
+
const door = await (0, identities_1.doorSecretFor)(h, base, undefined, { rotate: true });
|
|
113
|
+
s.doorSecrets.set(base, door.secret);
|
|
114
|
+
void (0, identities_1.startIdentity)(h, base);
|
|
115
|
+
s.logger.info(`runtime opt-in: @${handle} on ${base} (door secret in its pod at ${door.url})`);
|
|
116
|
+
return { httpStatus: 201, ok: true, handle, host,
|
|
117
|
+
doorSecret: door.secret, doorPath: s.uiPath, status: 'starting' };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* What a pod would be as an identity here, without changing anything: its
|
|
121
|
+
* handle, the host its address carries, and whether it runs here already.
|
|
122
|
+
*/
|
|
123
|
+
async function describePod(h, { podBase }) {
|
|
124
|
+
const s = h.internals();
|
|
125
|
+
const base = podBase.endsWith('/') ? podBase : `${podBase}/`;
|
|
126
|
+
const handle = (0, mounts_1.deriveHandle)(base);
|
|
127
|
+
let host;
|
|
128
|
+
try {
|
|
129
|
+
host = (0, mounts_1.validateAgentPod)(h, base).host;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
host = new URL(base).host.toLowerCase();
|
|
133
|
+
}
|
|
134
|
+
const running = s.agentHandles.get(handle) === base;
|
|
135
|
+
// The management page's door takes its key once in the address and keeps
|
|
136
|
+
// the browser in with a cookie. Only the owner's own page ever asks for
|
|
137
|
+
// this description, so the key rides on the link for a running account.
|
|
138
|
+
// Read from the pod, where the key always is, rather than from what this
|
|
139
|
+
// process happens to hold: an account still starting has none in memory.
|
|
140
|
+
let key;
|
|
141
|
+
if (running) {
|
|
142
|
+
try {
|
|
143
|
+
key = (await (0, identities_1.doorSecretFor)(h, base)).secret;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
key = s.doorSecrets.get(base);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const door = base.replace(/\/$/u, '') + s.uiPath;
|
|
150
|
+
return { handle, host, address: `@${handle}@${host}`, running,
|
|
151
|
+
manage: key ? `${door}?dk-token=${encodeURIComponent(key)}` : door };
|
|
152
|
+
}
|
|
153
|
+
/** The reverse: stop the identity and let the pod be plain LDP again. */
|
|
154
|
+
async function optOutPod(h, { podBase }) {
|
|
155
|
+
const s = h.internals();
|
|
156
|
+
if (!s.registry)
|
|
157
|
+
return { httpStatus: 501, error: 'this server does not offer runtime opt-in' };
|
|
158
|
+
const base = podBase.endsWith('/') ? podBase : `${podBase}/`;
|
|
159
|
+
const host = new URL(base).host.toLowerCase();
|
|
160
|
+
const key = (0, directory_1.agentKey)(host, base);
|
|
161
|
+
const row = await s.registry.get(key);
|
|
162
|
+
if (!row || row.podBase !== base)
|
|
163
|
+
return { httpStatus: 404, error: 'this pod has not opted in' };
|
|
164
|
+
s.claimed.delete(base); // routes fall to LDP now
|
|
165
|
+
s.startCancelled.add(base); // a pending start stands down
|
|
166
|
+
const identity = s.identities.get(base);
|
|
167
|
+
s.identities.delete(base);
|
|
168
|
+
s.surfaces.delete(base);
|
|
169
|
+
s.agentHandles.delete(row.handle);
|
|
170
|
+
s.doorSecrets.delete(base);
|
|
171
|
+
if (identity)
|
|
172
|
+
await identity.stop();
|
|
173
|
+
await s.registry.remove(key);
|
|
174
|
+
s.logger.info(`runtime opt-out: @${row.handle} on ${base} — the pod serves plain LDP again`);
|
|
175
|
+
return { httpStatus: 200, ok: true, stopped: Boolean(identity) };
|
|
176
|
+
}
|
package/dist/store-pod.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.makeStoreFetch = makeStoreFetch;
|
|
17
17
|
exports.makeStoreSession = makeStoreSession;
|
|
18
|
+
const node_stream_1 = require("node:stream");
|
|
18
19
|
const community_server_1 = require("@solid/community-server");
|
|
19
20
|
/** Header lookup that does not care about case, over either shape fetch accepts. */
|
|
20
21
|
function headerReader(init) {
|
|
@@ -131,6 +132,42 @@ function makeStoreFetch(resourceStore, podBase) {
|
|
|
131
132
|
const written = changes?.get?.(identifier);
|
|
132
133
|
return respond(205, null, written && etags.getETag(written));
|
|
133
134
|
}
|
|
135
|
+
// An N3 Patch of an RDF document — a profile, a type index — read by the
|
|
136
|
+
// parser a Solid server reads one with, and applied by the store's own
|
|
137
|
+
// patching. Only the statements change; the document is never rewritten
|
|
138
|
+
// around them. A store that cannot patch answers 501, which is the one
|
|
139
|
+
// answer that sends a caller to writing the whole document instead.
|
|
140
|
+
if (method === 'PATCH') {
|
|
141
|
+
stats.writes++;
|
|
142
|
+
if (!/^text\/n3\b/u.test(header('content-type') ?? ''))
|
|
143
|
+
return respond(415, 'an N3 Patch is the patch this takes');
|
|
144
|
+
let patch;
|
|
145
|
+
try {
|
|
146
|
+
patch = await new community_server_1.N3PatchBodyParser().handle({
|
|
147
|
+
metadata: new community_server_1.RepresentationMetadata(identifier, 'text/n3'),
|
|
148
|
+
request: (0, community_server_1.guardStream)(node_stream_1.Readable.from([String(init.body ?? '')])),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
return respond(400, `not a patch this can read: ${e.message}`);
|
|
153
|
+
}
|
|
154
|
+
const ifMatch = header('if-match');
|
|
155
|
+
const conditions = ifMatch
|
|
156
|
+
? new community_server_1.BasicConditions(etags, { matchesETag: ifMatch.split(',').map((t) => t.trim()) })
|
|
157
|
+
: undefined;
|
|
158
|
+
try {
|
|
159
|
+
await resourceStore.modifyResource(identifier, patch, conditions);
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
// What the store said, as the status it said it with: 409 for a
|
|
163
|
+
// deletion of something not there, 412 for a stale If-Match, 501
|
|
164
|
+
// for a store with no patching at all.
|
|
165
|
+
if (community_server_1.HttpError.isInstance(e))
|
|
166
|
+
return respond(e.statusCode, e.message);
|
|
167
|
+
throw e;
|
|
168
|
+
}
|
|
169
|
+
return respond(205, null);
|
|
170
|
+
}
|
|
134
171
|
if (method === 'DELETE') {
|
|
135
172
|
stats.deletes++;
|
|
136
173
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fedipod-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.30.0",
|
|
4
4
|
"description": "The FediPod Server: a full ActivityPub server as a Community Solid Server component.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -8,11 +8,6 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
"dist",
|
|
10
10
|
"config",
|
|
11
|
-
"lib",
|
|
12
|
-
"vendor",
|
|
13
|
-
"web",
|
|
14
|
-
"run-agent.mjs",
|
|
15
|
-
"phanpy",
|
|
16
11
|
"README.md",
|
|
17
12
|
"fedipod-server.svg"
|
|
18
13
|
],
|
|
@@ -20,20 +15,16 @@
|
|
|
20
15
|
"@solid/community-server": "^7.0.0"
|
|
21
16
|
},
|
|
22
17
|
"dependencies": {
|
|
23
|
-
"
|
|
24
|
-
"@solid/access-token-verifier": "^2.1.1",
|
|
25
|
-
"jose": "^6.2.8",
|
|
26
|
-
"node-forge": "^1.4.0",
|
|
27
|
-
"rdflib": "^2.4.0",
|
|
28
|
-
"sanitize-html": "^2.17.6",
|
|
29
|
-
"undici": "^6.28.0",
|
|
30
|
-
"web-push": "^3.6.7"
|
|
18
|
+
"fedipod": "^1.42.0"
|
|
31
19
|
},
|
|
32
20
|
"devDependencies": {
|
|
33
21
|
"typescript": "^5.5.3",
|
|
34
22
|
"componentsjs-generator": "^3.1.2",
|
|
35
23
|
"@types/node": "^20.0.0",
|
|
36
|
-
"@solid/community-server": "^7.2.0"
|
|
24
|
+
"@solid/community-server": "^7.2.0",
|
|
25
|
+
"@fedify/fedify": "^2.3.4",
|
|
26
|
+
"n3": "^2.1.1",
|
|
27
|
+
"rdflib": "^2.4.0"
|
|
37
28
|
},
|
|
38
29
|
"overrides": {
|
|
39
30
|
"@opentelemetry/core": "^2.8.0",
|
|
@@ -53,11 +44,12 @@
|
|
|
53
44
|
"scripts": {
|
|
54
45
|
"build": "tsc && npm run build:components",
|
|
55
46
|
"build:components": "componentsjs-generator -s src -c dist/components -r fps",
|
|
47
|
+
"pretest": "node scripts/link-fedipod.mjs",
|
|
56
48
|
"test": "npm run build && node --test test/*.mjs",
|
|
49
|
+
"pretest:e2e": "node scripts/link-fedipod.mjs",
|
|
57
50
|
"test:e2e": "node test/e2e/live-agent.mjs",
|
|
51
|
+
"pretest:e2e:suffix": "node scripts/link-fedipod.mjs",
|
|
58
52
|
"test:e2e:suffix": "node test/e2e/live-suffix.mjs",
|
|
59
|
-
"prepublishOnly": "npm test"
|
|
60
|
-
"prepack": "node scripts/pack-tree.mjs copy",
|
|
61
|
-
"postpack": "node scripts/pack-tree.mjs clean"
|
|
53
|
+
"prepublishOnly": "npm test"
|
|
62
54
|
}
|
|
63
55
|
}
|