@leaflow/sdk 0.15.0 → 0.17.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.
@@ -363,6 +363,8 @@ export interface paths {
363
363
  *
364
364
  * To change enrollment settings, use PATCH. This endpoint returns an error when the parameters differ, and does not update an existing configuration.
365
365
  *
366
+ * A failed call leaves the machine recorded with `monitoring_status: FAILED`; the reason is reported in `last_error` via `GET /servers/{serverId}`.
367
+ *
366
368
  * The `tls_psk` in the response is **returned only this once**; store it immediately. If it is lost, it must be rotated.
367
369
  */
368
370
  put: operations["enable-server-monitoring"];
@@ -862,6 +864,71 @@ export interface paths {
862
864
  patch?: never;
863
865
  trace?: never;
864
866
  };
867
+ "/api/v1/web-checks/{checkId}": {
868
+ parameters: {
869
+ query?: never;
870
+ header?: never;
871
+ path: {
872
+ checkId: string;
873
+ };
874
+ cookie?: never;
875
+ };
876
+ /** Get a project-level web check */
877
+ get: operations["get-project-web-check"];
878
+ /**
879
+ * Create a web check that is not tied to a machine, or replace it by the same id
880
+ * @description **Create or replace**: to modify a check, call this endpoint again with the same id.
881
+ *
882
+ * Unlike `/servers/{serverId}/web-checks/{checkId}`, this check does not belong to any machine — use it when the target is simply a URL. Nothing needs to be enrolled first.
883
+ *
884
+ * A check bound to a machine is removed together with that machine; a project-level check is not. Where a check belongs cannot be changed afterwards: move it by deleting and recreating it.
885
+ */
886
+ put: operations["put-project-web-check"];
887
+ post?: never;
888
+ /**
889
+ * Delete a project-level web check
890
+ * @description The corresponding check task and trigger are removed from the monitoring system as well.
891
+ */
892
+ delete: operations["delete-project-web-check"];
893
+ options?: never;
894
+ head?: never;
895
+ patch?: never;
896
+ trace?: never;
897
+ };
898
+ "/api/v1/status-page/domain": {
899
+ parameters: {
900
+ query?: never;
901
+ header?: never;
902
+ path?: never;
903
+ cookie?: never;
904
+ };
905
+ /**
906
+ * Get the custom domain and its certificate state
907
+ * @description Reports whether the domain currently resolves to the status page and where its certificate stands.
908
+ *
909
+ * `expected_cname` is the value the domain must point at. `observed_cname` is what it currently resolves to, which is what to show the user when verification fails — "verification failed" on its own tells them nothing about what to fix.
910
+ */
911
+ get: operations["get-status-page-domain"];
912
+ /**
913
+ * Bind a custom domain to this status page
914
+ * @description The domain must already point at the status page by CNAME. Binding is rejected until it does, and the error carries both the expected and the observed target.
915
+ *
916
+ * Ownership is verified before the domain is stored, and it is verified again before each certificate is issued: a domain whose CNAME is later removed stops being served.
917
+ *
918
+ * A certificate is requested in the background — this call does not wait for it. Poll GET on this endpoint to follow its progress; until a certificate is active, the domain does not serve HTTPS while the page remains reachable at its shared address.
919
+ */
920
+ put: operations["put-status-page-domain"];
921
+ post?: never;
922
+ /**
923
+ * Unbind the custom domain
924
+ * @description The page stays reachable at its shared address. Certificate renewal for the domain stops; the certificate already issued is left to expire.
925
+ */
926
+ delete: operations["delete-status-page-domain"];
927
+ options?: never;
928
+ head?: never;
929
+ patch?: never;
930
+ trace?: never;
931
+ };
865
932
  }
866
933
  export type webhooks = Record<string, never>;
867
934
  export interface components {
@@ -1365,7 +1432,10 @@ export interface components {
1365
1432
  result: components["schemas"]["WebCheckResultResource"] | null;
1366
1433
  /** Format: int64 */
1367
1434
  retries: number;
1368
- /** Format: uuid */
1435
+ /**
1436
+ * Format: uuid
1437
+ * @description The machine this check is attached to. Empty for a project-level check, which is not tied to any machine
1438
+ */
1369
1439
  server_id: string;
1370
1440
  steps: components["schemas"]["WebCheckStepResource"][] | null;
1371
1441
  /** @enum {string} */
@@ -1508,11 +1578,12 @@ export interface components {
1508
1578
  headline: string;
1509
1579
  logo_url: string;
1510
1580
  name: string;
1511
- /** @description The current public address of this page. It is returned even while unpublished, in which case opening it returns 404 */
1581
+ /** @description The address this page is served at: the custom domain if one is bound, otherwise the shared domain with the slug, otherwise the shared domain with the project id */
1512
1582
  public_url: string;
1513
1583
  published: boolean;
1514
1584
  /** @description Whether search engines may index the page */
1515
1585
  search_engine_index: boolean;
1586
+ /** @description The readable address segment, empty when none is set. The page is always reachable at /<project id> regardless */
1516
1587
  slug: string;
1517
1588
  /** Format: uuid */
1518
1589
  status_page_id: string;
@@ -1528,11 +1599,13 @@ export interface components {
1528
1599
  * @description Number of days covered by the availability bar
1529
1600
  */
1530
1601
  uptime_days: number;
1602
+ /** @description The text shown on the support link. Empty means the page default is used */
1603
+ support_label: string;
1531
1604
  };
1532
1605
  PutStatusPageRequestBody: {
1533
1606
  /** @description #RRGGBB. Applied to the page styling; only a strict six-digit hexadecimal value is accepted */
1534
1607
  brand_color?: string;
1535
- /** @description Your own domain, such as status.acme.com. Empty binds none. Globally unique */
1608
+ /** @description Read-only here. Bind a custom domain through PUT /status-page/domain, which verifies ownership first; a value sent here is ignored */
1536
1609
  custom_domain?: string;
1537
1610
  /** @description The line of free-form text in the page footer. Plain text */
1538
1611
  footer_text?: string;
@@ -1551,8 +1624,8 @@ export interface components {
1551
1624
  * @default false
1552
1625
  */
1553
1626
  search_engine_index?: boolean;
1554
- /** @description The address segment under the shared domain. Lowercase letters, digits and hyphens. Globally unique */
1555
- slug: string;
1627
+ /** @description An optional readable address segment under the shared domain. Lowercase letters, digits and hyphens; globally unique. Leave it empty and the page is served at /<project id>, which needs no configuration and cannot be taken by anyone else */
1628
+ slug?: string;
1556
1629
  support_url?: string;
1557
1630
  /**
1558
1631
  * @default AUTO
@@ -1566,6 +1639,8 @@ export interface components {
1566
1639
  * @default 90
1567
1640
  */
1568
1641
  uptime_days?: number;
1642
+ /** @description The text shown on the support link. Empty uses the page default. Different products call this different things — help centre, submit a ticket, support */
1643
+ support_label?: string;
1569
1644
  };
1570
1645
  PutStatusPageOrderRequestBody: {
1571
1646
  items: components["schemas"]["StatusPageOrderItem"][];
@@ -1847,6 +1922,39 @@ export interface components {
1847
1922
  */
1848
1923
  scheduled_until: string;
1849
1924
  };
1925
+ StatusPageDomainResource: {
1926
+ /**
1927
+ * Format: date-time
1928
+ * @description When the current certificate expires
1929
+ */
1930
+ certificate_not_after: string | null;
1931
+ /**
1932
+ * @description NONE means no certificate has been requested for this domain yet
1933
+ * @enum {string}
1934
+ */
1935
+ certificate_status: "NONE" | "PENDING" | "ACTIVE" | "FAILED";
1936
+ /** @description The bound custom domain. Empty means none is bound */
1937
+ domain: string;
1938
+ /** @description The value the domain must point at */
1939
+ expected_cname: string;
1940
+ /** @description Why the most recent issuance attempt failed. Empty when it did not */
1941
+ last_error: string;
1942
+ /** @description What the domain currently resolves to. Empty when it resolves to nothing */
1943
+ observed_cname: string;
1944
+ /** @description The address this page is served at, taking the custom domain into account */
1945
+ public_url: string;
1946
+ /** @description Whether the domain currently points at the status page */
1947
+ verified: boolean;
1948
+ /**
1949
+ * Format: date-time
1950
+ * @description When ownership was last confirmed
1951
+ */
1952
+ verified_at: string | null;
1953
+ };
1954
+ PutStatusPageDomainRequestBody: {
1955
+ /** @description Your own domain, such as status.acme.com. It must already point at the status page by CNAME */
1956
+ domain: string;
1957
+ };
1850
1958
  };
1851
1959
  responses: never;
1852
1960
  parameters: never;
@@ -2579,6 +2687,7 @@ export interface operations {
2579
2687
  query?: never;
2580
2688
  header?: never;
2581
2689
  path: {
2690
+ /** @description Supplied by the caller; no operation issues one. Reuse the identifier the machine already carries in the originating system — a Leaflow Compute instance id, or the caller's own inventory identifier — or allocate a UUID and persist it before the first call. It is the idempotency key of the enrollment. */
2582
2691
  serverId: string;
2583
2692
  };
2584
2693
  cookie?: never;
@@ -3779,4 +3888,188 @@ export interface operations {
3779
3888
  };
3780
3889
  };
3781
3890
  };
3891
+ "get-project-web-check": {
3892
+ parameters: {
3893
+ query?: never;
3894
+ header?: never;
3895
+ path: {
3896
+ checkId: string;
3897
+ };
3898
+ cookie?: never;
3899
+ };
3900
+ requestBody?: never;
3901
+ responses: {
3902
+ /** @description OK */
3903
+ 200: {
3904
+ headers: {
3905
+ [name: string]: unknown;
3906
+ };
3907
+ content: {
3908
+ "application/json": components["schemas"]["WebCheckResource"];
3909
+ };
3910
+ };
3911
+ /** @description Error */
3912
+ default: {
3913
+ headers: {
3914
+ [name: string]: unknown;
3915
+ };
3916
+ content: {
3917
+ "application/json": components["schemas"]["Error"];
3918
+ };
3919
+ };
3920
+ };
3921
+ };
3922
+ "put-project-web-check": {
3923
+ parameters: {
3924
+ query?: never;
3925
+ header?: never;
3926
+ path: {
3927
+ checkId: string;
3928
+ };
3929
+ cookie?: never;
3930
+ };
3931
+ requestBody: {
3932
+ content: {
3933
+ "application/json": components["schemas"]["PutWebCheckRequestBody"];
3934
+ };
3935
+ };
3936
+ responses: {
3937
+ /** @description OK */
3938
+ 200: {
3939
+ headers: {
3940
+ [name: string]: unknown;
3941
+ };
3942
+ content: {
3943
+ "application/json": components["schemas"]["WebCheckResource"];
3944
+ };
3945
+ };
3946
+ /** @description Error */
3947
+ default: {
3948
+ headers: {
3949
+ [name: string]: unknown;
3950
+ };
3951
+ content: {
3952
+ "application/json": components["schemas"]["Error"];
3953
+ };
3954
+ };
3955
+ };
3956
+ };
3957
+ "delete-project-web-check": {
3958
+ parameters: {
3959
+ query?: never;
3960
+ header?: never;
3961
+ path: {
3962
+ checkId: string;
3963
+ };
3964
+ cookie?: never;
3965
+ };
3966
+ requestBody?: never;
3967
+ responses: {
3968
+ /** @description No Content */
3969
+ 204: {
3970
+ headers: {
3971
+ [name: string]: unknown;
3972
+ };
3973
+ content?: never;
3974
+ };
3975
+ /** @description Error */
3976
+ default: {
3977
+ headers: {
3978
+ [name: string]: unknown;
3979
+ };
3980
+ content: {
3981
+ "application/json": components["schemas"]["Error"];
3982
+ };
3983
+ };
3984
+ };
3985
+ };
3986
+ "get-status-page-domain": {
3987
+ parameters: {
3988
+ query?: never;
3989
+ header?: never;
3990
+ path?: never;
3991
+ cookie?: never;
3992
+ };
3993
+ requestBody?: never;
3994
+ responses: {
3995
+ /** @description OK */
3996
+ 200: {
3997
+ headers: {
3998
+ [name: string]: unknown;
3999
+ };
4000
+ content: {
4001
+ "application/json": components["schemas"]["StatusPageDomainResource"];
4002
+ };
4003
+ };
4004
+ /** @description Error */
4005
+ default: {
4006
+ headers: {
4007
+ [name: string]: unknown;
4008
+ };
4009
+ content: {
4010
+ "application/json": components["schemas"]["Error"];
4011
+ };
4012
+ };
4013
+ };
4014
+ };
4015
+ "put-status-page-domain": {
4016
+ parameters: {
4017
+ query?: never;
4018
+ header?: never;
4019
+ path?: never;
4020
+ cookie?: never;
4021
+ };
4022
+ requestBody: {
4023
+ content: {
4024
+ "application/json": components["schemas"]["PutStatusPageDomainRequestBody"];
4025
+ };
4026
+ };
4027
+ responses: {
4028
+ /** @description OK */
4029
+ 200: {
4030
+ headers: {
4031
+ [name: string]: unknown;
4032
+ };
4033
+ content: {
4034
+ "application/json": components["schemas"]["StatusPageDomainResource"];
4035
+ };
4036
+ };
4037
+ /** @description Error */
4038
+ default: {
4039
+ headers: {
4040
+ [name: string]: unknown;
4041
+ };
4042
+ content: {
4043
+ "application/json": components["schemas"]["Error"];
4044
+ };
4045
+ };
4046
+ };
4047
+ };
4048
+ "delete-status-page-domain": {
4049
+ parameters: {
4050
+ query?: never;
4051
+ header?: never;
4052
+ path?: never;
4053
+ cookie?: never;
4054
+ };
4055
+ requestBody?: never;
4056
+ responses: {
4057
+ /** @description No Content */
4058
+ 204: {
4059
+ headers: {
4060
+ [name: string]: unknown;
4061
+ };
4062
+ content?: never;
4063
+ };
4064
+ /** @description Error */
4065
+ default: {
4066
+ headers: {
4067
+ [name: string]: unknown;
4068
+ };
4069
+ content: {
4070
+ "application/json": components["schemas"]["Error"];
4071
+ };
4072
+ };
4073
+ };
4074
+ };
3782
4075
  }
@@ -0,0 +1,60 @@
1
+ export type { paths, components, operations, webhooks } from "./schema.js";
2
+ import type { operations } from "./schema.js";
3
+ /** `GET /api/v1/notifications` 成功时的响应体。 */
4
+ export type ListNotificationsResult = operations["list-notifications"]["responses"][200]["content"]["application/json"];
5
+ /** `GET /api/v1/notifications` 的查询参数。 */
6
+ export type ListNotificationsQuery = operations["list-notifications"]["parameters"]["query"];
7
+ /** `POST /api/v1/notifications/read` 成功时的响应体。 */
8
+ export type MarkNotificationsReadResult = operations["mark-notifications-read"]["responses"][200]["content"]["application/json"];
9
+ /** `POST /api/v1/notifications/read` 的请求体。 */
10
+ export type MarkNotificationsReadBody = NonNullable<operations["mark-notifications-read"]["requestBody"]>["content"]["application/json"];
11
+ /** `GET /api/v1/notifications/unread-count` 成功时的响应体。 */
12
+ export type CountUnreadNotificationsResult = operations["count-unread-notifications"]["responses"][200]["content"]["application/json"];
13
+ /** `GET /api/v1/notifications/unread-count` 的查询参数。 */
14
+ export type CountUnreadNotificationsQuery = operations["count-unread-notifications"]["parameters"]["query"];
15
+ /** `GET /api/v1/notifications/{notificationId}` 成功时的响应体。 */
16
+ export type GetNotificationResult = operations["get-notification"]["responses"][200]["content"]["application/json"];
17
+ /** `POST /api/v1/notifications/{notificationId}/read` 成功时的响应体。 */
18
+ export type MarkNotificationReadResult = operations["mark-notification-read"]["responses"][200]["content"]["application/json"];
19
+ /** `POST /api/v1/notifications/{notificationId}/archive` 成功时的响应体。 */
20
+ export type ArchiveNotificationResult = operations["archive-notification"]["responses"][200]["content"]["application/json"];
21
+ /** `GET /api/v1/notification-types` 成功时的响应体。 */
22
+ export type ListNotificationTypesResult = operations["list-notification-types"]["responses"][200]["content"]["application/json"];
23
+ /** `GET /api/v1/preferences` 成功时的响应体。 */
24
+ export type GetNotificationPreferencesResult = operations["get-notification-preferences"]["responses"][200]["content"]["application/json"];
25
+ /** `PATCH /api/v1/preferences` 成功时的响应体。 */
26
+ export type UpdateNotificationPreferencesResult = operations["update-notification-preferences"]["responses"][200]["content"]["application/json"];
27
+ /** `PATCH /api/v1/preferences` 的请求体。 */
28
+ export type UpdateNotificationPreferencesBody = NonNullable<operations["update-notification-preferences"]["requestBody"]>["content"]["application/json"];
29
+ /** `GET /api/v1/preferences/types` 成功时的响应体。 */
30
+ export type ListTypePreferencesResult = operations["list-type-preferences"]["responses"][200]["content"]["application/json"];
31
+ /** `GET /api/v1/preferences/types` 的查询参数。 */
32
+ export type ListTypePreferencesQuery = operations["list-type-preferences"]["parameters"]["query"];
33
+ /** `PUT /api/v1/preferences/types/{type}` 成功时的响应体。 */
34
+ export type UpdateTypePreferenceResult = operations["update-type-preference"]["responses"][200]["content"]["application/json"];
35
+ /** `PUT /api/v1/preferences/types/{type}` 的请求体。 */
36
+ export type UpdateTypePreferenceBody = NonNullable<operations["update-type-preference"]["requestBody"]>["content"]["application/json"];
37
+ /** `GET /api/v1/channels` 成功时的响应体。 */
38
+ export type ListUserChannelsResult = operations["list-user-channels"]["responses"][200]["content"]["application/json"];
39
+ /** `GET /api/v1/channels` 的查询参数。 */
40
+ export type ListUserChannelsQuery = operations["list-user-channels"]["parameters"]["query"];
41
+ /** `POST /api/v1/channels` 成功时的响应体。 */
42
+ export type CreateUserChannelResult = operations["create-user-channel"]["responses"][201]["content"]["application/json"];
43
+ /** `POST /api/v1/channels` 的请求体。 */
44
+ export type CreateUserChannelBody = NonNullable<operations["create-user-channel"]["requestBody"]>["content"]["application/json"];
45
+ /** `PATCH /api/v1/channels/{channelId}` 成功时的响应体。 */
46
+ export type UpdateUserChannelResult = operations["update-user-channel"]["responses"][200]["content"]["application/json"];
47
+ /** `PATCH /api/v1/channels/{channelId}` 的请求体。 */
48
+ export type UpdateUserChannelBody = NonNullable<operations["update-user-channel"]["requestBody"]>["content"]["application/json"];
49
+ /** `POST /api/v1/channels/{channelId}/verify` 成功时的响应体。 */
50
+ export type VerifyUserChannelResult = operations["verify-user-channel"]["responses"][200]["content"]["application/json"];
51
+ /** `GET /api/v1/credentials/{ticketId}` 成功时的响应体。 */
52
+ export type DescribeCredentialTicketResult = operations["describe-credential-ticket"]["responses"][200]["content"]["application/json"];
53
+ /** `POST /api/v1/credentials/{ticketId}/reveal` 成功时的响应体。 */
54
+ export type RevealCredentialResult = operations["reveal-credential"]["responses"][200]["content"]["application/json"];
55
+ /** `GET /api/v1/realtime` 成功时的响应体。 */
56
+ export type DescribeRealtimeConnectionResult = operations["describe-realtime-connection"]["responses"][200]["content"]["application/json"];
57
+ /** `POST /api/v1/realtime/auth` 成功时的响应体。 */
58
+ export type AuthorizeRealtimeChannelResult = operations["authorize-realtime-channel"]["responses"][200]["content"]["application/json"];
59
+ /** `POST /api/v1/realtime/auth` 的请求体。 */
60
+ export type AuthorizeRealtimeChannelBody = NonNullable<operations["authorize-realtime-channel"]["requestBody"]>["content"]["application/json"];
@@ -0,0 +1,5 @@
1
+ // 由 scripts/generate-ts.mjs 生成,不要手改。
2
+ //
3
+ // 别名把 operations[...] 那串下标换成一个名字。原始的 paths / components / operations 也
4
+ // 一并导出:paths 是给 openapi-fetch 的 createClient<paths>() 用的。
5
+ export {};