@expandai/sdk 0.17.2 → 0.18.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 +4 -0
- package/build/dts/Client.d.ts +10 -4
- package/build/dts/Client.d.ts.map +1 -1
- package/build/dts/Error.d.ts.map +1 -1
- package/build/dts/FetchJson.d.ts +119 -130
- package/build/dts/FetchJson.d.ts.map +1 -1
- package/build/dts/Generated.d.ts +387 -466
- package/build/dts/Generated.d.ts.map +1 -1
- package/build/dts/HttpClientHelpers.d.ts +1 -1
- package/build/dts/Internal.d.ts +4 -3
- package/build/dts/Internal.d.ts.map +1 -1
- package/build/dts/Playground.d.ts +8 -4
- package/build/dts/Playground.d.ts.map +1 -1
- package/build/dts/Service.d.ts +76 -85
- package/build/dts/Service.d.ts.map +1 -1
- package/build/dts/index.d.ts +1 -1
- package/build/dts/index.d.ts.map +1 -1
- package/build/esm/Client.js +9 -1
- package/build/esm/Client.js.map +1 -1
- package/build/esm/Error.js.map +1 -1
- package/build/esm/FetchJson.js +1 -1
- package/build/esm/FetchJson.js.map +1 -1
- package/build/esm/Generated.js +102 -85
- package/build/esm/Generated.js.map +1 -1
- package/build/esm/Internal.js +17 -7
- package/build/esm/Internal.js.map +1 -1
- package/build/esm/Playground.js +38 -18
- package/build/esm/Playground.js.map +1 -1
- package/build/esm/Service.js +23 -23
- package/build/esm/Service.js.map +1 -1
- package/build/esm/index.js.map +1 -1
- package/package.json +2 -2
- package/src/Client.ts +15 -2
- package/src/FetchJson.ts +1 -1
- package/src/Generated.ts +155 -112
- package/src/Internal.ts +29 -7
- package/src/Playground.ts +54 -20
- package/src/Service.ts +39 -24
- package/src/index.ts +2 -0
package/build/esm/Playground.js
CHANGED
|
@@ -3,15 +3,23 @@
|
|
|
3
3
|
// Canonical public snapshot URLs (all public, no auth, no TTL):
|
|
4
4
|
//
|
|
5
5
|
// /s/<snapshotId> — whole snapshot
|
|
6
|
-
// /s/<snapshotId
|
|
7
|
-
// /s/<snapshotId>?id=<evidenceId> — open extracted State JSON evidence
|
|
6
|
+
// /s/<snapshotId>?id=<evidenceId> — open any public evidence target
|
|
8
7
|
//
|
|
9
|
-
// A citation maps a search snippet
|
|
10
|
-
import { Match } from 'effect';
|
|
8
|
+
// A citation maps a search snippet location to the view that audits it.
|
|
11
9
|
export const DEFAULT_PLAYGROUND_HOST = 'https://expand.land';
|
|
12
10
|
function normalizeHost(host) {
|
|
13
11
|
return host.replace(/\/+$/, '');
|
|
14
12
|
}
|
|
13
|
+
function publicEvidenceId(value) {
|
|
14
|
+
return value !== null && value !== undefined && Number.isInteger(value) && value > 0 && value <= 2_147_483_647
|
|
15
|
+
? value
|
|
16
|
+
: undefined;
|
|
17
|
+
}
|
|
18
|
+
function legacyArchiveId(value) {
|
|
19
|
+
return value !== null && value !== undefined && Number.isInteger(value) && value >= 0 && value <= 0xffffffff
|
|
20
|
+
? value
|
|
21
|
+
: undefined;
|
|
22
|
+
}
|
|
15
23
|
/** Whole-snapshot URL: `${host}/s/${snapshotId}`. */
|
|
16
24
|
export function playgroundBase(snapshotId, host = DEFAULT_PLAYGROUND_HOST) {
|
|
17
25
|
return `${normalizeHost(host)}/s/${encodeURIComponent(snapshotId)}`;
|
|
@@ -36,20 +44,32 @@ export function resolvePlaygroundHost(metaPlayground, fallback) {
|
|
|
36
44
|
return fallback;
|
|
37
45
|
}
|
|
38
46
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
export function citationUrl(snapshotId, sourceOrLocation, locationOrHost, legacyHost = DEFAULT_PLAYGROUND_HOST) {
|
|
48
|
+
const legacySignature = typeof sourceOrLocation === 'string';
|
|
49
|
+
const source = legacySignature ? sourceOrLocation : undefined;
|
|
50
|
+
const location = legacySignature
|
|
51
|
+
? typeof locationOrHost === 'string'
|
|
52
|
+
? undefined
|
|
53
|
+
: locationOrHost
|
|
54
|
+
: sourceOrLocation;
|
|
55
|
+
const host = legacySignature
|
|
56
|
+
? legacyHost
|
|
57
|
+
: typeof locationOrHost === 'string'
|
|
58
|
+
? locationOrHost
|
|
59
|
+
: DEFAULT_PLAYGROUND_HOST;
|
|
46
60
|
const base = playgroundBase(snapshotId, host);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
61
|
+
const evidenceId = publicEvidenceId(location?.evidenceId);
|
|
62
|
+
if (evidenceId !== undefined) {
|
|
63
|
+
return `${base}?id=${evidenceId}`;
|
|
64
|
+
}
|
|
65
|
+
if (source === 'statejson') {
|
|
66
|
+
const legacyId = legacyArchiveId(location?.stateJsonSourceId);
|
|
67
|
+
return legacyId === undefined ? base : `${base}?id=${legacyId}`;
|
|
68
|
+
}
|
|
69
|
+
if (source === 'markdown' || source === 'appendix') {
|
|
70
|
+
const nodeId = legacyArchiveId(location?.nodeIds?.[0]);
|
|
71
|
+
return nodeId === undefined ? base : `${base}/playground#focus=${nodeId}`;
|
|
72
|
+
}
|
|
73
|
+
return base;
|
|
54
74
|
}
|
|
55
75
|
//# sourceMappingURL=Playground.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Playground.js","sourceRoot":"","sources":["../../src/Playground.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,gEAAgE;AAChE,EAAE;AACF,8DAA8D;AAC9D,
|
|
1
|
+
{"version":3,"file":"Playground.js","sourceRoot":"","sources":["../../src/Playground.ts"],"names":[],"mappings":"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"}
|
package/build/esm/Service.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HttpClient, HttpClientRequest, HttpClientResponse } from '@effect/platform';
|
|
2
2
|
import { NodeHttpClient } from '@effect/platform-node';
|
|
3
|
-
import { Context, Duration, Effect, flow, Layer, Schedule, Schema } from 'effect';
|
|
3
|
+
import { Context, Duration, Effect, flow, Layer, Option, Random, Schedule, Schema } from 'effect';
|
|
4
4
|
import { ExpandSdkError } from './Error.js';
|
|
5
5
|
import { fetchObjectModeJson, fetchSnapshotSearch, } from './FetchJson.js';
|
|
6
6
|
import * as Generated from './Generated.js';
|
|
@@ -23,25 +23,24 @@ export class ExpandServiceOptions extends Schema.Class('ExpandServiceOptions')({
|
|
|
23
23
|
}),
|
|
24
24
|
/**
|
|
25
25
|
* Total wall-clock budget in milliseconds for the operation, including retries and backoff.
|
|
26
|
-
*
|
|
26
|
+
* A successful attempt may use the remaining operation budget. Defaults to 60_000.
|
|
27
27
|
*/
|
|
28
28
|
timeoutMs: Schema.optional(Schema.Number).annotations({
|
|
29
29
|
description: 'Total wall-clock budget in milliseconds for the operation, including retries and backoff. ' +
|
|
30
|
-
'
|
|
30
|
+
'A successful attempt may use the remaining operation budget. Defaults to 60_000.',
|
|
31
31
|
}),
|
|
32
32
|
/**
|
|
33
33
|
* Number of retry attempts for retryable failures (timeouts, connection errors, 408/409/429/5xx).
|
|
34
|
-
* Defaults to 2.
|
|
35
|
-
* per-call to opt in.
|
|
34
|
+
* Defaults to 2.
|
|
36
35
|
*/
|
|
37
36
|
maxRetries: Schema.optional(Schema.Number).annotations({
|
|
38
37
|
description: 'Number of retry attempts for retryable failures (timeouts, connection errors, 408/409/429/5xx). ' +
|
|
39
|
-
'Defaults to 2.
|
|
38
|
+
'Defaults to 2.',
|
|
40
39
|
}),
|
|
41
40
|
}, { description: 'Options for constructing an `ExpandService` layer or `ExpandClient` instance.' }) {
|
|
42
41
|
}
|
|
43
42
|
/**
|
|
44
|
-
* Per-request overrides accepted by `ExpandService.fetch`/`batched`/`getBatched` (and, transitively,
|
|
43
|
+
* Per-request overrides accepted by `ExpandService.fetch`/`batched`/`getBatched`/`cancelBatched` (and, transitively,
|
|
45
44
|
* by `ExpandClient`'s methods).
|
|
46
45
|
*/
|
|
47
46
|
export class RequestOptions extends Schema.Class('RequestOptions')({
|
|
@@ -121,15 +120,10 @@ export class ExpandService extends Effect.Service()('@expandai/sdk/ExpandService
|
|
|
121
120
|
const withRetries = Effect.fn('ExpandService.withRetries')(function* (operation, requestOptions = {}) {
|
|
122
121
|
const totalTimeoutMs = requestOptions.timeoutMs ?? config.timeoutMs;
|
|
123
122
|
const maxRetries = requestOptions.maxRetries ?? config.maxRetries;
|
|
124
|
-
// `timeoutMs` is
|
|
125
|
-
//
|
|
126
|
-
// including retry backoff. Pipe ordering matters: per-attempt timeout must wrap the operation
|
|
127
|
-
// (so retry can catch its TimeoutException), and total timeout must wrap retry (so it caps
|
|
128
|
-
// backoff between attempts). Floor with a 1ms minimum so degenerate inputs don't produce a
|
|
129
|
-
// zero-millisecond budget that fires before any work happens.
|
|
130
|
-
const perAttemptTimeoutMs = Math.max(1, Math.floor(totalTimeoutMs / (maxRetries + 1)));
|
|
123
|
+
// `timeoutMs` is one wall-clock budget for the operation, including retries and backoff. A slow
|
|
124
|
+
// valid capture may use most of that budget; only failures that arrive before it expires can retry.
|
|
131
125
|
const retrySchedule = Schedule.exponential(Duration.millis(250)).pipe(Schedule.jittered, Schedule.compose(Schedule.recurs(maxRetries)), Schedule.whileInput((error) => isRetryable(error, totalTimeoutMs)));
|
|
132
|
-
return yield* operation.pipe(Effect.
|
|
126
|
+
return yield* operation.pipe(Effect.retry(retrySchedule), Effect.timeout(Duration.millis(totalTimeoutMs)), Effect.mapError((error) => toExpandError(error, totalTimeoutMs)));
|
|
133
127
|
});
|
|
134
128
|
const fetch = Effect.fn('ExpandService.fetch')(function* (params, requestOptions = {}) {
|
|
135
129
|
const { include, ...retryOptions } = requestOptions;
|
|
@@ -146,13 +140,16 @@ export class ExpandService extends Effect.Service()('@expandai/sdk/ExpandService
|
|
|
146
140
|
return yield* withRetries(fetchSnapshotSearch(authedClient, params), requestOptions);
|
|
147
141
|
});
|
|
148
142
|
const batched = Effect.fn('ExpandService.batched')(function* (params, requestOptions = {}) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const
|
|
155
|
-
|
|
143
|
+
const { idempotencyKey: providedIdempotencyKey, ...retryOptions } = requestOptions;
|
|
144
|
+
const idempotencyKey = yield* Option.fromNullable(providedIdempotencyKey).pipe(Option.match({
|
|
145
|
+
onSome: Effect.succeed,
|
|
146
|
+
onNone: () => Effect.all([Random.nextInt, Random.nextInt, Random.nextInt]).pipe(Effect.map(([first, second, third]) => `sdk-${Math.abs(first).toString(36)}-${Math.abs(second).toString(36)}-${Math.abs(third).toString(36)}`)),
|
|
147
|
+
}));
|
|
148
|
+
const generatedRequest = {
|
|
149
|
+
params: { 'x-idempotency-key': idempotencyKey },
|
|
150
|
+
payload: params,
|
|
151
|
+
};
|
|
152
|
+
return yield* withRetries(generated.fetchBatched(generatedRequest), retryOptions);
|
|
156
153
|
});
|
|
157
154
|
const getBatched = Effect.fn('ExpandService.getBatched')(function* (id, options = {}) {
|
|
158
155
|
// Pull RequestOptions out, pass everything else through as query params. Drift-resilient: any
|
|
@@ -160,7 +157,10 @@ export class ExpandService extends Effect.Service()('@expandai/sdk/ExpandService
|
|
|
160
157
|
const { timeoutMs, maxRetries, ...params } = options;
|
|
161
158
|
return yield* withRetries(generated.fetchGetBatched(id, params), { timeoutMs, maxRetries });
|
|
162
159
|
});
|
|
163
|
-
|
|
160
|
+
const cancelBatched = Effect.fn('ExpandService.cancelBatched')(function* (id, requestOptions = {}) {
|
|
161
|
+
return yield* withRetries(generated.fetchCancelBatched(id), requestOptions);
|
|
162
|
+
});
|
|
163
|
+
return { fetch, fetchJson, fetchSearch, batched, getBatched, cancelBatched };
|
|
164
164
|
}),
|
|
165
165
|
}) {
|
|
166
166
|
/**
|
package/build/esm/Service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/Service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/Service.ts"],"names":[],"mappings":"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"}
|
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EACN,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAC3B,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GAClB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expandai/sdk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.18.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "TypeScript SDK for ExpandAI",
|
|
7
7
|
"author": "ExpandAI",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"format": "biome format --write",
|
|
57
57
|
"format:check": "biome format",
|
|
58
58
|
"test": "vitest run --exclude 'test/**/*.integration.test.ts'",
|
|
59
|
-
"test:integration": "vitest run integration"
|
|
59
|
+
"test:integration": "vitest run integration --fileParallelism=false --testTimeout=30000"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@effect/platform": "0.96.1",
|
package/src/Client.ts
CHANGED
|
@@ -2,8 +2,10 @@ import { Effect, Either, Exit, Layer } from 'effect'
|
|
|
2
2
|
import { InternalClient } from './Internal.js'
|
|
3
3
|
import {
|
|
4
4
|
type BatchedParams,
|
|
5
|
+
type BatchedRequestOptions,
|
|
5
6
|
type BatchedResponse,
|
|
6
7
|
buildServiceConfig,
|
|
8
|
+
type CancelBatchedResponse,
|
|
7
9
|
type ExpandServiceOptions,
|
|
8
10
|
type FetchJsonParams,
|
|
9
11
|
type FetchJsonRequestOptions,
|
|
@@ -20,7 +22,9 @@ import {
|
|
|
20
22
|
|
|
21
23
|
export type {
|
|
22
24
|
BatchedParams,
|
|
25
|
+
BatchedRequestOptions,
|
|
23
26
|
BatchedResponse,
|
|
27
|
+
CancelBatchedResponse,
|
|
24
28
|
FetchJsonParams,
|
|
25
29
|
FetchJsonRequestOptions,
|
|
26
30
|
FetchJsonResponse,
|
|
@@ -95,14 +99,16 @@ export class ExpandClient {
|
|
|
95
99
|
* Kick off an asynchronous batched fetch over one or more URLs. Returns a batched-run ID that can
|
|
96
100
|
* be polled via {@link getBatched}.
|
|
97
101
|
*
|
|
98
|
-
*
|
|
102
|
+
* When `idempotencyKey` is omitted, the client generates one and reuses it for automatic retries.
|
|
103
|
+
* Provide a stable key to deduplicate separate calls or calls made after a process restart. Reusing
|
|
104
|
+
* a key with a different payload surfaces an idempotency conflict.
|
|
99
105
|
*
|
|
100
106
|
* @throws {ExpandClientApiError} on 4xx/5xx responses
|
|
101
107
|
* @throws {ExpandClientTimeoutError} when the request exceeds `timeoutMs`
|
|
102
108
|
* @throws {ExpandClientConnectionError} on network failures
|
|
103
109
|
* @throws {ExpandClientError} for any other failure
|
|
104
110
|
*/
|
|
105
|
-
async batched(params: BatchedParams, options:
|
|
111
|
+
async batched(params: BatchedParams, options: BatchedRequestOptions = {}): Promise<BatchedResponse> {
|
|
106
112
|
return this.run((client) => client.batched(params, options))
|
|
107
113
|
}
|
|
108
114
|
|
|
@@ -118,6 +124,13 @@ export class ExpandClient {
|
|
|
118
124
|
return this.run((client) => client.getBatched(id, options))
|
|
119
125
|
}
|
|
120
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Request cancellation of a batched run. The command is idempotent and uses the configured retry policy.
|
|
129
|
+
*/
|
|
130
|
+
async cancelBatched(id: string, options: RequestOptions = {}): Promise<CancelBatchedResponse> {
|
|
131
|
+
return this.run((client) => client.cancelBatched(id, options))
|
|
132
|
+
}
|
|
133
|
+
|
|
121
134
|
private async run<A>(body: (ic: InternalClient) => Effect.Effect<A, Error>): Promise<A> {
|
|
122
135
|
const exit = await Effect.runPromiseExit(InternalClient.use(body).pipe(Effect.provide(this.layer)))
|
|
123
136
|
if (Exit.isSuccess(exit)) {
|
package/src/FetchJson.ts
CHANGED
|
@@ -37,7 +37,6 @@ export class FetchObjectModeResultWithJson extends S.Class<FetchObjectModeResult
|
|
|
37
37
|
data: S.optionalWith(
|
|
38
38
|
S.Struct({
|
|
39
39
|
assets: S.optionalWith(S.Array(Generated.FetchAssetReference), { nullable: true }),
|
|
40
|
-
captureTelemetry: S.optionalWith(Generated.CaptureTelemetryInfo, { nullable: true }),
|
|
41
40
|
search: S.optionalWith(FetchSearchResultWithJson, { nullable: true }),
|
|
42
41
|
}),
|
|
43
42
|
{ nullable: true },
|
|
@@ -51,6 +50,7 @@ export class FetchSnapshotSearchResultWithJson extends S.Class<FetchSnapshotSear
|
|
|
51
50
|
response: Generated.ResponseInfo,
|
|
52
51
|
search: FetchSearchResultWithJson,
|
|
53
52
|
durationMs: S.Number.pipe(S.greaterThanOrEqualTo(0)),
|
|
53
|
+
playground: S.String,
|
|
54
54
|
}) {}
|
|
55
55
|
|
|
56
56
|
/** Mirrors `Generated.Client['fetchFetchJson']` but decodes the 200 body with `json` preserved. */
|