@nhost/nhost-js 1.6.0 → 1.6.2

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.
@@ -18,7 +18,7 @@ export declare function createFunctionsClient(params: NhostClientConstructorPara
18
18
  * @alias Functions
19
19
  */
20
20
  export declare class NhostFunctionsClient {
21
- private url;
21
+ readonly url: string;
22
22
  private instance;
23
23
  private accessToken;
24
24
  private adminSecret?;
@@ -1 +1 @@
1
- {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["functions.ts"],"names":[],"mappings":"AAAA,OAAc,EAEZ,kBAAkB,EAGnB,MAAM,OAAO,CAAA;AAGd,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AACnF,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,4BAA4B,wBAWzE;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,WAAW,CAAC,CAAQ;gBAEhB,MAAM,EAAE,+BAA+B;IAWnD;;;;;;;;;OASG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,GAAG,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAyBnC;;;;;;;;;OASG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAS9C,OAAO,CAAC,0BAA0B;CAanC"}
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["functions.ts"],"names":[],"mappings":"AAAA,OAAc,EAEZ,kBAAkB,EAGnB,MAAM,OAAO,CAAA;AAGd,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AACnF,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,4BAA4B,wBAWzE;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,WAAW,CAAC,CAAQ;gBAEhB,MAAM,EAAE,+BAA+B;IAWnD;;;;;;;;;OASG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,GAAG,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAyBnC;;;;;;;;;OASG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAS9C,OAAO,CAAC,0BAA0B;CAanC"}
@@ -19,7 +19,7 @@ export declare function createGraphqlClient(params: NhostClientConstructorParams
19
19
  * @alias GraphQL
20
20
  */
21
21
  export declare class NhostGraphqlClient {
22
- private url;
22
+ readonly url: string;
23
23
  private instance;
24
24
  private accessToken;
25
25
  private adminSecret?;
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["graphql.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,kBAAkB,EAA0B,MAAM,OAAO,CAAA;AACxF,OAAO,EAAE,YAAY,EAAS,MAAM,SAAS,CAAA;AAG7C,OAAO,EACL,sBAAsB,EAEtB,4BAA4B,EAC7B,MAAM,gBAAgB,CAAA;AAEvB,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,4BAA4B,sBAWvE;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,WAAW,CAAC,CAAQ;gBAEhB,MAAM,EAAE,6BAA6B;IAWjD;;;;;;;;;;;;;;;;;OAiBG;IACG,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAC5B,QAAQ,EAAE,MAAM,GAAG,YAAY,EAC/B,SAAS,CAAC,EAAE,CAAC,EACb,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAiDrC;;;;;;;;;OASG;IACH,MAAM,IAAI,MAAM;IAIhB;;;;;;;;;OASG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAS9C,OAAO,CAAC,0BAA0B;CAanC"}
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["graphql.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,YAAY,EAAS,MAAM,SAAS,CAAA;AAG7C,OAAO,EACL,sBAAsB,EAEtB,4BAA4B,EAC7B,MAAM,gBAAgB,CAAA;AAEvB,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,4BAA4B,sBAWvE;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,WAAW,CAAC,CAAQ;gBAEhB,MAAM,EAAE,6BAA6B;IAWjD;;;;;;;;;;;;;;;;;OAiBG;IACG,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAC5B,QAAQ,EAAE,MAAM,GAAG,YAAY,EAC/B,SAAS,CAAC,EAAE,CAAC,EACb,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAkDrC;;;;;;;;;OASG;IACH,MAAM,IAAI,MAAM;IAIhB;;;;;;;;;OASG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAS9C,OAAO,CAAC,0BAA0B;CAanC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nhost.d.ts","sourceRoot":"","sources":["nhost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AAG7D,OAAO,EAAyB,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAuB,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAGnE,eAAO,MAAM,iBAAiB,WAAY,4BAA4B,gBAA4B,CAAA;AAClG,qBAAa,WAAW;IACtB,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,SAAS,EAAE,oBAAoB,CAAA;IAC/B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAE3B;;;;;;;;;OASG;gBACS,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,QAAQ,EACR,KAAY,EACZ,GAAG,SAAS,EACb,EAAE,4BAA4B;IA2C/B,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAM3C;CACF"}
1
+ {"version":3,"file":"nhost.d.ts","sourceRoot":"","sources":["nhost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AAG7D,OAAO,EAAyB,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAuB,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAGnE,eAAO,MAAM,iBAAiB,WAAY,4BAA4B,gBAA4B,CAAA;AAClG,qBAAa,WAAW;IACtB,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,SAAS,EAAE,oBAAoB,CAAA;IAC/B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAE3B;;;;;;;;;OASG;gBACS,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,QAAQ,EACR,KAAY,EACZ,GAAG,SAAS,EACb,EAAE,4BAA4B;IA4C/B,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAM3C;CACF"}
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var C=Object.defineProperty;var v=(t,e,r)=>e in t?C(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var o=(t,e,r)=>(v(t,typeof e!="symbol"?e+"":e,r),r);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const m=require("@nhost/hasura-auth-js"),E=require("axios"),y=require("graphql"),_=require("@nhost/hasura-storage-js"),$=t=>t&&typeof t=="object"&&"default"in t?t:{default:t},g=$(E),N=/^((?<protocol>http[s]?):\/\/)?(?<host>localhost)(:(?<port>\d+))?$/;function f(t,e){const{backendUrl:r,subdomain:n,region:c}=t;if(r)return`${r}/v1/${e}`;if(!n)throw new Error("Either `backendUrl` or `subdomain` must be set.");const s=n.match(N);if(s!=null&&s.groups){const{protocol:u="http",host:h,port:i=1337}=s.groups,l=L(e);return l||`${u}://${h}:${i}/v1/${e}`}if(!c)throw new Error('`region` must be set when using a `subdomain` other than "localhost".');return`https://${n}.${e}.${c}.nhost.run/v1`}function G(){return typeof window<"u"}function H(){return typeof process<"u"&&process.env}function L(t){return G()||!H()?null:process.env[`NHOST_${t.toUpperCase()}_URL`]}function T(t){const e="subdomain"in t||"backendUrl"in t?f(t,"auth"):t.authUrl;if(!e)throw new Error("Please provide `subdomain` or `authUrl`.");return new m.HasuraAuthClient({url:e,...t})}function p(t){const e="subdomain"in t||"backendUrl"in t?f(t,"functions"):t.functionsUrl;if(!e)throw new Error("Please provide `subdomain` or `functionsUrl`.");return new A({url:e,...t})}class A{constructor(e){o(this,"url");o(this,"instance");o(this,"accessToken");o(this,"adminSecret");const{url:r,adminSecret:n}=e;this.url=r,this.accessToken=null,this.adminSecret=n,this.instance=g.default.create({baseURL:r})}async call(e,r,n){const c={...this.generateAccessTokenHeaders(),...n==null?void 0:n.headers};let s;try{s=await this.instance.post(e,r,{...n,headers:c})}catch(u){if(u instanceof Error)return{res:null,error:u}}return s?{res:s,error:null}:{res:null,error:new Error("Unable to make post request to funtion")}}setAccessToken(e){if(!e){this.accessToken=null;return}this.accessToken=e}generateAccessTokenHeaders(){return this.adminSecret?{"x-hasura-admin-secret":this.adminSecret}:this.accessToken?{Authorization:`Bearer ${this.accessToken}`}:{}}}function b(t){const e="subdomain"in t||"backendUrl"in t?f(t,"graphql"):t.graphqlUrl;if(!e)throw new Error("Please provide `subdomain` or `graphqlUrl`.");return new S({url:e,...t})}class S{constructor(e){o(this,"url");o(this,"instance");o(this,"accessToken");o(this,"adminSecret");const{url:r,adminSecret:n}=e;this.url=r,this.accessToken=null,this.adminSecret=n,this.instance=g.default.create({baseURL:r})}async request(e,r,n){const c={...this.generateAccessTokenHeaders(),...n==null?void 0:n.headers};try{const s="",h=(await this.instance.post("",{operationName:s||void 0,query:typeof e=="string"?e:y.print(e),variables:r},{...n,headers:c})).data,{data:i}=h;return h.errors?{data:null,error:h.errors}:typeof i!="object"||Array.isArray(i)||i===null?{data:null,error:new Error("incorrect response data from GraphQL server")}:{data:i,error:null}}catch(s){return s instanceof Error?{data:null,error:s}:(console.error(s),{data:null,error:new Error("Unable to get do GraphQL request")})}}getUrl(){return this.url}setAccessToken(e){if(!e){this.accessToken=null;return}this.accessToken=e}generateAccessTokenHeaders(){return this.adminSecret?{"x-hasura-admin-secret":this.adminSecret}:this.accessToken?{Authorization:`Bearer ${this.accessToken}`}:{}}}function U(t){const e="subdomain"in t||"backendUrl"in t?f(t,"storage"):t.storageUrl;if(!e)throw new Error("Please provide `subdomain` or `storageUrl`.");return new _.HasuraStorageClient({url:e,...t})}const F=t=>new w(t);class w{constructor({refreshIntervalTime:e,clientStorageGetter:r,clientStorageSetter:n,clientStorage:c,clientStorageType:s,autoRefreshToken:u,autoSignIn:h,adminSecret:i,devTools:l,start:q=!0,...d}){o(this,"auth");o(this,"storage");o(this,"functions");o(this,"graphql");o(this,"_adminSecret");o(this,"devTools");var k;this.auth=T({refreshIntervalTime:e,clientStorageGetter:r,clientStorageSetter:n,clientStorage:c,clientStorageType:s,autoRefreshToken:u,autoSignIn:h,start:q,...d}),this.storage=U({adminSecret:i,...d}),this.functions=p({adminSecret:i,...d}),this.graphql=b({adminSecret:i,...d}),this.storage.setAccessToken(this.auth.getAccessToken()),this.functions.setAccessToken(this.auth.getAccessToken()),this.graphql.setAccessToken(this.auth.getAccessToken()),(k=this.auth.client)==null||k.onStart(()=>{this.auth.onAuthStateChanged((a,j)=>{a==="SIGNED_OUT"&&(this.storage.setAccessToken(void 0),this.functions.setAccessToken(void 0),this.graphql.setAccessToken(void 0))}),this.auth.onTokenChanged(a=>{this.storage.setAccessToken(a==null?void 0:a.accessToken),this.functions.setAccessToken(a==null?void 0:a.accessToken),this.graphql.setAccessToken(a==null?void 0:a.accessToken)})}),this._adminSecret=i,this.devTools=l}get adminSecret(){return this._adminSecret}set adminSecret(e){this._adminSecret=e,this.storage.setAdminSecret(e)}}exports.NhostClient=w;exports.NhostFunctionsClient=A;exports.NhostGraphqlClient=S;exports.createAuthClient=T;exports.createFunctionsClient=p;exports.createGraphqlClient=b;exports.createNhostClient=F;exports.createStorageClient=U;
1
+ "use strict";var v=Object.defineProperty;var m=(t,e,r)=>e in t?v(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var o=(t,e,r)=>(m(t,typeof e!="symbol"?e+"":e,r),r);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const E=require("@nhost/hasura-auth-js"),_=require("axios"),y=require("graphql"),$=require("@nhost/hasura-storage-js"),N=t=>t&&typeof t=="object"&&"default"in t?t:{default:t},T=N(_),G=/^((?<protocol>http[s]?):\/\/)?(?<host>localhost)(:(?<port>(\d+|__\w+__)))?$/;function g(t,e){const{backendUrl:r,subdomain:n,region:a}=t;if(r)return`${r}/v1/${e}`;if(!n)throw new Error("Either `backendUrl` or `subdomain` must be set.");const s=n.match(G);if(s!=null&&s.groups){const{protocol:c="http",host:u,port:i=1337}=s.groups,l=F(e);return l||`${c}://${u}:${i}/v1/${e}`}if(!a)throw new Error('`region` must be set when using a `subdomain` other than "localhost".');return`https://${n}.${e}.${a}.nhost.run/v1`}function H(){return typeof window<"u"}function L(){return typeof process<"u"&&process.env}function F(t){return H()||!L()?null:process.env[`NHOST_${t.toUpperCase()}_URL`]}function p(t){const e="subdomain"in t||"backendUrl"in t?g(t,"auth"):t.authUrl;if(!e)throw new Error("Please provide `subdomain` or `authUrl`.");return new E.HasuraAuthClient({url:e,...t})}function A(t){const e="subdomain"in t||"backendUrl"in t?g(t,"functions"):t.functionsUrl;if(!e)throw new Error("Please provide `subdomain` or `functionsUrl`.");return new b({url:e,...t})}class b{constructor(e){o(this,"url");o(this,"instance");o(this,"accessToken");o(this,"adminSecret");const{url:r,adminSecret:n}=e;this.url=r,this.accessToken=null,this.adminSecret=n,this.instance=T.default.create({baseURL:r})}async call(e,r,n){const a={...this.generateAccessTokenHeaders(),...n==null?void 0:n.headers};let s;try{s=await this.instance.post(e,r,{...n,headers:a})}catch(c){if(c instanceof Error)return{res:null,error:c}}return s?{res:s,error:null}:{res:null,error:new Error("Unable to make post request to funtion")}}setAccessToken(e){if(!e){this.accessToken=null;return}this.accessToken=e}generateAccessTokenHeaders(){return this.adminSecret?{"x-hasura-admin-secret":this.adminSecret}:this.accessToken?{Authorization:`Bearer ${this.accessToken}`}:{}}}function w(t){const e="subdomain"in t||"backendUrl"in t?g(t,"graphql"):t.graphqlUrl;if(!e)throw new Error("Please provide `subdomain` or `graphqlUrl`.");return new S({url:e,...t})}class S{constructor(e){o(this,"url");o(this,"instance");o(this,"accessToken");o(this,"adminSecret");const{url:r,adminSecret:n}=e;this.url=r,this.accessToken=null,this.adminSecret=n,this.instance=T.default.create({baseURL:r})}async request(e,r,n){const a={...this.generateAccessTokenHeaders(),...n==null?void 0:n.headers,"Accept-Encoding":"*"};try{const s="",u=(await this.instance.post("",{operationName:s||void 0,query:typeof e=="string"?e:y.print(e),variables:r},{...n,headers:a})).data,{data:i}=u;return u.errors?{data:null,error:u.errors}:typeof i!="object"||Array.isArray(i)||i===null?{data:null,error:new Error("incorrect response data from GraphQL server")}:{data:i,error:null}}catch(s){return s instanceof Error?{data:null,error:s}:(console.error(s),{data:null,error:new Error("Unable to get do GraphQL request")})}}getUrl(){return this.url}setAccessToken(e){if(!e){this.accessToken=null;return}this.accessToken=e}generateAccessTokenHeaders(){return this.adminSecret?{"x-hasura-admin-secret":this.adminSecret}:this.accessToken?{Authorization:`Bearer ${this.accessToken}`}:{}}}function U(t){const e="subdomain"in t||"backendUrl"in t?g(t,"storage"):t.storageUrl;if(!e)throw new Error("Please provide `subdomain` or `storageUrl`.");return new $.HasuraStorageClient({url:e,...t})}const j=t=>new q(t);class q{constructor({refreshIntervalTime:e,clientStorageGetter:r,clientStorageSetter:n,clientStorage:a,clientStorageType:s,autoRefreshToken:c,autoSignIn:u,adminSecret:i,devTools:l,start:C=!0,...d}){o(this,"auth");o(this,"storage");o(this,"functions");o(this,"graphql");o(this,"_adminSecret");o(this,"devTools");this.auth=p({refreshIntervalTime:e,clientStorageGetter:r,clientStorageSetter:n,clientStorage:a,clientStorageType:s,autoRefreshToken:c,autoSignIn:u,start:C,...d}),this.storage=U({adminSecret:i,...d}),this.functions=A({adminSecret:i,...d}),this.graphql=w({adminSecret:i,...d}),this.auth.client.onStart(()=>{const k=this.auth.getAccessToken();this.storage.setAccessToken(k),this.functions.setAccessToken(k),this.graphql.setAccessToken(k),this.auth.onAuthStateChanged((h,f)=>{h==="SIGNED_OUT"&&(this.storage.setAccessToken(void 0),this.functions.setAccessToken(void 0),this.graphql.setAccessToken(void 0))}),this.auth.onTokenChanged(h=>{const f=h==null?void 0:h.accessToken;this.storage.setAccessToken(f),this.functions.setAccessToken(f),this.graphql.setAccessToken(f)})}),this._adminSecret=i,this.devTools=l}get adminSecret(){return this._adminSecret}set adminSecret(e){this._adminSecret=e,this.storage.setAdminSecret(e)}}exports.NhostClient=q;exports.NhostFunctionsClient=b;exports.NhostGraphqlClient=S;exports.createAuthClient=p;exports.createFunctionsClient=A;exports.createGraphqlClient=w;exports.createNhostClient=j;exports.createStorageClient=U;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/utils/helpers.ts","../src/clients/auth.ts","../src/clients/functions.ts","../src/clients/graphql.ts","../src/clients/storage.ts","../src/clients/nhost.ts"],"sourcesContent":["import { NhostClientConstructorParams } from './types'\n\nconst LOCALHOST_REGEX = /^((?<protocol>http[s]?):\\/\\/)?(?<host>localhost)(:(?<port>\\d+))?$/\n\n/**\n * `backendUrl` should now be used only when self-hosting\n * `subdomain` and `region` should be used instead when using the Nhost platform\n * `\n * @param backendOrSubdomain\n * @param service\n * @returns\n */\nexport function urlFromSubdomain(\n backendOrSubdomain: Pick<NhostClientConstructorParams, 'region' | 'subdomain' | 'backendUrl'>,\n service: string\n): string {\n const { backendUrl, subdomain, region } = backendOrSubdomain\n\n if (backendUrl) {\n return `${backendUrl}/v1/${service}`\n }\n\n if (!subdomain) {\n throw new Error('Either `backendUrl` or `subdomain` must be set.')\n }\n\n // check if subdomain is [http[s]://]localhost[:port]\n const subdomainLocalhostFound = subdomain.match(LOCALHOST_REGEX)\n if (subdomainLocalhostFound?.groups) {\n const { protocol = 'http', host, port = 1337 } = subdomainLocalhostFound.groups\n\n const urlFromEnv = getValueFromEnv(service)\n if (urlFromEnv) {\n return urlFromEnv\n }\n return `${protocol}://${host}:${port}/v1/${service}`\n }\n\n if (!region) {\n throw new Error('`region` must be set when using a `subdomain` other than \"localhost\".')\n }\n\n return `https://${subdomain}.${service}.${region}.nhost.run/v1`\n}\n\n/**\n *\n * @returns whether the code is running in a browser\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined'\n}\n\n/**\n *\n * @returns whether the code is running in a Node.js environment\n */\nfunction environmentIsAvailable() {\n return typeof process !== 'undefined' && process.env\n}\n\n/**\n *\n * @param service auth | storage | graphql | functions\n * @returns the service's url if the corresponding env var is set\n * NHOST_${service}_URL\n */\nfunction getValueFromEnv(service: string) {\n if (isBrowser() || !environmentIsAvailable()) {\n return null\n }\n\n return process.env[`NHOST_${service.toUpperCase()}_URL`]\n}\n","import { HasuraAuthClient } from '@nhost/hasura-auth-js'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { NhostClientConstructorParams } from '../utils/types'\n\n/**\n * Creates a client for Auth from either a subdomain or a URL\n */\nexport function createAuthClient(params: NhostClientConstructorParams) {\n const authUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'auth')\n : params.authUrl\n\n if (!authUrl) {\n throw new Error('Please provide `subdomain` or `authUrl`.')\n }\n\n return new HasuraAuthClient({ url: authUrl, ...params })\n}\n","import axios, {\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n RawAxiosRequestHeaders\n} from 'axios'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { FunctionCallResponse, NhostClientConstructorParams } from '../utils/types'\nexport interface NhostFunctionsConstructorParams {\n /**\n * Serverless Functions endpoint.\n */\n url: string\n /**\n * Admin secret. When set, it is sent as an `x-hasura-admin-secret` header for all requests.\n */\n adminSecret?: string\n}\n\n/**\n * Creates a client for Functions from either a subdomain or a URL\n */\nexport function createFunctionsClient(params: NhostClientConstructorParams) {\n const functionsUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'functions')\n : params.functionsUrl\n\n if (!functionsUrl) {\n throw new Error('Please provide `subdomain` or `functionsUrl`.')\n }\n\n return new NhostFunctionsClient({ url: functionsUrl, ...params })\n}\n\n/**\n * @alias Functions\n */\nexport class NhostFunctionsClient {\n private url: string\n private instance: AxiosInstance\n private accessToken: string | null\n private adminSecret?: string\n\n constructor(params: NhostFunctionsConstructorParams) {\n const { url, adminSecret } = params\n\n this.url = url\n this.accessToken = null\n this.adminSecret = adminSecret\n this.instance = axios.create({\n baseURL: url\n })\n }\n\n /**\n * Use `nhost.functions.call` to call (sending a POST request to) a serverless function.\n *\n * @example\n * ```ts\n * await nhost.functions.call('send-welcome-email', { email: 'joe@example.com', name: 'Joe Doe' })\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/functions/call\n */\n async call<T = unknown, D = any>(\n url: string,\n data: D,\n config?: AxiosRequestConfig\n ): Promise<FunctionCallResponse<T>> {\n const headers = {\n ...this.generateAccessTokenHeaders(),\n ...config?.headers\n }\n\n let res\n try {\n res = await this.instance.post<T, AxiosResponse<T>, D>(url, data, { ...config, headers })\n } catch (error) {\n if (error instanceof Error) {\n return { res: null, error }\n }\n }\n\n if (!res) {\n return {\n res: null,\n error: new Error('Unable to make post request to funtion')\n }\n }\n\n return { res, error: null }\n }\n\n /**\n * Use `nhost.functions.setAccessToken` to a set an access token to be used in subsequent functions requests. Note that if you're signin in users with `nhost.auth.signIn()` the access token will be set automatically.\n *\n * @example\n * ```ts\n * nhost.functions.setAccessToken('some-access-token')\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/functions/set-access-token\n */\n setAccessToken(accessToken: string | undefined) {\n if (!accessToken) {\n this.accessToken = null\n return\n }\n\n this.accessToken = accessToken\n }\n\n private generateAccessTokenHeaders(): RawAxiosRequestHeaders {\n if (this.adminSecret) {\n return {\n 'x-hasura-admin-secret': this.adminSecret\n }\n }\n if (this.accessToken) {\n return {\n Authorization: `Bearer ${this.accessToken}`\n }\n }\n return {}\n }\n}\n","import axios, { AxiosInstance, AxiosRequestConfig, RawAxiosRequestHeaders } from 'axios'\nimport { DocumentNode, print } from 'graphql'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport {\n GraphqlRequestResponse,\n GraphqlResponse,\n NhostClientConstructorParams\n} from '../utils/types'\n\nexport interface NhostGraphqlConstructorParams {\n /**\n * GraphQL endpoint.\n */\n url: string\n /**\n * Admin secret. When set, it is sent as an `x-hasura-admin-secret` header for all requests.\n */\n adminSecret?: string\n}\n\n/**\n * Creates a client for GraphQL from either a subdomain or a URL\n */\nexport function createGraphqlClient(params: NhostClientConstructorParams) {\n const graphqlUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'graphql')\n : params.graphqlUrl\n\n if (!graphqlUrl) {\n throw new Error('Please provide `subdomain` or `graphqlUrl`.')\n }\n\n return new NhostGraphqlClient({ url: graphqlUrl, ...params })\n}\n\n/**\n * @alias GraphQL\n */\nexport class NhostGraphqlClient {\n private url: string\n private instance: AxiosInstance\n private accessToken: string | null\n private adminSecret?: string\n\n constructor(params: NhostGraphqlConstructorParams) {\n const { url, adminSecret } = params\n\n this.url = url\n this.accessToken = null\n this.adminSecret = adminSecret\n this.instance = axios.create({\n baseURL: url\n })\n }\n\n /**\n * Use `nhost.graphql.request` to send a GraphQL request. For more serious GraphQL usage we recommend using a GraphQL client such as Apollo Client (https://www.apollographql.com/docs/react).\n *\n * @example\n * ```ts\n * const CUSTOMERS = gql`\n * query {\n * customers {\n * id\n * name\n * }\n * }\n * `\n * const { data, error } = await nhost.graphql.request(CUSTOMERS)\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/request\n */\n async request<T = any, V = any>(\n document: string | DocumentNode,\n variables?: V,\n config?: AxiosRequestConfig\n ): Promise<GraphqlRequestResponse<T>> {\n // add auth headers if any\n const headers = {\n ...this.generateAccessTokenHeaders(),\n ...config?.headers\n }\n\n try {\n const operationName = ''\n const res = await this.instance.post<GraphqlResponse<T>>(\n '',\n {\n operationName: operationName || undefined,\n query: typeof document === 'string' ? document : print(document),\n variables\n },\n { ...config, headers }\n )\n\n const responseData = res.data\n const { data } = responseData\n\n if (responseData.errors) {\n return {\n data: null,\n error: responseData.errors\n }\n }\n\n if (typeof data !== 'object' || Array.isArray(data) || data === null) {\n return {\n data: null,\n error: new Error('incorrect response data from GraphQL server')\n }\n }\n\n return { data, error: null }\n } catch (error) {\n if (error instanceof Error) {\n return { data: null, error }\n }\n console.error(error)\n return {\n data: null,\n error: new Error('Unable to get do GraphQL request')\n }\n }\n }\n\n /**\n * Use `nhost.graphql.getUrl` to get the GraphQL URL.\n *\n * @example\n * ```ts\n * const url = nhost.graphql.getUrl();\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/get-url\n */\n getUrl(): string {\n return this.url\n }\n\n /**\n * Use `nhost.graphql.setAccessToken` to a set an access token to be used in subsequent graphql requests. Note that if you're signin in users with `nhost.auth.signIn()` the access token will be set automatically.\n *\n * @example\n * ```ts\n * nhost.graphql.setAccessToken('some-access-token')\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/set-access-token\n */\n setAccessToken(accessToken: string | undefined) {\n if (!accessToken) {\n this.accessToken = null\n return\n }\n\n this.accessToken = accessToken\n }\n\n private generateAccessTokenHeaders(): RawAxiosRequestHeaders {\n if (this.adminSecret) {\n return {\n 'x-hasura-admin-secret': this.adminSecret\n }\n }\n if (this.accessToken) {\n return {\n Authorization: `Bearer ${this.accessToken}`\n }\n }\n return {}\n }\n}\n","import { HasuraStorageClient } from '@nhost/hasura-storage-js'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { NhostClientConstructorParams } from '../utils/types'\n\n/**\n * Creates a client for Storage from either a subdomain or a URL\n */\nexport function createStorageClient(params: NhostClientConstructorParams) {\n const storageUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'storage')\n : params.storageUrl\n\n if (!storageUrl) {\n throw new Error('Please provide `subdomain` or `storageUrl`.')\n }\n\n return new HasuraStorageClient({ url: storageUrl, ...params })\n}\n","import { HasuraAuthClient } from '@nhost/hasura-auth-js'\nimport { HasuraStorageClient } from '@nhost/hasura-storage-js'\n\nimport { NhostClientConstructorParams } from '../utils/types'\n\nimport { createAuthClient } from './auth'\nimport { createFunctionsClient, NhostFunctionsClient } from './functions'\nimport { createGraphqlClient, NhostGraphqlClient } from './graphql'\nimport { createStorageClient } from './storage'\n\nexport const createNhostClient = (params: NhostClientConstructorParams) => new NhostClient(params)\nexport class NhostClient {\n auth: HasuraAuthClient\n storage: HasuraStorageClient\n functions: NhostFunctionsClient\n graphql: NhostGraphqlClient\n private _adminSecret?: string\n readonly devTools?: boolean\n\n /**\n * Nhost Client\n *\n * @example\n * ```ts\n * const nhost = new NhostClient({ subdomain, region });\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript\n */\n constructor({\n refreshIntervalTime,\n clientStorageGetter,\n clientStorageSetter,\n clientStorage,\n clientStorageType,\n autoRefreshToken,\n autoSignIn,\n adminSecret,\n devTools,\n start = true,\n ...urlParams\n }: NhostClientConstructorParams) {\n // * Set clients for all services\n this.auth = createAuthClient({\n refreshIntervalTime,\n clientStorageGetter,\n clientStorageSetter,\n clientStorage,\n clientStorageType,\n autoRefreshToken,\n autoSignIn,\n start,\n ...urlParams\n })\n this.storage = createStorageClient({ adminSecret, ...urlParams })\n this.functions = createFunctionsClient({ adminSecret, ...urlParams })\n this.graphql = createGraphqlClient({ adminSecret, ...urlParams })\n\n // * Set current token if token is already accessable\n this.storage.setAccessToken(this.auth.getAccessToken())\n this.functions.setAccessToken(this.auth.getAccessToken())\n this.graphql.setAccessToken(this.auth.getAccessToken())\n\n this.auth.client?.onStart(() => {\n // * Set access token when signing out\n this.auth.onAuthStateChanged((_event, session) => {\n if (_event === 'SIGNED_OUT') {\n this.storage.setAccessToken(undefined)\n this.functions.setAccessToken(undefined)\n this.graphql.setAccessToken(undefined)\n }\n })\n\n // * Update access token for clients, including when signin in\n this.auth.onTokenChanged((session) => {\n this.storage.setAccessToken(session?.accessToken)\n this.functions.setAccessToken(session?.accessToken)\n this.graphql.setAccessToken(session?.accessToken)\n })\n })\n this._adminSecret = adminSecret\n this.devTools = devTools\n }\n\n get adminSecret(): string | undefined {\n return this._adminSecret\n }\n\n set adminSecret(newValue: string | undefined) {\n this._adminSecret = newValue\n this.storage.setAdminSecret(newValue)\n // TODO inconsistent API: storage can change admin secret, but functions/graphql cannot\n // this.functions.setAdminSecret(newValue)\n // this.graphql.setAdminSecret(newValue)\n }\n}\n"],"names":["LOCALHOST_REGEX","urlFromSubdomain","backendOrSubdomain","service","backendUrl","subdomain","region","subdomainLocalhostFound","protocol","host","port","urlFromEnv","getValueFromEnv","isBrowser","environmentIsAvailable","createAuthClient","params","authUrl","HasuraAuthClient","createFunctionsClient","functionsUrl","NhostFunctionsClient","__publicField","url","adminSecret","axios","data","config","headers","res","error","accessToken","createGraphqlClient","graphqlUrl","NhostGraphqlClient","document","variables","operationName","responseData","print","createStorageClient","storageUrl","HasuraStorageClient","createNhostClient","NhostClient","refreshIntervalTime","clientStorageGetter","clientStorageSetter","clientStorage","clientStorageType","autoRefreshToken","autoSignIn","devTools","start","urlParams","_a","_event","session","newValue"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/utils/helpers.ts","../src/clients/auth.ts","../src/clients/functions.ts","../src/clients/graphql.ts","../src/clients/storage.ts","../src/clients/nhost.ts"],"sourcesContent":["import { NhostClientConstructorParams } from './types'\n\n// a port can be a number or a placeholder string with leading and trailing double underscores, f.e. \"8080\" or \"__PLACEHOLDER_NAME__\"\nconst LOCALHOST_REGEX = /^((?<protocol>http[s]?):\\/\\/)?(?<host>localhost)(:(?<port>(\\d+|__\\w+__)))?$/\n\n/**\n * `backendUrl` should now be used only when self-hosting\n * `subdomain` and `region` should be used instead when using the Nhost platform\n * `\n * @param backendOrSubdomain\n * @param service\n * @returns\n */\nexport function urlFromSubdomain(\n backendOrSubdomain: Pick<NhostClientConstructorParams, 'region' | 'subdomain' | 'backendUrl'>,\n service: string\n): string {\n const { backendUrl, subdomain, region } = backendOrSubdomain\n\n if (backendUrl) {\n return `${backendUrl}/v1/${service}`\n }\n\n if (!subdomain) {\n throw new Error('Either `backendUrl` or `subdomain` must be set.')\n }\n\n // check if subdomain is [http[s]://]localhost[:port]\n const subdomainLocalhostFound = subdomain.match(LOCALHOST_REGEX)\n if (subdomainLocalhostFound?.groups) {\n const { protocol = 'http', host, port = 1337 } = subdomainLocalhostFound.groups\n\n const urlFromEnv = getValueFromEnv(service)\n if (urlFromEnv) {\n return urlFromEnv\n }\n return `${protocol}://${host}:${port}/v1/${service}`\n }\n\n if (!region) {\n throw new Error('`region` must be set when using a `subdomain` other than \"localhost\".')\n }\n\n return `https://${subdomain}.${service}.${region}.nhost.run/v1`\n}\n\n/**\n *\n * @returns whether the code is running in a browser\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined'\n}\n\n/**\n *\n * @returns whether the code is running in a Node.js environment\n */\nfunction environmentIsAvailable() {\n return typeof process !== 'undefined' && process.env\n}\n\n/**\n *\n * @param service auth | storage | graphql | functions\n * @returns the service's url if the corresponding env var is set\n * NHOST_${service}_URL\n */\nfunction getValueFromEnv(service: string) {\n if (isBrowser() || !environmentIsAvailable()) {\n return null\n }\n\n return process.env[`NHOST_${service.toUpperCase()}_URL`]\n}\n","import { HasuraAuthClient } from '@nhost/hasura-auth-js'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { NhostClientConstructorParams } from '../utils/types'\n\n/**\n * Creates a client for Auth from either a subdomain or a URL\n */\nexport function createAuthClient(params: NhostClientConstructorParams) {\n const authUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'auth')\n : params.authUrl\n\n if (!authUrl) {\n throw new Error('Please provide `subdomain` or `authUrl`.')\n }\n\n return new HasuraAuthClient({ url: authUrl, ...params })\n}\n","import axios, {\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n RawAxiosRequestHeaders\n} from 'axios'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { FunctionCallResponse, NhostClientConstructorParams } from '../utils/types'\nexport interface NhostFunctionsConstructorParams {\n /**\n * Serverless Functions endpoint.\n */\n url: string\n /**\n * Admin secret. When set, it is sent as an `x-hasura-admin-secret` header for all requests.\n */\n adminSecret?: string\n}\n\n/**\n * Creates a client for Functions from either a subdomain or a URL\n */\nexport function createFunctionsClient(params: NhostClientConstructorParams) {\n const functionsUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'functions')\n : params.functionsUrl\n\n if (!functionsUrl) {\n throw new Error('Please provide `subdomain` or `functionsUrl`.')\n }\n\n return new NhostFunctionsClient({ url: functionsUrl, ...params })\n}\n\n/**\n * @alias Functions\n */\nexport class NhostFunctionsClient {\n readonly url: string\n private instance: AxiosInstance\n private accessToken: string | null\n private adminSecret?: string\n\n constructor(params: NhostFunctionsConstructorParams) {\n const { url, adminSecret } = params\n\n this.url = url\n this.accessToken = null\n this.adminSecret = adminSecret\n this.instance = axios.create({\n baseURL: url\n })\n }\n\n /**\n * Use `nhost.functions.call` to call (sending a POST request to) a serverless function.\n *\n * @example\n * ```ts\n * await nhost.functions.call('send-welcome-email', { email: 'joe@example.com', name: 'Joe Doe' })\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/functions/call\n */\n async call<T = unknown, D = any>(\n url: string,\n data: D,\n config?: AxiosRequestConfig\n ): Promise<FunctionCallResponse<T>> {\n const headers = {\n ...this.generateAccessTokenHeaders(),\n ...config?.headers\n }\n\n let res\n try {\n res = await this.instance.post<T, AxiosResponse<T>, D>(url, data, { ...config, headers })\n } catch (error) {\n if (error instanceof Error) {\n return { res: null, error }\n }\n }\n\n if (!res) {\n return {\n res: null,\n error: new Error('Unable to make post request to funtion')\n }\n }\n\n return { res, error: null }\n }\n\n /**\n * Use `nhost.functions.setAccessToken` to a set an access token to be used in subsequent functions requests. Note that if you're signin in users with `nhost.auth.signIn()` the access token will be set automatically.\n *\n * @example\n * ```ts\n * nhost.functions.setAccessToken('some-access-token')\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/functions/set-access-token\n */\n setAccessToken(accessToken: string | undefined) {\n if (!accessToken) {\n this.accessToken = null\n return\n }\n\n this.accessToken = accessToken\n }\n\n private generateAccessTokenHeaders(): RawAxiosRequestHeaders {\n if (this.adminSecret) {\n return {\n 'x-hasura-admin-secret': this.adminSecret\n }\n }\n if (this.accessToken) {\n return {\n Authorization: `Bearer ${this.accessToken}`\n }\n }\n return {}\n }\n}\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { DocumentNode, print } from 'graphql'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport {\n GraphqlRequestResponse,\n GraphqlResponse,\n NhostClientConstructorParams\n} from '../utils/types'\n\nexport interface NhostGraphqlConstructorParams {\n /**\n * GraphQL endpoint.\n */\n url: string\n /**\n * Admin secret. When set, it is sent as an `x-hasura-admin-secret` header for all requests.\n */\n adminSecret?: string\n}\n\n/**\n * Creates a client for GraphQL from either a subdomain or a URL\n */\nexport function createGraphqlClient(params: NhostClientConstructorParams) {\n const graphqlUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'graphql')\n : params.graphqlUrl\n\n if (!graphqlUrl) {\n throw new Error('Please provide `subdomain` or `graphqlUrl`.')\n }\n\n return new NhostGraphqlClient({ url: graphqlUrl, ...params })\n}\n\n/**\n * @alias GraphQL\n */\nexport class NhostGraphqlClient {\n readonly url: string\n private instance: AxiosInstance\n private accessToken: string | null\n private adminSecret?: string\n\n constructor(params: NhostGraphqlConstructorParams) {\n const { url, adminSecret } = params\n\n this.url = url\n this.accessToken = null\n this.adminSecret = adminSecret\n this.instance = axios.create({\n baseURL: url\n })\n }\n\n /**\n * Use `nhost.graphql.request` to send a GraphQL request. For more serious GraphQL usage we recommend using a GraphQL client such as Apollo Client (https://www.apollographql.com/docs/react).\n *\n * @example\n * ```ts\n * const CUSTOMERS = gql`\n * query {\n * customers {\n * id\n * name\n * }\n * }\n * `\n * const { data, error } = await nhost.graphql.request(CUSTOMERS)\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/request\n */\n async request<T = any, V = any>(\n document: string | DocumentNode,\n variables?: V,\n config?: AxiosRequestConfig\n ): Promise<GraphqlRequestResponse<T>> {\n // add auth headers if any\n const headers = {\n ...this.generateAccessTokenHeaders(),\n ...config?.headers,\n 'Accept-Encoding': '*'\n }\n\n try {\n const operationName = ''\n const res = await this.instance.post<GraphqlResponse<T>>(\n '',\n {\n operationName: operationName || undefined,\n query: typeof document === 'string' ? document : print(document),\n variables\n },\n { ...config, headers }\n )\n\n const responseData = res.data\n const { data } = responseData\n\n if (responseData.errors) {\n return {\n data: null,\n error: responseData.errors\n }\n }\n\n if (typeof data !== 'object' || Array.isArray(data) || data === null) {\n return {\n data: null,\n error: new Error('incorrect response data from GraphQL server')\n }\n }\n\n return { data, error: null }\n } catch (error) {\n if (error instanceof Error) {\n return { data: null, error }\n }\n console.error(error)\n return {\n data: null,\n error: new Error('Unable to get do GraphQL request')\n }\n }\n }\n\n /**\n * Use `nhost.graphql.getUrl` to get the GraphQL URL.\n *\n * @example\n * ```ts\n * const url = nhost.graphql.getUrl();\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/get-url\n */\n getUrl(): string {\n return this.url\n }\n\n /**\n * Use `nhost.graphql.setAccessToken` to a set an access token to be used in subsequent graphql requests. Note that if you're signin in users with `nhost.auth.signIn()` the access token will be set automatically.\n *\n * @example\n * ```ts\n * nhost.graphql.setAccessToken('some-access-token')\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/set-access-token\n */\n setAccessToken(accessToken: string | undefined) {\n if (!accessToken) {\n this.accessToken = null\n return\n }\n\n this.accessToken = accessToken\n }\n\n private generateAccessTokenHeaders(): Record<string, string> {\n if (this.adminSecret) {\n return {\n 'x-hasura-admin-secret': this.adminSecret\n }\n }\n if (this.accessToken) {\n return {\n Authorization: `Bearer ${this.accessToken}`\n }\n }\n return {}\n }\n}\n","import { HasuraStorageClient } from '@nhost/hasura-storage-js'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { NhostClientConstructorParams } from '../utils/types'\n\n/**\n * Creates a client for Storage from either a subdomain or a URL\n */\nexport function createStorageClient(params: NhostClientConstructorParams) {\n const storageUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'storage')\n : params.storageUrl\n\n if (!storageUrl) {\n throw new Error('Please provide `subdomain` or `storageUrl`.')\n }\n\n return new HasuraStorageClient({ url: storageUrl, ...params })\n}\n","import { HasuraAuthClient } from '@nhost/hasura-auth-js'\nimport { HasuraStorageClient } from '@nhost/hasura-storage-js'\n\nimport { NhostClientConstructorParams } from '../utils/types'\n\nimport { createAuthClient } from './auth'\nimport { createFunctionsClient, NhostFunctionsClient } from './functions'\nimport { createGraphqlClient, NhostGraphqlClient } from './graphql'\nimport { createStorageClient } from './storage'\n\nexport const createNhostClient = (params: NhostClientConstructorParams) => new NhostClient(params)\nexport class NhostClient {\n auth: HasuraAuthClient\n storage: HasuraStorageClient\n functions: NhostFunctionsClient\n graphql: NhostGraphqlClient\n private _adminSecret?: string\n readonly devTools?: boolean\n\n /**\n * Nhost Client\n *\n * @example\n * ```ts\n * const nhost = new NhostClient({ subdomain, region });\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript\n */\n constructor({\n refreshIntervalTime,\n clientStorageGetter,\n clientStorageSetter,\n clientStorage,\n clientStorageType,\n autoRefreshToken,\n autoSignIn,\n adminSecret,\n devTools,\n start = true,\n ...urlParams\n }: NhostClientConstructorParams) {\n // * Set clients for all services\n this.auth = createAuthClient({\n refreshIntervalTime,\n clientStorageGetter,\n clientStorageSetter,\n clientStorage,\n clientStorageType,\n autoRefreshToken,\n autoSignIn,\n start,\n ...urlParams\n })\n this.storage = createStorageClient({ adminSecret, ...urlParams })\n this.functions = createFunctionsClient({ adminSecret, ...urlParams })\n this.graphql = createGraphqlClient({ adminSecret, ...urlParams })\n\n this.auth.client.onStart(() => {\n // * Set current token if token is already accessable\n const accessToken = this.auth.getAccessToken()\n this.storage.setAccessToken(accessToken)\n this.functions.setAccessToken(accessToken)\n this.graphql.setAccessToken(accessToken)\n // * Set access token when signing out\n this.auth.onAuthStateChanged((_event, session) => {\n if (_event === 'SIGNED_OUT') {\n this.storage.setAccessToken(undefined)\n this.functions.setAccessToken(undefined)\n this.graphql.setAccessToken(undefined)\n }\n })\n\n // * Update access token for clients, including when signin in\n this.auth.onTokenChanged((session) => {\n const accessToken = session?.accessToken\n this.storage.setAccessToken(accessToken)\n this.functions.setAccessToken(accessToken)\n this.graphql.setAccessToken(accessToken)\n })\n })\n this._adminSecret = adminSecret\n this.devTools = devTools\n }\n\n get adminSecret(): string | undefined {\n return this._adminSecret\n }\n\n set adminSecret(newValue: string | undefined) {\n this._adminSecret = newValue\n this.storage.setAdminSecret(newValue)\n // TODO inconsistent API: storage can change admin secret, but functions/graphql cannot\n // this.functions.setAdminSecret(newValue)\n // this.graphql.setAdminSecret(newValue)\n }\n}\n"],"names":["LOCALHOST_REGEX","urlFromSubdomain","backendOrSubdomain","service","backendUrl","subdomain","region","subdomainLocalhostFound","protocol","host","port","urlFromEnv","getValueFromEnv","isBrowser","environmentIsAvailable","createAuthClient","params","authUrl","HasuraAuthClient","createFunctionsClient","functionsUrl","NhostFunctionsClient","__publicField","url","adminSecret","axios","data","config","headers","res","error","accessToken","createGraphqlClient","graphqlUrl","NhostGraphqlClient","document","variables","operationName","responseData","print","createStorageClient","storageUrl","HasuraStorageClient","createNhostClient","NhostClient","refreshIntervalTime","clientStorageGetter","clientStorageSetter","clientStorage","clientStorageType","autoRefreshToken","autoSignIn","devTools","start","urlParams","_event","session","newValue"],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -1,69 +1,69 @@
1
- var g = Object.defineProperty;
2
- var A = (t, e, r) => e in t ? g(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
- var o = (t, e, r) => (A(t, typeof e != "symbol" ? e + "" : e, r), r);
1
+ var A = Object.defineProperty;
2
+ var w = (t, e, r) => e in t ? A(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
+ var o = (t, e, r) => (w(t, typeof e != "symbol" ? e + "" : e, r), r);
4
4
  import { HasuraAuthClient as U } from "@nhost/hasura-auth-js";
5
- import T from "axios";
5
+ import p from "axios";
6
6
  import { print as b } from "graphql";
7
7
  import { HasuraStorageClient as m } from "@nhost/hasura-storage-js";
8
- const w = /^((?<protocol>http[s]?):\/\/)?(?<host>localhost)(:(?<port>\d+))?$/;
9
- function f(t, e) {
10
- const { backendUrl: r, subdomain: n, region: a } = t;
8
+ const S = /^((?<protocol>http[s]?):\/\/)?(?<host>localhost)(:(?<port>(\d+|__\w+__)))?$/;
9
+ function k(t, e) {
10
+ const { backendUrl: r, subdomain: n, region: c } = t;
11
11
  if (r)
12
12
  return `${r}/v1/${e}`;
13
13
  if (!n)
14
14
  throw new Error("Either `backendUrl` or `subdomain` must be set.");
15
- const s = n.match(w);
15
+ const s = n.match(S);
16
16
  if (s != null && s.groups) {
17
- const { protocol: u = "http", host: h, port: i = 1337 } = s.groups, l = E(e);
18
- return l || `${u}://${h}:${i}/v1/${e}`;
17
+ const { protocol: a = "http", host: u, port: i = 1337 } = s.groups, l = q(e);
18
+ return l || `${a}://${u}:${i}/v1/${e}`;
19
19
  }
20
- if (!a)
20
+ if (!c)
21
21
  throw new Error('`region` must be set when using a `subdomain` other than "localhost".');
22
- return `https://${n}.${e}.${a}.nhost.run/v1`;
22
+ return `https://${n}.${e}.${c}.nhost.run/v1`;
23
23
  }
24
- function S() {
24
+ function E() {
25
25
  return typeof window < "u";
26
26
  }
27
27
  function v() {
28
28
  return typeof process < "u" && process.env;
29
29
  }
30
- function E(t) {
31
- return S() || !v() ? null : process.env[`NHOST_${t.toUpperCase()}_URL`];
32
- }
33
30
  function q(t) {
34
- const e = "subdomain" in t || "backendUrl" in t ? f(t, "auth") : t.authUrl;
31
+ return E() || !v() ? null : process.env[`NHOST_${t.toUpperCase()}_URL`];
32
+ }
33
+ function C(t) {
34
+ const e = "subdomain" in t || "backendUrl" in t ? k(t, "auth") : t.authUrl;
35
35
  if (!e)
36
36
  throw new Error("Please provide `subdomain` or `authUrl`.");
37
37
  return new U({ url: e, ...t });
38
38
  }
39
- function C(t) {
40
- const e = "subdomain" in t || "backendUrl" in t ? f(t, "functions") : t.functionsUrl;
39
+ function $(t) {
40
+ const e = "subdomain" in t || "backendUrl" in t ? k(t, "functions") : t.functionsUrl;
41
41
  if (!e)
42
42
  throw new Error("Please provide `subdomain` or `functionsUrl`.");
43
- return new $({ url: e, ...t });
43
+ return new _({ url: e, ...t });
44
44
  }
45
- class $ {
45
+ class _ {
46
46
  constructor(e) {
47
47
  o(this, "url");
48
48
  o(this, "instance");
49
49
  o(this, "accessToken");
50
50
  o(this, "adminSecret");
51
51
  const { url: r, adminSecret: n } = e;
52
- this.url = r, this.accessToken = null, this.adminSecret = n, this.instance = T.create({
52
+ this.url = r, this.accessToken = null, this.adminSecret = n, this.instance = p.create({
53
53
  baseURL: r
54
54
  });
55
55
  }
56
56
  async call(e, r, n) {
57
- const a = {
57
+ const c = {
58
58
  ...this.generateAccessTokenHeaders(),
59
59
  ...n == null ? void 0 : n.headers
60
60
  };
61
61
  let s;
62
62
  try {
63
- s = await this.instance.post(e, r, { ...n, headers: a });
64
- } catch (u) {
65
- if (u instanceof Error)
66
- return { res: null, error: u };
63
+ s = await this.instance.post(e, r, { ...n, headers: c });
64
+ } catch (a) {
65
+ if (a instanceof Error)
66
+ return { res: null, error: a };
67
67
  }
68
68
  return s ? { res: s, error: null } : {
69
69
  res: null,
@@ -86,7 +86,7 @@ class $ {
86
86
  }
87
87
  }
88
88
  function y(t) {
89
- const e = "subdomain" in t || "backendUrl" in t ? f(t, "graphql") : t.graphqlUrl;
89
+ const e = "subdomain" in t || "backendUrl" in t ? k(t, "graphql") : t.graphqlUrl;
90
90
  if (!e)
91
91
  throw new Error("Please provide `subdomain` or `graphqlUrl`.");
92
92
  return new H({ url: e, ...t });
@@ -98,28 +98,29 @@ class H {
98
98
  o(this, "accessToken");
99
99
  o(this, "adminSecret");
100
100
  const { url: r, adminSecret: n } = e;
101
- this.url = r, this.accessToken = null, this.adminSecret = n, this.instance = T.create({
101
+ this.url = r, this.accessToken = null, this.adminSecret = n, this.instance = p.create({
102
102
  baseURL: r
103
103
  });
104
104
  }
105
105
  async request(e, r, n) {
106
- const a = {
106
+ const c = {
107
107
  ...this.generateAccessTokenHeaders(),
108
- ...n == null ? void 0 : n.headers
108
+ ...n == null ? void 0 : n.headers,
109
+ "Accept-Encoding": "*"
109
110
  };
110
111
  try {
111
- const s = "", h = (await this.instance.post(
112
+ const s = "", u = (await this.instance.post(
112
113
  "",
113
114
  {
114
115
  operationName: s || void 0,
115
116
  query: typeof e == "string" ? e : b(e),
116
117
  variables: r
117
118
  },
118
- { ...n, headers: a }
119
- )).data, { data: i } = h;
120
- return h.errors ? {
119
+ { ...n, headers: c }
120
+ )).data, { data: i } = u;
121
+ return u.errors ? {
121
122
  data: null,
122
- error: h.errors
123
+ error: u.errors
123
124
  } : typeof i != "object" || Array.isArray(i) || i === null ? {
124
125
  data: null,
125
126
  error: new Error("incorrect response data from GraphQL server")
@@ -150,24 +151,24 @@ class H {
150
151
  }
151
152
  }
152
153
  function N(t) {
153
- const e = "subdomain" in t || "backendUrl" in t ? f(t, "storage") : t.storageUrl;
154
+ const e = "subdomain" in t || "backendUrl" in t ? k(t, "storage") : t.storageUrl;
154
155
  if (!e)
155
156
  throw new Error("Please provide `subdomain` or `storageUrl`.");
156
157
  return new m({ url: e, ...t });
157
158
  }
158
- const B = (t) => new _(t);
159
- class _ {
159
+ const B = (t) => new G(t);
160
+ class G {
160
161
  constructor({
161
162
  refreshIntervalTime: e,
162
163
  clientStorageGetter: r,
163
164
  clientStorageSetter: n,
164
- clientStorage: a,
165
+ clientStorage: c,
165
166
  clientStorageType: s,
166
- autoRefreshToken: u,
167
- autoSignIn: h,
167
+ autoRefreshToken: a,
168
+ autoSignIn: u,
168
169
  adminSecret: i,
169
170
  devTools: l,
170
- start: p = !0,
171
+ start: g = !0,
171
172
  ...d
172
173
  }) {
173
174
  o(this, "auth");
@@ -176,22 +177,23 @@ class _ {
176
177
  o(this, "graphql");
177
178
  o(this, "_adminSecret");
178
179
  o(this, "devTools");
179
- var k;
180
- this.auth = q({
180
+ this.auth = C({
181
181
  refreshIntervalTime: e,
182
182
  clientStorageGetter: r,
183
183
  clientStorageSetter: n,
184
- clientStorage: a,
184
+ clientStorage: c,
185
185
  clientStorageType: s,
186
- autoRefreshToken: u,
187
- autoSignIn: h,
188
- start: p,
186
+ autoRefreshToken: a,
187
+ autoSignIn: u,
188
+ start: g,
189
189
  ...d
190
- }), this.storage = N({ adminSecret: i, ...d }), this.functions = C({ adminSecret: i, ...d }), this.graphql = y({ adminSecret: i, ...d }), this.storage.setAccessToken(this.auth.getAccessToken()), this.functions.setAccessToken(this.auth.getAccessToken()), this.graphql.setAccessToken(this.auth.getAccessToken()), (k = this.auth.client) == null || k.onStart(() => {
191
- this.auth.onAuthStateChanged((c, G) => {
192
- c === "SIGNED_OUT" && (this.storage.setAccessToken(void 0), this.functions.setAccessToken(void 0), this.graphql.setAccessToken(void 0));
193
- }), this.auth.onTokenChanged((c) => {
194
- this.storage.setAccessToken(c == null ? void 0 : c.accessToken), this.functions.setAccessToken(c == null ? void 0 : c.accessToken), this.graphql.setAccessToken(c == null ? void 0 : c.accessToken);
190
+ }), this.storage = N({ adminSecret: i, ...d }), this.functions = $({ adminSecret: i, ...d }), this.graphql = y({ adminSecret: i, ...d }), this.auth.client.onStart(() => {
191
+ const T = this.auth.getAccessToken();
192
+ this.storage.setAccessToken(T), this.functions.setAccessToken(T), this.graphql.setAccessToken(T), this.auth.onAuthStateChanged((h, f) => {
193
+ h === "SIGNED_OUT" && (this.storage.setAccessToken(void 0), this.functions.setAccessToken(void 0), this.graphql.setAccessToken(void 0));
194
+ }), this.auth.onTokenChanged((h) => {
195
+ const f = h == null ? void 0 : h.accessToken;
196
+ this.storage.setAccessToken(f), this.functions.setAccessToken(f), this.graphql.setAccessToken(f);
195
197
  });
196
198
  }), this._adminSecret = i, this.devTools = l;
197
199
  }
@@ -203,11 +205,11 @@ class _ {
203
205
  }
204
206
  }
205
207
  export {
206
- _ as NhostClient,
207
- $ as NhostFunctionsClient,
208
+ G as NhostClient,
209
+ _ as NhostFunctionsClient,
208
210
  H as NhostGraphqlClient,
209
- q as createAuthClient,
210
- C as createFunctionsClient,
211
+ C as createAuthClient,
212
+ $ as createFunctionsClient,
211
213
  y as createGraphqlClient,
212
214
  B as createNhostClient,
213
215
  N as createStorageClient
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils/helpers.ts","../src/clients/auth.ts","../src/clients/functions.ts","../src/clients/graphql.ts","../src/clients/storage.ts","../src/clients/nhost.ts"],"sourcesContent":["import { NhostClientConstructorParams } from './types'\n\nconst LOCALHOST_REGEX = /^((?<protocol>http[s]?):\\/\\/)?(?<host>localhost)(:(?<port>\\d+))?$/\n\n/**\n * `backendUrl` should now be used only when self-hosting\n * `subdomain` and `region` should be used instead when using the Nhost platform\n * `\n * @param backendOrSubdomain\n * @param service\n * @returns\n */\nexport function urlFromSubdomain(\n backendOrSubdomain: Pick<NhostClientConstructorParams, 'region' | 'subdomain' | 'backendUrl'>,\n service: string\n): string {\n const { backendUrl, subdomain, region } = backendOrSubdomain\n\n if (backendUrl) {\n return `${backendUrl}/v1/${service}`\n }\n\n if (!subdomain) {\n throw new Error('Either `backendUrl` or `subdomain` must be set.')\n }\n\n // check if subdomain is [http[s]://]localhost[:port]\n const subdomainLocalhostFound = subdomain.match(LOCALHOST_REGEX)\n if (subdomainLocalhostFound?.groups) {\n const { protocol = 'http', host, port = 1337 } = subdomainLocalhostFound.groups\n\n const urlFromEnv = getValueFromEnv(service)\n if (urlFromEnv) {\n return urlFromEnv\n }\n return `${protocol}://${host}:${port}/v1/${service}`\n }\n\n if (!region) {\n throw new Error('`region` must be set when using a `subdomain` other than \"localhost\".')\n }\n\n return `https://${subdomain}.${service}.${region}.nhost.run/v1`\n}\n\n/**\n *\n * @returns whether the code is running in a browser\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined'\n}\n\n/**\n *\n * @returns whether the code is running in a Node.js environment\n */\nfunction environmentIsAvailable() {\n return typeof process !== 'undefined' && process.env\n}\n\n/**\n *\n * @param service auth | storage | graphql | functions\n * @returns the service's url if the corresponding env var is set\n * NHOST_${service}_URL\n */\nfunction getValueFromEnv(service: string) {\n if (isBrowser() || !environmentIsAvailable()) {\n return null\n }\n\n return process.env[`NHOST_${service.toUpperCase()}_URL`]\n}\n","import { HasuraAuthClient } from '@nhost/hasura-auth-js'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { NhostClientConstructorParams } from '../utils/types'\n\n/**\n * Creates a client for Auth from either a subdomain or a URL\n */\nexport function createAuthClient(params: NhostClientConstructorParams) {\n const authUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'auth')\n : params.authUrl\n\n if (!authUrl) {\n throw new Error('Please provide `subdomain` or `authUrl`.')\n }\n\n return new HasuraAuthClient({ url: authUrl, ...params })\n}\n","import axios, {\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n RawAxiosRequestHeaders\n} from 'axios'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { FunctionCallResponse, NhostClientConstructorParams } from '../utils/types'\nexport interface NhostFunctionsConstructorParams {\n /**\n * Serverless Functions endpoint.\n */\n url: string\n /**\n * Admin secret. When set, it is sent as an `x-hasura-admin-secret` header for all requests.\n */\n adminSecret?: string\n}\n\n/**\n * Creates a client for Functions from either a subdomain or a URL\n */\nexport function createFunctionsClient(params: NhostClientConstructorParams) {\n const functionsUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'functions')\n : params.functionsUrl\n\n if (!functionsUrl) {\n throw new Error('Please provide `subdomain` or `functionsUrl`.')\n }\n\n return new NhostFunctionsClient({ url: functionsUrl, ...params })\n}\n\n/**\n * @alias Functions\n */\nexport class NhostFunctionsClient {\n private url: string\n private instance: AxiosInstance\n private accessToken: string | null\n private adminSecret?: string\n\n constructor(params: NhostFunctionsConstructorParams) {\n const { url, adminSecret } = params\n\n this.url = url\n this.accessToken = null\n this.adminSecret = adminSecret\n this.instance = axios.create({\n baseURL: url\n })\n }\n\n /**\n * Use `nhost.functions.call` to call (sending a POST request to) a serverless function.\n *\n * @example\n * ```ts\n * await nhost.functions.call('send-welcome-email', { email: 'joe@example.com', name: 'Joe Doe' })\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/functions/call\n */\n async call<T = unknown, D = any>(\n url: string,\n data: D,\n config?: AxiosRequestConfig\n ): Promise<FunctionCallResponse<T>> {\n const headers = {\n ...this.generateAccessTokenHeaders(),\n ...config?.headers\n }\n\n let res\n try {\n res = await this.instance.post<T, AxiosResponse<T>, D>(url, data, { ...config, headers })\n } catch (error) {\n if (error instanceof Error) {\n return { res: null, error }\n }\n }\n\n if (!res) {\n return {\n res: null,\n error: new Error('Unable to make post request to funtion')\n }\n }\n\n return { res, error: null }\n }\n\n /**\n * Use `nhost.functions.setAccessToken` to a set an access token to be used in subsequent functions requests. Note that if you're signin in users with `nhost.auth.signIn()` the access token will be set automatically.\n *\n * @example\n * ```ts\n * nhost.functions.setAccessToken('some-access-token')\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/functions/set-access-token\n */\n setAccessToken(accessToken: string | undefined) {\n if (!accessToken) {\n this.accessToken = null\n return\n }\n\n this.accessToken = accessToken\n }\n\n private generateAccessTokenHeaders(): RawAxiosRequestHeaders {\n if (this.adminSecret) {\n return {\n 'x-hasura-admin-secret': this.adminSecret\n }\n }\n if (this.accessToken) {\n return {\n Authorization: `Bearer ${this.accessToken}`\n }\n }\n return {}\n }\n}\n","import axios, { AxiosInstance, AxiosRequestConfig, RawAxiosRequestHeaders } from 'axios'\nimport { DocumentNode, print } from 'graphql'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport {\n GraphqlRequestResponse,\n GraphqlResponse,\n NhostClientConstructorParams\n} from '../utils/types'\n\nexport interface NhostGraphqlConstructorParams {\n /**\n * GraphQL endpoint.\n */\n url: string\n /**\n * Admin secret. When set, it is sent as an `x-hasura-admin-secret` header for all requests.\n */\n adminSecret?: string\n}\n\n/**\n * Creates a client for GraphQL from either a subdomain or a URL\n */\nexport function createGraphqlClient(params: NhostClientConstructorParams) {\n const graphqlUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'graphql')\n : params.graphqlUrl\n\n if (!graphqlUrl) {\n throw new Error('Please provide `subdomain` or `graphqlUrl`.')\n }\n\n return new NhostGraphqlClient({ url: graphqlUrl, ...params })\n}\n\n/**\n * @alias GraphQL\n */\nexport class NhostGraphqlClient {\n private url: string\n private instance: AxiosInstance\n private accessToken: string | null\n private adminSecret?: string\n\n constructor(params: NhostGraphqlConstructorParams) {\n const { url, adminSecret } = params\n\n this.url = url\n this.accessToken = null\n this.adminSecret = adminSecret\n this.instance = axios.create({\n baseURL: url\n })\n }\n\n /**\n * Use `nhost.graphql.request` to send a GraphQL request. For more serious GraphQL usage we recommend using a GraphQL client such as Apollo Client (https://www.apollographql.com/docs/react).\n *\n * @example\n * ```ts\n * const CUSTOMERS = gql`\n * query {\n * customers {\n * id\n * name\n * }\n * }\n * `\n * const { data, error } = await nhost.graphql.request(CUSTOMERS)\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/request\n */\n async request<T = any, V = any>(\n document: string | DocumentNode,\n variables?: V,\n config?: AxiosRequestConfig\n ): Promise<GraphqlRequestResponse<T>> {\n // add auth headers if any\n const headers = {\n ...this.generateAccessTokenHeaders(),\n ...config?.headers\n }\n\n try {\n const operationName = ''\n const res = await this.instance.post<GraphqlResponse<T>>(\n '',\n {\n operationName: operationName || undefined,\n query: typeof document === 'string' ? document : print(document),\n variables\n },\n { ...config, headers }\n )\n\n const responseData = res.data\n const { data } = responseData\n\n if (responseData.errors) {\n return {\n data: null,\n error: responseData.errors\n }\n }\n\n if (typeof data !== 'object' || Array.isArray(data) || data === null) {\n return {\n data: null,\n error: new Error('incorrect response data from GraphQL server')\n }\n }\n\n return { data, error: null }\n } catch (error) {\n if (error instanceof Error) {\n return { data: null, error }\n }\n console.error(error)\n return {\n data: null,\n error: new Error('Unable to get do GraphQL request')\n }\n }\n }\n\n /**\n * Use `nhost.graphql.getUrl` to get the GraphQL URL.\n *\n * @example\n * ```ts\n * const url = nhost.graphql.getUrl();\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/get-url\n */\n getUrl(): string {\n return this.url\n }\n\n /**\n * Use `nhost.graphql.setAccessToken` to a set an access token to be used in subsequent graphql requests. Note that if you're signin in users with `nhost.auth.signIn()` the access token will be set automatically.\n *\n * @example\n * ```ts\n * nhost.graphql.setAccessToken('some-access-token')\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/set-access-token\n */\n setAccessToken(accessToken: string | undefined) {\n if (!accessToken) {\n this.accessToken = null\n return\n }\n\n this.accessToken = accessToken\n }\n\n private generateAccessTokenHeaders(): RawAxiosRequestHeaders {\n if (this.adminSecret) {\n return {\n 'x-hasura-admin-secret': this.adminSecret\n }\n }\n if (this.accessToken) {\n return {\n Authorization: `Bearer ${this.accessToken}`\n }\n }\n return {}\n }\n}\n","import { HasuraStorageClient } from '@nhost/hasura-storage-js'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { NhostClientConstructorParams } from '../utils/types'\n\n/**\n * Creates a client for Storage from either a subdomain or a URL\n */\nexport function createStorageClient(params: NhostClientConstructorParams) {\n const storageUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'storage')\n : params.storageUrl\n\n if (!storageUrl) {\n throw new Error('Please provide `subdomain` or `storageUrl`.')\n }\n\n return new HasuraStorageClient({ url: storageUrl, ...params })\n}\n","import { HasuraAuthClient } from '@nhost/hasura-auth-js'\nimport { HasuraStorageClient } from '@nhost/hasura-storage-js'\n\nimport { NhostClientConstructorParams } from '../utils/types'\n\nimport { createAuthClient } from './auth'\nimport { createFunctionsClient, NhostFunctionsClient } from './functions'\nimport { createGraphqlClient, NhostGraphqlClient } from './graphql'\nimport { createStorageClient } from './storage'\n\nexport const createNhostClient = (params: NhostClientConstructorParams) => new NhostClient(params)\nexport class NhostClient {\n auth: HasuraAuthClient\n storage: HasuraStorageClient\n functions: NhostFunctionsClient\n graphql: NhostGraphqlClient\n private _adminSecret?: string\n readonly devTools?: boolean\n\n /**\n * Nhost Client\n *\n * @example\n * ```ts\n * const nhost = new NhostClient({ subdomain, region });\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript\n */\n constructor({\n refreshIntervalTime,\n clientStorageGetter,\n clientStorageSetter,\n clientStorage,\n clientStorageType,\n autoRefreshToken,\n autoSignIn,\n adminSecret,\n devTools,\n start = true,\n ...urlParams\n }: NhostClientConstructorParams) {\n // * Set clients for all services\n this.auth = createAuthClient({\n refreshIntervalTime,\n clientStorageGetter,\n clientStorageSetter,\n clientStorage,\n clientStorageType,\n autoRefreshToken,\n autoSignIn,\n start,\n ...urlParams\n })\n this.storage = createStorageClient({ adminSecret, ...urlParams })\n this.functions = createFunctionsClient({ adminSecret, ...urlParams })\n this.graphql = createGraphqlClient({ adminSecret, ...urlParams })\n\n // * Set current token if token is already accessable\n this.storage.setAccessToken(this.auth.getAccessToken())\n this.functions.setAccessToken(this.auth.getAccessToken())\n this.graphql.setAccessToken(this.auth.getAccessToken())\n\n this.auth.client?.onStart(() => {\n // * Set access token when signing out\n this.auth.onAuthStateChanged((_event, session) => {\n if (_event === 'SIGNED_OUT') {\n this.storage.setAccessToken(undefined)\n this.functions.setAccessToken(undefined)\n this.graphql.setAccessToken(undefined)\n }\n })\n\n // * Update access token for clients, including when signin in\n this.auth.onTokenChanged((session) => {\n this.storage.setAccessToken(session?.accessToken)\n this.functions.setAccessToken(session?.accessToken)\n this.graphql.setAccessToken(session?.accessToken)\n })\n })\n this._adminSecret = adminSecret\n this.devTools = devTools\n }\n\n get adminSecret(): string | undefined {\n return this._adminSecret\n }\n\n set adminSecret(newValue: string | undefined) {\n this._adminSecret = newValue\n this.storage.setAdminSecret(newValue)\n // TODO inconsistent API: storage can change admin secret, but functions/graphql cannot\n // this.functions.setAdminSecret(newValue)\n // this.graphql.setAdminSecret(newValue)\n }\n}\n"],"names":["LOCALHOST_REGEX","urlFromSubdomain","backendOrSubdomain","service","backendUrl","subdomain","region","subdomainLocalhostFound","protocol","host","port","urlFromEnv","getValueFromEnv","isBrowser","environmentIsAvailable","createAuthClient","params","authUrl","HasuraAuthClient","createFunctionsClient","functionsUrl","NhostFunctionsClient","__publicField","url","adminSecret","axios","data","config","headers","res","error","accessToken","createGraphqlClient","graphqlUrl","NhostGraphqlClient","document","variables","operationName","responseData","print","createStorageClient","storageUrl","HasuraStorageClient","createNhostClient","NhostClient","refreshIntervalTime","clientStorageGetter","clientStorageSetter","clientStorage","clientStorageType","autoRefreshToken","autoSignIn","devTools","start","urlParams","_a","_event","session","newValue"],"mappings":";;;;;;;AAEA,MAAMA,IAAkB;AAUR,SAAAC,EACdC,GACAC,GACQ;AACR,QAAM,EAAE,YAAAC,GAAY,WAAAC,GAAW,QAAAC,EAAA,IAAWJ;AAE1C,MAAIE;AACF,WAAO,GAAGA,QAAiBD;AAG7B,MAAI,CAACE;AACG,UAAA,IAAI,MAAM,iDAAiD;AAI7D,QAAAE,IAA0BF,EAAU,MAAML,CAAe;AAC/D,MAAIO,KAAA,QAAAA,EAAyB,QAAQ;AACnC,UAAM,EAAE,UAAAC,IAAW,QAAQ,MAAAC,GAAM,MAAAC,IAAO,SAASH,EAAwB,QAEnEI,IAAaC,EAAgBT,CAAO;AAC1C,WAAIQ,KAGG,GAAGH,OAAcC,KAAQC,QAAWP;AAAA,EAC7C;AAEA,MAAI,CAACG;AACG,UAAA,IAAI,MAAM,uEAAuE;AAGlF,SAAA,WAAWD,KAAaF,KAAWG;AAC5C;AAMA,SAASO,IAAqB;AAC5B,SAAO,OAAO,SAAW;AAC3B;AAMA,SAASC,IAAyB;AACzB,SAAA,OAAO,UAAY,OAAe,QAAQ;AACnD;AAQA,SAASF,EAAgBT,GAAiB;AACxC,SAAIU,EAAU,KAAK,CAACC,MACX,OAGF,QAAQ,IAAI,SAASX,EAAQ,YAAY;AAClD;ACjEO,SAASY,EAAiBC,GAAsC;AAC/D,QAAAC,IACJ,eAAeD,KAAU,gBAAgBA,IACrCf,EAAiBe,GAAQ,MAAM,IAC/BA,EAAO;AAEb,MAAI,CAACC;AACG,UAAA,IAAI,MAAM,0CAA0C;AAG5D,SAAO,IAAIC,EAAiB,EAAE,KAAKD,GAAS,GAAGD,GAAQ;AACzD;ACIO,SAASG,EAAsBH,GAAsC;AACpE,QAAAI,IACJ,eAAeJ,KAAU,gBAAgBA,IACrCf,EAAiBe,GAAQ,WAAW,IACpCA,EAAO;AAEb,MAAI,CAACI;AACG,UAAA,IAAI,MAAM,+CAA+C;AAGjE,SAAO,IAAIC,EAAqB,EAAE,KAAKD,GAAc,GAAGJ,GAAQ;AAClE;AAKO,MAAMK,EAAqB;AAAA,EAMhC,YAAYL,GAAyC;AAL7C,IAAAM,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGA,UAAA,EAAE,KAAAC,GAAK,aAAAC,EAAgB,IAAAR;AAE7B,SAAK,MAAMO,GACX,KAAK,cAAc,MACnB,KAAK,cAAcC,GACd,KAAA,WAAWC,EAAM,OAAO;AAAA,MAC3B,SAASF;AAAA,IAAA,CACV;AAAA,EACH;AAAA,EAYA,MAAM,KACJA,GACAG,GACAC,GACkC;AAClC,UAAMC,IAAU;AAAA,MACd,GAAG,KAAK,2BAA2B;AAAA,MACnC,GAAGD,KAAA,gBAAAA,EAAQ;AAAA,IAAA;AAGT,QAAAE;AACA,QAAA;AACI,MAAAA,IAAA,MAAM,KAAK,SAAS,KAA6BN,GAAKG,GAAM,EAAE,GAAGC,GAAQ,SAAAC,EAAA,CAAS;AAAA,aACjFE;AACP,UAAIA,aAAiB;AACZ,eAAA,EAAE,KAAK,MAAM,OAAAA;IAExB;AAEA,WAAKD,IAOE,EAAE,KAAAA,GAAK,OAAO,SANZ;AAAA,MACL,KAAK;AAAA,MACL,OAAO,IAAI,MAAM,wCAAwC;AAAA,IAAA;AAAA,EAK/D;AAAA,EAYA,eAAeE,GAAiC;AAC9C,QAAI,CAACA,GAAa;AAChB,WAAK,cAAc;AACnB;AAAA,IACF;AAEA,SAAK,cAAcA;AAAA,EACrB;AAAA,EAEQ,6BAAqD;AAC3D,WAAI,KAAK,cACA;AAAA,MACL,yBAAyB,KAAK;AAAA,IAAA,IAG9B,KAAK,cACA;AAAA,MACL,eAAe,UAAU,KAAK;AAAA,IAAA,IAG3B;EACT;AACF;ACvGO,SAASC,EAAoBhB,GAAsC;AAClE,QAAAiB,IACJ,eAAejB,KAAU,gBAAgBA,IACrCf,EAAiBe,GAAQ,SAAS,IAClCA,EAAO;AAEb,MAAI,CAACiB;AACG,UAAA,IAAI,MAAM,6CAA6C;AAG/D,SAAO,IAAIC,EAAmB,EAAE,KAAKD,GAAY,GAAGjB,GAAQ;AAC9D;AAKO,MAAMkB,EAAmB;AAAA,EAM9B,YAAYlB,GAAuC;AAL3C,IAAAM,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGA,UAAA,EAAE,KAAAC,GAAK,aAAAC,EAAgB,IAAAR;AAE7B,SAAK,MAAMO,GACX,KAAK,cAAc,MACnB,KAAK,cAAcC,GACd,KAAA,WAAWC,EAAM,OAAO;AAAA,MAC3B,SAASF;AAAA,IAAA,CACV;AAAA,EACH;AAAA,EAoBA,MAAM,QACJY,GACAC,GACAT,GACoC;AAEpC,UAAMC,IAAU;AAAA,MACd,GAAG,KAAK,2BAA2B;AAAA,MACnC,GAAGD,KAAA,gBAAAA,EAAQ;AAAA,IAAA;AAGT,QAAA;AACF,YAAMU,IAAgB,IAWhBC,KAVM,MAAM,KAAK,SAAS;AAAA,QAC9B;AAAA,QACA;AAAA,UACE,eAAeD,KAAiB;AAAA,UAChC,OAAO,OAAOF,KAAa,WAAWA,IAAWI,EAAMJ,CAAQ;AAAA,UAC/D,WAAAC;AAAA,QACF;AAAA,QACA,EAAE,GAAGT,GAAQ,SAAAC,EAAQ;AAAA,MAAA,GAGE,MACnB,EAAE,MAAAF,EAAS,IAAAY;AAEjB,aAAIA,EAAa,SACR;AAAA,QACL,MAAM;AAAA,QACN,OAAOA,EAAa;AAAA,MAAA,IAIpB,OAAOZ,KAAS,YAAY,MAAM,QAAQA,CAAI,KAAKA,MAAS,OACvD;AAAA,QACL,MAAM;AAAA,QACN,OAAO,IAAI,MAAM,6CAA6C;AAAA,MAAA,IAI3D,EAAE,MAAAA,GAAM,OAAO;aACfI;AACP,aAAIA,aAAiB,QACZ,EAAE,MAAM,MAAM,OAAAA,OAEvB,QAAQ,MAAMA,CAAK,GACZ;AAAA,QACL,MAAM;AAAA,QACN,OAAO,IAAI,MAAM,kCAAkC;AAAA,MAAA;AAAA,IAEvD;AAAA,EACF;AAAA,EAYA,SAAiB;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAYA,eAAeC,GAAiC;AAC9C,QAAI,CAACA,GAAa;AAChB,WAAK,cAAc;AACnB;AAAA,IACF;AAEA,SAAK,cAAcA;AAAA,EACrB;AAAA,EAEQ,6BAAqD;AAC3D,WAAI,KAAK,cACA;AAAA,MACL,yBAAyB,KAAK;AAAA,IAAA,IAG9B,KAAK,cACA;AAAA,MACL,eAAe,UAAU,KAAK;AAAA,IAAA,IAG3B;EACT;AACF;ACtKO,SAASS,EAAoBxB,GAAsC;AAClE,QAAAyB,IACJ,eAAezB,KAAU,gBAAgBA,IACrCf,EAAiBe,GAAQ,SAAS,IAClCA,EAAO;AAEb,MAAI,CAACyB;AACG,UAAA,IAAI,MAAM,6CAA6C;AAG/D,SAAO,IAAIC,EAAoB,EAAE,KAAKD,GAAY,GAAGzB,GAAQ;AAC/D;ACTO,MAAM2B,IAAoB,CAAC3B,MAAyC,IAAI4B,EAAY5B,CAAM;AAC1F,MAAM4B,EAAY;AAAA,EAkBvB,YAAY;AAAA,IACV,qBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAA3B;AAAA,IACA,UAAA4B;AAAA,IACA,OAAAC,IAAQ;AAAA,OACLC;AAAA,EAAA,GAC4B;AA7BjC,IAAAhC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACQ,IAAAA,EAAA;AACC,IAAAA,EAAA;;AA0BP,SAAK,OAAOP,EAAiB;AAAA,MAC3B,qBAAA8B;AAAA,MACA,qBAAAC;AAAA,MACA,qBAAAC;AAAA,MACA,eAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,YAAAC;AAAA,MACA,OAAAE;AAAA,MACA,GAAGC;AAAA,IAAA,CACJ,GACD,KAAK,UAAUd,EAAoB,EAAE,aAAAhB,GAAa,GAAG8B,GAAW,GAChE,KAAK,YAAYnC,EAAsB,EAAE,aAAAK,GAAa,GAAG8B,GAAW,GACpE,KAAK,UAAUtB,EAAoB,EAAE,aAAAR,GAAa,GAAG8B,GAAW,GAGhE,KAAK,QAAQ,eAAe,KAAK,KAAK,gBAAgB,GACtD,KAAK,UAAU,eAAe,KAAK,KAAK,gBAAgB,GACxD,KAAK,QAAQ,eAAe,KAAK,KAAK,gBAAgB,IAEjDC,IAAA,KAAA,KAAK,WAAL,QAAAA,EAAa,QAAQ,MAAM;AAE9B,WAAK,KAAK,mBAAmB,CAACC,GAAQC,MAAY;AAChD,QAAID,MAAW,iBACR,KAAA,QAAQ,eAAe,MAAS,GAChC,KAAA,UAAU,eAAe,MAAS,GAClC,KAAA,QAAQ,eAAe,MAAS;AAAA,MACvC,CACD,GAGI,KAAA,KAAK,eAAe,CAACC,MAAY;AAC/B,aAAA,QAAQ,eAAeA,KAAA,gBAAAA,EAAS,WAAW,GAC3C,KAAA,UAAU,eAAeA,KAAA,gBAAAA,EAAS,WAAW,GAC7C,KAAA,QAAQ,eAAeA,KAAA,gBAAAA,EAAS,WAAW;AAAA,MAAA,CACjD;AAAA,IAAA,IAEH,KAAK,eAAejC,GACpB,KAAK,WAAW4B;AAAA,EAClB;AAAA,EAEA,IAAI,cAAkC;AACpC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAYM,GAA8B;AAC5C,SAAK,eAAeA,GACf,KAAA,QAAQ,eAAeA,CAAQ;AAAA,EAItC;AACF;"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils/helpers.ts","../src/clients/auth.ts","../src/clients/functions.ts","../src/clients/graphql.ts","../src/clients/storage.ts","../src/clients/nhost.ts"],"sourcesContent":["import { NhostClientConstructorParams } from './types'\n\n// a port can be a number or a placeholder string with leading and trailing double underscores, f.e. \"8080\" or \"__PLACEHOLDER_NAME__\"\nconst LOCALHOST_REGEX = /^((?<protocol>http[s]?):\\/\\/)?(?<host>localhost)(:(?<port>(\\d+|__\\w+__)))?$/\n\n/**\n * `backendUrl` should now be used only when self-hosting\n * `subdomain` and `region` should be used instead when using the Nhost platform\n * `\n * @param backendOrSubdomain\n * @param service\n * @returns\n */\nexport function urlFromSubdomain(\n backendOrSubdomain: Pick<NhostClientConstructorParams, 'region' | 'subdomain' | 'backendUrl'>,\n service: string\n): string {\n const { backendUrl, subdomain, region } = backendOrSubdomain\n\n if (backendUrl) {\n return `${backendUrl}/v1/${service}`\n }\n\n if (!subdomain) {\n throw new Error('Either `backendUrl` or `subdomain` must be set.')\n }\n\n // check if subdomain is [http[s]://]localhost[:port]\n const subdomainLocalhostFound = subdomain.match(LOCALHOST_REGEX)\n if (subdomainLocalhostFound?.groups) {\n const { protocol = 'http', host, port = 1337 } = subdomainLocalhostFound.groups\n\n const urlFromEnv = getValueFromEnv(service)\n if (urlFromEnv) {\n return urlFromEnv\n }\n return `${protocol}://${host}:${port}/v1/${service}`\n }\n\n if (!region) {\n throw new Error('`region` must be set when using a `subdomain` other than \"localhost\".')\n }\n\n return `https://${subdomain}.${service}.${region}.nhost.run/v1`\n}\n\n/**\n *\n * @returns whether the code is running in a browser\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined'\n}\n\n/**\n *\n * @returns whether the code is running in a Node.js environment\n */\nfunction environmentIsAvailable() {\n return typeof process !== 'undefined' && process.env\n}\n\n/**\n *\n * @param service auth | storage | graphql | functions\n * @returns the service's url if the corresponding env var is set\n * NHOST_${service}_URL\n */\nfunction getValueFromEnv(service: string) {\n if (isBrowser() || !environmentIsAvailable()) {\n return null\n }\n\n return process.env[`NHOST_${service.toUpperCase()}_URL`]\n}\n","import { HasuraAuthClient } from '@nhost/hasura-auth-js'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { NhostClientConstructorParams } from '../utils/types'\n\n/**\n * Creates a client for Auth from either a subdomain or a URL\n */\nexport function createAuthClient(params: NhostClientConstructorParams) {\n const authUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'auth')\n : params.authUrl\n\n if (!authUrl) {\n throw new Error('Please provide `subdomain` or `authUrl`.')\n }\n\n return new HasuraAuthClient({ url: authUrl, ...params })\n}\n","import axios, {\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n RawAxiosRequestHeaders\n} from 'axios'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { FunctionCallResponse, NhostClientConstructorParams } from '../utils/types'\nexport interface NhostFunctionsConstructorParams {\n /**\n * Serverless Functions endpoint.\n */\n url: string\n /**\n * Admin secret. When set, it is sent as an `x-hasura-admin-secret` header for all requests.\n */\n adminSecret?: string\n}\n\n/**\n * Creates a client for Functions from either a subdomain or a URL\n */\nexport function createFunctionsClient(params: NhostClientConstructorParams) {\n const functionsUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'functions')\n : params.functionsUrl\n\n if (!functionsUrl) {\n throw new Error('Please provide `subdomain` or `functionsUrl`.')\n }\n\n return new NhostFunctionsClient({ url: functionsUrl, ...params })\n}\n\n/**\n * @alias Functions\n */\nexport class NhostFunctionsClient {\n readonly url: string\n private instance: AxiosInstance\n private accessToken: string | null\n private adminSecret?: string\n\n constructor(params: NhostFunctionsConstructorParams) {\n const { url, adminSecret } = params\n\n this.url = url\n this.accessToken = null\n this.adminSecret = adminSecret\n this.instance = axios.create({\n baseURL: url\n })\n }\n\n /**\n * Use `nhost.functions.call` to call (sending a POST request to) a serverless function.\n *\n * @example\n * ```ts\n * await nhost.functions.call('send-welcome-email', { email: 'joe@example.com', name: 'Joe Doe' })\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/functions/call\n */\n async call<T = unknown, D = any>(\n url: string,\n data: D,\n config?: AxiosRequestConfig\n ): Promise<FunctionCallResponse<T>> {\n const headers = {\n ...this.generateAccessTokenHeaders(),\n ...config?.headers\n }\n\n let res\n try {\n res = await this.instance.post<T, AxiosResponse<T>, D>(url, data, { ...config, headers })\n } catch (error) {\n if (error instanceof Error) {\n return { res: null, error }\n }\n }\n\n if (!res) {\n return {\n res: null,\n error: new Error('Unable to make post request to funtion')\n }\n }\n\n return { res, error: null }\n }\n\n /**\n * Use `nhost.functions.setAccessToken` to a set an access token to be used in subsequent functions requests. Note that if you're signin in users with `nhost.auth.signIn()` the access token will be set automatically.\n *\n * @example\n * ```ts\n * nhost.functions.setAccessToken('some-access-token')\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/functions/set-access-token\n */\n setAccessToken(accessToken: string | undefined) {\n if (!accessToken) {\n this.accessToken = null\n return\n }\n\n this.accessToken = accessToken\n }\n\n private generateAccessTokenHeaders(): RawAxiosRequestHeaders {\n if (this.adminSecret) {\n return {\n 'x-hasura-admin-secret': this.adminSecret\n }\n }\n if (this.accessToken) {\n return {\n Authorization: `Bearer ${this.accessToken}`\n }\n }\n return {}\n }\n}\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { DocumentNode, print } from 'graphql'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport {\n GraphqlRequestResponse,\n GraphqlResponse,\n NhostClientConstructorParams\n} from '../utils/types'\n\nexport interface NhostGraphqlConstructorParams {\n /**\n * GraphQL endpoint.\n */\n url: string\n /**\n * Admin secret. When set, it is sent as an `x-hasura-admin-secret` header for all requests.\n */\n adminSecret?: string\n}\n\n/**\n * Creates a client for GraphQL from either a subdomain or a URL\n */\nexport function createGraphqlClient(params: NhostClientConstructorParams) {\n const graphqlUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'graphql')\n : params.graphqlUrl\n\n if (!graphqlUrl) {\n throw new Error('Please provide `subdomain` or `graphqlUrl`.')\n }\n\n return new NhostGraphqlClient({ url: graphqlUrl, ...params })\n}\n\n/**\n * @alias GraphQL\n */\nexport class NhostGraphqlClient {\n readonly url: string\n private instance: AxiosInstance\n private accessToken: string | null\n private adminSecret?: string\n\n constructor(params: NhostGraphqlConstructorParams) {\n const { url, adminSecret } = params\n\n this.url = url\n this.accessToken = null\n this.adminSecret = adminSecret\n this.instance = axios.create({\n baseURL: url\n })\n }\n\n /**\n * Use `nhost.graphql.request` to send a GraphQL request. For more serious GraphQL usage we recommend using a GraphQL client such as Apollo Client (https://www.apollographql.com/docs/react).\n *\n * @example\n * ```ts\n * const CUSTOMERS = gql`\n * query {\n * customers {\n * id\n * name\n * }\n * }\n * `\n * const { data, error } = await nhost.graphql.request(CUSTOMERS)\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/request\n */\n async request<T = any, V = any>(\n document: string | DocumentNode,\n variables?: V,\n config?: AxiosRequestConfig\n ): Promise<GraphqlRequestResponse<T>> {\n // add auth headers if any\n const headers = {\n ...this.generateAccessTokenHeaders(),\n ...config?.headers,\n 'Accept-Encoding': '*'\n }\n\n try {\n const operationName = ''\n const res = await this.instance.post<GraphqlResponse<T>>(\n '',\n {\n operationName: operationName || undefined,\n query: typeof document === 'string' ? document : print(document),\n variables\n },\n { ...config, headers }\n )\n\n const responseData = res.data\n const { data } = responseData\n\n if (responseData.errors) {\n return {\n data: null,\n error: responseData.errors\n }\n }\n\n if (typeof data !== 'object' || Array.isArray(data) || data === null) {\n return {\n data: null,\n error: new Error('incorrect response data from GraphQL server')\n }\n }\n\n return { data, error: null }\n } catch (error) {\n if (error instanceof Error) {\n return { data: null, error }\n }\n console.error(error)\n return {\n data: null,\n error: new Error('Unable to get do GraphQL request')\n }\n }\n }\n\n /**\n * Use `nhost.graphql.getUrl` to get the GraphQL URL.\n *\n * @example\n * ```ts\n * const url = nhost.graphql.getUrl();\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/get-url\n */\n getUrl(): string {\n return this.url\n }\n\n /**\n * Use `nhost.graphql.setAccessToken` to a set an access token to be used in subsequent graphql requests. Note that if you're signin in users with `nhost.auth.signIn()` the access token will be set automatically.\n *\n * @example\n * ```ts\n * nhost.graphql.setAccessToken('some-access-token')\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript/nhost-js/graphql/set-access-token\n */\n setAccessToken(accessToken: string | undefined) {\n if (!accessToken) {\n this.accessToken = null\n return\n }\n\n this.accessToken = accessToken\n }\n\n private generateAccessTokenHeaders(): Record<string, string> {\n if (this.adminSecret) {\n return {\n 'x-hasura-admin-secret': this.adminSecret\n }\n }\n if (this.accessToken) {\n return {\n Authorization: `Bearer ${this.accessToken}`\n }\n }\n return {}\n }\n}\n","import { HasuraStorageClient } from '@nhost/hasura-storage-js'\n\nimport { urlFromSubdomain } from '../utils/helpers'\nimport { NhostClientConstructorParams } from '../utils/types'\n\n/**\n * Creates a client for Storage from either a subdomain or a URL\n */\nexport function createStorageClient(params: NhostClientConstructorParams) {\n const storageUrl =\n 'subdomain' in params || 'backendUrl' in params\n ? urlFromSubdomain(params, 'storage')\n : params.storageUrl\n\n if (!storageUrl) {\n throw new Error('Please provide `subdomain` or `storageUrl`.')\n }\n\n return new HasuraStorageClient({ url: storageUrl, ...params })\n}\n","import { HasuraAuthClient } from '@nhost/hasura-auth-js'\nimport { HasuraStorageClient } from '@nhost/hasura-storage-js'\n\nimport { NhostClientConstructorParams } from '../utils/types'\n\nimport { createAuthClient } from './auth'\nimport { createFunctionsClient, NhostFunctionsClient } from './functions'\nimport { createGraphqlClient, NhostGraphqlClient } from './graphql'\nimport { createStorageClient } from './storage'\n\nexport const createNhostClient = (params: NhostClientConstructorParams) => new NhostClient(params)\nexport class NhostClient {\n auth: HasuraAuthClient\n storage: HasuraStorageClient\n functions: NhostFunctionsClient\n graphql: NhostGraphqlClient\n private _adminSecret?: string\n readonly devTools?: boolean\n\n /**\n * Nhost Client\n *\n * @example\n * ```ts\n * const nhost = new NhostClient({ subdomain, region });\n * ```\n *\n * @docs https://docs.nhost.io/reference/javascript\n */\n constructor({\n refreshIntervalTime,\n clientStorageGetter,\n clientStorageSetter,\n clientStorage,\n clientStorageType,\n autoRefreshToken,\n autoSignIn,\n adminSecret,\n devTools,\n start = true,\n ...urlParams\n }: NhostClientConstructorParams) {\n // * Set clients for all services\n this.auth = createAuthClient({\n refreshIntervalTime,\n clientStorageGetter,\n clientStorageSetter,\n clientStorage,\n clientStorageType,\n autoRefreshToken,\n autoSignIn,\n start,\n ...urlParams\n })\n this.storage = createStorageClient({ adminSecret, ...urlParams })\n this.functions = createFunctionsClient({ adminSecret, ...urlParams })\n this.graphql = createGraphqlClient({ adminSecret, ...urlParams })\n\n this.auth.client.onStart(() => {\n // * Set current token if token is already accessable\n const accessToken = this.auth.getAccessToken()\n this.storage.setAccessToken(accessToken)\n this.functions.setAccessToken(accessToken)\n this.graphql.setAccessToken(accessToken)\n // * Set access token when signing out\n this.auth.onAuthStateChanged((_event, session) => {\n if (_event === 'SIGNED_OUT') {\n this.storage.setAccessToken(undefined)\n this.functions.setAccessToken(undefined)\n this.graphql.setAccessToken(undefined)\n }\n })\n\n // * Update access token for clients, including when signin in\n this.auth.onTokenChanged((session) => {\n const accessToken = session?.accessToken\n this.storage.setAccessToken(accessToken)\n this.functions.setAccessToken(accessToken)\n this.graphql.setAccessToken(accessToken)\n })\n })\n this._adminSecret = adminSecret\n this.devTools = devTools\n }\n\n get adminSecret(): string | undefined {\n return this._adminSecret\n }\n\n set adminSecret(newValue: string | undefined) {\n this._adminSecret = newValue\n this.storage.setAdminSecret(newValue)\n // TODO inconsistent API: storage can change admin secret, but functions/graphql cannot\n // this.functions.setAdminSecret(newValue)\n // this.graphql.setAdminSecret(newValue)\n }\n}\n"],"names":["LOCALHOST_REGEX","urlFromSubdomain","backendOrSubdomain","service","backendUrl","subdomain","region","subdomainLocalhostFound","protocol","host","port","urlFromEnv","getValueFromEnv","isBrowser","environmentIsAvailable","createAuthClient","params","authUrl","HasuraAuthClient","createFunctionsClient","functionsUrl","NhostFunctionsClient","__publicField","url","adminSecret","axios","data","config","headers","res","error","accessToken","createGraphqlClient","graphqlUrl","NhostGraphqlClient","document","variables","operationName","responseData","print","createStorageClient","storageUrl","HasuraStorageClient","createNhostClient","NhostClient","refreshIntervalTime","clientStorageGetter","clientStorageSetter","clientStorage","clientStorageType","autoRefreshToken","autoSignIn","devTools","start","urlParams","_event","session","newValue"],"mappings":";;;;;;;AAGA,MAAMA,IAAkB;AAUR,SAAAC,EACdC,GACAC,GACQ;AACR,QAAM,EAAE,YAAAC,GAAY,WAAAC,GAAW,QAAAC,EAAA,IAAWJ;AAE1C,MAAIE;AACF,WAAO,GAAGA,QAAiBD;AAG7B,MAAI,CAACE;AACG,UAAA,IAAI,MAAM,iDAAiD;AAI7D,QAAAE,IAA0BF,EAAU,MAAML,CAAe;AAC/D,MAAIO,KAAA,QAAAA,EAAyB,QAAQ;AACnC,UAAM,EAAE,UAAAC,IAAW,QAAQ,MAAAC,GAAM,MAAAC,IAAO,SAASH,EAAwB,QAEnEI,IAAaC,EAAgBT,CAAO;AAC1C,WAAIQ,KAGG,GAAGH,OAAcC,KAAQC,QAAWP;AAAA,EAC7C;AAEA,MAAI,CAACG;AACG,UAAA,IAAI,MAAM,uEAAuE;AAGlF,SAAA,WAAWD,KAAaF,KAAWG;AAC5C;AAMA,SAASO,IAAqB;AAC5B,SAAO,OAAO,SAAW;AAC3B;AAMA,SAASC,IAAyB;AACzB,SAAA,OAAO,UAAY,OAAe,QAAQ;AACnD;AAQA,SAASF,EAAgBT,GAAiB;AACxC,SAAIU,EAAU,KAAK,CAACC,MACX,OAGF,QAAQ,IAAI,SAASX,EAAQ,YAAY;AAClD;AClEO,SAASY,EAAiBC,GAAsC;AAC/D,QAAAC,IACJ,eAAeD,KAAU,gBAAgBA,IACrCf,EAAiBe,GAAQ,MAAM,IAC/BA,EAAO;AAEb,MAAI,CAACC;AACG,UAAA,IAAI,MAAM,0CAA0C;AAG5D,SAAO,IAAIC,EAAiB,EAAE,KAAKD,GAAS,GAAGD,GAAQ;AACzD;ACIO,SAASG,EAAsBH,GAAsC;AACpE,QAAAI,IACJ,eAAeJ,KAAU,gBAAgBA,IACrCf,EAAiBe,GAAQ,WAAW,IACpCA,EAAO;AAEb,MAAI,CAACI;AACG,UAAA,IAAI,MAAM,+CAA+C;AAGjE,SAAO,IAAIC,EAAqB,EAAE,KAAKD,GAAc,GAAGJ,GAAQ;AAClE;AAKO,MAAMK,EAAqB;AAAA,EAMhC,YAAYL,GAAyC;AAL5C,IAAAM,EAAA;AACD,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGA,UAAA,EAAE,KAAAC,GAAK,aAAAC,EAAgB,IAAAR;AAE7B,SAAK,MAAMO,GACX,KAAK,cAAc,MACnB,KAAK,cAAcC,GACd,KAAA,WAAWC,EAAM,OAAO;AAAA,MAC3B,SAASF;AAAA,IAAA,CACV;AAAA,EACH;AAAA,EAYA,MAAM,KACJA,GACAG,GACAC,GACkC;AAClC,UAAMC,IAAU;AAAA,MACd,GAAG,KAAK,2BAA2B;AAAA,MACnC,GAAGD,KAAA,gBAAAA,EAAQ;AAAA,IAAA;AAGT,QAAAE;AACA,QAAA;AACI,MAAAA,IAAA,MAAM,KAAK,SAAS,KAA6BN,GAAKG,GAAM,EAAE,GAAGC,GAAQ,SAAAC,EAAA,CAAS;AAAA,aACjFE;AACP,UAAIA,aAAiB;AACZ,eAAA,EAAE,KAAK,MAAM,OAAAA;IAExB;AAEA,WAAKD,IAOE,EAAE,KAAAA,GAAK,OAAO,SANZ;AAAA,MACL,KAAK;AAAA,MACL,OAAO,IAAI,MAAM,wCAAwC;AAAA,IAAA;AAAA,EAK/D;AAAA,EAYA,eAAeE,GAAiC;AAC9C,QAAI,CAACA,GAAa;AAChB,WAAK,cAAc;AACnB;AAAA,IACF;AAEA,SAAK,cAAcA;AAAA,EACrB;AAAA,EAEQ,6BAAqD;AAC3D,WAAI,KAAK,cACA;AAAA,MACL,yBAAyB,KAAK;AAAA,IAAA,IAG9B,KAAK,cACA;AAAA,MACL,eAAe,UAAU,KAAK;AAAA,IAAA,IAG3B;EACT;AACF;ACvGO,SAASC,EAAoBhB,GAAsC;AAClE,QAAAiB,IACJ,eAAejB,KAAU,gBAAgBA,IACrCf,EAAiBe,GAAQ,SAAS,IAClCA,EAAO;AAEb,MAAI,CAACiB;AACG,UAAA,IAAI,MAAM,6CAA6C;AAG/D,SAAO,IAAIC,EAAmB,EAAE,KAAKD,GAAY,GAAGjB,GAAQ;AAC9D;AAKO,MAAMkB,EAAmB;AAAA,EAM9B,YAAYlB,GAAuC;AAL1C,IAAAM,EAAA;AACD,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGA,UAAA,EAAE,KAAAC,GAAK,aAAAC,EAAgB,IAAAR;AAE7B,SAAK,MAAMO,GACX,KAAK,cAAc,MACnB,KAAK,cAAcC,GACd,KAAA,WAAWC,EAAM,OAAO;AAAA,MAC3B,SAASF;AAAA,IAAA,CACV;AAAA,EACH;AAAA,EAoBA,MAAM,QACJY,GACAC,GACAT,GACoC;AAEpC,UAAMC,IAAU;AAAA,MACd,GAAG,KAAK,2BAA2B;AAAA,MACnC,GAAGD,KAAA,gBAAAA,EAAQ;AAAA,MACX,mBAAmB;AAAA,IAAA;AAGjB,QAAA;AACF,YAAMU,IAAgB,IAWhBC,KAVM,MAAM,KAAK,SAAS;AAAA,QAC9B;AAAA,QACA;AAAA,UACE,eAAeD,KAAiB;AAAA,UAChC,OAAO,OAAOF,KAAa,WAAWA,IAAWI,EAAMJ,CAAQ;AAAA,UAC/D,WAAAC;AAAA,QACF;AAAA,QACA,EAAE,GAAGT,GAAQ,SAAAC,EAAQ;AAAA,MAAA,GAGE,MACnB,EAAE,MAAAF,EAAS,IAAAY;AAEjB,aAAIA,EAAa,SACR;AAAA,QACL,MAAM;AAAA,QACN,OAAOA,EAAa;AAAA,MAAA,IAIpB,OAAOZ,KAAS,YAAY,MAAM,QAAQA,CAAI,KAAKA,MAAS,OACvD;AAAA,QACL,MAAM;AAAA,QACN,OAAO,IAAI,MAAM,6CAA6C;AAAA,MAAA,IAI3D,EAAE,MAAAA,GAAM,OAAO;aACfI;AACP,aAAIA,aAAiB,QACZ,EAAE,MAAM,MAAM,OAAAA,OAEvB,QAAQ,MAAMA,CAAK,GACZ;AAAA,QACL,MAAM;AAAA,QACN,OAAO,IAAI,MAAM,kCAAkC;AAAA,MAAA;AAAA,IAEvD;AAAA,EACF;AAAA,EAYA,SAAiB;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAYA,eAAeC,GAAiC;AAC9C,QAAI,CAACA,GAAa;AAChB,WAAK,cAAc;AACnB;AAAA,IACF;AAEA,SAAK,cAAcA;AAAA,EACrB;AAAA,EAEQ,6BAAqD;AAC3D,WAAI,KAAK,cACA;AAAA,MACL,yBAAyB,KAAK;AAAA,IAAA,IAG9B,KAAK,cACA;AAAA,MACL,eAAe,UAAU,KAAK;AAAA,IAAA,IAG3B;EACT;AACF;ACvKO,SAASS,EAAoBxB,GAAsC;AAClE,QAAAyB,IACJ,eAAezB,KAAU,gBAAgBA,IACrCf,EAAiBe,GAAQ,SAAS,IAClCA,EAAO;AAEb,MAAI,CAACyB;AACG,UAAA,IAAI,MAAM,6CAA6C;AAG/D,SAAO,IAAIC,EAAoB,EAAE,KAAKD,GAAY,GAAGzB,GAAQ;AAC/D;ACTO,MAAM2B,IAAoB,CAAC3B,MAAyC,IAAI4B,EAAY5B,CAAM;AAC1F,MAAM4B,EAAY;AAAA,EAkBvB,YAAY;AAAA,IACV,qBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAA3B;AAAA,IACA,UAAA4B;AAAA,IACA,OAAAC,IAAQ;AAAA,OACLC;AAAA,EAAA,GAC4B;AA7BjC,IAAAhC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACQ,IAAAA,EAAA;AACC,IAAAA,EAAA;AA0BP,SAAK,OAAOP,EAAiB;AAAA,MAC3B,qBAAA8B;AAAA,MACA,qBAAAC;AAAA,MACA,qBAAAC;AAAA,MACA,eAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,YAAAC;AAAA,MACA,OAAAE;AAAA,MACA,GAAGC;AAAA,IAAA,CACJ,GACD,KAAK,UAAUd,EAAoB,EAAE,aAAAhB,GAAa,GAAG8B,GAAW,GAChE,KAAK,YAAYnC,EAAsB,EAAE,aAAAK,GAAa,GAAG8B,GAAW,GACpE,KAAK,UAAUtB,EAAoB,EAAE,aAAAR,GAAa,GAAG8B,GAAW,GAE3D,KAAA,KAAK,OAAO,QAAQ,MAAM;AAEvB,YAAAvB,IAAc,KAAK,KAAK,eAAe;AACxC,WAAA,QAAQ,eAAeA,CAAW,GAClC,KAAA,UAAU,eAAeA,CAAW,GACpC,KAAA,QAAQ,eAAeA,CAAW,GAEvC,KAAK,KAAK,mBAAmB,CAACwB,GAAQC,MAAY;AAChD,QAAID,MAAW,iBACR,KAAA,QAAQ,eAAe,MAAS,GAChC,KAAA,UAAU,eAAe,MAAS,GAClC,KAAA,QAAQ,eAAe,MAAS;AAAA,MACvC,CACD,GAGI,KAAA,KAAK,eAAe,CAACC,MAAY;AACpC,cAAMzB,IAAcyB,KAAA,gBAAAA,EAAS;AACxB,aAAA,QAAQ,eAAezB,CAAW,GAClC,KAAA,UAAU,eAAeA,CAAW,GACpC,KAAA,QAAQ,eAAeA,CAAW;AAAA,MAAA,CACxC;AAAA,IAAA,CACF,GACD,KAAK,eAAeP,GACpB,KAAK,WAAW4B;AAAA,EAClB;AAAA,EAEA,IAAI,cAAkC;AACpC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAYK,GAA8B;AAC5C,SAAK,eAAeA,GACf,KAAA,QAAQ,eAAeA,CAAQ;AAAA,EAItC;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAItD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,IAAI,CAAC,4BAA4B,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC,EAC7F,OAAO,EAAE,MAAM,GACd,MAAM,CA4BR"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAKtD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,IAAI,CAAC,4BAA4B,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC,EAC7F,OAAO,EAAE,MAAM,GACd,MAAM,CA4BR"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nhost/nhost-js",
3
- "version": "1.6.0",
3
+ "version": "1.6.2",
4
4
  "description": "Nhost JavaScript SDK",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -43,16 +43,17 @@
43
43
  "access": "public"
44
44
  },
45
45
  "dependencies": {
46
- "@nhost/hasura-auth-js": "1.6.2",
47
- "@nhost/hasura-storage-js": "0.7.2",
48
- "axios": "^1.1.3",
46
+ "axios": "^1.2.0",
49
47
  "jwt-decode": "^3.1.2",
50
- "query-string": "^7.0.1"
48
+ "query-string": "^7.0.1",
49
+ "@nhost/hasura-auth-js": "1.6.4",
50
+ "@nhost/hasura-storage-js": "0.7.4"
51
51
  },
52
52
  "devDependencies": {
53
- "@nhost/docgen": "0.1.3",
53
+ "@faker-js/faker": "^7.6.0",
54
54
  "graphql": "15.7.2",
55
- "start-server-and-test": "^1.14.0"
55
+ "start-server-and-test": "^1.14.0",
56
+ "@nhost/docgen": "0.1.3"
56
57
  },
57
58
  "peerDependencies": {
58
59
  "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"