import { createNote, fetchNote } from "../../models/note.js";
import { getApId } from "../../type.js";
import { getApLock } from "../../../../misc/app-lock.js";
import { extractDbHost } from "../../../../misc/convert-host.js";
import { StatusError } from "../../../../misc/fetch.js";
/**
 * Handle post creation activity
 */ export default async function(resolver, actor, note, silent = false, activity) {
    const uri = getApId(note);
    if (typeof note === "object") {
        if (actor.uri !== note.attributedTo) {
            return "skip: actor.uri !== note.attributedTo";
        }
        if (typeof note.id === "string") {
            if (extractDbHost(actor.uri) !== extractDbHost(note.id)) {
                return "skip: host in actor.uri !== note.id";
            }
        } else {
            return "skip: note.id is not a string";
        }
    }
    const unlock = await getApLock(uri);
    try {
        const exist = await fetchNote(note);
        if (exist) return "skip: note exists";
        await createNote(note, resolver, silent);
        return "ok";
    } catch (e) {
        if (e instanceof StatusError && !e.isRetryable) {
            return `skip ${e.statusCode}`;
        } else {
            throw e;
        }
    } finally{
        unlock();
    }
}
