72 lines
3.0 KiB
JavaScript
72 lines
3.0 KiB
JavaScript
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
var _APIPromise_client;
|
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "../internal/tslib.mjs";
|
|
import { defaultParseResponse, addRequestID, } from "../internal/parse.mjs";
|
|
/**
|
|
* A subclass of `Promise` providing additional helper methods
|
|
* for interacting with the SDK.
|
|
*/
|
|
export class APIPromise extends Promise {
|
|
constructor(client, responsePromise, parseResponse = defaultParseResponse) {
|
|
super((resolve) => {
|
|
// this is maybe a bit weird but this has to be a no-op to not implicitly
|
|
// parse the response body; instead .then, .catch, .finally are overridden
|
|
// to parse the response
|
|
resolve(null);
|
|
});
|
|
this.responsePromise = responsePromise;
|
|
this.parseResponse = parseResponse;
|
|
_APIPromise_client.set(this, void 0);
|
|
__classPrivateFieldSet(this, _APIPromise_client, client, "f");
|
|
}
|
|
_thenUnwrap(transform) {
|
|
return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, "f"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));
|
|
}
|
|
/**
|
|
* Gets the raw `Response` instance instead of parsing the response
|
|
* data.
|
|
*
|
|
* If you want to parse the response body but still get the `Response`
|
|
* instance, you can use {@link withResponse()}.
|
|
*
|
|
* 👋 Getting the wrong TypeScript type for `Response`?
|
|
* Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]`
|
|
* to your `tsconfig.json`.
|
|
*/
|
|
asResponse() {
|
|
return this.responsePromise.then((p) => p.response);
|
|
}
|
|
/**
|
|
* Gets the parsed response data, the raw `Response` instance and the ID of the request,
|
|
* returned via the X-Request-ID header which is useful for debugging requests and reporting
|
|
* issues to OpenAI.
|
|
*
|
|
* If you just want to get the raw `Response` instance without parsing it,
|
|
* you can use {@link asResponse()}.
|
|
*
|
|
* 👋 Getting the wrong TypeScript type for `Response`?
|
|
* Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]`
|
|
* to your `tsconfig.json`.
|
|
*/
|
|
async withResponse() {
|
|
const [data, response] = await Promise.all([this.parse(), this.asResponse()]);
|
|
return { data, response, request_id: response.headers.get('x-request-id') };
|
|
}
|
|
parse() {
|
|
if (!this.parsedPromise) {
|
|
this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, "f"), data));
|
|
}
|
|
return this.parsedPromise;
|
|
}
|
|
then(onfulfilled, onrejected) {
|
|
return this.parse().then(onfulfilled, onrejected);
|
|
}
|
|
catch(onrejected) {
|
|
return this.parse().catch(onrejected);
|
|
}
|
|
finally(onfinally) {
|
|
return this.parse().finally(onfinally);
|
|
}
|
|
}
|
|
_APIPromise_client = new WeakMap();
|
|
//# sourceMappingURL=api-promise.mjs.map
|