better-auth 0.0.9-beta.21 → 0.0.9-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/plugins.js +8 -4
- package/dist/client/plugins.js.map +1 -1
- package/dist/client.d.ts +7 -3
- package/dist/client.js +7 -2
- package/dist/client.js.map +1 -1
- package/dist/react.js +7 -2
- package/dist/react.js.map +1 -1
- package/dist/solid.js +7 -2
- package/dist/solid.js.map +1 -1
- package/dist/svelte.js +7 -2
- package/dist/svelte.js.map +1 -1
- package/dist/vue.js +7 -2
- package/dist/vue.js.map +1 -1
- package/package.json +1 -1
package/dist/client/plugins.js
CHANGED
|
@@ -113,7 +113,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
113
113
|
isPending: false
|
|
114
114
|
});
|
|
115
115
|
const fn = () => {
|
|
116
|
-
const opts = typeof options === "function" ? options(
|
|
116
|
+
const opts = typeof options === "function" ? options({
|
|
117
|
+
data: value.get().data,
|
|
118
|
+
error: value.get().error,
|
|
119
|
+
isPending: value.get().isPending
|
|
120
|
+
}) : options;
|
|
117
121
|
return $fetch(path, {
|
|
118
122
|
...opts,
|
|
119
123
|
onSuccess: async (context) => {
|
|
@@ -148,7 +152,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
148
152
|
let firstRun = true;
|
|
149
153
|
for (const initAtom of initializedAtom) {
|
|
150
154
|
initAtom.subscribe((value2) => {
|
|
151
|
-
if (
|
|
155
|
+
if (!firstRun) {
|
|
152
156
|
fn();
|
|
153
157
|
}
|
|
154
158
|
});
|
|
@@ -159,10 +163,10 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
159
163
|
|
|
160
164
|
// src/plugins/organization/client.ts
|
|
161
165
|
var organizationClient = (options) => {
|
|
162
|
-
const activeOrgId = atom(
|
|
166
|
+
const activeOrgId = atom(void 0);
|
|
163
167
|
const _listOrg = atom(false);
|
|
164
168
|
const _activeOrgSignal = atom(false);
|
|
165
|
-
const _activeISignal = atom();
|
|
169
|
+
const _activeISignal = atom(null);
|
|
166
170
|
return {
|
|
167
171
|
id: "organization",
|
|
168
172
|
$InferServerPlugin: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/organization/access/src/access.ts","../../src/plugins/organization/access/statement.ts","../../src/client/query.ts","../../src/plugins/organization/client.ts","../../src/plugins/username/client.ts","../../src/plugins/passkey/client.ts","../../src/plugins/two-factor/client.ts"],"names":["value","atom"],"mappings":";;;;;;;AAEO,IAAM,YAAA,GAAN,cAA2B,KAAM,CAAA;AAAA,EACvB,IAAA,CAAA;AAAA,EAChB,WAAA,CAAY,SAAiB,IAAc,EAAA;AAC1C,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AAAA,GACb;AACD,CAAA,CAAA;AAIO,IAAM,gBAAN,MAAiE;AAAA,EAEvE,YAA6B,CAAgB,EAAA;AAAhB,IAAA,IAAA,CAAA,CAAA,GAAA,CAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,UAAa,GAAA,CAAA,CAAA;AAAA,GACnB;AAAA,EAHiB,UAAA,CAAA;AAAA,EAIV,QACN,UACC,EAAA;AACD,IAAO,OAAA,IAAI,KAA6B,UAAU,CAAA,CAAA;AAAA,GACnD;AACD,CAAA,CAAA;AAMO,IAAM,IAAA,GAAN,MAAM,KAAqC,CAAA;AAAA,EACjC,UAAA,CAAA;AAAA,EAEhB,YAAY,UAAyB,EAAA;AACpC,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAAA,GACnB;AAAA,EAEO,SAAA,CACN,SACA,SACqB,EAAA;AACrB,IAAA,KAAA,MAAW,CAAC,iBAAA,EAAmB,gBAAgB,CAAA,IAAK,MAAO,CAAA,OAAA;AAAA,MAC1D,OAAA;AAAA,KACE,EAAA;AACF,MAAM,MAAA,cAAA,GAAiB,IAAK,CAAA,UAAA,CAAW,iBAAiB,CAAA,CAAA;AACxD,MAAA,IAAI,CAAC,cAAgB,EAAA;AACpB,QAAO,OAAA;AAAA,UACN,OAAS,EAAA,KAAA;AAAA,UACT,KAAA,EAAO,2CAA2C,iBAAiB,CAAA,CAAA;AAAA,SACpE,CAAA;AAAA,OACD;AACA,MAAM,MAAA,OAAA,GACL,SAAc,KAAA,IAAA,GACV,gBAA8B,CAAA,IAAA;AAAA,QAAK,CAAC,eAAA,KACrC,cAAe,CAAA,QAAA,CAAS,eAAe,CAAA;AAAA,UAEtC,gBAA8B,CAAA,KAAA;AAAA,QAAM,CAAC,eAAA,KACtC,cAAe,CAAA,QAAA,CAAS,eAAe,CAAA;AAAA,OACxC,CAAA;AACH,MAAA,IAAI,OAAS,EAAA;AACZ,QAAA,OAAO,EAAE,OAAQ,EAAA,CAAA;AAAA,OAClB;AACA,MAAO,OAAA;AAAA,QACN,OAAS,EAAA,KAAA;AAAA,QACT,KAAA,EAAO,oCAAoC,iBAAiB,CAAA,CAAA,CAAA;AAAA,OAC7D,CAAA;AAAA,KACD;AACA,IAAO,OAAA;AAAA,MACN,OAAS,EAAA,KAAA;AAAA,MACT,KAAO,EAAA,gBAAA;AAAA,KACR,CAAA;AAAA,GACD;AAAA,EAEA,OAAO,WAA2C,CAAW,EAAA;AAC5D,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAE/B,IAAI,IAAA,OAAO,eAAe,QAAU,EAAA;AACnC,MAAM,MAAA,IAAI,YAAa,CAAA,6BAAA,EAA+B,GAAG,CAAA,CAAA;AAAA,KAC1D;AACA,IAAA,KAAA,MAAW,CAAC,QAAU,EAAA,OAAO,KAAK,MAAO,CAAA,OAAA,CAAQ,UAAU,CAAG,EAAA;AAC7D,MAAI,IAAA,OAAO,aAAa,QAAU,EAAA;AACjC,QAAM,MAAA,IAAI,YAAa,CAAA,6BAAA,EAA+B,QAAQ,CAAA,CAAA;AAAA,OAC/D;AACA,MAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,OAAO,CAAG,EAAA;AAC5B,QAAM,MAAA,IAAI,YAAa,CAAA,yBAAA,EAA2B,QAAQ,CAAA,CAAA;AAAA,OAC3D;AACA,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACxC,QAAA,IAAI,OAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,QAAU,EAAA;AACnC,UAAA,MAAM,IAAI,YAAa,CAAA,wBAAA,EAA0B,GAAG,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,SACrE;AAAA,OACD;AAAA,KACD;AACA,IAAO,OAAA,IAAI,MAAkB,UAAU,CAAA,CAAA;AAAA,GACxC;AAAA,EAEO,QAAmB,GAAA;AACzB,IAAO,OAAA,IAAA,CAAK,SAAU,CAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,GACtC;AACD,CAAA,CAAA;;;AC7FO,IAAM,mBAAA,GAAsB,CAClC,UACI,KAAA;AACJ,EAAO,OAAA,IAAI,cAAiB,UAAU,CAAA,CAAA;AACvC,CAAA,CAAA;AAEO,IAAM,iBAAoB,GAAA;AAAA,EAChC,YAAA,EAAc,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACjC,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,EACrC,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAChC,CAAA,CAAA;AAEO,IAAM,SAAA,GAAY,oBAAoB,iBAAiB,CAAA,CAAA;AAEvC,UAAU,OAAQ,CAAA;AAAA,EACxC,YAAA,EAAc,CAAC,QAAQ,CAAA;AAAA,EACvB,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EAC/B,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AACtC,CAAC,EAAA;AAEsB,UAAU,OAAQ,CAAA;AAAA,EACxC,YAAA,EAAc,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACjC,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,EACrC,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAChC,CAAC,EAAA;AAEuB,UAAU,OAAQ,CAAA;AAAA,EACzC,cAAc,EAAC;AAAA,EACf,QAAQ,EAAC;AAAA,EACT,YAAY,EAAC;AACd,CAAC,EAAA;AC1BM,IAAM,YAAe,GAAA,CAC3B,eAGA,EAAA,IAAA,EACA,QACA,OACI,KAAA;AACJ,EAAA,MAAM,QAAQ,IAIX,CAAA;AAAA,IACF,IAAM,EAAA,IAAA;AAAA,IACN,KAAO,EAAA,IAAA;AAAA,IACP,SAAW,EAAA,KAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAA,MAAM,KAAK,MAAM;AAChB,IAAA,MAAM,IAAO,GAAA,OAAO,OAAY,KAAA,UAAA,GAAa,SAAY,GAAA,OAAA,CAAA;AACzD,IAAA,OAAO,OAAU,IAAM,EAAA;AAAA,MACtB,GAAG,IAAA;AAAA,MACH,SAAA,EAAW,OAAO,OAAY,KAAA;AAC7B,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,KAAO,EAAA,IAAA;AAAA,UACP,SAAW,EAAA,KAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,YAAY,OAAO,CAAA,CAAA;AAAA,OAChC;AAAA,MACA,MAAM,QAAQ,OAAS,EAAA;AACtB,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,IAAM,EAAA,IAAA;AAAA,UACN,SAAW,EAAA,KAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,UAAU,OAAO,CAAA,CAAA;AAAA,OAC9B;AAAA,MACA,MAAM,UAAU,OAAS,EAAA;AACxB,QAAM,MAAA,YAAA,GAAe,MAAM,GAAI,EAAA,CAAA;AAC/B,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,SAAW,EAAA,IAAA;AAAA,UACX,MAAM,YAAa,CAAA,IAAA;AAAA,UACnB,OAAO,YAAa,CAAA,KAAA;AAAA,SACpB,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,YAAY,OAAO,CAAA,CAAA;AAAA,OAChC;AAAA,KACA,CAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAG,EAAA,EAAA,CAAA;AACH,EAAA,eAAA,GAAkB,MAAM,OAAQ,CAAA,eAAe,CAC5C,GAAA,eAAA,GACA,CAAC,eAAe,CAAA,CAAA;AACnB,EAAA,IAAI,QAAW,GAAA,IAAA,CAAA;AACf,EAAA,KAAA,MAAW,YAAY,eAAiB,EAAA;AACvC,IAAS,QAAA,CAAA,SAAA,CAAU,CAACA,MAAU,KAAA;AAC7B,MAAIA,IAAAA,MAAAA,KAAU,KAAa,CAAA,IAAA,CAAC,QAAU,EAAA;AACrC,QAAG,EAAA,EAAA,CAAA;AAAA,OACJ;AAAA,KACA,CAAA,CAAA;AAAA,GACF;AACA,EAAW,QAAA,GAAA,KAAA,CAAA;AACX,EAAO,OAAA,KAAA,CAAA;AACR,CAAA,CAAA;;;AClDa,IAAA,kBAAA,GAAqB,CACjC,OACI,KAAA;AACJ,EAAM,MAAA,WAAA,GAAcC,KAAoB,IAAI,CAAA,CAAA;AAC5C,EAAM,MAAA,QAAA,GAAWA,KAAc,KAAK,CAAA,CAAA;AACpC,EAAM,MAAA,gBAAA,GAAmBA,KAAc,KAAK,CAAA,CAAA;AAC5C,EAAA,MAAM,iBAAiBA,IAAgC,EAAA,CAAA;AAQvD,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,cAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,UAAA,EAAY,CAAC,MAAY,MAAA;AAAA,MACxB,YAAc,EAAA;AAAA,QACb,MAAQ,EAAA;AAAA,UACP,oBAAoB,EAAC;AAAA,UAerB,cAAc,EAAC;AAAA,UACf,YAAY,EAAC;AAAA,UACb,QAAQ,EAAC;AAAA,SACV;AAAA,QACA,UAAU,KAAsB,EAAA;AAC/B,UAAA,WAAA,CAAY,IAAI,KAAK,CAAA,CAAA;AAAA,SACtB;AAAA,QACA,eAAA,EAAiB,CAAC,EAAsB,KAAA;AACvC,UAAA,cAAA,CAAe,IAAI,EAAE,CAAA,CAAA;AAAA,SACtB;AAAA,QACA,aAAA,EAAe,OAAO,IAMhB,KAAA;AACL,UAAO,OAAA,MAAM,OAAgB,8BAAgC,EAAA;AAAA,YAC5D,MAAQ,EAAA,MAAA;AAAA,YACR,IAAM,EAAA;AAAA,cACL,YAAY,IAAK,CAAA,UAAA;AAAA,aAClB;AAAA,YACA,GAAG,IAAK,CAAA,OAAA;AAAA,WACR,CAAA,CAAA;AAAA,SACF;AAAA,OACD;AAAA,KACD,CAAA;AAAA,IACA,QAAA,EAAU,CAAC,MAAW,KAAA;AACrB,MAAA,MAAM,UAAa,GAAA,YAAA,CASjB,cAAgB,EAAA,qCAAA,EAAuC,QAAQ,OAAO;AAAA,QACvE,MAAQ,EAAA,KAAA;AAAA,QACR,KAAO,EAAA;AAAA,UACN,EAAA,EAAI,eAAe,GAAI,EAAA;AAAA,SACxB;AAAA,OACC,CAAA,CAAA,CAAA;AAEF,MAAA,MAAM,iBAAoB,GAAA,YAAA;AAAA,QACzB,QAAA;AAAA,QACA,oBAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,UACC,MAAQ,EAAA,KAAA;AAAA,SACT;AAAA,OACD,CAAA;AAEA,MAAA,MAAM,kBAAqB,GAAA,YAAA;AAAA,QAe1B,CAAC,aAAa,gBAAgB,CAAA;AAAA,QAC9B,wBAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAO;AAAA,UACN,MAAQ,EAAA,MAAA;AAAA,UACR,WAAa,EAAA,SAAA;AAAA,UACb,IAAM,EAAA;AAAA,YACL,KAAA,EAAO,YAAY,GAAI,EAAA;AAAA,WACxB;AAAA,SACD,CAAA;AAAA,OACD,CAAA;AAEA,MAAO,OAAA;AAAA,QACN,QAAA;AAAA,QACA,gBAAA;AAAA,QACA,kBAAA;AAAA,QACA,iBAAA;AAAA,QACA,UAAA;AAAA,OACD,CAAA;AAAA,KACD;AAAA,IACA,aAAe,EAAA;AAAA,MACd;AAAA,QACC,QAAQ,IAAM,EAAA;AACb,UACC,OAAA,IAAA,KAAS,0BAA0B,IAAS,KAAA,sBAAA,CAAA;AAAA,SAE9C;AAAA,QACA,MAAQ,EAAA,UAAA;AAAA,OACT;AAAA,MACA;AAAA,QACC,QAAQ,IAAM,EAAA;AACb,UAAO,OAAA,IAAA,CAAK,WAAW,eAAe,CAAA,CAAA;AAAA,SACvC;AAAA,QACA,MAAQ,EAAA,kBAAA;AAAA,OACT;AAAA,KACD;AAAA,GACD,CAAA;AACD,EAAA;;;AC7JO,IAAM,iBAAiB,MAAM;AACnC,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,UAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,GACtB,CAAA;AACD,EAAA;ACOa,IAAA,iBAAA,GAAoB,CAAC,MAAwB,KAAA;AACzD,EAAM,MAAA,aAAA,GAAgB,OAAO,IAIvB,KAAA;AACL,IAAA,MAAM,WAAW,MAAM,MAAA;AAAA,MACtB,wCAAA;AAAA,MACA;AAAA,QACC,MAAQ,EAAA,MAAA;AAAA,QACR,IAAM,EAAA;AAAA,UACL,OAAO,IAAM,EAAA,KAAA;AAAA,SACd;AAAA,OACD;AAAA,KACD,CAAA;AACA,IAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,MAAO,OAAA,QAAA,CAAA;AAAA,KACR;AACA,IAAI,IAAA;AACH,MAAA,MAAM,MAAM,MAAM,mBAAA;AAAA,QACjB,QAAS,CAAA,IAAA;AAAA,QACT,MAAM,QAAY,IAAA,KAAA;AAAA,OACnB,CAAA;AACA,MAAM,MAAA,QAAA,GAAW,MAAM,MAAA,CAGpB,gCAAkC,EAAA;AAAA,QACpC,IAAM,EAAA;AAAA,UACL,QAAU,EAAA,GAAA;AAAA,UACV,IAAM,EAAA,cAAA;AAAA,SACP;AAAA,OACA,CAAA,CAAA;AACD,MAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,QAAO,OAAA,QAAA,CAAA;AAAA,OACR;AAAA,aACQ,CAAG,EAAA;AACX,MAAA,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA;AAEA,EAAA,MAAM,kBAAkB,YAAY;AACnC,IAAA,MAAM,UAAU,MAAM,MAAA;AAAA,MACrB,oCAAA;AAAA,MACA;AAAA,QACC,MAAQ,EAAA,KAAA;AAAA,OACT;AAAA,KACD,CAAA;AACA,IAAI,IAAA,CAAC,QAAQ,IAAM,EAAA;AAClB,MAAO,OAAA,OAAA,CAAA;AAAA,KACR;AACA,IAAI,IAAA;AACH,MAAA,MAAM,GAAM,GAAA,MAAM,iBAAkB,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAChD,MAAM,MAAA,QAAA,GAAW,MAAM,MAAA,CAEpB,8BAAgC,EAAA;AAAA,QAClC,IAAM,EAAA;AAAA,UACL,QAAU,EAAA,GAAA;AAAA,UACV,IAAM,EAAA,UAAA;AAAA,SACP;AAAA,OACA,CAAA,CAAA;AACD,MAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,QAAO,OAAA,QAAA,CAAA;AAAA,OACR;AAAA,aACQ,CAAG,EAAA;AACX,MAAA,IAAI,aAAa,aAAe,EAAA;AAC/B,QAAI,IAAA,CAAA,CAAE,SAAS,2CAA6C,EAAA;AAC3D,UAAO,OAAA;AAAA,YACN,IAAM,EAAA,IAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACN,OAAS,EAAA,uBAAA;AAAA,cACT,MAAQ,EAAA,GAAA;AAAA,cACR,UAAY,EAAA,aAAA;AAAA,aACb;AAAA,WACD,CAAA;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAAA,GACD,CAAA;AACA,EAAO,OAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACP,OAAS,EAAA,aAAA;AAAA,KACV;AAAA,IACA,OAAS,EAAA;AAAA,MACR,QAAU,EAAA,eAAA;AAAA,KACX;AAAA,GACD,CAAA;AACD,EAAA;AAEO,IAAM,gBAAgB,MAAM;AAClC,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,SAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,UAAY,EAAA,CAAC,MAAW,KAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,IAChD,WAAa,EAAA;AAAA,MACZ,mBAAqB,EAAA,MAAA;AAAA,MACrB,uBAAyB,EAAA,MAAA;AAAA,KAC1B;AAAA,GACD,CAAA;AACD,EAAA;;;AC9Ga,IAAA,eAAA,GAAkB,CAC9B,OAQI,GAAA;AAAA,EACH,QAAU,EAAA,IAAA;AAAA,EACV,aAAe,EAAA,GAAA;AAChB,CACI,KAAA;AACJ,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,YAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,aAAe,EAAA;AAAA,MACd;AAAA,QACC,SAAS,CAAC,IAAA,KACT,SAAS,oBACT,IAAA,IAAA,KAAS,0BACT,IAAS,KAAA,qBAAA;AAAA,QACV,MAAQ,EAAA,gBAAA;AAAA,OACT;AAAA,KACD;AAAA,IACA,WAAa,EAAA;AAAA,MACZ,aAAe,EAAA,MAAA;AAAA,MACf,qBAAuB,EAAA,MAAA;AAAA,MACvB,oBAAsB,EAAA,MAAA;AAAA,MACtB,sBAAwB,EAAA,MAAA;AAAA,KACzB;AAAA,IACA,YAAc,EAAA;AAAA,MACb;AAAA,QACC,EAAI,EAAA,YAAA;AAAA,QACJ,IAAM,EAAA,YAAA;AAAA,QACN,KAAO,EAAA;AAAA,UACN,MAAM,UAAU,OAAS,EAAA;AACxB,YAAI,IAAA,OAAA,CAAQ,MAAM,iBAAmB,EAAA;AACpC,cAAI,IAAA,OAAA,CAAQ,QAAY,IAAA,OAAA,CAAQ,aAAe,EAAA;AAC9C,gBAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AAClC,kBAAO,MAAA,CAAA,QAAA,CAAS,OAAO,OAAQ,CAAA,aAAA,CAAA;AAAA,iBAChC;AAAA,eACD;AAAA,aACD;AAAA,WACD;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAAA,GACD,CAAA;AACD","file":"plugins.js","sourcesContent":["import type { StatementsPrimitive as Statements, Subset } from \"./types\";\n\nexport class ParsingError extends Error {\n\tpublic readonly path: string;\n\tconstructor(message: string, path: string) {\n\t\tsuper(message);\n\t\tthis.path = path;\n\t}\n}\n\ntype Connector = \"OR\" | \"AND\";\n\nexport class AccessControl<TStatements extends Statements = Statements> {\n\tprivate readonly statements: TStatements;\n\tconstructor(private readonly s: TStatements) {\n\t\tthis.statements = s;\n\t}\n\tpublic newRole<K extends keyof TStatements>(\n\t\tstatements: Subset<K, TStatements>,\n\t) {\n\t\treturn new Role<Subset<K, TStatements>>(statements);\n\t}\n}\n\nexport type AuthortizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never };\n\nexport class Role<TStatements extends Statements> {\n\tpublic readonly statements: TStatements;\n\n\tconstructor(statements: TStatements) {\n\t\tthis.statements = statements;\n\t}\n\n\tpublic authorize<K extends keyof TStatements>(\n\t\trequest: Subset<K, TStatements>,\n\t\tconnector?: Connector,\n\t): AuthortizeResponse {\n\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\trequest,\n\t\t)) {\n\t\t\tconst allowedActions = this.statements[requestedResource];\n\t\t\tif (!allowedActions) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst success =\n\t\t\t\tconnector === \"OR\"\n\t\t\t\t\t? (requestedActions as string[]).some((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t)\n\t\t\t\t\t: (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t);\n\t\t\tif (success) {\n\t\t\t\treturn { success };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: \"Not authorized\",\n\t\t};\n\t}\n\n\tstatic fromString<TStatements extends Statements>(s: string) {\n\t\tconst statements = JSON.parse(s) as TStatements;\n\n\t\tif (typeof statements !== \"object\") {\n\t\t\tthrow new ParsingError(\"statements is not an object\", \".\");\n\t\t}\n\t\tfor (const [resource, actions] of Object.entries(statements)) {\n\t\t\tif (typeof resource !== \"string\") {\n\t\t\t\tthrow new ParsingError(\"invalid resource identifier\", resource);\n\t\t\t}\n\t\t\tif (!Array.isArray(actions)) {\n\t\t\t\tthrow new ParsingError(\"actions is not an array\", resource);\n\t\t\t}\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tif (typeof actions[i] !== \"string\") {\n\t\t\t\t\tthrow new ParsingError(\"action is not a string\", `${resource}[${i}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new Role<TStatements>(statements);\n\t}\n\n\tpublic toString(): string {\n\t\treturn JSON.stringify(this.statements);\n\t}\n}\n","import { AccessControl } from \"./src/access\";\nimport type { StatementsPrimitive } from \"./src/types\";\n\nexport const createAccessControl = <S extends StatementsPrimitive>(\n\tstatements: S,\n) => {\n\treturn new AccessControl<S>(statements);\n};\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import { atom } from \"nanostores\";\nimport type {\n\tInvitation,\n\tMember,\n\tOrganization,\n} from \"../../plugins/organization/schema\";\nimport type { Prettify } from \"../../types/helper\";\nimport { defaultStatements, type AccessControl, type Role } from \"./access\";\nimport type { AuthClientPlugin } from \"../../client/types\";\nimport type { organization } from \"./organization\";\nimport type { BetterFetchOption } from \"@better-fetch/fetch\";\nimport { useAuthQuery } from \"../../client\";\n\ninterface OrganizationClientOptions {\n\tac: AccessControl;\n\troles?: {\n\t\t[key in \"admin\" | \"member\" | \"owner\"]?: Role<any>;\n\t};\n}\n\nexport const organizationClient = <O extends OrganizationClientOptions>(\n\toptions?: O,\n) => {\n\tconst activeOrgId = atom<string | null>(null);\n\tconst _listOrg = atom<boolean>(false);\n\tconst _activeOrgSignal = atom<boolean>(false);\n\tconst _activeISignal = atom<string | null | undefined>();\n\n\ttype DefaultStatements = typeof defaultStatements;\n\ttype Statements = O[\"ac\"] extends AccessControl<infer S>\n\t\t? S extends Record<string, Array<any>>\n\t\t\t? S & DefaultStatements\n\t\t\t: DefaultStatements\n\t\t: DefaultStatements;\n\treturn {\n\t\tid: \"organization\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof organization>,\n\t\tgetActions: ($fetch) => ({\n\t\t\torganization: {\n\t\t\t\t$Infer: {\n\t\t\t\t\tActiveOrganization: {} as Prettify<\n\t\t\t\t\t\tOrganization & {\n\t\t\t\t\t\t\tmembers: Prettify<\n\t\t\t\t\t\t\t\tMember & {\n\t\t\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>[];\n\t\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t\t}\n\t\t\t\t\t>,\n\t\t\t\t\tOrganization: {} as Organization,\n\t\t\t\t\tInvitation: {} as Invitation,\n\t\t\t\t\tMember: {} as Member,\n\t\t\t\t},\n\t\t\t\tsetActive(orgId: string | null) {\n\t\t\t\t\tactiveOrgId.set(orgId);\n\t\t\t\t},\n\t\t\t\tsetInvitationId: (id: string | null) => {\n\t\t\t\t\t_activeISignal.set(id);\n\t\t\t\t},\n\t\t\t\thasPermission: async (data: {\n\t\t\t\t\tpermission: Partial<{\n\t\t\t\t\t\t//@ts-expect-error fix this later\n\t\t\t\t\t\t[key in keyof Statements]: Statements[key][number][];\n\t\t\t\t\t}>;\n\t\t\t\t\toptions?: BetterFetchOption;\n\t\t\t\t}) => {\n\t\t\t\t\treturn await $fetch<boolean>(\"/organization/has-permission\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tpermission: data.permission,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...data.options,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\tgetAtoms: ($fetch) => {\n\t\t\tconst invitation = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tInvitation & {\n\t\t\t\t\t\torganizationName: string;\n\t\t\t\t\t\torganizationSlug: string;\n\t\t\t\t\t\tinviterEmail: string;\n\t\t\t\t\t\tinviterName: string;\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(_activeISignal, \"/organization/get-active-invitation\", $fetch, () => ({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: {\n\t\t\t\t\tid: _activeISignal.get(),\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tconst listOrganizations = useAuthQuery<Organization[]>(\n\t\t\t\t_listOrg,\n\t\t\t\t\"/organization/list\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst activeOrganization = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tOrganization & {\n\t\t\t\t\t\tmembers: (Member & {\n\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})[];\n\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(\n\t\t\t\t[activeOrgId, _activeOrgSignal],\n\t\t\t\t\"/organization/activate\",\n\t\t\t\t$fetch,\n\t\t\t\t() => ({\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\tbody: {\n\t\t\t\t\t\torgId: activeOrgId.get(),\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t_listOrg,\n\t\t\t\t_activeOrgSignal,\n\t\t\t\tactiveOrganization,\n\t\t\t\tlistOrganizations,\n\t\t\t\tinvitation,\n\t\t\t};\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpath === \"/organization/create\" || path === \"/organization/delete\"\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsignal: \"_listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization\");\n\t\t\t\t},\n\t\t\t\tsignal: \"_activeOrgSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n","import type { username } from \".\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const usernameClient = () => {\n\treturn {\n\t\tid: \"username\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof username>,\n\t} satisfies AuthClientPlugin;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport {\n\tWebAuthnError,\n\tstartAuthentication,\n\tstartRegistration,\n} from \"@simplewebauthn/browser\";\nimport type {\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n} from \"@simplewebauthn/types\";\nimport type { Session } from \"inspector\";\nimport type { User } from \"../../adapters/schema\";\nimport type { passkey as passkeyPl, Passkey } from \"../../plugins\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const getPasskeyActions = ($fetch: BetterFetch) => {\n\tconst signInPasskey = async (opts?: {\n\t\tautoFill?: boolean;\n\t\temail?: string;\n\t\tcallbackURL?: string;\n\t}) => {\n\t\tconst response = await $fetch<PublicKeyCredentialRequestOptionsJSON>(\n\t\t\t\"/passkey/generate-authenticate-options\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: {\n\t\t\t\t\temail: opts?.email,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tif (!response.data) {\n\t\t\treturn response;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startAuthentication(\n\t\t\t\tresponse.data,\n\t\t\t\topts?.autoFill || false,\n\t\t\t);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tsession: Session;\n\t\t\t\tuser: User;\n\t\t\t}>(\"/passkey/verify-authentication\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"authenticate\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t};\n\n\tconst registerPasskey = async () => {\n\t\tconst options = await $fetch<PublicKeyCredentialCreationOptionsJSON>(\n\t\t\t\"/passkey/generate-register-options\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t},\n\t\t);\n\t\tif (!options.data) {\n\t\t\treturn options;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startRegistration(options.data);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tpasskey: Passkey;\n\t\t\t}>(\"/passkey/verify-registration\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"register\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (e instanceof WebAuthnError) {\n\t\t\t\tif (e.code === \"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: \"previously registered\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\tstatusText: \"BAD_REQUEST\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tsignIn: {\n\t\t\tpasskey: signInPasskey,\n\t\t},\n\t\tpasskey: {\n\t\t\tregister: registerPasskey,\n\t\t},\n\t};\n};\n\nexport const passkeyClient = () => {\n\treturn {\n\t\tid: \"passkey\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof passkeyPl>,\n\t\tgetActions: ($fetch) => getPasskeyActions($fetch),\n\t\tpathMethods: {\n\t\t\t\"/passkey/register\": \"POST\",\n\t\t\t\"/passkey/authenticate\": \"POST\",\n\t\t},\n\t} satisfies AuthClientPlugin;\n};\n","import type { AuthClientPlugin } from \"../../client/types\";\nimport type { twoFactor as twoFa } from \"../../plugins/two-factor\";\n\nexport const twoFactorClient = (\n\toptions: {\n\t\ttwoFactorPage: string;\n\t\t/**\n\t\t * Redirect to the two factor page. If twoFactorPage\n\t\t * is not set this will redirect to the root path.\n\t\t * @default true\n\t\t */\n\t\tredirect?: boolean;\n\t} = {\n\t\tredirect: true,\n\t\ttwoFactorPage: \"/\",\n\t},\n) => {\n\treturn {\n\t\tid: \"two-factor\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof twoFa>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/two-factor/enable\" ||\n\t\t\t\t\tpath === \"/two-factor/send-otp\" ||\n\t\t\t\t\tpath === \"/two-factor/disable\",\n\t\t\t\tsignal: \"_sessionSignal\",\n\t\t\t},\n\t\t],\n\t\tpathMethods: {\n\t\t\t\"enable/totp\": \"POST\",\n\t\t\t\"/two-factor/disable\": \"POST\",\n\t\t\t\"/two-factor/enable\": \"POST\",\n\t\t\t\"/two-factor/send-otp\": \"POST\",\n\t\t},\n\t\tfetchPlugins: [\n\t\t\t{\n\t\t\t\tid: \"two-factor\",\n\t\t\t\tname: \"two-factor\",\n\t\t\t\thooks: {\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tif (context.data?.twoFactorRedirect) {\n\t\t\t\t\t\t\tif (options.redirect || options.twoFactorPage) {\n\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\t\t\t\twindow.location.href = options.twoFactorPage;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/organization/access/src/access.ts","../../src/plugins/organization/access/statement.ts","../../src/client/query.ts","../../src/plugins/organization/client.ts","../../src/plugins/username/client.ts","../../src/plugins/passkey/client.ts","../../src/plugins/two-factor/client.ts"],"names":["value","atom"],"mappings":"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","file":"plugins.js","sourcesContent":["import type { StatementsPrimitive as Statements, Subset } from \"./types\";\n\nexport class ParsingError extends Error {\n\tpublic readonly path: string;\n\tconstructor(message: string, path: string) {\n\t\tsuper(message);\n\t\tthis.path = path;\n\t}\n}\n\ntype Connector = \"OR\" | \"AND\";\n\nexport class AccessControl<TStatements extends Statements = Statements> {\n\tprivate readonly statements: TStatements;\n\tconstructor(private readonly s: TStatements) {\n\t\tthis.statements = s;\n\t}\n\tpublic newRole<K extends keyof TStatements>(\n\t\tstatements: Subset<K, TStatements>,\n\t) {\n\t\treturn new Role<Subset<K, TStatements>>(statements);\n\t}\n}\n\nexport type AuthortizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never };\n\nexport class Role<TStatements extends Statements> {\n\tpublic readonly statements: TStatements;\n\n\tconstructor(statements: TStatements) {\n\t\tthis.statements = statements;\n\t}\n\n\tpublic authorize<K extends keyof TStatements>(\n\t\trequest: Subset<K, TStatements>,\n\t\tconnector?: Connector,\n\t): AuthortizeResponse {\n\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\trequest,\n\t\t)) {\n\t\t\tconst allowedActions = this.statements[requestedResource];\n\t\t\tif (!allowedActions) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst success =\n\t\t\t\tconnector === \"OR\"\n\t\t\t\t\t? (requestedActions as string[]).some((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t)\n\t\t\t\t\t: (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t);\n\t\t\tif (success) {\n\t\t\t\treturn { success };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: \"Not authorized\",\n\t\t};\n\t}\n\n\tstatic fromString<TStatements extends Statements>(s: string) {\n\t\tconst statements = JSON.parse(s) as TStatements;\n\n\t\tif (typeof statements !== \"object\") {\n\t\t\tthrow new ParsingError(\"statements is not an object\", \".\");\n\t\t}\n\t\tfor (const [resource, actions] of Object.entries(statements)) {\n\t\t\tif (typeof resource !== \"string\") {\n\t\t\t\tthrow new ParsingError(\"invalid resource identifier\", resource);\n\t\t\t}\n\t\t\tif (!Array.isArray(actions)) {\n\t\t\t\tthrow new ParsingError(\"actions is not an array\", resource);\n\t\t\t}\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tif (typeof actions[i] !== \"string\") {\n\t\t\t\t\tthrow new ParsingError(\"action is not a string\", `${resource}[${i}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new Role<TStatements>(statements);\n\t}\n\n\tpublic toString(): string {\n\t\treturn JSON.stringify(this.statements);\n\t}\n}\n","import { AccessControl } from \"./src/access\";\nimport type { StatementsPrimitive } from \"./src/types\";\n\nexport const createAccessControl = <S extends StatementsPrimitive>(\n\tstatements: S,\n) => {\n\treturn new AccessControl<S>(statements);\n};\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import { atom } from \"nanostores\";\nimport type {\n\tInvitation,\n\tMember,\n\tOrganization,\n} from \"../../plugins/organization/schema\";\nimport type { Prettify } from \"../../types/helper\";\nimport { defaultStatements, type AccessControl, type Role } from \"./access\";\nimport type { AuthClientPlugin } from \"../../client/types\";\nimport type { organization } from \"./organization\";\nimport type { BetterFetchOption } from \"@better-fetch/fetch\";\nimport { useAuthQuery } from \"../../client\";\n\ninterface OrganizationClientOptions {\n\tac: AccessControl;\n\troles?: {\n\t\t[key in \"admin\" | \"member\" | \"owner\"]?: Role<any>;\n\t};\n}\n\nexport const organizationClient = <O extends OrganizationClientOptions>(\n\toptions?: O,\n) => {\n\tconst activeOrgId = atom<string | null | undefined>(undefined);\n\tconst _listOrg = atom<boolean>(false);\n\tconst _activeOrgSignal = atom<boolean>(false);\n\tconst _activeISignal = atom<string | null>(null);\n\n\ttype DefaultStatements = typeof defaultStatements;\n\ttype Statements = O[\"ac\"] extends AccessControl<infer S>\n\t\t? S extends Record<string, Array<any>>\n\t\t\t? S & DefaultStatements\n\t\t\t: DefaultStatements\n\t\t: DefaultStatements;\n\treturn {\n\t\tid: \"organization\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof organization>,\n\t\tgetActions: ($fetch) => ({\n\t\t\torganization: {\n\t\t\t\t$Infer: {\n\t\t\t\t\tActiveOrganization: {} as Prettify<\n\t\t\t\t\t\tOrganization & {\n\t\t\t\t\t\t\tmembers: Prettify<\n\t\t\t\t\t\t\t\tMember & {\n\t\t\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>[];\n\t\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t\t}\n\t\t\t\t\t>,\n\t\t\t\t\tOrganization: {} as Organization,\n\t\t\t\t\tInvitation: {} as Invitation,\n\t\t\t\t\tMember: {} as Member,\n\t\t\t\t},\n\t\t\t\tsetActive(orgId: string | null) {\n\t\t\t\t\tactiveOrgId.set(orgId);\n\t\t\t\t},\n\t\t\t\tsetInvitationId: (id: string | null) => {\n\t\t\t\t\t_activeISignal.set(id);\n\t\t\t\t},\n\t\t\t\thasPermission: async (data: {\n\t\t\t\t\tpermission: Partial<{\n\t\t\t\t\t\t//@ts-expect-error fix this later\n\t\t\t\t\t\t[key in keyof Statements]: Statements[key][number][];\n\t\t\t\t\t}>;\n\t\t\t\t\toptions?: BetterFetchOption;\n\t\t\t\t}) => {\n\t\t\t\t\treturn await $fetch<boolean>(\"/organization/has-permission\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tpermission: data.permission,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...data.options,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\tgetAtoms: ($fetch) => {\n\t\t\tconst invitation = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tInvitation & {\n\t\t\t\t\t\torganizationName: string;\n\t\t\t\t\t\torganizationSlug: string;\n\t\t\t\t\t\tinviterEmail: string;\n\t\t\t\t\t\tinviterName: string;\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(_activeISignal, \"/organization/get-active-invitation\", $fetch, () => ({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: {\n\t\t\t\t\tid: _activeISignal.get(),\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tconst listOrganizations = useAuthQuery<Organization[]>(\n\t\t\t\t_listOrg,\n\t\t\t\t\"/organization/list\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst activeOrganization = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tOrganization & {\n\t\t\t\t\t\tmembers: (Member & {\n\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})[];\n\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(\n\t\t\t\t[activeOrgId, _activeOrgSignal],\n\t\t\t\t\"/organization/activate\",\n\t\t\t\t$fetch,\n\t\t\t\t() => ({\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\tbody: {\n\t\t\t\t\t\torgId: activeOrgId.get(),\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t_listOrg,\n\t\t\t\t_activeOrgSignal,\n\t\t\t\tactiveOrganization,\n\t\t\t\tlistOrganizations,\n\t\t\t\tinvitation,\n\t\t\t};\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpath === \"/organization/create\" || path === \"/organization/delete\"\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsignal: \"_listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization\");\n\t\t\t\t},\n\t\t\t\tsignal: \"_activeOrgSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n","import type { username } from \".\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const usernameClient = () => {\n\treturn {\n\t\tid: \"username\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof username>,\n\t} satisfies AuthClientPlugin;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport {\n\tWebAuthnError,\n\tstartAuthentication,\n\tstartRegistration,\n} from \"@simplewebauthn/browser\";\nimport type {\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n} from \"@simplewebauthn/types\";\nimport type { Session } from \"inspector\";\nimport type { User } from \"../../adapters/schema\";\nimport type { passkey as passkeyPl, Passkey } from \"../../plugins\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const getPasskeyActions = ($fetch: BetterFetch) => {\n\tconst signInPasskey = async (opts?: {\n\t\tautoFill?: boolean;\n\t\temail?: string;\n\t\tcallbackURL?: string;\n\t}) => {\n\t\tconst response = await $fetch<PublicKeyCredentialRequestOptionsJSON>(\n\t\t\t\"/passkey/generate-authenticate-options\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: {\n\t\t\t\t\temail: opts?.email,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tif (!response.data) {\n\t\t\treturn response;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startAuthentication(\n\t\t\t\tresponse.data,\n\t\t\t\topts?.autoFill || false,\n\t\t\t);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tsession: Session;\n\t\t\t\tuser: User;\n\t\t\t}>(\"/passkey/verify-authentication\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"authenticate\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t};\n\n\tconst registerPasskey = async () => {\n\t\tconst options = await $fetch<PublicKeyCredentialCreationOptionsJSON>(\n\t\t\t\"/passkey/generate-register-options\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t},\n\t\t);\n\t\tif (!options.data) {\n\t\t\treturn options;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startRegistration(options.data);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tpasskey: Passkey;\n\t\t\t}>(\"/passkey/verify-registration\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"register\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (e instanceof WebAuthnError) {\n\t\t\t\tif (e.code === \"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: \"previously registered\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\tstatusText: \"BAD_REQUEST\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tsignIn: {\n\t\t\tpasskey: signInPasskey,\n\t\t},\n\t\tpasskey: {\n\t\t\tregister: registerPasskey,\n\t\t},\n\t};\n};\n\nexport const passkeyClient = () => {\n\treturn {\n\t\tid: \"passkey\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof passkeyPl>,\n\t\tgetActions: ($fetch) => getPasskeyActions($fetch),\n\t\tpathMethods: {\n\t\t\t\"/passkey/register\": \"POST\",\n\t\t\t\"/passkey/authenticate\": \"POST\",\n\t\t},\n\t} satisfies AuthClientPlugin;\n};\n","import type { AuthClientPlugin } from \"../../client/types\";\nimport type { twoFactor as twoFa } from \"../../plugins/two-factor\";\n\nexport const twoFactorClient = (\n\toptions: {\n\t\ttwoFactorPage: string;\n\t\t/**\n\t\t * Redirect to the two factor page. If twoFactorPage\n\t\t * is not set this will redirect to the root path.\n\t\t * @default true\n\t\t */\n\t\tredirect?: boolean;\n\t} = {\n\t\tredirect: true,\n\t\ttwoFactorPage: \"/\",\n\t},\n) => {\n\treturn {\n\t\tid: \"two-factor\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof twoFa>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/two-factor/enable\" ||\n\t\t\t\t\tpath === \"/two-factor/send-otp\" ||\n\t\t\t\t\tpath === \"/two-factor/disable\",\n\t\t\t\tsignal: \"_sessionSignal\",\n\t\t\t},\n\t\t],\n\t\tpathMethods: {\n\t\t\t\"enable/totp\": \"POST\",\n\t\t\t\"/two-factor/disable\": \"POST\",\n\t\t\t\"/two-factor/enable\": \"POST\",\n\t\t\t\"/two-factor/send-otp\": \"POST\",\n\t\t},\n\t\tfetchPlugins: [\n\t\t\t{\n\t\t\t\tid: \"two-factor\",\n\t\t\t\tname: \"two-factor\",\n\t\t\t\thooks: {\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tif (context.data?.twoFactorRedirect) {\n\t\t\t\t\t\t\tif (options.redirect || options.twoFactorPage) {\n\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\t\t\t\twindow.location.href = options.twoFactorPage;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n"]}
|
package/dist/client.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as zod from 'zod';
|
|
|
2
2
|
import * as nanostores from 'nanostores';
|
|
3
3
|
import { PreinitializedWritableAtom } from 'nanostores';
|
|
4
4
|
import * as _better_fetch_fetch from '@better-fetch/fetch';
|
|
5
|
-
import { BetterFetch,
|
|
5
|
+
import { BetterFetch, BetterFetchError, BetterFetchOption } from '@better-fetch/fetch';
|
|
6
6
|
import { B as BetterAuthPlugin, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-BB8sj8CA.js';
|
|
7
7
|
import { U as UnionToIntersection } from './helper-D8dhRz72.js';
|
|
8
8
|
import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, c as InferSessionFromClient, d as InferUserFromClient, b as IsSignal } from './types-B34P_dp5.js';
|
|
@@ -77,6 +77,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
|
|
|
77
77
|
isPending: boolean;
|
|
78
78
|
}>;
|
|
79
79
|
$fetch: _better_fetch_fetch.BetterFetch<{
|
|
80
|
+
credentials: "include";
|
|
80
81
|
plugins: (_better_fetch_fetch.BetterFetchPlugin | {
|
|
81
82
|
id: string;
|
|
82
83
|
name: string;
|
|
@@ -226,7 +227,6 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
|
|
|
226
227
|
}>;
|
|
227
228
|
})[];
|
|
228
229
|
cache?: RequestCache;
|
|
229
|
-
credentials?: RequestCredentials;
|
|
230
230
|
headers?: (HeadersInit & (HeadersInit | {
|
|
231
231
|
accept: "application/json" | "text/plain" | "application/octet-stream";
|
|
232
232
|
"content-type": "application/json" | "text/plain" | "application/x-www-form-urlencoded" | "multipart/form-data" | "application/octet-stream";
|
|
@@ -294,7 +294,11 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
|
|
|
294
294
|
};
|
|
295
295
|
};
|
|
296
296
|
|
|
297
|
-
declare const useAuthQuery: <T>(initializedAtom: PreinitializedWritableAtom<any> | PreinitializedWritableAtom<any>[], path: string, $fetch: BetterFetch, options?: ((
|
|
297
|
+
declare const useAuthQuery: <T>(initializedAtom: PreinitializedWritableAtom<any> | PreinitializedWritableAtom<any>[], path: string, $fetch: BetterFetch, options?: ((value: {
|
|
298
|
+
data: null | T;
|
|
299
|
+
error: null | BetterFetchError;
|
|
300
|
+
isPending: boolean;
|
|
301
|
+
}) => BetterFetchOption) | BetterFetchOption) => PreinitializedWritableAtom<{
|
|
298
302
|
data: null | T;
|
|
299
303
|
error: null | BetterFetchError;
|
|
300
304
|
isPending: boolean;
|
package/dist/client.js
CHANGED
|
@@ -112,6 +112,7 @@ var getClientConfig = (options) => {
|
|
|
112
112
|
const $fetch = createFetch({
|
|
113
113
|
baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
|
|
114
114
|
...options?.fetchOptions,
|
|
115
|
+
credentials: "include",
|
|
115
116
|
plugins: [
|
|
116
117
|
csrfPlugin,
|
|
117
118
|
redirectPlugin,
|
|
@@ -237,7 +238,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
237
238
|
isPending: false
|
|
238
239
|
});
|
|
239
240
|
const fn = () => {
|
|
240
|
-
const opts = typeof options === "function" ? options(
|
|
241
|
+
const opts = typeof options === "function" ? options({
|
|
242
|
+
data: value.get().data,
|
|
243
|
+
error: value.get().error,
|
|
244
|
+
isPending: value.get().isPending
|
|
245
|
+
}) : options;
|
|
241
246
|
return $fetch(path, {
|
|
242
247
|
...opts,
|
|
243
248
|
onSuccess: async (context) => {
|
|
@@ -272,7 +277,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
272
277
|
let firstRun = true;
|
|
273
278
|
for (const initAtom of initializedAtom) {
|
|
274
279
|
initAtom.subscribe((value2) => {
|
|
275
|
-
if (
|
|
280
|
+
if (!firstRun) {
|
|
276
281
|
fn();
|
|
277
282
|
}
|
|
278
283
|
});
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/vanilla.ts"],"names":["value","atom"],"mappings":"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","file":"client.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tInferSessionFromClient,\n\tInferUserFromClient,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: Atoms[key];\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\t}\n\n\tconst { $session, _sessionSignal } = getSessionAtom<Option>($fetch);\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\tuseSession: $session,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof $session;\n\t\t\t$fetch: typeof $fetch;\n\t\t\t$infer: {\n\t\t\t\tsession: InferSessionFromClient<Option>;\n\t\t\t\tuser: InferUserFromClient<Option>;\n\t\t\t};\n\t\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/vanilla.ts"],"names":["value","atom"],"mappings":"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","file":"client.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tInferSessionFromClient,\n\tInferUserFromClient,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: Atoms[key];\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\t}\n\n\tconst { $session, _sessionSignal } = getSessionAtom<Option>($fetch);\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\tuseSession: $session,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof $session;\n\t\t\t$fetch: typeof $fetch;\n\t\t\t$infer: {\n\t\t\t\tsession: InferSessionFromClient<Option>;\n\t\t\t\tuser: InferUserFromClient<Option>;\n\t\t\t};\n\t\t};\n}\n"]}
|
package/dist/react.js
CHANGED
|
@@ -114,6 +114,7 @@ var getClientConfig = (options) => {
|
|
|
114
114
|
const $fetch = createFetch({
|
|
115
115
|
baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
|
|
116
116
|
...options?.fetchOptions,
|
|
117
|
+
credentials: "include",
|
|
117
118
|
plugins: [
|
|
118
119
|
csrfPlugin,
|
|
119
120
|
redirectPlugin,
|
|
@@ -239,7 +240,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
239
240
|
isPending: false
|
|
240
241
|
});
|
|
241
242
|
const fn = () => {
|
|
242
|
-
const opts = typeof options === "function" ? options(
|
|
243
|
+
const opts = typeof options === "function" ? options({
|
|
244
|
+
data: value.get().data,
|
|
245
|
+
error: value.get().error,
|
|
246
|
+
isPending: value.get().isPending
|
|
247
|
+
}) : options;
|
|
243
248
|
return $fetch(path, {
|
|
244
249
|
...opts,
|
|
245
250
|
onSuccess: async (context) => {
|
|
@@ -274,7 +279,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
274
279
|
let firstRun = true;
|
|
275
280
|
for (const initAtom of initializedAtom) {
|
|
276
281
|
initAtom.subscribe((value2) => {
|
|
277
|
-
if (
|
|
282
|
+
if (!firstRun) {
|
|
278
283
|
fn();
|
|
279
284
|
}
|
|
280
285
|
});
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/react.ts"],"names":["value","atom","useAuthQuery"],"mappings":"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","file":"react.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/react\";\nimport { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\nimport { useEffect, useState } from \"react\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => ReturnType<Atoms[key][\"get\"]>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\ttype InitialValue = ReturnType<(typeof $session)[\"get\"]>[\"data\"] | null;\n\tfunction useSession(initialValue?: InitialValue) {\n\t\tconst storeValue = useStore($session);\n\t\treturn storeValue;\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n\nexport const useAuthQuery = useStore;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/react.ts"],"names":["value","atom","useAuthQuery"],"mappings":"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","file":"react.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/react\";\nimport { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\nimport { useEffect, useState } from \"react\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => ReturnType<Atoms[key][\"get\"]>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\ttype InitialValue = ReturnType<(typeof $session)[\"get\"]>[\"data\"] | null;\n\tfunction useSession(initialValue?: InitialValue) {\n\t\tconst storeValue = useStore($session);\n\t\treturn storeValue;\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n\nexport const useAuthQuery = useStore;\n"]}
|
package/dist/solid.js
CHANGED
|
@@ -113,6 +113,7 @@ var getClientConfig = (options) => {
|
|
|
113
113
|
const $fetch = createFetch({
|
|
114
114
|
baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
|
|
115
115
|
...options?.fetchOptions,
|
|
116
|
+
credentials: "include",
|
|
116
117
|
plugins: [
|
|
117
118
|
csrfPlugin,
|
|
118
119
|
redirectPlugin,
|
|
@@ -238,7 +239,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
238
239
|
isPending: false
|
|
239
240
|
});
|
|
240
241
|
const fn = () => {
|
|
241
|
-
const opts = typeof options === "function" ? options(
|
|
242
|
+
const opts = typeof options === "function" ? options({
|
|
243
|
+
data: value.get().data,
|
|
244
|
+
error: value.get().error,
|
|
245
|
+
isPending: value.get().isPending
|
|
246
|
+
}) : options;
|
|
242
247
|
return $fetch(path, {
|
|
243
248
|
...opts,
|
|
244
249
|
onSuccess: async (context) => {
|
|
@@ -273,7 +278,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
273
278
|
let firstRun = true;
|
|
274
279
|
for (const initAtom of initializedAtom) {
|
|
275
280
|
initAtom.subscribe((value2) => {
|
|
276
|
-
if (
|
|
281
|
+
if (!firstRun) {
|
|
277
282
|
fn();
|
|
278
283
|
}
|
|
279
284
|
});
|
package/dist/solid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/client/proxy.ts","../src/utils/misc.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/solid.ts"],"names":["value","atom"],"mappings":"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","file":"solid.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/solid\";\nimport { getClientConfig } from \"./config\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport type { Accessor } from \"solid-js\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => Accessor<ReturnType<Atoms[key][\"get\"]>>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\tfunction useSession() {\n\t\treturn useStore($session);\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/client/proxy.ts","../src/utils/misc.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/solid.ts"],"names":["value","atom"],"mappings":"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","file":"solid.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/solid\";\nimport { getClientConfig } from \"./config\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport type { Accessor } from \"solid-js\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => Accessor<ReturnType<Atoms[key][\"get\"]>>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\tfunction useSession() {\n\t\treturn useStore($session);\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
|
package/dist/svelte.js
CHANGED
|
@@ -112,6 +112,7 @@ var getClientConfig = (options) => {
|
|
|
112
112
|
const $fetch = createFetch({
|
|
113
113
|
baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
|
|
114
114
|
...options?.fetchOptions,
|
|
115
|
+
credentials: "include",
|
|
115
116
|
plugins: [
|
|
116
117
|
csrfPlugin,
|
|
117
118
|
redirectPlugin,
|
|
@@ -237,7 +238,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
237
238
|
isPending: false
|
|
238
239
|
});
|
|
239
240
|
const fn = () => {
|
|
240
|
-
const opts = typeof options === "function" ? options(
|
|
241
|
+
const opts = typeof options === "function" ? options({
|
|
242
|
+
data: value.get().data,
|
|
243
|
+
error: value.get().error,
|
|
244
|
+
isPending: value.get().isPending
|
|
245
|
+
}) : options;
|
|
241
246
|
return $fetch(path, {
|
|
242
247
|
...opts,
|
|
243
248
|
onSuccess: async (context) => {
|
|
@@ -272,7 +277,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
272
277
|
let firstRun = true;
|
|
273
278
|
for (const initAtom of initializedAtom) {
|
|
274
279
|
initAtom.subscribe((value2) => {
|
|
275
|
-
if (
|
|
280
|
+
if (!firstRun) {
|
|
276
281
|
fn();
|
|
277
282
|
}
|
|
278
283
|
});
|
package/dist/svelte.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/svelte.ts"],"names":["value","atom"],"mappings":"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","file":"svelte.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: Atoms[key];\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession: $session,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof $session;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/svelte.ts"],"names":["value","atom"],"mappings":"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","file":"svelte.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: Atoms[key];\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession: $session,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof $session;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
|
package/dist/vue.js
CHANGED
|
@@ -113,6 +113,7 @@ var getClientConfig = (options) => {
|
|
|
113
113
|
const $fetch = createFetch({
|
|
114
114
|
baseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),
|
|
115
115
|
...options?.fetchOptions,
|
|
116
|
+
credentials: "include",
|
|
116
117
|
plugins: [
|
|
117
118
|
csrfPlugin,
|
|
118
119
|
redirectPlugin,
|
|
@@ -238,7 +239,11 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
238
239
|
isPending: false
|
|
239
240
|
});
|
|
240
241
|
const fn = () => {
|
|
241
|
-
const opts = typeof options === "function" ? options(
|
|
242
|
+
const opts = typeof options === "function" ? options({
|
|
243
|
+
data: value.get().data,
|
|
244
|
+
error: value.get().error,
|
|
245
|
+
isPending: value.get().isPending
|
|
246
|
+
}) : options;
|
|
242
247
|
return $fetch(path, {
|
|
243
248
|
...opts,
|
|
244
249
|
onSuccess: async (context) => {
|
|
@@ -273,7 +278,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
|
|
|
273
278
|
let firstRun = true;
|
|
274
279
|
for (const initAtom of initializedAtom) {
|
|
275
280
|
initAtom.subscribe((value2) => {
|
|
276
|
-
if (
|
|
281
|
+
if (!firstRun) {
|
|
277
282
|
fn();
|
|
278
283
|
}
|
|
279
284
|
});
|
package/dist/vue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/vue.ts"],"names":["value","atom"],"mappings":"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","file":"vue.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/vue\";\nimport type { DeepReadonly, Ref } from \"vue\";\nimport { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => DeepReadonly<\n\t\t\t\t\t\t\tRef<ReturnType<Atoms[key][\"get\"]>>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\tfunction useSession() {\n\t\treturn useStore($session);\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/config.ts","../src/utils/misc.ts","../src/client/proxy.ts","../src/client/query.ts","../src/client/session-atom.ts","../src/client/vue.ts"],"names":["value","atom"],"mappings":"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","file":"vue.js","sourcesContent":["export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${url}${path}`;\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (!options?.baseURL) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"API Base URL on the auth client isn't configured. Please pass it directly to the client `baseURL`\",\n\t\t\t);\n\t\t}\n\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tcustomFetchImpl: options.customFetchImpl,\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { type Atom } from \"nanostores\";\nimport type { AtomListener, ClientOptions } from \"./types\";\n\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferSession } from \"../types\";\n\nexport const getClientConfig = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createFetch({\n\t\tbaseURL: getBaseURL(options?.fetchOptions?.baseURL || options?.baseURL),\n\t\t...options?.fetchOptions,\n\t\tcredentials: \"include\",\n\t\tplugins: [\n\t\t\tcsrfPlugin,\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t\t...(options?.fetchOptions?.plugins || []),\n\t\t\t...(options?.plugins\n\t\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t\t.filter((pl) => pl !== undefined) || []),\n\t\t],\n\t});\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tlet pluginsAtoms = {} as Record<string, Atom<any>>;\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/user/revoke-sessions\": \"POST\",\n\t};\n\tconst atomListeners: AtomListener[] = [\n\t\t{\n\t\t\tsignal: \"_sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\treturn (\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"sign-up/email\" ||\n\t\t\t\t\tpath === \"/user/update\"\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tObject.assign(pluginsActions, plugin.getActions?.($fetch));\n\t\t}\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\treturn {\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t};\n};\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom, PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { AuthClientPlugin } from \"./types\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: PreinitializedWritableAtom<boolean>;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: AuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners?.find((s) => s.matcher(routePath));\n\n\t\t\t\t\t\tif (!matches) return;\n\t\t\t\t\t\tconst signal = atoms[matches.signal];\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| ((value: {\n\t\t\t\tdata: null | T;\n\t\t\t\terror: null | BetterFetchError;\n\t\t\t\tisPending: boolean;\n\t\t }) => BetterFetchOption)\n\t\t| BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts =\n\t\t\ttypeof options === \"function\"\n\t\t\t\t? options({\n\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t})\n\t\t\t\t: options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (!firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify, UnionToIntersection } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\nimport type { AuthClientPlugin, ClientOptions } from \"./types\";\nimport { useAuthQuery } from \"./query\";\nimport type { BetterAuthPlugin } from \"../plugins\";\n\nexport function getSessionAtom<Option extends ClientOptions>(\n\tclient: BetterFetch,\n) {\n\ttype Plugins = Option[\"plugins\"] extends Array<AuthClientPlugin>\n\t\t? Array<\n\t\t\t\tOption[\"plugins\"][number] extends infer T\n\t\t\t\t\t? T extends AuthClientPlugin\n\t\t\t\t\t\t? T[\"$InferServerPlugin\"] extends infer U\n\t\t\t\t\t\t\t? U extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? U\n\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t>\n\t\t: never;\n\n\ttype Auth = {\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t};\n\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst session = useAuthQuery<{\n\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t}>($signal, \"/session\", client, {\n\t\tmethod: \"GET\",\n\t});\n\treturn {\n\t\t$session: session,\n\t\t_sessionSignal: $signal,\n\t\t$infer: {} as {\n\t\t\tsession: {\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t};\n\t\t},\n\t};\n}\n","import { useStore } from \"@nanostores/vue\";\nimport type { DeepReadonly, Ref } from \"vue\";\nimport { getClientConfig } from \"./config\";\nimport { capitalizeFirstLetter } from \"../utils/misc\";\nimport type {\n\tAuthClientPlugin,\n\tClientOptions,\n\tInferActions,\n\tInferClientAPI,\n\tIsSignal,\n} from \"./types\";\nimport { createDynamicPathProxy } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends ClientOptions> = O[\"plugins\"] extends Array<\n\tinfer Plugin\n>\n\t? Plugin extends AuthClientPlugin\n\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t? {\n\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t: never]: () => DeepReadonly<\n\t\t\t\t\t\t\tRef<ReturnType<Atoms[key][\"get\"]>>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\t\t: {}\n\t\t: {}\n\t: {};\n\nexport function createAuthClient<Option extends ClientOptions>(\n\toptions?: Option,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tlet resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\tconst { $session, _sessionSignal, $infer } = getSessionAtom<Option>($fetch);\n\n\tfunction useSession() {\n\t\treturn useStore($session);\n\t}\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\tuseSession,\n\t};\n\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\t{\n\t\t\t...pluginsAtoms,\n\t\t\t_sessionSignal,\n\t\t},\n\t\tatomListeners,\n\t);\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tInferClientAPI<Option> &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: typeof useSession;\n\t\t\t$infer: typeof $infer;\n\t\t};\n}\n"]}
|