About 5. you can use the public parameter inside sources of rescript.json (see docs):
...
"sources": [
{
"dir": "src",
"public": [ "MyPublicModule"]
},
],
...
About 7. adding type annotations is kind of a smell in rescript, a more idiomatic way to write the function would just be:
module M = {
type t = Foo
}
let f = () => Promise.resolve(M.Foo)