Skip to content

Commit 3899342

Browse files
feat(api): add GET /extensions/{id_or_name}/metadata
1 parent c3fe382 commit 3899342

6 files changed

Lines changed: 66 additions & 4 deletions

File tree

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 120
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-ab4e7c50c41fefd891648fa84ba0258986f192ba1bde9f42cbdf487f64c4cc27.yml
3-
openapi_spec_hash: b4bcd6557f7045ecff30b01e02d28ac5
4-
config_hash: 03c7e57f268c750e2415831662e95969
1+
configured_endpoints: 121
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-bccc42bb10d1afe703f0374d11f33e775522069d69a13bb2345cc566a49ba4f3.yml
3+
openapi_spec_hash: 9f00975c0e741ed84011413674313be0
4+
config_hash: 3a50aee540dce69a53bb8942f5086f5e

api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ Methods:
301301
Types:
302302

303303
- <code><a href="./src/resources/extensions.ts">ExtensionListResponse</a></code>
304+
- <code><a href="./src/resources/extensions.ts">ExtensionGetResponse</a></code>
304305
- <code><a href="./src/resources/extensions.ts">ExtensionUploadResponse</a></code>
305306

306307
Methods:
@@ -309,6 +310,7 @@ Methods:
309310
- <code title="delete /extensions/{id_or_name}">client.extensions.<a href="./src/resources/extensions.ts">delete</a>(idOrName) -> void</code>
310311
- <code title="get /extensions/{id_or_name}">client.extensions.<a href="./src/resources/extensions.ts">download</a>(idOrName) -> Response</code>
311312
- <code title="get /extensions/from_chrome_store">client.extensions.<a href="./src/resources/extensions.ts">downloadFromChromeStore</a>({ ...params }) -> Response</code>
313+
- <code title="get /extensions/{id_or_name}/metadata">client.extensions.<a href="./src/resources/extensions.ts">get</a>(idOrName) -> ExtensionGetResponse</code>
312314
- <code title="post /extensions">client.extensions.<a href="./src/resources/extensions.ts">upload</a>({ ...params }) -> ExtensionUploadResponse</code>
313315

314316
# BrowserPools

src/client.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ import {
8787
import { KernelApp } from './core/app-framework';
8888
import {
8989
ExtensionDownloadFromChromeStoreParams,
90+
ExtensionGetResponse,
9091
ExtensionListParams,
9192
ExtensionListResponse,
9293
ExtensionListResponsesOffsetPagination,
@@ -1117,6 +1118,7 @@ export declare namespace Kernel {
11171118
export {
11181119
Extensions as Extensions,
11191120
type ExtensionListResponse as ExtensionListResponse,
1121+
type ExtensionGetResponse as ExtensionGetResponse,
11201122
type ExtensionUploadResponse as ExtensionUploadResponse,
11211123
type ExtensionListResponsesOffsetPagination as ExtensionListResponsesOffsetPagination,
11221124
type ExtensionListParams as ExtensionListParams,

src/resources/extensions.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,19 @@ export class Extensions extends APIResource {
9797
});
9898
}
9999

100+
/**
101+
* Get an extension's metadata (name, size, timestamps) by ID or name, without
102+
* downloading the archive.
103+
*
104+
* @example
105+
* ```ts
106+
* const extension = await client.extensions.get('id_or_name');
107+
* ```
108+
*/
109+
get(idOrName: string, options?: RequestOptions): APIPromise<ExtensionGetResponse> {
110+
return this._client.get(path`/extensions/${idOrName}/metadata`, options);
111+
}
112+
100113
/**
101114
* Upload a zip file containing an unpacked browser extension. Optionally provide a
102115
* unique name for later reference.
@@ -146,6 +159,37 @@ export interface ExtensionListResponse {
146159
name?: string | null;
147160
}
148161

162+
/**
163+
* A browser extension uploaded to Kernel.
164+
*/
165+
export interface ExtensionGetResponse {
166+
/**
167+
* Unique identifier for the extension
168+
*/
169+
id: string;
170+
171+
/**
172+
* Timestamp when the extension was created
173+
*/
174+
created_at: string;
175+
176+
/**
177+
* Size of the extension archive in bytes
178+
*/
179+
size_bytes: number;
180+
181+
/**
182+
* Timestamp when the extension was last used
183+
*/
184+
last_used_at?: string | null;
185+
186+
/**
187+
* Optional, easier-to-reference name for the extension. Must be unique within the
188+
* project.
189+
*/
190+
name?: string | null;
191+
}
192+
149193
/**
150194
* A browser extension uploaded to Kernel.
151195
*/
@@ -211,6 +255,7 @@ export interface ExtensionUploadParams {
211255
export declare namespace Extensions {
212256
export {
213257
type ExtensionListResponse as ExtensionListResponse,
258+
type ExtensionGetResponse as ExtensionGetResponse,
214259
type ExtensionUploadResponse as ExtensionUploadResponse,
215260
type ExtensionListResponsesOffsetPagination as ExtensionListResponsesOffsetPagination,
216261
type ExtensionListParams as ExtensionListParams,

src/resources/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ export {
9090
export {
9191
Extensions,
9292
type ExtensionListResponse,
93+
type ExtensionGetResponse,
9394
type ExtensionUploadResponse,
9495
type ExtensionListParams,
9596
type ExtensionDownloadFromChromeStoreParams,

tests/api-resources/extensions.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,18 @@ describe('resource extensions', () => {
5252
const response = await client.extensions.downloadFromChromeStore({ url: 'url', os: 'win' });
5353
});
5454

55+
// Mock server tests are disabled
56+
test.skip('get', async () => {
57+
const responsePromise = client.extensions.get('id_or_name');
58+
const rawResponse = await responsePromise.asResponse();
59+
expect(rawResponse).toBeInstanceOf(Response);
60+
const response = await responsePromise;
61+
expect(response).not.toBeInstanceOf(Response);
62+
const dataAndResponse = await responsePromise.withResponse();
63+
expect(dataAndResponse.data).toBe(response);
64+
expect(dataAndResponse.response).toBe(rawResponse);
65+
});
66+
5567
// Mock server tests are disabled
5668
test.skip('upload: only required params', async () => {
5769
const responsePromise = client.extensions.upload({

0 commit comments

Comments
 (0)