fedipod-server 0.29.0 → 0.31.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 +16 -6
- package/dist/claims.d.ts +2 -0
- package/dist/claims.js +13 -4
- package/dist/door.d.ts +4 -0
- package/dist/door.js +31 -0
- package/dist/fedipod.d.ts +15 -0
- package/dist/fedipod.js +13 -0
- package/dist/front.d.ts +3 -0
- package/dist/front.js +92 -0
- package/dist/handler.d.ts +36 -101
- package/dist/handler.js +93 -644
- package/dist/handler.jsonld +2 -30
- package/dist/identities.d.ts +71 -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/private-read.d.ts +4 -0
- package/dist/private-read.js +34 -0
- package/package.json +12 -20
- package/lib/client/c2s.mjs +0 -636
- package/lib/client/localapi.mjs +0 -87
- package/lib/client/masto/accounts.mjs +0 -310
- 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 -387
- package/lib/core/graphview.mjs +0 -327
- package/lib/core/intake/activities.mjs +0 -649
- package/lib/core/intake/activity.mjs +0 -318
- package/lib/core/intake/channel.mjs +0 -144
- package/lib/core/intake/group.mjs +0 -258
- package/lib/core/intake/index.mjs +0 -732
- package/lib/core/intake/notes.mjs +0 -367
- 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/place.mjs +0 -82
- 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 -272
- package/lib/core/publisher/index.mjs +0 -522
- package/lib/core/publisher/notes.mjs +0 -519
- package/lib/core/publisher/own.mjs +0 -143
- package/lib/core/publisher/questions.mjs +0 -241
- 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 -561
- package/lib/core/storage.mjs +0 -176
- package/lib/core/store.mjs +0 -578
- package/lib/core/wire-quotes.mjs +0 -71
- package/lib/core/wire.mjs +0 -925
- 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 -428
- 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 -489
- 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 -496
- 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 -966
- package/lib/gateway/gateway-core.mjs +0 -244
- 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/gateway/relay-extras.mjs +0 -89
- package/lib/gateway/token-claims.mjs +0 -16
- 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/location.mjs +0 -52
- package/lib/pod/media.mjs +0 -27
- package/lib/pod/notes.mjs +0 -78
- 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 -674
- package/lib/pod/type-index.mjs +0 -101
- package/lib/pod/urls.mjs +0 -91
- package/lib/server/embed.mjs +0 -424
- package/lib/session/README.md +0 -137
- package/lib/session/demo.html +0 -94
- package/lib/session/fedi-account.mjs +0 -417
- 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 -899
- 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 -147
- 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 -612
- package/web/admin/notices-bar.js +0 -90
- package/web/admin/oauth-signin.mjs +0 -37
- package/web/admin/record.js +0 -393
- package/web/admin/setup/index.html +0 -257
- package/web/admin/setup/setup.js +0 -339
- 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 -672
- 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 -616
- package/web/app/deliver-relay.mjs +0 -129
- package/web/app/dist/boot.js +0 -34562
- package/web/app/dist/boot.js.map +0 -7
- package/web/app/dist/sw.js +0 -73456
- 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 -258
- 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 -357
- 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 -64
- package/web/front/run.js +0 -221
- 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
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { HttpHandlerInput } from '@solid/community-server';
|
|
2
|
+
import type { EmbeddedIdentity } from './identities';
|
|
3
|
+
import type { FediPodServerHandler } from './handler';
|
|
4
|
+
export declare function readPrivateAtDoor(h: FediPodServerHandler, identity: EmbeddedIdentity, request: HttpHandlerInput['request'], response: HttpHandlerInput['response']): Promise<void>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// private-read.ts — a signed read of a followers-only or direct post at its
|
|
3
|
+
// address on this pod, answered to a server the post was sent to (ActivityPub
|
|
4
|
+
// §3.2). The same rule the front applies (lib/gateway/private-read.mjs); the
|
|
5
|
+
// post is read through the server's own store and the followers come from the
|
|
6
|
+
// identity's live state. Anyone the post was not sent to gets 404.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.readPrivateAtDoor = readPrivateAtDoor;
|
|
9
|
+
const adapt_1 = require("./adapt");
|
|
10
|
+
const fedipod_1 = require("./fedipod");
|
|
11
|
+
async function readPrivateAtDoor(h, identity, request, response) {
|
|
12
|
+
const s = h.internals();
|
|
13
|
+
const { readPrivateForSigner } = await (0, fedipod_1.esmImport)(fedipod_1.EMBED);
|
|
14
|
+
let whatwg;
|
|
15
|
+
try {
|
|
16
|
+
// The pod's own origin: the signature covers the path and the Host header, and both are the pod's.
|
|
17
|
+
whatwg = await (0, adapt_1.nodeToWhatwg)(request, new URL(identity.podHome).origin);
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
response.writeHead(400, { 'content-type': 'application/json' });
|
|
21
|
+
response.end(JSON.stringify({ error: e.message }));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const out = await readPrivateForSigner(identity.agent, whatwg, { read: (url) => s.io.read(url) });
|
|
25
|
+
s.logger.info(`FediPod: private read for @${identity.handle} — ${out.reason} (${out.status})`);
|
|
26
|
+
const noStore = { 'cache-control': 'no-store', vary: 'Signature' };
|
|
27
|
+
if (out.status !== 200) {
|
|
28
|
+
response.writeHead(out.status, noStore);
|
|
29
|
+
response.end();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
response.writeHead(200, { ...noStore, 'content-type': 'application/activity+json' });
|
|
33
|
+
response.end(String(request.method).toUpperCase() === 'HEAD' ? '' : out.body);
|
|
34
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fedipod-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.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.45.0"
|
|
31
19
|
},
|
|
32
20
|
"devDependencies": {
|
|
33
|
-
"
|
|
34
|
-
"
|
|
21
|
+
"@fedify/fedify": "^2.3.4",
|
|
22
|
+
"@solid/community-server": "^7.2.0",
|
|
35
23
|
"@types/node": "^20.0.0",
|
|
36
|
-
"
|
|
24
|
+
"componentsjs-generator": "^3.1.2",
|
|
25
|
+
"n3": "^2.1.1",
|
|
26
|
+
"rdflib": "^2.4.0",
|
|
27
|
+
"typescript": "^5.5.3"
|
|
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
|
}
|