naystack 1.8.4 → 1.8.6

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.
@@ -38,6 +38,7 @@ function ClearStoreOnLogout() {
38
38
  import { ApolloLink, fromPromise, HttpLink } from "@apollo/client";
39
39
  import { setContext } from "@apollo/client/link/context";
40
40
  import { onError } from "@apollo/client/link/error";
41
+ import { getAccessToken, refreshAccessToken } from "naystack/auth/token-store";
41
42
 
42
43
  // src/env.ts
43
44
  var EXTRA_ENV = globalThis.__NAYSTACK_ENV__ || (globalThis.__NAYSTACK_ENV__ = {});
@@ -89,35 +90,6 @@ function getEnv(key, skipCheck) {
89
90
  return value;
90
91
  }
91
92
 
92
- // src/auth/token-store.ts
93
- var currentToken;
94
- var listeners = /* @__PURE__ */ new Set();
95
- var inFlightRefresh = null;
96
- function getAccessToken() {
97
- return currentToken;
98
- }
99
- function setAccessToken(token) {
100
- if (token === currentToken) return;
101
- currentToken = token;
102
- listeners.forEach((listener) => listener(token));
103
- }
104
- function refreshAccessToken() {
105
- if (inFlightRefresh) return inFlightRefresh;
106
- inFlightRefresh = (async () => {
107
- const res = await fetch(
108
- getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */),
109
- { credentials: "include" }
110
- );
111
- if (!res.ok) throw new Error(`Token refresh failed: ${res.status}`);
112
- const token = await res.text() || null;
113
- setAccessToken(token);
114
- return token;
115
- })().finally(() => {
116
- inFlightRefresh = null;
117
- });
118
- return inFlightRefresh;
119
- }
120
-
121
93
  // src/graphql/links.ts
122
94
  var RETRY_CONTEXT_KEY = "__naystackRetried";
123
95
  function isExpiredTokenError(error) {
@@ -186,7 +158,7 @@ var tokenContext = (token) => {
186
158
  };
187
159
  };
188
160
  function useAuthQuery(query, variables, options) {
189
- const [fetch2, result] = useLazyQuery(query, {
161
+ const [fetch, result] = useLazyQuery(query, {
190
162
  fetchPolicy: "no-cache",
191
163
  ...options
192
164
  });
@@ -195,7 +167,7 @@ function useAuthQuery(query, variables, options) {
195
167
  const serialized = JSON.stringify(variables);
196
168
  if (variables && prevVarsRef.current !== serialized) {
197
169
  prevVarsRef.current = serialized;
198
- void fetch2({
170
+ void fetch({
199
171
  // @ts-expect-error -- to allow dynamic props
200
172
  variables: { input: variables },
201
173
  context: {
@@ -203,16 +175,16 @@ function useAuthQuery(query, variables, options) {
203
175
  }
204
176
  });
205
177
  }
206
- }, [fetch2, variables]);
178
+ }, [fetch, variables]);
207
179
  const reFetch = useCallback(
208
- (input) => fetch2({
180
+ (input) => fetch({
209
181
  // @ts-expect-error -- to allow dynamic props
210
182
  variables: { input },
211
183
  context: {
212
184
  credentials: `include`
213
185
  }
214
186
  }),
215
- [fetch2]
187
+ [fetch]
216
188
  );
217
189
  return [reFetch, result];
218
190
  }
@@ -26,6 +26,7 @@ module.exports = __toCommonJS(links_exports);
26
26
  var import_client = require("@apollo/client");
27
27
  var import_context = require("@apollo/client/link/context");
28
28
  var import_error = require("@apollo/client/link/error");
29
+ var import_token_store = require("naystack/auth/token-store");
29
30
 
30
31
  // src/env.ts
31
32
  var EXTRA_ENV = globalThis.__NAYSTACK_ENV__ || (globalThis.__NAYSTACK_ENV__ = {});
@@ -77,42 +78,13 @@ function getEnv(key, skipCheck) {
77
78
  return value;
78
79
  }
79
80
 
80
- // src/auth/token-store.ts
81
- var currentToken;
82
- var listeners = /* @__PURE__ */ new Set();
83
- var inFlightRefresh = null;
84
- function getAccessToken() {
85
- return currentToken;
86
- }
87
- function setAccessToken(token) {
88
- if (token === currentToken) return;
89
- currentToken = token;
90
- listeners.forEach((listener) => listener(token));
91
- }
92
- function refreshAccessToken() {
93
- if (inFlightRefresh) return inFlightRefresh;
94
- inFlightRefresh = (async () => {
95
- const res = await fetch(
96
- getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */),
97
- { credentials: "include" }
98
- );
99
- if (!res.ok) throw new Error(`Token refresh failed: ${res.status}`);
100
- const token = await res.text() || null;
101
- setAccessToken(token);
102
- return token;
103
- })().finally(() => {
104
- inFlightRefresh = null;
105
- });
106
- return inFlightRefresh;
107
- }
108
-
109
81
  // src/graphql/links.ts
110
82
  var RETRY_CONTEXT_KEY = "__naystackRetried";
111
83
  function isExpiredTokenError(error) {
112
84
  return error.extensions?.code === "UNAUTHENTICATED";
113
85
  }
114
86
  var authLink = (0, import_context.setContext)((_, previousContext) => {
115
- const token = getAccessToken();
87
+ const token = (0, import_token_store.getAccessToken)();
116
88
  if (!token || previousContext.credentials === "include")
117
89
  return previousContext;
118
90
  return {
@@ -130,7 +102,7 @@ var refreshLink = (0, import_error.onError)(({ graphQLErrors, operation, forward
130
102
  return (0, import_client.fromPromise)(
131
103
  // A failed refresh still replays once: the retry reproduces the original
132
104
  // error for the caller instead of surfacing the refresh's error in its place.
133
- refreshAccessToken().catch(() => null)
105
+ (0, import_token_store.refreshAccessToken)().catch(() => null)
134
106
  ).flatMap(() => {
135
107
  operation.setContext((previousContext) => ({
136
108
  ...previousContext,
@@ -2,6 +2,7 @@
2
2
  import { ApolloLink, fromPromise, HttpLink } from "@apollo/client";
3
3
  import { setContext } from "@apollo/client/link/context";
4
4
  import { onError } from "@apollo/client/link/error";
5
+ import { getAccessToken, refreshAccessToken } from "naystack/auth/token-store";
5
6
 
6
7
  // src/env.ts
7
8
  var EXTRA_ENV = globalThis.__NAYSTACK_ENV__ || (globalThis.__NAYSTACK_ENV__ = {});
@@ -53,35 +54,6 @@ function getEnv(key, skipCheck) {
53
54
  return value;
54
55
  }
55
56
 
56
- // src/auth/token-store.ts
57
- var currentToken;
58
- var listeners = /* @__PURE__ */ new Set();
59
- var inFlightRefresh = null;
60
- function getAccessToken() {
61
- return currentToken;
62
- }
63
- function setAccessToken(token) {
64
- if (token === currentToken) return;
65
- currentToken = token;
66
- listeners.forEach((listener) => listener(token));
67
- }
68
- function refreshAccessToken() {
69
- if (inFlightRefresh) return inFlightRefresh;
70
- inFlightRefresh = (async () => {
71
- const res = await fetch(
72
- getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */),
73
- { credentials: "include" }
74
- );
75
- if (!res.ok) throw new Error(`Token refresh failed: ${res.status}`);
76
- const token = await res.text() || null;
77
- setAccessToken(token);
78
- return token;
79
- })().finally(() => {
80
- inFlightRefresh = null;
81
- });
82
- return inFlightRefresh;
83
- }
84
-
85
57
  // src/graphql/links.ts
86
58
  var RETRY_CONTEXT_KEY = "__naystackRetried";
87
59
  function isExpiredTokenError(error) {
@@ -60,6 +60,7 @@ function ClearStoreOnLogout() {
60
60
  var import_client3 = require("@apollo/client");
61
61
  var import_context = require("@apollo/client/link/context");
62
62
  var import_error = require("@apollo/client/link/error");
63
+ var import_token_store = require("naystack/auth/token-store");
63
64
 
64
65
  // src/env.ts
65
66
  var EXTRA_ENV = globalThis.__NAYSTACK_ENV__ || (globalThis.__NAYSTACK_ENV__ = {});
@@ -111,42 +112,13 @@ function getEnv(key, skipCheck) {
111
112
  return value;
112
113
  }
113
114
 
114
- // src/auth/token-store.ts
115
- var currentToken;
116
- var listeners = /* @__PURE__ */ new Set();
117
- var inFlightRefresh = null;
118
- function getAccessToken() {
119
- return currentToken;
120
- }
121
- function setAccessToken(token) {
122
- if (token === currentToken) return;
123
- currentToken = token;
124
- listeners.forEach((listener) => listener(token));
125
- }
126
- function refreshAccessToken() {
127
- if (inFlightRefresh) return inFlightRefresh;
128
- inFlightRefresh = (async () => {
129
- const res = await fetch(
130
- getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */),
131
- { credentials: "include" }
132
- );
133
- if (!res.ok) throw new Error(`Token refresh failed: ${res.status}`);
134
- const token = await res.text() || null;
135
- setAccessToken(token);
136
- return token;
137
- })().finally(() => {
138
- inFlightRefresh = null;
139
- });
140
- return inFlightRefresh;
141
- }
142
-
143
115
  // src/graphql/links.ts
144
116
  var RETRY_CONTEXT_KEY = "__naystackRetried";
145
117
  function isExpiredTokenError(error) {
146
118
  return error.extensions?.code === "UNAUTHENTICATED";
147
119
  }
148
120
  var authLink = (0, import_context.setContext)((_, previousContext) => {
149
- const token = getAccessToken();
121
+ const token = (0, import_token_store.getAccessToken)();
150
122
  if (!token || previousContext.credentials === "include")
151
123
  return previousContext;
152
124
  return {
@@ -164,7 +136,7 @@ var refreshLink = (0, import_error.onError)(({ graphQLErrors, operation, forward
164
136
  return (0, import_client3.fromPromise)(
165
137
  // A failed refresh still replays once: the retry reproduces the original
166
138
  // error for the caller instead of surfacing the refresh's error in its place.
167
- refreshAccessToken().catch(() => null)
139
+ (0, import_token_store.refreshAccessToken)().catch(() => null)
168
140
  ).flatMap(() => {
169
141
  operation.setContext((previousContext) => ({
170
142
  ...previousContext,
@@ -31,6 +31,7 @@ function ClearStoreOnLogout() {
31
31
  import { ApolloLink, fromPromise, HttpLink } from "@apollo/client";
32
32
  import { setContext } from "@apollo/client/link/context";
33
33
  import { onError } from "@apollo/client/link/error";
34
+ import { getAccessToken, refreshAccessToken } from "naystack/auth/token-store";
34
35
 
35
36
  // src/env.ts
36
37
  var EXTRA_ENV = globalThis.__NAYSTACK_ENV__ || (globalThis.__NAYSTACK_ENV__ = {});
@@ -82,35 +83,6 @@ function getEnv(key, skipCheck) {
82
83
  return value;
83
84
  }
84
85
 
85
- // src/auth/token-store.ts
86
- var currentToken;
87
- var listeners = /* @__PURE__ */ new Set();
88
- var inFlightRefresh = null;
89
- function getAccessToken() {
90
- return currentToken;
91
- }
92
- function setAccessToken(token) {
93
- if (token === currentToken) return;
94
- currentToken = token;
95
- listeners.forEach((listener) => listener(token));
96
- }
97
- function refreshAccessToken() {
98
- if (inFlightRefresh) return inFlightRefresh;
99
- inFlightRefresh = (async () => {
100
- const res = await fetch(
101
- getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */),
102
- { credentials: "include" }
103
- );
104
- if (!res.ok) throw new Error(`Token refresh failed: ${res.status}`);
105
- const token = await res.text() || null;
106
- setAccessToken(token);
107
- return token;
108
- })().finally(() => {
109
- inFlightRefresh = null;
110
- });
111
- return inFlightRefresh;
112
- }
113
-
114
86
  // src/graphql/links.ts
115
87
  var RETRY_CONTEXT_KEY = "__naystackRetried";
116
88
  function isExpiredTokenError(error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "naystack",
3
- "version": "1.8.4",
3
+ "version": "1.8.6",
4
4
  "description": "A stack built with Next + GraphQL + S3 + Auth",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",
@@ -23,6 +23,11 @@
23
23
  "import": "./dist/auth/client.esm.js",
24
24
  "require": "./dist/auth/client.cjs.js"
25
25
  },
26
+ "./auth/token-store": {
27
+ "types": "./dist/auth/token-store.d.ts",
28
+ "import": "./dist/auth/token-store.esm.js",
29
+ "require": "./dist/auth/token-store.cjs.js"
30
+ },
26
31
  "./graphql": {
27
32
  "types": "./dist/graphql/index.d.ts",
28
33
  "import": "./dist/graphql/index.esm.js",