naystack 1.4.16 → 1.4.20
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 +27 -12
- package/dist/auth/email/client.esm.js +27 -12
- package/dist/auth/email/index.cjs.js +32 -15
- package/dist/auth/email/index.esm.js +32 -15
- package/dist/auth/email/routes/delete.cjs.js +14 -4
- package/dist/auth/email/routes/delete.esm.js +14 -4
- package/dist/auth/email/routes/get.cjs.js +12 -2
- package/dist/auth/email/routes/get.esm.js +12 -2
- package/dist/auth/email/routes/post.cjs.js +17 -6
- package/dist/auth/email/routes/post.esm.js +17 -6
- package/dist/auth/email/routes/put.cjs.js +12 -4
- package/dist/auth/email/routes/put.esm.js +12 -4
- package/dist/auth/email/token.cjs.js +9 -2
- package/dist/auth/email/token.esm.js +9 -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 +16 -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 +16 -5
- package/dist/auth/google/get.cjs.js +15 -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 +15 -7
- package/dist/auth/google/index.cjs.js +15 -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 +15 -7
- package/dist/auth/index.cjs.js +47 -31
- package/dist/auth/index.esm.js +47 -31
- package/dist/auth/instagram/client.cjs.js +12 -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 +10 -1
- package/dist/auth/instagram/index.cjs.js +16 -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 +16 -9
- package/dist/auth/instagram/route.cjs.js +16 -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 +16 -9
- package/dist/auth/instagram/utils.cjs.js +10 -1
- package/dist/auth/instagram/utils.esm.js +8 -1
- package/dist/client/index.cjs.js +8 -1
- package/dist/client/index.esm.js +8 -1
- package/dist/client/seo.cjs.js +10 -1
- package/dist/client/seo.esm.js +8 -1
- package/dist/env.cjs.js +57 -0
- package/dist/env.d.mts +23 -0
- package/dist/env.d.ts +23 -0
- package/dist/env.esm.js +31 -0
- package/dist/file/client.cjs.js +10 -1
- package/dist/file/client.esm.js +10 -1
- package/dist/file/index.cjs.js +40 -28
- package/dist/file/index.d.mts +0 -2
- package/dist/file/index.d.ts +0 -2
- package/dist/file/index.esm.js +40 -28
- package/dist/file/put.cjs.js +23 -11
- package/dist/file/put.d.mts +0 -2
- package/dist/file/put.d.ts +0 -2
- package/dist/file/put.esm.js +23 -11
- package/dist/file/setup.cjs.js +40 -28
- package/dist/file/setup.d.mts +0 -7
- package/dist/file/setup.d.ts +0 -7
- package/dist/file/setup.esm.js +40 -28
- package/dist/file/utils.cjs.js +28 -17
- package/dist/file/utils.d.mts +6 -10
- package/dist/file/utils.d.ts +6 -10
- package/dist/file/utils.esm.js +28 -17
- package/dist/graphql/client.cjs.js +15 -3
- package/dist/graphql/client.d.mts +1 -1
- package/dist/graphql/client.d.ts +1 -1
- package/dist/graphql/client.esm.js +15 -3
- package/dist/graphql/index.cjs.js +65 -3
- package/dist/graphql/index.d.mts +1 -0
- package/dist/graphql/index.d.ts +1 -0
- package/dist/graphql/index.esm.js +65 -3
- package/dist/graphql/init.cjs.js +11 -2
- package/dist/graphql/init.esm.js +11 -2
- package/dist/graphql/server.cjs.js +10 -1
- package/dist/graphql/server.esm.js +10 -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/file/index.esm.js
CHANGED
|
@@ -12,6 +12,13 @@ import { cookies } from "next/headers";
|
|
|
12
12
|
import { redirect } from "next/navigation";
|
|
13
13
|
import { NextResponse } from "next/server";
|
|
14
14
|
|
|
15
|
+
// src/env.ts
|
|
16
|
+
function getEnv(key, skipCheck) {
|
|
17
|
+
const value = process.env[key];
|
|
18
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
|
|
15
22
|
// src/auth/constants.ts
|
|
16
23
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
17
24
|
|
|
@@ -33,17 +40,20 @@ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
|
|
|
33
40
|
import { NextResponse as NextResponse2 } from "next/server";
|
|
34
41
|
|
|
35
42
|
// src/auth/email/utils.ts
|
|
36
|
-
var getContext = (
|
|
43
|
+
var getContext = (req) => {
|
|
37
44
|
const bearer = req.headers.get("authorization");
|
|
38
45
|
if (!bearer) {
|
|
39
46
|
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
|
|
40
|
-
const userId = getUserIdFromRefreshToken(
|
|
47
|
+
const userId = getUserIdFromRefreshToken(
|
|
48
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */),
|
|
49
|
+
refresh
|
|
50
|
+
);
|
|
41
51
|
if (userId) return { userId, isRefreshID: true };
|
|
42
52
|
return { userId: null };
|
|
43
53
|
}
|
|
44
54
|
const token = bearer.slice(7);
|
|
45
55
|
try {
|
|
46
|
-
const res = verify2(token,
|
|
56
|
+
const res = verify2(token, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
47
57
|
if (typeof res === "string") {
|
|
48
58
|
return { userId: null };
|
|
49
59
|
}
|
|
@@ -62,29 +72,31 @@ import {
|
|
|
62
72
|
S3Client
|
|
63
73
|
} from "@aws-sdk/client-s3";
|
|
64
74
|
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
|
65
|
-
var getS3Client = (
|
|
66
|
-
region:
|
|
75
|
+
var getS3Client = () => new S3Client({
|
|
76
|
+
region: getEnv("AWS_REGION" /* AWS_REGION */),
|
|
67
77
|
credentials: {
|
|
68
|
-
accessKeyId:
|
|
69
|
-
secretAccessKey:
|
|
78
|
+
accessKeyId: getEnv("AWS_ACCESS_KEY_ID" /* AWS_ACCESS_KEY_ID */),
|
|
79
|
+
secretAccessKey: getEnv("AWS_ACCESS_KEY_SECRET" /* AWS_ACCESS_KEY_SECRET */)
|
|
70
80
|
}
|
|
71
81
|
});
|
|
72
|
-
var
|
|
82
|
+
var URL_PREFIX = `https://${getEnv("AWS_BUCKET" /* AWS_BUCKET */)}.s3.${getEnv(
|
|
83
|
+
"AWS_REGION" /* AWS_REGION */
|
|
84
|
+
)}.amazonaws.com/`;
|
|
73
85
|
function getKey(keys) {
|
|
74
86
|
return typeof keys === "string" ? keys : keys.join("/");
|
|
75
87
|
}
|
|
76
|
-
var getUploadURL = (client
|
|
88
|
+
var getUploadURL = (client) => (keys) => {
|
|
77
89
|
const command = new PutObjectCommand({
|
|
78
|
-
Bucket,
|
|
90
|
+
Bucket: getEnv("AWS_BUCKET" /* AWS_BUCKET */),
|
|
79
91
|
Key: getKey(keys),
|
|
80
92
|
ACL: "public-read"
|
|
81
93
|
});
|
|
82
94
|
return getSignedUrl(client, command, { expiresIn: 300 });
|
|
83
95
|
};
|
|
84
|
-
var getDownloadURL = (
|
|
85
|
-
return `${
|
|
96
|
+
var getDownloadURL = (keys) => {
|
|
97
|
+
return `${URL_PREFIX}${getKey(keys)}`;
|
|
86
98
|
};
|
|
87
|
-
var uploadFile = (client
|
|
99
|
+
var uploadFile = (client) => async (keys, {
|
|
88
100
|
url,
|
|
89
101
|
blob
|
|
90
102
|
}) => {
|
|
@@ -92,18 +104,18 @@ var uploadFile = (client, options) => async (keys, {
|
|
|
92
104
|
const fileBlob = blob || await fetch(url).then((file) => file.blob());
|
|
93
105
|
if (fileBlob) {
|
|
94
106
|
const key = getKey(keys);
|
|
95
|
-
await uploadBlob(client
|
|
96
|
-
return getDownloadURL(
|
|
107
|
+
await uploadBlob(client)(fileBlob, key);
|
|
108
|
+
return getDownloadURL(key);
|
|
97
109
|
}
|
|
98
110
|
return null;
|
|
99
111
|
};
|
|
100
|
-
var deleteFile = (client
|
|
101
|
-
const key = url.split(
|
|
112
|
+
var deleteFile = (client) => async (url) => {
|
|
113
|
+
const key = url.split(URL_PREFIX)[1];
|
|
102
114
|
if (key) {
|
|
103
115
|
try {
|
|
104
116
|
await client.send(
|
|
105
117
|
new DeleteObjectCommand({
|
|
106
|
-
Bucket:
|
|
118
|
+
Bucket: getEnv("AWS_BUCKET" /* AWS_BUCKET */),
|
|
107
119
|
Key: key
|
|
108
120
|
})
|
|
109
121
|
);
|
|
@@ -114,11 +126,11 @@ var deleteFile = (client, options) => async (url) => {
|
|
|
114
126
|
}
|
|
115
127
|
return false;
|
|
116
128
|
};
|
|
117
|
-
var uploadBlob = (client
|
|
129
|
+
var uploadBlob = (client) => async (file, key) => {
|
|
118
130
|
const fileBuffer = await file.arrayBuffer();
|
|
119
131
|
return client.send(
|
|
120
132
|
new PutObjectCommand({
|
|
121
|
-
Bucket,
|
|
133
|
+
Bucket: getEnv("AWS_BUCKET" /* AWS_BUCKET */),
|
|
122
134
|
Key: key,
|
|
123
135
|
ACL: "public-read",
|
|
124
136
|
Body: Buffer.from(fileBuffer),
|
|
@@ -130,7 +142,7 @@ var uploadBlob = (client, Bucket) => async (file, key) => {
|
|
|
130
142
|
|
|
131
143
|
// src/file/put.ts
|
|
132
144
|
var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
133
|
-
const ctx = getContext(
|
|
145
|
+
const ctx = getContext(req);
|
|
134
146
|
if (!ctx?.userId || ctx.isRefreshID)
|
|
135
147
|
return NextResponse3.json({ error: "unauthorized" }, { status: 401 });
|
|
136
148
|
const formData = await req.formData();
|
|
@@ -143,8 +155,8 @@ var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
|
143
155
|
data: typeof data === "string" ? JSON.parse(data) : void 0
|
|
144
156
|
};
|
|
145
157
|
const fileKey = options.getKey ? await options.getKey(inputData) : v4();
|
|
146
|
-
const url = getDownloadURL(
|
|
147
|
-
await uploadBlob(client
|
|
158
|
+
const url = getDownloadURL(fileKey);
|
|
159
|
+
await uploadBlob(client)(file, fileKey);
|
|
148
160
|
const onUploadResponse = await options.onUpload({
|
|
149
161
|
...inputData,
|
|
150
162
|
url
|
|
@@ -157,13 +169,13 @@ var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
|
157
169
|
|
|
158
170
|
// src/file/setup.ts
|
|
159
171
|
function setupFileUpload(options) {
|
|
160
|
-
const client = getS3Client(
|
|
172
|
+
const client = getS3Client();
|
|
161
173
|
return {
|
|
162
174
|
PUT: getFileUploadPutRoute(options, client),
|
|
163
|
-
uploadFile: uploadFile(client
|
|
164
|
-
deleteFile: deleteFile(client
|
|
165
|
-
getUploadURL: getUploadURL(client
|
|
166
|
-
getDownloadURL
|
|
175
|
+
uploadFile: uploadFile(client),
|
|
176
|
+
deleteFile: deleteFile(client),
|
|
177
|
+
getUploadURL: getUploadURL(client),
|
|
178
|
+
getDownloadURL
|
|
167
179
|
};
|
|
168
180
|
}
|
|
169
181
|
export {
|
package/dist/file/put.cjs.js
CHANGED
|
@@ -36,6 +36,13 @@ var import_headers = require("next/headers");
|
|
|
36
36
|
var import_navigation = require("next/navigation");
|
|
37
37
|
var import_server = require("next/server");
|
|
38
38
|
|
|
39
|
+
// src/env.ts
|
|
40
|
+
function getEnv(key, skipCheck) {
|
|
41
|
+
const value = process.env[key];
|
|
42
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
|
|
39
46
|
// src/auth/constants.ts
|
|
40
47
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
41
48
|
|
|
@@ -57,17 +64,20 @@ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
|
|
|
57
64
|
var import_server2 = require("next/server");
|
|
58
65
|
|
|
59
66
|
// src/auth/email/utils.ts
|
|
60
|
-
var getContext = (
|
|
67
|
+
var getContext = (req) => {
|
|
61
68
|
const bearer = req.headers.get("authorization");
|
|
62
69
|
if (!bearer) {
|
|
63
70
|
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
|
|
64
|
-
const userId = getUserIdFromRefreshToken(
|
|
71
|
+
const userId = getUserIdFromRefreshToken(
|
|
72
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */),
|
|
73
|
+
refresh
|
|
74
|
+
);
|
|
65
75
|
if (userId) return { userId, isRefreshID: true };
|
|
66
76
|
return { userId: null };
|
|
67
77
|
}
|
|
68
78
|
const token = bearer.slice(7);
|
|
69
79
|
try {
|
|
70
|
-
const res = (0, import_jsonwebtoken2.verify)(token,
|
|
80
|
+
const res = (0, import_jsonwebtoken2.verify)(token, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
71
81
|
if (typeof res === "string") {
|
|
72
82
|
return { userId: null };
|
|
73
83
|
}
|
|
@@ -82,18 +92,20 @@ var getContext = (keys, req) => {
|
|
|
82
92
|
// src/file/utils.ts
|
|
83
93
|
var import_client_s3 = require("@aws-sdk/client-s3");
|
|
84
94
|
var import_s3_request_presigner = require("@aws-sdk/s3-request-presigner");
|
|
85
|
-
var
|
|
95
|
+
var URL_PREFIX = `https://${getEnv("AWS_BUCKET" /* AWS_BUCKET */)}.s3.${getEnv(
|
|
96
|
+
"AWS_REGION" /* AWS_REGION */
|
|
97
|
+
)}.amazonaws.com/`;
|
|
86
98
|
function getKey(keys) {
|
|
87
99
|
return typeof keys === "string" ? keys : keys.join("/");
|
|
88
100
|
}
|
|
89
|
-
var getDownloadURL = (
|
|
90
|
-
return `${
|
|
101
|
+
var getDownloadURL = (keys) => {
|
|
102
|
+
return `${URL_PREFIX}${getKey(keys)}`;
|
|
91
103
|
};
|
|
92
|
-
var uploadBlob = (client
|
|
104
|
+
var uploadBlob = (client) => async (file, key) => {
|
|
93
105
|
const fileBuffer = await file.arrayBuffer();
|
|
94
106
|
return client.send(
|
|
95
107
|
new import_client_s3.PutObjectCommand({
|
|
96
|
-
Bucket,
|
|
108
|
+
Bucket: getEnv("AWS_BUCKET" /* AWS_BUCKET */),
|
|
97
109
|
Key: key,
|
|
98
110
|
ACL: "public-read",
|
|
99
111
|
Body: Buffer.from(fileBuffer),
|
|
@@ -105,7 +117,7 @@ var uploadBlob = (client, Bucket) => async (file, key) => {
|
|
|
105
117
|
|
|
106
118
|
// src/file/put.ts
|
|
107
119
|
var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
108
|
-
const ctx = getContext(
|
|
120
|
+
const ctx = getContext(req);
|
|
109
121
|
if (!ctx?.userId || ctx.isRefreshID)
|
|
110
122
|
return import_server3.NextResponse.json({ error: "unauthorized" }, { status: 401 });
|
|
111
123
|
const formData = await req.formData();
|
|
@@ -118,8 +130,8 @@ var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
|
118
130
|
data: typeof data === "string" ? JSON.parse(data) : void 0
|
|
119
131
|
};
|
|
120
132
|
const fileKey = options.getKey ? await options.getKey(inputData) : (0, import_uuid.v4)();
|
|
121
|
-
const url = getDownloadURL(
|
|
122
|
-
await uploadBlob(client
|
|
133
|
+
const url = getDownloadURL(fileKey);
|
|
134
|
+
await uploadBlob(client)(file, fileKey);
|
|
123
135
|
const onUploadResponse = await options.onUpload({
|
|
124
136
|
...inputData,
|
|
125
137
|
url
|
package/dist/file/put.d.mts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { S3Client } from '@aws-sdk/client-s3';
|
|
2
2
|
import { NextRequest, NextResponse } from 'next/server';
|
|
3
3
|
import { SetupFileUploadOptions } from './setup.mjs';
|
|
4
|
-
import '../auth/email/types.mjs';
|
|
5
|
-
import '../auth/types.mjs';
|
|
6
4
|
|
|
7
5
|
declare const getFileUploadPutRoute: (options: SetupFileUploadOptions, client: S3Client) => (req: NextRequest) => Promise<NextResponse<{
|
|
8
6
|
error: string;
|
package/dist/file/put.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { S3Client } from '@aws-sdk/client-s3';
|
|
2
2
|
import { NextRequest, NextResponse } from 'next/server';
|
|
3
3
|
import { SetupFileUploadOptions } from './setup.js';
|
|
4
|
-
import '../auth/email/types.js';
|
|
5
|
-
import '../auth/types.js';
|
|
6
4
|
|
|
7
5
|
declare const getFileUploadPutRoute: (options: SetupFileUploadOptions, client: S3Client) => (req: NextRequest) => Promise<NextResponse<{
|
|
8
6
|
error: string;
|
package/dist/file/put.esm.js
CHANGED
|
@@ -12,6 +12,13 @@ import { cookies } from "next/headers";
|
|
|
12
12
|
import { redirect } from "next/navigation";
|
|
13
13
|
import { NextResponse } from "next/server";
|
|
14
14
|
|
|
15
|
+
// src/env.ts
|
|
16
|
+
function getEnv(key, skipCheck) {
|
|
17
|
+
const value = process.env[key];
|
|
18
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
|
|
15
22
|
// src/auth/constants.ts
|
|
16
23
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
17
24
|
|
|
@@ -33,17 +40,20 @@ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
|
|
|
33
40
|
import { NextResponse as NextResponse2 } from "next/server";
|
|
34
41
|
|
|
35
42
|
// src/auth/email/utils.ts
|
|
36
|
-
var getContext = (
|
|
43
|
+
var getContext = (req) => {
|
|
37
44
|
const bearer = req.headers.get("authorization");
|
|
38
45
|
if (!bearer) {
|
|
39
46
|
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
|
|
40
|
-
const userId = getUserIdFromRefreshToken(
|
|
47
|
+
const userId = getUserIdFromRefreshToken(
|
|
48
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */),
|
|
49
|
+
refresh
|
|
50
|
+
);
|
|
41
51
|
if (userId) return { userId, isRefreshID: true };
|
|
42
52
|
return { userId: null };
|
|
43
53
|
}
|
|
44
54
|
const token = bearer.slice(7);
|
|
45
55
|
try {
|
|
46
|
-
const res = verify2(token,
|
|
56
|
+
const res = verify2(token, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
47
57
|
if (typeof res === "string") {
|
|
48
58
|
return { userId: null };
|
|
49
59
|
}
|
|
@@ -62,18 +72,20 @@ import {
|
|
|
62
72
|
S3Client
|
|
63
73
|
} from "@aws-sdk/client-s3";
|
|
64
74
|
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
|
65
|
-
var
|
|
75
|
+
var URL_PREFIX = `https://${getEnv("AWS_BUCKET" /* AWS_BUCKET */)}.s3.${getEnv(
|
|
76
|
+
"AWS_REGION" /* AWS_REGION */
|
|
77
|
+
)}.amazonaws.com/`;
|
|
66
78
|
function getKey(keys) {
|
|
67
79
|
return typeof keys === "string" ? keys : keys.join("/");
|
|
68
80
|
}
|
|
69
|
-
var getDownloadURL = (
|
|
70
|
-
return `${
|
|
81
|
+
var getDownloadURL = (keys) => {
|
|
82
|
+
return `${URL_PREFIX}${getKey(keys)}`;
|
|
71
83
|
};
|
|
72
|
-
var uploadBlob = (client
|
|
84
|
+
var uploadBlob = (client) => async (file, key) => {
|
|
73
85
|
const fileBuffer = await file.arrayBuffer();
|
|
74
86
|
return client.send(
|
|
75
87
|
new PutObjectCommand({
|
|
76
|
-
Bucket,
|
|
88
|
+
Bucket: getEnv("AWS_BUCKET" /* AWS_BUCKET */),
|
|
77
89
|
Key: key,
|
|
78
90
|
ACL: "public-read",
|
|
79
91
|
Body: Buffer.from(fileBuffer),
|
|
@@ -85,7 +97,7 @@ var uploadBlob = (client, Bucket) => async (file, key) => {
|
|
|
85
97
|
|
|
86
98
|
// src/file/put.ts
|
|
87
99
|
var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
88
|
-
const ctx = getContext(
|
|
100
|
+
const ctx = getContext(req);
|
|
89
101
|
if (!ctx?.userId || ctx.isRefreshID)
|
|
90
102
|
return NextResponse3.json({ error: "unauthorized" }, { status: 401 });
|
|
91
103
|
const formData = await req.formData();
|
|
@@ -98,8 +110,8 @@ var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
|
98
110
|
data: typeof data === "string" ? JSON.parse(data) : void 0
|
|
99
111
|
};
|
|
100
112
|
const fileKey = options.getKey ? await options.getKey(inputData) : v4();
|
|
101
|
-
const url = getDownloadURL(
|
|
102
|
-
await uploadBlob(client
|
|
113
|
+
const url = getDownloadURL(fileKey);
|
|
114
|
+
await uploadBlob(client)(file, fileKey);
|
|
103
115
|
const onUploadResponse = await options.onUpload({
|
|
104
116
|
...inputData,
|
|
105
117
|
url
|
package/dist/file/setup.cjs.js
CHANGED
|
@@ -38,6 +38,13 @@ var import_headers = require("next/headers");
|
|
|
38
38
|
var import_navigation = require("next/navigation");
|
|
39
39
|
var import_server = require("next/server");
|
|
40
40
|
|
|
41
|
+
// src/env.ts
|
|
42
|
+
function getEnv(key, skipCheck) {
|
|
43
|
+
const value = process.env[key];
|
|
44
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
|
|
41
48
|
// src/auth/constants.ts
|
|
42
49
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
43
50
|
|
|
@@ -59,17 +66,20 @@ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
|
|
|
59
66
|
var import_server2 = require("next/server");
|
|
60
67
|
|
|
61
68
|
// src/auth/email/utils.ts
|
|
62
|
-
var getContext = (
|
|
69
|
+
var getContext = (req) => {
|
|
63
70
|
const bearer = req.headers.get("authorization");
|
|
64
71
|
if (!bearer) {
|
|
65
72
|
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
|
|
66
|
-
const userId = getUserIdFromRefreshToken(
|
|
73
|
+
const userId = getUserIdFromRefreshToken(
|
|
74
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */),
|
|
75
|
+
refresh
|
|
76
|
+
);
|
|
67
77
|
if (userId) return { userId, isRefreshID: true };
|
|
68
78
|
return { userId: null };
|
|
69
79
|
}
|
|
70
80
|
const token = bearer.slice(7);
|
|
71
81
|
try {
|
|
72
|
-
const res = (0, import_jsonwebtoken2.verify)(token,
|
|
82
|
+
const res = (0, import_jsonwebtoken2.verify)(token, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
73
83
|
if (typeof res === "string") {
|
|
74
84
|
return { userId: null };
|
|
75
85
|
}
|
|
@@ -84,29 +94,31 @@ var getContext = (keys, req) => {
|
|
|
84
94
|
// src/file/utils.ts
|
|
85
95
|
var import_client_s3 = require("@aws-sdk/client-s3");
|
|
86
96
|
var import_s3_request_presigner = require("@aws-sdk/s3-request-presigner");
|
|
87
|
-
var getS3Client = (
|
|
88
|
-
region:
|
|
97
|
+
var getS3Client = () => new import_client_s3.S3Client({
|
|
98
|
+
region: getEnv("AWS_REGION" /* AWS_REGION */),
|
|
89
99
|
credentials: {
|
|
90
|
-
accessKeyId:
|
|
91
|
-
secretAccessKey:
|
|
100
|
+
accessKeyId: getEnv("AWS_ACCESS_KEY_ID" /* AWS_ACCESS_KEY_ID */),
|
|
101
|
+
secretAccessKey: getEnv("AWS_ACCESS_KEY_SECRET" /* AWS_ACCESS_KEY_SECRET */)
|
|
92
102
|
}
|
|
93
103
|
});
|
|
94
|
-
var
|
|
104
|
+
var URL_PREFIX = `https://${getEnv("AWS_BUCKET" /* AWS_BUCKET */)}.s3.${getEnv(
|
|
105
|
+
"AWS_REGION" /* AWS_REGION */
|
|
106
|
+
)}.amazonaws.com/`;
|
|
95
107
|
function getKey(keys) {
|
|
96
108
|
return typeof keys === "string" ? keys : keys.join("/");
|
|
97
109
|
}
|
|
98
|
-
var getUploadURL = (client
|
|
110
|
+
var getUploadURL = (client) => (keys) => {
|
|
99
111
|
const command = new import_client_s3.PutObjectCommand({
|
|
100
|
-
Bucket,
|
|
112
|
+
Bucket: getEnv("AWS_BUCKET" /* AWS_BUCKET */),
|
|
101
113
|
Key: getKey(keys),
|
|
102
114
|
ACL: "public-read"
|
|
103
115
|
});
|
|
104
116
|
return (0, import_s3_request_presigner.getSignedUrl)(client, command, { expiresIn: 300 });
|
|
105
117
|
};
|
|
106
|
-
var getDownloadURL = (
|
|
107
|
-
return `${
|
|
118
|
+
var getDownloadURL = (keys) => {
|
|
119
|
+
return `${URL_PREFIX}${getKey(keys)}`;
|
|
108
120
|
};
|
|
109
|
-
var uploadFile = (client
|
|
121
|
+
var uploadFile = (client) => async (keys, {
|
|
110
122
|
url,
|
|
111
123
|
blob
|
|
112
124
|
}) => {
|
|
@@ -114,18 +126,18 @@ var uploadFile = (client, options) => async (keys, {
|
|
|
114
126
|
const fileBlob = blob || await fetch(url).then((file) => file.blob());
|
|
115
127
|
if (fileBlob) {
|
|
116
128
|
const key = getKey(keys);
|
|
117
|
-
await uploadBlob(client
|
|
118
|
-
return getDownloadURL(
|
|
129
|
+
await uploadBlob(client)(fileBlob, key);
|
|
130
|
+
return getDownloadURL(key);
|
|
119
131
|
}
|
|
120
132
|
return null;
|
|
121
133
|
};
|
|
122
|
-
var deleteFile = (client
|
|
123
|
-
const key = url.split(
|
|
134
|
+
var deleteFile = (client) => async (url) => {
|
|
135
|
+
const key = url.split(URL_PREFIX)[1];
|
|
124
136
|
if (key) {
|
|
125
137
|
try {
|
|
126
138
|
await client.send(
|
|
127
139
|
new import_client_s3.DeleteObjectCommand({
|
|
128
|
-
Bucket:
|
|
140
|
+
Bucket: getEnv("AWS_BUCKET" /* AWS_BUCKET */),
|
|
129
141
|
Key: key
|
|
130
142
|
})
|
|
131
143
|
);
|
|
@@ -136,11 +148,11 @@ var deleteFile = (client, options) => async (url) => {
|
|
|
136
148
|
}
|
|
137
149
|
return false;
|
|
138
150
|
};
|
|
139
|
-
var uploadBlob = (client
|
|
151
|
+
var uploadBlob = (client) => async (file, key) => {
|
|
140
152
|
const fileBuffer = await file.arrayBuffer();
|
|
141
153
|
return client.send(
|
|
142
154
|
new import_client_s3.PutObjectCommand({
|
|
143
|
-
Bucket,
|
|
155
|
+
Bucket: getEnv("AWS_BUCKET" /* AWS_BUCKET */),
|
|
144
156
|
Key: key,
|
|
145
157
|
ACL: "public-read",
|
|
146
158
|
Body: Buffer.from(fileBuffer),
|
|
@@ -152,7 +164,7 @@ var uploadBlob = (client, Bucket) => async (file, key) => {
|
|
|
152
164
|
|
|
153
165
|
// src/file/put.ts
|
|
154
166
|
var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
155
|
-
const ctx = getContext(
|
|
167
|
+
const ctx = getContext(req);
|
|
156
168
|
if (!ctx?.userId || ctx.isRefreshID)
|
|
157
169
|
return import_server3.NextResponse.json({ error: "unauthorized" }, { status: 401 });
|
|
158
170
|
const formData = await req.formData();
|
|
@@ -165,8 +177,8 @@ var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
|
165
177
|
data: typeof data === "string" ? JSON.parse(data) : void 0
|
|
166
178
|
};
|
|
167
179
|
const fileKey = options.getKey ? await options.getKey(inputData) : (0, import_uuid.v4)();
|
|
168
|
-
const url = getDownloadURL(
|
|
169
|
-
await uploadBlob(client
|
|
180
|
+
const url = getDownloadURL(fileKey);
|
|
181
|
+
await uploadBlob(client)(file, fileKey);
|
|
170
182
|
const onUploadResponse = await options.onUpload({
|
|
171
183
|
...inputData,
|
|
172
184
|
url
|
|
@@ -179,13 +191,13 @@ var getFileUploadPutRoute = (options, client) => async (req) => {
|
|
|
179
191
|
|
|
180
192
|
// src/file/setup.ts
|
|
181
193
|
function setupFileUpload(options) {
|
|
182
|
-
const client = getS3Client(
|
|
194
|
+
const client = getS3Client();
|
|
183
195
|
return {
|
|
184
196
|
PUT: getFileUploadPutRoute(options, client),
|
|
185
|
-
uploadFile: uploadFile(client
|
|
186
|
-
deleteFile: deleteFile(client
|
|
187
|
-
getUploadURL: getUploadURL(client
|
|
188
|
-
getDownloadURL
|
|
197
|
+
uploadFile: uploadFile(client),
|
|
198
|
+
deleteFile: deleteFile(client),
|
|
199
|
+
getUploadURL: getUploadURL(client),
|
|
200
|
+
getDownloadURL
|
|
189
201
|
};
|
|
190
202
|
}
|
|
191
203
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/file/setup.d.mts
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import * as next_server from 'next/server';
|
|
2
|
-
import { AuthKeys } from '../auth/email/types.mjs';
|
|
3
|
-
import '../auth/types.mjs';
|
|
4
2
|
|
|
5
3
|
interface SetupFileUploadOptions {
|
|
6
|
-
keys: AuthKeys;
|
|
7
|
-
region: string;
|
|
8
|
-
bucket: string;
|
|
9
|
-
awsSecret: string;
|
|
10
|
-
awsKey: string;
|
|
11
4
|
getKey?: (data: {
|
|
12
5
|
type: string;
|
|
13
6
|
userId: number;
|
package/dist/file/setup.d.ts
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import * as next_server from 'next/server';
|
|
2
|
-
import { AuthKeys } from '../auth/email/types.js';
|
|
3
|
-
import '../auth/types.js';
|
|
4
2
|
|
|
5
3
|
interface SetupFileUploadOptions {
|
|
6
|
-
keys: AuthKeys;
|
|
7
|
-
region: string;
|
|
8
|
-
bucket: string;
|
|
9
|
-
awsSecret: string;
|
|
10
|
-
awsKey: string;
|
|
11
4
|
getKey?: (data: {
|
|
12
5
|
type: string;
|
|
13
6
|
userId: number;
|