dn-react-router-toolkit 0.4.2 → 0.5.0

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 (89) hide show
  1. package/dist/api/create_api_handler.d.mts +28 -0
  2. package/dist/api/create_api_handler.d.ts +28 -0
  3. package/dist/api/create_api_handler.js +148 -0
  4. package/dist/api/create_api_handler.mjs +132 -0
  5. package/dist/api/create_handler.d.mts +1 -1
  6. package/dist/api/create_handler.d.ts +1 -1
  7. package/dist/api/create_handler.js +29 -26
  8. package/dist/api/create_handler.mjs +29 -26
  9. package/dist/api/index.js +29 -26
  10. package/dist/api/index.mjs +29 -26
  11. package/dist/api/item_api_handler.d.mts +18 -0
  12. package/dist/api/item_api_handler.d.ts +18 -0
  13. package/dist/api/item_api_handler.js +55 -0
  14. package/dist/api/item_api_handler.mjs +30 -0
  15. package/dist/auth/index.d.mts +1 -1
  16. package/dist/auth/index.d.ts +1 -1
  17. package/dist/auth/index.js +62 -16
  18. package/dist/auth/index.mjs +60 -15
  19. package/dist/auth/with_auth.d.mts +8 -3
  20. package/dist/auth/with_auth.d.ts +8 -3
  21. package/dist/auth/with_auth.js +62 -16
  22. package/dist/auth/with_auth.mjs +60 -15
  23. package/dist/crud/crud_form.d.mts +13 -0
  24. package/dist/crud/crud_form.d.ts +13 -0
  25. package/dist/crud/crud_form.js +88 -0
  26. package/dist/crud/crud_form.mjs +55 -0
  27. package/dist/crud/crud_form_provider.d.mts +34 -0
  28. package/dist/crud/crud_form_provider.d.ts +34 -0
  29. package/dist/crud/crud_form_provider.js +160 -0
  30. package/dist/crud/crud_form_provider.mjs +124 -0
  31. package/dist/crud/crud_loader.d.mts +21 -0
  32. package/dist/crud/crud_loader.d.ts +21 -0
  33. package/dist/crud/crud_loader.js +288 -0
  34. package/dist/crud/crud_loader.mjs +273 -0
  35. package/dist/crud/crud_page.d.mts +25 -0
  36. package/dist/crud/crud_page.d.ts +25 -0
  37. package/dist/crud/crud_page.js +645 -0
  38. package/dist/crud/crud_page.mjs +616 -0
  39. package/dist/crud/generate_handlers.d.mts +15 -0
  40. package/dist/crud/generate_handlers.d.ts +15 -0
  41. package/dist/crud/generate_handlers.js +39 -0
  42. package/dist/crud/generate_handlers.mjs +14 -0
  43. package/dist/crud/generate_pages.d.mts +11 -0
  44. package/dist/crud/generate_pages.d.ts +11 -0
  45. package/dist/crud/generate_pages.js +52 -0
  46. package/dist/crud/generate_pages.mjs +17 -0
  47. package/dist/crud/generate_routes.d.mts +5 -0
  48. package/dist/crud/generate_routes.d.ts +5 -0
  49. package/dist/crud/generate_routes.js +62 -0
  50. package/dist/crud/generate_routes.mjs +27 -0
  51. package/dist/crud/index.d.mts +21 -0
  52. package/dist/crud/index.d.ts +21 -0
  53. package/dist/crud/index.js +970 -0
  54. package/dist/crud/index.mjs +945 -0
  55. package/dist/db/index.d.mts +4 -0
  56. package/dist/db/index.d.ts +4 -0
  57. package/dist/db/index.js +46 -0
  58. package/dist/db/index.mjs +8 -0
  59. package/dist/index.d.mts +3 -2
  60. package/dist/index.d.ts +3 -2
  61. package/dist/table/buttons.d.mts +10 -0
  62. package/dist/table/buttons.d.ts +10 -0
  63. package/dist/table/buttons.js +102 -0
  64. package/dist/table/buttons.mjs +71 -0
  65. package/dist/table/index.d.mts +9 -0
  66. package/dist/table/index.d.ts +9 -0
  67. package/dist/table/index.js +570 -0
  68. package/dist/table/index.mjs +543 -0
  69. package/dist/table/item_loader.d.mts +12 -0
  70. package/dist/table/item_loader.d.ts +12 -0
  71. package/dist/table/item_loader.js +51 -0
  72. package/dist/table/item_loader.mjs +26 -0
  73. package/dist/table/loader.d.mts +28 -0
  74. package/dist/table/loader.d.ts +28 -0
  75. package/dist/table/loader.js +70 -0
  76. package/dist/table/loader.mjs +48 -0
  77. package/dist/table/page.d.mts +27 -0
  78. package/dist/table/page.d.ts +27 -0
  79. package/dist/table/page.js +444 -0
  80. package/dist/table/page.mjs +415 -0
  81. package/dist/table/repository.d.mts +38 -0
  82. package/dist/table/repository.d.ts +38 -0
  83. package/dist/table/repository.js +76 -0
  84. package/dist/table/repository.mjs +56 -0
  85. package/dist/table/table.d.mts +27 -0
  86. package/dist/table/table.d.ts +27 -0
  87. package/dist/table/table.js +290 -0
  88. package/dist/table/table.mjs +255 -0
  89. package/package.json +78 -59
@@ -0,0 +1,28 @@
1
+ import { Table, InferInsertModel, SQLWrapper } from 'drizzle-orm';
2
+ import { ActionFunctionArgs, LoaderFunctionArgs } from 'react-router';
3
+ import { TableRepository } from '../table/repository.mjs';
4
+ import { WithAuthHandler } from '../auth/with_auth.mjs';
5
+ import 'drizzle-orm/pg-core';
6
+ import 'dn-react-toolkit/auth';
7
+ import 'dn-react-toolkit/auth/server';
8
+
9
+ type APIHandlerOptions<T extends Table, TSelect> = {
10
+ withAuthAction: WithAuthHandler<ActionFunctionArgs>;
11
+ repository: TableRepository<T, TSelect>;
12
+ validators?: {
13
+ [K in keyof InferInsertModel<T>]?: {
14
+ validate?: (value?: InferInsertModel<T>[K]) => boolean;
15
+ message?: (value?: InferInsertModel<T>[K]) => string;
16
+ };
17
+ };
18
+ existingConditions: {
19
+ [K in keyof InferInsertModel<T>]?: (value: InferInsertModel<T>[K]) => SQLWrapper;
20
+ };
21
+ injectUserId?: boolean;
22
+ };
23
+ declare function apiHandler<T extends Table, TSelect>({ withAuthAction, repository, validators, existingConditions, injectUserId, }: APIHandlerOptions<T, TSelect>): {
24
+ loader: ({ request }: LoaderFunctionArgs) => Promise<{}>;
25
+ action: (arg: ActionFunctionArgs<any>) => Promise<unknown> | unknown;
26
+ };
27
+
28
+ export { type APIHandlerOptions, apiHandler };
@@ -0,0 +1,28 @@
1
+ import { Table, InferInsertModel, SQLWrapper } from 'drizzle-orm';
2
+ import { ActionFunctionArgs, LoaderFunctionArgs } from 'react-router';
3
+ import { TableRepository } from '../table/repository.js';
4
+ import { WithAuthHandler } from '../auth/with_auth.js';
5
+ import 'drizzle-orm/pg-core';
6
+ import 'dn-react-toolkit/auth';
7
+ import 'dn-react-toolkit/auth/server';
8
+
9
+ type APIHandlerOptions<T extends Table, TSelect> = {
10
+ withAuthAction: WithAuthHandler<ActionFunctionArgs>;
11
+ repository: TableRepository<T, TSelect>;
12
+ validators?: {
13
+ [K in keyof InferInsertModel<T>]?: {
14
+ validate?: (value?: InferInsertModel<T>[K]) => boolean;
15
+ message?: (value?: InferInsertModel<T>[K]) => string;
16
+ };
17
+ };
18
+ existingConditions: {
19
+ [K in keyof InferInsertModel<T>]?: (value: InferInsertModel<T>[K]) => SQLWrapper;
20
+ };
21
+ injectUserId?: boolean;
22
+ };
23
+ declare function apiHandler<T extends Table, TSelect>({ withAuthAction, repository, validators, existingConditions, injectUserId, }: APIHandlerOptions<T, TSelect>): {
24
+ loader: ({ request }: LoaderFunctionArgs) => Promise<{}>;
25
+ action: (arg: ActionFunctionArgs<any>) => Promise<unknown> | unknown;
26
+ };
27
+
28
+ export { type APIHandlerOptions, apiHandler };
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/api/create_api_handler.ts
21
+ var create_api_handler_exports = {};
22
+ __export(create_api_handler_exports, {
23
+ apiHandler: () => apiHandler
24
+ });
25
+ module.exports = __toCommonJS(create_api_handler_exports);
26
+ var import_http = require("dn-react-toolkit/http");
27
+ var import_drizzle_orm = require("drizzle-orm");
28
+ var import_react_router = require("react-router");
29
+ var import_uuid = require("uuid");
30
+ function apiHandler({
31
+ withAuthAction,
32
+ repository,
33
+ validators,
34
+ existingConditions,
35
+ injectUserId
36
+ }) {
37
+ const loader = async ({ request }) => {
38
+ return {};
39
+ };
40
+ const action = withAuthAction((auth) => async ({ request }) => {
41
+ if (!auth || auth.role !== "admin") {
42
+ return (0, import_react_router.redirect)("/login");
43
+ }
44
+ switch (request.method) {
45
+ case "POST":
46
+ case "PUT": {
47
+ const serilaizedParams = await request.json();
48
+ const params = Object.entries(serilaizedParams).reduce(
49
+ function reducer(acc, [key, value]) {
50
+ const converter = (value2) => {
51
+ if (value2.type === "null") {
52
+ return null;
53
+ }
54
+ if (value2.type === "string") {
55
+ return value2.value;
56
+ }
57
+ if (value2.type === "number") {
58
+ return value2.value;
59
+ }
60
+ if (value2.type === "boolean") {
61
+ return value2.value;
62
+ }
63
+ if (value2.type === "date") {
64
+ return new Date(value2.value);
65
+ }
66
+ if (Array.isArray(value2)) {
67
+ return value2.map((v) => converter(v));
68
+ }
69
+ if (typeof value2 === "object") {
70
+ return Object.entries(value2).reduce(
71
+ reducer,
72
+ {}
73
+ );
74
+ }
75
+ };
76
+ const result = converter(value);
77
+ if (result === void 0) {
78
+ return acc;
79
+ }
80
+ return {
81
+ ...acc,
82
+ [key]: result
83
+ };
84
+ },
85
+ {}
86
+ );
87
+ if (validators) {
88
+ const paramsForValidation = Object.keys(validators).filter(
89
+ (key) => Object.prototype.hasOwnProperty.call(
90
+ validators,
91
+ key
92
+ )
93
+ );
94
+ for (const paramKey of paramsForValidation) {
95
+ const value = params[paramKey];
96
+ const validator = validators[paramKey];
97
+ if (validator?.validate && !validator.validate(value)) {
98
+ throw (0, import_http.BAD_REQUEST)(
99
+ validator.message ? validator.message(value) : void 0
100
+ );
101
+ }
102
+ }
103
+ }
104
+ const itemId = params.id || (0, import_uuid.v4)();
105
+ if (!params.id && existingConditions) {
106
+ const paramsForExistenceCheck = Object.keys(
107
+ existingConditions
108
+ ).filter(
109
+ (key) => Object.prototype.hasOwnProperty.call(params, key)
110
+ );
111
+ const where = (0, import_drizzle_orm.and)(
112
+ ...paramsForExistenceCheck.reduce((acc, key) => {
113
+ const condition = existingConditions[key];
114
+ if (condition) {
115
+ acc.push(condition(params[key]));
116
+ }
117
+ return acc;
118
+ }, [])
119
+ );
120
+ const existing = await repository.findAll({
121
+ limit: 1,
122
+ where
123
+ });
124
+ if (existing.length > 0) {
125
+ throw (0, import_http.CONFLICT)("\uC790\uB8CC\uAC00 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.");
126
+ }
127
+ }
128
+ const values = {
129
+ id: itemId,
130
+ userId: injectUserId ? auth.userId : void 0,
131
+ ...params
132
+ };
133
+ const item = await repository.save(values);
134
+ return (0, import_http.CREATED)(item);
135
+ }
136
+ default:
137
+ throw (0, import_http.METHOD_NOT_ALLOWED)();
138
+ }
139
+ });
140
+ return {
141
+ loader,
142
+ action
143
+ };
144
+ }
145
+ // Annotate the CommonJS export names for ESM import in node:
146
+ 0 && (module.exports = {
147
+ apiHandler
148
+ });
@@ -0,0 +1,132 @@
1
+ // src/api/create_api_handler.ts
2
+ import {
3
+ BAD_REQUEST,
4
+ CONFLICT,
5
+ CREATED,
6
+ METHOD_NOT_ALLOWED
7
+ } from "dn-react-toolkit/http";
8
+ import {
9
+ and
10
+ } from "drizzle-orm";
11
+ import {
12
+ redirect
13
+ } from "react-router";
14
+ import { v4 } from "uuid";
15
+ function apiHandler({
16
+ withAuthAction,
17
+ repository,
18
+ validators,
19
+ existingConditions,
20
+ injectUserId
21
+ }) {
22
+ const loader = async ({ request }) => {
23
+ return {};
24
+ };
25
+ const action = withAuthAction((auth) => async ({ request }) => {
26
+ if (!auth || auth.role !== "admin") {
27
+ return redirect("/login");
28
+ }
29
+ switch (request.method) {
30
+ case "POST":
31
+ case "PUT": {
32
+ const serilaizedParams = await request.json();
33
+ const params = Object.entries(serilaizedParams).reduce(
34
+ function reducer(acc, [key, value]) {
35
+ const converter = (value2) => {
36
+ if (value2.type === "null") {
37
+ return null;
38
+ }
39
+ if (value2.type === "string") {
40
+ return value2.value;
41
+ }
42
+ if (value2.type === "number") {
43
+ return value2.value;
44
+ }
45
+ if (value2.type === "boolean") {
46
+ return value2.value;
47
+ }
48
+ if (value2.type === "date") {
49
+ return new Date(value2.value);
50
+ }
51
+ if (Array.isArray(value2)) {
52
+ return value2.map((v) => converter(v));
53
+ }
54
+ if (typeof value2 === "object") {
55
+ return Object.entries(value2).reduce(
56
+ reducer,
57
+ {}
58
+ );
59
+ }
60
+ };
61
+ const result = converter(value);
62
+ if (result === void 0) {
63
+ return acc;
64
+ }
65
+ return {
66
+ ...acc,
67
+ [key]: result
68
+ };
69
+ },
70
+ {}
71
+ );
72
+ if (validators) {
73
+ const paramsForValidation = Object.keys(validators).filter(
74
+ (key) => Object.prototype.hasOwnProperty.call(
75
+ validators,
76
+ key
77
+ )
78
+ );
79
+ for (const paramKey of paramsForValidation) {
80
+ const value = params[paramKey];
81
+ const validator = validators[paramKey];
82
+ if (validator?.validate && !validator.validate(value)) {
83
+ throw BAD_REQUEST(
84
+ validator.message ? validator.message(value) : void 0
85
+ );
86
+ }
87
+ }
88
+ }
89
+ const itemId = params.id || v4();
90
+ if (!params.id && existingConditions) {
91
+ const paramsForExistenceCheck = Object.keys(
92
+ existingConditions
93
+ ).filter(
94
+ (key) => Object.prototype.hasOwnProperty.call(params, key)
95
+ );
96
+ const where = and(
97
+ ...paramsForExistenceCheck.reduce((acc, key) => {
98
+ const condition = existingConditions[key];
99
+ if (condition) {
100
+ acc.push(condition(params[key]));
101
+ }
102
+ return acc;
103
+ }, [])
104
+ );
105
+ const existing = await repository.findAll({
106
+ limit: 1,
107
+ where
108
+ });
109
+ if (existing.length > 0) {
110
+ throw CONFLICT("\uC790\uB8CC\uAC00 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.");
111
+ }
112
+ }
113
+ const values = {
114
+ id: itemId,
115
+ userId: injectUserId ? auth.userId : void 0,
116
+ ...params
117
+ };
118
+ const item = await repository.save(values);
119
+ return CREATED(item);
120
+ }
121
+ default:
122
+ throw METHOD_NOT_ALLOWED();
123
+ }
124
+ });
125
+ return {
126
+ loader,
127
+ action
128
+ };
129
+ }
130
+ export {
131
+ apiHandler
132
+ };
@@ -8,6 +8,6 @@ declare const createAPIHandler: <TFile>({ authService, fileService, passwordReco
8
8
  passwordRecoveryService: PasswordRecoveryService;
9
9
  getThirdPartyAuth: (provider: string) => ThirdpartyAuth;
10
10
  signupTokenManager: JWTManager<ThirdpartySignupTokenPayload>;
11
- }) => (args: LoaderFunctionArgs | ActionFunctionArgs) => Promise<(({ request }: LoaderFunctionArgs<any> | ActionFunctionArgs<any>) => Promise<Response>) | Response>;
11
+ }) => (args: LoaderFunctionArgs | ActionFunctionArgs) => Promise<Response | (({ request }: ActionFunctionArgs<any> | LoaderFunctionArgs<any>) => Promise<Response>)>;
12
12
 
13
13
  export { createAPIHandler };
@@ -8,6 +8,6 @@ declare const createAPIHandler: <TFile>({ authService, fileService, passwordReco
8
8
  passwordRecoveryService: PasswordRecoveryService;
9
9
  getThirdPartyAuth: (provider: string) => ThirdpartyAuth;
10
10
  signupTokenManager: JWTManager<ThirdpartySignupTokenPayload>;
11
- }) => (args: LoaderFunctionArgs | ActionFunctionArgs) => Promise<(({ request }: LoaderFunctionArgs<any> | ActionFunctionArgs<any>) => Promise<Response>) | Response>;
11
+ }) => (args: LoaderFunctionArgs | ActionFunctionArgs) => Promise<Response | (({ request }: ActionFunctionArgs<any> | LoaderFunctionArgs<any>) => Promise<Response>)>;
12
12
 
13
13
  export { createAPIHandler };
@@ -27,13 +27,14 @@ var import_http = require("dn-react-toolkit/http");
27
27
  var import_server = require("dn-react-toolkit/auth/server");
28
28
 
29
29
  // src/auth/with_auth.ts
30
+ var import_uuid = require("uuid");
30
31
  var toResponse = (result) => {
31
32
  if (result instanceof Response) {
32
33
  return result;
33
34
  }
34
35
  return Response.json(result);
35
36
  };
36
- function createWithAuthHandler({ authService }) {
37
+ function createWithStrictAuthHandler({ authService }) {
37
38
  return function(fn) {
38
39
  const handler = async function(arg) {
39
40
  const respond = async (auth, headers = new Headers()) => {
@@ -42,7 +43,7 @@ function createWithAuthHandler({ authService }) {
42
43
  };
43
44
  const setHeader = (res, headers) => {
44
45
  headers.forEach((value, key) => {
45
- res.headers.set(key, value);
46
+ res.headers.append(key, value);
46
47
  });
47
48
  return res;
48
49
  };
@@ -50,9 +51,7 @@ function createWithAuthHandler({ authService }) {
50
51
  arg.request
51
52
  );
52
53
  if (accessToken) {
53
- const payload = await authService.accessTokenManager.verify(
54
- accessToken
55
- );
54
+ const payload = await authService.accessTokenManager.verify(accessToken);
56
55
  if (payload) {
57
56
  return respond(payload);
58
57
  }
@@ -62,23 +61,17 @@ function createWithAuthHandler({ authService }) {
62
61
  );
63
62
  if (refreshToken) {
64
63
  try {
65
- const newAccessToken = await authService.refreshAccessToken(
66
- refreshToken
67
- );
64
+ const newAccessToken = await authService.refreshAccessToken(refreshToken);
68
65
  const setCookieHeader = await authService.getAccessTokenSetCookie(
69
66
  newAccessToken
70
67
  );
71
68
  const headers = new Headers();
72
69
  headers.append("Set-Cookie", setCookieHeader);
73
- const payload = authService.accessTokenManager.decode(
74
- newAccessToken
75
- );
70
+ const payload = authService.accessTokenManager.decode(newAccessToken);
76
71
  return respond(payload, headers);
77
72
  } catch (e) {
78
73
  console.log(e);
79
- const setCookieHeader = await authService.getRefreshTokenSetCookie(
80
- null
81
- );
74
+ const setCookieHeader = await authService.getRefreshTokenSetCookie(null);
82
75
  const headers = new Headers();
83
76
  headers.append("Set-Cookie", setCookieHeader);
84
77
  return respond(void 0, headers);
@@ -106,7 +99,7 @@ var createAPIHandler = ({
106
99
  const { request, params } = args;
107
100
  const method = request.method.toUpperCase();
108
101
  const slug = params["*"] ? params["*"].split("/") : [];
109
- const withAuth = createWithAuthHandler({ authService });
102
+ const withAuth = createWithStrictAuthHandler({ authService });
110
103
  switch (slug[0]) {
111
104
  case "auth": {
112
105
  switch (slug[1]) {
@@ -134,10 +127,13 @@ var createAPIHandler = ({
134
127
  const provider = slug[2];
135
128
  switch (method) {
136
129
  case "POST": {
137
- return (0, import_server.loginWithThirdPartyHandler)(request, {
138
- provider,
139
- getThirdPartyAuth
140
- });
130
+ return (0, import_server.loginWithThirdPartyHandler)(
131
+ request,
132
+ {
133
+ provider,
134
+ getThirdPartyAuth
135
+ }
136
+ );
141
137
  }
142
138
  }
143
139
  }
@@ -176,11 +172,14 @@ var createAPIHandler = ({
176
172
  default: {
177
173
  switch (method) {
178
174
  case "POST": {
179
- return (0, import_server.signUpWithThirdpartyHandler)(request, {
180
- authService,
181
- fileService,
182
- signupTokenManager
183
- });
175
+ return (0, import_server.signUpWithThirdpartyHandler)(
176
+ request,
177
+ {
178
+ authService,
179
+ fileService,
180
+ signupTokenManager
181
+ }
182
+ );
184
183
  }
185
184
  }
186
185
  }
@@ -204,7 +203,9 @@ var createAPIHandler = ({
204
203
  });
205
204
  }
206
205
  case "reset-password": {
207
- return (0, import_server.resetPasswordHandler)(request, { passwordRecoveryService });
206
+ return (0, import_server.resetPasswordHandler)(request, {
207
+ passwordRecoveryService
208
+ });
208
209
  }
209
210
  }
210
211
  }
@@ -214,7 +215,9 @@ var createAPIHandler = ({
214
215
  switch (method) {
215
216
  case "POST": {
216
217
  return withAuth(
217
- (auth) => ({ request: request2 }) => (0, import_server2.uploadFileHandler)({ fileService })(auth)(request2)
218
+ (auth) => ({ request: request2 }) => (0, import_server2.uploadFileHandler)({ fileService })(
219
+ auth
220
+ )(request2)
218
221
  )(args);
219
222
  }
220
223
  }
@@ -14,13 +14,14 @@ import {
14
14
  } from "dn-react-toolkit/auth/server";
15
15
 
16
16
  // src/auth/with_auth.ts
17
+ import { v4 } from "uuid";
17
18
  var toResponse = (result) => {
18
19
  if (result instanceof Response) {
19
20
  return result;
20
21
  }
21
22
  return Response.json(result);
22
23
  };
23
- function createWithAuthHandler({ authService }) {
24
+ function createWithStrictAuthHandler({ authService }) {
24
25
  return function(fn) {
25
26
  const handler = async function(arg) {
26
27
  const respond = async (auth, headers = new Headers()) => {
@@ -29,7 +30,7 @@ function createWithAuthHandler({ authService }) {
29
30
  };
30
31
  const setHeader = (res, headers) => {
31
32
  headers.forEach((value, key) => {
32
- res.headers.set(key, value);
33
+ res.headers.append(key, value);
33
34
  });
34
35
  return res;
35
36
  };
@@ -37,9 +38,7 @@ function createWithAuthHandler({ authService }) {
37
38
  arg.request
38
39
  );
39
40
  if (accessToken) {
40
- const payload = await authService.accessTokenManager.verify(
41
- accessToken
42
- );
41
+ const payload = await authService.accessTokenManager.verify(accessToken);
43
42
  if (payload) {
44
43
  return respond(payload);
45
44
  }
@@ -49,23 +48,17 @@ function createWithAuthHandler({ authService }) {
49
48
  );
50
49
  if (refreshToken) {
51
50
  try {
52
- const newAccessToken = await authService.refreshAccessToken(
53
- refreshToken
54
- );
51
+ const newAccessToken = await authService.refreshAccessToken(refreshToken);
55
52
  const setCookieHeader = await authService.getAccessTokenSetCookie(
56
53
  newAccessToken
57
54
  );
58
55
  const headers = new Headers();
59
56
  headers.append("Set-Cookie", setCookieHeader);
60
- const payload = authService.accessTokenManager.decode(
61
- newAccessToken
62
- );
57
+ const payload = authService.accessTokenManager.decode(newAccessToken);
63
58
  return respond(payload, headers);
64
59
  } catch (e) {
65
60
  console.log(e);
66
- const setCookieHeader = await authService.getRefreshTokenSetCookie(
67
- null
68
- );
61
+ const setCookieHeader = await authService.getRefreshTokenSetCookie(null);
69
62
  const headers = new Headers();
70
63
  headers.append("Set-Cookie", setCookieHeader);
71
64
  return respond(void 0, headers);
@@ -96,7 +89,7 @@ var createAPIHandler = ({
96
89
  const { request, params } = args;
97
90
  const method = request.method.toUpperCase();
98
91
  const slug = params["*"] ? params["*"].split("/") : [];
99
- const withAuth = createWithAuthHandler({ authService });
92
+ const withAuth = createWithStrictAuthHandler({ authService });
100
93
  switch (slug[0]) {
101
94
  case "auth": {
102
95
  switch (slug[1]) {
@@ -124,10 +117,13 @@ var createAPIHandler = ({
124
117
  const provider = slug[2];
125
118
  switch (method) {
126
119
  case "POST": {
127
- return loginWithThirdPartyHandler(request, {
128
- provider,
129
- getThirdPartyAuth
130
- });
120
+ return loginWithThirdPartyHandler(
121
+ request,
122
+ {
123
+ provider,
124
+ getThirdPartyAuth
125
+ }
126
+ );
131
127
  }
132
128
  }
133
129
  }
@@ -166,11 +162,14 @@ var createAPIHandler = ({
166
162
  default: {
167
163
  switch (method) {
168
164
  case "POST": {
169
- return signUpWithThirdpartyHandler(request, {
170
- authService,
171
- fileService,
172
- signupTokenManager
173
- });
165
+ return signUpWithThirdpartyHandler(
166
+ request,
167
+ {
168
+ authService,
169
+ fileService,
170
+ signupTokenManager
171
+ }
172
+ );
174
173
  }
175
174
  }
176
175
  }
@@ -194,7 +193,9 @@ var createAPIHandler = ({
194
193
  });
195
194
  }
196
195
  case "reset-password": {
197
- return resetPasswordHandler(request, { passwordRecoveryService });
196
+ return resetPasswordHandler(request, {
197
+ passwordRecoveryService
198
+ });
198
199
  }
199
200
  }
200
201
  }
@@ -204,7 +205,9 @@ var createAPIHandler = ({
204
205
  switch (method) {
205
206
  case "POST": {
206
207
  return withAuth(
207
- (auth) => ({ request: request2 }) => uploadFileHandler({ fileService })(auth)(request2)
208
+ (auth) => ({ request: request2 }) => uploadFileHandler({ fileService })(
209
+ auth
210
+ )(request2)
208
211
  )(args);
209
212
  }
210
213
  }