@nest-boot/file-upload 7.1.2 → 7.1.4

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.
Files changed (33) hide show
  1. package/dist/file-upload-field.object.d.ts +3 -0
  2. package/dist/file-upload-field.object.js +1 -0
  3. package/dist/file-upload-field.object.js.map +1 -1
  4. package/dist/file-upload-options.interface.d.ts +9 -0
  5. package/dist/file-upload.module.d.ts +21 -1
  6. package/dist/file-upload.module.js +23 -0
  7. package/dist/file-upload.module.js.map +1 -1
  8. package/dist/file-upload.module.spec.d.ts +1 -0
  9. package/dist/file-upload.module.spec.js +38 -0
  10. package/dist/file-upload.module.spec.js.map +1 -0
  11. package/dist/file-upload.object.d.ts +3 -0
  12. package/dist/file-upload.object.js +1 -0
  13. package/dist/file-upload.object.js.map +1 -1
  14. package/dist/file-upload.object.spec.d.ts +1 -0
  15. package/dist/file-upload.object.spec.js +36 -0
  16. package/dist/file-upload.object.spec.js.map +1 -0
  17. package/dist/file-upload.resolver.spec.d.ts +1 -0
  18. package/dist/file-upload.resolver.spec.js +46 -0
  19. package/dist/file-upload.resolver.spec.js.map +1 -0
  20. package/dist/file-upload.service.d.ts +29 -1
  21. package/dist/file-upload.service.js +30 -9
  22. package/dist/file-upload.service.js.map +1 -1
  23. package/dist/file-upload.service.spec.d.ts +1 -0
  24. package/dist/file-upload.service.spec.js +304 -0
  25. package/dist/file-upload.service.spec.js.map +1 -0
  26. package/dist/index.d.ts +4 -0
  27. package/dist/index.js +4 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/inputs/file-upload.input.d.ts +4 -0
  30. package/dist/inputs/file-upload.input.js +1 -0
  31. package/dist/inputs/file-upload.input.js.map +1 -1
  32. package/dist/tsconfig.build.tsbuildinfo +1 -1
  33. package/package.json +23 -14
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const client_s3_1 = require("@aws-sdk/client-s3");
4
+ const s3_presigned_post_1 = require("@aws-sdk/s3-presigned-post");
5
+ const common_1 = require("@nestjs/common");
6
+ const testing_1 = require("@nestjs/testing");
7
+ const stream_1 = require("stream");
8
+ const file_upload_module_definition_1 = require("./file-upload.module-definition");
9
+ const file_upload_service_1 = require("./file-upload.service");
10
+ jest.mock("@aws-sdk/s3-presigned-post", () => ({
11
+ createPresignedPost: jest.fn(),
12
+ }));
13
+ const createPresignedPostMock = jest.mocked(s3_presigned_post_1.createPresignedPost);
14
+ function createClient(options = {}) {
15
+ return createClientWithSend(options).client;
16
+ }
17
+ function createClientWithSend(options = {}) {
18
+ const client = new client_s3_1.S3Client({
19
+ credentials: {
20
+ accessKeyId: "test-access-key",
21
+ secretAccessKey: "test-secret-key",
22
+ },
23
+ endpoint: options.endpoint,
24
+ forcePathStyle: options.forcePathStyle,
25
+ region: "us-east-1",
26
+ });
27
+ const send = jest.spyOn(client, "send").mockResolvedValue({});
28
+ return { client, send };
29
+ }
30
+ describe("FileUploadService", () => {
31
+ beforeEach(() => {
32
+ createPresignedPostMock.mockResolvedValue({
33
+ fields: {
34
+ key: "tmp/generated.jpeg",
35
+ Policy: "policy",
36
+ "X-Amz-Signature": "signature",
37
+ },
38
+ url: "https://bucket.s3.local/tmp/generated.jpeg?uploads=1",
39
+ });
40
+ });
41
+ afterEach(() => {
42
+ jest.useRealTimers();
43
+ jest.resetAllMocks();
44
+ });
45
+ describe("create", () => {
46
+ it("should create presigned upload arguments with limits and a custom public URL", async () => {
47
+ const client = createClient();
48
+ const service = await createService({
49
+ bucket: "uploads",
50
+ client,
51
+ expires: 120,
52
+ limits: [
53
+ {
54
+ fileSize: 1024,
55
+ mimeTypes: ["image/*"],
56
+ },
57
+ ],
58
+ url: "https://cdn.example.com/static",
59
+ });
60
+ await expect(service.create([
61
+ {
62
+ fileSize: 512,
63
+ mimeType: "image/jpeg",
64
+ name: "avatar.jpeg",
65
+ },
66
+ ])).resolves.toEqual([
67
+ {
68
+ fields: [
69
+ {
70
+ name: "key",
71
+ value: "tmp/generated.jpeg",
72
+ },
73
+ {
74
+ name: "Policy",
75
+ value: "policy",
76
+ },
77
+ {
78
+ name: "X-Amz-Signature",
79
+ value: "signature",
80
+ },
81
+ ],
82
+ url: "https://cdn.example.com/static/tmp/generated.jpeg?uploads=1",
83
+ },
84
+ ]);
85
+ expect(createPresignedPostMock).toHaveBeenCalledWith(client, {
86
+ Bucket: "uploads",
87
+ Conditions: [
88
+ ["content-length-range", 1, 1024],
89
+ ["eq", "$bucket", "uploads"],
90
+ ["eq", "$key", expect.stringMatching(/^tmp\/.+\.jpeg$/)],
91
+ ["eq", "$success_action_status", "201"],
92
+ ["eq", "$Content-Type", "image/jpeg"],
93
+ ],
94
+ Expires: 120,
95
+ Fields: {
96
+ "Content-Type": "image/jpeg",
97
+ success_action_status: "201",
98
+ },
99
+ Key: expect.stringMatching(/^tmp\/.+\.jpeg$/),
100
+ });
101
+ });
102
+ it("should use the original presigned URL and default expiration when limits are not configured", async () => {
103
+ const service = await createService({
104
+ bucket: "uploads",
105
+ client: createClient(),
106
+ });
107
+ await expect(service.create([
108
+ {
109
+ fileSize: 512,
110
+ mimeType: "text/plain",
111
+ name: "notes",
112
+ },
113
+ ])).resolves.toEqual([
114
+ {
115
+ fields: [
116
+ {
117
+ name: "key",
118
+ value: "tmp/generated.jpeg",
119
+ },
120
+ {
121
+ name: "Policy",
122
+ value: "policy",
123
+ },
124
+ {
125
+ name: "X-Amz-Signature",
126
+ value: "signature",
127
+ },
128
+ ],
129
+ url: "https://bucket.s3.local/tmp/generated.jpeg?uploads=1",
130
+ },
131
+ ]);
132
+ expect(createPresignedPostMock).toHaveBeenCalledWith(expect.any(client_s3_1.S3Client), expect.objectContaining({
133
+ Conditions: [
134
+ ["eq", "$bucket", "uploads"],
135
+ ["eq", "$key", expect.stringMatching(/^tmp\/.+$/)],
136
+ ["eq", "$success_action_status", "201"],
137
+ ["eq", "$Content-Type", "text/plain"],
138
+ ],
139
+ Expires: 3600,
140
+ }));
141
+ });
142
+ it("should reject uploads that do not match configured limits", async () => {
143
+ const service = await createService({
144
+ bucket: "uploads",
145
+ client: createClient(),
146
+ limits: [
147
+ {
148
+ fileSize: 100,
149
+ mimeTypes: ["image/png"],
150
+ },
151
+ ],
152
+ });
153
+ await expect(service.create([
154
+ {
155
+ fileSize: 101,
156
+ mimeType: "image/jpeg",
157
+ name: "avatar.jpeg",
158
+ },
159
+ ])).rejects.toBeInstanceOf(common_1.BadRequestException);
160
+ expect(createPresignedPostMock).not.toHaveBeenCalled();
161
+ });
162
+ });
163
+ describe("persist", () => {
164
+ it("should copy a temporary file to the dated permanent file path", async () => {
165
+ jest.useFakeTimers();
166
+ jest.setSystemTime(new Date("2026-01-31T12:00:00.000Z"));
167
+ const { client, send } = createClientWithSend({
168
+ endpoint: "http://s3.local:9000",
169
+ forcePathStyle: true,
170
+ });
171
+ const service = await createService({
172
+ bucket: "uploads",
173
+ client,
174
+ });
175
+ await expect(service.persist("http://s3.local:9000/uploads/tmp/photo.jpeg")).resolves.toBe("http://s3.local:9000/uploads/files/2026/01/31/photo.jpeg");
176
+ const command = send.mock.calls[0][0];
177
+ expect(command).toBeInstanceOf(client_s3_1.CopyObjectCommand);
178
+ expect(command.input).toEqual({
179
+ Bucket: "uploads",
180
+ CopySource: "uploads/tmp/photo.jpeg",
181
+ Key: "files/2026/01/31/photo.jpeg",
182
+ });
183
+ });
184
+ });
185
+ describe("upload", () => {
186
+ it("should upload data to a temporary path and return a path-style URL", async () => {
187
+ jest.useFakeTimers();
188
+ jest.setSystemTime(new Date("2026-01-31T12:00:00.000Z"));
189
+ const { client, send } = createClientWithSend({
190
+ endpoint: "http://s3.local:9000",
191
+ forcePathStyle: true,
192
+ });
193
+ const service = await createService({
194
+ bucket: "uploads",
195
+ client,
196
+ });
197
+ const body = stream_1.Readable.from(["hello"]);
198
+ const url = await service.upload(body, {
199
+ "Content-Type": "image/png",
200
+ source: "unit-test",
201
+ });
202
+ expect(url).toMatch(/^http:\/\/s3\.local:9000\/uploads\/tmp\/2026\/01\/31\/.+\.png$/);
203
+ const command = send.mock.calls[0][0];
204
+ expect(command).toBeInstanceOf(client_s3_1.PutObjectCommand);
205
+ expect(command.input).toMatchObject({
206
+ Body: body,
207
+ Bucket: "uploads",
208
+ ContentType: "image/png",
209
+ Key: expect.stringMatching(/^tmp\/2026\/01\/31\/.+\.png$/),
210
+ Metadata: {
211
+ "Content-Type": "image/png",
212
+ source: "unit-test",
213
+ },
214
+ });
215
+ });
216
+ it("should use the provided extension and return a virtual-host style URL", async () => {
217
+ jest.useFakeTimers();
218
+ jest.setSystemTime(new Date("2026-01-31T12:00:00.000Z"));
219
+ const service = await createService({
220
+ bucket: "uploads",
221
+ client: {
222
+ credentials: {
223
+ accessKeyId: "test-access-key",
224
+ secretAccessKey: "test-secret-key",
225
+ },
226
+ endpoint: "https://s3.example.com",
227
+ forcePathStyle: false,
228
+ region: "us-east-1",
229
+ },
230
+ });
231
+ const client = service.s3Client;
232
+ jest.spyOn(client, "send").mockResolvedValue({});
233
+ const url = await service.upload("hello", {
234
+ "Content-Type": "application/octet-stream",
235
+ extension: "txt",
236
+ });
237
+ expect(url).toMatch(/^https:\/\/uploads\.s3\.example\.com\/tmp\/2026\/01\/31\/.+\.txt$/);
238
+ });
239
+ it("should persist uploaded files when requested", async () => {
240
+ const service = await createService({
241
+ bucket: "uploads",
242
+ client: createClient({
243
+ endpoint: "http://s3.local",
244
+ forcePathStyle: true,
245
+ }),
246
+ });
247
+ jest
248
+ .spyOn(service, "persist")
249
+ .mockResolvedValue("http://s3.local/uploads/files/avatar.bin");
250
+ await expect(service.upload(Buffer.from("hello"), {
251
+ "Content-Type": "application/octet-stream",
252
+ }, true)).resolves.toBe("http://s3.local/uploads/files/avatar.bin");
253
+ });
254
+ it("should use bin when the MIME type has no known extension", async () => {
255
+ jest.useFakeTimers();
256
+ jest.setSystemTime(new Date("2026-01-31T12:00:00.000Z"));
257
+ const service = await createService({
258
+ bucket: "uploads",
259
+ client: createClient({
260
+ endpoint: "http://s3.local",
261
+ forcePathStyle: true,
262
+ }),
263
+ });
264
+ const url = await service.upload("hello", {
265
+ "Content-Type": "unknown/unknown",
266
+ });
267
+ expect(url).toMatch(/\.bin$/);
268
+ });
269
+ it("should throw when the S3 endpoint is not configured", async () => {
270
+ const service = await createService({
271
+ bucket: "uploads",
272
+ client: createClient(),
273
+ });
274
+ await expect(service.upload(Buffer.from("hello"), {
275
+ "Content-Type": "application/octet-stream",
276
+ })).rejects.toThrow("Endpoint is not configured");
277
+ });
278
+ });
279
+ it("should emit decorator metadata when module options exist at runtime", () => {
280
+ jest.isolateModules(() => {
281
+ jest.doMock("./file-upload-options.interface", () => ({
282
+ FileUploadModuleOptions: function FileUploadModuleOptions() {
283
+ return undefined;
284
+ },
285
+ }));
286
+ const isolatedModule = jest.requireActual("./file-upload.service");
287
+ expect(isolatedModule.FileUploadService).toBeDefined();
288
+ jest.dontMock("./file-upload-options.interface");
289
+ });
290
+ });
291
+ });
292
+ async function createService(options) {
293
+ const moduleRef = await testing_1.Test.createTestingModule({
294
+ providers: [
295
+ file_upload_service_1.FileUploadService,
296
+ {
297
+ provide: file_upload_module_definition_1.MODULE_OPTIONS_TOKEN,
298
+ useValue: options,
299
+ },
300
+ ],
301
+ }).compile();
302
+ return moduleRef.get(file_upload_service_1.FileUploadService);
303
+ }
304
+ //# sourceMappingURL=file-upload.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload.service.spec.js","sourceRoot":"","sources":["../src/file-upload.service.spec.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,6 @@
1
1
  export * from "./file-upload.module";
2
+ export * from "./file-upload.object";
2
3
  export * from "./file-upload.service";
4
+ export * from "./file-upload-field.object";
5
+ export * from "./file-upload-options.interface";
6
+ export * from "./inputs/file-upload.input";
package/dist/index.js CHANGED
@@ -15,5 +15,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./file-upload.module"), exports);
18
+ __exportStar(require("./file-upload.object"), exports);
18
19
  __exportStar(require("./file-upload.service"), exports);
20
+ __exportStar(require("./file-upload-field.object"), exports);
21
+ __exportStar(require("./file-upload-options.interface"), exports);
22
+ __exportStar(require("./inputs/file-upload.input"), exports);
19
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,wDAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,uDAAqC;AACrC,wDAAsC;AACtC,6DAA2C;AAC3C,kEAAgD;AAChD,6DAA2C"}
@@ -1,5 +1,9 @@
1
+ /** GraphQL input type for requesting a file upload. */
1
2
  export declare class FileUploadInput {
3
+ /** Original file name including extension. */
2
4
  name: string;
5
+ /** File size in bytes. */
3
6
  fileSize: number;
7
+ /** MIME type of the file (e.g. "image/png"). */
4
8
  mimeType: string;
5
9
  }
@@ -11,6 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.FileUploadInput = void 0;
13
13
  const graphql_1 = require("@nest-boot/graphql");
14
+ /** GraphQL input type for requesting a file upload. */
14
15
  let FileUploadInput = class FileUploadInput {
15
16
  };
16
17
  exports.FileUploadInput = FileUploadInput;
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload.input.js","sourceRoot":"","sources":["../../src/inputs/file-upload.input.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA2D;AAGpD,IAAM,eAAe,GAArB,MAAM,eAAe;CAS3B,CAAA;AATY,0CAAe;AAE1B;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;6CACN;AAGd;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,aAAG,CAAC;;iDACC;AAGlB;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;iDACF;0BARP,eAAe;IAD3B,IAAA,mBAAS,GAAE;GACC,eAAe,CAS3B"}
1
+ {"version":3,"file":"file-upload.input.js","sourceRoot":"","sources":["../../src/inputs/file-upload.input.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA2D;AAE3D,uDAAuD;AAEhD,IAAM,eAAe,GAArB,MAAM,eAAe;CAY3B,CAAA;AAZY,0CAAe;AAG1B;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;6CACN;AAId;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,aAAG,CAAC;;iDACC;AAIlB;IADC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;iDACF;0BAXP,eAAe;IAD3B,IAAA,mBAAS,GAAE;GACC,eAAe,CAY3B"}