@shukka/sdk 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/README.md +34 -2
- package/dist/index.cjs +1077 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1106 -0
- package/dist/index.d.ts +1106 -0
- package/dist/index.js +1029 -0
- package/dist/index.js.map +1 -0
- package/package.json +37 -4
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,1106 @@
|
|
|
1
|
+
type AuthToken = string | undefined;
|
|
2
|
+
interface Auth {
|
|
3
|
+
/**
|
|
4
|
+
* Which part of the request do we use to send the auth?
|
|
5
|
+
*
|
|
6
|
+
* @default 'header'
|
|
7
|
+
*/
|
|
8
|
+
in?: 'header' | 'query' | 'cookie';
|
|
9
|
+
/**
|
|
10
|
+
* A unique identifier for the security scheme.
|
|
11
|
+
*
|
|
12
|
+
* Defined only when there are multiple security schemes whose `Auth`
|
|
13
|
+
* shape would otherwise be identical.
|
|
14
|
+
*/
|
|
15
|
+
key?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Header or query parameter name.
|
|
18
|
+
*
|
|
19
|
+
* @default 'Authorization'
|
|
20
|
+
*/
|
|
21
|
+
name?: string;
|
|
22
|
+
scheme?: 'basic' | 'bearer';
|
|
23
|
+
type: 'apiKey' | 'http';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface SerializerOptions<T> {
|
|
27
|
+
/**
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
30
|
+
explode: boolean;
|
|
31
|
+
style: T;
|
|
32
|
+
}
|
|
33
|
+
type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';
|
|
34
|
+
type ObjectStyle = 'form' | 'deepObject';
|
|
35
|
+
|
|
36
|
+
type QuerySerializer = (query: Record<string, unknown>) => string;
|
|
37
|
+
type BodySerializer = (body: unknown) => unknown;
|
|
38
|
+
type QuerySerializerOptionsObject = {
|
|
39
|
+
allowReserved?: boolean;
|
|
40
|
+
array?: Partial<SerializerOptions<ArrayStyle>>;
|
|
41
|
+
object?: Partial<SerializerOptions<ObjectStyle>>;
|
|
42
|
+
};
|
|
43
|
+
type QuerySerializerOptions = QuerySerializerOptionsObject & {
|
|
44
|
+
/**
|
|
45
|
+
* Per-parameter serialization overrides. When provided, these settings
|
|
46
|
+
* override the global array/object settings for specific parameter names.
|
|
47
|
+
*/
|
|
48
|
+
parameters?: Record<string, QuerySerializerOptionsObject>;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
type HttpMethod = 'connect' | 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace';
|
|
52
|
+
type Client$1<RequestFn = never, Config = unknown, MethodFn = never, BuildUrlFn = never, SseFn = never> = {
|
|
53
|
+
/**
|
|
54
|
+
* Returns the final request URL.
|
|
55
|
+
*/
|
|
56
|
+
buildUrl: BuildUrlFn;
|
|
57
|
+
getConfig: () => Config;
|
|
58
|
+
request: RequestFn;
|
|
59
|
+
setConfig: (config: Config) => Config;
|
|
60
|
+
} & {
|
|
61
|
+
[K in HttpMethod]: MethodFn;
|
|
62
|
+
} & ([SseFn] extends [never] ? {
|
|
63
|
+
sse?: never;
|
|
64
|
+
} : {
|
|
65
|
+
sse: {
|
|
66
|
+
[K in HttpMethod]: SseFn;
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
interface Config$1 {
|
|
70
|
+
/**
|
|
71
|
+
* Auth token or a function returning auth token. The resolved value will be
|
|
72
|
+
* added to the request payload as defined by its `security` array.
|
|
73
|
+
*/
|
|
74
|
+
auth?: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken;
|
|
75
|
+
/**
|
|
76
|
+
* A function for serializing request body parameter. By default,
|
|
77
|
+
* {@link JSON.stringify()} will be used.
|
|
78
|
+
*/
|
|
79
|
+
bodySerializer?: BodySerializer | null;
|
|
80
|
+
/**
|
|
81
|
+
* An object containing any HTTP headers that you want to pre-populate your
|
|
82
|
+
* `Headers` object with.
|
|
83
|
+
*
|
|
84
|
+
* {@link https://developer.mozilla.org/docs/Web/API/Headers/Headers#init See more}
|
|
85
|
+
*/
|
|
86
|
+
headers?: RequestInit['headers'] | Record<string, string | number | boolean | (string | number | boolean)[] | null | undefined | unknown>;
|
|
87
|
+
/**
|
|
88
|
+
* The request method.
|
|
89
|
+
*
|
|
90
|
+
* {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more}
|
|
91
|
+
*/
|
|
92
|
+
method?: Uppercase<HttpMethod>;
|
|
93
|
+
/**
|
|
94
|
+
* A function for serializing request query parameters. By default, arrays
|
|
95
|
+
* will be exploded in form style, objects will be exploded in deepObject
|
|
96
|
+
* style, and reserved characters are percent-encoded.
|
|
97
|
+
*
|
|
98
|
+
* This method will have no effect if the native `paramsSerializer()` Axios
|
|
99
|
+
* API function is used.
|
|
100
|
+
*
|
|
101
|
+
* {@link https://swagger.io/docs/specification/serialization/#query View examples}
|
|
102
|
+
*/
|
|
103
|
+
querySerializer?: QuerySerializer | QuerySerializerOptions;
|
|
104
|
+
/**
|
|
105
|
+
* A function validating request data. This is useful if you want to ensure
|
|
106
|
+
* the request conforms to the desired shape, so it can be safely sent to
|
|
107
|
+
* the server.
|
|
108
|
+
*/
|
|
109
|
+
requestValidator?: (data: unknown) => Promise<unknown>;
|
|
110
|
+
/**
|
|
111
|
+
* A function transforming response data before it's returned. This is useful
|
|
112
|
+
* for post-processing data, e.g., converting ISO strings into Date objects.
|
|
113
|
+
*/
|
|
114
|
+
responseTransformer?: (data: unknown) => Promise<unknown>;
|
|
115
|
+
/**
|
|
116
|
+
* A function validating response data. This is useful if you want to ensure
|
|
117
|
+
* the response conforms to the desired shape, so it can be safely passed to
|
|
118
|
+
* the transformers and returned to the user.
|
|
119
|
+
*/
|
|
120
|
+
responseValidator?: (data: unknown) => Promise<unknown>;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Arbitrary metadata passed through the `meta` request option.
|
|
124
|
+
*/
|
|
125
|
+
interface ClientMeta {
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, 'method'> & Pick<Config$1, 'method' | 'responseTransformer' | 'responseValidator'> & {
|
|
129
|
+
/**
|
|
130
|
+
* Fetch API implementation. You can use this option to provide a custom
|
|
131
|
+
* fetch instance.
|
|
132
|
+
*
|
|
133
|
+
* @default globalThis.fetch
|
|
134
|
+
*/
|
|
135
|
+
fetch?: typeof fetch;
|
|
136
|
+
/**
|
|
137
|
+
* Implementing clients can call request interceptors inside this hook.
|
|
138
|
+
*/
|
|
139
|
+
onRequest?: (url: string, init: RequestInit) => Promise<Request>;
|
|
140
|
+
/**
|
|
141
|
+
* Callback invoked when a network or parsing error occurs during streaming.
|
|
142
|
+
*
|
|
143
|
+
* This option applies only if the endpoint returns a stream of events.
|
|
144
|
+
*
|
|
145
|
+
* @param error The error that occurred.
|
|
146
|
+
*/
|
|
147
|
+
onSseError?: (error: unknown) => void;
|
|
148
|
+
/**
|
|
149
|
+
* Callback invoked when an event is streamed from the server.
|
|
150
|
+
*
|
|
151
|
+
* This option applies only if the endpoint returns a stream of events.
|
|
152
|
+
*
|
|
153
|
+
* @param event Event streamed from the server.
|
|
154
|
+
* @returns Nothing (void).
|
|
155
|
+
*/
|
|
156
|
+
onSseEvent?: (event: StreamEvent<TData>) => void;
|
|
157
|
+
serializedBody?: RequestInit['body'];
|
|
158
|
+
/**
|
|
159
|
+
* Default retry delay in milliseconds.
|
|
160
|
+
*
|
|
161
|
+
* This option applies only if the endpoint returns a stream of events.
|
|
162
|
+
*
|
|
163
|
+
* @default 3000
|
|
164
|
+
*/
|
|
165
|
+
sseDefaultRetryDelay?: number;
|
|
166
|
+
/**
|
|
167
|
+
* Maximum number of retry attempts before giving up.
|
|
168
|
+
*/
|
|
169
|
+
sseMaxRetryAttempts?: number;
|
|
170
|
+
/**
|
|
171
|
+
* Maximum retry delay in milliseconds.
|
|
172
|
+
*
|
|
173
|
+
* Applies only when exponential backoff is used.
|
|
174
|
+
*
|
|
175
|
+
* This option applies only if the endpoint returns a stream of events.
|
|
176
|
+
*
|
|
177
|
+
* @default 30000
|
|
178
|
+
*/
|
|
179
|
+
sseMaxRetryDelay?: number;
|
|
180
|
+
/**
|
|
181
|
+
* Optional sleep function for retry backoff.
|
|
182
|
+
*
|
|
183
|
+
* Defaults to using `setTimeout`.
|
|
184
|
+
*/
|
|
185
|
+
sseSleepFn?: (ms: number) => Promise<void>;
|
|
186
|
+
url: string;
|
|
187
|
+
};
|
|
188
|
+
interface StreamEvent<TData = unknown> {
|
|
189
|
+
data: TData;
|
|
190
|
+
event?: string;
|
|
191
|
+
id?: string;
|
|
192
|
+
retry?: number;
|
|
193
|
+
}
|
|
194
|
+
type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {
|
|
195
|
+
stream: AsyncGenerator<TData extends Record<string, unknown> ? TData[keyof TData] : TData, TReturn, TNext>;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
type ErrInterceptor<Err, Res, Req, Options> = (error: Err,
|
|
199
|
+
/** response may be undefined due to a network error where no response object is produced */
|
|
200
|
+
response: Res | undefined,
|
|
201
|
+
/** request may be undefined, because error may be from building the request object itself */
|
|
202
|
+
request: Req | undefined, options: Options) => Err | Promise<Err>;
|
|
203
|
+
type ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;
|
|
204
|
+
type ResInterceptor<Res, Req, Options> = (response: Res, request: Req, options: Options) => Res | Promise<Res>;
|
|
205
|
+
declare class Interceptors<Interceptor> {
|
|
206
|
+
fns: Array<Interceptor | null>;
|
|
207
|
+
clear(): void;
|
|
208
|
+
eject(id: number | Interceptor): void;
|
|
209
|
+
exists(id: number | Interceptor): boolean;
|
|
210
|
+
getInterceptorIndex(id: number | Interceptor): number;
|
|
211
|
+
update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false;
|
|
212
|
+
use(fn: Interceptor): number;
|
|
213
|
+
}
|
|
214
|
+
interface Middleware<Req, Res, Err, Options> {
|
|
215
|
+
error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;
|
|
216
|
+
request: Interceptors<ReqInterceptor<Req, Options>>;
|
|
217
|
+
response: Interceptors<ResInterceptor<Res, Req, Options>>;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
type ResponseStyle = 'data' | 'fields';
|
|
221
|
+
interface Config<T extends ClientOptions$1 = ClientOptions$1> extends Omit<RequestInit, 'body' | 'headers' | 'method'>, Config$1 {
|
|
222
|
+
/**
|
|
223
|
+
* Base URL for all requests made by this client.
|
|
224
|
+
*/
|
|
225
|
+
baseUrl?: T['baseUrl'];
|
|
226
|
+
/**
|
|
227
|
+
* Fetch API implementation. You can use this option to provide a custom
|
|
228
|
+
* fetch instance.
|
|
229
|
+
*
|
|
230
|
+
* @default globalThis.fetch
|
|
231
|
+
*/
|
|
232
|
+
fetch?: typeof fetch;
|
|
233
|
+
/**
|
|
234
|
+
* Please don't use the Fetch client for Next.js applications. The `next`
|
|
235
|
+
* options won't have any effect.
|
|
236
|
+
*
|
|
237
|
+
* Install {@link https://www.npmjs.com/package/@hey-api/client-next `@hey-api/client-next`} instead.
|
|
238
|
+
*/
|
|
239
|
+
next?: never;
|
|
240
|
+
/**
|
|
241
|
+
* Return the response data parsed in a specified format. By default, `auto`
|
|
242
|
+
* will infer the appropriate method from the `Content-Type` response header.
|
|
243
|
+
* You can override this behavior with any of the {@link Body} methods.
|
|
244
|
+
* Select `stream` if you don't want to parse response data at all.
|
|
245
|
+
*
|
|
246
|
+
* @default 'auto'
|
|
247
|
+
*/
|
|
248
|
+
parseAs?: 'arrayBuffer' | 'auto' | 'blob' | 'formData' | 'json' | 'stream' | 'text';
|
|
249
|
+
/**
|
|
250
|
+
* Should we return only data or multiple fields (data, error, response, etc.)?
|
|
251
|
+
*
|
|
252
|
+
* @default 'fields'
|
|
253
|
+
*/
|
|
254
|
+
responseStyle?: ResponseStyle;
|
|
255
|
+
/**
|
|
256
|
+
* Throw an error instead of returning it in the response?
|
|
257
|
+
*
|
|
258
|
+
* @default false
|
|
259
|
+
*/
|
|
260
|
+
throwOnError?: T['throwOnError'];
|
|
261
|
+
}
|
|
262
|
+
interface RequestOptions<TData = unknown, TResponseStyle extends ResponseStyle = 'fields', ThrowOnError extends boolean = boolean, Url extends string = string> extends Config<{
|
|
263
|
+
responseStyle: TResponseStyle;
|
|
264
|
+
throwOnError: ThrowOnError;
|
|
265
|
+
}>, Pick<ServerSentEventsOptions<TData>, 'onRequest' | 'onSseError' | 'onSseEvent' | 'sseDefaultRetryDelay' | 'sseMaxRetryAttempts' | 'sseMaxRetryDelay'> {
|
|
266
|
+
/**
|
|
267
|
+
* Any body that you want to add to your request.
|
|
268
|
+
*
|
|
269
|
+
* {@link https://developer.mozilla.org/docs/Web/API/fetch#body}
|
|
270
|
+
*/
|
|
271
|
+
body?: unknown;
|
|
272
|
+
path?: Record<string, unknown>;
|
|
273
|
+
query?: Record<string, unknown>;
|
|
274
|
+
/**
|
|
275
|
+
* Security mechanism(s) to use for the request.
|
|
276
|
+
*/
|
|
277
|
+
security?: ReadonlyArray<Auth>;
|
|
278
|
+
url: Url;
|
|
279
|
+
}
|
|
280
|
+
interface ResolvedRequestOptions<TResponseStyle extends ResponseStyle = 'fields', ThrowOnError extends boolean = boolean, Url extends string = string> extends RequestOptions<unknown, TResponseStyle, ThrowOnError, Url> {
|
|
281
|
+
headers: Headers;
|
|
282
|
+
serializedBody?: string;
|
|
283
|
+
}
|
|
284
|
+
type RequestResult<TData = unknown, TError = unknown, ThrowOnError extends boolean = boolean, TResponseStyle extends ResponseStyle = 'fields'> = ThrowOnError extends true ? Promise<TResponseStyle extends 'data' ? TData extends Record<string, unknown> ? TData[keyof TData] : TData : {
|
|
285
|
+
data: TData extends Record<string, unknown> ? TData[keyof TData] : TData;
|
|
286
|
+
request: Request;
|
|
287
|
+
response: Response;
|
|
288
|
+
}> : Promise<TResponseStyle extends 'data' ? (TData extends Record<string, unknown> ? TData[keyof TData] : TData) | undefined : ({
|
|
289
|
+
data: TData extends Record<string, unknown> ? TData[keyof TData] : TData;
|
|
290
|
+
error: undefined;
|
|
291
|
+
} | {
|
|
292
|
+
data: undefined;
|
|
293
|
+
error: TError extends Record<string, unknown> ? TError[keyof TError] : TError;
|
|
294
|
+
}) & {
|
|
295
|
+
/** request may be undefined, because error may be from building the request object itself */
|
|
296
|
+
request?: Request;
|
|
297
|
+
/** response may be undefined, because error may be from building the request object itself or from a network error */
|
|
298
|
+
response?: Response;
|
|
299
|
+
}>;
|
|
300
|
+
interface ClientOptions$1 {
|
|
301
|
+
baseUrl?: string;
|
|
302
|
+
responseStyle?: ResponseStyle;
|
|
303
|
+
throwOnError?: boolean;
|
|
304
|
+
}
|
|
305
|
+
type MethodFn = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'>) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
|
|
306
|
+
type SseFn = <TData = unknown, _TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<never, TResponseStyle, ThrowOnError>, 'method'>) => Promise<ServerSentEventsResult<TData>>;
|
|
307
|
+
type RequestFn = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = 'fields'>(options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'> & Pick<Required<RequestOptions<TData, TResponseStyle, ThrowOnError>>, 'method'>) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
|
|
308
|
+
type BuildUrlFn = <TData extends {
|
|
309
|
+
body?: unknown;
|
|
310
|
+
path?: Record<string, unknown>;
|
|
311
|
+
query?: Record<string, unknown>;
|
|
312
|
+
url: string;
|
|
313
|
+
}>(options: TData & Options$1<TData>) => string;
|
|
314
|
+
type Client = Client$1<RequestFn, Config, MethodFn, BuildUrlFn, SseFn> & {
|
|
315
|
+
interceptors: Middleware<Request, Response, unknown, ResolvedRequestOptions>;
|
|
316
|
+
};
|
|
317
|
+
interface TDataShape {
|
|
318
|
+
body?: unknown;
|
|
319
|
+
headers?: unknown;
|
|
320
|
+
path?: unknown;
|
|
321
|
+
query?: unknown;
|
|
322
|
+
url: string;
|
|
323
|
+
}
|
|
324
|
+
type OmitKeys<T, K> = Pick<T, Exclude<keyof T, K>>;
|
|
325
|
+
type Options$1<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown, TResponseStyle extends ResponseStyle = 'fields'> = OmitKeys<RequestOptions<TResponse, TResponseStyle, ThrowOnError>, 'body' | 'path' | 'query' | 'url'> & ([TData] extends [never] ? unknown : Omit<TData, 'url'>);
|
|
326
|
+
|
|
327
|
+
type ClientOptions = {
|
|
328
|
+
baseUrl: 'https://updates.example.com' | (string & {});
|
|
329
|
+
};
|
|
330
|
+
type Error = {
|
|
331
|
+
error: 'unauthorized' | 'forbidden' | 'not_found' | 'conflict' | 'invalid_request' | 'storage_error' | 'metadata_error' | 'rate_limited';
|
|
332
|
+
message: string;
|
|
333
|
+
details?: unknown;
|
|
334
|
+
};
|
|
335
|
+
type AppDetail = {
|
|
336
|
+
app: {
|
|
337
|
+
id: number;
|
|
338
|
+
slug: string;
|
|
339
|
+
name: string;
|
|
340
|
+
s3Endpoint: string | null;
|
|
341
|
+
s3Region: string;
|
|
342
|
+
s3Bucket: string;
|
|
343
|
+
s3Prefix: string;
|
|
344
|
+
s3AccessKeyId: string;
|
|
345
|
+
s3ForcePathStyle: boolean;
|
|
346
|
+
releaseLogEnabled: boolean;
|
|
347
|
+
releaseLogLocales: Array<string>;
|
|
348
|
+
releaseLogFallbackLocale: string;
|
|
349
|
+
updaterKind: 'electron' | 'tauri' | 'sparkle';
|
|
350
|
+
createdAt: number;
|
|
351
|
+
};
|
|
352
|
+
channels: Array<{
|
|
353
|
+
id: number;
|
|
354
|
+
name: string;
|
|
355
|
+
currentVersionId: number | null;
|
|
356
|
+
feedUrl: string;
|
|
357
|
+
versions: Array<{
|
|
358
|
+
id: number;
|
|
359
|
+
appId: number;
|
|
360
|
+
channelId: number;
|
|
361
|
+
version: string;
|
|
362
|
+
createdAt: number;
|
|
363
|
+
releasedAt: number | null;
|
|
364
|
+
metadataHits: number;
|
|
365
|
+
artifactHits: number;
|
|
366
|
+
isDraft: boolean;
|
|
367
|
+
isCurrent: boolean;
|
|
368
|
+
artifacts: Array<{
|
|
369
|
+
id: number;
|
|
370
|
+
versionId: number;
|
|
371
|
+
filename: string;
|
|
372
|
+
s3Key: string;
|
|
373
|
+
size: number;
|
|
374
|
+
kind: 'metadata' | 'artifact';
|
|
375
|
+
}>;
|
|
376
|
+
}>;
|
|
377
|
+
}>;
|
|
378
|
+
/**
|
|
379
|
+
* Present only for session actors; omitted when authenticated with an API key.
|
|
380
|
+
*/
|
|
381
|
+
keys?: Array<{
|
|
382
|
+
id: number;
|
|
383
|
+
name: string;
|
|
384
|
+
hint: string;
|
|
385
|
+
createdAt: number;
|
|
386
|
+
lastUsedAt: number | null;
|
|
387
|
+
revokedAt: number | null;
|
|
388
|
+
}>;
|
|
389
|
+
};
|
|
390
|
+
type AppUpdated = {
|
|
391
|
+
app: {
|
|
392
|
+
id: number;
|
|
393
|
+
slug: string;
|
|
394
|
+
name: string;
|
|
395
|
+
s3Endpoint: string | null;
|
|
396
|
+
s3Region: string;
|
|
397
|
+
s3Bucket: string;
|
|
398
|
+
s3Prefix: string;
|
|
399
|
+
s3AccessKeyId: string;
|
|
400
|
+
s3ForcePathStyle: boolean;
|
|
401
|
+
releaseLogEnabled: boolean;
|
|
402
|
+
releaseLogLocales: Array<string>;
|
|
403
|
+
releaseLogFallbackLocale: string;
|
|
404
|
+
updaterKind: 'electron' | 'tauri' | 'sparkle';
|
|
405
|
+
createdAt: number;
|
|
406
|
+
};
|
|
407
|
+
};
|
|
408
|
+
type AppUpdateRequest = {
|
|
409
|
+
name: string;
|
|
410
|
+
slug: string;
|
|
411
|
+
s3Endpoint?: string | null;
|
|
412
|
+
s3Region: string;
|
|
413
|
+
s3Bucket: string;
|
|
414
|
+
s3Prefix?: string;
|
|
415
|
+
s3AccessKeyId: string;
|
|
416
|
+
s3SecretAccessKey?: string;
|
|
417
|
+
s3ForcePathStyle?: boolean;
|
|
418
|
+
updaterKind?: 'electron' | 'tauri' | 'sparkle';
|
|
419
|
+
};
|
|
420
|
+
type ChannelList = {
|
|
421
|
+
channels: Array<{
|
|
422
|
+
id: number;
|
|
423
|
+
appId: number;
|
|
424
|
+
name: string;
|
|
425
|
+
currentVersionId: number | null;
|
|
426
|
+
createdAt: number;
|
|
427
|
+
}>;
|
|
428
|
+
};
|
|
429
|
+
type ChannelCreated = {
|
|
430
|
+
channel: {
|
|
431
|
+
id: number;
|
|
432
|
+
appId: number;
|
|
433
|
+
name: string;
|
|
434
|
+
currentVersionId: number | null;
|
|
435
|
+
createdAt: number;
|
|
436
|
+
};
|
|
437
|
+
};
|
|
438
|
+
type CreateChannelRequest = {
|
|
439
|
+
name: string;
|
|
440
|
+
};
|
|
441
|
+
type SetCurrentVersionRequest = {
|
|
442
|
+
/**
|
|
443
|
+
* Version string, or null to clear current
|
|
444
|
+
*/
|
|
445
|
+
currentVersion: string | null;
|
|
446
|
+
};
|
|
447
|
+
type ChannelTrend = {
|
|
448
|
+
granularity: 'hour' | 'day';
|
|
449
|
+
points: Array<{
|
|
450
|
+
t: number;
|
|
451
|
+
metadata: number;
|
|
452
|
+
artifact: number;
|
|
453
|
+
}>;
|
|
454
|
+
};
|
|
455
|
+
type VersionTrend = {
|
|
456
|
+
points: Array<{
|
|
457
|
+
t: number;
|
|
458
|
+
metadata: number;
|
|
459
|
+
artifact: number;
|
|
460
|
+
}>;
|
|
461
|
+
};
|
|
462
|
+
type EditorNotes = {
|
|
463
|
+
notes: Array<{
|
|
464
|
+
locale: string;
|
|
465
|
+
markdown: string;
|
|
466
|
+
html: string;
|
|
467
|
+
text: string;
|
|
468
|
+
id: number;
|
|
469
|
+
versionId: number;
|
|
470
|
+
}>;
|
|
471
|
+
};
|
|
472
|
+
type PublicNotes = {
|
|
473
|
+
notes: Array<{
|
|
474
|
+
locale: string;
|
|
475
|
+
markdown: string;
|
|
476
|
+
html: string;
|
|
477
|
+
text: string;
|
|
478
|
+
version: string;
|
|
479
|
+
releasedAt: number;
|
|
480
|
+
}>;
|
|
481
|
+
};
|
|
482
|
+
type SavedNote = {
|
|
483
|
+
note: {
|
|
484
|
+
locale: string;
|
|
485
|
+
markdown: string;
|
|
486
|
+
html: string;
|
|
487
|
+
text: string;
|
|
488
|
+
id: number;
|
|
489
|
+
versionId: number;
|
|
490
|
+
};
|
|
491
|
+
};
|
|
492
|
+
type UpsertNoteRequest = {
|
|
493
|
+
markdown: string;
|
|
494
|
+
};
|
|
495
|
+
type NotesConfigResponse = {
|
|
496
|
+
releaseLog: {
|
|
497
|
+
enabled: boolean;
|
|
498
|
+
locales: Array<string>;
|
|
499
|
+
fallbackLocale: string;
|
|
500
|
+
};
|
|
501
|
+
};
|
|
502
|
+
type SaveNotesConfigRequest = {
|
|
503
|
+
enabled: boolean;
|
|
504
|
+
locales: Array<string>;
|
|
505
|
+
fallbackLocale: string;
|
|
506
|
+
};
|
|
507
|
+
type ReleaseMetadata = {
|
|
508
|
+
/**
|
|
509
|
+
* Custom JSON object; at most 16 KiB of compact UTF-8 JSON. Public after release.
|
|
510
|
+
*/
|
|
511
|
+
metadata: {
|
|
512
|
+
[key: string]: unknown;
|
|
513
|
+
};
|
|
514
|
+
version: string;
|
|
515
|
+
};
|
|
516
|
+
type ReplaceReleaseMetadataRequest = {
|
|
517
|
+
/**
|
|
518
|
+
* Custom JSON object; at most 16 KiB of compact UTF-8 JSON. Public after release.
|
|
519
|
+
*/
|
|
520
|
+
metadata: {
|
|
521
|
+
[key: string]: unknown;
|
|
522
|
+
};
|
|
523
|
+
};
|
|
524
|
+
type UploadInitResponse = {
|
|
525
|
+
uploadId: string;
|
|
526
|
+
expiresAt: number;
|
|
527
|
+
files: Array<{
|
|
528
|
+
filename: string;
|
|
529
|
+
key: string;
|
|
530
|
+
uploadUrl: string;
|
|
531
|
+
}>;
|
|
532
|
+
};
|
|
533
|
+
type InitUploadRequest = {
|
|
534
|
+
app?: string;
|
|
535
|
+
channel: string;
|
|
536
|
+
version: string;
|
|
537
|
+
createChannel?: boolean;
|
|
538
|
+
files: Array<{
|
|
539
|
+
filename: string;
|
|
540
|
+
size?: number;
|
|
541
|
+
}>;
|
|
542
|
+
};
|
|
543
|
+
type UploadFinalizeResponse = {
|
|
544
|
+
versionId: number;
|
|
545
|
+
version: string;
|
|
546
|
+
channel: string;
|
|
547
|
+
artifacts: Array<{
|
|
548
|
+
filename: string;
|
|
549
|
+
size: number;
|
|
550
|
+
kind: 'metadata' | 'artifact';
|
|
551
|
+
}>;
|
|
552
|
+
};
|
|
553
|
+
type FinalizeUploadRequest = {
|
|
554
|
+
uploadId: string;
|
|
555
|
+
app?: string;
|
|
556
|
+
release?: boolean;
|
|
557
|
+
/**
|
|
558
|
+
* Custom JSON object; at most 16 KiB of compact UTF-8 JSON. Public after release.
|
|
559
|
+
*/
|
|
560
|
+
metadata?: {
|
|
561
|
+
[key: string]: unknown;
|
|
562
|
+
};
|
|
563
|
+
};
|
|
564
|
+
type OkResponse = {
|
|
565
|
+
ok: true;
|
|
566
|
+
};
|
|
567
|
+
type TauriFeed = {
|
|
568
|
+
version: string;
|
|
569
|
+
pub_date: string;
|
|
570
|
+
platforms: {
|
|
571
|
+
[key: string]: {
|
|
572
|
+
url: string;
|
|
573
|
+
signature: string;
|
|
574
|
+
};
|
|
575
|
+
};
|
|
576
|
+
};
|
|
577
|
+
type GetAppData = {
|
|
578
|
+
body?: never;
|
|
579
|
+
path: {
|
|
580
|
+
appSlug: string;
|
|
581
|
+
};
|
|
582
|
+
query?: never;
|
|
583
|
+
url: '/api/v1/apps/{appSlug}';
|
|
584
|
+
};
|
|
585
|
+
type GetAppResponses = {
|
|
586
|
+
/**
|
|
587
|
+
* App detail
|
|
588
|
+
*/
|
|
589
|
+
200: AppDetail;
|
|
590
|
+
};
|
|
591
|
+
type GetAppResponse = GetAppResponses[keyof GetAppResponses];
|
|
592
|
+
type UpdateAppData = {
|
|
593
|
+
body: AppUpdateRequest;
|
|
594
|
+
path: {
|
|
595
|
+
appSlug: string;
|
|
596
|
+
};
|
|
597
|
+
query?: never;
|
|
598
|
+
url: '/api/v1/apps/{appSlug}';
|
|
599
|
+
};
|
|
600
|
+
type UpdateAppResponses = {
|
|
601
|
+
/**
|
|
602
|
+
* Updated app
|
|
603
|
+
*/
|
|
604
|
+
200: AppUpdated;
|
|
605
|
+
};
|
|
606
|
+
type UpdateAppResponse = UpdateAppResponses[keyof UpdateAppResponses];
|
|
607
|
+
type ListChannelsData = {
|
|
608
|
+
body?: never;
|
|
609
|
+
path: {
|
|
610
|
+
appSlug: string;
|
|
611
|
+
};
|
|
612
|
+
query?: never;
|
|
613
|
+
url: '/api/v1/apps/{appSlug}/channels';
|
|
614
|
+
};
|
|
615
|
+
type ListChannelsResponses = {
|
|
616
|
+
/**
|
|
617
|
+
* Channel list
|
|
618
|
+
*/
|
|
619
|
+
200: ChannelList;
|
|
620
|
+
};
|
|
621
|
+
type ListChannelsResponse = ListChannelsResponses[keyof ListChannelsResponses];
|
|
622
|
+
type CreateChannelData = {
|
|
623
|
+
body: CreateChannelRequest;
|
|
624
|
+
path: {
|
|
625
|
+
appSlug: string;
|
|
626
|
+
};
|
|
627
|
+
query?: never;
|
|
628
|
+
url: '/api/v1/apps/{appSlug}/channels';
|
|
629
|
+
};
|
|
630
|
+
type CreateChannelResponses = {
|
|
631
|
+
/**
|
|
632
|
+
* Created
|
|
633
|
+
*/
|
|
634
|
+
201: ChannelCreated;
|
|
635
|
+
};
|
|
636
|
+
type CreateChannelResponse = CreateChannelResponses[keyof CreateChannelResponses];
|
|
637
|
+
type DeleteChannelData = {
|
|
638
|
+
body?: never;
|
|
639
|
+
path: {
|
|
640
|
+
appSlug: string;
|
|
641
|
+
channel: string;
|
|
642
|
+
};
|
|
643
|
+
query?: never;
|
|
644
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}';
|
|
645
|
+
};
|
|
646
|
+
type DeleteChannelResponses = {
|
|
647
|
+
/**
|
|
648
|
+
* Deleted
|
|
649
|
+
*/
|
|
650
|
+
200: OkResponse;
|
|
651
|
+
};
|
|
652
|
+
type DeleteChannelResponse = DeleteChannelResponses[keyof DeleteChannelResponses];
|
|
653
|
+
type SetCurrentVersionData = {
|
|
654
|
+
body: SetCurrentVersionRequest;
|
|
655
|
+
path: {
|
|
656
|
+
appSlug: string;
|
|
657
|
+
channel: string;
|
|
658
|
+
};
|
|
659
|
+
query?: never;
|
|
660
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}';
|
|
661
|
+
};
|
|
662
|
+
type SetCurrentVersionResponses = {
|
|
663
|
+
/**
|
|
664
|
+
* Updated
|
|
665
|
+
*/
|
|
666
|
+
200: OkResponse;
|
|
667
|
+
};
|
|
668
|
+
type SetCurrentVersionResponse = SetCurrentVersionResponses[keyof SetCurrentVersionResponses];
|
|
669
|
+
type GetChannelTrendData = {
|
|
670
|
+
body?: never;
|
|
671
|
+
path: {
|
|
672
|
+
appSlug: string;
|
|
673
|
+
channel: string;
|
|
674
|
+
};
|
|
675
|
+
query?: {
|
|
676
|
+
range?: 7 | 30 | 90;
|
|
677
|
+
};
|
|
678
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/trend';
|
|
679
|
+
};
|
|
680
|
+
type GetChannelTrendResponses = {
|
|
681
|
+
/**
|
|
682
|
+
* Trend series
|
|
683
|
+
*/
|
|
684
|
+
200: ChannelTrend;
|
|
685
|
+
};
|
|
686
|
+
type GetChannelTrendResponse = GetChannelTrendResponses[keyof GetChannelTrendResponses];
|
|
687
|
+
type DeleteVersionData = {
|
|
688
|
+
body?: never;
|
|
689
|
+
path: {
|
|
690
|
+
appSlug: string;
|
|
691
|
+
channel: string;
|
|
692
|
+
version: string;
|
|
693
|
+
};
|
|
694
|
+
query?: never;
|
|
695
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/versions/{version}';
|
|
696
|
+
};
|
|
697
|
+
type DeleteVersionResponses = {
|
|
698
|
+
/**
|
|
699
|
+
* Deleted
|
|
700
|
+
*/
|
|
701
|
+
200: OkResponse;
|
|
702
|
+
};
|
|
703
|
+
type DeleteVersionResponse = DeleteVersionResponses[keyof DeleteVersionResponses];
|
|
704
|
+
type GetArtifactData = {
|
|
705
|
+
body?: never;
|
|
706
|
+
path: {
|
|
707
|
+
appSlug: string;
|
|
708
|
+
channel: string;
|
|
709
|
+
version: string;
|
|
710
|
+
filename: string;
|
|
711
|
+
};
|
|
712
|
+
query?: never;
|
|
713
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/versions/{version}/artifacts/{filename}';
|
|
714
|
+
};
|
|
715
|
+
type GetArtifactErrors = {
|
|
716
|
+
/**
|
|
717
|
+
* Missing version or file
|
|
718
|
+
*/
|
|
719
|
+
404: Error;
|
|
720
|
+
};
|
|
721
|
+
type GetArtifactError = GetArtifactErrors[keyof GetArtifactErrors];
|
|
722
|
+
type GetReleaseMetadataData = {
|
|
723
|
+
body?: never;
|
|
724
|
+
path: {
|
|
725
|
+
appSlug: string;
|
|
726
|
+
channel: string;
|
|
727
|
+
version: string;
|
|
728
|
+
};
|
|
729
|
+
query?: never;
|
|
730
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/versions/{version}/metadata';
|
|
731
|
+
};
|
|
732
|
+
type GetReleaseMetadataErrors = {
|
|
733
|
+
/**
|
|
734
|
+
* Missing or draft
|
|
735
|
+
*/
|
|
736
|
+
404: Error;
|
|
737
|
+
};
|
|
738
|
+
type GetReleaseMetadataError = GetReleaseMetadataErrors[keyof GetReleaseMetadataErrors];
|
|
739
|
+
type GetReleaseMetadataResponses = {
|
|
740
|
+
/**
|
|
741
|
+
* Version and custom metadata
|
|
742
|
+
*/
|
|
743
|
+
200: ReleaseMetadata;
|
|
744
|
+
};
|
|
745
|
+
type GetReleaseMetadataResponse = GetReleaseMetadataResponses[keyof GetReleaseMetadataResponses];
|
|
746
|
+
type ReplaceReleaseMetadataData = {
|
|
747
|
+
body: ReplaceReleaseMetadataRequest;
|
|
748
|
+
path: {
|
|
749
|
+
appSlug: string;
|
|
750
|
+
channel: string;
|
|
751
|
+
version: string;
|
|
752
|
+
};
|
|
753
|
+
query?: never;
|
|
754
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/versions/{version}/metadata';
|
|
755
|
+
};
|
|
756
|
+
type ReplaceReleaseMetadataResponses = {
|
|
757
|
+
/**
|
|
758
|
+
* Version and custom metadata
|
|
759
|
+
*/
|
|
760
|
+
200: ReleaseMetadata;
|
|
761
|
+
};
|
|
762
|
+
type ReplaceReleaseMetadataResponse = ReplaceReleaseMetadataResponses[keyof ReplaceReleaseMetadataResponses];
|
|
763
|
+
type GetVersionTrendData = {
|
|
764
|
+
body?: never;
|
|
765
|
+
path: {
|
|
766
|
+
appSlug: string;
|
|
767
|
+
channel: string;
|
|
768
|
+
version: string;
|
|
769
|
+
};
|
|
770
|
+
query?: never;
|
|
771
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/versions/{version}/trend';
|
|
772
|
+
};
|
|
773
|
+
type GetVersionTrendResponses = {
|
|
774
|
+
/**
|
|
775
|
+
* Trend series
|
|
776
|
+
*/
|
|
777
|
+
200: VersionTrend;
|
|
778
|
+
};
|
|
779
|
+
type GetVersionTrendResponse = GetVersionTrendResponses[keyof GetVersionTrendResponses];
|
|
780
|
+
type GetEditorNotesData = {
|
|
781
|
+
body?: never;
|
|
782
|
+
path: {
|
|
783
|
+
appSlug: string;
|
|
784
|
+
channel: string;
|
|
785
|
+
version: string;
|
|
786
|
+
};
|
|
787
|
+
query?: never;
|
|
788
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/versions/{version}/notes';
|
|
789
|
+
};
|
|
790
|
+
type GetEditorNotesResponses = {
|
|
791
|
+
/**
|
|
792
|
+
* Notes
|
|
793
|
+
*/
|
|
794
|
+
200: EditorNotes;
|
|
795
|
+
};
|
|
796
|
+
type GetEditorNotesResponse = GetEditorNotesResponses[keyof GetEditorNotesResponses];
|
|
797
|
+
type DeleteNoteData = {
|
|
798
|
+
body?: never;
|
|
799
|
+
path: {
|
|
800
|
+
appSlug: string;
|
|
801
|
+
channel: string;
|
|
802
|
+
version: string;
|
|
803
|
+
locale: string;
|
|
804
|
+
};
|
|
805
|
+
query?: never;
|
|
806
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/versions/{version}/notes/{locale}';
|
|
807
|
+
};
|
|
808
|
+
type DeleteNoteResponses = {
|
|
809
|
+
/**
|
|
810
|
+
* Deleted
|
|
811
|
+
*/
|
|
812
|
+
200: OkResponse;
|
|
813
|
+
};
|
|
814
|
+
type DeleteNoteResponse = DeleteNoteResponses[keyof DeleteNoteResponses];
|
|
815
|
+
type UpsertNoteData = {
|
|
816
|
+
body: UpsertNoteRequest;
|
|
817
|
+
path: {
|
|
818
|
+
appSlug: string;
|
|
819
|
+
channel: string;
|
|
820
|
+
version: string;
|
|
821
|
+
locale: string;
|
|
822
|
+
};
|
|
823
|
+
query?: never;
|
|
824
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/versions/{version}/notes/{locale}';
|
|
825
|
+
};
|
|
826
|
+
type UpsertNoteResponses = {
|
|
827
|
+
/**
|
|
828
|
+
* Saved note
|
|
829
|
+
*/
|
|
830
|
+
200: SavedNote;
|
|
831
|
+
};
|
|
832
|
+
type UpsertNoteResponse = UpsertNoteResponses[keyof UpsertNoteResponses];
|
|
833
|
+
type ListPublicNotesData = {
|
|
834
|
+
body?: never;
|
|
835
|
+
path: {
|
|
836
|
+
appSlug: string;
|
|
837
|
+
channel: string;
|
|
838
|
+
};
|
|
839
|
+
query?: {
|
|
840
|
+
from?: string;
|
|
841
|
+
to?: string;
|
|
842
|
+
locale?: string;
|
|
843
|
+
};
|
|
844
|
+
url: '/api/v1/apps/{appSlug}/channels/{channel}/notes';
|
|
845
|
+
};
|
|
846
|
+
type ListPublicNotesResponses = {
|
|
847
|
+
/**
|
|
848
|
+
* Public notes
|
|
849
|
+
*/
|
|
850
|
+
200: PublicNotes;
|
|
851
|
+
};
|
|
852
|
+
type ListPublicNotesResponse = ListPublicNotesResponses[keyof ListPublicNotesResponses];
|
|
853
|
+
type SaveNotesConfigData = {
|
|
854
|
+
body: SaveNotesConfigRequest;
|
|
855
|
+
path: {
|
|
856
|
+
appSlug: string;
|
|
857
|
+
};
|
|
858
|
+
query?: never;
|
|
859
|
+
url: '/api/v1/apps/{appSlug}/notes-config';
|
|
860
|
+
};
|
|
861
|
+
type SaveNotesConfigResponses = {
|
|
862
|
+
/**
|
|
863
|
+
* Saved config
|
|
864
|
+
*/
|
|
865
|
+
200: NotesConfigResponse;
|
|
866
|
+
};
|
|
867
|
+
type SaveNotesConfigResponse = SaveNotesConfigResponses[keyof SaveNotesConfigResponses];
|
|
868
|
+
type InitUploadData = {
|
|
869
|
+
body: InitUploadRequest;
|
|
870
|
+
path?: never;
|
|
871
|
+
query?: never;
|
|
872
|
+
url: '/api/v1/upload/init';
|
|
873
|
+
};
|
|
874
|
+
type InitUploadResponses = {
|
|
875
|
+
/**
|
|
876
|
+
* uploadId and presigned PUT URLs
|
|
877
|
+
*/
|
|
878
|
+
200: UploadInitResponse;
|
|
879
|
+
};
|
|
880
|
+
type InitUploadResponse = InitUploadResponses[keyof InitUploadResponses];
|
|
881
|
+
type FinalizeUploadData = {
|
|
882
|
+
body: FinalizeUploadRequest;
|
|
883
|
+
path?: never;
|
|
884
|
+
query?: never;
|
|
885
|
+
url: '/api/v1/upload/finalize';
|
|
886
|
+
};
|
|
887
|
+
type FinalizeUploadResponses = {
|
|
888
|
+
/**
|
|
889
|
+
* Version created
|
|
890
|
+
*/
|
|
891
|
+
200: UploadFinalizeResponse;
|
|
892
|
+
};
|
|
893
|
+
type FinalizeUploadResponse = FinalizeUploadResponses[keyof FinalizeUploadResponses];
|
|
894
|
+
type GetChannelFeedData = {
|
|
895
|
+
body?: never;
|
|
896
|
+
path: {
|
|
897
|
+
appSlug: string;
|
|
898
|
+
channel: string;
|
|
899
|
+
};
|
|
900
|
+
query?: never;
|
|
901
|
+
url: '/api/update/{appSlug}/{channel}';
|
|
902
|
+
};
|
|
903
|
+
type GetChannelFeedErrors = {
|
|
904
|
+
/**
|
|
905
|
+
* Missing or draft
|
|
906
|
+
*/
|
|
907
|
+
404: Error;
|
|
908
|
+
};
|
|
909
|
+
type GetChannelFeedError = GetChannelFeedErrors[keyof GetChannelFeedErrors];
|
|
910
|
+
type GetChannelFeedResponses = {
|
|
911
|
+
/**
|
|
912
|
+
* Generated feed document
|
|
913
|
+
*/
|
|
914
|
+
200: TauriFeed;
|
|
915
|
+
};
|
|
916
|
+
type GetChannelFeedResponse = GetChannelFeedResponses[keyof GetChannelFeedResponses];
|
|
917
|
+
type GetFeedFileData = {
|
|
918
|
+
body?: never;
|
|
919
|
+
path: {
|
|
920
|
+
appSlug: string;
|
|
921
|
+
channel: string;
|
|
922
|
+
filename: string;
|
|
923
|
+
};
|
|
924
|
+
query?: never;
|
|
925
|
+
url: '/api/update/{appSlug}/{channel}/{filename}';
|
|
926
|
+
};
|
|
927
|
+
type GetFeedFileErrors = {
|
|
928
|
+
/**
|
|
929
|
+
* Missing or draft
|
|
930
|
+
*/
|
|
931
|
+
404: Error;
|
|
932
|
+
};
|
|
933
|
+
type GetFeedFileError = GetFeedFileErrors[keyof GetFeedFileErrors];
|
|
934
|
+
type GetFeedFileResponses = {
|
|
935
|
+
/**
|
|
936
|
+
* Generated feed document
|
|
937
|
+
*/
|
|
938
|
+
200: TauriFeed;
|
|
939
|
+
};
|
|
940
|
+
type GetFeedFileResponse = GetFeedFileResponses[keyof GetFeedFileResponses];
|
|
941
|
+
|
|
942
|
+
type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options$1<TData, ThrowOnError, TResponse> & {
|
|
943
|
+
/**
|
|
944
|
+
* You can provide a client instance returned by `createClient()` instead of
|
|
945
|
+
* individual options. This might be also useful if you want to implement a
|
|
946
|
+
* custom client.
|
|
947
|
+
*/
|
|
948
|
+
client?: Client;
|
|
949
|
+
/**
|
|
950
|
+
* You can pass arbitrary values through the `meta` object. This can be
|
|
951
|
+
* used to access values that aren't defined as part of the SDK function.
|
|
952
|
+
*/
|
|
953
|
+
meta?: keyof ClientMeta extends never ? Record<string, unknown> : ClientMeta;
|
|
954
|
+
};
|
|
955
|
+
/**
|
|
956
|
+
* Get app
|
|
957
|
+
*
|
|
958
|
+
* App detail including channels, versions, and keys.
|
|
959
|
+
*/
|
|
960
|
+
declare const getApp: <ThrowOnError extends boolean = false>(options: Options<GetAppData, ThrowOnError>) => RequestResult<GetAppResponses, unknown, ThrowOnError>;
|
|
961
|
+
/**
|
|
962
|
+
* Update app settings
|
|
963
|
+
*
|
|
964
|
+
* Probes S3. API keys may only change `name`. Slug and storage fields are session-only; resubmitting unchanged values is allowed. Changing endpoint/bucket/prefix with existing artifacts probes the newest object at the new location.
|
|
965
|
+
*/
|
|
966
|
+
declare const updateApp: <ThrowOnError extends boolean = false>(options: Options<UpdateAppData, ThrowOnError>) => RequestResult<UpdateAppResponses, unknown, ThrowOnError>;
|
|
967
|
+
/**
|
|
968
|
+
* List channels
|
|
969
|
+
*/
|
|
970
|
+
declare const listChannels: <ThrowOnError extends boolean = false>(options: Options<ListChannelsData, ThrowOnError>) => RequestResult<ListChannelsResponses, unknown, ThrowOnError>;
|
|
971
|
+
/**
|
|
972
|
+
* Create a channel
|
|
973
|
+
*/
|
|
974
|
+
declare const createChannel: <ThrowOnError extends boolean = false>(options: Options<CreateChannelData, ThrowOnError>) => RequestResult<CreateChannelResponses, unknown, ThrowOnError>;
|
|
975
|
+
/**
|
|
976
|
+
* Delete a channel
|
|
977
|
+
*
|
|
978
|
+
* Deletes the channel and its objects.
|
|
979
|
+
*/
|
|
980
|
+
declare const deleteChannel: <ThrowOnError extends boolean = false>(options: Options<DeleteChannelData, ThrowOnError>) => RequestResult<DeleteChannelResponses, unknown, ThrowOnError>;
|
|
981
|
+
/**
|
|
982
|
+
* Set current version
|
|
983
|
+
*
|
|
984
|
+
* Promote a draft (`currentVersion`) or roll back to a released version.
|
|
985
|
+
*/
|
|
986
|
+
declare const setCurrentVersion: <ThrowOnError extends boolean = false>(options: Options<SetCurrentVersionData, ThrowOnError>) => RequestResult<SetCurrentVersionResponses, unknown, ThrowOnError>;
|
|
987
|
+
/**
|
|
988
|
+
* Channel hit trend
|
|
989
|
+
*/
|
|
990
|
+
declare const getChannelTrend: <ThrowOnError extends boolean = false>(options: Options<GetChannelTrendData, ThrowOnError>) => RequestResult<GetChannelTrendResponses, unknown, ThrowOnError>;
|
|
991
|
+
/**
|
|
992
|
+
* Delete a version
|
|
993
|
+
*
|
|
994
|
+
* Deletes the version and its objects.
|
|
995
|
+
*/
|
|
996
|
+
declare const deleteVersion: <ThrowOnError extends boolean = false>(options: Options<DeleteVersionData, ThrowOnError>) => RequestResult<DeleteVersionResponses, unknown, ThrowOnError>;
|
|
997
|
+
/**
|
|
998
|
+
* Get artifact
|
|
999
|
+
*
|
|
1000
|
+
* Presigned GET for one artifact on that version (drafts included). Does not increment hits.
|
|
1001
|
+
*/
|
|
1002
|
+
declare const getArtifact: <ThrowOnError extends boolean = false>(options: Options<GetArtifactData, ThrowOnError>) => RequestResult<unknown, GetArtifactErrors, ThrowOnError>;
|
|
1003
|
+
/**
|
|
1004
|
+
* Get release metadata
|
|
1005
|
+
*
|
|
1006
|
+
* Read custom metadata for an exact version. Released versions are public; drafts require a session or bound app key. Explicit Authorization is validated (401/403). Returns no-store and does not increment update checks. Independent of release log.
|
|
1007
|
+
*/
|
|
1008
|
+
declare const getReleaseMetadata: <ThrowOnError extends boolean = false>(options: Options<GetReleaseMetadataData, ThrowOnError>) => RequestResult<GetReleaseMetadataResponses, GetReleaseMetadataErrors, ThrowOnError>;
|
|
1009
|
+
/**
|
|
1010
|
+
* Replace release metadata
|
|
1011
|
+
*
|
|
1012
|
+
* Replace the whole metadata object (16 KiB UTF-8 JSON); {} clears it. Last write wins.
|
|
1013
|
+
*/
|
|
1014
|
+
declare const replaceReleaseMetadata: <ThrowOnError extends boolean = false>(options: Options<ReplaceReleaseMetadataData, ThrowOnError>) => RequestResult<ReplaceReleaseMetadataResponses, unknown, ThrowOnError>;
|
|
1015
|
+
/**
|
|
1016
|
+
* Version hit trend
|
|
1017
|
+
*
|
|
1018
|
+
* Empty for drafts.
|
|
1019
|
+
*/
|
|
1020
|
+
declare const getVersionTrend: <ThrowOnError extends boolean = false>(options: Options<GetVersionTrendData, ThrowOnError>) => RequestResult<GetVersionTrendResponses, unknown, ThrowOnError>;
|
|
1021
|
+
/**
|
|
1022
|
+
* Get editor notes
|
|
1023
|
+
*
|
|
1024
|
+
* Every locale for one version.
|
|
1025
|
+
*/
|
|
1026
|
+
declare const getEditorNotes: <ThrowOnError extends boolean = false>(options: Options<GetEditorNotesData, ThrowOnError>) => RequestResult<GetEditorNotesResponses, unknown, ThrowOnError>;
|
|
1027
|
+
/**
|
|
1028
|
+
* Delete a locale note
|
|
1029
|
+
*/
|
|
1030
|
+
declare const deleteNote: <ThrowOnError extends boolean = false>(options: Options<DeleteNoteData, ThrowOnError>) => RequestResult<DeleteNoteResponses, unknown, ThrowOnError>;
|
|
1031
|
+
/**
|
|
1032
|
+
* Upsert a locale note
|
|
1033
|
+
*/
|
|
1034
|
+
declare const upsertNote: <ThrowOnError extends boolean = false>(options: Options<UpsertNoteData, ThrowOnError>) => RequestResult<UpsertNoteResponses, unknown, ThrowOnError>;
|
|
1035
|
+
/**
|
|
1036
|
+
* Get public notes
|
|
1037
|
+
*
|
|
1038
|
+
* Released versions only; no auth.
|
|
1039
|
+
*/
|
|
1040
|
+
declare const listPublicNotes: <ThrowOnError extends boolean = false>(options: Options<ListPublicNotesData, ThrowOnError>) => RequestResult<ListPublicNotesResponses, unknown, ThrowOnError>;
|
|
1041
|
+
/**
|
|
1042
|
+
* Save notes config
|
|
1043
|
+
*
|
|
1044
|
+
* Saves release-log config without an S3 probe.
|
|
1045
|
+
*/
|
|
1046
|
+
declare const saveNotesConfig: <ThrowOnError extends boolean = false>(options: Options<SaveNotesConfigData, ThrowOnError>) => RequestResult<SaveNotesConfigResponses, unknown, ThrowOnError>;
|
|
1047
|
+
/**
|
|
1048
|
+
* Start upload
|
|
1049
|
+
*
|
|
1050
|
+
* Start a pending upload. Electron requires at least one `.yml`; Tauri requires `latest.json` and/or artifact+`.sig` pairs; Sparkle requires `appcast.xml` and/or archive+`.sig` (see spec).
|
|
1051
|
+
*/
|
|
1052
|
+
declare const initUpload: <ThrowOnError extends boolean = false>(options: Options<InitUploadData, ThrowOnError>) => RequestResult<InitUploadResponses, unknown, ThrowOnError>;
|
|
1053
|
+
/**
|
|
1054
|
+
* Finalize upload
|
|
1055
|
+
*
|
|
1056
|
+
* Creates a version. Default is draft; `release: true` goes live.
|
|
1057
|
+
*/
|
|
1058
|
+
declare const finalizeUpload: <ThrowOnError extends boolean = false>(options: Options<FinalizeUploadData, ThrowOnError>) => RequestResult<FinalizeUploadResponses, unknown, ThrowOnError>;
|
|
1059
|
+
/**
|
|
1060
|
+
* Get channel feed
|
|
1061
|
+
*
|
|
1062
|
+
* Tauri returns JSON; Sparkle returns a one-item appcast.
|
|
1063
|
+
*/
|
|
1064
|
+
declare const getChannelFeed: <ThrowOnError extends boolean = false>(options: Options<GetChannelFeedData, ThrowOnError>) => RequestResult<GetChannelFeedResponses, GetChannelFeedErrors, ThrowOnError>;
|
|
1065
|
+
/**
|
|
1066
|
+
* Get public feed
|
|
1067
|
+
*
|
|
1068
|
+
* Electron yml / Tauri latest.json / Sparkle appcast; artifacts 302. Drafts are 404.
|
|
1069
|
+
*/
|
|
1070
|
+
declare const getFeedFile: <ThrowOnError extends boolean = false>(options: Options<GetFeedFileData, ThrowOnError>) => RequestResult<GetFeedFileResponses, GetFeedFileErrors, ThrowOnError>;
|
|
1071
|
+
|
|
1072
|
+
interface ShukkaClientOptions {
|
|
1073
|
+
/** Instance origin, for example `https://updates.example.com`. */
|
|
1074
|
+
baseUrl: string;
|
|
1075
|
+
/** App-scoped API key (`shk_…`). Omit for the public feed and notes operations. */
|
|
1076
|
+
apiKey?: string;
|
|
1077
|
+
/** Custom fetch implementation (tests, proxies, non-standard runtimes). */
|
|
1078
|
+
fetch?: typeof globalThis.fetch;
|
|
1079
|
+
}
|
|
1080
|
+
declare function createShukkaClient(options: ShukkaClientOptions): {
|
|
1081
|
+
client: Client;
|
|
1082
|
+
getApp: <T extends boolean = false>(input: Omit<Options<GetAppData, T>, "client">) => RequestResult<GetAppResponses, unknown, T, "fields">;
|
|
1083
|
+
updateApp: <T extends boolean = false>(input: Omit<Options<UpdateAppData, T>, "client">) => RequestResult<UpdateAppResponses, unknown, T, "fields">;
|
|
1084
|
+
listChannels: <T extends boolean = false>(input: Omit<Options<ListChannelsData, T>, "client">) => RequestResult<ListChannelsResponses, unknown, T, "fields">;
|
|
1085
|
+
createChannel: <T extends boolean = false>(input: Omit<Options<CreateChannelData, T>, "client">) => RequestResult<CreateChannelResponses, unknown, T, "fields">;
|
|
1086
|
+
setCurrentVersion: <T extends boolean = false>(input: Omit<Options<SetCurrentVersionData, T>, "client">) => RequestResult<SetCurrentVersionResponses, unknown, T, "fields">;
|
|
1087
|
+
deleteChannel: <T extends boolean = false>(input: Omit<Options<DeleteChannelData, T>, "client">) => RequestResult<DeleteChannelResponses, unknown, T, "fields">;
|
|
1088
|
+
getChannelTrend: <T extends boolean = false>(input: Omit<Options<GetChannelTrendData, T>, "client">) => RequestResult<GetChannelTrendResponses, unknown, T, "fields">;
|
|
1089
|
+
deleteVersion: <T extends boolean = false>(input: Omit<Options<DeleteVersionData, T>, "client">) => RequestResult<DeleteVersionResponses, unknown, T, "fields">;
|
|
1090
|
+
getArtifact: <T extends boolean = false>(input: Omit<Options<GetArtifactData, T>, "client">) => RequestResult<unknown, GetArtifactErrors, T, "fields">;
|
|
1091
|
+
getReleaseMetadata: <T extends boolean = false>(input: Omit<Options<GetReleaseMetadataData, T>, "client">) => RequestResult<GetReleaseMetadataResponses, GetReleaseMetadataErrors, T, "fields">;
|
|
1092
|
+
replaceReleaseMetadata: <T extends boolean = false>(input: Omit<Options<ReplaceReleaseMetadataData, T>, "client">) => RequestResult<ReplaceReleaseMetadataResponses, unknown, T, "fields">;
|
|
1093
|
+
getVersionTrend: <T extends boolean = false>(input: Omit<Options<GetVersionTrendData, T>, "client">) => RequestResult<GetVersionTrendResponses, unknown, T, "fields">;
|
|
1094
|
+
getEditorNotes: <T extends boolean = false>(input: Omit<Options<GetEditorNotesData, T>, "client">) => RequestResult<GetEditorNotesResponses, unknown, T, "fields">;
|
|
1095
|
+
upsertNote: <T extends boolean = false>(input: Omit<Options<UpsertNoteData, T>, "client">) => RequestResult<UpsertNoteResponses, unknown, T, "fields">;
|
|
1096
|
+
deleteNote: <T extends boolean = false>(input: Omit<Options<DeleteNoteData, T>, "client">) => RequestResult<DeleteNoteResponses, unknown, T, "fields">;
|
|
1097
|
+
listPublicNotes: <T extends boolean = false>(input: Omit<Options<ListPublicNotesData, T>, "client">) => RequestResult<ListPublicNotesResponses, unknown, T, "fields">;
|
|
1098
|
+
saveNotesConfig: <T extends boolean = false>(input: Omit<Options<SaveNotesConfigData, T>, "client">) => RequestResult<SaveNotesConfigResponses, unknown, T, "fields">;
|
|
1099
|
+
initUpload: <T extends boolean = false>(input: Omit<Options<InitUploadData, T>, "client">) => RequestResult<InitUploadResponses, unknown, T, "fields">;
|
|
1100
|
+
finalizeUpload: <T extends boolean = false>(input: Omit<Options<FinalizeUploadData, T>, "client">) => RequestResult<FinalizeUploadResponses, unknown, T, "fields">;
|
|
1101
|
+
getChannelFeed: <T extends boolean = false>(input: Omit<Options<GetChannelFeedData, T>, "client">) => RequestResult<GetChannelFeedResponses, GetChannelFeedErrors, T, "fields">;
|
|
1102
|
+
getFeedFile: <T extends boolean = false>(input: Omit<Options<GetFeedFileData, T>, "client">) => RequestResult<GetFeedFileResponses, GetFeedFileErrors, T, "fields">;
|
|
1103
|
+
};
|
|
1104
|
+
type ShukkaClient = ReturnType<typeof createShukkaClient>;
|
|
1105
|
+
|
|
1106
|
+
export { type AppDetail, type AppUpdateRequest, type AppUpdated, type ChannelCreated, type ChannelList, type ChannelTrend, type ClientOptions, type CreateChannelData, type CreateChannelRequest, type CreateChannelResponse, type CreateChannelResponses, type DeleteChannelData, type DeleteChannelResponse, type DeleteChannelResponses, type DeleteNoteData, type DeleteNoteResponse, type DeleteNoteResponses, type DeleteVersionData, type DeleteVersionResponse, type DeleteVersionResponses, type EditorNotes, type Error, type FinalizeUploadData, type FinalizeUploadRequest, type FinalizeUploadResponse, type FinalizeUploadResponses, type GetAppData, type GetAppResponse, type GetAppResponses, type GetArtifactData, type GetArtifactError, type GetArtifactErrors, type GetChannelFeedData, type GetChannelFeedError, type GetChannelFeedErrors, type GetChannelFeedResponse, type GetChannelFeedResponses, type GetChannelTrendData, type GetChannelTrendResponse, type GetChannelTrendResponses, type GetEditorNotesData, type GetEditorNotesResponse, type GetEditorNotesResponses, type GetFeedFileData, type GetFeedFileError, type GetFeedFileErrors, type GetFeedFileResponse, type GetFeedFileResponses, type GetReleaseMetadataData, type GetReleaseMetadataError, type GetReleaseMetadataErrors, type GetReleaseMetadataResponse, type GetReleaseMetadataResponses, type GetVersionTrendData, type GetVersionTrendResponse, type GetVersionTrendResponses, type InitUploadData, type InitUploadRequest, type InitUploadResponse, type InitUploadResponses, type ListChannelsData, type ListChannelsResponse, type ListChannelsResponses, type ListPublicNotesData, type ListPublicNotesResponse, type ListPublicNotesResponses, type NotesConfigResponse, type OkResponse, type Options, type PublicNotes, type ReleaseMetadata, type ReplaceReleaseMetadataData, type ReplaceReleaseMetadataRequest, type ReplaceReleaseMetadataResponse, type ReplaceReleaseMetadataResponses, type SaveNotesConfigData, type SaveNotesConfigRequest, type SaveNotesConfigResponse, type SaveNotesConfigResponses, type SavedNote, type SetCurrentVersionData, type SetCurrentVersionRequest, type SetCurrentVersionResponse, type SetCurrentVersionResponses, type ShukkaClient, type ShukkaClientOptions, type TauriFeed, type UpdateAppData, type UpdateAppResponse, type UpdateAppResponses, type UploadFinalizeResponse, type UploadInitResponse, type UpsertNoteData, type UpsertNoteRequest, type UpsertNoteResponse, type UpsertNoteResponses, type VersionTrend, createChannel, createShukkaClient, deleteChannel, deleteNote, deleteVersion, finalizeUpload, getApp, getArtifact, getChannelFeed, getChannelTrend, getEditorNotes, getFeedFile, getReleaseMetadata, getVersionTrend, initUpload, listChannels, listPublicNotes, replaceReleaseMetadata, saveNotesConfig, setCurrentVersion, updateApp, upsertNote };
|