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.
- package/dist/auth/client.cjs.js +10 -43
- package/dist/auth/client.d.mts +1 -1
- package/dist/auth/client.d.ts +1 -1
- package/dist/auth/client.esm.js +14 -38
- package/dist/auth/email/client.cjs.js +10 -43
- package/dist/auth/email/client.d.mts +2 -2
- package/dist/auth/email/client.d.ts +2 -2
- package/dist/auth/email/client.esm.js +14 -38
- package/dist/auth/email/index.d.mts +1 -1
- package/dist/auth/email/index.d.ts +1 -1
- package/dist/auth/email/next.d.mts +1 -1
- package/dist/auth/email/next.d.ts +1 -1
- package/dist/auth/index.cjs.js +26 -5
- package/dist/auth/index.d.mts +2 -2
- package/dist/auth/index.d.ts +2 -2
- package/dist/auth/index.esm.js +25 -5
- package/dist/auth/instagram/index.cjs.js +26 -5
- package/dist/auth/instagram/index.d.mts +4 -2
- package/dist/auth/instagram/index.d.ts +4 -2
- package/dist/auth/instagram/index.esm.js +25 -5
- package/dist/auth/instagram/route.cjs.js +24 -5
- package/dist/auth/instagram/route.esm.js +24 -5
- package/dist/auth/instagram/utils.cjs.js +21 -0
- package/dist/auth/instagram/utils.d.mts +30 -4
- package/dist/auth/instagram/utils.d.ts +30 -4
- package/dist/auth/instagram/utils.esm.js +22 -0
- package/dist/graphql/client.cjs.js +8 -36
- package/dist/graphql/client.esm.js +6 -34
- package/dist/graphql/links.cjs.js +3 -31
- package/dist/graphql/links.esm.js +1 -29
- package/dist/graphql/next.cjs.js +3 -31
- package/dist/graphql/next.esm.js +1 -29
- package/package.json +6 -1
|
@@ -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 [
|
|
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
|
|
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
|
-
}, [
|
|
178
|
+
}, [fetch, variables]);
|
|
207
179
|
const reFetch = useCallback(
|
|
208
|
-
(input) =>
|
|
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
|
-
[
|
|
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) {
|
package/dist/graphql/next.cjs.js
CHANGED
|
@@ -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,
|
package/dist/graphql/next.esm.js
CHANGED
|
@@ -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.
|
|
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",
|