naystack 1.4.16 → 1.4.21
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/email/client.cjs.js +69 -12
- package/dist/auth/email/client.esm.js +69 -12
- package/dist/auth/email/index.cjs.js +74 -15
- package/dist/auth/email/index.esm.js +74 -15
- package/dist/auth/email/routes/delete.cjs.js +56 -4
- package/dist/auth/email/routes/delete.esm.js +56 -4
- package/dist/auth/email/routes/get.cjs.js +54 -2
- package/dist/auth/email/routes/get.esm.js +54 -2
- package/dist/auth/email/routes/post.cjs.js +59 -6
- package/dist/auth/email/routes/post.esm.js +59 -6
- package/dist/auth/email/routes/put.cjs.js +54 -4
- package/dist/auth/email/routes/put.esm.js +54 -4
- package/dist/auth/email/token.cjs.js +51 -2
- package/dist/auth/email/token.esm.js +51 -2
- package/dist/auth/email/types.d.mts +1 -7
- package/dist/auth/email/types.d.ts +1 -7
- package/dist/auth/email/utils.cjs.js +58 -5
- package/dist/auth/email/utils.d.mts +2 -2
- package/dist/auth/email/utils.d.ts +2 -2
- package/dist/auth/email/utils.esm.js +58 -5
- package/dist/auth/google/get.cjs.js +57 -7
- package/dist/auth/google/get.d.mts +1 -3
- package/dist/auth/google/get.d.ts +1 -3
- package/dist/auth/google/get.esm.js +57 -7
- package/dist/auth/google/index.cjs.js +57 -7
- package/dist/auth/google/index.d.mts +0 -5
- package/dist/auth/google/index.d.ts +0 -5
- package/dist/auth/google/index.esm.js +57 -7
- package/dist/auth/index.cjs.js +89 -31
- package/dist/auth/index.esm.js +89 -31
- package/dist/auth/instagram/client.cjs.js +54 -1
- package/dist/auth/instagram/client.d.mts +1 -1
- package/dist/auth/instagram/client.d.ts +1 -1
- package/dist/auth/instagram/client.esm.js +52 -1
- package/dist/auth/instagram/index.cjs.js +58 -9
- package/dist/auth/instagram/index.d.mts +0 -2
- package/dist/auth/instagram/index.d.ts +0 -2
- package/dist/auth/instagram/index.esm.js +58 -9
- package/dist/auth/instagram/route.cjs.js +58 -9
- package/dist/auth/instagram/route.d.mts +1 -1
- package/dist/auth/instagram/route.d.ts +1 -1
- package/dist/auth/instagram/route.esm.js +58 -9
- package/dist/auth/instagram/utils.cjs.js +52 -1
- package/dist/auth/instagram/utils.esm.js +50 -1
- package/dist/client/index.cjs.js +50 -1
- package/dist/client/index.esm.js +50 -1
- package/dist/client/seo.cjs.js +52 -1
- package/dist/client/seo.esm.js +50 -1
- package/dist/env.cjs.js +101 -0
- package/dist/env.d.mts +24 -0
- package/dist/env.d.ts +24 -0
- package/dist/env.esm.js +74 -0
- package/dist/file/client.cjs.js +52 -1
- package/dist/file/client.esm.js +52 -1
- package/dist/file/index.cjs.js +82 -28
- package/dist/file/index.d.mts +0 -2
- package/dist/file/index.d.ts +0 -2
- package/dist/file/index.esm.js +82 -28
- package/dist/file/put.cjs.js +65 -11
- package/dist/file/put.d.mts +0 -2
- package/dist/file/put.d.ts +0 -2
- package/dist/file/put.esm.js +65 -11
- package/dist/file/setup.cjs.js +82 -28
- package/dist/file/setup.d.mts +0 -7
- package/dist/file/setup.d.ts +0 -7
- package/dist/file/setup.esm.js +82 -28
- package/dist/file/utils.cjs.js +70 -17
- package/dist/file/utils.d.mts +6 -10
- package/dist/file/utils.d.ts +6 -10
- package/dist/file/utils.esm.js +70 -17
- package/dist/graphql/client.cjs.js +57 -3
- package/dist/graphql/client.d.mts +1 -1
- package/dist/graphql/client.d.ts +1 -1
- package/dist/graphql/client.esm.js +57 -3
- package/dist/graphql/index.cjs.js +107 -3
- package/dist/graphql/index.d.mts +1 -0
- package/dist/graphql/index.d.ts +1 -0
- package/dist/graphql/index.esm.js +107 -3
- package/dist/graphql/init.cjs.js +53 -2
- package/dist/graphql/init.esm.js +53 -2
- package/dist/graphql/server.cjs.js +52 -1
- package/dist/graphql/server.esm.js +52 -1
- package/dist/graphql/utils.cjs.js +54 -1
- package/dist/graphql/utils.d.mts +10 -3
- package/dist/graphql/utils.d.ts +10 -3
- package/dist/graphql/utils.esm.js +54 -1
- package/package.json +1 -1
package/dist/graphql/init.esm.js
CHANGED
|
@@ -9,6 +9,57 @@ import { startServerAndCreateNextHandler } from "@as-integrations/next";
|
|
|
9
9
|
import {
|
|
10
10
|
buildTypeDefsAndResolvers
|
|
11
11
|
} from "type-graphql";
|
|
12
|
+
|
|
13
|
+
// src/env.ts
|
|
14
|
+
var getEnvValue = (key) => {
|
|
15
|
+
switch (key) {
|
|
16
|
+
case "NEXT_PUBLIC_GRAPHQL_ENDPOINT" /* NEXT_PUBLIC_GRAPHQL_ENDPOINT */:
|
|
17
|
+
return process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT;
|
|
18
|
+
case "NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */:
|
|
19
|
+
return process.env.NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT;
|
|
20
|
+
case "NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT" /* NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT */:
|
|
21
|
+
return process.env.NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT;
|
|
22
|
+
case "NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT" /* NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT */:
|
|
23
|
+
return process.env.NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT;
|
|
24
|
+
case "NEXT_PUBLIC_FILE_ENDPOINT" /* NEXT_PUBLIC_FILE_ENDPOINT */:
|
|
25
|
+
return process.env.NEXT_PUBLIC_FILE_ENDPOINT;
|
|
26
|
+
case "NEXT_PUBLIC_BASE_URL" /* NEXT_PUBLIC_BASE_URL */:
|
|
27
|
+
return process.env.NEXT_PUBLIC_BASE_URL;
|
|
28
|
+
case "REFRESH_KEY" /* REFRESH_KEY */:
|
|
29
|
+
return process.env.REFRESH_KEY;
|
|
30
|
+
case "SIGNING_KEY" /* SIGNING_KEY */:
|
|
31
|
+
return process.env.SIGNING_KEY;
|
|
32
|
+
case "INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */:
|
|
33
|
+
return process.env.INSTAGRAM_CLIENT_SECRET;
|
|
34
|
+
case "INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */:
|
|
35
|
+
return process.env.INSTAGRAM_CLIENT_ID;
|
|
36
|
+
case "GOOGLE_CLIENT_SECRET" /* GOOGLE_CLIENT_SECRET */:
|
|
37
|
+
return process.env.GOOGLE_CLIENT_SECRET;
|
|
38
|
+
case "GOOGLE_CLIENT_ID" /* GOOGLE_CLIENT_ID */:
|
|
39
|
+
return process.env.GOOGLE_CLIENT_ID;
|
|
40
|
+
case "TURNSTILE_KEY" /* TURNSTILE_KEY */:
|
|
41
|
+
return process.env.TURNSTILE_KEY;
|
|
42
|
+
case "AWS_ACCESS_KEY_ID" /* AWS_ACCESS_KEY_ID */:
|
|
43
|
+
return process.env.AWS_ACCESS_KEY_ID;
|
|
44
|
+
case "AWS_ACCESS_KEY_SECRET" /* AWS_ACCESS_KEY_SECRET */:
|
|
45
|
+
return process.env.AWS_ACCESS_KEY_SECRET;
|
|
46
|
+
case "AWS_REGION" /* AWS_REGION */:
|
|
47
|
+
return process.env.AWS_REGION;
|
|
48
|
+
case "AWS_BUCKET" /* AWS_BUCKET */:
|
|
49
|
+
return process.env.AWS_BUCKET;
|
|
50
|
+
case "NODE_ENV" /* NODE_ENV */:
|
|
51
|
+
return process.env.NODE_ENV;
|
|
52
|
+
default:
|
|
53
|
+
return process.env[key];
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
function getEnv(key, skipCheck) {
|
|
57
|
+
const value = getEnvValue(key);
|
|
58
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// src/graphql/init.ts
|
|
12
63
|
async function initGraphQLServer({
|
|
13
64
|
authChecker,
|
|
14
65
|
resolvers,
|
|
@@ -24,7 +75,7 @@ async function initGraphQLServer({
|
|
|
24
75
|
typeDefs,
|
|
25
76
|
resolvers: builtResolvers,
|
|
26
77
|
plugins: [
|
|
27
|
-
|
|
78
|
+
getEnv("NODE_ENV" /* NODE_ENV */, true) === "production" ? ApolloServerPluginLandingPageProductionDefault() : ApolloServerPluginLandingPageLocalDefault(),
|
|
28
79
|
{
|
|
29
80
|
async requestDidStart({ request, contextValue }) {
|
|
30
81
|
if (contextValue.isRefreshID && !request.query?.startsWith("query"))
|
|
@@ -33,7 +84,7 @@ async function initGraphQLServer({
|
|
|
33
84
|
},
|
|
34
85
|
...plugins || []
|
|
35
86
|
],
|
|
36
|
-
introspection:
|
|
87
|
+
introspection: getEnv("NODE_ENV" /* NODE_ENV */, true) !== "production",
|
|
37
88
|
status400ForVariableCoercionErrors: true
|
|
38
89
|
});
|
|
39
90
|
const handler = startServerAndCreateNextHandler(server, {
|
|
@@ -28,6 +28,57 @@ var import_client = require("@apollo/client");
|
|
|
28
28
|
var import_client_integration_nextjs = require("@apollo/client-integration-nextjs");
|
|
29
29
|
var import_headers = require("next/headers");
|
|
30
30
|
var import_react = require("react");
|
|
31
|
+
|
|
32
|
+
// src/env.ts
|
|
33
|
+
var getEnvValue = (key) => {
|
|
34
|
+
switch (key) {
|
|
35
|
+
case "NEXT_PUBLIC_GRAPHQL_ENDPOINT" /* NEXT_PUBLIC_GRAPHQL_ENDPOINT */:
|
|
36
|
+
return process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT;
|
|
37
|
+
case "NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */:
|
|
38
|
+
return process.env.NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT;
|
|
39
|
+
case "NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT" /* NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT */:
|
|
40
|
+
return process.env.NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT;
|
|
41
|
+
case "NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT" /* NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT */:
|
|
42
|
+
return process.env.NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT;
|
|
43
|
+
case "NEXT_PUBLIC_FILE_ENDPOINT" /* NEXT_PUBLIC_FILE_ENDPOINT */:
|
|
44
|
+
return process.env.NEXT_PUBLIC_FILE_ENDPOINT;
|
|
45
|
+
case "NEXT_PUBLIC_BASE_URL" /* NEXT_PUBLIC_BASE_URL */:
|
|
46
|
+
return process.env.NEXT_PUBLIC_BASE_URL;
|
|
47
|
+
case "REFRESH_KEY" /* REFRESH_KEY */:
|
|
48
|
+
return process.env.REFRESH_KEY;
|
|
49
|
+
case "SIGNING_KEY" /* SIGNING_KEY */:
|
|
50
|
+
return process.env.SIGNING_KEY;
|
|
51
|
+
case "INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */:
|
|
52
|
+
return process.env.INSTAGRAM_CLIENT_SECRET;
|
|
53
|
+
case "INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */:
|
|
54
|
+
return process.env.INSTAGRAM_CLIENT_ID;
|
|
55
|
+
case "GOOGLE_CLIENT_SECRET" /* GOOGLE_CLIENT_SECRET */:
|
|
56
|
+
return process.env.GOOGLE_CLIENT_SECRET;
|
|
57
|
+
case "GOOGLE_CLIENT_ID" /* GOOGLE_CLIENT_ID */:
|
|
58
|
+
return process.env.GOOGLE_CLIENT_ID;
|
|
59
|
+
case "TURNSTILE_KEY" /* TURNSTILE_KEY */:
|
|
60
|
+
return process.env.TURNSTILE_KEY;
|
|
61
|
+
case "AWS_ACCESS_KEY_ID" /* AWS_ACCESS_KEY_ID */:
|
|
62
|
+
return process.env.AWS_ACCESS_KEY_ID;
|
|
63
|
+
case "AWS_ACCESS_KEY_SECRET" /* AWS_ACCESS_KEY_SECRET */:
|
|
64
|
+
return process.env.AWS_ACCESS_KEY_SECRET;
|
|
65
|
+
case "AWS_REGION" /* AWS_REGION */:
|
|
66
|
+
return process.env.AWS_REGION;
|
|
67
|
+
case "AWS_BUCKET" /* AWS_BUCKET */:
|
|
68
|
+
return process.env.AWS_BUCKET;
|
|
69
|
+
case "NODE_ENV" /* NODE_ENV */:
|
|
70
|
+
return process.env.NODE_ENV;
|
|
71
|
+
default:
|
|
72
|
+
return process.env[key];
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
function getEnv(key, skipCheck) {
|
|
76
|
+
const value = getEnvValue(key);
|
|
77
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// src/graphql/server.tsx
|
|
31
82
|
function Injector({
|
|
32
83
|
fetch,
|
|
33
84
|
Component,
|
|
@@ -47,7 +98,7 @@ var { query: gqlQuery } = (0, import_client_integration_nextjs.registerApolloCli
|
|
|
47
98
|
return new import_client.ApolloClient({
|
|
48
99
|
cache: new import_client.InMemoryCache(),
|
|
49
100
|
link: new import_client.HttpLink({
|
|
50
|
-
uri:
|
|
101
|
+
uri: getEnv("NEXT_PUBLIC_GRAPHQL_ENDPOINT" /* NEXT_PUBLIC_GRAPHQL_ENDPOINT */)
|
|
51
102
|
})
|
|
52
103
|
});
|
|
53
104
|
});
|
|
@@ -7,6 +7,57 @@ import {
|
|
|
7
7
|
import { registerApolloClient } from "@apollo/client-integration-nextjs";
|
|
8
8
|
import { cookies } from "next/headers";
|
|
9
9
|
import { Suspense } from "react";
|
|
10
|
+
|
|
11
|
+
// src/env.ts
|
|
12
|
+
var getEnvValue = (key) => {
|
|
13
|
+
switch (key) {
|
|
14
|
+
case "NEXT_PUBLIC_GRAPHQL_ENDPOINT" /* NEXT_PUBLIC_GRAPHQL_ENDPOINT */:
|
|
15
|
+
return process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT;
|
|
16
|
+
case "NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */:
|
|
17
|
+
return process.env.NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT;
|
|
18
|
+
case "NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT" /* NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT */:
|
|
19
|
+
return process.env.NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT;
|
|
20
|
+
case "NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT" /* NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT */:
|
|
21
|
+
return process.env.NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT;
|
|
22
|
+
case "NEXT_PUBLIC_FILE_ENDPOINT" /* NEXT_PUBLIC_FILE_ENDPOINT */:
|
|
23
|
+
return process.env.NEXT_PUBLIC_FILE_ENDPOINT;
|
|
24
|
+
case "NEXT_PUBLIC_BASE_URL" /* NEXT_PUBLIC_BASE_URL */:
|
|
25
|
+
return process.env.NEXT_PUBLIC_BASE_URL;
|
|
26
|
+
case "REFRESH_KEY" /* REFRESH_KEY */:
|
|
27
|
+
return process.env.REFRESH_KEY;
|
|
28
|
+
case "SIGNING_KEY" /* SIGNING_KEY */:
|
|
29
|
+
return process.env.SIGNING_KEY;
|
|
30
|
+
case "INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */:
|
|
31
|
+
return process.env.INSTAGRAM_CLIENT_SECRET;
|
|
32
|
+
case "INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */:
|
|
33
|
+
return process.env.INSTAGRAM_CLIENT_ID;
|
|
34
|
+
case "GOOGLE_CLIENT_SECRET" /* GOOGLE_CLIENT_SECRET */:
|
|
35
|
+
return process.env.GOOGLE_CLIENT_SECRET;
|
|
36
|
+
case "GOOGLE_CLIENT_ID" /* GOOGLE_CLIENT_ID */:
|
|
37
|
+
return process.env.GOOGLE_CLIENT_ID;
|
|
38
|
+
case "TURNSTILE_KEY" /* TURNSTILE_KEY */:
|
|
39
|
+
return process.env.TURNSTILE_KEY;
|
|
40
|
+
case "AWS_ACCESS_KEY_ID" /* AWS_ACCESS_KEY_ID */:
|
|
41
|
+
return process.env.AWS_ACCESS_KEY_ID;
|
|
42
|
+
case "AWS_ACCESS_KEY_SECRET" /* AWS_ACCESS_KEY_SECRET */:
|
|
43
|
+
return process.env.AWS_ACCESS_KEY_SECRET;
|
|
44
|
+
case "AWS_REGION" /* AWS_REGION */:
|
|
45
|
+
return process.env.AWS_REGION;
|
|
46
|
+
case "AWS_BUCKET" /* AWS_BUCKET */:
|
|
47
|
+
return process.env.AWS_BUCKET;
|
|
48
|
+
case "NODE_ENV" /* NODE_ENV */:
|
|
49
|
+
return process.env.NODE_ENV;
|
|
50
|
+
default:
|
|
51
|
+
return process.env[key];
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
function getEnv(key, skipCheck) {
|
|
55
|
+
const value = getEnvValue(key);
|
|
56
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/graphql/server.tsx
|
|
10
61
|
function Injector({
|
|
11
62
|
fetch,
|
|
12
63
|
Component,
|
|
@@ -26,7 +77,7 @@ var { query: gqlQuery } = registerApolloClient(() => {
|
|
|
26
77
|
return new ApolloClient({
|
|
27
78
|
cache: new InMemoryCache(),
|
|
28
79
|
link: new HttpLink({
|
|
29
|
-
uri:
|
|
80
|
+
uri: getEnv("NEXT_PUBLIC_GRAPHQL_ENDPOINT" /* NEXT_PUBLIC_GRAPHQL_ENDPOINT */)
|
|
30
81
|
})
|
|
31
82
|
});
|
|
32
83
|
});
|
|
@@ -34,9 +34,62 @@ __export(utils_exports, {
|
|
|
34
34
|
query: () => query
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(utils_exports);
|
|
37
|
+
var import_cache = require("next/cache");
|
|
38
|
+
var import_headers2 = require("next/headers");
|
|
37
39
|
var import_type_graphql = require("type-graphql");
|
|
40
|
+
|
|
41
|
+
// src/auth/constants.ts
|
|
42
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
43
|
+
|
|
44
|
+
// src/auth/email/token.ts
|
|
45
|
+
var import_bcryptjs = require("bcryptjs");
|
|
46
|
+
var import_jsonwebtoken = require("jsonwebtoken");
|
|
47
|
+
var import_headers = require("next/headers");
|
|
48
|
+
var import_navigation = require("next/navigation");
|
|
49
|
+
var import_server = require("next/server");
|
|
50
|
+
function getUserIdFromRefreshToken(refreshKey, refreshToken) {
|
|
51
|
+
if (refreshToken)
|
|
52
|
+
try {
|
|
53
|
+
const decoded = (0, import_jsonwebtoken.verify)(refreshToken, refreshKey);
|
|
54
|
+
if (typeof decoded !== "string" && typeof decoded.id === "number")
|
|
55
|
+
return decoded.id;
|
|
56
|
+
} catch (e) {
|
|
57
|
+
if (!(e instanceof import_jsonwebtoken.JsonWebTokenError)) console.error(e, "errors");
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// src/graphql/utils.ts
|
|
38
64
|
function query(fn, options) {
|
|
39
|
-
return { ...options, fn };
|
|
65
|
+
return { ...options, fn, call: getCaller(fn, options) };
|
|
66
|
+
}
|
|
67
|
+
var getUserId = async () => {
|
|
68
|
+
const Cookie = await (0, import_headers2.cookies)();
|
|
69
|
+
const refresh = Cookie.get(REFRESH_COOKIE_NAME)?.value;
|
|
70
|
+
return refresh ? getUserIdFromRefreshToken(refresh) : null;
|
|
71
|
+
};
|
|
72
|
+
function getCaller(fn, options) {
|
|
73
|
+
return async (data, config) => {
|
|
74
|
+
if (config?.revalidate) {
|
|
75
|
+
const cachedFn = (data2, config2) => {
|
|
76
|
+
"use cache";
|
|
77
|
+
if (config2?.revalidate) (0, import_cache.cacheLife)(config2.revalidate);
|
|
78
|
+
if (config2?.tags) (0, import_cache.cacheTag)(...config2.tags);
|
|
79
|
+
const ctx2 = {
|
|
80
|
+
userId: null,
|
|
81
|
+
isRefreshID: true
|
|
82
|
+
};
|
|
83
|
+
return fn(ctx2, data2);
|
|
84
|
+
};
|
|
85
|
+
return cachedFn(data, config);
|
|
86
|
+
}
|
|
87
|
+
const ctx = {
|
|
88
|
+
userId: options.authorized ? await getUserId() : null,
|
|
89
|
+
isRefreshID: true
|
|
90
|
+
};
|
|
91
|
+
return fn(ctx, data);
|
|
92
|
+
};
|
|
40
93
|
}
|
|
41
94
|
function field(fn, options) {
|
|
42
95
|
return { ...options, fn };
|
package/dist/graphql/utils.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GraphQLScalarType } from 'graphql';
|
|
2
|
+
import { cacheLife } from 'next/cache';
|
|
2
3
|
import { Query, Arg, ClassType } from 'type-graphql';
|
|
3
4
|
import { AuthorizedContext, Context } from './types.mjs';
|
|
4
5
|
|
|
@@ -15,6 +16,7 @@ type NullableOptions<T, X extends boolean> = T & {
|
|
|
15
16
|
type ParsedGQLType<T, MergeNullUndefined extends boolean> = T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T extends GraphQLScalarType<infer U> ? U : T extends ClassType<infer U> ? MergeNullUndefined extends true ? NormalizeNullUndefined<U> : U : T extends Record<infer K, string | number> ? T[K] : void;
|
|
16
17
|
type ParsedGQLTypeWithArray<T, MergeNullUndefined extends boolean> = T extends Array<infer U> ? ParsedGQLType<U, MergeNullUndefined>[] : ParsedGQLType<T, MergeNullUndefined>;
|
|
17
18
|
type ParsedGQLTypeWithNullability<T, IsNullable extends boolean, MergeNullUndefined extends boolean> = IsNullable extends true ? ParsedGQLTypeWithArray<T, MergeNullUndefined> | null | undefined : ParsedGQLTypeWithArray<T, MergeNullUndefined>;
|
|
19
|
+
type Promisify<T> = T | Promise<T>;
|
|
18
20
|
interface BaseDefinition<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> {
|
|
19
21
|
output: T;
|
|
20
22
|
outputOptions?: NullableOptions<ReturnOptions, OutputNullable>;
|
|
@@ -23,12 +25,17 @@ interface BaseDefinition<T, U, IsAuth extends boolean = false, OutputNullable ex
|
|
|
23
25
|
authorized?: IsAuth;
|
|
24
26
|
}
|
|
25
27
|
interface QueryDefinition<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> extends BaseDefinition<T, U, IsAuth, OutputNullable, InputNullable> {
|
|
26
|
-
fn: (ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable, false>) =>
|
|
28
|
+
fn: (ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable, false>) => Promisify<ParsedGQLTypeWithNullability<T, OutputNullable, true>>;
|
|
29
|
+
call: (data: ParsedGQLTypeWithNullability<U, InputNullable, false>, config?: CallerConfig<IsAuth>) => Promisify<ParsedGQLTypeWithNullability<T, OutputNullable, true>>;
|
|
27
30
|
mutation?: boolean;
|
|
28
31
|
}
|
|
29
|
-
|
|
32
|
+
type CallerConfig<IsAuth extends boolean> = {
|
|
33
|
+
revalidate?: IsAuth extends true ? never : Parameters<typeof cacheLife>[0];
|
|
34
|
+
tags?: IsAuth extends true ? never : string[];
|
|
35
|
+
};
|
|
36
|
+
declare function query<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false>(fn: QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>["fn"], options: Omit<QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>, "fn" | "call">): QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>;
|
|
30
37
|
interface FieldResolverDefinition<T, U, Root, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> extends BaseDefinition<T, U, IsAuth, OutputNullable, InputNullable> {
|
|
31
|
-
fn: (root: Root, ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable, false>) =>
|
|
38
|
+
fn: (root: Root, ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable, false>) => Promisify<ParsedGQLTypeWithNullability<T, OutputNullable, true>>;
|
|
32
39
|
}
|
|
33
40
|
declare function field<T, U, IsAuth extends boolean, Root, OutputNullable extends boolean = false, InputNullable extends boolean = false>(fn: FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>["fn"], options: Omit<FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>, "fn">): FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>;
|
|
34
41
|
declare function QueryLibrary<T extends Record<string, QueryDefinition<any, any, any, any, any>>>(queries: T): {
|
package/dist/graphql/utils.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GraphQLScalarType } from 'graphql';
|
|
2
|
+
import { cacheLife } from 'next/cache';
|
|
2
3
|
import { Query, Arg, ClassType } from 'type-graphql';
|
|
3
4
|
import { AuthorizedContext, Context } from './types.js';
|
|
4
5
|
|
|
@@ -15,6 +16,7 @@ type NullableOptions<T, X extends boolean> = T & {
|
|
|
15
16
|
type ParsedGQLType<T, MergeNullUndefined extends boolean> = T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T extends GraphQLScalarType<infer U> ? U : T extends ClassType<infer U> ? MergeNullUndefined extends true ? NormalizeNullUndefined<U> : U : T extends Record<infer K, string | number> ? T[K] : void;
|
|
16
17
|
type ParsedGQLTypeWithArray<T, MergeNullUndefined extends boolean> = T extends Array<infer U> ? ParsedGQLType<U, MergeNullUndefined>[] : ParsedGQLType<T, MergeNullUndefined>;
|
|
17
18
|
type ParsedGQLTypeWithNullability<T, IsNullable extends boolean, MergeNullUndefined extends boolean> = IsNullable extends true ? ParsedGQLTypeWithArray<T, MergeNullUndefined> | null | undefined : ParsedGQLTypeWithArray<T, MergeNullUndefined>;
|
|
19
|
+
type Promisify<T> = T | Promise<T>;
|
|
18
20
|
interface BaseDefinition<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> {
|
|
19
21
|
output: T;
|
|
20
22
|
outputOptions?: NullableOptions<ReturnOptions, OutputNullable>;
|
|
@@ -23,12 +25,17 @@ interface BaseDefinition<T, U, IsAuth extends boolean = false, OutputNullable ex
|
|
|
23
25
|
authorized?: IsAuth;
|
|
24
26
|
}
|
|
25
27
|
interface QueryDefinition<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> extends BaseDefinition<T, U, IsAuth, OutputNullable, InputNullable> {
|
|
26
|
-
fn: (ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable, false>) =>
|
|
28
|
+
fn: (ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable, false>) => Promisify<ParsedGQLTypeWithNullability<T, OutputNullable, true>>;
|
|
29
|
+
call: (data: ParsedGQLTypeWithNullability<U, InputNullable, false>, config?: CallerConfig<IsAuth>) => Promisify<ParsedGQLTypeWithNullability<T, OutputNullable, true>>;
|
|
27
30
|
mutation?: boolean;
|
|
28
31
|
}
|
|
29
|
-
|
|
32
|
+
type CallerConfig<IsAuth extends boolean> = {
|
|
33
|
+
revalidate?: IsAuth extends true ? never : Parameters<typeof cacheLife>[0];
|
|
34
|
+
tags?: IsAuth extends true ? never : string[];
|
|
35
|
+
};
|
|
36
|
+
declare function query<T, U, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false>(fn: QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>["fn"], options: Omit<QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>, "fn" | "call">): QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>;
|
|
30
37
|
interface FieldResolverDefinition<T, U, Root, IsAuth extends boolean = false, OutputNullable extends boolean = false, InputNullable extends boolean = false> extends BaseDefinition<T, U, IsAuth, OutputNullable, InputNullable> {
|
|
31
|
-
fn: (root: Root, ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable, false>) =>
|
|
38
|
+
fn: (root: Root, ctx: IsAuth extends true ? AuthorizedContext : Context, data: ParsedGQLTypeWithNullability<U, InputNullable, false>) => Promisify<ParsedGQLTypeWithNullability<T, OutputNullable, true>>;
|
|
32
39
|
}
|
|
33
40
|
declare function field<T, U, IsAuth extends boolean, Root, OutputNullable extends boolean = false, InputNullable extends boolean = false>(fn: FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>["fn"], options: Omit<FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>, "fn">): FieldResolverDefinition<T, U, Root, IsAuth, OutputNullable, InputNullable>;
|
|
34
41
|
declare function QueryLibrary<T extends Record<string, QueryDefinition<any, any, any, any, any>>>(queries: T): {
|
|
@@ -10,6 +10,8 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
// src/graphql/utils.ts
|
|
13
|
+
import { cacheLife, cacheTag } from "next/cache";
|
|
14
|
+
import { cookies as cookies2 } from "next/headers";
|
|
13
15
|
import {
|
|
14
16
|
Arg,
|
|
15
17
|
Authorized,
|
|
@@ -20,8 +22,59 @@ import {
|
|
|
20
22
|
Resolver,
|
|
21
23
|
Root
|
|
22
24
|
} from "type-graphql";
|
|
25
|
+
|
|
26
|
+
// src/auth/constants.ts
|
|
27
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
28
|
+
|
|
29
|
+
// src/auth/email/token.ts
|
|
30
|
+
import { compare } from "bcryptjs";
|
|
31
|
+
import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
|
|
32
|
+
import { cookies } from "next/headers";
|
|
33
|
+
import { redirect } from "next/navigation";
|
|
34
|
+
import { NextResponse } from "next/server";
|
|
35
|
+
function getUserIdFromRefreshToken(refreshKey, refreshToken) {
|
|
36
|
+
if (refreshToken)
|
|
37
|
+
try {
|
|
38
|
+
const decoded = verify(refreshToken, refreshKey);
|
|
39
|
+
if (typeof decoded !== "string" && typeof decoded.id === "number")
|
|
40
|
+
return decoded.id;
|
|
41
|
+
} catch (e) {
|
|
42
|
+
if (!(e instanceof JsonWebTokenError)) console.error(e, "errors");
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// src/graphql/utils.ts
|
|
23
49
|
function query(fn, options) {
|
|
24
|
-
return { ...options, fn };
|
|
50
|
+
return { ...options, fn, call: getCaller(fn, options) };
|
|
51
|
+
}
|
|
52
|
+
var getUserId = async () => {
|
|
53
|
+
const Cookie = await cookies2();
|
|
54
|
+
const refresh = Cookie.get(REFRESH_COOKIE_NAME)?.value;
|
|
55
|
+
return refresh ? getUserIdFromRefreshToken(refresh) : null;
|
|
56
|
+
};
|
|
57
|
+
function getCaller(fn, options) {
|
|
58
|
+
return async (data, config) => {
|
|
59
|
+
if (config?.revalidate) {
|
|
60
|
+
const cachedFn = (data2, config2) => {
|
|
61
|
+
"use cache";
|
|
62
|
+
if (config2?.revalidate) cacheLife(config2.revalidate);
|
|
63
|
+
if (config2?.tags) cacheTag(...config2.tags);
|
|
64
|
+
const ctx2 = {
|
|
65
|
+
userId: null,
|
|
66
|
+
isRefreshID: true
|
|
67
|
+
};
|
|
68
|
+
return fn(ctx2, data2);
|
|
69
|
+
};
|
|
70
|
+
return cachedFn(data, config);
|
|
71
|
+
}
|
|
72
|
+
const ctx = {
|
|
73
|
+
userId: options.authorized ? await getUserId() : null,
|
|
74
|
+
isRefreshID: true
|
|
75
|
+
};
|
|
76
|
+
return fn(ctx, data);
|
|
77
|
+
};
|
|
25
78
|
}
|
|
26
79
|
function field(fn, options) {
|
|
27
80
|
return { ...options, fn };
|