@arizeai/phoenix-client 6.12.2 → 6.14.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.
- package/README.md +27 -0
- package/dist/esm/__generated__/api/v1.d.ts +669 -29
- package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
- package/dist/esm/authFetch.d.ts +30 -0
- package/dist/esm/authFetch.d.ts.map +1 -0
- package/dist/esm/authFetch.js +49 -0
- package/dist/esm/authFetch.js.map +1 -0
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +2 -2
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/errors.d.ts +15 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +22 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/spans/logSpans.d.ts.map +1 -1
- package/dist/esm/spans/logSpans.js +32 -9
- package/dist/esm/spans/logSpans.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/src/__generated__/api/v1.d.ts +669 -29
- package/dist/src/__generated__/api/v1.d.ts.map +1 -1
- package/dist/src/authFetch.d.ts +30 -0
- package/dist/src/authFetch.d.ts.map +1 -0
- package/dist/src/authFetch.js +52 -0
- package/dist/src/authFetch.js.map +1 -0
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +2 -2
- package/dist/src/client.js.map +1 -1
- package/dist/src/errors.d.ts +15 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +22 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/spans/logSpans.d.ts.map +1 -1
- package/dist/src/spans/logSpans.js +32 -9
- package/dist/src/spans/logSpans.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/overview.mdx +1 -0
- package/package.json +14 -13
- package/src/__generated__/api/v1.ts +669 -29
- package/src/authFetch.ts +87 -0
- package/src/client.ts +2 -4
- package/src/errors.ts +22 -0
- package/src/index.ts +2 -0
- package/src/spans/logSpans.ts +27 -4
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface AuthFetchOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Return an access token for a request.
|
|
4
|
+
*
|
|
5
|
+
* When `forceRefresh` is true, the previous token was rejected with a 401
|
|
6
|
+
* and the provider should refresh it before returning. Providers own token
|
|
7
|
+
* storage and refresh-token rotation.
|
|
8
|
+
*/
|
|
9
|
+
getAccessToken: (options: {
|
|
10
|
+
forceRefresh: boolean;
|
|
11
|
+
}) => string | Promise<string>;
|
|
12
|
+
/** Fetch implementation used to send requests. Defaults to global fetch. */
|
|
13
|
+
fetch?: typeof fetch;
|
|
14
|
+
/** Called when the request is still unauthorized after one refresh. */
|
|
15
|
+
onUnauthorized?: (response: Response) => void | Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a fetch implementation that supplies a bearer token and refreshes it
|
|
19
|
+
* after a 401 response.
|
|
20
|
+
*
|
|
21
|
+
* Refresh calls are coalesced so concurrent unauthorized requests rotate a
|
|
22
|
+
* refresh token only once. Each request is retried at most once.
|
|
23
|
+
*
|
|
24
|
+
* @param options - Authentication behavior for the fetch implementation.
|
|
25
|
+
* @param options.getAccessToken - Returns the current token or refreshes it.
|
|
26
|
+
* @param options.fetch - Fetch implementation used to send requests.
|
|
27
|
+
* @param options.onUnauthorized - Handles a second unauthorized response.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createAuthFetch({ getAccessToken, fetch: fetchImpl, onUnauthorized, }: AuthFetchOptions): typeof fetch;
|
|
30
|
+
//# sourceMappingURL=authFetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authFetch.d.ts","sourceRoot":"","sources":["../../src/authFetch.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE;QACxB,YAAY,EAAE,OAAO,CAAC;KACvB,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,uEAAuE;IACvE,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,cAAc,EACd,KAAK,EAAE,SAAiB,EACxB,cAAc,GACf,EAAE,gBAAgB,GAAG,OAAO,KAAK,CAyCjC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a fetch implementation that supplies a bearer token and refreshes it
|
|
3
|
+
* after a 401 response.
|
|
4
|
+
*
|
|
5
|
+
* Refresh calls are coalesced so concurrent unauthorized requests rotate a
|
|
6
|
+
* refresh token only once. Each request is retried at most once.
|
|
7
|
+
*
|
|
8
|
+
* @param options - Authentication behavior for the fetch implementation.
|
|
9
|
+
* @param options.getAccessToken - Returns the current token or refreshes it.
|
|
10
|
+
* @param options.fetch - Fetch implementation used to send requests.
|
|
11
|
+
* @param options.onUnauthorized - Handles a second unauthorized response.
|
|
12
|
+
*/
|
|
13
|
+
export function createAuthFetch({ getAccessToken, fetch: fetchImpl = fetch, onUnauthorized, }) {
|
|
14
|
+
let refreshPromise;
|
|
15
|
+
const refreshAccessToken = () => {
|
|
16
|
+
if (!refreshPromise) {
|
|
17
|
+
refreshPromise = Promise.resolve(getAccessToken({ forceRefresh: true })).finally(() => {
|
|
18
|
+
refreshPromise = undefined;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return refreshPromise;
|
|
22
|
+
};
|
|
23
|
+
return async function authFetch(input, init) {
|
|
24
|
+
const request = new Request(input, init);
|
|
25
|
+
const retryRequest = request.clone();
|
|
26
|
+
const accessToken = await getAccessToken({ forceRefresh: false });
|
|
27
|
+
const response = await fetchImpl(addBearerToken({ request, accessToken }));
|
|
28
|
+
if (response.status !== 401) {
|
|
29
|
+
return response;
|
|
30
|
+
}
|
|
31
|
+
// Another request may already have refreshed and persisted the token while
|
|
32
|
+
// this request was in flight. Reuse it instead of rotating again.
|
|
33
|
+
const currentAccessToken = await getAccessToken({ forceRefresh: false });
|
|
34
|
+
const retryAccessToken = currentAccessToken === accessToken
|
|
35
|
+
? await refreshAccessToken()
|
|
36
|
+
: currentAccessToken;
|
|
37
|
+
const retryResponse = await fetchImpl(addBearerToken({ request: retryRequest, accessToken: retryAccessToken }));
|
|
38
|
+
if (retryResponse.status === 401) {
|
|
39
|
+
await onUnauthorized?.(retryResponse);
|
|
40
|
+
}
|
|
41
|
+
return retryResponse;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function addBearerToken({ request, accessToken, }) {
|
|
45
|
+
const headers = new Headers(request.headers);
|
|
46
|
+
headers.set("Authorization", `Bearer ${accessToken}`);
|
|
47
|
+
return new Request(request, { headers });
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=authFetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authFetch.js","sourceRoot":"","sources":["../../src/authFetch.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,cAAc,EACd,KAAK,EAAE,SAAS,GAAG,KAAK,EACxB,cAAc,GACG;IACjB,IAAI,cAA2C,CAAC;IAEhD,MAAM,kBAAkB,GAAG,GAAoB,EAAE;QAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,OAAO,CAAC,OAAO,CAC9B,cAAc,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CACvC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACb,cAAc,GAAG,SAAS,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,KAAK,UAAU,SAAS,CAC7B,KAAkC,EAClC,IAAkB;QAElB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,2EAA2E;QAC3E,kEAAkE;QAClE,MAAM,kBAAkB,GAAG,MAAM,cAAc,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,MAAM,gBAAgB,GACpB,kBAAkB,KAAK,WAAW;YAChC,CAAC,CAAC,MAAM,kBAAkB,EAAE;YAC5B,CAAC,CAAC,kBAAkB,CAAC;QACzB,MAAM,aAAa,GAAG,MAAM,SAAS,CACnC,cAAc,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CACzE,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACjC,MAAM,cAAc,EAAE,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,OAAO,EACP,WAAW,GAIZ;IACC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,WAAW,EAAE,CAAC,CAAC;IACtD,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/esm/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAA4B,EAC1B,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EACV,UAAU,IAAI,gBAAgB,EAC9B,UAAU,IAAI,gBAAgB,EAC9B,KAAK,IAAI,WAAW,EACrB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAA4B,EAC1B,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EACV,UAAU,IAAI,gBAAgB,EAC9B,UAAU,IAAI,gBAAgB,EAC9B,KAAK,IAAI,WAAW,EACrB,MAAM,6BAA6B,CAAC;AAMrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD;;GAEG;AACH,eAAO,MAAM,6BAA6B,6BAA6B,CAAC;AAExE,MAAM,MAAM,OAAO,GAAG,WAAW,CAAC;AAClC,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAC5C,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE;QACF,KAAK,EAAE,OAAO,CAAC;QACf,UAAU,EAAE,YAAY,CAAC;QACzB,UAAU,EAAE,YAAY,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,yCAG1B;IACD,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CACtD,KAAQ,aAQR,CAAC;AAaF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,YAAY,YACf;IACN,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CACtD;;;;;;;;;;;;;IA0BC;;;;;;;;;OASG;4BACyB,OAAO,CAAC,eAAe,CAAC;CA2BvD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
package/dist/esm/client.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import createOpenApiClient from "openapi-fetch";
|
|
2
2
|
import { defaultGetEnvironmentOptions, makeDefaultClientOptions, } from "./config.js";
|
|
3
|
+
import { HttpError } from "./errors.js";
|
|
3
4
|
import { parseSemanticVersion } from "./utils/semverUtils.js";
|
|
4
5
|
/**
|
|
5
6
|
* The HTTP response header that carries the Phoenix server version string.
|
|
@@ -29,8 +30,7 @@ export const getMergedOptions = ({ options = {}, getEnvironmentOptions = default
|
|
|
29
30
|
const middleware = {
|
|
30
31
|
onResponse({ response }) {
|
|
31
32
|
if (!response.ok) {
|
|
32
|
-
|
|
33
|
-
throw new Error(`${response.url}: ${response.status} ${response.statusText}`);
|
|
33
|
+
throw new HttpError(response);
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
};
|
package/dist/esm/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,mBAGN,MAAM,eAAe,CAAC;AAOvB,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thrown when Phoenix answers a request with a non-2xx status.
|
|
3
|
+
*
|
|
4
|
+
* `status` is on the error so callers can branch on it: a status is frequently
|
|
5
|
+
* a legitimate answer rather than a bug — a 401 from an unauthenticated probe,
|
|
6
|
+
* for instance, is how a caller learns that auth is enabled on the deployment.
|
|
7
|
+
*/
|
|
8
|
+
export declare class HttpError extends Error {
|
|
9
|
+
readonly response: Response;
|
|
10
|
+
readonly status: number;
|
|
11
|
+
readonly statusText: string;
|
|
12
|
+
readonly url: string;
|
|
13
|
+
constructor(response: Response);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,YAAY,QAAQ,EAAE,QAAQ,EAO7B;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thrown when Phoenix answers a request with a non-2xx status.
|
|
3
|
+
*
|
|
4
|
+
* `status` is on the error so callers can branch on it: a status is frequently
|
|
5
|
+
* a legitimate answer rather than a bug — a 401 from an unauthenticated probe,
|
|
6
|
+
* for instance, is how a caller learns that auth is enabled on the deployment.
|
|
7
|
+
*/
|
|
8
|
+
export class HttpError extends Error {
|
|
9
|
+
response;
|
|
10
|
+
status;
|
|
11
|
+
statusText;
|
|
12
|
+
url;
|
|
13
|
+
constructor(response) {
|
|
14
|
+
super(`${response.url}: ${response.status} ${response.statusText}`);
|
|
15
|
+
this.name = "HttpError";
|
|
16
|
+
this.response = response;
|
|
17
|
+
this.status = response.status;
|
|
18
|
+
this.statusText = response.statusText;
|
|
19
|
+
this.url = response.url;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,QAAQ,CAAW;IACnB,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,GAAG,CAAS;IAErB,YAAY,QAAkB;QAC5B,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;IAC1B,CAAC;CACF"}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logSpans.d.ts","sourceRoot":"","sources":["../../../src/spans/logSpans.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"logSpans.d.ts","sourceRoot":"","sources":["../../../src/spans/logSpans.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAM3D,KAAK,sBAAsB,GACzB,KAAK,CAAC,yCAAyC,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjH;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAElD,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,EAAE,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,YAAY,MAAM,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;QACjC,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,EAOA;IAED,2CAA2C;IAC3C,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,8CAA8C;IAC9C,IAAI,eAAe,IAAI,MAAM,CAE5B;CACF;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,oCAAoC;IACpC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,uBAAuB;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAmMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,QAAQ,CAAC,EAC7B,MAAM,EAAE,OAAO,EACf,OAAO,EACP,KAAK,GACN,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAiC1C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createClient } from "../client.js";
|
|
2
|
+
import { HttpError } from "../errors.js";
|
|
2
3
|
import { resolveProjectIdentifier } from "../types/projects.js";
|
|
3
4
|
import { formatApiError } from "../utils/apiErrorUtils.js";
|
|
4
5
|
import { isObject } from "../utils/isObject.js";
|
|
@@ -161,6 +162,18 @@ function parseLogSpansError(error, spans) {
|
|
|
161
162
|
}
|
|
162
163
|
return new Error(`Failed to log spans: ${formatApiError(error)}`);
|
|
163
164
|
}
|
|
165
|
+
async function parseLogSpansHttpError(error, spans) {
|
|
166
|
+
try {
|
|
167
|
+
const contentType = error.response.headers.get("content-type");
|
|
168
|
+
const payload = contentType?.includes("application/json")
|
|
169
|
+
? await error.response.json()
|
|
170
|
+
: await error.response.text();
|
|
171
|
+
return parseLogSpansError(payload, spans);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return parseLogSpansError(error, spans);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
164
177
|
/**
|
|
165
178
|
* Log spans to a project using Phoenix's simplified span structure.
|
|
166
179
|
*
|
|
@@ -195,16 +208,26 @@ function parseLogSpansError(error, spans) {
|
|
|
195
208
|
export async function logSpans({ client: _client, project, spans, }) {
|
|
196
209
|
const client = _client ?? createClient();
|
|
197
210
|
const projectIdentifier = resolveProjectIdentifier(project);
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
211
|
+
let response;
|
|
212
|
+
try {
|
|
213
|
+
response = await client.POST("/v1/projects/{project_identifier}/spans", {
|
|
214
|
+
params: {
|
|
215
|
+
path: {
|
|
216
|
+
project_identifier: projectIdentifier,
|
|
217
|
+
},
|
|
202
218
|
},
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
}
|
|
219
|
+
body: {
|
|
220
|
+
data: spans,
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
if (error instanceof HttpError) {
|
|
226
|
+
throw await parseLogSpansHttpError(error, spans);
|
|
227
|
+
}
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
const { data, error } = response;
|
|
208
231
|
if (error) {
|
|
209
232
|
throw parseLogSpansError(error, spans);
|
|
210
233
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logSpans.js","sourceRoot":"","sources":["../../../src/spans/logSpans.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"logSpans.js","sourceRoot":"","sources":["../../../src/spans/logSpans.ts"],"names":[],"mappings":"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"}
|