fedipod-server 0.17.0 → 0.18.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/lib/client/c2s.mjs +95 -61
- package/lib/core/contexts/anno.json +126 -0
- package/lib/core/contexts/index.mjs +4 -0
- package/lib/core/contexts/map.json +2 -1
- package/lib/core/intake/index.mjs +32 -5
- package/lib/core/publisher/index.mjs +15 -1
- package/lib/core/publisher/notes.mjs +84 -2
- package/lib/core/publisher/questions.mjs +1 -0
- package/lib/core/publisher/restore.mjs +27 -2
- package/lib/core/social.mjs +1 -0
- package/lib/core/store.mjs +4 -0
- package/lib/core/wire.mjs +16 -12
- package/lib/gateway/front-core.mjs +43 -1
- package/lib/gateway/gateway-core.mjs +40 -0
- package/lib/pod/actor.mjs +2 -2
- package/lib/pod/transport.mjs +9 -3
- package/package.json +1 -1
- package/run-agent.mjs +9 -0
- package/web/admin/index.html +2 -0
- package/web/admin/upkeep.js +9 -1
- package/web/app/README.md +1 -1
- package/web/app/agent.mjs +10 -0
- package/web/app/boot.mjs +49 -10
- package/web/app/dist/boot.js +47 -7
- package/web/app/dist/boot.js.map +2 -2
- package/web/app/dist/sw.js +1325 -661
- package/web/app/dist/sw.js.map +4 -4
- package/web/app/index.html +16 -6
- package/web/app/site/admin/index.html +2 -0
- package/web/app/site/admin/upkeep.js +9 -1
- package/web/app/site/boot.js +89 -37
- package/web/app/site/index.html +16 -6
- package/web/app/site/sw.js +1326 -662
- package/web/front/#new-account.html# +0 -43
- package/web/front/new-account.html~ +0 -50
package/web/app/dist/boot.js
CHANGED
|
@@ -33075,7 +33075,7 @@ var PodTransport = class {
|
|
|
33075
33075
|
* says all of it. The parsed graph must mention the WebID before anything is
|
|
33076
33076
|
* written back — an empty or foreign body must never become the new profile.
|
|
33077
33077
|
*/
|
|
33078
|
-
async linkAccountInProfile({ actorUrl, accountName, kind = "person" }) {
|
|
33078
|
+
async linkAccountInProfile({ actorUrl, accountName, kind = "person", outbox = null }) {
|
|
33079
33079
|
const docUrl = this.webId.split("#")[0];
|
|
33080
33080
|
const res = await this.fetch(docUrl, { headers: { accept: "text/turtle" } });
|
|
33081
33081
|
if (res.status >= 400) throw new Error(`[${this.label}] GET ${docUrl} \u2192 ${res.status}`);
|
|
@@ -33091,10 +33091,16 @@ var PodTransport = class {
|
|
|
33091
33091
|
[me, FOAF("account"), actor],
|
|
33092
33092
|
[actor, RDF3("type"), FOAF("OnlineAccount")],
|
|
33093
33093
|
[actor, RDF3("type"), kind === "group" ? AS("Group") : AS("Person")],
|
|
33094
|
-
[actor, FOAF("accountName"), literal2(accountName)]
|
|
33094
|
+
[actor, FOAF("accountName"), literal2(accountName)],
|
|
33095
|
+
// Where a Solid client posts on this person's behalf (`as:outbox` on the
|
|
33096
|
+
// WebID is what dokieli reads); only where a door exists to take it.
|
|
33097
|
+
...outbox ? [[me, AS("outbox"), namedNode2(outbox)]] : []
|
|
33095
33098
|
];
|
|
33096
33099
|
const missing = wanted.filter(([s, p, o]) => !g.holds(s, p, o, doc));
|
|
33097
|
-
const stale =
|
|
33100
|
+
const stale = [
|
|
33101
|
+
...g.statementsMatching(actor, FOAF("accountName"), null, doc).filter((st2) => st2.object.value !== accountName),
|
|
33102
|
+
...outbox ? g.statementsMatching(me, AS("outbox"), null, doc).filter((st2) => st2.object.value !== outbox) : []
|
|
33103
|
+
];
|
|
33098
33104
|
if (!missing.length && !stale.length) return false;
|
|
33099
33105
|
const deletes = stale.map((st2) => [st2.subject, st2.predicate, st2.object]);
|
|
33100
33106
|
if (await this.patchDocument(docUrl, missing, deletes)) return true;
|
|
@@ -33202,6 +33208,7 @@ var BrowserRemotePod = class extends PodTransport {
|
|
|
33202
33208
|
// lib/pod/state.mjs
|
|
33203
33209
|
var readWrappedKeys = (pod, urls) => pod.getJson(urls.state + "keys.json");
|
|
33204
33210
|
var readConfig = (pod, urls) => pod.getJson(urls.state + "config.json");
|
|
33211
|
+
var writeWrappedKeys = (pod, urls, envelope) => pod.putJson(urls.state + "keys.json", envelope, "application/json");
|
|
33205
33212
|
var writeConfig = (pod, urls, config) => pod.putJson(urls.state + "config.json", config, "application/json");
|
|
33206
33213
|
async function provisionKey(pod, { stateUrl, keysUrl, envelope }) {
|
|
33207
33214
|
await pod.setAcl(stateUrl, []);
|
|
@@ -33737,8 +33744,7 @@ async function bootWorker({ reset = false } = {}) {
|
|
|
33737
33744
|
worker.postMessage({ type: "boot", frontOrigin: location.origin });
|
|
33738
33745
|
await booted;
|
|
33739
33746
|
}
|
|
33740
|
-
|
|
33741
|
-
if (!password) throw new Error("Enter your account password.");
|
|
33747
|
+
async function readAccountState() {
|
|
33742
33748
|
const session = await getSession();
|
|
33743
33749
|
if (!session) throw new Error("Sign in first.");
|
|
33744
33750
|
const podFromWebId = podBaseOfWebId(session.webId);
|
|
@@ -33750,13 +33756,28 @@ window.fedipodUnlock = async (password) => {
|
|
|
33750
33756
|
readConfig(remote, urls),
|
|
33751
33757
|
readWrappedKeys(remote, urls)
|
|
33752
33758
|
]);
|
|
33753
|
-
if (!cfg
|
|
33759
|
+
if (!cfg) throw new Error(`could not read this account's config under ${state}`);
|
|
33760
|
+
const actorUrl = `${cfg.remotePod}${cfg.root || AP_ROOT}ap/actor`;
|
|
33761
|
+
return { remote, urls, cfg, doc, actorUrl };
|
|
33762
|
+
}
|
|
33763
|
+
window.fedipodUnlock = async (password) => {
|
|
33764
|
+
if (!password) throw new Error("Enter your password.");
|
|
33765
|
+
const { doc, actorUrl } = await readAccountState();
|
|
33766
|
+
if (!doc) throw new Error("could not read this account's key on the pod");
|
|
33754
33767
|
if (!isKeyEnvelope(doc)) throw new Error("this account's key is not locked \u2014 nothing to unlock");
|
|
33755
33768
|
const rec = await unwrapKeys(doc, password);
|
|
33756
|
-
const actorUrl = `${cfg.remotePod}${cfg.root || AP_ROOT}ap/actor`;
|
|
33757
33769
|
await cacheOpenedKeys(actorUrl, rec);
|
|
33758
33770
|
await bootWorker();
|
|
33759
33771
|
};
|
|
33772
|
+
window.fedipodNewKey = async (password) => {
|
|
33773
|
+
if (!password) throw new Error("Enter the password you use for your pod now.");
|
|
33774
|
+
const { remote, urls, cfg, actorUrl } = await readAccountState();
|
|
33775
|
+
const keys = await generateKeys();
|
|
33776
|
+
keys.mintedFor = cfg.gateway?.frontActor || actorUrl;
|
|
33777
|
+
await writeWrappedKeys(remote, urls, await wrapKeys(keys, password));
|
|
33778
|
+
await cacheOpenedKeys(actorUrl, keys);
|
|
33779
|
+
await bootWorker();
|
|
33780
|
+
};
|
|
33760
33781
|
window.fedipodSignup = async ({ onStep, ...answers }) => {
|
|
33761
33782
|
await signUp(answers, { onStep, frontOrigin: location.origin });
|
|
33762
33783
|
const { authorizationUrl } = await beginLogin({ issuer: answers.issuer, redirectUri: REDIRECT });
|
|
@@ -33861,6 +33882,25 @@ if (typeof document !== "undefined") (async () => {
|
|
|
33861
33882
|
$("unlock-password")?.addEventListener("keydown", (e) => {
|
|
33862
33883
|
if (e.key === "Enter") doUnlock();
|
|
33863
33884
|
});
|
|
33885
|
+
$("unlock-newkey")?.addEventListener("click", () => {
|
|
33886
|
+
$("unlock-newkey-confirm").hidden = false;
|
|
33887
|
+
$("unlock-password").focus();
|
|
33888
|
+
});
|
|
33889
|
+
const doNewKey = async () => {
|
|
33890
|
+
$("unlock-error").textContent = "";
|
|
33891
|
+
const btn = $("unlock-newkey-go");
|
|
33892
|
+
btn.disabled = true;
|
|
33893
|
+
try {
|
|
33894
|
+
await window.fedipodNewKey($("unlock-password").value);
|
|
33895
|
+
$("unlock-password").value = "";
|
|
33896
|
+
location.href = "/admin/client/";
|
|
33897
|
+
} catch (err) {
|
|
33898
|
+
$("unlock-error").textContent = err.message || String(err);
|
|
33899
|
+
btn.disabled = false;
|
|
33900
|
+
$("unlock-password").select();
|
|
33901
|
+
}
|
|
33902
|
+
};
|
|
33903
|
+
$("unlock-newkey-go")?.addEventListener("click", doNewKey);
|
|
33864
33904
|
if (params.has("signout") || params.has("add")) {
|
|
33865
33905
|
if (params.has("signout")) {
|
|
33866
33906
|
try {
|