Event Factory
The EventFactory
is a class is used to provide a Signer and relay hints to the Blueprints
Creating a factory
When creating a new event factory you can pass a context object in that is used by all blueprints
ts
const signer = new SimpleSigner();
const factory = new EventFactory({
// optionally pass a signer in (required for encryption)
signer: signer,
// optionally set a NIP-89 client
client: {
name: "My Awesome Client",
address: {
pubkey: "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d",
identifier: "awesome-client",
},
},
});
Relay hints
Relay hints can ge added to all event tags that support them by passing in getRelayHint
and getPubkeyRelayHint
methods into the context
ts
const factory = new EventFactory({
getRelayHint: async (event) => {
// an async process to find the best relay hint for this event
try {
return await calculateRelayHint(event)
}
catch(){
return undefined
}
},
getPubkeyRelayHint: async (pubkey) => {
// an async process to find a relay hint for this pubkey
return loadPubkeyMailboxes(pubkey).then((mailboxes) => getOutboxes(mailboxes)[0]);
},
});
Using a blueprint
The factory.create
method can be used to create an event from a Blueprints
ts
await factory.create(NoteBlueprint, "hello world");
Quick helper methods
factory.note
is a shortcut forNoteBlueprint
factory.noteReply
is a shortcut forNoteReplyBlueprint
factory.comment
is a shortcut forCommentBlueprint
factory.reaction
is a shortcut forReactionBlueprint
factory.share
is a shortcut forShareBlueprint
factory.delete
is a shortcut forDeleteBlueprint
Manually creating an event
The factory.process
method can be used to create an event from an EventTemplate
and Operations
ts
import { includeSingletonTag, setContent, includeAltTag } from "applesauce-factory/operations";
await factory.process(
{ kind: 1063 },
setContent("the bitcoin whitepaper"),
includeAltTag("File metadata"),
includeSingletonTag(["x", "b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553"]),
includeSingletonTag(["size", "184292"]),
includeSingletonTag(["m", "application/pdf"]),
includeSingletonTag([
"url",
"https://cdn.example.com/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf",
]),
);