Anything a channel of your own needs.
OptionaldeviceWhere to push. Registering and storing them is the application's business.
OptionalemailWhere to write.
OptionalidWhatever the application calls this person. Used to address the in-app channel.
OptionallocaleThe language this person reads, which is not the language of the request.
OptionalphoneWhere to text.
Who a notification is for.
Deliberately thin, and open. This module has no idea what a person is in your application, and it must not: the only thing a notification library cannot ship is your idea of a person. What it needs is where to reach them, and in which language.