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.
Files changed (87) hide show
  1. package/dist/auth/email/client.cjs.js +69 -12
  2. package/dist/auth/email/client.esm.js +69 -12
  3. package/dist/auth/email/index.cjs.js +74 -15
  4. package/dist/auth/email/index.esm.js +74 -15
  5. package/dist/auth/email/routes/delete.cjs.js +56 -4
  6. package/dist/auth/email/routes/delete.esm.js +56 -4
  7. package/dist/auth/email/routes/get.cjs.js +54 -2
  8. package/dist/auth/email/routes/get.esm.js +54 -2
  9. package/dist/auth/email/routes/post.cjs.js +59 -6
  10. package/dist/auth/email/routes/post.esm.js +59 -6
  11. package/dist/auth/email/routes/put.cjs.js +54 -4
  12. package/dist/auth/email/routes/put.esm.js +54 -4
  13. package/dist/auth/email/token.cjs.js +51 -2
  14. package/dist/auth/email/token.esm.js +51 -2
  15. package/dist/auth/email/types.d.mts +1 -7
  16. package/dist/auth/email/types.d.ts +1 -7
  17. package/dist/auth/email/utils.cjs.js +58 -5
  18. package/dist/auth/email/utils.d.mts +2 -2
  19. package/dist/auth/email/utils.d.ts +2 -2
  20. package/dist/auth/email/utils.esm.js +58 -5
  21. package/dist/auth/google/get.cjs.js +57 -7
  22. package/dist/auth/google/get.d.mts +1 -3
  23. package/dist/auth/google/get.d.ts +1 -3
  24. package/dist/auth/google/get.esm.js +57 -7
  25. package/dist/auth/google/index.cjs.js +57 -7
  26. package/dist/auth/google/index.d.mts +0 -5
  27. package/dist/auth/google/index.d.ts +0 -5
  28. package/dist/auth/google/index.esm.js +57 -7
  29. package/dist/auth/index.cjs.js +89 -31
  30. package/dist/auth/index.esm.js +89 -31
  31. package/dist/auth/instagram/client.cjs.js +54 -1
  32. package/dist/auth/instagram/client.d.mts +1 -1
  33. package/dist/auth/instagram/client.d.ts +1 -1
  34. package/dist/auth/instagram/client.esm.js +52 -1
  35. package/dist/auth/instagram/index.cjs.js +58 -9
  36. package/dist/auth/instagram/index.d.mts +0 -2
  37. package/dist/auth/instagram/index.d.ts +0 -2
  38. package/dist/auth/instagram/index.esm.js +58 -9
  39. package/dist/auth/instagram/route.cjs.js +58 -9
  40. package/dist/auth/instagram/route.d.mts +1 -1
  41. package/dist/auth/instagram/route.d.ts +1 -1
  42. package/dist/auth/instagram/route.esm.js +58 -9
  43. package/dist/auth/instagram/utils.cjs.js +52 -1
  44. package/dist/auth/instagram/utils.esm.js +50 -1
  45. package/dist/client/index.cjs.js +50 -1
  46. package/dist/client/index.esm.js +50 -1
  47. package/dist/client/seo.cjs.js +52 -1
  48. package/dist/client/seo.esm.js +50 -1
  49. package/dist/env.cjs.js +101 -0
  50. package/dist/env.d.mts +24 -0
  51. package/dist/env.d.ts +24 -0
  52. package/dist/env.esm.js +74 -0
  53. package/dist/file/client.cjs.js +52 -1
  54. package/dist/file/client.esm.js +52 -1
  55. package/dist/file/index.cjs.js +82 -28
  56. package/dist/file/index.d.mts +0 -2
  57. package/dist/file/index.d.ts +0 -2
  58. package/dist/file/index.esm.js +82 -28
  59. package/dist/file/put.cjs.js +65 -11
  60. package/dist/file/put.d.mts +0 -2
  61. package/dist/file/put.d.ts +0 -2
  62. package/dist/file/put.esm.js +65 -11
  63. package/dist/file/setup.cjs.js +82 -28
  64. package/dist/file/setup.d.mts +0 -7
  65. package/dist/file/setup.d.ts +0 -7
  66. package/dist/file/setup.esm.js +82 -28
  67. package/dist/file/utils.cjs.js +70 -17
  68. package/dist/file/utils.d.mts +6 -10
  69. package/dist/file/utils.d.ts +6 -10
  70. package/dist/file/utils.esm.js +70 -17
  71. package/dist/graphql/client.cjs.js +57 -3
  72. package/dist/graphql/client.d.mts +1 -1
  73. package/dist/graphql/client.d.ts +1 -1
  74. package/dist/graphql/client.esm.js +57 -3
  75. package/dist/graphql/index.cjs.js +107 -3
  76. package/dist/graphql/index.d.mts +1 -0
  77. package/dist/graphql/index.d.ts +1 -0
  78. package/dist/graphql/index.esm.js +107 -3
  79. package/dist/graphql/init.cjs.js +53 -2
  80. package/dist/graphql/init.esm.js +53 -2
  81. package/dist/graphql/server.cjs.js +52 -1
  82. package/dist/graphql/server.esm.js +52 -1
  83. package/dist/graphql/utils.cjs.js +54 -1
  84. package/dist/graphql/utils.d.mts +10 -3
  85. package/dist/graphql/utils.d.ts +10 -3
  86. package/dist/graphql/utils.esm.js +54 -1
  87. package/package.json +1 -1
@@ -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
- process.env.NODE_ENV === "production" ? ApolloServerPluginLandingPageProductionDefault() : ApolloServerPluginLandingPageLocalDefault(),
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: process.env.NODE_ENV !== "production",
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: process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT
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: process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT
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 };
@@ -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>) => Promise<ParsedGQLTypeWithNullability<T, OutputNullable, true>> | ParsedGQLTypeWithNullability<T, OutputNullable, true>;
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
- 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">): QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>;
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>) => Promise<ParsedGQLTypeWithNullability<T, OutputNullable, true>> | ParsedGQLTypeWithNullability<T, OutputNullable, true>;
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): {
@@ -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>) => Promise<ParsedGQLTypeWithNullability<T, OutputNullable, true>> | ParsedGQLTypeWithNullability<T, OutputNullable, true>;
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
- 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">): QueryDefinition<T, U, IsAuth, OutputNullable, InputNullable>;
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>) => Promise<ParsedGQLTypeWithNullability<T, OutputNullable, true>> | ParsedGQLTypeWithNullability<T, OutputNullable, true>;
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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "naystack",
3
- "version": "1.4.16",
3
+ "version": "1.4.21",
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",