@forge/object-store 1.3.5-next.0 → 1.4.0-next.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/README.md CHANGED
@@ -49,6 +49,10 @@ const payload = {
49
49
  const uploadUrlResponse = await fos.createUploadUrl(payload);
50
50
  const uploadUrl = uploadUrlResponse.url;
51
51
 
52
+ // Create a pre-signed upload url for use in browsers
53
+ const publicUploadUrlResponse = await fos.createUploadUrl(payload);
54
+ const publicUploadUrl = publicUploadUrlResponse.url;
55
+
52
56
  // Both standard fetch or api.fetch can be used to upload the buffer
53
57
  const response = await fetch(url, {
54
58
  method: 'PUT',
@@ -181,6 +181,38 @@ describe('ObjectStoreClient', () => {
181
181
  expect(response).toEqual({ url: 'upload-url' });
182
182
  });
183
183
  });
184
+ describe('createPublicUploadUrl', () => {
185
+ it('should send a POST request with the correct headers and body, and return a URL', async () => {
186
+ const mockResponse = {
187
+ ok: true,
188
+ status: 200,
189
+ text: createMockBody(JSON.stringify({ url: 'public-upload-url' }))
190
+ };
191
+ mockFetch.mockResolvedValue(mockResponse);
192
+ const objectId = '1';
193
+ const fileProperties = {
194
+ key: objectId,
195
+ length: 123,
196
+ checksum: 'abc123',
197
+ checksumType: 'SHA1',
198
+ ttlSeconds: 3600,
199
+ overwrite: true
200
+ };
201
+ const response = await osClient.createPublicUploadUrl(fileProperties);
202
+ expect(mockFetch).toHaveBeenCalledWith('api/v1/public-upload-url', {
203
+ method: 'POST',
204
+ redirect: 'follow',
205
+ headers: {
206
+ Accept: 'application/json',
207
+ 'Content-Type': 'application/json'
208
+ },
209
+ body: JSON.stringify(fileProperties)
210
+ });
211
+ expect(mockResponse.status).toBe(200);
212
+ expect(mockResponse.text).toHaveBeenCalled();
213
+ expect(response).toEqual({ url: 'public-upload-url' });
214
+ });
215
+ });
184
216
  describe('createDownloadUrl', () => {
185
217
  it('should send a POST request with the correct headers and body, and return a URL', async () => {
186
218
  const mockResponse = {
@@ -227,6 +259,52 @@ describe('ObjectStoreClient', () => {
227
259
  expect(response).toEqual({ url: 'download-url' });
228
260
  });
229
261
  });
262
+ describe('createPublicDownloadUrl', () => {
263
+ it('should send a POST request with the correct headers and body, and return a URL', async () => {
264
+ const mockResponse = {
265
+ ok: true,
266
+ status: 200,
267
+ text: createMockBody(JSON.stringify({ url: 'public-download-url' }))
268
+ };
269
+ mockFetch.mockResolvedValue(mockResponse);
270
+ const objectId = '1';
271
+ const response = await osClient.createPublicDownloadUrl(objectId);
272
+ expect(mockFetch).toHaveBeenCalledWith('api/v1/public-download-url', {
273
+ method: 'POST',
274
+ redirect: 'follow',
275
+ headers: {
276
+ Accept: 'application/json',
277
+ 'Content-Type': 'application/json'
278
+ },
279
+ body: JSON.stringify({ key: objectId })
280
+ });
281
+ expect(mockResponse.status).toBe(200);
282
+ expect(mockResponse.text).toHaveBeenCalled();
283
+ expect(response).toEqual({ url: 'public-download-url' });
284
+ });
285
+ it('should send a POST request with cdn:true option and return a URL', async () => {
286
+ const mockResponse = {
287
+ ok: true,
288
+ status: 200,
289
+ text: createMockBody(JSON.stringify({ url: 'public-download-url' }))
290
+ };
291
+ mockFetch.mockResolvedValue(mockResponse);
292
+ const objectId = '1';
293
+ const response = await osClient.createPublicDownloadUrl(objectId, { cdn: true });
294
+ expect(mockFetch).toHaveBeenCalledWith('api/v1/public-download-url', {
295
+ method: 'POST',
296
+ redirect: 'follow',
297
+ headers: {
298
+ Accept: 'application/json',
299
+ 'Content-Type': 'application/json'
300
+ },
301
+ body: JSON.stringify({ key: objectId, cdn: true })
302
+ });
303
+ expect(mockResponse.status).toBe(200);
304
+ expect(mockResponse.text).toHaveBeenCalled();
305
+ expect(response).toEqual({ url: 'public-download-url' });
306
+ });
307
+ });
230
308
  describe('createCDNUrl', () => {
231
309
  it('should send a POST request with the correct headers and body, and return a URL', async () => {
232
310
  const mockResponse = {
@@ -5,7 +5,9 @@ export declare class ObjectStoreClient {
5
5
  get(key: string, options?: GetOptions): Promise<ObjectReference | undefined>;
6
6
  delete(key: string, options?: DeleteOptions): Promise<void>;
7
7
  createUploadUrl(body: UploadUrlBody): Promise<PresignedUrlResponse | undefined>;
8
+ createPublicUploadUrl(body: UploadUrlBody): Promise<PresignedUrlResponse | undefined>;
8
9
  createDownloadUrl(key: string, options?: CreateDownloadUrlOptions): Promise<PresignedUrlResponse | undefined>;
10
+ createPublicDownloadUrl(key: string, options?: CreateDownloadUrlOptions): Promise<PresignedUrlResponse | undefined>;
9
11
  createCDNUrl(key: string, options?: CDNOptions): Promise<PresignedUrlResponse | undefined>;
10
12
  }
11
13
  export declare const objectStore: ObjectStoreClient;
@@ -1 +1 @@
1
- {"version":3,"file":"object-store.d.ts","sourceRoot":"","sources":["../src/object-store.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,aAAa,EACb,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACd,MAAM,SAAS,CAAC;AASjB,qBAAa,iBAAiB;YAEd,WAAW;YASX,WAAW;IAoCZ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAkB5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3D,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAiB/E,iBAAiB,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAkB/B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CAYxG;AAED,eAAO,MAAM,WAAW,mBAA0B,CAAC"}
1
+ {"version":3,"file":"object-store.d.ts","sourceRoot":"","sources":["../src/object-store.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,aAAa,EACb,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACd,MAAM,SAAS,CAAC;AASjB,qBAAa,iBAAiB;YAEd,WAAW;YASX,WAAW;IAoCZ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAkB5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3D,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAgB/E,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAiBrF,iBAAiB,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAkB/B,uBAAuB,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAkB/B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CAYxG;AAED,eAAO,MAAM,WAAW,mBAA0B,CAAC"}
@@ -57,6 +57,12 @@ class ObjectStoreClient {
57
57
  'Content-Type': 'application/json'
58
58
  }, JSON.stringify(body));
59
59
  }
60
+ async createPublicUploadUrl(body) {
61
+ return this.requestJson(ValidHttpMethod.POST, 'api/v1/public-upload-url', {
62
+ Accept: 'application/json',
63
+ 'Content-Type': 'application/json'
64
+ }, JSON.stringify(body));
65
+ }
60
66
  async createDownloadUrl(key, options) {
61
67
  const cdn = options?.cdn;
62
68
  return this.requestJson(ValidHttpMethod.POST, 'api/v1/download-url', {
@@ -64,6 +70,13 @@ class ObjectStoreClient {
64
70
  'Content-Type': 'application/json'
65
71
  }, JSON.stringify({ key, cdn }));
66
72
  }
73
+ async createPublicDownloadUrl(key, options) {
74
+ const cdn = options?.cdn;
75
+ return this.requestJson(ValidHttpMethod.POST, 'api/v1/public-download-url', {
76
+ Accept: 'application/json',
77
+ 'Content-Type': 'application/json'
78
+ }, JSON.stringify({ key, cdn }));
79
+ }
67
80
  async createCDNUrl(key, options) {
68
81
  const ttlSeconds = options?.ttlSeconds;
69
82
  return this.requestJson(ValidHttpMethod.POST, 'api/v1/cdn-url', {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/object-store",
3
- "version": "1.3.5-next.0",
3
+ "version": "1.4.0-next.1",
4
4
  "description": "Forge Object Store SDK",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",