@edgestore/server 0.5.7 → 0.6.0-canary.1
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/adapters/astro/package.json +1 -0
- package/adapters/express/package.json +1 -0
- package/adapters/fastify/package.json +1 -0
- package/adapters/hono/package.json +1 -0
- package/adapters/next/app/package.json +1 -0
- package/adapters/next/pages/package.json +1 -0
- package/adapters/remix/package.json +1 -0
- package/adapters/start/package.json +1 -0
- package/core/package.json +1 -0
- package/dist/adapters/astro/index.cjs +134 -0
- package/dist/adapters/astro/index.d.cts +20 -0
- package/dist/adapters/astro/index.d.cts.map +1 -0
- package/dist/adapters/astro/index.d.mts +20 -0
- package/dist/adapters/astro/index.d.mts.map +1 -0
- package/dist/adapters/astro/index.mjs +128 -175
- package/dist/adapters/astro/index.mjs.map +1 -0
- package/dist/adapters/express/index.cjs +104 -0
- package/dist/adapters/express/index.d.cts +24 -0
- package/dist/adapters/express/index.d.cts.map +1 -0
- package/dist/adapters/express/index.d.mts +24 -0
- package/dist/adapters/express/index.d.mts.map +1 -0
- package/dist/adapters/express/index.mjs +100 -112
- package/dist/adapters/express/index.mjs.map +1 -0
- package/dist/adapters/fastify/index.cjs +115 -0
- package/dist/adapters/fastify/index.d.cts +24 -0
- package/dist/adapters/fastify/index.d.cts.map +1 -0
- package/dist/adapters/fastify/index.d.mts +24 -0
- package/dist/adapters/fastify/index.d.mts.map +1 -0
- package/dist/adapters/fastify/index.mjs +109 -139
- package/dist/adapters/fastify/index.mjs.map +1 -0
- package/dist/adapters/hono/index.cjs +117 -0
- package/dist/adapters/hono/index.d.cts +91 -0
- package/dist/adapters/hono/index.d.cts.map +1 -0
- package/dist/adapters/hono/index.d.mts +91 -0
- package/dist/adapters/hono/index.d.mts.map +1 -0
- package/dist/adapters/hono/index.mjs +111 -129
- package/dist/adapters/hono/index.mjs.map +1 -0
- package/dist/adapters/next/app/index.cjs +140 -0
- package/dist/adapters/next/app/index.d.cts +23 -0
- package/dist/adapters/next/app/index.d.cts.map +1 -0
- package/dist/adapters/next/app/index.d.mts +23 -0
- package/dist/adapters/next/app/index.d.mts.map +1 -0
- package/dist/adapters/next/app/index.mjs +136 -168
- package/dist/adapters/next/app/index.mjs.map +1 -0
- package/dist/adapters/next/pages/index.cjs +108 -0
- package/dist/adapters/next/pages/index.d.cts +24 -0
- package/dist/adapters/next/pages/index.d.cts.map +1 -0
- package/dist/adapters/next/pages/index.d.mts +24 -0
- package/dist/adapters/next/pages/index.d.mts.map +1 -0
- package/dist/adapters/next/pages/index.mjs +104 -116
- package/dist/adapters/next/pages/index.mjs.map +1 -0
- package/dist/adapters/remix/index.cjs +124 -0
- package/dist/adapters/remix/index.d.cts +26 -0
- package/dist/adapters/remix/index.d.cts.map +1 -0
- package/dist/adapters/remix/index.d.mts +26 -0
- package/dist/adapters/remix/index.d.mts.map +1 -0
- package/dist/adapters/remix/index.mjs +118 -150
- package/dist/adapters/remix/index.mjs.map +1 -0
- package/dist/adapters/start/index.cjs +156 -0
- package/dist/adapters/start/index.d.cts +26 -0
- package/dist/adapters/start/index.d.cts.map +1 -0
- package/dist/adapters/start/index.d.mts +26 -0
- package/dist/adapters/start/index.d.mts.map +1 -0
- package/dist/adapters/start/index.mjs +150 -184
- package/dist/adapters/start/index.mjs.map +1 -0
- package/dist/core/index.cjs +148 -0
- package/dist/core/index.d.cts +500 -0
- package/dist/core/index.d.cts.map +1 -0
- package/dist/core/index.d.mts +500 -0
- package/dist/core/index.d.mts.map +1 -0
- package/dist/core/index.mjs +135 -169
- package/dist/core/index.mjs.map +1 -0
- package/dist/edgestore-Cr88uKUx.mjs +142 -0
- package/dist/edgestore-Cr88uKUx.mjs.map +1 -0
- package/dist/edgestore-Dqb-EoFm.cjs +146 -0
- package/dist/index.cjs +8 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.mjs +3 -1
- package/dist/providers/aws/index.cjs +89 -0
- package/dist/providers/aws/index.d.cts +71 -0
- package/dist/providers/aws/index.d.cts.map +1 -0
- package/dist/providers/aws/index.d.mts +71 -0
- package/dist/providers/aws/index.d.mts.map +1 -0
- package/dist/providers/aws/index.mjs +85 -102
- package/dist/providers/aws/index.mjs.map +1 -0
- package/dist/providers/azure/index.cjs +56 -0
- package/dist/providers/azure/index.d.cts +44 -0
- package/dist/providers/azure/index.d.cts.map +1 -0
- package/dist/providers/azure/index.d.mts +44 -0
- package/dist/providers/azure/index.d.mts.map +1 -0
- package/dist/providers/azure/index.mjs +52 -58
- package/dist/providers/azure/index.mjs.map +1 -0
- package/dist/providers/edgestore/index.cjs +5 -0
- package/dist/providers/edgestore/index.d.cts +23 -0
- package/dist/providers/edgestore/index.d.cts.map +1 -0
- package/dist/providers/edgestore/index.d.mts +23 -0
- package/dist/providers/edgestore/index.d.mts.map +1 -0
- package/dist/providers/edgestore/index.mjs +4 -146
- package/dist/sdk-AhXUPMy1.cjs +238 -0
- package/dist/sdk-CKRQe75P.mjs +222 -0
- package/dist/sdk-CKRQe75P.mjs.map +1 -0
- package/dist/shared-B39MtSQo.d.cts +68 -0
- package/dist/shared-B39MtSQo.d.cts.map +1 -0
- package/dist/shared-Bd7-gfqa.mjs +457 -0
- package/dist/shared-Bd7-gfqa.mjs.map +1 -0
- package/dist/shared-DsWTtQ1-.d.mts +68 -0
- package/dist/shared-DsWTtQ1-.d.mts.map +1 -0
- package/dist/shared-pWGwhEsU.cjs +527 -0
- package/dist/utils--x-q_GK5.mjs +44 -0
- package/dist/utils--x-q_GK5.mjs.map +1 -0
- package/dist/utils-D6YuBNUV.cjs +54 -0
- package/package.json +121 -57
- package/providers/aws/package.json +1 -0
- package/providers/azure/package.json +1 -0
- package/providers/edgestore/package.json +1 -0
- package/adapters/astro/index.d.ts +0 -1
- package/adapters/astro/index.js +0 -1
- package/adapters/express/index.d.ts +0 -1
- package/adapters/express/index.js +0 -1
- package/adapters/fastify/index.d.ts +0 -1
- package/adapters/fastify/index.js +0 -1
- package/adapters/hono/index.d.ts +0 -1
- package/adapters/hono/index.js +0 -1
- package/adapters/next/app/index.d.ts +0 -1
- package/adapters/next/app/index.js +0 -1
- package/adapters/next/pages/index.d.ts +0 -1
- package/adapters/next/pages/index.js +0 -1
- package/adapters/remix/index.d.ts +0 -1
- package/adapters/remix/index.js +0 -1
- package/adapters/start/index.d.ts +0 -1
- package/adapters/start/index.js +0 -1
- package/core/index.d.ts +0 -1
- package/core/index.js +0 -1
- package/dist/adapters/astro/index.d.ts +0 -17
- package/dist/adapters/astro/index.d.ts.map +0 -1
- package/dist/adapters/astro/index.js +0 -186
- package/dist/adapters/express/index.d.ts +0 -21
- package/dist/adapters/express/index.d.ts.map +0 -1
- package/dist/adapters/express/index.js +0 -121
- package/dist/adapters/fastify/index.d.ts +0 -21
- package/dist/adapters/fastify/index.d.ts.map +0 -1
- package/dist/adapters/fastify/index.js +0 -150
- package/dist/adapters/hono/index.d.ts +0 -86
- package/dist/adapters/hono/index.d.ts.map +0 -1
- package/dist/adapters/hono/index.js +0 -140
- package/dist/adapters/imageTypes.d.ts +0 -2
- package/dist/adapters/imageTypes.d.ts.map +0 -1
- package/dist/adapters/next/app/index.d.ts +0 -20
- package/dist/adapters/next/app/index.d.ts.map +0 -1
- package/dist/adapters/next/app/index.js +0 -177
- package/dist/adapters/next/pages/index.d.ts +0 -21
- package/dist/adapters/next/pages/index.d.ts.map +0 -1
- package/dist/adapters/next/pages/index.js +0 -125
- package/dist/adapters/remix/index.d.ts +0 -21
- package/dist/adapters/remix/index.d.ts.map +0 -1
- package/dist/adapters/remix/index.js +0 -161
- package/dist/adapters/shared.d.ts +0 -167
- package/dist/adapters/shared.d.ts.map +0 -1
- package/dist/adapters/start/index.d.ts +0 -21
- package/dist/adapters/start/index.d.ts.map +0 -1
- package/dist/adapters/start/index.js +0 -195
- package/dist/core/client/index.d.ts +0 -217
- package/dist/core/client/index.d.ts.map +0 -1
- package/dist/core/index.d.ts +0 -3
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -186
- package/dist/core/sdk/index.d.ts +0 -240
- package/dist/core/sdk/index.d.ts.map +0 -1
- package/dist/index-1e7b1b93.js +0 -235
- package/dist/index-a36b09a6.mjs +0 -231
- package/dist/index-b0fff508.js +0 -231
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -12
- package/dist/libs/errors/EdgeStoreCredentialsError.d.ts +0 -5
- package/dist/libs/errors/EdgeStoreCredentialsError.d.ts.map +0 -1
- package/dist/libs/logger.d.ts +0 -13
- package/dist/libs/logger.d.ts.map +0 -1
- package/dist/libs/utils.d.ts +0 -5
- package/dist/libs/utils.d.ts.map +0 -1
- package/dist/providers/aws/index.d.ts +0 -68
- package/dist/providers/aws/index.d.ts.map +0 -1
- package/dist/providers/aws/index.js +0 -111
- package/dist/providers/azure/index.d.ts +0 -39
- package/dist/providers/azure/index.d.ts.map +0 -1
- package/dist/providers/azure/index.js +0 -67
- package/dist/providers/edgestore/index.d.ts +0 -19
- package/dist/providers/edgestore/index.d.ts.map +0 -1
- package/dist/providers/edgestore/index.js +0 -151
- package/dist/shared-4ec2dc90.js +0 -466
- package/dist/shared-64e9c30c.js +0 -435
- package/dist/shared-c6527780.mjs +0 -454
- package/dist/utils-26113e02.js +0 -65
- package/dist/utils-ab564a9e.js +0 -44
- package/dist/utils-cba23eef.mjs +0 -62
- package/providers/aws/index.d.ts +0 -1
- package/providers/aws/index.js +0 -1
- package/providers/azure/index.d.ts +0 -1
- package/providers/azure/index.js +0 -1
- package/providers/edgestore/index.d.ts +0 -1
- package/providers/edgestore/index.js +0 -1
|
@@ -1,191 +1,157 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import '@panva/hkdf';
|
|
7
|
-
import 'cookie';
|
|
8
|
-
import 'jose';
|
|
9
|
-
import 'uuid';
|
|
1
|
+
import { a as getCookieConfig, d as requestUploadParts, i as deleteFile, n as completeMultipartUpload, r as confirmUpload, s as init, u as requestUpload } from "../../shared-Bd7-gfqa.mjs";
|
|
2
|
+
import "../../sdk-CKRQe75P.mjs";
|
|
3
|
+
import { n as logger_default, t as matchPath } from "../../utils--x-q_GK5.mjs";
|
|
4
|
+
import { t as EdgeStoreProvider } from "../../edgestore-Cr88uKUx.mjs";
|
|
5
|
+
import { EDGE_STORE_ERROR_CODES, EdgeStoreError } from "@edgestore/shared";
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
//#region src/adapters/start/index.ts
|
|
12
8
|
function getCookie(req, cookieName) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return acc;
|
|
21
|
-
}, {})[cookieName];
|
|
9
|
+
const cookieHeader = req.headers.get("cookie");
|
|
10
|
+
if (!cookieHeader) return void 0;
|
|
11
|
+
return cookieHeader.split(";").map((cookieStr) => cookieStr.trim()).reduce((acc, cookieStr) => {
|
|
12
|
+
const [name, ...rest] = cookieStr.split("=");
|
|
13
|
+
if (name && rest.length > 0) acc[name] = rest.join("=");
|
|
14
|
+
return acc;
|
|
15
|
+
}, {})[cookieName];
|
|
22
16
|
}
|
|
23
17
|
function createEdgeStoreStartHandler(config) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
} else {
|
|
161
|
-
return new Response(null, {
|
|
162
|
-
status: 404
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
} catch (err) {
|
|
166
|
-
if (err instanceof EdgeStoreError) {
|
|
167
|
-
log[err.level](err.formattedMessage());
|
|
168
|
-
if (err.cause) log[err.level](err.cause);
|
|
169
|
-
const status = EDGE_STORE_ERROR_CODES[err.code] || 500;
|
|
170
|
-
return new Response(JSON.stringify(err.formattedJson()), {
|
|
171
|
-
status,
|
|
172
|
-
headers: {
|
|
173
|
-
'Content-Type': 'application/json'
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
log.error(err);
|
|
178
|
-
return new Response(JSON.stringify(new EdgeStoreError({
|
|
179
|
-
message: 'Internal server error',
|
|
180
|
-
code: 'SERVER_ERROR'
|
|
181
|
-
}).formattedJson()), {
|
|
182
|
-
status: 500,
|
|
183
|
-
headers: {
|
|
184
|
-
'Content-Type': 'application/json'
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
};
|
|
18
|
+
const { provider = EdgeStoreProvider(), cookieConfig } = config;
|
|
19
|
+
const log = new logger_default(config.logLevel);
|
|
20
|
+
globalThis._EDGE_STORE_LOGGER = log;
|
|
21
|
+
log.debug("Creating EdgeStore TanStack Start handler");
|
|
22
|
+
const resolvedCookieConfig = getCookieConfig(cookieConfig);
|
|
23
|
+
return async ({ request }) => {
|
|
24
|
+
try {
|
|
25
|
+
const { pathname } = new URL(request.url);
|
|
26
|
+
if (matchPath(pathname, "/health")) return new Response("OK", { status: 200 });
|
|
27
|
+
else if (matchPath(pathname, "/init")) {
|
|
28
|
+
let ctx = {};
|
|
29
|
+
try {
|
|
30
|
+
ctx = "createContext" in config ? await config.createContext({ req: request }) : {};
|
|
31
|
+
} catch (err) {
|
|
32
|
+
throw new EdgeStoreError({
|
|
33
|
+
message: "Error creating context",
|
|
34
|
+
code: "CREATE_CONTEXT_ERROR",
|
|
35
|
+
cause: err instanceof Error ? err : void 0
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const { newCookies, token, baseUrl, providerName } = await init({
|
|
39
|
+
ctx,
|
|
40
|
+
provider,
|
|
41
|
+
router: config.router,
|
|
42
|
+
cookieConfig
|
|
43
|
+
});
|
|
44
|
+
const headers = new Headers();
|
|
45
|
+
newCookies.forEach((cookie) => {
|
|
46
|
+
headers.append("Set-Cookie", cookie);
|
|
47
|
+
});
|
|
48
|
+
headers.set("Content-Type", "application/json");
|
|
49
|
+
return new Response(JSON.stringify({
|
|
50
|
+
token,
|
|
51
|
+
baseUrl,
|
|
52
|
+
providerName
|
|
53
|
+
}), {
|
|
54
|
+
status: 200,
|
|
55
|
+
headers
|
|
56
|
+
});
|
|
57
|
+
} else if (matchPath(pathname, "/request-upload")) {
|
|
58
|
+
const body = await request.json();
|
|
59
|
+
const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);
|
|
60
|
+
const result = await requestUpload({
|
|
61
|
+
provider,
|
|
62
|
+
router: config.router,
|
|
63
|
+
body,
|
|
64
|
+
ctxToken
|
|
65
|
+
});
|
|
66
|
+
return new Response(JSON.stringify(result), {
|
|
67
|
+
status: 200,
|
|
68
|
+
headers: { "Content-Type": "application/json" }
|
|
69
|
+
});
|
|
70
|
+
} else if (matchPath(pathname, "/request-upload-parts")) {
|
|
71
|
+
const body = await request.json();
|
|
72
|
+
const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);
|
|
73
|
+
const result = await requestUploadParts({
|
|
74
|
+
provider,
|
|
75
|
+
router: config.router,
|
|
76
|
+
body,
|
|
77
|
+
ctxToken
|
|
78
|
+
});
|
|
79
|
+
return new Response(JSON.stringify(result), {
|
|
80
|
+
status: 200,
|
|
81
|
+
headers: { "Content-Type": "application/json" }
|
|
82
|
+
});
|
|
83
|
+
} else if (matchPath(pathname, "/complete-multipart-upload")) {
|
|
84
|
+
const body = await request.json();
|
|
85
|
+
const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);
|
|
86
|
+
await completeMultipartUpload({
|
|
87
|
+
provider,
|
|
88
|
+
router: config.router,
|
|
89
|
+
body,
|
|
90
|
+
ctxToken
|
|
91
|
+
});
|
|
92
|
+
return new Response(null, { status: 200 });
|
|
93
|
+
} else if (matchPath(pathname, "/confirm-upload")) {
|
|
94
|
+
const body = await request.json();
|
|
95
|
+
const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);
|
|
96
|
+
const result = await confirmUpload({
|
|
97
|
+
provider,
|
|
98
|
+
router: config.router,
|
|
99
|
+
body,
|
|
100
|
+
ctxToken
|
|
101
|
+
});
|
|
102
|
+
return new Response(JSON.stringify(result), {
|
|
103
|
+
status: 200,
|
|
104
|
+
headers: { "Content-Type": "application/json" }
|
|
105
|
+
});
|
|
106
|
+
} else if (matchPath(pathname, "/delete-file")) {
|
|
107
|
+
const body = await request.json();
|
|
108
|
+
const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);
|
|
109
|
+
const result = await deleteFile({
|
|
110
|
+
provider,
|
|
111
|
+
router: config.router,
|
|
112
|
+
body,
|
|
113
|
+
ctxToken
|
|
114
|
+
});
|
|
115
|
+
return new Response(JSON.stringify(result), {
|
|
116
|
+
status: 200,
|
|
117
|
+
headers: { "Content-Type": "application/json" }
|
|
118
|
+
});
|
|
119
|
+
} else if (matchPath(pathname, "/proxy-file")) {
|
|
120
|
+
const urlParam = new URL(request.url).searchParams.get("url");
|
|
121
|
+
if (typeof urlParam === "string") {
|
|
122
|
+
var _request$headers$get, _proxyRes$headers$get;
|
|
123
|
+
const proxyRes = await fetch(urlParam, { headers: { cookie: (_request$headers$get = request.headers.get("cookie")) !== null && _request$headers$get !== void 0 ? _request$headers$get : "" } });
|
|
124
|
+
const data = await proxyRes.arrayBuffer();
|
|
125
|
+
const headers = new Headers();
|
|
126
|
+
headers.set("Content-Type", (_proxyRes$headers$get = proxyRes.headers.get("Content-Type")) !== null && _proxyRes$headers$get !== void 0 ? _proxyRes$headers$get : "application/octet-stream");
|
|
127
|
+
return new Response(data, {
|
|
128
|
+
status: proxyRes.status,
|
|
129
|
+
headers
|
|
130
|
+
});
|
|
131
|
+
} else return new Response(null, { status: 400 });
|
|
132
|
+
} else return new Response(null, { status: 404 });
|
|
133
|
+
} catch (err) {
|
|
134
|
+
if (err instanceof EdgeStoreError) {
|
|
135
|
+
log[err.level](err.formattedMessage());
|
|
136
|
+
if (err.cause) log[err.level](err.cause);
|
|
137
|
+
const status = EDGE_STORE_ERROR_CODES[err.code] || 500;
|
|
138
|
+
return new Response(JSON.stringify(err.formattedJson()), {
|
|
139
|
+
status,
|
|
140
|
+
headers: { "Content-Type": "application/json" }
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
log.error(err);
|
|
144
|
+
return new Response(JSON.stringify(new EdgeStoreError({
|
|
145
|
+
message: "Internal server error",
|
|
146
|
+
code: "SERVER_ERROR"
|
|
147
|
+
}).formattedJson()), {
|
|
148
|
+
status: 500,
|
|
149
|
+
headers: { "Content-Type": "application/json" }
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
};
|
|
189
153
|
}
|
|
190
154
|
|
|
155
|
+
//#endregion
|
|
191
156
|
export { createEdgeStoreStartHandler };
|
|
157
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["Logger"],"sources":["../../../src/adapters/start/index.ts"],"sourcesContent":["import {\n EDGE_STORE_ERROR_CODES,\n EdgeStoreError,\n type EdgeStoreErrorCodeKey,\n type EdgeStoreRouter,\n type MaybePromise,\n type Provider,\n} from '@edgestore/shared';\nimport Logger, { type LogLevel } from '../../libs/logger';\nimport { matchPath } from '../../libs/utils';\nimport { EdgeStoreProvider } from '../../providers/edgestore';\nimport {\n completeMultipartUpload,\n confirmUpload,\n deleteFile,\n getCookieConfig,\n init,\n requestUpload,\n requestUploadParts,\n type CompleteMultipartUploadBody,\n type ConfirmUploadBody,\n type CookieConfig,\n type DeleteFileBody,\n type RequestUploadBody,\n type RequestUploadPartsParams,\n} from '../shared';\n\nexport type CreateContextOptions = {\n req: Request;\n};\n\nexport type Config<TCtx> = {\n provider?: Provider;\n router: EdgeStoreRouter<TCtx>;\n logLevel?: LogLevel;\n cookieConfig?: CookieConfig;\n} & (TCtx extends Record<string, never>\n ? object\n : {\n provider?: Provider;\n router: EdgeStoreRouter<TCtx>;\n createContext: (opts: CreateContextOptions) => MaybePromise<TCtx>;\n cookieConfig?: CookieConfig;\n });\n\ndeclare const globalThis: {\n _EDGE_STORE_LOGGER: Logger;\n};\n\n// Helper to extract a cookie from the request's cookie header\nfunction getCookie(req: Request, cookieName: string): string | undefined {\n const cookieHeader = req.headers.get('cookie');\n if (!cookieHeader) return undefined;\n return cookieHeader\n .split(';')\n .map((cookieStr) => cookieStr.trim())\n .reduce((acc: Record<string, string>, cookieStr) => {\n const [name, ...rest] = cookieStr.split('=');\n if (name && rest.length > 0) {\n acc[name] = rest.join('=');\n }\n return acc;\n }, {})[cookieName];\n}\n\nexport function createEdgeStoreStartHandler<TCtx>(config: Config<TCtx>) {\n const { provider = EdgeStoreProvider(), cookieConfig } = config;\n const log = new Logger(config.logLevel);\n globalThis._EDGE_STORE_LOGGER = log;\n log.debug('Creating EdgeStore TanStack Start handler');\n\n const resolvedCookieConfig = getCookieConfig(cookieConfig);\n\n return async ({ request }: { request: Request }) => {\n try {\n const { pathname } = new URL(request.url);\n if (matchPath(pathname, '/health')) {\n return new Response('OK', { status: 200 });\n } else if (matchPath(pathname, '/init')) {\n let ctx = {} as TCtx;\n try {\n ctx =\n 'createContext' in config\n ? await config.createContext({ req: request })\n : ({} as TCtx);\n } catch (err) {\n throw new EdgeStoreError({\n message: 'Error creating context',\n code: 'CREATE_CONTEXT_ERROR',\n cause: err instanceof Error ? err : undefined,\n });\n }\n const { newCookies, token, baseUrl, providerName } = await init({\n ctx,\n provider,\n router: config.router,\n cookieConfig,\n });\n const headers = new Headers();\n newCookies.forEach((cookie) => {\n headers.append('Set-Cookie', cookie);\n });\n headers.set('Content-Type', 'application/json');\n return new Response(JSON.stringify({ token, baseUrl, providerName }), {\n status: 200,\n headers,\n });\n } else if (matchPath(pathname, '/request-upload')) {\n const body = await request.json();\n const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);\n const result = await requestUpload({\n provider,\n router: config.router,\n body: body as RequestUploadBody,\n ctxToken,\n });\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } else if (matchPath(pathname, '/request-upload-parts')) {\n const body = await request.json();\n const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);\n const result = await requestUploadParts({\n provider,\n router: config.router,\n body: body as RequestUploadPartsParams,\n ctxToken,\n });\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } else if (matchPath(pathname, '/complete-multipart-upload')) {\n const body = await request.json();\n const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);\n await completeMultipartUpload({\n provider,\n router: config.router,\n body: body as CompleteMultipartUploadBody,\n ctxToken,\n });\n return new Response(null, { status: 200 });\n } else if (matchPath(pathname, '/confirm-upload')) {\n const body = await request.json();\n const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);\n const result = await confirmUpload({\n provider,\n router: config.router,\n body: body as ConfirmUploadBody,\n ctxToken,\n });\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } else if (matchPath(pathname, '/delete-file')) {\n const body = await request.json();\n const ctxToken = getCookie(request, resolvedCookieConfig.ctx.name);\n const result = await deleteFile({\n provider,\n router: config.router,\n body: body as DeleteFileBody,\n ctxToken,\n });\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } else if (matchPath(pathname, '/proxy-file')) {\n const urlParam = new URL(request.url).searchParams.get('url');\n if (typeof urlParam === 'string') {\n const proxyRes = await fetch(urlParam, {\n headers: {\n cookie: request.headers.get('cookie') ?? '',\n },\n });\n const data = await proxyRes.arrayBuffer();\n const headers = new Headers();\n headers.set(\n 'Content-Type',\n proxyRes.headers.get('Content-Type') ?? 'application/octet-stream',\n );\n return new Response(data, { status: proxyRes.status, headers });\n } else {\n return new Response(null, { status: 400 });\n }\n } else {\n return new Response(null, { status: 404 });\n }\n } catch (err) {\n if (err instanceof EdgeStoreError) {\n log[err.level](err.formattedMessage());\n if (err.cause) log[err.level](err.cause);\n const status =\n EDGE_STORE_ERROR_CODES[err.code as EdgeStoreErrorCodeKey] || 500;\n return new Response(JSON.stringify(err.formattedJson()), {\n status,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n log.error(err);\n return new Response(\n JSON.stringify(\n new EdgeStoreError({\n message: 'Internal server error',\n code: 'SERVER_ERROR',\n }).formattedJson(),\n ),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n },\n );\n }\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
const require_shared = require('../shared-pWGwhEsU.cjs');
|
|
2
|
+
const require_sdk = require('../sdk-AhXUPMy1.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/core/client/index.ts
|
|
5
|
+
function isTextContent(content) {
|
|
6
|
+
return typeof content === "string";
|
|
7
|
+
}
|
|
8
|
+
function isBlobContent(content) {
|
|
9
|
+
return typeof content !== "string" && "blob" in content;
|
|
10
|
+
}
|
|
11
|
+
function initEdgeStoreClient(config) {
|
|
12
|
+
const sdk = require_sdk.initEdgeStoreSdk({
|
|
13
|
+
accessKey: config.accessKey,
|
|
14
|
+
secretKey: config.secretKey
|
|
15
|
+
});
|
|
16
|
+
return new Proxy({}, { get(_target, key) {
|
|
17
|
+
const bucketName = key;
|
|
18
|
+
const bucket = config.router.buckets[bucketName];
|
|
19
|
+
if (!bucket) throw new Error(`Bucket ${bucketName} not found`);
|
|
20
|
+
return {
|
|
21
|
+
async upload(params) {
|
|
22
|
+
var _params$options, _params$options2, _params$options3, _params$options4, _params$options$tempo, _params$options5;
|
|
23
|
+
const content = params.content;
|
|
24
|
+
const ctx = "ctx" in params ? params.ctx : {};
|
|
25
|
+
const input = "input" in params ? params.input : {};
|
|
26
|
+
const { blob, extension } = await (async () => {
|
|
27
|
+
if (isTextContent(content)) return {
|
|
28
|
+
blob: new Blob([content], { type: "text/plain" }),
|
|
29
|
+
extension: "txt"
|
|
30
|
+
};
|
|
31
|
+
else if (isBlobContent(content)) return {
|
|
32
|
+
blob: content.blob,
|
|
33
|
+
extension: content.extension
|
|
34
|
+
};
|
|
35
|
+
else return {
|
|
36
|
+
blob: await getBlobFromUrl(content.url),
|
|
37
|
+
extension: content.extension
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
const path = require_shared.buildPath({
|
|
41
|
+
bucket,
|
|
42
|
+
pathAttrs: {
|
|
43
|
+
ctx,
|
|
44
|
+
input
|
|
45
|
+
},
|
|
46
|
+
fileInfo: {
|
|
47
|
+
type: blob.type,
|
|
48
|
+
size: blob.size,
|
|
49
|
+
extension,
|
|
50
|
+
temporary: false,
|
|
51
|
+
fileName: (_params$options = params.options) === null || _params$options === void 0 ? void 0 : _params$options.manualFileName,
|
|
52
|
+
replaceTargetUrl: (_params$options2 = params.options) === null || _params$options2 === void 0 ? void 0 : _params$options2.replaceTargetUrl
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
const metadata = await bucket._def.metadata({
|
|
56
|
+
ctx,
|
|
57
|
+
input
|
|
58
|
+
});
|
|
59
|
+
const requestUploadRes = await sdk.requestUpload({
|
|
60
|
+
bucketName,
|
|
61
|
+
bucketType: bucket._def.type,
|
|
62
|
+
fileInfo: {
|
|
63
|
+
fileName: (_params$options3 = params.options) === null || _params$options3 === void 0 ? void 0 : _params$options3.manualFileName,
|
|
64
|
+
replaceTargetUrl: (_params$options4 = params.options) === null || _params$options4 === void 0 ? void 0 : _params$options4.replaceTargetUrl,
|
|
65
|
+
type: blob.type,
|
|
66
|
+
size: blob.size,
|
|
67
|
+
extension,
|
|
68
|
+
isPublic: bucket._def.accessControl === void 0,
|
|
69
|
+
temporary: (_params$options$tempo = (_params$options5 = params.options) === null || _params$options5 === void 0 ? void 0 : _params$options5.temporary) !== null && _params$options$tempo !== void 0 ? _params$options$tempo : false,
|
|
70
|
+
path,
|
|
71
|
+
metadata
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
const { signedUrl, multipart } = requestUploadRes;
|
|
75
|
+
if (multipart) throw new Error("Multipart upload not implemented");
|
|
76
|
+
else if (signedUrl) {
|
|
77
|
+
const uploadResponse = await fetch(signedUrl, {
|
|
78
|
+
method: "PUT",
|
|
79
|
+
body: blob
|
|
80
|
+
});
|
|
81
|
+
if (!uploadResponse.ok) throw new Error(`Upload failed with status ${uploadResponse.status}: ${uploadResponse.statusText}`);
|
|
82
|
+
} else throw new Error("Missing signedUrl");
|
|
83
|
+
const { parsedPath, pathOrder } = require_shared.parsePath(path);
|
|
84
|
+
return require_shared._objectSpread2(require_shared._objectSpread2({ url: requestUploadRes.accessUrl }, { thumbnailUrl: requestUploadRes.thumbnailUrl }), {}, {
|
|
85
|
+
size: blob.size,
|
|
86
|
+
metadata,
|
|
87
|
+
path: parsedPath,
|
|
88
|
+
pathOrder
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
async getFile(params) {
|
|
92
|
+
const res = await sdk.getFile(params);
|
|
93
|
+
return {
|
|
94
|
+
url: getUrl(res.url, config.baseUrl),
|
|
95
|
+
size: res.size,
|
|
96
|
+
uploadedAt: new Date(res.uploadedAt),
|
|
97
|
+
metadata: res.metadata,
|
|
98
|
+
path: res.path
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
async confirmUpload(params) {
|
|
102
|
+
return await sdk.confirmUpload(params);
|
|
103
|
+
},
|
|
104
|
+
async deleteFile(params) {
|
|
105
|
+
return await sdk.deleteFile(params);
|
|
106
|
+
},
|
|
107
|
+
async listFiles(params) {
|
|
108
|
+
const res = await sdk.listFiles(require_shared._objectSpread2({ bucketName }, params));
|
|
109
|
+
return {
|
|
110
|
+
data: res.data.map((file) => {
|
|
111
|
+
return {
|
|
112
|
+
url: getUrl(file.url, config.baseUrl),
|
|
113
|
+
thumbnailUrl: file.thumbnailUrl,
|
|
114
|
+
size: file.size,
|
|
115
|
+
uploadedAt: new Date(file.uploadedAt),
|
|
116
|
+
metadata: file.metadata,
|
|
117
|
+
path: file.path
|
|
118
|
+
};
|
|
119
|
+
}),
|
|
120
|
+
pagination: res.pagination
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
} });
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Protected files need third-party cookies to work.
|
|
128
|
+
* Since third party cookies don't work on localhost,
|
|
129
|
+
* we need to proxy the file through the server.
|
|
130
|
+
*/
|
|
131
|
+
function getUrl(url, baseUrl) {
|
|
132
|
+
if (require_shared.isDev() && !url.includes("/_public/")) {
|
|
133
|
+
if (!baseUrl) throw new Error("Missing baseUrl. You need to pass the baseUrl to `initEdgeStoreClient` to get protected files in development.");
|
|
134
|
+
const proxyUrl = new URL(baseUrl);
|
|
135
|
+
proxyUrl.pathname = `${proxyUrl.pathname}/proxy-file`;
|
|
136
|
+
proxyUrl.search = new URLSearchParams({ url }).toString();
|
|
137
|
+
return proxyUrl.toString();
|
|
138
|
+
}
|
|
139
|
+
return url;
|
|
140
|
+
}
|
|
141
|
+
async function getBlobFromUrl(url) {
|
|
142
|
+
return await (await fetch(url)).blob();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
//#endregion
|
|
146
|
+
exports.edgeStoreRawSdk = require_sdk.edgeStoreRawSdk;
|
|
147
|
+
exports.initEdgeStoreClient = initEdgeStoreClient;
|
|
148
|
+
exports.initEdgeStoreSdk = require_sdk.initEdgeStoreSdk;
|