@edgestore/server 0.0.0-alpha.13 → 0.0.0-alpha.14
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/adapters/next/app/index.d.ts.map +1 -1
- package/dist/adapters/next/app/index.js +21 -1
- package/dist/adapters/next/app/index.mjs +21 -1
- package/dist/adapters/next/pages/index.d.ts.map +1 -1
- package/dist/adapters/next/pages/index.js +15 -1
- package/dist/adapters/next/pages/index.mjs +15 -1
- package/dist/core/client/index.d.ts +12 -10
- package/dist/core/client/index.d.ts.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +20 -2
- package/dist/core/index.mjs +20 -2
- package/dist/core/internals/bucketBuilder.d.ts +46 -4
- package/dist/core/internals/bucketBuilder.d.ts.map +1 -1
- package/dist/providers/edgestore/index.d.ts +0 -1
- package/dist/providers/edgestore/index.d.ts.map +1 -1
- package/dist/providers/edgestore/index.js +3 -2
- package/dist/providers/edgestore/index.mjs +3 -2
- package/dist/{shared-59c74ca7.mjs → shared-2a9c8307.mjs} +2 -2
- package/dist/{shared-5ed6e18e.js → shared-ae739a04.js} +2 -2
- package/dist/{shared-10685370.js → shared-fac1b0a0.js} +2 -2
- package/package.json +6 -4
- package/src/adapters/next/app/index.ts +23 -0
- package/src/adapters/next/pages/index.ts +19 -0
- package/src/adapters/shared.ts +2 -2
- package/src/core/client/index.ts +36 -11
- package/src/core/index.ts +1 -0
- package/src/core/internals/bucketBuilder.ts +54 -4
- package/src/providers/edgestore/index.ts +3 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/next/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAKxE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAW9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,MAAM,CAAC,IAAI,IAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACzD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEN,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAEhD,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/next/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAKxE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAW9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,MAAM,CAAC,IAAI,IAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACzD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEN,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAEhD,WAAW,uBA0G/B"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var shared = require('../../../shared-
|
|
5
|
+
var shared = require('../../../shared-ae739a04.js');
|
|
6
6
|
var providers_edgestore_index = require('../../../providers/edgestore/index.js');
|
|
7
7
|
require('@panva/hkdf');
|
|
8
8
|
require('cookie');
|
|
@@ -70,6 +70,26 @@ function createEdgeStoreNextHandler(config) {
|
|
|
70
70
|
return new Response(null, {
|
|
71
71
|
status: 200
|
|
72
72
|
});
|
|
73
|
+
} else if (req.nextUrl.pathname === '/api/edgestore/proxy-file') {
|
|
74
|
+
const url = req.nextUrl.searchParams.get('url');
|
|
75
|
+
if (typeof url === 'string') {
|
|
76
|
+
const proxyRes = await fetch(url, {
|
|
77
|
+
headers: {
|
|
78
|
+
cookie: req.cookies.toString() ?? ''
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const data = await proxyRes.arrayBuffer();
|
|
82
|
+
return new Response(data, {
|
|
83
|
+
status: proxyRes.status,
|
|
84
|
+
headers: {
|
|
85
|
+
'Content-Type': proxyRes.headers.get('Content-Type') ?? 'application/octet-stream'
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
} else {
|
|
89
|
+
return new Response(null, {
|
|
90
|
+
status: 400
|
|
91
|
+
});
|
|
92
|
+
}
|
|
73
93
|
} else {
|
|
74
94
|
return new Response(null, {
|
|
75
95
|
status: 404
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as init, r as requestUpload, a as requestUploadParts, d as deleteFile, E as EdgeStoreError, b as EDGE_STORE_ERROR_CODES } from '../../../shared-
|
|
1
|
+
import { i as init, r as requestUpload, a as requestUploadParts, d as deleteFile, E as EdgeStoreError, b as EDGE_STORE_ERROR_CODES } from '../../../shared-2a9c8307.mjs';
|
|
2
2
|
import { EdgeStoreProvider } from '../../../providers/edgestore/index.mjs';
|
|
3
3
|
import '@panva/hkdf';
|
|
4
4
|
import 'cookie';
|
|
@@ -66,6 +66,26 @@ function createEdgeStoreNextHandler(config) {
|
|
|
66
66
|
return new Response(null, {
|
|
67
67
|
status: 200
|
|
68
68
|
});
|
|
69
|
+
} else if (req.nextUrl.pathname === '/api/edgestore/proxy-file') {
|
|
70
|
+
const url = req.nextUrl.searchParams.get('url');
|
|
71
|
+
if (typeof url === 'string') {
|
|
72
|
+
const proxyRes = await fetch(url, {
|
|
73
|
+
headers: {
|
|
74
|
+
cookie: req.cookies.toString() ?? ''
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
const data = await proxyRes.arrayBuffer();
|
|
78
|
+
return new Response(data, {
|
|
79
|
+
status: proxyRes.status,
|
|
80
|
+
headers: {
|
|
81
|
+
'Content-Type': proxyRes.headers.get('Content-Type') ?? 'application/octet-stream'
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
} else {
|
|
85
|
+
return new Response(null, {
|
|
86
|
+
status: 400
|
|
87
|
+
});
|
|
88
|
+
}
|
|
69
89
|
} else {
|
|
70
90
|
return new Response(null, {
|
|
71
91
|
status: 404
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/next/pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAKxE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAW9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,eAAe,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,MAAM,CAAC,IAAI,IAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACzD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEN,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAEhD,cAAc,OAAO,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/next/pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAKxE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAW9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,eAAe,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,MAAM,CAAC,IAAI,IAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACzD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEN,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAEhD,cAAc,OAAO,eAAe,mBA0ExD"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var shared = require('../../../shared-
|
|
5
|
+
var shared = require('../../../shared-ae739a04.js');
|
|
6
6
|
var providers_edgestore_index = require('../../../providers/edgestore/index.js');
|
|
7
7
|
require('@panva/hkdf');
|
|
8
8
|
require('cookie');
|
|
@@ -52,6 +52,20 @@ function createEdgeStoreNextHandler(config) {
|
|
|
52
52
|
ctxToken: req.cookies['edgestore-ctx']
|
|
53
53
|
});
|
|
54
54
|
res.status(200).end();
|
|
55
|
+
} else if (req.url?.startsWith('/api/edgestore/proxy-file')) {
|
|
56
|
+
const { url } = req.query;
|
|
57
|
+
if (typeof url === 'string') {
|
|
58
|
+
const proxyRes = await fetch(url, {
|
|
59
|
+
headers: {
|
|
60
|
+
cookie: req.headers.cookie ?? ''
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
const data = await proxyRes.arrayBuffer();
|
|
64
|
+
res.setHeader('Content-Type', proxyRes.headers.get('Content-Type') ?? 'application/octet-stream');
|
|
65
|
+
res.end(Buffer.from(data));
|
|
66
|
+
} else {
|
|
67
|
+
res.status(400).end();
|
|
68
|
+
}
|
|
55
69
|
} else {
|
|
56
70
|
res.status(404).end();
|
|
57
71
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as init, r as requestUpload, a as requestUploadParts, d as deleteFile, E as EdgeStoreError, b as EDGE_STORE_ERROR_CODES } from '../../../shared-
|
|
1
|
+
import { i as init, r as requestUpload, a as requestUploadParts, d as deleteFile, E as EdgeStoreError, b as EDGE_STORE_ERROR_CODES } from '../../../shared-2a9c8307.mjs';
|
|
2
2
|
import { EdgeStoreProvider } from '../../../providers/edgestore/index.mjs';
|
|
3
3
|
import '@panva/hkdf';
|
|
4
4
|
import 'cookie';
|
|
@@ -48,6 +48,20 @@ function createEdgeStoreNextHandler(config) {
|
|
|
48
48
|
ctxToken: req.cookies['edgestore-ctx']
|
|
49
49
|
});
|
|
50
50
|
res.status(200).end();
|
|
51
|
+
} else if (req.url?.startsWith('/api/edgestore/proxy-file')) {
|
|
52
|
+
const { url } = req.query;
|
|
53
|
+
if (typeof url === 'string') {
|
|
54
|
+
const proxyRes = await fetch(url, {
|
|
55
|
+
headers: {
|
|
56
|
+
cookie: req.headers.cookie ?? ''
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const data = await proxyRes.arrayBuffer();
|
|
60
|
+
res.setHeader('Content-Type', proxyRes.headers.get('Content-Type') ?? 'application/octet-stream');
|
|
61
|
+
res.end(Buffer.from(data));
|
|
62
|
+
} else {
|
|
63
|
+
res.status(400).end();
|
|
64
|
+
}
|
|
51
65
|
} else {
|
|
52
66
|
res.status(404).end();
|
|
53
67
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { AnyRouter, Comparison } from '..';
|
|
2
2
|
import { Simplify } from '../../types';
|
|
3
|
-
import { AnyBuilder, InferBucketPathKeys, InferMetadataObject } from '../internals/bucketBuilder';
|
|
3
|
+
import { AnyBuilder, InferBucketPathKeys, InferBucketPathObject, InferMetadataObject } from '../internals/bucketBuilder';
|
|
4
4
|
export type GetFileRes<TBucket extends AnyBuilder> = {
|
|
5
5
|
url: string;
|
|
6
6
|
size: number;
|
|
7
7
|
uploadedAt: Date;
|
|
8
8
|
metadata: InferMetadataObject<TBucket>;
|
|
9
|
-
path:
|
|
10
|
-
[TKey in InferBucketPathKeys<TBucket>]: string;
|
|
11
|
-
};
|
|
9
|
+
path: InferBucketPathObject<TBucket>;
|
|
12
10
|
};
|
|
13
11
|
type Filter<TBucket extends AnyBuilder> = {
|
|
14
12
|
AND?: Filter<TBucket>[];
|
|
@@ -35,17 +33,13 @@ export type ListFilesResponse<TBucket extends AnyBuilder> = {
|
|
|
35
33
|
size: number;
|
|
36
34
|
uploadedAt: Date;
|
|
37
35
|
metadata: InferMetadataObject<TBucket>;
|
|
38
|
-
path:
|
|
39
|
-
[TKey in InferBucketPathKeys<TBucket>]: string;
|
|
40
|
-
};
|
|
36
|
+
path: InferBucketPathObject<TBucket>;
|
|
41
37
|
}[] : {
|
|
42
38
|
url: string;
|
|
43
39
|
size: number;
|
|
44
40
|
uploadedAt: Date;
|
|
45
41
|
metadata: InferMetadataObject<TBucket>;
|
|
46
|
-
path:
|
|
47
|
-
[TKey in InferBucketPathKeys<TBucket>]: string;
|
|
48
|
-
};
|
|
42
|
+
path: InferBucketPathObject<TBucket>;
|
|
49
43
|
}[];
|
|
50
44
|
pagination: {
|
|
51
45
|
currentPage: number;
|
|
@@ -79,6 +73,14 @@ export declare function initEdgeStoreClient<TRouter extends AnyRouter>(config: {
|
|
|
79
73
|
router: TRouter;
|
|
80
74
|
accessKey?: string;
|
|
81
75
|
secretKey?: string;
|
|
76
|
+
/**
|
|
77
|
+
* The base URL of your application.
|
|
78
|
+
*
|
|
79
|
+
* This is only needed for getting protected files on a development environment.
|
|
80
|
+
*
|
|
81
|
+
* @example http://localhost:3000/api/edgestore
|
|
82
|
+
*/
|
|
83
|
+
baseUrl?: string;
|
|
82
84
|
}): EdgeStoreClient<TRouter>;
|
|
83
85
|
export type InferClientResponse<TRouter extends AnyRouter> = {
|
|
84
86
|
[TBucketName in keyof TRouter['buckets']]: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,UAAU,IAAI;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/client/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EdgeStoreRouter } from './internals/bucketBuilder';
|
|
2
2
|
export * from './client';
|
|
3
3
|
export * from './sdk';
|
|
4
|
-
export type { InferBucketPathKeys, InferMetadataObject, } from './internals/bucketBuilder';
|
|
4
|
+
export type { InferBucketPathKeys, InferBucketPathObject, InferMetadataObject, } from './internals/bucketBuilder';
|
|
5
5
|
export type AnyRouter = EdgeStoreRouter<any>;
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,YAAY,EACV,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -20,7 +20,7 @@ function initEdgeStoreClient(config) {
|
|
|
20
20
|
async getFile (params) {
|
|
21
21
|
const res = await sdk.getFile(params);
|
|
22
22
|
return {
|
|
23
|
-
url: res.url,
|
|
23
|
+
url: getUrl(res.url, config.baseUrl),
|
|
24
24
|
size: res.size,
|
|
25
25
|
uploadedAt: new Date(res.uploadedAt),
|
|
26
26
|
metadata: res.metadata,
|
|
@@ -72,7 +72,7 @@ function initEdgeStoreClient(config) {
|
|
|
72
72
|
});
|
|
73
73
|
const files = res.data.map((file)=>{
|
|
74
74
|
return {
|
|
75
|
-
url: file.url,
|
|
75
|
+
url: getUrl(file.url, config.baseUrl),
|
|
76
76
|
thumbnailUrl: file.thumbnailUrl,
|
|
77
77
|
size: file.size,
|
|
78
78
|
uploadedAt: new Date(file.uploadedAt),
|
|
@@ -90,6 +90,24 @@ function initEdgeStoreClient(config) {
|
|
|
90
90
|
}
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Protected files need third-party cookies to work.
|
|
95
|
+
* Since third party cookies doesn't work on localhost,
|
|
96
|
+
* we need to proxy the file through the server.
|
|
97
|
+
*/ function getUrl(url, baseUrl) {
|
|
98
|
+
if (process.env.NODE_ENV === 'development' && !url.includes('/_public/')) {
|
|
99
|
+
if (!baseUrl) {
|
|
100
|
+
throw new Error('Missing baseUrl. You need to pass the baseUrl to `initEdgeStoreClient` to get protected files in development.');
|
|
101
|
+
}
|
|
102
|
+
const proxyUrl = new URL(baseUrl);
|
|
103
|
+
proxyUrl.pathname = `${proxyUrl.pathname}/proxy-file`;
|
|
104
|
+
proxyUrl.search = new URLSearchParams({
|
|
105
|
+
url
|
|
106
|
+
}).toString();
|
|
107
|
+
return proxyUrl.toString();
|
|
108
|
+
}
|
|
109
|
+
return url;
|
|
110
|
+
}
|
|
93
111
|
|
|
94
112
|
exports.edgeStoreRawSdk = index.edgeStoreRawSdk;
|
|
95
113
|
exports.initEdgeStoreSdk = index.initEdgeStoreSdk;
|
package/dist/core/index.mjs
CHANGED
|
@@ -17,7 +17,7 @@ function initEdgeStoreClient(config) {
|
|
|
17
17
|
async getFile (params) {
|
|
18
18
|
const res = await sdk.getFile(params);
|
|
19
19
|
return {
|
|
20
|
-
url: res.url,
|
|
20
|
+
url: getUrl(res.url, config.baseUrl),
|
|
21
21
|
size: res.size,
|
|
22
22
|
uploadedAt: new Date(res.uploadedAt),
|
|
23
23
|
metadata: res.metadata,
|
|
@@ -69,7 +69,7 @@ function initEdgeStoreClient(config) {
|
|
|
69
69
|
});
|
|
70
70
|
const files = res.data.map((file)=>{
|
|
71
71
|
return {
|
|
72
|
-
url: file.url,
|
|
72
|
+
url: getUrl(file.url, config.baseUrl),
|
|
73
73
|
thumbnailUrl: file.thumbnailUrl,
|
|
74
74
|
size: file.size,
|
|
75
75
|
uploadedAt: new Date(file.uploadedAt),
|
|
@@ -87,5 +87,23 @@ function initEdgeStoreClient(config) {
|
|
|
87
87
|
}
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Protected files need third-party cookies to work.
|
|
92
|
+
* Since third party cookies doesn't work on localhost,
|
|
93
|
+
* we need to proxy the file through the server.
|
|
94
|
+
*/ function getUrl(url, baseUrl) {
|
|
95
|
+
if (process.env.NODE_ENV === 'development' && !url.includes('/_public/')) {
|
|
96
|
+
if (!baseUrl) {
|
|
97
|
+
throw new Error('Missing baseUrl. You need to pass the baseUrl to `initEdgeStoreClient` to get protected files in development.');
|
|
98
|
+
}
|
|
99
|
+
const proxyUrl = new URL(baseUrl);
|
|
100
|
+
proxyUrl.pathname = `${proxyUrl.pathname}/proxy-file`;
|
|
101
|
+
proxyUrl.search = new URLSearchParams({
|
|
102
|
+
url
|
|
103
|
+
}).toString();
|
|
104
|
+
return proxyUrl.toString();
|
|
105
|
+
}
|
|
106
|
+
return url;
|
|
107
|
+
}
|
|
90
108
|
|
|
91
109
|
export { initEdgeStoreClient };
|
|
@@ -9,6 +9,12 @@ type ConvertStringToFunction<TType> = {
|
|
|
9
9
|
type UnionToIntersection<TType> = (TType extends any ? (k: TType) => void : never) extends (k: infer I) => void ? I : never;
|
|
10
10
|
export type InferBucketPathKeys<TBucket extends Builder<any, AnyDef>> = KeysOfUnion<TBucket['_def']['path'][number]>;
|
|
11
11
|
type InferBucketPathKeysFromDef<TDef extends AnyDef> = KeysOfUnion<TDef['path'][number]>;
|
|
12
|
+
export type InferBucketPathObject<TBucket extends Builder<any, AnyDef>> = InferBucketPathKeys<TBucket> extends never ? Record<string, never> : {
|
|
13
|
+
[TKey in InferBucketPathKeys<TBucket>]: string;
|
|
14
|
+
};
|
|
15
|
+
export type InferBucketPathObjectFromDef<TDef extends AnyDef> = InferBucketPathKeysFromDef<TDef> extends never ? Record<string, never> : {
|
|
16
|
+
[TKey in InferBucketPathKeysFromDef<TDef>]: string;
|
|
17
|
+
};
|
|
12
18
|
export type InferMetadataObject<TBucket extends Builder<any, AnyDef>> = TBucket['_def']['metadata'] extends (...args: any) => any ? Awaited<ReturnType<TBucket['_def']['metadata']>> : Record<string, never>;
|
|
13
19
|
type InferMetadataObjectFromDef<TDef extends AnyDef> = TDef['metadata'] extends (...args: any) => any ? Awaited<ReturnType<TDef['metadata']>> : Record<string, never>;
|
|
14
20
|
export type AnyContext = Record<string, string | undefined | null>;
|
|
@@ -66,13 +72,11 @@ type BeforeUploadFn<TCtx, TDef extends AnyDef> = (params: {
|
|
|
66
72
|
}) => MaybePromise<boolean>;
|
|
67
73
|
type BeforeDeleteFn<TCtx, TDef extends AnyDef> = (params: {
|
|
68
74
|
ctx: TCtx;
|
|
69
|
-
|
|
75
|
+
fileInfo: {
|
|
70
76
|
url: string;
|
|
71
77
|
size: number;
|
|
72
78
|
uploadedAt: Date;
|
|
73
|
-
path:
|
|
74
|
-
[TKey in InferBucketPathKeysFromDef<TDef>]: string;
|
|
75
|
-
};
|
|
79
|
+
path: InferBucketPathObjectFromDef<TDef>;
|
|
76
80
|
metadata: InferMetadataObjectFromDef<TDef>;
|
|
77
81
|
};
|
|
78
82
|
}) => MaybePromise<boolean>;
|
|
@@ -103,6 +107,11 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
103
107
|
* @internal
|
|
104
108
|
*/
|
|
105
109
|
_def: TDef;
|
|
110
|
+
/**
|
|
111
|
+
* You can set an input that will be required in every upload from the client.
|
|
112
|
+
*
|
|
113
|
+
* This can be used to add additional information to the file, like choose the file path or add metadata.
|
|
114
|
+
*/
|
|
106
115
|
input<TInput extends AnyInput>(input: TInput): Builder<TCtx, {
|
|
107
116
|
type: TDef['type'];
|
|
108
117
|
input: TInput;
|
|
@@ -113,6 +122,18 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
113
122
|
beforeUpload: TDef['beforeUpload'];
|
|
114
123
|
beforeDelete: TDef['beforeDelete'];
|
|
115
124
|
}>;
|
|
125
|
+
/**
|
|
126
|
+
* The `path` is similar to folders in a file system.
|
|
127
|
+
* But in this case, every segment of the path must have a meaning.
|
|
128
|
+
*
|
|
129
|
+
* ```
|
|
130
|
+
* // e.g. 123/profile/file.jpg
|
|
131
|
+
* {
|
|
132
|
+
* author: '123',
|
|
133
|
+
* type: 'profile',
|
|
134
|
+
* }
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
116
137
|
path<TParams extends AnyPath>(pathResolver: (params: {
|
|
117
138
|
ctx: Simplify<ConvertStringToFunction<TCtx>>;
|
|
118
139
|
input: Simplify<ConvertStringToFunction<z.infer<TDef['input']>>>;
|
|
@@ -126,6 +147,11 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
126
147
|
beforeUpload: TDef['beforeUpload'];
|
|
127
148
|
beforeDelete: TDef['beforeDelete'];
|
|
128
149
|
}>;
|
|
150
|
+
/**
|
|
151
|
+
* This metadata will be added to every file uploaded to this bucket.
|
|
152
|
+
*
|
|
153
|
+
* This can be used, for example, to filter files.
|
|
154
|
+
*/
|
|
129
155
|
metadata<TMetadata extends AnyMetadata>(metadata: MetadataFn<TCtx, TDef['input'], TMetadata>): Builder<TCtx, {
|
|
130
156
|
type: TDef['type'];
|
|
131
157
|
input: TDef['input'];
|
|
@@ -136,6 +162,12 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
136
162
|
beforeUpload: TDef['beforeUpload'];
|
|
137
163
|
beforeDelete: TDef['beforeDelete'];
|
|
138
164
|
}>;
|
|
165
|
+
/**
|
|
166
|
+
* If you set this, your bucket will automatically be configured as a protected bucket.
|
|
167
|
+
*
|
|
168
|
+
* This means that images will only be accessible from within your app.
|
|
169
|
+
* And only if it passes the check set in this function.
|
|
170
|
+
*/
|
|
139
171
|
accessControl(accessControl: AccessControlSchema<TCtx, TDef>): Builder<TCtx, {
|
|
140
172
|
type: TDef['type'];
|
|
141
173
|
input: TDef['input'];
|
|
@@ -146,6 +178,11 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
146
178
|
beforeUpload: TDef['beforeUpload'];
|
|
147
179
|
beforeDelete: TDef['beforeDelete'];
|
|
148
180
|
}>;
|
|
181
|
+
/**
|
|
182
|
+
* return `true` to allow upload
|
|
183
|
+
*
|
|
184
|
+
* By default every upload from your app is allowed.
|
|
185
|
+
*/
|
|
149
186
|
beforeUpload(beforeUpload: BeforeUploadFn<TCtx, TDef>): Builder<TCtx, {
|
|
150
187
|
type: TDef['type'];
|
|
151
188
|
input: TDef['input'];
|
|
@@ -156,6 +193,11 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
156
193
|
beforeUpload: BeforeUploadFn<any, any>;
|
|
157
194
|
beforeDelete: TDef['beforeDelete'];
|
|
158
195
|
}>;
|
|
196
|
+
/**
|
|
197
|
+
* return `true` to allow delete
|
|
198
|
+
*
|
|
199
|
+
* This function must be defined if you want to delete files directly from the client.
|
|
200
|
+
*/
|
|
159
201
|
beforeDelete(beforeDelete: BeforeDeleteFn<TCtx, TDef>): Builder<TCtx, {
|
|
160
202
|
type: TDef['type'];
|
|
161
203
|
input: TDef['input'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bucketBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/internals/bucketBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGlE,KAAK,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI;KACxB,IAAI,IAAI,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,KAAK,GAC1D,IAAI,SAAS,MAAM,KAAK,GACtB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GACzB,KAAK,CAAC,IAAI,CAAC,GACb,KAAK,CAAC,IAAI,GAAG,MAAM,KAAK,CAAC;CAC9B,CAAC;AAEF,KAAK,uBAAuB,CAAC,KAAK,IAAI;KACnC,CAAC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,GACvC,QAAQ,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3C,MAAM,MAAM;CACjB,CAAC;AAEF,KAAK,mBAAmB,CAAC,KAAK,IAAI,CAChC,KAAK,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,KAAK,CAC/C,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAC1B,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAClE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/C,KAAK,0BAA0B,CAAC,IAAI,SAAS,MAAM,IAAI,WAAW,CAChE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAClE,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GACrD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE5B,KAAK,0BAA0B,CAAC,IAAI,SAAS,MAAM,IACjD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAC1C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAEnE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC,EAAE,CAAC;AAErD,KAAK,SAAS,CAAC,KAAK,SAAS,OAAO,IAAI;IACtC,IAAI,EAAE,MAAM,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,KAAK,UAAU,CAAC,KAAK,SAAS,OAAO,IAAI;IACvC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACrC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IAC/D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,IAAI,EAAE,IAAI,SAAS,MAAM,IAAI,KAAK,CAChE;KACG,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC,EACjB,MAAM,GACN,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GACvB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;CAC7B,EACD;IACE,EAAE,CAAC,EAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACvC,GAAG,CAAC,EAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACxC,GAAG,CAAC,EAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;CACzC,CACF,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,cAAc,CAAC,IAAI,EAAE,IAAI,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE;IACxD,GAAG,EAAE,IAAI,CAAC;IACV,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;CACpB,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;AAE5B,KAAK,cAAc,CAAC,IAAI,EAAE,IAAI,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE;IACxD,GAAG,EAAE,IAAI,CAAC;IACV,
|
|
1
|
+
{"version":3,"file":"bucketBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/internals/bucketBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { Provider } from '../types';
|
|
|
2
2
|
export type EdgeStoreProviderOptions = {
|
|
3
3
|
accessKey?: string;
|
|
4
4
|
secretKey?: string;
|
|
5
|
-
baseUrl?: string;
|
|
6
5
|
};
|
|
7
6
|
export declare function EdgeStoreProvider(options?: EdgeStoreProviderOptions): Provider;
|
|
8
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/edgestore/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAoB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/edgestore/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAoB,MAAM,UAAU,CAAC;AAItD,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,wBAAwB,GACjC,QAAQ,CA6HV"}
|
|
@@ -4,9 +4,10 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var index = require('../../index-62d969e5.js');
|
|
6
6
|
|
|
7
|
-
const DEFAULT_BASE_URL =
|
|
7
|
+
const DEFAULT_BASE_URL = 'https://files.edgestore.dev';
|
|
8
8
|
function EdgeStoreProvider(options) {
|
|
9
|
-
const { accessKey = process.env.EDGE_STORE_ACCESS_KEY, secretKey = process.env.EDGE_STORE_SECRET_KEY
|
|
9
|
+
const { accessKey = process.env.EDGE_STORE_ACCESS_KEY, secretKey = process.env.EDGE_STORE_SECRET_KEY } = options ?? {};
|
|
10
|
+
const baseUrl = process.env.EDGE_STORE_BASE_URL ?? DEFAULT_BASE_URL;
|
|
10
11
|
if (!accessKey || !secretKey) {
|
|
11
12
|
throw new index.EdgeStoreCredentialsError();
|
|
12
13
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { E as EdgeStoreCredentialsError, i as initEdgeStoreSdk } from '../../index-579b8015.mjs';
|
|
2
2
|
|
|
3
|
-
const DEFAULT_BASE_URL =
|
|
3
|
+
const DEFAULT_BASE_URL = 'https://files.edgestore.dev';
|
|
4
4
|
function EdgeStoreProvider(options) {
|
|
5
|
-
const { accessKey = process.env.EDGE_STORE_ACCESS_KEY, secretKey = process.env.EDGE_STORE_SECRET_KEY
|
|
5
|
+
const { accessKey = process.env.EDGE_STORE_ACCESS_KEY, secretKey = process.env.EDGE_STORE_SECRET_KEY } = options ?? {};
|
|
6
|
+
const baseUrl = process.env.EDGE_STORE_BASE_URL ?? DEFAULT_BASE_URL;
|
|
6
7
|
if (!accessKey || !secretKey) {
|
|
7
8
|
throw new EdgeStoreCredentialsError();
|
|
8
9
|
}
|
|
@@ -190,12 +190,12 @@ async function deleteFile(params) {
|
|
|
190
190
|
if (!bucket._def.beforeDelete) {
|
|
191
191
|
throw new Error('You need to define beforeDelete if you want to delete files directly from the frontend.');
|
|
192
192
|
}
|
|
193
|
-
const
|
|
193
|
+
const fileInfo = await provider.getFile({
|
|
194
194
|
url
|
|
195
195
|
});
|
|
196
196
|
const canDelete = await bucket._def.beforeDelete({
|
|
197
197
|
ctx,
|
|
198
|
-
|
|
198
|
+
fileInfo
|
|
199
199
|
});
|
|
200
200
|
if (!canDelete) {
|
|
201
201
|
throw new Error('Delete not allowed');
|
|
@@ -192,12 +192,12 @@ async function deleteFile(params) {
|
|
|
192
192
|
if (!bucket._def.beforeDelete) {
|
|
193
193
|
throw new Error('You need to define beforeDelete if you want to delete files directly from the frontend.');
|
|
194
194
|
}
|
|
195
|
-
const
|
|
195
|
+
const fileInfo = await provider.getFile({
|
|
196
196
|
url
|
|
197
197
|
});
|
|
198
198
|
const canDelete = await bucket._def.beforeDelete({
|
|
199
199
|
ctx,
|
|
200
|
-
|
|
200
|
+
fileInfo
|
|
201
201
|
});
|
|
202
202
|
if (!canDelete) {
|
|
203
203
|
throw new Error('Delete not allowed');
|
|
@@ -182,12 +182,12 @@ async function deleteFile(params) {
|
|
|
182
182
|
if (!bucket._def.beforeDelete) {
|
|
183
183
|
throw new Error('You need to define beforeDelete if you want to delete files directly from the frontend.');
|
|
184
184
|
}
|
|
185
|
-
const
|
|
185
|
+
const fileInfo = await provider.getFile({
|
|
186
186
|
url,
|
|
187
187
|
});
|
|
188
188
|
const canDelete = await bucket._def.beforeDelete({
|
|
189
189
|
ctx,
|
|
190
|
-
|
|
190
|
+
fileInfo,
|
|
191
191
|
});
|
|
192
192
|
if (!canDelete) {
|
|
193
193
|
throw new Error('Delete not allowed');
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edgestore/server",
|
|
3
|
-
"version": "0.0.0-alpha.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.0.0-alpha.14",
|
|
4
|
+
"description": "The best DX for uploading files from your Next.js app",
|
|
5
5
|
"homepage": "https://edgestore.dev",
|
|
6
|
-
"repository": "https://github.com/edgestorejs/
|
|
6
|
+
"repository": "https://github.com/edgestorejs/edgestore.git",
|
|
7
7
|
"author": "Ravi <me@ravi.com>",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"module": "dist/index.mjs",
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"react",
|
|
13
13
|
"nodejs",
|
|
14
14
|
"nextjs",
|
|
15
|
+
"upload",
|
|
16
|
+
"file",
|
|
15
17
|
"image",
|
|
16
18
|
"cdn",
|
|
17
19
|
"edgestore",
|
|
@@ -92,5 +94,5 @@
|
|
|
92
94
|
"typescript": "^5.1.6",
|
|
93
95
|
"zod": "^3.21.4"
|
|
94
96
|
},
|
|
95
|
-
"gitHead": "
|
|
97
|
+
"gitHead": "6e0044e7fcb252014e5a4fc9257d54e897f42b84"
|
|
96
98
|
}
|
|
@@ -96,6 +96,29 @@ export function createEdgeStoreNextHandler<TCtx>(config: Config<TCtx>) {
|
|
|
96
96
|
return new Response(null, {
|
|
97
97
|
status: 200,
|
|
98
98
|
});
|
|
99
|
+
} else if (req.nextUrl.pathname === '/api/edgestore/proxy-file') {
|
|
100
|
+
const url = req.nextUrl.searchParams.get('url');
|
|
101
|
+
if (typeof url === 'string') {
|
|
102
|
+
const proxyRes = await fetch(url, {
|
|
103
|
+
headers: {
|
|
104
|
+
cookie: req.cookies.toString() ?? '',
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
const data = await proxyRes.arrayBuffer();
|
|
109
|
+
return new Response(data, {
|
|
110
|
+
status: proxyRes.status,
|
|
111
|
+
headers: {
|
|
112
|
+
'Content-Type':
|
|
113
|
+
proxyRes.headers.get('Content-Type') ??
|
|
114
|
+
'application/octet-stream',
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
} else {
|
|
118
|
+
return new Response(null, {
|
|
119
|
+
status: 400,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
99
122
|
} else {
|
|
100
123
|
return new Response(null, {
|
|
101
124
|
status: 404,
|
|
@@ -77,6 +77,25 @@ export function createEdgeStoreNextHandler<TCtx>(config: Config<TCtx>) {
|
|
|
77
77
|
ctxToken: req.cookies['edgestore-ctx'],
|
|
78
78
|
});
|
|
79
79
|
res.status(200).end();
|
|
80
|
+
} else if (req.url?.startsWith('/api/edgestore/proxy-file')) {
|
|
81
|
+
const { url } = req.query;
|
|
82
|
+
if (typeof url === 'string') {
|
|
83
|
+
const proxyRes = await fetch(url, {
|
|
84
|
+
headers: {
|
|
85
|
+
cookie: req.headers.cookie ?? '',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
const data = await proxyRes.arrayBuffer();
|
|
90
|
+
res.setHeader(
|
|
91
|
+
'Content-Type',
|
|
92
|
+
proxyRes.headers.get('Content-Type') ?? 'application/octet-stream',
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
res.end(Buffer.from(data));
|
|
96
|
+
} else {
|
|
97
|
+
res.status(400).end();
|
|
98
|
+
}
|
|
80
99
|
} else {
|
|
81
100
|
res.status(404).end();
|
|
82
101
|
}
|
package/src/adapters/shared.ts
CHANGED
|
@@ -239,12 +239,12 @@ export async function deleteFile<TCtx>(params: {
|
|
|
239
239
|
);
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
const
|
|
242
|
+
const fileInfo = await provider.getFile({
|
|
243
243
|
url,
|
|
244
244
|
});
|
|
245
245
|
const canDelete = await bucket._def.beforeDelete({
|
|
246
246
|
ctx,
|
|
247
|
-
|
|
247
|
+
fileInfo,
|
|
248
248
|
});
|
|
249
249
|
if (!canDelete) {
|
|
250
250
|
throw new Error('Delete not allowed');
|
package/src/core/client/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Simplify } from '../../types';
|
|
|
3
3
|
import {
|
|
4
4
|
AnyBuilder,
|
|
5
5
|
InferBucketPathKeys,
|
|
6
|
+
InferBucketPathObject,
|
|
6
7
|
InferMetadataObject,
|
|
7
8
|
} from '../internals/bucketBuilder';
|
|
8
9
|
import { initEdgeStoreSdk } from '../sdk';
|
|
@@ -12,9 +13,7 @@ export type GetFileRes<TBucket extends AnyBuilder> = {
|
|
|
12
13
|
size: number;
|
|
13
14
|
uploadedAt: Date;
|
|
14
15
|
metadata: InferMetadataObject<TBucket>;
|
|
15
|
-
path:
|
|
16
|
-
[TKey in InferBucketPathKeys<TBucket>]: string;
|
|
17
|
-
};
|
|
16
|
+
path: InferBucketPathObject<TBucket>;
|
|
18
17
|
};
|
|
19
18
|
|
|
20
19
|
type Filter<TBucket extends AnyBuilder> = {
|
|
@@ -45,18 +44,14 @@ export type ListFilesResponse<TBucket extends AnyBuilder> = {
|
|
|
45
44
|
size: number;
|
|
46
45
|
uploadedAt: Date;
|
|
47
46
|
metadata: InferMetadataObject<TBucket>;
|
|
48
|
-
path:
|
|
49
|
-
[TKey in InferBucketPathKeys<TBucket>]: string;
|
|
50
|
-
};
|
|
47
|
+
path: InferBucketPathObject<TBucket>;
|
|
51
48
|
}[]
|
|
52
49
|
: {
|
|
53
50
|
url: string;
|
|
54
51
|
size: number;
|
|
55
52
|
uploadedAt: Date;
|
|
56
53
|
metadata: InferMetadataObject<TBucket>;
|
|
57
|
-
path:
|
|
58
|
-
[TKey in InferBucketPathKeys<TBucket>]: string;
|
|
59
|
-
};
|
|
54
|
+
path: InferBucketPathObject<TBucket>;
|
|
60
55
|
}[];
|
|
61
56
|
pagination: {
|
|
62
57
|
currentPage: number;
|
|
@@ -104,6 +99,14 @@ export function initEdgeStoreClient<TRouter extends AnyRouter>(config: {
|
|
|
104
99
|
router: TRouter;
|
|
105
100
|
accessKey?: string;
|
|
106
101
|
secretKey?: string;
|
|
102
|
+
/**
|
|
103
|
+
* The base URL of your application.
|
|
104
|
+
*
|
|
105
|
+
* This is only needed for getting protected files on a development environment.
|
|
106
|
+
*
|
|
107
|
+
* @example http://localhost:3000/api/edgestore
|
|
108
|
+
*/
|
|
109
|
+
baseUrl?: string;
|
|
107
110
|
}) {
|
|
108
111
|
const sdk = initEdgeStoreSdk({
|
|
109
112
|
accessKey: config.accessKey,
|
|
@@ -120,7 +123,7 @@ export function initEdgeStoreClient<TRouter extends AnyRouter>(config: {
|
|
|
120
123
|
async getFile(params) {
|
|
121
124
|
const res = await sdk.getFile(params);
|
|
122
125
|
return {
|
|
123
|
-
url: res.url,
|
|
126
|
+
url: getUrl(res.url, config.baseUrl),
|
|
124
127
|
size: res.size,
|
|
125
128
|
uploadedAt: new Date(res.uploadedAt),
|
|
126
129
|
metadata: res.metadata,
|
|
@@ -179,7 +182,7 @@ export function initEdgeStoreClient<TRouter extends AnyRouter>(config: {
|
|
|
179
182
|
|
|
180
183
|
const files = res.data.map((file) => {
|
|
181
184
|
return {
|
|
182
|
-
url: file.url,
|
|
185
|
+
url: getUrl(file.url, config.baseUrl),
|
|
183
186
|
thumbnailUrl: file.thumbnailUrl,
|
|
184
187
|
size: file.size,
|
|
185
188
|
uploadedAt: new Date(file.uploadedAt),
|
|
@@ -201,6 +204,28 @@ export function initEdgeStoreClient<TRouter extends AnyRouter>(config: {
|
|
|
201
204
|
});
|
|
202
205
|
}
|
|
203
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Protected files need third-party cookies to work.
|
|
209
|
+
* Since third party cookies doesn't work on localhost,
|
|
210
|
+
* we need to proxy the file through the server.
|
|
211
|
+
*/
|
|
212
|
+
function getUrl(url: string, baseUrl?: string) {
|
|
213
|
+
if (process.env.NODE_ENV === 'development' && !url.includes('/_public/')) {
|
|
214
|
+
if (!baseUrl) {
|
|
215
|
+
throw new Error(
|
|
216
|
+
'Missing baseUrl. You need to pass the baseUrl to `initEdgeStoreClient` to get protected files in development.',
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
const proxyUrl = new URL(baseUrl);
|
|
220
|
+
proxyUrl.pathname = `${proxyUrl.pathname}/proxy-file`;
|
|
221
|
+
proxyUrl.search = new URLSearchParams({
|
|
222
|
+
url,
|
|
223
|
+
}).toString();
|
|
224
|
+
return proxyUrl.toString();
|
|
225
|
+
}
|
|
226
|
+
return url;
|
|
227
|
+
}
|
|
228
|
+
|
|
204
229
|
export type InferClientResponse<TRouter extends AnyRouter> = {
|
|
205
230
|
[TBucketName in keyof TRouter['buckets']]: {
|
|
206
231
|
[TClienFn in keyof EdgeStoreClient<TRouter>[TBucketName]]: Simplify<
|
package/src/core/index.ts
CHANGED
|
@@ -29,6 +29,20 @@ type InferBucketPathKeysFromDef<TDef extends AnyDef> = KeysOfUnion<
|
|
|
29
29
|
TDef['path'][number]
|
|
30
30
|
>;
|
|
31
31
|
|
|
32
|
+
export type InferBucketPathObject<TBucket extends Builder<any, AnyDef>> =
|
|
33
|
+
InferBucketPathKeys<TBucket> extends never
|
|
34
|
+
? Record<string, never>
|
|
35
|
+
: {
|
|
36
|
+
[TKey in InferBucketPathKeys<TBucket>]: string;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type InferBucketPathObjectFromDef<TDef extends AnyDef> =
|
|
40
|
+
InferBucketPathKeysFromDef<TDef> extends never
|
|
41
|
+
? Record<string, never>
|
|
42
|
+
: {
|
|
43
|
+
[TKey in InferBucketPathKeysFromDef<TDef>]: string;
|
|
44
|
+
};
|
|
45
|
+
|
|
32
46
|
export type InferMetadataObject<TBucket extends Builder<any, AnyDef>> =
|
|
33
47
|
TBucket['_def']['metadata'] extends (...args: any) => any
|
|
34
48
|
? Awaited<ReturnType<TBucket['_def']['metadata']>>
|
|
@@ -109,13 +123,11 @@ type BeforeUploadFn<TCtx, TDef extends AnyDef> = (params: {
|
|
|
109
123
|
|
|
110
124
|
type BeforeDeleteFn<TCtx, TDef extends AnyDef> = (params: {
|
|
111
125
|
ctx: TCtx;
|
|
112
|
-
|
|
126
|
+
fileInfo: {
|
|
113
127
|
url: string;
|
|
114
128
|
size: number;
|
|
115
129
|
uploadedAt: Date;
|
|
116
|
-
path:
|
|
117
|
-
[TKey in InferBucketPathKeysFromDef<TDef>]: string;
|
|
118
|
-
};
|
|
130
|
+
path: InferBucketPathObjectFromDef<TDef>;
|
|
119
131
|
metadata: InferMetadataObjectFromDef<TDef>;
|
|
120
132
|
};
|
|
121
133
|
}) => MaybePromise<boolean>;
|
|
@@ -158,6 +170,11 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
158
170
|
* @internal
|
|
159
171
|
*/
|
|
160
172
|
_def: TDef;
|
|
173
|
+
/**
|
|
174
|
+
* You can set an input that will be required in every upload from the client.
|
|
175
|
+
*
|
|
176
|
+
* This can be used to add additional information to the file, like choose the file path or add metadata.
|
|
177
|
+
*/
|
|
161
178
|
input<TInput extends AnyInput>(
|
|
162
179
|
input: TInput,
|
|
163
180
|
): Builder<
|
|
@@ -173,6 +190,18 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
173
190
|
beforeDelete: TDef['beforeDelete'];
|
|
174
191
|
}
|
|
175
192
|
>;
|
|
193
|
+
/**
|
|
194
|
+
* The `path` is similar to folders in a file system.
|
|
195
|
+
* But in this case, every segment of the path must have a meaning.
|
|
196
|
+
*
|
|
197
|
+
* ```
|
|
198
|
+
* // e.g. 123/profile/file.jpg
|
|
199
|
+
* {
|
|
200
|
+
* author: '123',
|
|
201
|
+
* type: 'profile',
|
|
202
|
+
* }
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
176
205
|
path<TParams extends AnyPath>(
|
|
177
206
|
pathResolver: (params: {
|
|
178
207
|
ctx: Simplify<ConvertStringToFunction<TCtx>>;
|
|
@@ -191,6 +220,11 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
191
220
|
beforeDelete: TDef['beforeDelete'];
|
|
192
221
|
}
|
|
193
222
|
>;
|
|
223
|
+
/**
|
|
224
|
+
* This metadata will be added to every file uploaded to this bucket.
|
|
225
|
+
*
|
|
226
|
+
* This can be used, for example, to filter files.
|
|
227
|
+
*/
|
|
194
228
|
metadata<TMetadata extends AnyMetadata>(
|
|
195
229
|
metadata: MetadataFn<TCtx, TDef['input'], TMetadata>,
|
|
196
230
|
): Builder<
|
|
@@ -206,6 +240,12 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
206
240
|
beforeDelete: TDef['beforeDelete'];
|
|
207
241
|
}
|
|
208
242
|
>;
|
|
243
|
+
/**
|
|
244
|
+
* If you set this, your bucket will automatically be configured as a protected bucket.
|
|
245
|
+
*
|
|
246
|
+
* This means that images will only be accessible from within your app.
|
|
247
|
+
* And only if it passes the check set in this function.
|
|
248
|
+
*/
|
|
209
249
|
accessControl(accessControl: AccessControlSchema<TCtx, TDef>): Builder<
|
|
210
250
|
TCtx,
|
|
211
251
|
{
|
|
@@ -219,6 +259,11 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
219
259
|
beforeDelete: TDef['beforeDelete'];
|
|
220
260
|
}
|
|
221
261
|
>;
|
|
262
|
+
/**
|
|
263
|
+
* return `true` to allow upload
|
|
264
|
+
*
|
|
265
|
+
* By default every upload from your app is allowed.
|
|
266
|
+
*/
|
|
222
267
|
beforeUpload(beforeUpload: BeforeUploadFn<TCtx, TDef>): Builder<
|
|
223
268
|
TCtx,
|
|
224
269
|
{
|
|
@@ -232,6 +277,11 @@ type Builder<TCtx, TDef extends AnyDef> = {
|
|
|
232
277
|
beforeDelete: TDef['beforeDelete'];
|
|
233
278
|
}
|
|
234
279
|
>;
|
|
280
|
+
/**
|
|
281
|
+
* return `true` to allow delete
|
|
282
|
+
*
|
|
283
|
+
* This function must be defined if you want to delete files directly from the client.
|
|
284
|
+
*/
|
|
235
285
|
beforeDelete(beforeDelete: BeforeDeleteFn<TCtx, TDef>): Builder<
|
|
236
286
|
TCtx,
|
|
237
287
|
{
|
|
@@ -2,13 +2,11 @@ import { initEdgeStoreSdk } from '../../core/sdk';
|
|
|
2
2
|
import EdgeStoreCredentialsError from '../../libs/errors/EdgeStoreCredentialsError';
|
|
3
3
|
import { Provider, RequestUploadRes } from '../types';
|
|
4
4
|
|
|
5
|
-
const DEFAULT_BASE_URL =
|
|
6
|
-
process.env.EDGE_STORE_BASE_URL ?? 'https://files.edgestore.dev';
|
|
5
|
+
const DEFAULT_BASE_URL = 'https://files.edgestore.dev';
|
|
7
6
|
|
|
8
7
|
export type EdgeStoreProviderOptions = {
|
|
9
8
|
accessKey?: string;
|
|
10
9
|
secretKey?: string;
|
|
11
|
-
baseUrl?: string;
|
|
12
10
|
};
|
|
13
11
|
|
|
14
12
|
export function EdgeStoreProvider(
|
|
@@ -17,9 +15,10 @@ export function EdgeStoreProvider(
|
|
|
17
15
|
const {
|
|
18
16
|
accessKey = process.env.EDGE_STORE_ACCESS_KEY,
|
|
19
17
|
secretKey = process.env.EDGE_STORE_SECRET_KEY,
|
|
20
|
-
baseUrl = process.env.EDGE_STORE_BASE_URL ?? DEFAULT_BASE_URL,
|
|
21
18
|
} = options ?? {};
|
|
22
19
|
|
|
20
|
+
const baseUrl = process.env.EDGE_STORE_BASE_URL ?? DEFAULT_BASE_URL;
|
|
21
|
+
|
|
23
22
|
if (!accessKey || !secretKey) {
|
|
24
23
|
throw new EdgeStoreCredentialsError();
|
|
25
24
|
}
|