This repository has been archived by the owner on Nov 27, 2023. It is now read-only.
/
reasonFirebase.re
187 lines (180 loc) · 6.25 KB
/
reasonFirebase.re
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
open BsWebapi.Webapi.Dom;
module Error = {
type t('e) = Js.t('e);
};
module Database = {
type t;
module rec Reference: {
type t;
[@bs.get] external key : t => Js.nullable(string) = "";
[@bs.get] external parent : t => Js.nullable(t) = "";
[@bs.get] external root : t => t = "";
[@bs.send] external child : (t, ~path: string) => t = "";
[@bs.send]
external once :
(t, ~eventType: string, ~successCallback: DataSnapshot.t => unit=?, unit) =>
Js.Promise.t(DataSnapshot.t) =
"";
type cb = DataSnapshot.t => unit;
[@bs.send]
external on :
(
t,
~eventType: string,
~callback: DataSnapshot.t => unit,
~cancelCallback: Error.t('e) => unit=?,
unit
) =>
cb =
"";
[@bs.send]
external off : (t, ~eventType: string, ~callback: DataSnapshot.t => unit=?, unit) => unit =
"";
[@bs.send]
external set :
(t, ~value: 'a, ~onComplete: Js.nullable(Error.t('e)) => unit=?, unit) => Js.Promise.t(unit) =
"";
[@bs.send]
external update :
(t, ~value: 'a, ~onComplete: Js.nullable(Error.t('e)) => unit=?, unit) => Js.Promise.t(unit) =
"";
[@bs.send]
external push : (t, ~value: 'a=?, ~onComplete: Js.nullable(Error.t('e)) => unit=?, unit) => t =
"";
} = Reference
and DataSnapshot: {
type t;
[@bs.get] external key : t => Js.null(string) = "";
[@bs.get] external ref : t => Reference.t = "";
[@bs.send] external child : (t, ~path: string) => t = "";
[@bs.send] external exists : t => bool = "";
[@bs.send] external exportVal : t => Js.Json.t = "exportVal";
[@bs.send] external foreach : (t, t => bool) => bool = "forEach";
/*external getPriority*/
[@bs.send] external hasChild : (t, ~path: string) => bool = "hasChild";
[@bs.send] external hasChildren : t => bool = "hasChildren";
[@bs.send] external numChildren : t => int = "numChildren";
[@bs.send] external toJson : t => Js.Json.t = "toJSON";
[@bs.send] external val_ : t => Js.Json.t = "val";
} = DataSnapshot;
module OnDisconnect = {
type t;
[@bs.send]
external cancel : (t, ~onComplete: Js.nullable(Error.t('e)) => unit=?) => Js.Promise.t(unit) =
"";
[@bs.send]
external remove : (t, ~onComplete: Js.nullable(Error.t('e)) => unit=?) => Js.Promise.t(unit) =
"";
[@bs.send]
external set :
(t, Js.Json.t, ~onComplete: Js.nullable(Error.t('e)) => unit=?) => Js.Promise.t(unit) =
"";
/*external setWithPriority*/
[@bs.send]
external update :
(t, Js.Json.t, ~onComplete: Js.nullable(Error.t('e)) => unit=?) => Js.Promise.t(unit) =
"";
};
module ThenableReference = {
type t;
};
module Query = {
type t;
};
/*external app : t => App.t = "" [@@bs.get];*/
[@bs.send] external goOffline : t => unit = "goOffline";
[@bs.send] external goOnline : t => unit = "goOnline";
[@bs.send] external ref : (t, ~path: string=?, unit) => Reference.t = "";
[@bs.scope ("database", "ServerValue")] [@bs.val] [@bs.module "firebase"]
external serverTimestamp : Js.null(string) =
"TIMESTAMP";
[@bs.send] external refFromUrl : (t, ~url: string) => Reference.t = "refFromURL";
};
module Storage = {
type t;
module UploadTask = {
type t;
};
module Reference = {
type t;
[@bs.get] external bucket : t => string = "";
[@bs.get] external fullPath : t => string = "";
[@bs.get] external name : t => string = "";
[@bs.get] external parent : t => option(t) = "";
[@bs.get] external root : t => t = "";
/*external storage : t => Storage.t = "" [@@bs.get];*/
[@bs.send] external path : (t, ~path: string) => t = "";
[@bs.send]
external put :
(t, ~data: Window.File.t, ~metadata: Js.t('a)=?, unit) => Js.Promise.t(UploadTask.t) =
"";
[@bs.send] external delete : t => Js.Promise.t(unit) = "";
[@bs.send] external getDownloadURL : t => Js.Promise.t(string) = "";
};
[@bs.send] external ref : (t, ~path: string=?, unit) => Reference.t = "";
};
module Auth = {
type t;
module User = {
type t;
type profile = {. "displayName": Js.nullable(string), "photoURL": Js.nullable(string)};
[@bs.get] external displayName : t => string = "displayName";
[@bs.get] external email : t => Js.nullable(string) = "email";
[@bs.get] external emailVerified : t => bool = "emailVerified";
[@bs.get] external isAnonymous : t => bool = "isAnonymous";
[@bs.get] external phoneNumber : t => Js.nullable(string) = "phoneNumber";
[@bs.get] external photoUrl : t => Js.nullable(string) = "photoURL";
[@bs.get] external uid : t => string = "uid";
[@bs.send] external updateProfile : (t, ~profile: profile) => Js.Promise.t(unit) =
"updateProfile";
[@bs.send] external getIdToken : t => Js.Promise.t(Js.nullable(string)) = "";
};
module Error = {
type t;
};
module AuthCredential = {
type t;
};
[@bs.get] external currentUser : t => Js.null(User.t) = "currentUser";
[@bs.send]
external createUserWithEmailAndPassword : (
t,
~email:string,
~password:string
) => Js.Promise.t(User.t) = "createUserWithEmailAndPassword";
[@bs.send]
external onAuthStateChanged :
(
t,
~nextOrObserver: Js.Null.t(User.t) => unit,
~error: Error.t => unit=?,
~completed: unit => unit=?
) =>
unit =
"onAuthStateChanged";
[@bs.send] external signInAnonymously : (t, unit) => Js.Promise.t(User.t) = "signInAnonymously";
[@bs.send]
external signInWithCredential : (t, ~credential: AuthCredential.t) => Js.Promise.t(User.t) =
"signInWithCredential";
[@bs.send] external signInWithCustomToken : (t, ~token: string) => Js.Promise.t(User.t) =
"signInWithCustomToken";
[@bs.send] external signOut : t => Js.Promise.t(unit) = "signOut";
};
module App = {
type t;
[@bs.send] external auth : t => Auth.t = "";
[@bs.send] external database : t => Database.t = "";
/*external delete*/
/*external messaging*/
[@bs.send] external storage : t => Storage.t = "";
[@bs.get] external options : t => Js.t('a) = "";
};
type options = {
.
"apiKey": string,
"authDomain": string,
"databaseURL": string,
"storageBucket": string,
"messagingSenderId": string
};
[@bs.module "firebase"] external initializeApp : (~options: options) => App.t = "initializeApp";