Comparing version 0.11.1-beta.1 to 0.11.2-beta.1
# Changelog | ||
## 0.11.2-beta.1 (2024-01-17) | ||
Full Changelog: [v0.11.1-beta.1...v0.11.2-beta.1](https://github.com/stainless-sdks/sink-node-public/compare/v0.11.1-beta.1...v0.11.2-beta.1) | ||
### Bug Fixes | ||
* **types:** accept undefined for optional client options ([#338](https://github.com/stainless-sdks/sink-node-public/issues/338)) ([9d60a2a](https://github.com/stainless-sdks/sink-node-public/commit/9d60a2aed1451277223e0645ba7cfd55a783365f)) | ||
### Chores | ||
* **internal:** debug logging for retries; speculative retry-after-ms support ([#336](https://github.com/stainless-sdks/sink-node-public/issues/336)) ([9e87865](https://github.com/stainless-sdks/sink-node-public/commit/9e8786596e3be92414065575124c256639344d1c)) | ||
## 0.11.1-beta.1 (2024-01-17) | ||
@@ -4,0 +17,0 @@ |
24
core.js
@@ -288,2 +288,4 @@ "use strict"; | ||
if (retriesRemaining && this.shouldRetry(response)) { | ||
const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; | ||
debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders); | ||
return this.retryRequest(options, retriesRemaining, responseHeaders); | ||
@@ -294,3 +296,4 @@ } | ||
const errMessage = errJSON ? undefined : errText; | ||
debug('response', response.status, url, responseHeaders, errMessage); | ||
const retryMessage = retriesRemaining ? `(error; no more retries left)` : `(error; not retryable)`; | ||
debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders, errMessage); | ||
const err = this.makeStatusError(response.status, errJSON, errMessage, responseHeaders); | ||
@@ -370,7 +373,15 @@ throw err; | ||
async retryRequest(options, retriesRemaining, responseHeaders) { | ||
let timeoutMillis; | ||
// Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it. | ||
const retryAfterMillisHeader = responseHeaders?.['retry-after-ms']; | ||
if (retryAfterMillisHeader) { | ||
const timeoutMs = parseFloat(retryAfterMillisHeader); | ||
if (!Number.isNaN(timeoutMs)) { | ||
timeoutMillis = timeoutMs; | ||
} | ||
} | ||
// About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After | ||
let timeoutMillis; | ||
const retryAfterHeader = responseHeaders?.['retry-after']; | ||
if (retryAfterHeader) { | ||
const timeoutSeconds = parseInt(retryAfterHeader); | ||
if (retryAfterHeader && !timeoutMillis) { | ||
const timeoutSeconds = parseFloat(retryAfterHeader); | ||
if (!Number.isNaN(timeoutSeconds)) { | ||
@@ -385,6 +396,3 @@ timeoutMillis = timeoutSeconds * 1000; | ||
// just do what it says, but otherwise calculate a default | ||
if (!timeoutMillis || | ||
!Number.isInteger(timeoutMillis) || | ||
timeoutMillis <= 0 || | ||
timeoutMillis > 60 * 1000) { | ||
if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) { | ||
const maxRetries = options.maxRetries ?? this.maxRetries; | ||
@@ -391,0 +399,0 @@ timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); |
@@ -16,42 +16,42 @@ import * as Core from "./core.js"; | ||
*/ | ||
userToken?: string | null; | ||
userToken?: string | null | undefined; | ||
/** | ||
* Defaults to process.env['SINK_USER']. | ||
*/ | ||
username?: string; | ||
username?: string | undefined; | ||
/** | ||
* Defaults to process.env['SINK_CLIENT_ID']. | ||
*/ | ||
clientId?: string | null; | ||
clientId?: string | null | undefined; | ||
/** | ||
* Defaults to process.env['SINK_CLIENT_SECRET']. | ||
*/ | ||
clientSecret?: string | null; | ||
clientSecret?: string | null | undefined; | ||
/** | ||
* Defaults to process.env['SINK_SOME_BOOLEAN_ARG']. | ||
*/ | ||
someBooleanArg?: boolean | null; | ||
someBooleanArg?: boolean | null | undefined; | ||
/** | ||
* Defaults to process.env['SINK_SOME_INTEGER_ARG']. | ||
*/ | ||
someIntegerArg?: number | null; | ||
someIntegerArg?: number | null | undefined; | ||
/** | ||
* Defaults to process.env['SINK_SOME_NUMBER_ARG']. | ||
*/ | ||
someNumberArg?: number | null; | ||
someNumberArg?: number | null | undefined; | ||
/** | ||
* Defaults to process.env['SINK_SOME_NUMBER_ARG']. | ||
*/ | ||
someNumberArgRequired?: number; | ||
someNumberArgRequired?: number | undefined; | ||
/** | ||
* Defaults to process.env['SINK_SOME_NUMBER_ARG']. | ||
*/ | ||
someNumberArgRequiredNoDefault?: number; | ||
someNumberArgRequiredNoDefault?: number | undefined; | ||
someNumberArgRequiredNoDefaultNoEnv: number; | ||
requiredArgNoEnv: string; | ||
requiredArgNoEnvWithDefault?: string; | ||
clientPathParam?: string | null; | ||
camelCasePath?: string | null; | ||
clientQueryParam?: string | null; | ||
clientPathOrQueryParam?: string | null; | ||
requiredArgNoEnvWithDefault?: string | undefined; | ||
clientPathParam?: string | null | undefined; | ||
camelCasePath?: string | null | undefined; | ||
clientQueryParam?: string | null | undefined; | ||
clientPathOrQueryParam?: string | null | undefined; | ||
/** | ||
@@ -142,18 +142,18 @@ * Specifies the environment to use for the API. | ||
* | ||
* @param {string | null} [opts.userToken=process.env['SINK_CUSTOM_API_KEY_ENV'] ?? null] | ||
* @param {string} [opts.username=process.env['SINK_USER'] ?? undefined] | ||
* @param {string | null} [opts.clientId=process.env['SINK_CLIENT_ID'] ?? null] | ||
* @param {string | null} [opts.clientSecret=process.env['SINK_CLIENT_SECRET'] ?? hellosecret] | ||
* @param {boolean | null} [opts.someBooleanArg=process.env['SINK_SOME_BOOLEAN_ARG'] ?? true] | ||
* @param {number | null} [opts.someIntegerArg=process.env['SINK_SOME_INTEGER_ARG'] ?? 123] | ||
* @param {number | null} [opts.someNumberArg=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number} [opts.someNumberArgRequired=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number} [opts.someNumberArgRequiredNoDefault=process.env['SINK_SOME_NUMBER_ARG'] ?? undefined] | ||
* @param {string | null | undefined} [opts.userToken=process.env['SINK_CUSTOM_API_KEY_ENV'] ?? null] | ||
* @param {string | undefined} [opts.username=process.env['SINK_USER'] ?? undefined] | ||
* @param {string | null | undefined} [opts.clientId=process.env['SINK_CLIENT_ID'] ?? null] | ||
* @param {string | null | undefined} [opts.clientSecret=process.env['SINK_CLIENT_SECRET'] ?? hellosecret] | ||
* @param {boolean | null | undefined} [opts.someBooleanArg=process.env['SINK_SOME_BOOLEAN_ARG'] ?? true] | ||
* @param {number | null | undefined} [opts.someIntegerArg=process.env['SINK_SOME_INTEGER_ARG'] ?? 123] | ||
* @param {number | null | undefined} [opts.someNumberArg=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number | undefined} [opts.someNumberArgRequired=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number | undefined} [opts.someNumberArgRequiredNoDefault=process.env['SINK_SOME_NUMBER_ARG'] ?? undefined] | ||
* @param {number} opts.someNumberArgRequiredNoDefaultNoEnv | ||
* @param {string} opts.requiredArgNoEnv | ||
* @param {string} [opts.requiredArgNoEnvWithDefault=hi!] | ||
* @param {string | null} [opts.clientPathParam] | ||
* @param {string | null} [opts.camelCasePath] | ||
* @param {string | null} [opts.clientQueryParam] | ||
* @param {string | null} [opts.clientPathOrQueryParam] | ||
* @param {string | undefined} [opts.requiredArgNoEnvWithDefault=hi!] | ||
* @param {string | null | undefined} [opts.clientPathParam] | ||
* @param {string | null | undefined} [opts.camelCasePath] | ||
* @param {string | null | undefined} [opts.clientQueryParam] | ||
* @param {string | null | undefined} [opts.clientPathOrQueryParam] | ||
* @param {Environment} [opts.environment=production] - Specifies the environment URL to use for the API. | ||
@@ -160,0 +160,0 @@ * @param {string} [opts.baseURL=process.env['SINK_BASE_URL'] ?? https://demo.stainlessapi.com/] - Override the default base URL for the API. |
28
index.js
@@ -43,18 +43,18 @@ "use strict"; | ||
* | ||
* @param {string | null} [opts.userToken=process.env['SINK_CUSTOM_API_KEY_ENV'] ?? null] | ||
* @param {string} [opts.username=process.env['SINK_USER'] ?? undefined] | ||
* @param {string | null} [opts.clientId=process.env['SINK_CLIENT_ID'] ?? null] | ||
* @param {string | null} [opts.clientSecret=process.env['SINK_CLIENT_SECRET'] ?? hellosecret] | ||
* @param {boolean | null} [opts.someBooleanArg=process.env['SINK_SOME_BOOLEAN_ARG'] ?? true] | ||
* @param {number | null} [opts.someIntegerArg=process.env['SINK_SOME_INTEGER_ARG'] ?? 123] | ||
* @param {number | null} [opts.someNumberArg=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number} [opts.someNumberArgRequired=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number} [opts.someNumberArgRequiredNoDefault=process.env['SINK_SOME_NUMBER_ARG'] ?? undefined] | ||
* @param {string | null | undefined} [opts.userToken=process.env['SINK_CUSTOM_API_KEY_ENV'] ?? null] | ||
* @param {string | undefined} [opts.username=process.env['SINK_USER'] ?? undefined] | ||
* @param {string | null | undefined} [opts.clientId=process.env['SINK_CLIENT_ID'] ?? null] | ||
* @param {string | null | undefined} [opts.clientSecret=process.env['SINK_CLIENT_SECRET'] ?? hellosecret] | ||
* @param {boolean | null | undefined} [opts.someBooleanArg=process.env['SINK_SOME_BOOLEAN_ARG'] ?? true] | ||
* @param {number | null | undefined} [opts.someIntegerArg=process.env['SINK_SOME_INTEGER_ARG'] ?? 123] | ||
* @param {number | null | undefined} [opts.someNumberArg=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number | undefined} [opts.someNumberArgRequired=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number | undefined} [opts.someNumberArgRequiredNoDefault=process.env['SINK_SOME_NUMBER_ARG'] ?? undefined] | ||
* @param {number} opts.someNumberArgRequiredNoDefaultNoEnv | ||
* @param {string} opts.requiredArgNoEnv | ||
* @param {string} [opts.requiredArgNoEnvWithDefault=hi!] | ||
* @param {string | null} [opts.clientPathParam] | ||
* @param {string | null} [opts.camelCasePath] | ||
* @param {string | null} [opts.clientQueryParam] | ||
* @param {string | null} [opts.clientPathOrQueryParam] | ||
* @param {string | undefined} [opts.requiredArgNoEnvWithDefault=hi!] | ||
* @param {string | null | undefined} [opts.clientPathParam] | ||
* @param {string | null | undefined} [opts.camelCasePath] | ||
* @param {string | null | undefined} [opts.clientQueryParam] | ||
* @param {string | null | undefined} [opts.clientPathOrQueryParam] | ||
* @param {Environment} [opts.environment=production] - Specifies the environment URL to use for the API. | ||
@@ -61,0 +61,0 @@ * @param {string} [opts.baseURL=process.env['SINK_BASE_URL'] ?? https://demo.stainlessapi.com/] - Override the default base URL for the API. |
{ | ||
"name": "sink-npm", | ||
"version": "0.11.1-beta.1", | ||
"version": "0.11.2-beta.1", | ||
"description": "The official TypeScript library for the Sink API", | ||
@@ -5,0 +5,0 @@ "author": "Sink <dev@stainlessapi.com>", |
@@ -420,2 +420,4 @@ import { VERSION } from './version'; | ||
if (retriesRemaining && this.shouldRetry(response)) { | ||
const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; | ||
debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders); | ||
return this.retryRequest(options, retriesRemaining, responseHeaders); | ||
@@ -427,4 +429,5 @@ } | ||
const errMessage = errJSON ? undefined : errText; | ||
const retryMessage = retriesRemaining ? `(error; no more retries left)` : `(error; not retryable)`; | ||
debug('response', response.status, url, responseHeaders, errMessage); | ||
debug(`response (error; ${retryMessage})`, response.status, url, responseHeaders, errMessage); | ||
@@ -534,7 +537,17 @@ const err = this.makeStatusError(response.status, errJSON, errMessage, responseHeaders); | ||
): Promise<APIResponseProps> { | ||
let timeoutMillis: number | undefined; | ||
// Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it. | ||
const retryAfterMillisHeader = responseHeaders?.['retry-after-ms']; | ||
if (retryAfterMillisHeader) { | ||
const timeoutMs = parseFloat(retryAfterMillisHeader); | ||
if (!Number.isNaN(timeoutMs)) { | ||
timeoutMillis = timeoutMs; | ||
} | ||
} | ||
// About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After | ||
let timeoutMillis: number | undefined; | ||
const retryAfterHeader = responseHeaders?.['retry-after']; | ||
if (retryAfterHeader) { | ||
const timeoutSeconds = parseInt(retryAfterHeader); | ||
if (retryAfterHeader && !timeoutMillis) { | ||
const timeoutSeconds = parseFloat(retryAfterHeader); | ||
if (!Number.isNaN(timeoutSeconds)) { | ||
@@ -549,8 +562,3 @@ timeoutMillis = timeoutSeconds * 1000; | ||
// just do what it says, but otherwise calculate a default | ||
if ( | ||
!timeoutMillis || | ||
!Number.isInteger(timeoutMillis) || | ||
timeoutMillis <= 0 || | ||
timeoutMillis > 60 * 1000 | ||
) { | ||
if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) { | ||
const maxRetries = options.maxRetries ?? this.maxRetries; | ||
@@ -557,0 +565,0 @@ timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); |
@@ -21,3 +21,3 @@ // File generated from our OpenAPI spec by Stainless. | ||
*/ | ||
userToken?: string | null; | ||
userToken?: string | null | undefined; | ||
@@ -27,3 +27,3 @@ /** | ||
*/ | ||
username?: string; | ||
username?: string | undefined; | ||
@@ -33,3 +33,3 @@ /** | ||
*/ | ||
clientId?: string | null; | ||
clientId?: string | null | undefined; | ||
@@ -39,3 +39,3 @@ /** | ||
*/ | ||
clientSecret?: string | null; | ||
clientSecret?: string | null | undefined; | ||
@@ -45,3 +45,3 @@ /** | ||
*/ | ||
someBooleanArg?: boolean | null; | ||
someBooleanArg?: boolean | null | undefined; | ||
@@ -51,3 +51,3 @@ /** | ||
*/ | ||
someIntegerArg?: number | null; | ||
someIntegerArg?: number | null | undefined; | ||
@@ -57,3 +57,3 @@ /** | ||
*/ | ||
someNumberArg?: number | null; | ||
someNumberArg?: number | null | undefined; | ||
@@ -63,3 +63,3 @@ /** | ||
*/ | ||
someNumberArgRequired?: number; | ||
someNumberArgRequired?: number | undefined; | ||
@@ -69,3 +69,3 @@ /** | ||
*/ | ||
someNumberArgRequiredNoDefault?: number; | ||
someNumberArgRequiredNoDefault?: number | undefined; | ||
@@ -76,11 +76,11 @@ someNumberArgRequiredNoDefaultNoEnv: number; | ||
requiredArgNoEnvWithDefault?: string; | ||
requiredArgNoEnvWithDefault?: string | undefined; | ||
clientPathParam?: string | null; | ||
clientPathParam?: string | null | undefined; | ||
camelCasePath?: string | null; | ||
camelCasePath?: string | null | undefined; | ||
clientQueryParam?: string | null; | ||
clientQueryParam?: string | null | undefined; | ||
clientPathOrQueryParam?: string | null; | ||
clientPathOrQueryParam?: string | null | undefined; | ||
@@ -183,18 +183,18 @@ /** | ||
* | ||
* @param {string | null} [opts.userToken=process.env['SINK_CUSTOM_API_KEY_ENV'] ?? null] | ||
* @param {string} [opts.username=process.env['SINK_USER'] ?? undefined] | ||
* @param {string | null} [opts.clientId=process.env['SINK_CLIENT_ID'] ?? null] | ||
* @param {string | null} [opts.clientSecret=process.env['SINK_CLIENT_SECRET'] ?? hellosecret] | ||
* @param {boolean | null} [opts.someBooleanArg=process.env['SINK_SOME_BOOLEAN_ARG'] ?? true] | ||
* @param {number | null} [opts.someIntegerArg=process.env['SINK_SOME_INTEGER_ARG'] ?? 123] | ||
* @param {number | null} [opts.someNumberArg=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number} [opts.someNumberArgRequired=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number} [opts.someNumberArgRequiredNoDefault=process.env['SINK_SOME_NUMBER_ARG'] ?? undefined] | ||
* @param {string | null | undefined} [opts.userToken=process.env['SINK_CUSTOM_API_KEY_ENV'] ?? null] | ||
* @param {string | undefined} [opts.username=process.env['SINK_USER'] ?? undefined] | ||
* @param {string | null | undefined} [opts.clientId=process.env['SINK_CLIENT_ID'] ?? null] | ||
* @param {string | null | undefined} [opts.clientSecret=process.env['SINK_CLIENT_SECRET'] ?? hellosecret] | ||
* @param {boolean | null | undefined} [opts.someBooleanArg=process.env['SINK_SOME_BOOLEAN_ARG'] ?? true] | ||
* @param {number | null | undefined} [opts.someIntegerArg=process.env['SINK_SOME_INTEGER_ARG'] ?? 123] | ||
* @param {number | null | undefined} [opts.someNumberArg=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number | undefined} [opts.someNumberArgRequired=process.env['SINK_SOME_NUMBER_ARG'] ?? 1.2] | ||
* @param {number | undefined} [opts.someNumberArgRequiredNoDefault=process.env['SINK_SOME_NUMBER_ARG'] ?? undefined] | ||
* @param {number} opts.someNumberArgRequiredNoDefaultNoEnv | ||
* @param {string} opts.requiredArgNoEnv | ||
* @param {string} [opts.requiredArgNoEnvWithDefault=hi!] | ||
* @param {string | null} [opts.clientPathParam] | ||
* @param {string | null} [opts.camelCasePath] | ||
* @param {string | null} [opts.clientQueryParam] | ||
* @param {string | null} [opts.clientPathOrQueryParam] | ||
* @param {string | undefined} [opts.requiredArgNoEnvWithDefault=hi!] | ||
* @param {string | null | undefined} [opts.clientPathParam] | ||
* @param {string | null | undefined} [opts.camelCasePath] | ||
* @param {string | null | undefined} [opts.clientQueryParam] | ||
* @param {string | null | undefined} [opts.clientPathOrQueryParam] | ||
* @param {Environment} [opts.environment=production] - Specifies the environment URL to use for the API. | ||
@@ -201,0 +201,0 @@ * @param {string} [opts.baseURL=process.env['SINK_BASE_URL'] ?? https://demo.stainlessapi.com/] - Override the default base URL for the API. |
@@ -1,1 +0,1 @@ | ||
export const VERSION = '0.11.1-beta.1'; // x-release-please-version | ||
export const VERSION = '0.11.2-beta.1'; // x-release-please-version |
@@ -1,2 +0,2 @@ | ||
export declare const VERSION = "0.11.1-beta.1"; | ||
export declare const VERSION = "0.11.2-beta.1"; | ||
//# sourceMappingURL=version.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.VERSION = void 0; | ||
exports.VERSION = '0.11.1-beta.1'; // x-release-please-version | ||
exports.VERSION = '0.11.2-beta.1'; // x-release-please-version | ||
//# sourceMappingURL=version.js.map |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
AI-detected possible typosquat
Supply chain riskAI has identified this package as a potential typosquat of a more popular package. This suggests that the package may be intentionally mimicking another package's name, description, or other metadata.
Found 1 instance in 1 package
1626669
25664
5