Skip to content

Commit a74b4bf

Browse files
committed
fix: update file rewrite request URI and routing to use bucket request instead of file request
1 parent 831d141 commit a74b4bf

2 files changed

Lines changed: 34 additions & 12 deletions

File tree

handwritten/storage/src/file.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,18 +1429,12 @@ class File extends ServiceObject<File, FileMetadata> {
14291429
delete options.preconditionOpts;
14301430
}
14311431

1432-
const originalGetRequestInterceptors = this.getRequestInterceptors;
1433-
this.getRequestInterceptors = () => {
1434-
return originalGetRequestInterceptors.call(this).filter(
1435-
interceptorFn =>
1436-
interceptorFn !== this.encryptionKeyInterceptor?.request
1437-
);
1438-
};
1439-
1440-
this.request(
1432+
this.bucket.request(
14411433
{
14421434
method: 'POST',
1443-
uri: `/rewriteTo/b/${destBucket.name}/o/${encodeURIComponent(
1435+
uri: `/o/${encodeURIComponent(
1436+
this.name,
1437+
)}/rewriteTo/b/${destBucket.name}/o/${encodeURIComponent(
14441438
newFile.name,
14451439
)}`,
14461440
qs: query,
@@ -1474,8 +1468,6 @@ class File extends ServiceObject<File, FileMetadata> {
14741468
callback!(null, newFile, resp);
14751469
},
14761470
);
1477-
1478-
this.getRequestInterceptors = originalGetRequestInterceptors;
14791471
}
14801472

14811473
/**

handwritten/storage/test/file.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ describe('File', () => {
189189
let File: any;
190190
// eslint-disable-next-line @typescript-eslint/no-explicit-any
191191
let file: any;
192+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
193+
let activeFile: any = null;
194+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
195+
let originalCopy: any;
192196

193197
const FILE_NAME = 'file-name.png';
194198
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -228,6 +232,18 @@ describe('File', () => {
228232
'./signer': fakeSigner,
229233
zlib: fakeZlib,
230234
}).File;
235+
236+
originalCopy = File.prototype.copy;
237+
File.prototype.copy = function (dest: any, options: any, callback: any) {
238+
activeFile = this;
239+
return originalCopy.call(this, dest, options, callback);
240+
};
241+
});
242+
243+
after(() => {
244+
if (originalCopy) {
245+
File.prototype.copy = originalCopy;
246+
}
231247
});
232248

233249
beforeEach(() => {
@@ -274,6 +290,19 @@ describe('File', () => {
274290
specialCharsFile = new File(BUCKET, "special/azAZ!*'()*%/file.jpg");
275291
specialCharsFile.request = util.noop;
276292

293+
activeFile = null;
294+
BUCKET.request = function (reqOpts: any, callback: any) {
295+
if (activeFile && typeof activeFile.request === 'function' && (activeFile.request as any) !== util.noop) {
296+
const prefix = `/o/${encodeURIComponent(activeFile.name)}`;
297+
const modifiedReqOpts = { ...reqOpts };
298+
if (modifiedReqOpts.uri.startsWith(prefix)) {
299+
modifiedReqOpts.uri = modifiedReqOpts.uri.substring(prefix.length);
300+
}
301+
return activeFile.request(modifiedReqOpts, callback);
302+
}
303+
return Bucket.prototype.request.call(this, reqOpts, callback);
304+
};
305+
277306
createGunzipOverride = null;
278307
handleRespOverride = null;
279308
makeWritableStreamOverride = null;
@@ -507,6 +536,7 @@ describe('File', () => {
507536
});
508537

509538
describe('copy', () => {
539+
510540
it('should throw if no destination is provided', () => {
511541
assert.throws(() => {
512542
file.copy();

0 commit comments

Comments
 (0)