@syndroo/sdk 0.4.0-rc.1 → 0.7.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 (42) hide show
  1. package/README.md +83 -136
  2. package/dist/client.d.ts +30 -102
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +120 -325
  5. package/dist/client.js.map +1 -1
  6. package/dist/errors.d.ts +48 -93
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +131 -137
  9. package/dist/errors.js.map +1 -1
  10. package/dist/generated/compiled.d.ts +182 -0
  11. package/dist/generated/compiled.d.ts.map +1 -0
  12. package/dist/generated/compiled.js +25761 -0
  13. package/dist/generated/compiled.js.map +1 -0
  14. package/dist/generated/types.d.ts +387 -0
  15. package/dist/generated/types.d.ts.map +1 -0
  16. package/dist/generated/types.js +2 -0
  17. package/dist/generated/types.js.map +1 -0
  18. package/dist/generated/validation.d.ts +18 -0
  19. package/dist/generated/validation.d.ts.map +1 -0
  20. package/dist/generated/validation.js +184 -0
  21. package/dist/generated/validation.js.map +1 -0
  22. package/dist/generated/validators.d.ts +3 -0
  23. package/dist/generated/validators.d.ts.map +1 -0
  24. package/dist/generated/validators.js +10 -0
  25. package/dist/generated/validators.js.map +1 -0
  26. package/dist/http.d.ts +91 -35
  27. package/dist/http.d.ts.map +1 -1
  28. package/dist/http.js +345 -243
  29. package/dist/http.js.map +1 -1
  30. package/dist/index.d.ts +8 -5
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +7 -5
  33. package/dist/index.js.map +1 -1
  34. package/dist/types.d.ts +90 -83
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/types.js +16 -155
  37. package/dist/types.js.map +1 -1
  38. package/dist/wait.d.ts +65 -0
  39. package/dist/wait.d.ts.map +1 -0
  40. package/dist/wait.js +192 -0
  41. package/dist/wait.js.map +1 -0
  42. package/package.json +6 -3
package/README.md CHANGED
@@ -1,172 +1,119 @@
1
1
  # @syndroo/sdk
2
2
 
3
- A thin TypeScript HTTP client for one deployed
4
- [Syndroo](https://github.com/Syndroo/syndroo) instance.
3
+ A thin TypeScript HTTP client for one deployed [Syndroo](https://github.com/Syndroo/syndroo)
4
+ instance.
5
5
 
6
- The SDK wraps the documented `/v1` HTTP contract and adds no server behavior. It
7
- has no runtime dependencies, ships no bundler or platform SDK, and never
8
- reconciles your data on its own.
6
+ The SDK wraps the documented HTTP contract — `connect`, `publish` and `status` —
7
+ and adds no server behaviour. It imports no `@syndroo/core` and no provider code,
8
+ at build time or at runtime, and it never reconciles your data on its own.
9
9
 
10
10
  ```text
11
- your app / CLI / CI -> @syndroo/sdk -> Syndroo HTTP API -> Worker
11
+ your app / CI -> @syndroo/sdk -> Syndroo HTTP API -> server or Worker
12
12
  ```
13
13
 
14
14
  ## Requirements
15
15
 
16
- Node.js 22 or newer. The client uses the runtime's global `fetch`, `AbortSignal`,
17
- and Web Streams; there is no polyfill and no dependency to install.
16
+ Node.js 24.19.0 or newer, or any runtime with a global `fetch`, `AbortSignal` and
17
+ Web Streams. There is no polyfill and no runtime dependency to install.
18
18
 
19
19
  ```bash
20
20
  npm install @syndroo/sdk
21
21
  ```
22
22
 
23
+ The server must be reachable over HTTPS. Plain HTTP is accepted only for a
24
+ loopback host, because the client sends a Bearer secret on every call.
25
+
23
26
  ## Quickstart
24
27
 
25
28
  ```ts
26
- import { SyndrooClient } from "@syndroo/sdk";
29
+ import { Syndroo } from "@syndroo/sdk";
27
30
 
28
- const syndroo = new SyndrooClient({
29
- baseUrl: process.env.SYNDROO_BASE_URL!,
31
+ const syndroo = new Syndroo({
32
+ baseUrl: "https://syndroo.example",
30
33
  apiKey: process.env.SYNDROO_API_KEY!,
31
34
  });
32
35
 
33
- const receipt = await syndroo.posts.create(
34
- {
35
- content: "We just shipped a new release.",
36
- platforms: ["bluesky"],
37
- },
38
- { idempotencyKey: "release-announcement-001" },
39
- );
36
+ // prepare freezes the content and the target list and returns an approval token.
37
+ const prepared = await syndroo.publish({
38
+ type: "prepare",
39
+ content: { text: "hello from the SDK" },
40
+ targets: [{ provider: "bluesky" }],
41
+ });
40
42
 
41
- const post = await syndroo.posts.get(receipt.id);
43
+ if (prepared.status === "confirmation_required") {
44
+ // execute only against the token that the prepare step issued.
45
+ const round = await syndroo.publish({
46
+ type: "execute",
47
+ approvalToken: prepared.approvalToken,
48
+ });
49
+ console.log(round.status, round.deliveries.map(delivery => delivery.outcome?.status ?? "pending"));
50
+ }
42
51
  ```
43
52
 
44
- ## Two boundaries
53
+ `connect` follows the same shape: `start` and `resume` return whichever step the
54
+ provider asks for (`credential_input`, `open_url`, `wait_for_callback`, or a
55
+ `done` connection), while `update` and `disconnect` always end in a bound
56
+ connection and fail the call if they do not.
45
57
 
46
- **A create receipt is not a delivery.** `posts.create` returns an acceptance
47
- result. HTTP `202` means the request was accepted for processing, and `queued`
48
- means "waiting for a publication job". Nothing has reached a platform yet. Read
49
- the post back and check each publication before telling a user that a post is
50
- live:
58
+ ## API
51
59
 
52
60
  ```ts
53
- const post = await syndroo.posts.wait(receipt.id, { timeoutMs: 60_000 });
54
-
55
- if (post.status === "published") {
56
- // Every selected platform confirmed.
57
- } else if (post.status === "partial") {
58
- // Some platforms confirmed; inspect each publication and do not resend the
59
- // successful ones.
60
- } else {
61
- // failed: read errorCode, errorMessage, and errorAmbiguous per publication.
62
- }
61
+ syndroo.connect(request, options?) // start | resume | update | disconnect
62
+ syndroo.publish(request, options?) // prepare | execute | retry
63
+ syndroo.status(request, options?) // overview | provider | connections | operation | operations
64
+ syndroo.wait(operationId, options?) // poll one operation until its round completes
63
65
  ```
64
66
 
65
- A `failed` publication with `errorAmbiguous: true` may still have been accepted
66
- by the platform. Check the platform account by hand; do not resend that content
67
- automatically.
67
+ Every call validates its argument against the wire schema before it sends
68
+ anything, refuses a redirect instead of following it, bounds the response it
69
+ will buffer, and rejects a response that does not answer the request it was
70
+ given.
68
71
 
69
- **The API key belongs in a trusted environment.** Keep it in a server, CLI, or
70
- CI credential store. Do not put it in a static page, a browser bundle, or a
71
- `NEXT_PUBLIC_*` variable: `SYNDROO_API_KEY` can publish, and anyone who reads the
72
- page can use it. Platform credentials stay in the Worker's secrets and are never
73
- part of this client. The unauthenticated `/health` call is the only request that
74
- sends no `Authorization` header.
72
+ ### Transport options
75
73
 
76
- ## API
74
+ | Option | Default | Meaning |
75
+ | --- | --- | --- |
76
+ | `idempotencyKey` | generated where the protocol requires request identity | Stable identity of one logical call, reused by every transport retry. Supply it to recover the same operation across processes. |
77
+ | `timeoutMs` | `30000` | Per-request deadline, up to `120000`. |
78
+ | `transportRetries` | `0` | Transport retries, `0`–`2`. Only a call that never reached the server is retried. |
79
+ | `signal` | – | Cancels the local call. It never cancels work the server already admitted. |
77
80
 
78
- ### `new SyndrooClient(options)`
81
+ `SyndrooOptions` also accepts `fetch` and `sleep`, so a host can supply its own
82
+ transport and timer. `LIMITS` and `WAIT_LIMITS` export every bound above.
79
83
 
80
- | Option | Default | Meaning |
81
- |---|---|---|
82
- | `baseUrl` | required | Origin of the instance, for example `https://syndroo.example.com`. `https` is required outside loopback; `http` is accepted for `localhost` and `127.0.0.1`, or anywhere with `allowInsecureHttp: true`. |
83
- | `apiKey` | required | Instance API key, sent as a Bearer token. |
84
- | `timeoutMs` | `30000` | Per-request deadline. |
85
- | `waitTimeoutMs` | `60000` | Default total deadline for `posts.wait`. |
86
- | `maxResponseBytes` | `8388608` | Response size limit. |
87
- | `allowInsecureHttp` | `false` | Permit plaintext `http://` for a non-loopback host. |
88
-
89
- Configuration problems throw `SyndrooConfigError` from the constructor, before
90
- any request is made.
91
-
92
- ### Methods
93
-
94
- | Call | HTTP | Notes |
95
- |---|---|---|
96
- | `syndroo.health()` | `GET /health` | Unauthenticated reachability check. Proves the URL answers, not that the key or the platform credentials work. |
97
- | `syndroo.posts.create(input, options?)` | `POST /v1/posts` | One request, never retried. `options.idempotencyKey` makes a retry safe. |
98
- | `syndroo.posts.get(id, options?)` | `GET /v1/posts/<id>` | Read-only; safe to repeat. |
99
- | `syndroo.posts.list({ limit }, options?)` | `GET /v1/posts` | `limit` is 1-100. |
100
- | `syndroo.posts.wait(id, options?)` | repeated `GET /v1/posts/<id>` | Reads until `published`, `partial`, or `failed`, or until `timeoutMs`. |
101
-
102
- `create` accepts `content`, `platforms`, optional per-platform `overrides`, and
103
- an optional `scheduledAt`. The client validates the structure and sends your
104
- object unchanged; it does not rewrite, trim, or truncate content.
105
- Platform-specific length limits are enforced by the server and surface as typed
106
- errors or as publication failures.
107
-
108
- `wait` options: `timeoutMs` (total budget), `pollIntervalMs` (default `250`),
109
- `maxPollIntervalMs` (default `2000`), and `signal`. Reading never creates,
110
- cancels, or resends anything, so a wait timeout leaves the server-side work
111
- running; `SyndrooWaitTimeoutError` keeps `postId`, `lastStatus`, `lastPost`, and
112
- `lastError` so you can resume instead of starting over.
113
-
114
- `scheduledAt` is submitted to the server, so a scheduled post does not depend on
115
- this process staying alive.
84
+ ### Wait
85
+
86
+ `syndroo.wait(operationId, options?)` polls `status({ type: "operation" })` until
87
+ the execution round reaches a terminal state. The default interval is `2000 ms`
88
+ (`250`–`30000`) and the default deadline is `120000 ms`, up to `3600000`. It
89
+ reads status only: it never refreshes a provider token, never retries a write,
90
+ and never asks a platform what happened.
116
91
 
117
92
  ## Errors
118
93
 
119
- Every failure is a `SyndrooError`. Use `isSyndrooError()` to narrow, or the
120
- exported classes:
121
-
122
- | Class | Raised when |
123
- |---|---|
124
- | `SyndrooConfigError` | The client configuration is unusable. No request is made. |
125
- | `SyndrooValidationError` | An argument cannot become a valid request. No request is made. |
126
- | `SyndrooApiError` | Syndroo answered with a documented error envelope. Carries `status`, `code`, `retryAfterMs`, and `retryable`. |
127
- | `SyndrooResponseError` | The answer was not the documented JSON contract: not JSON, missing fields, or over the size limit. |
128
- | `SyndrooAbortError` | You aborted through an `AbortSignal`. |
129
- | `SyndrooTimeoutError` | The deadline elapsed before the response was received. |
130
- | `SyndrooNetworkError` | No HTTP response arrived; `networkCode` carries codes such as `ECONNREFUSED`. |
131
- | `SyndrooWaitTimeoutError` | `posts.wait` hit its deadline before a terminal status. |
132
-
133
- Server codes such as `UNAUTHORIZED` (401), `POST_NOT_FOUND` (404),
134
- `IDEMPOTENCY_CONFLICT` (409), `PLATFORM_NOT_CONFIGURED` (422), and
135
- `SERVICE_UNAVAILABLE` (503) appear on `SyndrooApiError.code`.
136
-
137
- `requestMayHaveBeenApplied` is the flag that decides whether a resend is safe. It
138
- is `true` when a write may already have reached Syndroo: a timeout, an abort, a
139
- network failure, or a 5xx after a `POST`. A 4xx is a decision, so it is `false`.
140
- When it is `true`, look the post up with `posts.list` or repeat the identical
141
- request with the same `Idempotency-Key` — never with a new key and never with
142
- different content.
143
-
144
- ## Timeouts, aborts, and retries
145
-
146
- - The SDK performs exactly one HTTP request per call. It never retries a write.
147
- A silent retry without a stable idempotency key can duplicate a post.
148
- - A timed-out `POST` is reported as an unknown outcome, not as "not created".
149
- - `AbortSignal` is supported on every method; aborting a read is always safe.
150
- - API errors carry no retry attempt, only `retryable` and `retryAfterMs`, so your
151
- own policy decides.
152
- - `posts.wait` absorbs transient failures (network errors, timeouts, 5xx, 429)
153
- with bounded exponential backoff, honours `Retry-After`, and stops at the
154
- first authentication, validation, or "not found" answer instead of polling.
155
-
156
- ## Redirects
157
-
158
- The client never follows redirects. A `3xx` answer becomes a `SyndrooApiError`
159
- with code `REDIRECT_NOT_FOLLOWED`, so the `Authorization` header can never be
160
- forwarded to another host. Point `baseUrl` at the final API origin, for example
161
- the `https://...workers.dev` URL of the deployment.
162
-
163
- ## Not in this version
164
-
165
- The SDK is deliberately small. There is no preview, approval, retry, or cancel
166
- endpoint, no dashboard, no media upload, and no OAuth handling, because the
167
- server does not offer those operations yet. Direct HTTP remains the fallback for
168
- anything this client does not cover.
169
-
170
- ## License
171
-
172
- Apache-2.0. See `LICENSE` and `NOTICE`.
94
+ Every failure is a `SyndrooError` with a fixed `code` and a message that is never
95
+ interpolated from your input or from a response body. Use `isSyndrooError` to
96
+ narrow an unknown value. The codes are `INVALID_ARGUMENT`, `INSECURE_BASE_URL`,
97
+ `INVALID_REQUEST`, `INVALID_RESPONSE`, `RESPONSE_TOO_LARGE`,
98
+ `REDIRECT_NOT_ALLOWED`, `TRANSPORT`, `HTTP_ERROR`, `PROTOCOL`, `TIMEOUT`,
99
+ `ABORTED`, `WAIT_TIMEOUT`, `CONFIRMATION_REQUIRED` and `CONFIRMATION_EXPIRED`.
100
+
101
+ A protocol rejection carries the server's `{ error: { code, message } }`
102
+ projection as a `SafeError`, so a caller can branch on `error.code` without
103
+ parsing English. Nothing in an error can contain a credential: secrets are never
104
+ placed in a URL, a log line or a thrown message.
105
+
106
+ ## What the SDK does not do
107
+
108
+ - It does not execute anything locally and has no filesystem or state of its
109
+ own; local execution is the CLI's job, and both surfaces call the same Core.
110
+ - It does not approve a write. A prepare result is a token, and a token is not
111
+ proof that a human read anything.
112
+ - It does not make publishing synchronous. A `202`-class answer means the
113
+ execution was durably admitted, never that a platform accepted the content.
114
+
115
+ ## Status
116
+
117
+ The `0.7.0` release train is prepared but not claimed available until its public
118
+ registry installation succeeds. The SDK is fixture-tested against the wire
119
+ protocol; no live platform call has been made from this repository.
package/dist/client.d.ts CHANGED
@@ -1,109 +1,37 @@
1
1
  /**
2
- * `SyndrooClient` — a thin, dependency-free client for the Syndroo HTTP API.
2
+ * `Syndroo` — the public HTTP client of `@syndroo/sdk`.
3
3
  *
4
- * The client wraps the documented `/v1` contract. It deliberately does not add
5
- * server features: it creates, reads, lists, and waits, and it never invents a
6
- * delivery result that the server did not report.
7
- */
8
- import { type TransportConfig } from "./http.js";
9
- import { type CreatePostInput, type HealthStatus, type PostDetail, type PostReceipt, type PostSummary } from "./types.js";
10
- export declare const DEFAULT_WAIT_TIMEOUT_MS = 60000;
11
- export declare const DEFAULT_POLL_INTERVAL_MS = 250;
12
- export declare const DEFAULT_MAX_POLL_INTERVAL_MS = 2000;
13
- export interface SyndrooClientOptions {
14
- /** Origin of a deployed Syndroo instance, for example `https://syndroo.example.com`. */
15
- baseUrl: string;
16
- /**
17
- * The instance API key. Keep it in a server, CLI, or CI credential store;
18
- * never in a static page or a `NEXT_PUBLIC_*` variable.
19
- */
20
- apiKey: string;
21
- /** Per-request deadline. Defaults to 30000ms. */
22
- timeoutMs?: number | undefined;
23
- /** Total deadline for `posts.wait`. Defaults to 60000ms. */
24
- waitTimeoutMs?: number | undefined;
25
- /** Maximum accepted response size in bytes. Defaults to 8 MiB. */
26
- maxResponseBytes?: number | undefined;
27
- /** Allow plaintext `http://` for a non-loopback host. Off by default. */
28
- allowInsecureHttp?: boolean | undefined;
29
- }
30
- export interface RequestOptions {
31
- signal?: AbortSignal | undefined;
32
- /** Per-request deadline in milliseconds. */
33
- timeoutMs?: number | undefined;
34
- }
35
- export interface CreatePostOptions extends RequestOptions {
36
- /**
37
- * Stable key for one logical post. Reuse the same key when retrying the same
38
- * request; Syndroo replays the original result, and different content under
39
- * the same key is rejected with HTTP 409.
40
- */
41
- idempotencyKey?: string | undefined;
42
- }
43
- export interface ListPostsOptions extends RequestOptions {
44
- /** 1-100, defaults to the server default. */
45
- limit?: number | undefined;
46
- }
47
- export interface WaitOptions extends RequestOptions {
48
- /** Total wait budget in milliseconds, not a per-request timeout. */
49
- timeoutMs?: number | undefined;
50
- /** First interval between status reads. Defaults to 250ms. */
51
- pollIntervalMs?: number | undefined;
52
- /** Upper bound for the backoff. Defaults to 2000ms. */
53
- maxPollIntervalMs?: number | undefined;
54
- }
55
- /**
56
- * Client for one Syndroo instance.
4
+ * The client is a thin wrapper over the three `/v1` protocol operations plus a
5
+ * status-only `wait`. It mirrors the Core request/result generics from the
6
+ * shared blueprint, adds no server features, and never invents a result the
7
+ * server did not report.
57
8
  *
58
- * ```ts
59
- * const syndroo = new SyndrooClient({
60
- * baseUrl: process.env.SYNDROO_BASE_URL!,
61
- * apiKey: process.env.SYNDROO_API_KEY!,
62
- * });
9
+ * What the client deliberately does not do:
63
10
  *
64
- * const receipt = await syndroo.posts.create(
65
- * { content: "We just shipped a new release.", platforms: ["bluesky"] },
66
- * { idempotencyKey: "release-announcement-001" },
67
- * );
68
- *
69
- * const post = await syndroo.posts.get(receipt.id);
70
- * ```
11
+ * - it never approves, confirms or resumes anything on its own;
12
+ * - it never retries a business result (`failed`, `partial`, `unknown` are
13
+ * protocol successes);
14
+ * - it never decides whether a caller-supplied idempotency key is "the same
15
+ * intent" across two separate calls.
71
16
  */
72
- export declare class SyndrooClient {
73
- #private;
74
- readonly posts: PostsResource;
75
- constructor(options: SyndrooClientOptions);
76
- /**
77
- * `GET /health`. Syndroo's health endpoint is unauthenticated, so the client
78
- * sends no Authorization header here. It proves reachability, not that the
79
- * API key is correct or that the deployment can publish.
80
- */
81
- health(options?: RequestOptions): Promise<HealthStatus>;
82
- }
83
- /** The posts resource: create, read, list, and bounded status wait. */
84
- export declare class PostsResource {
85
- #private;
86
- constructor(config: TransportConfig, defaultWaitTimeoutMs: number);
87
- /**
88
- * `POST /v1/posts`. The returned receipt is an acceptance result: HTTP 202
89
- * means the request is queued for processing, not that any platform
90
- * published it. The SDK performs exactly one request and never retries it.
91
- */
92
- create(input: CreatePostInput, options?: CreatePostOptions): Promise<PostReceipt>;
93
- /** `GET /v1/posts/<id>`. Read-only, so repeating it is safe. */
94
- get(id: string, options?: RequestOptions): Promise<PostDetail>;
95
- /** `GET /v1/posts`, newest first. */
96
- list(options?: ListPostsOptions): Promise<PostSummary[]>;
97
- /**
98
- * Reads the post until it reaches a terminal status (`published`, `partial`,
99
- * or `failed`) or the wait budget runs out.
100
- *
101
- * Waiting is read-only: it never creates, cancels, or resends a post, so a
102
- * timeout leaves the server-side work running and only stops this client from
103
- * waiting. On timeout it throws `SyndrooWaitTimeoutError`, which keeps the
104
- * post id, the last status, and the last transient error so a caller can
105
- * resume instead of starting over.
106
- */
107
- wait(id: string, options?: WaitOptions): Promise<PostDetail>;
17
+ import type { ConnectRequest, ConnectResult, DoneConnectResult, DoneConnectRequest, ExecuteRequest, ExecutionResult, PrepareOrRetryRequest, PublishRequest, PublishResult, RequestOptions, StatusRequest, StatusResultFor, SyndrooOptions, WaitOptions } from "./types.js";
18
+ export declare class Syndroo {
19
+ private readonly transport;
20
+ private readonly sleep;
21
+ constructor(options: SyndrooOptions);
22
+ /** Update/disconnect always end in a bound connection. */
23
+ connect(request: DoneConnectRequest, options?: RequestOptions): Promise<DoneConnectResult>;
24
+ /** Start/resume return whichever connect step the server reports, `start` included. */
25
+ connect(request: ConnectRequest, options?: RequestOptions): Promise<ConnectResult>;
26
+ /** `execute` always reports an execution round. */
27
+ publish(request: ExecuteRequest, options?: RequestOptions): Promise<ExecutionResult>;
28
+ /** `prepare`/`retry` may replay an already admitted execution. */
29
+ publish(request: PrepareOrRetryRequest, options?: RequestOptions): Promise<PublishResult>;
30
+ publish(request: PublishRequest, options?: RequestOptions): Promise<PublishResult>;
31
+ /** Return the exact result type of the query that was asked for. */
32
+ status<T extends StatusRequest>(request: T, options?: RequestOptions): Promise<StatusResultFor<T>>;
33
+ /** Poll `status({ type: "operation" })` until the execution round completes. */
34
+ wait(operationId: string, options?: WaitOptions): Promise<ExecutionResult>;
35
+ private call;
108
36
  }
109
37
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,UAAU,EAEf,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAIlD,MAAM,WAAW,oBAAoB;IACnC,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAa;;IACxB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAI9B,YAAY,OAAO,EAAE,oBAAoB,EAYxC;IAED;;;;OAIG;IACG,MAAM,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAUhE;CACF;AAED,uEAAuE;AACvE,qBAAa,aAAa;;IAIxB,YAAY,MAAM,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,EAGhE;IAED;;;;OAIG;IACG,MAAM,CACV,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAmBtB;IAED,gEAAgE;IAC1D,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAUvE;IAED,qCAAqC;IAC/B,IAAI,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAYjE;IAED;;;;;;;;;OASG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgErE;CACF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,eAAe,EAEf,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,cAAc,EAEd,aAAa,EACb,eAAe,EACf,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAElC,YAAY,OAAO,EAAE,cAAc,EAkBlC;IAED,0DAA0D;IACpD,OAAO,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjG,uFAAuF;IACjF,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IASzF,mDAAmD;IAC7C,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3F,kEAAkE;IAC5D,OAAO,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1F,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IASzF,oEAAoE;IAC9D,MAAM,CAAC,CAAC,SAAS,aAAa,EAClC,OAAO,EAAE,CAAC,EACV,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAQ7B;IAED,gFAAgF;IAC1E,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAenF;YAEa,IAAI;CAmBnB"}