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.
- package/dist/api/create_api_handler.d.mts +28 -0
- package/dist/api/create_api_handler.d.ts +28 -0
- package/dist/api/create_api_handler.js +148 -0
- package/dist/api/create_api_handler.mjs +132 -0
- package/dist/api/create_handler.d.mts +1 -1
- package/dist/api/create_handler.d.ts +1 -1
- package/dist/api/create_handler.js +29 -26
- package/dist/api/create_handler.mjs +29 -26
- package/dist/api/index.js +29 -26
- package/dist/api/index.mjs +29 -26
- package/dist/api/item_api_handler.d.mts +18 -0
- package/dist/api/item_api_handler.d.ts +18 -0
- package/dist/api/item_api_handler.js +55 -0
- package/dist/api/item_api_handler.mjs +30 -0
- package/dist/auth/index.d.mts +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.js +62 -16
- package/dist/auth/index.mjs +60 -15
- package/dist/auth/with_auth.d.mts +8 -3
- package/dist/auth/with_auth.d.ts +8 -3
- package/dist/auth/with_auth.js +62 -16
- package/dist/auth/with_auth.mjs +60 -15
- package/dist/crud/crud_form.d.mts +13 -0
- package/dist/crud/crud_form.d.ts +13 -0
- package/dist/crud/crud_form.js +88 -0
- package/dist/crud/crud_form.mjs +55 -0
- package/dist/crud/crud_form_provider.d.mts +34 -0
- package/dist/crud/crud_form_provider.d.ts +34 -0
- package/dist/crud/crud_form_provider.js +160 -0
- package/dist/crud/crud_form_provider.mjs +124 -0
- package/dist/crud/crud_loader.d.mts +21 -0
- package/dist/crud/crud_loader.d.ts +21 -0
- package/dist/crud/crud_loader.js +288 -0
- package/dist/crud/crud_loader.mjs +273 -0
- package/dist/crud/crud_page.d.mts +25 -0
- package/dist/crud/crud_page.d.ts +25 -0
- package/dist/crud/crud_page.js +645 -0
- package/dist/crud/crud_page.mjs +616 -0
- package/dist/crud/generate_handlers.d.mts +15 -0
- package/dist/crud/generate_handlers.d.ts +15 -0
- package/dist/crud/generate_handlers.js +39 -0
- package/dist/crud/generate_handlers.mjs +14 -0
- package/dist/crud/generate_pages.d.mts +11 -0
- package/dist/crud/generate_pages.d.ts +11 -0
- package/dist/crud/generate_pages.js +52 -0
- package/dist/crud/generate_pages.mjs +17 -0
- package/dist/crud/generate_routes.d.mts +5 -0
- package/dist/crud/generate_routes.d.ts +5 -0
- package/dist/crud/generate_routes.js +62 -0
- package/dist/crud/generate_routes.mjs +27 -0
- package/dist/crud/index.d.mts +21 -0
- package/dist/crud/index.d.ts +21 -0
- package/dist/crud/index.js +970 -0
- package/dist/crud/index.mjs +945 -0
- package/dist/db/index.d.mts +4 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.js +46 -0
- package/dist/db/index.mjs +8 -0
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/table/buttons.d.mts +10 -0
- package/dist/table/buttons.d.ts +10 -0
- package/dist/table/buttons.js +102 -0
- package/dist/table/buttons.mjs +71 -0
- package/dist/table/index.d.mts +9 -0
- package/dist/table/index.d.ts +9 -0
- package/dist/table/index.js +570 -0
- package/dist/table/index.mjs +543 -0
- package/dist/table/item_loader.d.mts +12 -0
- package/dist/table/item_loader.d.ts +12 -0
- package/dist/table/item_loader.js +51 -0
- package/dist/table/item_loader.mjs +26 -0
- package/dist/table/loader.d.mts +28 -0
- package/dist/table/loader.d.ts +28 -0
- package/dist/table/loader.js +70 -0
- package/dist/table/loader.mjs +48 -0
- package/dist/table/page.d.mts +27 -0
- package/dist/table/page.d.ts +27 -0
- package/dist/table/page.js +444 -0
- package/dist/table/page.mjs +415 -0
- package/dist/table/repository.d.mts +38 -0
- package/dist/table/repository.d.ts +38 -0
- package/dist/table/repository.js +76 -0
- package/dist/table/repository.mjs +56 -0
- package/dist/table/table.d.mts +27 -0
- package/dist/table/table.d.ts +27 -0
- package/dist/table/table.js +290 -0
- package/dist/table/table.mjs +255 -0
- 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 }:
|
|
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 }:
|
|
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
|
|
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.
|
|
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 =
|
|
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)(
|
|
138
|
-
|
|
139
|
-
|
|
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)(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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, {
|
|
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 })(
|
|
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
|
|
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.
|
|
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 =
|
|
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(
|
|
128
|
-
|
|
129
|
-
|
|
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(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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, {
|
|
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 })(
|
|
208
|
+
(auth) => ({ request: request2 }) => uploadFileHandler({ fileService })(
|
|
209
|
+
auth
|
|
210
|
+
)(request2)
|
|
208
211
|
)(args);
|
|
209
212
|
}
|
|
210
213
|
}
|