@limrun/api 0.2.0 → 0.5.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +1 -1
  3. package/client.d.mts +3 -2
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +3 -2
  6. package/client.d.ts.map +1 -1
  7. package/client.js +2 -2
  8. package/client.js.map +1 -1
  9. package/client.mjs +1 -1
  10. package/client.mjs.map +1 -1
  11. package/index.d.mts +1 -0
  12. package/index.d.ts +1 -0
  13. package/index.js +2 -0
  14. package/index.js.map +1 -1
  15. package/index.mjs +1 -0
  16. package/internal/tslib.js +22 -22
  17. package/package.json +4 -2
  18. package/resources/android-instances-helpers.d.mts +30 -0
  19. package/resources/android-instances-helpers.d.mts.map +1 -0
  20. package/resources/android-instances-helpers.d.ts +30 -0
  21. package/resources/android-instances-helpers.d.ts.map +1 -0
  22. package/resources/android-instances-helpers.js +129 -0
  23. package/resources/android-instances-helpers.js.map +1 -0
  24. package/resources/android-instances-helpers.mjs +123 -0
  25. package/resources/android-instances-helpers.mjs.map +1 -0
  26. package/resources/assets-helpers.d.mts +22 -0
  27. package/resources/assets-helpers.d.mts.map +1 -0
  28. package/resources/assets-helpers.d.ts +22 -0
  29. package/resources/assets-helpers.d.ts.map +1 -0
  30. package/resources/assets-helpers.js +41 -0
  31. package/resources/assets-helpers.js.map +1 -0
  32. package/resources/assets-helpers.mjs +37 -0
  33. package/resources/assets-helpers.mjs.map +1 -0
  34. package/resources/assets.d.mts +12 -2
  35. package/resources/assets.d.mts.map +1 -1
  36. package/resources/assets.d.ts +12 -2
  37. package/resources/assets.d.ts.map +1 -1
  38. package/resources/index.d.mts +2 -1
  39. package/resources/index.d.mts.map +1 -1
  40. package/resources/index.d.ts +2 -1
  41. package/resources/index.d.ts.map +1 -1
  42. package/resources/index.js +2 -0
  43. package/resources/index.js.map +1 -1
  44. package/resources/index.mjs +1 -0
  45. package/resources/index.mjs.map +1 -1
  46. package/src/client.ts +5 -1
  47. package/src/index.ts +2 -0
  48. package/src/resources/android-instances-helpers.ts +159 -0
  49. package/src/resources/assets-helpers.ts +63 -0
  50. package/src/resources/assets.ts +17 -1
  51. package/src/resources/index.ts +3 -0
  52. package/src/version.ts +1 -1
  53. package/version.d.mts +1 -1
  54. package/version.d.ts +1 -1
  55. package/version.js +1 -1
  56. package/version.mjs +1 -1
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startAdbTunnel = void 0;
4
+ exports.startTcpProxy = startTcpProxy;
5
+ const tslib_1 = require("../internal/tslib.js");
6
+ const child_process_1 = require("child_process");
7
+ const net = tslib_1.__importStar(require("net"));
8
+ const ws_1 = require("ws");
9
+ /**
10
+ * Opens a WebSocket TCP proxy for the ADB port and connects the local adb
11
+ * client to it.
12
+ */
13
+ const startAdbTunnel = async (androidInstance, hostname, port) => {
14
+ if (!androidInstance.status.adbWebSocketUrl) {
15
+ throw new Error('ADB WebSocket URL is not available');
16
+ }
17
+ const { address, close } = await startTcpProxy(androidInstance.status.adbWebSocketUrl, androidInstance.status.token, hostname ?? '127.0.0.1', port ?? 0);
18
+ try {
19
+ await new Promise((resolve, reject) => {
20
+ (0, child_process_1.exec)(`adb connect ${address.address}:${address.port}`, (err) => {
21
+ if (err)
22
+ return reject(err);
23
+ resolve();
24
+ });
25
+ });
26
+ }
27
+ catch (err) {
28
+ close();
29
+ throw err;
30
+ }
31
+ return { address, close };
32
+ };
33
+ exports.startAdbTunnel = startAdbTunnel;
34
+ /**
35
+ * Starts a one-shot TCP → WebSocket proxy.
36
+ *
37
+ * The function creates a local TCP server that listens on an ephemeral port on
38
+ * 127.0.0.1. As soon as the **first** TCP client connects the server stops
39
+ * accepting further connections and forwards all traffic between that client
40
+ * and `remoteURL` through an authenticated WebSocket. If you need to proxy
41
+ * more than one TCP connection, call `startTcpProxy` again to create a new
42
+ * proxy instance.
43
+ *
44
+ * @param remoteURL Remote WebSocket endpoint (e.g. wss://example.com/instance)
45
+ * @param token Bearer token sent as `Authorization` header
46
+ * @param hostname Optional IP address to listen on. Default is 127.0.0.1
47
+ * @param port Optional port number to listen on. Default is to ask Node.js
48
+ * to find an available non-privileged port.
49
+ */
50
+ async function startTcpProxy(remoteURL, token, hostname, port) {
51
+ return new Promise((resolve, reject) => {
52
+ const server = net.createServer();
53
+ let ws;
54
+ let pingInterval;
55
+ // close helper
56
+ const close = () => {
57
+ if (pingInterval) {
58
+ clearInterval(pingInterval);
59
+ pingInterval = undefined;
60
+ }
61
+ if (ws && ws.readyState === ws_1.WebSocket.OPEN) {
62
+ ws.close(1000, 'close');
63
+ }
64
+ if (server.listening) {
65
+ server.close();
66
+ }
67
+ };
68
+ // No AbortController support – proxy can be closed via the returned handle
69
+ // TCP server error
70
+ server.once('error', (err) => {
71
+ close();
72
+ reject(new Error(`TCP server error: ${err.message}`));
73
+ });
74
+ // Listening
75
+ server.once('listening', () => {
76
+ const address = server.address();
77
+ if (!address || typeof address === 'string') {
78
+ close();
79
+ return reject(new Error('Failed to obtain listening address'));
80
+ }
81
+ resolve({ address, close });
82
+ });
83
+ // On first TCP connection
84
+ server.on('connection', (tcpSocket) => {
85
+ // Single-connection proxy
86
+ server.close();
87
+ ws = new ws_1.WebSocket(remoteURL, {
88
+ headers: { Authorization: `Bearer ${token}` },
89
+ perMessageDeflate: false,
90
+ });
91
+ // WebSocket error
92
+ ws.once('error', (err) => {
93
+ console.error('WebSocket error:', err);
94
+ tcpSocket.destroy();
95
+ close();
96
+ });
97
+ ws.once('open', () => {
98
+ const socket = ws; // non-undefined after open
99
+ pingInterval = setInterval(() => {
100
+ if (socket.readyState === ws_1.WebSocket.OPEN) {
101
+ socket.ping();
102
+ }
103
+ }, 30000);
104
+ // TCP → WS
105
+ tcpSocket.on('data', (chunk) => {
106
+ if (socket.readyState === ws_1.WebSocket.OPEN) {
107
+ socket.send(chunk);
108
+ }
109
+ });
110
+ // WS → TCP
111
+ socket.on('message', (data) => {
112
+ if (!tcpSocket.destroyed) {
113
+ tcpSocket.write(data);
114
+ }
115
+ });
116
+ });
117
+ // Mutual close
118
+ tcpSocket.on('close', close);
119
+ tcpSocket.on('error', (err) => {
120
+ console.error('TCP socket error:', err);
121
+ close();
122
+ });
123
+ ws.on('close', () => tcpSocket.destroy());
124
+ });
125
+ // Start listening
126
+ server.listen(port, hostname);
127
+ });
128
+ }
129
+ //# sourceMappingURL=android-instances-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-instances-helpers.js","sourceRoot":"","sources":["../src/resources/android-instances-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import { exec } from 'child_process';
2
+ import * as net from 'net';
3
+ import { WebSocket } from 'ws';
4
+ /**
5
+ * Opens a WebSocket TCP proxy for the ADB port and connects the local adb
6
+ * client to it.
7
+ */
8
+ export const startAdbTunnel = async (androidInstance, hostname, port) => {
9
+ if (!androidInstance.status.adbWebSocketUrl) {
10
+ throw new Error('ADB WebSocket URL is not available');
11
+ }
12
+ const { address, close } = await startTcpProxy(androidInstance.status.adbWebSocketUrl, androidInstance.status.token, hostname ?? '127.0.0.1', port ?? 0);
13
+ try {
14
+ await new Promise((resolve, reject) => {
15
+ exec(`adb connect ${address.address}:${address.port}`, (err) => {
16
+ if (err)
17
+ return reject(err);
18
+ resolve();
19
+ });
20
+ });
21
+ }
22
+ catch (err) {
23
+ close();
24
+ throw err;
25
+ }
26
+ return { address, close };
27
+ };
28
+ /**
29
+ * Starts a one-shot TCP → WebSocket proxy.
30
+ *
31
+ * The function creates a local TCP server that listens on an ephemeral port on
32
+ * 127.0.0.1. As soon as the **first** TCP client connects the server stops
33
+ * accepting further connections and forwards all traffic between that client
34
+ * and `remoteURL` through an authenticated WebSocket. If you need to proxy
35
+ * more than one TCP connection, call `startTcpProxy` again to create a new
36
+ * proxy instance.
37
+ *
38
+ * @param remoteURL Remote WebSocket endpoint (e.g. wss://example.com/instance)
39
+ * @param token Bearer token sent as `Authorization` header
40
+ * @param hostname Optional IP address to listen on. Default is 127.0.0.1
41
+ * @param port Optional port number to listen on. Default is to ask Node.js
42
+ * to find an available non-privileged port.
43
+ */
44
+ export async function startTcpProxy(remoteURL, token, hostname, port) {
45
+ return new Promise((resolve, reject) => {
46
+ const server = net.createServer();
47
+ let ws;
48
+ let pingInterval;
49
+ // close helper
50
+ const close = () => {
51
+ if (pingInterval) {
52
+ clearInterval(pingInterval);
53
+ pingInterval = undefined;
54
+ }
55
+ if (ws && ws.readyState === WebSocket.OPEN) {
56
+ ws.close(1000, 'close');
57
+ }
58
+ if (server.listening) {
59
+ server.close();
60
+ }
61
+ };
62
+ // No AbortController support – proxy can be closed via the returned handle
63
+ // TCP server error
64
+ server.once('error', (err) => {
65
+ close();
66
+ reject(new Error(`TCP server error: ${err.message}`));
67
+ });
68
+ // Listening
69
+ server.once('listening', () => {
70
+ const address = server.address();
71
+ if (!address || typeof address === 'string') {
72
+ close();
73
+ return reject(new Error('Failed to obtain listening address'));
74
+ }
75
+ resolve({ address, close });
76
+ });
77
+ // On first TCP connection
78
+ server.on('connection', (tcpSocket) => {
79
+ // Single-connection proxy
80
+ server.close();
81
+ ws = new WebSocket(remoteURL, {
82
+ headers: { Authorization: `Bearer ${token}` },
83
+ perMessageDeflate: false,
84
+ });
85
+ // WebSocket error
86
+ ws.once('error', (err) => {
87
+ console.error('WebSocket error:', err);
88
+ tcpSocket.destroy();
89
+ close();
90
+ });
91
+ ws.once('open', () => {
92
+ const socket = ws; // non-undefined after open
93
+ pingInterval = setInterval(() => {
94
+ if (socket.readyState === WebSocket.OPEN) {
95
+ socket.ping();
96
+ }
97
+ }, 30000);
98
+ // TCP → WS
99
+ tcpSocket.on('data', (chunk) => {
100
+ if (socket.readyState === WebSocket.OPEN) {
101
+ socket.send(chunk);
102
+ }
103
+ });
104
+ // WS → TCP
105
+ socket.on('message', (data) => {
106
+ if (!tcpSocket.destroyed) {
107
+ tcpSocket.write(data);
108
+ }
109
+ });
110
+ });
111
+ // Mutual close
112
+ tcpSocket.on('close', close);
113
+ tcpSocket.on('error', (err) => {
114
+ console.error('TCP socket error:', err);
115
+ close();
116
+ });
117
+ ws.on('close', () => tcpSocket.destroy());
118
+ });
119
+ // Start listening
120
+ server.listen(port, hostname);
121
+ });
122
+ }
123
+ //# sourceMappingURL=android-instances-helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-instances-helpers.mjs","sourceRoot":"","sources":["../src/resources/android-instances-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { RequestOptions } from "../internal/request-options.mjs";
2
+ import { Assets as GeneratedAssets } from "./assets.mjs";
3
+ export interface AssetGetOrUploadParams {
4
+ /**
5
+ * The path to the file to upload.
6
+ */
7
+ path: string;
8
+ /**
9
+ * The name for the asset. Defaults to the name of the file given in the filePath parameter.
10
+ */
11
+ name?: string;
12
+ }
13
+ export interface AssetGetOrUploadResponse {
14
+ id: string;
15
+ name: string;
16
+ signedDownloadUrl: string;
17
+ md5: string;
18
+ }
19
+ export declare class Assets extends GeneratedAssets {
20
+ getOrUpload(body: AssetGetOrUploadParams, options?: RequestOptions): Promise<AssetGetOrUploadResponse>;
21
+ }
22
+ //# sourceMappingURL=assets-helpers.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-helpers.d.mts","sourceRoot":"","sources":["../src/resources/assets-helpers.ts"],"names":[],"mappings":"OAAO,EAAE,cAAc,EAAE;OAClB,EAAE,MAAM,IAAI,eAAe,EAAE;AAEpC,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,MAAO,SAAQ,eAAe;IACnC,WAAW,CACf,IAAI,EAAE,sBAAsB,EAC5B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,wBAAwB,CAAC;CAoCrC"}
@@ -0,0 +1,22 @@
1
+ import { RequestOptions } from "../internal/request-options.js";
2
+ import { Assets as GeneratedAssets } from "./assets.js";
3
+ export interface AssetGetOrUploadParams {
4
+ /**
5
+ * The path to the file to upload.
6
+ */
7
+ path: string;
8
+ /**
9
+ * The name for the asset. Defaults to the name of the file given in the filePath parameter.
10
+ */
11
+ name?: string;
12
+ }
13
+ export interface AssetGetOrUploadResponse {
14
+ id: string;
15
+ name: string;
16
+ signedDownloadUrl: string;
17
+ md5: string;
18
+ }
19
+ export declare class Assets extends GeneratedAssets {
20
+ getOrUpload(body: AssetGetOrUploadParams, options?: RequestOptions): Promise<AssetGetOrUploadResponse>;
21
+ }
22
+ //# sourceMappingURL=assets-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-helpers.d.ts","sourceRoot":"","sources":["../src/resources/assets-helpers.ts"],"names":[],"mappings":"OAAO,EAAE,cAAc,EAAE;OAClB,EAAE,MAAM,IAAI,eAAe,EAAE;AAEpC,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,MAAO,SAAQ,eAAe;IACnC,WAAW,CACf,IAAI,EAAE,sBAAsB,EAC5B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,wBAAwB,CAAC;CAoCrC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Assets = void 0;
4
+ const assets_1 = require("./assets.js");
5
+ class Assets extends assets_1.Assets {
6
+ async getOrUpload(body, options) {
7
+ const { crypto, fs, path } = globalThis;
8
+ const creationResponse = await this.getOrCreate({
9
+ name: body.name ?? path.basename(body.path),
10
+ }, options);
11
+ const data = await fs.promises.readFile(body.path);
12
+ const md5 = crypto.createHash('md5').update(data).digest('hex');
13
+ if (creationResponse.md5 && creationResponse.md5 === md5) {
14
+ return {
15
+ id: creationResponse.id,
16
+ name: creationResponse.name,
17
+ signedDownloadUrl: creationResponse.signedDownloadUrl,
18
+ md5: creationResponse.md5,
19
+ };
20
+ }
21
+ const uploadResponse = await fetch(creationResponse.signedUploadUrl, {
22
+ headers: {
23
+ 'Content-Length': data.length.toString(),
24
+ 'Content-Type': 'application/octet-stream',
25
+ },
26
+ method: 'PUT',
27
+ body: data,
28
+ });
29
+ if (uploadResponse.status !== 200) {
30
+ throw new Error(`Failed to upload asset: ${uploadResponse.status} ${await uploadResponse.text()}`);
31
+ }
32
+ return {
33
+ id: creationResponse.id,
34
+ name: creationResponse.name,
35
+ signedDownloadUrl: creationResponse.signedDownloadUrl,
36
+ md5,
37
+ };
38
+ }
39
+ }
40
+ exports.Assets = Assets;
41
+ //# sourceMappingURL=assets-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-helpers.js","sourceRoot":"","sources":["../src/resources/assets-helpers.ts"],"names":[],"mappings":";;;AACA,wCAAqD;AAqBrD,MAAa,MAAO,SAAQ,eAAe;IACzC,KAAK,CAAC,WAAW,CACf,IAA4B,EAC5B,OAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,UAAiB,CAAC;QAC/C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW,CAC7C;YACE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5C,EACD,OAAO,CACR,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,gBAAgB,CAAC,GAAG,IAAI,gBAAgB,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACzD,OAAO;gBACL,EAAE,EAAE,gBAAgB,CAAC,EAAE;gBACvB,IAAI,EAAE,gBAAgB,CAAC,IAAI;gBAC3B,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB;gBACrD,GAAG,EAAE,gBAAgB,CAAC,GAAG;aAC1B,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE;YACnE,OAAO,EAAE;gBACP,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACxC,cAAc,EAAE,0BAA0B;aAC3C;YACD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,cAAc,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,CAAC,MAAM,IAAI,MAAM,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,OAAO;YACL,EAAE,EAAE,gBAAgB,CAAC,EAAE;YACvB,IAAI,EAAE,gBAAgB,CAAC,IAAI;YAC3B,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB;YACrD,GAAG;SACJ,CAAC;IACJ,CAAC;CACF;AAxCD,wBAwCC"}
@@ -0,0 +1,37 @@
1
+ import { Assets as GeneratedAssets } from "./assets.mjs";
2
+ export class Assets extends GeneratedAssets {
3
+ async getOrUpload(body, options) {
4
+ const { crypto, fs, path } = globalThis;
5
+ const creationResponse = await this.getOrCreate({
6
+ name: body.name ?? path.basename(body.path),
7
+ }, options);
8
+ const data = await fs.promises.readFile(body.path);
9
+ const md5 = crypto.createHash('md5').update(data).digest('hex');
10
+ if (creationResponse.md5 && creationResponse.md5 === md5) {
11
+ return {
12
+ id: creationResponse.id,
13
+ name: creationResponse.name,
14
+ signedDownloadUrl: creationResponse.signedDownloadUrl,
15
+ md5: creationResponse.md5,
16
+ };
17
+ }
18
+ const uploadResponse = await fetch(creationResponse.signedUploadUrl, {
19
+ headers: {
20
+ 'Content-Length': data.length.toString(),
21
+ 'Content-Type': 'application/octet-stream',
22
+ },
23
+ method: 'PUT',
24
+ body: data,
25
+ });
26
+ if (uploadResponse.status !== 200) {
27
+ throw new Error(`Failed to upload asset: ${uploadResponse.status} ${await uploadResponse.text()}`);
28
+ }
29
+ return {
30
+ id: creationResponse.id,
31
+ name: creationResponse.name,
32
+ signedDownloadUrl: creationResponse.signedDownloadUrl,
33
+ md5,
34
+ };
35
+ }
36
+ }
37
+ //# sourceMappingURL=assets-helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-helpers.mjs","sourceRoot":"","sources":["../src/resources/assets-helpers.ts"],"names":[],"mappings":"OACO,EAAE,MAAM,IAAI,eAAe,EAAE;AAqBpC,MAAM,OAAO,MAAO,SAAQ,eAAe;IACzC,KAAK,CAAC,WAAW,CACf,IAA4B,EAC5B,OAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,UAAiB,CAAC;QAC/C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW,CAC7C;YACE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5C,EACD,OAAO,CACR,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,gBAAgB,CAAC,GAAG,IAAI,gBAAgB,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACzD,OAAO;gBACL,EAAE,EAAE,gBAAgB,CAAC,EAAE;gBACvB,IAAI,EAAE,gBAAgB,CAAC,IAAI;gBAC3B,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB;gBACrD,GAAG,EAAE,gBAAgB,CAAC,GAAG;aAC1B,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE;YACnE,OAAO,EAAE;gBACP,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACxC,cAAc,EAAE,0BAA0B;aAC3C;YACD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,cAAc,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,CAAC,MAAM,IAAI,MAAM,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,OAAO;YACL,EAAE,EAAE,gBAAgB,CAAC,EAAE;YACvB,IAAI,EAAE,gBAAgB,CAAC,IAAI;YAC3B,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB;YACrD,GAAG;SACJ,CAAC;IACJ,CAAC;CACF"}
@@ -18,7 +18,7 @@ export declare class Assets extends APIResource {
18
18
  * is no corresponding file in the storage so downloading it directly or using it
19
19
  * in instances will fail until you use the returned upload URL to submit the file.
20
20
  */
21
- getOrCreate(body: AssetGetOrCreateParams, options?: RequestOptions): APIPromise<Asset>;
21
+ getOrCreate(body: AssetGetOrCreateParams, options?: RequestOptions): APIPromise<AssetGetOrCreateResponse>;
22
22
  }
23
23
  export interface Asset {
24
24
  id: string;
@@ -31,6 +31,16 @@ export interface Asset {
31
31
  signedUploadUrl?: string;
32
32
  }
33
33
  export type AssetListResponse = Array<Asset>;
34
+ export interface AssetGetOrCreateResponse {
35
+ id: string;
36
+ name: string;
37
+ signedDownloadUrl: string;
38
+ signedUploadUrl: string;
39
+ /**
40
+ * Returned only if there is a corresponding file uploaded already.
41
+ */
42
+ md5?: string;
43
+ }
34
44
  export interface AssetListParams {
35
45
  /**
36
46
  * Toggles whether a download URL should be included in the response
@@ -63,6 +73,6 @@ export interface AssetGetOrCreateParams {
63
73
  name: string;
64
74
  }
65
75
  export declare namespace Assets {
66
- export { type Asset as Asset, type AssetListResponse as AssetListResponse, type AssetListParams as AssetListParams, type AssetGetParams as AssetGetParams, type AssetGetOrCreateParams as AssetGetOrCreateParams, };
76
+ export { type Asset as Asset, type AssetListResponse as AssetListResponse, type AssetGetOrCreateResponse as AssetGetOrCreateResponse, type AssetListParams as AssetListParams, type AssetGetParams as AssetGetParams, type AssetGetOrCreateParams as AssetGetOrCreateParams, };
67
77
  }
68
78
  //# sourceMappingURL=assets.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.mts","sourceRoot":"","sources":["../src/resources/assets.ts"],"names":[],"mappings":"OAEO,EAAE,WAAW,EAAE;OACf,EAAE,UAAU,EAAE;OACd,EAAE,cAAc,EAAE;AAGzB,qBAAa,MAAO,SAAQ,WAAW;IACrC;;;OAGG;IACH,IAAI,CACF,KAAK,GAAE,eAAe,GAAG,IAAI,GAAG,SAAc,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,iBAAiB,CAAC;IAIhC;;OAEG;IACH,GAAG,CACD,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,cAAc,GAAG,IAAI,GAAG,SAAc,EAC7C,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,KAAK,CAAC;IAIpB;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;CAGvF;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,OAAO,EACL,KAAK,KAAK,IAAI,KAAK,EACnB,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,eAAe,IAAI,eAAe,EACvC,KAAK,cAAc,IAAI,cAAc,EACrC,KAAK,sBAAsB,IAAI,sBAAsB,GACtD,CAAC;CACH"}
1
+ {"version":3,"file":"assets.d.mts","sourceRoot":"","sources":["../src/resources/assets.ts"],"names":[],"mappings":"OAEO,EAAE,WAAW,EAAE;OACf,EAAE,UAAU,EAAE;OACd,EAAE,cAAc,EAAE;AAGzB,qBAAa,MAAO,SAAQ,WAAW;IACrC;;;OAGG;IACH,IAAI,CACF,KAAK,GAAE,eAAe,GAAG,IAAI,GAAG,SAAc,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,iBAAiB,CAAC;IAIhC;;OAEG;IACH,GAAG,CACD,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,cAAc,GAAG,IAAI,GAAG,SAAc,EAC7C,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,KAAK,CAAC;IAIpB;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,wBAAwB,CAAC;CAG1G;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAE7C,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb,iBAAiB,EAAE,MAAM,CAAC;IAE1B,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,OAAO,EACL,KAAK,KAAK,IAAI,KAAK,EACnB,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,eAAe,IAAI,eAAe,EACvC,KAAK,cAAc,IAAI,cAAc,EACrC,KAAK,sBAAsB,IAAI,sBAAsB,GACtD,CAAC;CACH"}
@@ -18,7 +18,7 @@ export declare class Assets extends APIResource {
18
18
  * is no corresponding file in the storage so downloading it directly or using it
19
19
  * in instances will fail until you use the returned upload URL to submit the file.
20
20
  */
21
- getOrCreate(body: AssetGetOrCreateParams, options?: RequestOptions): APIPromise<Asset>;
21
+ getOrCreate(body: AssetGetOrCreateParams, options?: RequestOptions): APIPromise<AssetGetOrCreateResponse>;
22
22
  }
23
23
  export interface Asset {
24
24
  id: string;
@@ -31,6 +31,16 @@ export interface Asset {
31
31
  signedUploadUrl?: string;
32
32
  }
33
33
  export type AssetListResponse = Array<Asset>;
34
+ export interface AssetGetOrCreateResponse {
35
+ id: string;
36
+ name: string;
37
+ signedDownloadUrl: string;
38
+ signedUploadUrl: string;
39
+ /**
40
+ * Returned only if there is a corresponding file uploaded already.
41
+ */
42
+ md5?: string;
43
+ }
34
44
  export interface AssetListParams {
35
45
  /**
36
46
  * Toggles whether a download URL should be included in the response
@@ -63,6 +73,6 @@ export interface AssetGetOrCreateParams {
63
73
  name: string;
64
74
  }
65
75
  export declare namespace Assets {
66
- export { type Asset as Asset, type AssetListResponse as AssetListResponse, type AssetListParams as AssetListParams, type AssetGetParams as AssetGetParams, type AssetGetOrCreateParams as AssetGetOrCreateParams, };
76
+ export { type Asset as Asset, type AssetListResponse as AssetListResponse, type AssetGetOrCreateResponse as AssetGetOrCreateResponse, type AssetListParams as AssetListParams, type AssetGetParams as AssetGetParams, type AssetGetOrCreateParams as AssetGetOrCreateParams, };
67
77
  }
68
78
  //# sourceMappingURL=assets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../src/resources/assets.ts"],"names":[],"mappings":"OAEO,EAAE,WAAW,EAAE;OACf,EAAE,UAAU,EAAE;OACd,EAAE,cAAc,EAAE;AAGzB,qBAAa,MAAO,SAAQ,WAAW;IACrC;;;OAGG;IACH,IAAI,CACF,KAAK,GAAE,eAAe,GAAG,IAAI,GAAG,SAAc,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,iBAAiB,CAAC;IAIhC;;OAEG;IACH,GAAG,CACD,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,cAAc,GAAG,IAAI,GAAG,SAAc,EAC7C,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,KAAK,CAAC;IAIpB;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;CAGvF;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,OAAO,EACL,KAAK,KAAK,IAAI,KAAK,EACnB,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,eAAe,IAAI,eAAe,EACvC,KAAK,cAAc,IAAI,cAAc,EACrC,KAAK,sBAAsB,IAAI,sBAAsB,GACtD,CAAC;CACH"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../src/resources/assets.ts"],"names":[],"mappings":"OAEO,EAAE,WAAW,EAAE;OACf,EAAE,UAAU,EAAE;OACd,EAAE,cAAc,EAAE;AAGzB,qBAAa,MAAO,SAAQ,WAAW;IACrC;;;OAGG;IACH,IAAI,CACF,KAAK,GAAE,eAAe,GAAG,IAAI,GAAG,SAAc,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,iBAAiB,CAAC;IAIhC;;OAEG;IACH,GAAG,CACD,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,cAAc,GAAG,IAAI,GAAG,SAAc,EAC7C,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,KAAK,CAAC;IAIpB;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,wBAAwB,CAAC;CAG1G;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAE7C,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb,iBAAiB,EAAE,MAAM,CAAC;IAE1B,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,OAAO,EACL,KAAK,KAAK,IAAI,KAAK,EACnB,KAAK,iBAAiB,IAAI,iBAAiB,EAC3C,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,eAAe,IAAI,eAAe,EACvC,KAAK,cAAc,IAAI,cAAc,EACrC,KAAK,sBAAsB,IAAI,sBAAsB,GACtD,CAAC;CACH"}
@@ -1,3 +1,4 @@
1
1
  export { AndroidInstances, type AndroidInstance, type AndroidInstanceState, type AndroidInstanceListResponse, type AndroidInstanceCreateParams, type AndroidInstanceListParams, } from "./android-instances.mjs";
2
- export { Assets, type Asset, type AssetListResponse, type AssetListParams, type AssetGetParams, type AssetGetOrCreateParams, } from "./assets.mjs";
2
+ export { Assets, type Asset, type AssetListResponse, type AssetGetOrCreateResponse, type AssetListParams, type AssetGetParams, type AssetGetOrCreateParams, } from "./assets.mjs";
3
+ export * from "./assets-helpers.mjs";
3
4
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"OAEO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,GAC/B;OACM,EACL,MAAM,EACN,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"OAEO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,GAC/B;OACM,EACL,MAAM,EACN,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B"}
@@ -1,3 +1,4 @@
1
1
  export { AndroidInstances, type AndroidInstance, type AndroidInstanceState, type AndroidInstanceListResponse, type AndroidInstanceCreateParams, type AndroidInstanceListParams, } from "./android-instances.js";
2
- export { Assets, type Asset, type AssetListResponse, type AssetListParams, type AssetGetParams, type AssetGetOrCreateParams, } from "./assets.js";
2
+ export { Assets, type Asset, type AssetListResponse, type AssetGetOrCreateResponse, type AssetListParams, type AssetGetParams, type AssetGetOrCreateParams, } from "./assets.js";
3
+ export * from "./assets-helpers.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"OAEO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,GAC/B;OACM,EACL,MAAM,EACN,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"OAEO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,GAC/B;OACM,EACL,MAAM,EACN,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B"}
@@ -2,8 +2,10 @@
2
2
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.Assets = exports.AndroidInstances = void 0;
5
+ const tslib_1 = require("../internal/tslib.js");
5
6
  var android_instances_1 = require("./android-instances.js");
6
7
  Object.defineProperty(exports, "AndroidInstances", { enumerable: true, get: function () { return android_instances_1.AndroidInstances; } });
7
8
  var assets_1 = require("./assets.js");
8
9
  Object.defineProperty(exports, "Assets", { enumerable: true, get: function () { return assets_1.Assets; } });
10
+ tslib_1.__exportStar(require("./assets-helpers.js"), exports);
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,4DAO6B;AAN3B,qHAAA,gBAAgB,OAAA;AAOlB,sCAOkB;AANhB,gGAAA,MAAM,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;AAEtF,4DAO6B;AAN3B,qHAAA,gBAAgB,OAAA;AAOlB,sCAQkB;AAPhB,gGAAA,MAAM,OAAA;AASR,8DAAiC"}
@@ -1,4 +1,5 @@
1
1
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
  export { AndroidInstances, } from "./android-instances.mjs";
3
3
  export { Assets, } from "./assets.mjs";
4
+ export * from "./assets-helpers.mjs";
4
5
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EACL,gBAAgB,GAMjB;OACM,EACL,MAAM,GAMP"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EACL,gBAAgB,GAMjB;OACM,EACL,MAAM,GAOP"}
package/src/client.ts CHANGED
@@ -27,11 +27,12 @@ import {
27
27
  import {
28
28
  Asset,
29
29
  AssetGetOrCreateParams,
30
+ AssetGetOrCreateResponse,
30
31
  AssetGetParams,
31
32
  AssetListParams,
32
33
  AssetListResponse,
33
- Assets,
34
34
  } from './resources/assets';
35
+ import { Assets, AssetGetOrUploadParams, AssetGetOrUploadResponse } from './resources/assets-helpers';
35
36
  import { type Fetch } from './internal/builtin-types';
36
37
  import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';
37
38
  import { FinalRequestOptions, RequestOptions } from './internal/request-options';
@@ -752,8 +753,11 @@ export declare namespace Limrun {
752
753
  Assets as Assets,
753
754
  type Asset as Asset,
754
755
  type AssetListResponse as AssetListResponse,
756
+ type AssetGetOrCreateResponse as AssetGetOrCreateResponse,
755
757
  type AssetListParams as AssetListParams,
756
758
  type AssetGetParams as AssetGetParams,
757
759
  type AssetGetOrCreateParams as AssetGetOrCreateParams,
760
+ type AssetGetOrUploadParams as AssetGetOrUploadParams,
761
+ type AssetGetOrUploadResponse as AssetGetOrUploadResponse,
758
762
  };
759
763
  }
package/src/index.ts CHANGED
@@ -20,3 +20,5 @@ export {
20
20
  PermissionDeniedError,
21
21
  UnprocessableEntityError,
22
22
  } from './core/error';
23
+
24
+ export * from './resources/android-instances-helpers';