s3kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +398 -0
- package/dist/adapters/express.cjs +305 -0
- package/dist/adapters/express.cjs.map +1 -0
- package/dist/adapters/express.d.cts +10 -0
- package/dist/adapters/express.d.ts +10 -0
- package/dist/adapters/express.js +278 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/fetch.cjs +298 -0
- package/dist/adapters/fetch.cjs.map +1 -0
- package/dist/adapters/fetch.d.cts +9 -0
- package/dist/adapters/fetch.d.ts +9 -0
- package/dist/adapters/fetch.js +271 -0
- package/dist/adapters/fetch.js.map +1 -0
- package/dist/adapters/next.cjs +796 -0
- package/dist/adapters/next.cjs.map +1 -0
- package/dist/adapters/next.d.cts +28 -0
- package/dist/adapters/next.d.ts +28 -0
- package/dist/adapters/next.js +775 -0
- package/dist/adapters/next.js.map +1 -0
- package/dist/client/index.cjs +153 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +59 -0
- package/dist/client/index.d.ts +59 -0
- package/dist/client/index.js +126 -0
- package/dist/client/index.js.map +1 -0
- package/dist/core/index.cjs +452 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +11 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.js +430 -0
- package/dist/core/index.js.map +1 -0
- package/dist/http/index.cjs +270 -0
- package/dist/http/index.cjs.map +1 -0
- package/dist/http/index.d.cts +49 -0
- package/dist/http/index.d.ts +49 -0
- package/dist/http/index.js +243 -0
- package/dist/http/index.js.map +1 -0
- package/dist/index.cjs +808 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +784 -0
- package/dist/index.js.map +1 -0
- package/dist/manager-BbmXpgXN.d.ts +29 -0
- package/dist/manager-gIjo-t8h.d.cts +29 -0
- package/dist/react/index.cjs +4320 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.css +155 -0
- package/dist/react/index.css.map +1 -0
- package/dist/react/index.d.cts +79 -0
- package/dist/react/index.d.ts +79 -0
- package/dist/react/index.js +4315 -0
- package/dist/react/index.js.map +1 -0
- package/dist/types-g2IYvH3O.d.cts +123 -0
- package/dist/types-g2IYvH3O.d.ts +123 -0
- package/package.json +100 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
type S3FileManagerAction = 'list' | 'search' | 'folder.create' | 'folder.delete' | 'upload.prepare' | 'file.delete' | 'file.copy' | 'file.move' | 'folder.copy' | 'folder.move' | 'preview.get';
|
|
2
|
+
type S3Path = string;
|
|
3
|
+
interface S3FileManagerAuthContext {
|
|
4
|
+
userId?: string;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
interface S3FileManagerAuthorizeArgs {
|
|
8
|
+
action: S3FileManagerAction;
|
|
9
|
+
path?: S3Path;
|
|
10
|
+
fromPath?: S3Path;
|
|
11
|
+
toPath?: S3Path;
|
|
12
|
+
ctx: S3FileManagerAuthContext;
|
|
13
|
+
}
|
|
14
|
+
type S3FileManagerAuthorizeHook = (args: S3FileManagerAuthorizeArgs) => boolean | void | Promise<boolean | void>;
|
|
15
|
+
type S3FileManagerAllowActionHook = (args: S3FileManagerAuthorizeArgs) => boolean | Promise<boolean>;
|
|
16
|
+
type S3FileManagerAuthorizationMode = 'allow-by-default' | 'deny-by-default';
|
|
17
|
+
interface S3FolderEntry<FolderExtra = unknown> {
|
|
18
|
+
type: 'folder';
|
|
19
|
+
path: S3Path;
|
|
20
|
+
name: string;
|
|
21
|
+
extra?: FolderExtra;
|
|
22
|
+
}
|
|
23
|
+
interface S3FileEntry<FileExtra = unknown> {
|
|
24
|
+
type: 'file';
|
|
25
|
+
path: S3Path;
|
|
26
|
+
name: string;
|
|
27
|
+
size?: number;
|
|
28
|
+
lastModified?: string;
|
|
29
|
+
etag?: string;
|
|
30
|
+
contentType?: string;
|
|
31
|
+
extra?: FileExtra;
|
|
32
|
+
}
|
|
33
|
+
type S3Entry<FileExtra = unknown, FolderExtra = unknown> = S3FileEntry<FileExtra> | S3FolderEntry<FolderExtra>;
|
|
34
|
+
interface S3ListOptions {
|
|
35
|
+
path: S3Path;
|
|
36
|
+
cursor?: string;
|
|
37
|
+
limit?: number;
|
|
38
|
+
}
|
|
39
|
+
interface S3ListResult<FileExtra = unknown, FolderExtra = unknown> {
|
|
40
|
+
path: S3Path;
|
|
41
|
+
entries: Array<S3Entry<FileExtra, FolderExtra>>;
|
|
42
|
+
nextCursor?: string;
|
|
43
|
+
}
|
|
44
|
+
interface S3SearchOptions {
|
|
45
|
+
query: string;
|
|
46
|
+
path?: S3Path;
|
|
47
|
+
recursive?: boolean;
|
|
48
|
+
limit?: number;
|
|
49
|
+
cursor?: string;
|
|
50
|
+
}
|
|
51
|
+
interface S3SearchResult<FileExtra = unknown, FolderExtra = unknown> {
|
|
52
|
+
query: string;
|
|
53
|
+
entries: Array<S3Entry<FileExtra, FolderExtra>>;
|
|
54
|
+
nextCursor?: string;
|
|
55
|
+
}
|
|
56
|
+
interface S3CreateFolderOptions {
|
|
57
|
+
path: S3Path;
|
|
58
|
+
}
|
|
59
|
+
interface S3DeleteFolderOptions {
|
|
60
|
+
path: S3Path;
|
|
61
|
+
recursive?: boolean;
|
|
62
|
+
}
|
|
63
|
+
interface S3DeleteFilesOptions {
|
|
64
|
+
paths: S3Path[];
|
|
65
|
+
}
|
|
66
|
+
interface S3CopyOptions {
|
|
67
|
+
fromPath: S3Path;
|
|
68
|
+
toPath: S3Path;
|
|
69
|
+
}
|
|
70
|
+
interface S3MoveOptions {
|
|
71
|
+
fromPath: S3Path;
|
|
72
|
+
toPath: S3Path;
|
|
73
|
+
}
|
|
74
|
+
interface S3PrepareUploadItem {
|
|
75
|
+
path: S3Path;
|
|
76
|
+
contentType?: string;
|
|
77
|
+
cacheControl?: string;
|
|
78
|
+
contentDisposition?: string;
|
|
79
|
+
metadata?: Record<string, string>;
|
|
80
|
+
}
|
|
81
|
+
interface S3PreparedUpload {
|
|
82
|
+
path: S3Path;
|
|
83
|
+
url: string;
|
|
84
|
+
method: 'PUT';
|
|
85
|
+
headers: Record<string, string>;
|
|
86
|
+
}
|
|
87
|
+
interface S3PrepareUploadsOptions {
|
|
88
|
+
items: S3PrepareUploadItem[];
|
|
89
|
+
expiresInSeconds?: number;
|
|
90
|
+
}
|
|
91
|
+
interface S3GetPreviewUrlOptions {
|
|
92
|
+
path: S3Path;
|
|
93
|
+
expiresInSeconds?: number;
|
|
94
|
+
inline?: boolean;
|
|
95
|
+
}
|
|
96
|
+
interface S3GetPreviewUrlResult {
|
|
97
|
+
path: S3Path;
|
|
98
|
+
url: string;
|
|
99
|
+
expiresAt: string;
|
|
100
|
+
}
|
|
101
|
+
interface S3FileDecorationArgs {
|
|
102
|
+
path: S3Path;
|
|
103
|
+
key: string;
|
|
104
|
+
}
|
|
105
|
+
interface S3FolderDecorationArgs {
|
|
106
|
+
path: S3Path;
|
|
107
|
+
prefix: string;
|
|
108
|
+
}
|
|
109
|
+
interface S3FileManagerHooks<FileExtra = unknown, FolderExtra = unknown> {
|
|
110
|
+
authorize?: S3FileManagerAuthorizeHook;
|
|
111
|
+
allowAction?: S3FileManagerAllowActionHook;
|
|
112
|
+
decorateFile?: (file: S3FileEntry<FileExtra>, args: S3FileDecorationArgs) => void | Promise<void>;
|
|
113
|
+
decorateFolder?: (folder: S3FolderEntry<FolderExtra>, args: S3FolderDecorationArgs) => void | Promise<void>;
|
|
114
|
+
}
|
|
115
|
+
interface S3FileManagerOptions<FileExtra = unknown, FolderExtra = unknown> {
|
|
116
|
+
bucket: string;
|
|
117
|
+
rootPrefix?: string;
|
|
118
|
+
delimiter?: string;
|
|
119
|
+
authorizationMode?: S3FileManagerAuthorizationMode;
|
|
120
|
+
hooks?: S3FileManagerHooks<FileExtra, FolderExtra>;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export type { S3FileManagerOptions as A, S3FileManagerAction as S, S3Path as a, S3FileManagerAuthContext as b, S3FileManagerAuthorizeArgs as c, S3FileManagerAuthorizeHook as d, S3FileManagerAllowActionHook as e, S3FileManagerAuthorizationMode as f, S3FolderEntry as g, S3FileEntry as h, S3Entry as i, S3ListOptions as j, S3ListResult as k, S3SearchOptions as l, S3SearchResult as m, S3CreateFolderOptions as n, S3DeleteFolderOptions as o, S3DeleteFilesOptions as p, S3CopyOptions as q, S3MoveOptions as r, S3PrepareUploadItem as s, S3PreparedUpload as t, S3PrepareUploadsOptions as u, S3GetPreviewUrlOptions as v, S3GetPreviewUrlResult as w, S3FileDecorationArgs as x, S3FolderDecorationArgs as y, S3FileManagerHooks as z };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
type S3FileManagerAction = 'list' | 'search' | 'folder.create' | 'folder.delete' | 'upload.prepare' | 'file.delete' | 'file.copy' | 'file.move' | 'folder.copy' | 'folder.move' | 'preview.get';
|
|
2
|
+
type S3Path = string;
|
|
3
|
+
interface S3FileManagerAuthContext {
|
|
4
|
+
userId?: string;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
interface S3FileManagerAuthorizeArgs {
|
|
8
|
+
action: S3FileManagerAction;
|
|
9
|
+
path?: S3Path;
|
|
10
|
+
fromPath?: S3Path;
|
|
11
|
+
toPath?: S3Path;
|
|
12
|
+
ctx: S3FileManagerAuthContext;
|
|
13
|
+
}
|
|
14
|
+
type S3FileManagerAuthorizeHook = (args: S3FileManagerAuthorizeArgs) => boolean | void | Promise<boolean | void>;
|
|
15
|
+
type S3FileManagerAllowActionHook = (args: S3FileManagerAuthorizeArgs) => boolean | Promise<boolean>;
|
|
16
|
+
type S3FileManagerAuthorizationMode = 'allow-by-default' | 'deny-by-default';
|
|
17
|
+
interface S3FolderEntry<FolderExtra = unknown> {
|
|
18
|
+
type: 'folder';
|
|
19
|
+
path: S3Path;
|
|
20
|
+
name: string;
|
|
21
|
+
extra?: FolderExtra;
|
|
22
|
+
}
|
|
23
|
+
interface S3FileEntry<FileExtra = unknown> {
|
|
24
|
+
type: 'file';
|
|
25
|
+
path: S3Path;
|
|
26
|
+
name: string;
|
|
27
|
+
size?: number;
|
|
28
|
+
lastModified?: string;
|
|
29
|
+
etag?: string;
|
|
30
|
+
contentType?: string;
|
|
31
|
+
extra?: FileExtra;
|
|
32
|
+
}
|
|
33
|
+
type S3Entry<FileExtra = unknown, FolderExtra = unknown> = S3FileEntry<FileExtra> | S3FolderEntry<FolderExtra>;
|
|
34
|
+
interface S3ListOptions {
|
|
35
|
+
path: S3Path;
|
|
36
|
+
cursor?: string;
|
|
37
|
+
limit?: number;
|
|
38
|
+
}
|
|
39
|
+
interface S3ListResult<FileExtra = unknown, FolderExtra = unknown> {
|
|
40
|
+
path: S3Path;
|
|
41
|
+
entries: Array<S3Entry<FileExtra, FolderExtra>>;
|
|
42
|
+
nextCursor?: string;
|
|
43
|
+
}
|
|
44
|
+
interface S3SearchOptions {
|
|
45
|
+
query: string;
|
|
46
|
+
path?: S3Path;
|
|
47
|
+
recursive?: boolean;
|
|
48
|
+
limit?: number;
|
|
49
|
+
cursor?: string;
|
|
50
|
+
}
|
|
51
|
+
interface S3SearchResult<FileExtra = unknown, FolderExtra = unknown> {
|
|
52
|
+
query: string;
|
|
53
|
+
entries: Array<S3Entry<FileExtra, FolderExtra>>;
|
|
54
|
+
nextCursor?: string;
|
|
55
|
+
}
|
|
56
|
+
interface S3CreateFolderOptions {
|
|
57
|
+
path: S3Path;
|
|
58
|
+
}
|
|
59
|
+
interface S3DeleteFolderOptions {
|
|
60
|
+
path: S3Path;
|
|
61
|
+
recursive?: boolean;
|
|
62
|
+
}
|
|
63
|
+
interface S3DeleteFilesOptions {
|
|
64
|
+
paths: S3Path[];
|
|
65
|
+
}
|
|
66
|
+
interface S3CopyOptions {
|
|
67
|
+
fromPath: S3Path;
|
|
68
|
+
toPath: S3Path;
|
|
69
|
+
}
|
|
70
|
+
interface S3MoveOptions {
|
|
71
|
+
fromPath: S3Path;
|
|
72
|
+
toPath: S3Path;
|
|
73
|
+
}
|
|
74
|
+
interface S3PrepareUploadItem {
|
|
75
|
+
path: S3Path;
|
|
76
|
+
contentType?: string;
|
|
77
|
+
cacheControl?: string;
|
|
78
|
+
contentDisposition?: string;
|
|
79
|
+
metadata?: Record<string, string>;
|
|
80
|
+
}
|
|
81
|
+
interface S3PreparedUpload {
|
|
82
|
+
path: S3Path;
|
|
83
|
+
url: string;
|
|
84
|
+
method: 'PUT';
|
|
85
|
+
headers: Record<string, string>;
|
|
86
|
+
}
|
|
87
|
+
interface S3PrepareUploadsOptions {
|
|
88
|
+
items: S3PrepareUploadItem[];
|
|
89
|
+
expiresInSeconds?: number;
|
|
90
|
+
}
|
|
91
|
+
interface S3GetPreviewUrlOptions {
|
|
92
|
+
path: S3Path;
|
|
93
|
+
expiresInSeconds?: number;
|
|
94
|
+
inline?: boolean;
|
|
95
|
+
}
|
|
96
|
+
interface S3GetPreviewUrlResult {
|
|
97
|
+
path: S3Path;
|
|
98
|
+
url: string;
|
|
99
|
+
expiresAt: string;
|
|
100
|
+
}
|
|
101
|
+
interface S3FileDecorationArgs {
|
|
102
|
+
path: S3Path;
|
|
103
|
+
key: string;
|
|
104
|
+
}
|
|
105
|
+
interface S3FolderDecorationArgs {
|
|
106
|
+
path: S3Path;
|
|
107
|
+
prefix: string;
|
|
108
|
+
}
|
|
109
|
+
interface S3FileManagerHooks<FileExtra = unknown, FolderExtra = unknown> {
|
|
110
|
+
authorize?: S3FileManagerAuthorizeHook;
|
|
111
|
+
allowAction?: S3FileManagerAllowActionHook;
|
|
112
|
+
decorateFile?: (file: S3FileEntry<FileExtra>, args: S3FileDecorationArgs) => void | Promise<void>;
|
|
113
|
+
decorateFolder?: (folder: S3FolderEntry<FolderExtra>, args: S3FolderDecorationArgs) => void | Promise<void>;
|
|
114
|
+
}
|
|
115
|
+
interface S3FileManagerOptions<FileExtra = unknown, FolderExtra = unknown> {
|
|
116
|
+
bucket: string;
|
|
117
|
+
rootPrefix?: string;
|
|
118
|
+
delimiter?: string;
|
|
119
|
+
authorizationMode?: S3FileManagerAuthorizationMode;
|
|
120
|
+
hooks?: S3FileManagerHooks<FileExtra, FolderExtra>;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export type { S3FileManagerOptions as A, S3FileManagerAction as S, S3Path as a, S3FileManagerAuthContext as b, S3FileManagerAuthorizeArgs as c, S3FileManagerAuthorizeHook as d, S3FileManagerAllowActionHook as e, S3FileManagerAuthorizationMode as f, S3FolderEntry as g, S3FileEntry as h, S3Entry as i, S3ListOptions as j, S3ListResult as k, S3SearchOptions as l, S3SearchResult as m, S3CreateFolderOptions as n, S3DeleteFolderOptions as o, S3DeleteFilesOptions as p, S3CopyOptions as q, S3MoveOptions as r, S3PrepareUploadItem as s, S3PreparedUpload as t, S3PrepareUploadsOptions as u, S3GetPreviewUrlOptions as v, S3GetPreviewUrlResult as w, S3FileDecorationArgs as x, S3FolderDecorationArgs as y, S3FileManagerHooks as z };
|
package/package.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "s3kit",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Secure, server-driven, framework-agnostic S3 file manager (core + HTTP adapters + client helper).",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.cjs",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"homepage": "https://github.com/razaanstha/s3kit#readme",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/razaanstha/s3kit.git"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/razaanstha/s3kit/issues"
|
|
17
|
+
},
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"require": "./dist/index.cjs"
|
|
23
|
+
},
|
|
24
|
+
"./core": {
|
|
25
|
+
"types": "./dist/core/index.d.ts",
|
|
26
|
+
"import": "./dist/core/index.js",
|
|
27
|
+
"require": "./dist/core/index.cjs"
|
|
28
|
+
},
|
|
29
|
+
"./http": {
|
|
30
|
+
"types": "./dist/http/index.d.ts",
|
|
31
|
+
"import": "./dist/http/index.js",
|
|
32
|
+
"require": "./dist/http/index.cjs"
|
|
33
|
+
},
|
|
34
|
+
"./client": {
|
|
35
|
+
"types": "./dist/client/index.d.ts",
|
|
36
|
+
"import": "./dist/client/index.js",
|
|
37
|
+
"require": "./dist/client/index.cjs"
|
|
38
|
+
},
|
|
39
|
+
"./adapters/express": {
|
|
40
|
+
"types": "./dist/adapters/express.d.ts",
|
|
41
|
+
"import": "./dist/adapters/express.js",
|
|
42
|
+
"require": "./dist/adapters/express.cjs"
|
|
43
|
+
},
|
|
44
|
+
"./adapters/next": {
|
|
45
|
+
"types": "./dist/adapters/next.d.ts",
|
|
46
|
+
"import": "./dist/adapters/next.js",
|
|
47
|
+
"require": "./dist/adapters/next.cjs"
|
|
48
|
+
},
|
|
49
|
+
"./adapters/fetch": {
|
|
50
|
+
"types": "./dist/adapters/fetch.d.ts",
|
|
51
|
+
"import": "./dist/adapters/fetch.js",
|
|
52
|
+
"require": "./dist/adapters/fetch.cjs"
|
|
53
|
+
},
|
|
54
|
+
"./react": {
|
|
55
|
+
"types": "./dist/react/index.d.ts",
|
|
56
|
+
"import": "./dist/react/index.js",
|
|
57
|
+
"require": "./dist/react/index.cjs"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"files": [
|
|
61
|
+
"dist"
|
|
62
|
+
],
|
|
63
|
+
"sideEffects": false,
|
|
64
|
+
"scripts": {
|
|
65
|
+
"build": "tsup",
|
|
66
|
+
"dev": "tsup --watch",
|
|
67
|
+
"test": "npm run build && node --test",
|
|
68
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
69
|
+
"oxlint": "bunx oxlint ./src ./examples",
|
|
70
|
+
"oxfmt": "bunx oxfmt ./src ./examples",
|
|
71
|
+
"prepare": "npm run build",
|
|
72
|
+
"prepublishOnly": "npm run build"
|
|
73
|
+
},
|
|
74
|
+
"dependencies": {
|
|
75
|
+
"@aws-sdk/client-s3": "^3.760.0",
|
|
76
|
+
"@aws-sdk/s3-request-presigner": "^3.760.0",
|
|
77
|
+
"@base-ui/react": "^1.0.0"
|
|
78
|
+
},
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@phosphor-icons/react": "^2.1.10",
|
|
81
|
+
"@types/express": "^4.17.21",
|
|
82
|
+
"@types/react": "^19.2.7",
|
|
83
|
+
"express": "^4.21.2",
|
|
84
|
+
"tsup": "^8.3.6",
|
|
85
|
+
"typescript": "^5.7.3"
|
|
86
|
+
},
|
|
87
|
+
"peerDependencies": {
|
|
88
|
+
"@phosphor-icons/react": "^2.1.10",
|
|
89
|
+
"express": "^4.18.0 || ^5.0.0",
|
|
90
|
+
"react": "^19.2.3"
|
|
91
|
+
},
|
|
92
|
+
"peerDependenciesMeta": {
|
|
93
|
+
"express": {
|
|
94
|
+
"optional": true
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"engines": {
|
|
98
|
+
"node": ">=18"
|
|
99
|
+
}
|
|
100
|
+
}
|