@relyio/sdk 0.2.1 → 0.4.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 (39) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{chunk-RJBIJ2ZK.js → chunk-43VPZT2G.js} +496 -103
  4. package/dist/chunk-BBUB7C2Z.js +81 -0
  5. package/dist/{chunk-FJK7ZWKK.cjs → chunk-HAQELDZN.cjs} +156 -221
  6. package/dist/chunk-LSRPMNPT.cjs +89 -0
  7. package/dist/{chunk-7W4MJXQ4.cjs → chunk-XS32U2UP.cjs} +497 -102
  8. package/dist/{chunk-2QUK2ZGD.js → chunk-XY5KFEFY.js} +157 -219
  9. package/dist/client/index.cjs +4 -3
  10. package/dist/client/index.d.cts +4 -3
  11. package/dist/client/index.d.ts +4 -3
  12. package/dist/client/index.js +2 -1
  13. package/dist/define-content-type-CBfnTWSS.d.cts +716 -0
  14. package/dist/define-content-type-CBfnTWSS.d.ts +716 -0
  15. package/dist/{define-schema-DHvUCKwj.d.cts → define-schema-2xbHgtK-.d.cts} +63 -726
  16. package/dist/{define-schema-DHvUCKwj.d.ts → define-schema-DzYXk4HL.d.ts} +63 -726
  17. package/dist/dev-handshake/index.cjs +37 -0
  18. package/dist/dev-handshake/index.d.cts +144 -0
  19. package/dist/dev-handshake/index.d.ts +144 -0
  20. package/dist/dev-handshake/index.js +4 -0
  21. package/dist/{index-DGWaawHt.d.cts → index-BvO6HDtY.d.cts} +237 -12
  22. package/dist/{index-B-KiFHbx.d.ts → index-BzOFJJKS.d.ts} +237 -12
  23. package/dist/{index-BsUqCAu8.d.cts → index-DFehx5sI.d.cts} +749 -2160
  24. package/dist/{index-BsUqCAu8.d.ts → index-FDak5ofk.d.ts} +749 -2160
  25. package/dist/index.cjs +120 -70
  26. package/dist/index.d.cts +136 -55
  27. package/dist/index.d.ts +136 -55
  28. package/dist/index.js +45 -3
  29. package/dist/schema/index.cjs +35 -47
  30. package/dist/schema/index.d.cts +3 -2
  31. package/dist/schema/index.d.ts +3 -2
  32. package/dist/schema/index.js +1 -1
  33. package/dist/types/index.d.cts +2 -1
  34. package/dist/types/index.d.ts +2 -1
  35. package/package.json +15 -19
  36. package/dist/react/index.cjs +0 -4
  37. package/dist/react/index.d.cts +0 -2
  38. package/dist/react/index.d.ts +0 -2
  39. package/dist/react/index.js +0 -3
@@ -1,5 +1,6 @@
1
- import { M as MergedRelyIOConfig, A as ApiPath, a as ApiMethod, G as PathParamsOf, r as ApiResponse, W as Wire, q as RequestConfig, B as BaseContent, c as WhereClause, e as SortOptions, f as ContentQueryResult, Q as QueryOptions, C as CreateInput, U as UpdateInput, S as SDKError, v as BaseValidationError, u as ValidationViolation, H as components, R as RelyIOConfig } from './index-BsUqCAu8.js';
2
- import { x as SchemaDefinition, y as SchemaContentTypeNames, a6 as InferContentType, K as SchemaAssetTypeNames, at as InferAssetType, z as SchemaSingletonNames, ac as InferSingleton, J as SchemaSettingsGroupNames, an as InferSettingsGroup, G as SchemaQueryNames, H as SchemaLocaleCodes } from './define-schema-DHvUCKwj.js';
1
+ import { J as MergedRelyIOConfig, A as ApiPath, a as ApiMethod, K as PathParamsOf, t as ApiResponse, W as Wire, s as RequestConfig, B as BaseContent, d as WhereClause, f as SortOptions, g as ContentQueryResult, Q as QueryOptions, C as CreateInput, U as UpdateInput, S as SDKError, x as BaseValidationError, w as ValidationViolation, N as components, O as paths, R as RelyIOConfig } from './index-FDak5ofk.js';
2
+ import { a as SchemaDefinition, b as SchemaContentTypeNames, h as SchemaAssetTypeNames, M as InferAssetType, c as SchemaSingletonNames, t as InferSingleton, g as SchemaSettingsGroupNames, E as InferSettingsGroup, e as SchemaQueryNames, f as SchemaLocaleCodes } from './define-schema-DzYXk4HL.js';
3
+ import { J as InferContentType } from './define-content-type-CBfnTWSS.js';
3
4
 
4
5
  /**
5
6
  * What a call site supplies beside the route it named.
@@ -38,7 +39,7 @@ declare class HttpClient {
38
39
  private baseUrl;
39
40
  private defaultHeaders;
40
41
  private timeout;
41
- private retryConfig;
42
+ private retryPolicy;
42
43
  private debug;
43
44
  private logger?;
44
45
  private config;
@@ -56,7 +57,16 @@ declare class HttpClient {
56
57
  data: unknown;
57
58
  } ? Wire<P, M, T>['data'] : never>;
58
59
  /**
59
- * Make an HTTP request with retry logic
60
+ * Make an HTTP request, retrying only where a retry is safe.
61
+ *
62
+ * The headers are merged **once**, before the first attempt, and every attempt
63
+ * sends that same object. That is what makes a minted `Idempotency-Key` stable
64
+ * across the retries of one logical write: the service sees one key and
65
+ * answers the replay from the original outcome instead of applying it twice.
66
+ *
67
+ * The loop always makes one attempt. The incumbent's `while (attempt <
68
+ * maxAttempts)` made none at `retryAttempts: 0` — a value the config validator
69
+ * accepts — and then dereferenced an unassigned `lastError`.
60
70
  */
61
71
  request<T = unknown>(config: RequestConfig): Promise<ApiResponse<T>>;
62
72
  /**
@@ -99,6 +109,16 @@ declare class HttpClient {
99
109
  * Get current base URL
100
110
  */
101
111
  getBaseUrl(): string;
112
+ /**
113
+ * One attempt.
114
+ *
115
+ * The caller's `signal` and the timeout both end it, through one controller.
116
+ * The incumbent handed `fetch` the caller's signal **instead of** its own, so a
117
+ * request that passed a signal had no timeout at all — and a caller abort then
118
+ * surfaced as `Request timed out`. `timedOut` is what tells the two apart: a
119
+ * timeout is a `TimeoutError`, a caller abort is the platform's `AbortError`,
120
+ * rethrown as it came.
121
+ */
102
122
  private makeRequest;
103
123
  /**
104
124
  * Filter headers that browsers don't allow to be set manually
@@ -113,7 +133,7 @@ declare class HttpClient {
113
133
  private mergeRequestConfig;
114
134
  private buildQueryString;
115
135
  private headersToObject;
116
- private calculateRetryDelay;
136
+ /** A backoff the caller's abort cuts short; the next attempt then refuses to send. */
117
137
  private sleep;
118
138
  private log;
119
139
  }
@@ -427,13 +447,20 @@ declare class ContentByIdBuilder<T extends BaseContent = BaseContent> {
427
447
  */
428
448
  interface RetryableWriteOptions {
429
449
  /**
430
- * A caller-chosen key that makes a retry of **this** write safe.
450
+ * A key that makes a retry of **this** write safe.
431
451
  *
432
452
  * A replay inside the service's window returns the original outcome rather
433
453
  * than applying twice. The service derives that response from committed state
434
454
  * pinned to the recorded version — it does not store bytes — so a replay after
435
455
  * the version has been pruned is refused `RESOURCE_EXPIRED` rather than
436
456
  * answered from a stale copy.
457
+ *
458
+ * **The SDK mints one when you do not.** It used to be caller-supplied and
459
+ * nothing else, which meant the default write carried no key while the retry
460
+ * loop replayed it anyway — the one mechanism that makes a replay safe was
461
+ * optional on the one path that needed it. Supply your own to make a key
462
+ * outlive the process: a job that may be restarted wants a key derived from
463
+ * the work, not one minted per call.
437
464
  */
438
465
  idempotencyKey?: string;
439
466
  }
@@ -2370,11 +2397,166 @@ declare class AdhocQueryClient {
2370
2397
  }
2371
2398
 
2372
2399
  /**
2373
- * Type alias for any schema definition.
2374
- * Uses `any` intentionally to accept schemas with any content types, components, etc.
2375
- * This is necessary for the SDK to be flexible with user-defined schemas.
2400
+ * Content and resource errors.
2401
+ *
2402
+ * `ContentTypeNotFoundError` and `ContentNotFoundError` were deleted at API5.
2403
+ * The mapper reached them by sniffing `CONTENT_TYPE_NOT_FOUND` and
2404
+ * `CONTENT_NOT_FOUND`, neither of which is in the closed vocabulary, so neither
2405
+ * class was reachable. Both cases are `RESOURCE_NOT_FOUND`, whose declared
2406
+ * `details` are `{ kind, id? }` — the same two facts, from the one code a route
2407
+ * can actually declare.
2408
+ */
2409
+ declare class ResourceNotFoundError extends SDKError {
2410
+ readonly code = "RESOURCE_NOT_FOUND";
2411
+ readonly retryable = false;
2412
+ constructor(message?: string, statusCode?: number, cause?: Error, context?: Record<string, unknown>);
2413
+ getUserMessage(): string;
2414
+ }
2415
+ declare class ResourceConflictError extends SDKError {
2416
+ readonly code = "RESOURCE_CONFLICT";
2417
+ readonly retryable = false;
2418
+ constructor(message?: string, statusCode?: number, cause?: Error, context?: Record<string, unknown>);
2419
+ getUserMessage(): string;
2420
+ }
2421
+ declare class ResourceExpiredError extends SDKError {
2422
+ readonly code = "RESOURCE_EXPIRED";
2423
+ readonly retryable = false;
2424
+ constructor(message?: string, statusCode?: number, cause?: Error, context?: Record<string, unknown>);
2425
+ getUserMessage(): string;
2426
+ }
2427
+ /**
2428
+ * "Did the service say this resource does not exist?"
2429
+ *
2430
+ * Reads the **code**, not the status. Four contract codes are 4xx on a read and
2431
+ * only one of them means "not there"; the incumbent checked `statusCode === 404`
2432
+ * on the thrown value, and a second arm duck-typed a plain object for the same
2433
+ * number so a hand-written test double would pass. Both are the branch
2434
+ * `INV-API-CLIENT-IS-DERIVED` forbids where a code exists — and the second one
2435
+ * only existed because the tests faked the boundary (rule 20). They now stub
2436
+ * `fetch`, so the double is gone with the branch.
2437
+ */
2438
+ declare function isResourceNotFound(error: unknown): boolean;
2439
+
2440
+ /**
2441
+ * `relyio.changes()` — the changes feed as a typed long-poll iterator
2442
+ * (`sdk-surfaces-spec.md` decisions 16–18).
2443
+ *
2444
+ * Long-poll only, on purpose. `GET /v1/changes` is an ordinary cursor-paged
2445
+ * collection the committed document declares, so each poll is one `send` over
2446
+ * the one HTTP client (`INV-SS-ONE-CORE`, `INV-API-CLIENT-IS-DERIVED`). The SSE
2447
+ * branch the route also serves would be a second transport path inside that
2448
+ * client, and `parseResponse` buffers a whole body; it stays for `EventSource`
2449
+ * and curl consumers.
2450
+ */
2451
+
2452
+ type PollChanges = paths['/v1/changes']['get'];
2453
+ /**
2454
+ * The 200 body the document declares, read from its `application/json` content
2455
+ * **by name**. The route also negotiates `text/event-stream`; naming the JSON
2456
+ * content is what keeps that alternate from changing this type when the
2457
+ * document gains it.
2458
+ */
2459
+ type ChangesPageBody = PollChanges['responses'][200]['content']['application/json'];
2460
+ /**
2461
+ * One change, as the committed document describes an item of the feed's `data`
2462
+ * (`INV-SS-CHANGE-IS-IDS`: ids, content type, locale, kind and cursor — never a
2463
+ * document).
2464
+ *
2465
+ * Read from the document, never written here: the api's route row names the
2466
+ * `Change` component schema, and a change to it reaches this type when the
2467
+ * document is regenerated. `changes.types.ts` holds it equal to the document's
2468
+ * item, and fails if it is ever `unknown` again.
2469
+ */
2470
+ type Change = ChangesPageBody['data'][number];
2471
+ /** Why a cursor could no longer be replayed. `unknown` when the message named neither. */
2472
+ type ChangesExpiredReason = 'retention' | 'dataset-replaced' | 'unknown';
2473
+ /**
2474
+ * `RESOURCE_EXPIRED` from the changes feed: the cursor names a position the
2475
+ * ledger can no longer replay from (`INV-SS-CURSOR-REPLAYS`). The consumer
2476
+ * resyncs from the read path and starts again without a cursor.
2477
+ *
2478
+ * A `ResourceExpiredError`, so code that already catches that still does. The
2479
+ * refusal declares no details, so `reason` is read from the message the api
2480
+ * writes (`apps/services/api/src/changes/changes-request.ts` `refusalOf`).
2481
+ */
2482
+ declare class ChangesExpiredError extends ResourceExpiredError {
2483
+ readonly reason: ChangesExpiredReason;
2484
+ /** The base class's signature, so `withContext` can rebuild one. */
2485
+ constructor(message: string, statusCode?: number, cause?: Error, context?: Record<string, unknown>);
2486
+ static of(expired: ResourceExpiredError): ChangesExpiredError;
2487
+ }
2488
+ interface ChangesOptions {
2489
+ /**
2490
+ * A `page.nextCursor` — or a change's `cursor` — from an earlier poll. Omitted,
2491
+ * the first poll answers the dataset's current position and no changes, at
2492
+ * once, and the feed starts from there.
2493
+ */
2494
+ since?: string;
2495
+ /** Content types to keep. Omitted keeps every type; an empty list is refused (400). */
2496
+ types?: readonly string[];
2497
+ /**
2498
+ * Entry ids to keep. Omitted keeps every entry. The api refuses more than it
2499
+ * allows (100 today) as `REQUEST_INVALID`, thrown from the iterator as an
2500
+ * `InvalidPayloadError` on the first poll; the SDK does not restate the
2501
+ * cap, so it cannot drift from the service's.
2502
+ */
2503
+ ids?: readonly string[];
2504
+ /** Ledger rows one poll scans, 1 to 500; the api defaults to 100. */
2505
+ limit?: number;
2506
+ /**
2507
+ * Ends the iteration. An abort — in flight, between polls, or while waiting
2508
+ * out a `Retry-After` — makes the `for await` **complete**, with no further
2509
+ * request and no `AbortError` thrown into the loop.
2510
+ */
2511
+ signal?: AbortSignal;
2512
+ /**
2513
+ * What to do when the cursor has expired.
2514
+ *
2515
+ * - `'throw'` (default) — the iterator throws {@link ChangesExpiredError}.
2516
+ * - `'resync'` — restart from the dataset's current position and keep going.
2517
+ * - a function — resync, and call it with the error once the new position is
2518
+ * taken and before any change after it is yielded. This is the observable
2519
+ * form: whatever the consumer derived from the feed may be stale, so the
2520
+ * function is where it invalidates everything. The iterator waits for it.
2521
+ */
2522
+ onExpired?: 'throw' | 'resync' | ((expired: ChangesExpiredError) => void | Promise<void>);
2523
+ }
2524
+
2525
+ /**
2526
+ * Any schema the client can be typed by. `any` is deliberate: the client accepts whatever content
2527
+ * types, components, singletons, queries and settings groups a customer declares.
2528
+ *
2529
+ * This is the constraint `TypedRelyIOClient`'s `TSchema` carries, so `RegisteredSchema` is inferred
2530
+ * against the same one — `createClient` returns `TypedRelyIOClient<RegisteredSchema>`, and a schema
2531
+ * inferred against any wider alias would not be provably inside the client's bound.
2376
2532
  */
2377
2533
  type AnySchemaDefinition = SchemaDefinition<any, any, any, any, any>;
2534
+ /**
2535
+ * The seam `relyio generate-types` fills (`INV-SS-TYPES-INFERRED`).
2536
+ *
2537
+ * Empty here on purpose. The generated `schema.ts` augments it —
2538
+ *
2539
+ * ```ts
2540
+ * declare module '@relyio/sdk' {
2541
+ * interface Register {
2542
+ * schema: typeof schema
2543
+ * }
2544
+ * }
2545
+ * ```
2546
+ *
2547
+ * — and from then on `createClient({ apiKey })`, with no generic and no `schema:`, is typed by that
2548
+ * schema. The pattern is TanStack Router's. It is type-level only: nothing at runtime reads it.
2549
+ */
2550
+ interface Register {
2551
+ }
2552
+ /**
2553
+ * The schema the project registered through `Register`, or `undefined` when nothing did — which is
2554
+ * the untyped client, exactly as before the generator ran.
2555
+ */
2556
+ type RegisteredSchema = Register extends {
2557
+ schema: infer S extends AnySchemaDefinition;
2558
+ } ? S : undefined;
2559
+
2378
2560
  /**
2379
2561
  * Client configuration with optional schema
2380
2562
  */
@@ -2539,6 +2721,32 @@ declare class TypedRelyIOClient<TSchema extends AnySchemaDefinition | undefined
2539
2721
  * ```
2540
2722
  */
2541
2723
  batch(): BatchBuilder<NonNullable<TSchema>>;
2724
+ /**
2725
+ * Follow the dataset's changes feed: each write this key can see, as ids, in
2726
+ * order, long-polled from `GET /v1/changes`.
2727
+ *
2728
+ * Lazy — nothing is requested until the first `next()`. It runs until
2729
+ * `signal` aborts, which ends the `for await` cleanly rather than throwing.
2730
+ * A change names what changed; refetch it through the ordinary read path
2731
+ * (`INV-SS-CHANGE-IS-IDS`).
2732
+ *
2733
+ * @example
2734
+ * ```typescript
2735
+ * const controller = new AbortController()
2736
+ * for await (const change of relyio.changes({ since: cursor, types: ['post'], signal: controller.signal })) {
2737
+ * // { entryId, contentType, locale, kind, cursor }
2738
+ * }
2739
+ * ```
2740
+ *
2741
+ * @example Resync when the cursor has expired
2742
+ * ```typescript
2743
+ * for await (const change of relyio.changes({
2744
+ * since: cursor,
2745
+ * onExpired: async () => invalidateEverything(),
2746
+ * })) { … }
2747
+ * ```
2748
+ */
2749
+ changes(options?: ChangesOptions): AsyncIterable<Change>;
2542
2750
  /**
2543
2751
  * Build and execute an ad-hoc query dynamically
2544
2752
  *
@@ -2697,12 +2905,29 @@ declare class TypedRelyIOClient<TSchema extends AnySchemaDefinition | undefined
2697
2905
  * // Content type names autocomplete!
2698
2906
  * const products = await relyio.content('product').fetchAll()
2699
2907
  * ```
2700
- */
2908
+ *
2909
+ * @example After `relyio generate-types` (inferred, `INV-SS-TYPES-INFERRED`)
2910
+ * ```typescript
2911
+ * import { createClient } from '@relyio/sdk'
2912
+ *
2913
+ * // The generated `schema.ts` augments `Register`, so no generic and no `schema:` are needed
2914
+ * const relyio = createClient({ apiKey: process.env.RELYIO_API_KEY! })
2915
+ * ```
2916
+ *
2917
+ * The overload without a schema comes first on purpose. Behind the generic one it was never
2918
+ * chosen: with no `schema` to infer from, `TSchema` fell back to its constraint and the call
2919
+ * resolved to `TypedRelyIOClient<AnySchemaDefinition>`. First, it takes every call that passes no
2920
+ * schema, and returns the registered schema's client — or the untyped one when nothing registered.
2921
+ * A `schema:` value fails its `schema?: undefined`, and an explicit generic skips it because it has
2922
+ * no type parameter, so both reach the generic overload unchanged.
2923
+ */
2924
+ declare function createClient(config: RelyIOConfig & {
2925
+ schema?: undefined;
2926
+ }): TypedRelyIOClient<RegisteredSchema>;
2701
2927
  declare function createClient<TSchema extends AnySchemaDefinition>(config: TypedClientConfig<TSchema>): TypedRelyIOClient<TSchema>;
2702
- declare function createClient(config: RelyIOConfig): TypedRelyIOClient<undefined>;
2703
2928
  /**
2704
2929
  * Helper type to extract schema from client
2705
2930
  */
2706
2931
  type ClientSchema<T extends TypedRelyIOClient<AnySchemaDefinition>> = T extends TypedRelyIOClient<infer TSchema> ? TSchema : never;
2707
2932
 
2708
- export { AssetFileBuilder as $, AutocompleteBuilder as A, BatchClient as B, type ClientSchema as C, type BatchOperation as D, type ExtendedQueryResult as E, type BatchOptions as F, type BatchOperationResult as G, HttpClient as H, type BatchSummary as I, type BatchResponse as J, AdhocQueryClient as K, AdhocQueryBuilder as L, type FetchBlock as M, type AggregateBlock as N, type AggregateMetric as O, type SearchBlock as P, type SimilarBlock as Q, type RetryableWriteOptions as R, type SendOptions as S, TypedRelyIOClient as T, type FilterValue as U, type FullTextConfig as V, type AdhocQueryDefinition as W, type AdhocQueryOptions as X, type QueryMetadata as Y, type AdhocQueryResult as Z, AssetClient as _, type TypedClientConfig as a, AssetUploadBuilder as a0, isAssetEntry as a1, type AssetVisibility as a2, type FileStatus as a3, type FileBackend as a4, type AssetFileBlock as a5, type AssetFileExtracted as a6, type AssetUrls as a7, type AssetEntryResponse as a8, type PopulatedAssetReference as a9, type PresignInput as aa, type PresignResult as ab, type ConfirmInput as ac, type ConfirmResult as ad, type ResolveUrlInput as ae, type ResolveUrlResult as af, type CreateAssetOptions as ag, type WaitUntilReadyOptions as ah, type MultipartCreateResult as ai, type MultipartPart as aj, type MultipartTarget as ak, type UploadProgress as al, type FileErrorCode as am, FileUploadError as an, FileValidationError as ao, type FileValidationConstraints as ap, validateFile as aq, type ConditionalWriteOptions as b, createClient as c, ContentClient as d, entityTagOf as e, SingletonClient as f, SettingsClient as g, ContentQueryBuilder as h, ContentByIdBuilder as i, type ChildrenOptions as j, type SingletonFetchOptions as k, type SettingsFetchOptions as l, SearchClient as m, SearchBuilder as n, SimilarBuilder as o, type SearchMode as p, type SearchResultItem as q, type SearchResponse as r, type AutocompleteSuggestion as s, type AutocompleteResponse as t, type SimilarResult as u, type SimilarResponse as v, type SearchFilter as w, type SearchFields as x, BatchBuilder as y, type BatchMethod as z };
2933
+ export { type FullTextConfig as $, AutocompleteBuilder as A, type SimilarResult as B, type ClientSchema as C, type SimilarResponse as D, type ExtendedQueryResult as E, type SearchFilter as F, type SearchFields as G, HttpClient as H, BatchClient as I, BatchBuilder as J, type BatchMethod as K, type BatchOperation as L, type BatchOptions as M, type BatchOperationResult as N, type BatchSummary as O, type BatchResponse as P, AdhocQueryClient as Q, type Register as R, type SendOptions as S, TypedRelyIOClient as T, AdhocQueryBuilder as U, type FetchBlock as V, type AggregateBlock as W, type AggregateMetric as X, type SearchBlock as Y, type SimilarBlock as Z, type FilterValue as _, type TypedClientConfig as a, type AdhocQueryDefinition as a0, type AdhocQueryOptions as a1, type QueryMetadata as a2, type AdhocQueryResult as a3, AssetClient as a4, AssetFileBuilder as a5, AssetUploadBuilder as a6, isAssetEntry as a7, type AssetVisibility as a8, type FileStatus as a9, validateFile as aA, type FileBackend as aa, type AssetFileBlock as ab, type AssetFileExtracted as ac, type AssetUrls as ad, type AssetEntryResponse as ae, type PopulatedAssetReference as af, type PresignInput as ag, type PresignResult as ah, type ConfirmInput as ai, type ConfirmResult as aj, type ResolveUrlInput as ak, type ResolveUrlResult as al, type CreateAssetOptions as am, type WaitUntilReadyOptions as an, type MultipartCreateResult as ao, type MultipartPart as ap, type MultipartTarget as aq, type UploadProgress as ar, ResourceNotFoundError as as, ResourceConflictError as at, ResourceExpiredError as au, isResourceNotFound as av, type FileErrorCode as aw, FileUploadError as ax, FileValidationError as ay, type FileValidationConstraints as az, type RegisteredSchema as b, createClient as c, type ConditionalWriteOptions as d, entityTagOf as e, type RetryableWriteOptions as f, ChangesExpiredError as g, type Change as h, type ChangesOptions as i, type ChangesExpiredReason as j, ContentClient as k, SingletonClient as l, SettingsClient as m, ContentQueryBuilder as n, ContentByIdBuilder as o, type ChildrenOptions as p, type SingletonFetchOptions as q, type SettingsFetchOptions as r, SearchClient as s, SearchBuilder as t, SimilarBuilder as u, type SearchMode as v, type SearchResultItem as w, type SearchResponse as x, type AutocompleteSuggestion as y, type AutocompleteResponse as z };