@qlever-llc/trellis 0.10.9 → 0.10.11
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/esm/client.d.ts +2 -0
- package/esm/client.d.ts.map +1 -1
- package/esm/client.js +2 -0
- package/esm/client_connect.d.ts +3 -2
- package/esm/client_connect.d.ts.map +1 -1
- package/esm/client_connect.js +4 -1
- package/esm/generated-sdk/auth/api.d.ts.map +1 -1
- package/esm/generated-sdk/auth/client.d.ts.map +1 -1
- package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
- package/esm/generated-sdk/auth/contract.js +9590 -7
- package/esm/generated-sdk/auth/mod.d.ts +3 -3
- package/esm/generated-sdk/auth/mod.d.ts.map +1 -1
- package/esm/generated-sdk/auth/mod.js +1 -1
- package/esm/generated-sdk/auth/owned_api.d.ts.map +1 -1
- package/esm/generated-sdk/auth/owned_api.js +305 -62
- package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/auth/schemas.js +6492 -139
- package/esm/generated-sdk/auth/types.d.ts +254 -254
- package/esm/generated-sdk/auth/types.d.ts.map +1 -1
- package/esm/generated-sdk/health/api.d.ts.map +1 -1
- package/esm/generated-sdk/health/client.d.ts.map +1 -1
- package/esm/generated-sdk/health/contract.d.ts.map +1 -1
- package/esm/generated-sdk/health/contract.js +117 -7
- package/esm/generated-sdk/health/mod.d.ts +2 -2
- package/esm/generated-sdk/health/mod.d.ts.map +1 -1
- package/esm/generated-sdk/health/mod.js +1 -1
- package/esm/generated-sdk/health/owned_api.d.ts.map +1 -1
- package/esm/generated-sdk/health/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/health/schemas.js +79 -1
- package/esm/generated-sdk/health/types.d.ts +4 -4
- package/esm/generated-sdk/health/types.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/api.js +12 -4
- package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/contract.js +1080 -7
- package/esm/generated-sdk/jobs/mod.d.ts +2 -2
- package/esm/generated-sdk/jobs/mod.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/mod.js +1 -1
- package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/owned_api.js +26 -6
- package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/schemas.js +768 -18
- package/esm/generated-sdk/jobs/types.d.ts +14 -14
- package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
- package/esm/generated-sdk/state/api.d.ts.map +1 -1
- package/esm/generated-sdk/state/api.js +3 -1
- package/esm/generated-sdk/state/client.d.ts.map +1 -1
- package/esm/generated-sdk/state/contract.d.ts.map +1 -1
- package/esm/generated-sdk/state/contract.js +638 -7
- package/esm/generated-sdk/state/mod.d.ts +2 -2
- package/esm/generated-sdk/state/mod.d.ts.map +1 -1
- package/esm/generated-sdk/state/mod.js +1 -1
- package/esm/generated-sdk/state/owned_api.d.ts.map +1 -1
- package/esm/generated-sdk/state/owned_api.js +36 -8
- package/esm/generated-sdk/state/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/state/schemas.js +441 -14
- package/esm/generated-sdk/state/types.d.ts +15 -15
- package/esm/generated-sdk/state/types.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/contract.js +744 -7
- package/esm/generated-sdk/trellis-core/mod.d.ts +2 -2
- package/esm/generated-sdk/trellis-core/mod.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/mod.js +1 -1
- package/esm/generated-sdk/trellis-core/owned_api.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/owned_api.js +1 -1
- package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/schemas.js +626 -8
- package/esm/generated-sdk/trellis-core/types.d.ts +14 -14
- package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
- package/esm/server/health.d.ts.map +1 -1
- package/esm/server/health.js +34 -3
- package/esm/server/service.d.ts +35 -13
- package/esm/server/service.d.ts.map +1 -1
- package/esm/server/service.js +33 -3
- package/esm/server.d.ts.map +1 -1
- package/esm/server.js +49 -8
- package/esm/service/deno.d.ts +1 -1
- package/esm/service/deno.d.ts.map +1 -1
- package/esm/service/mod.d.ts +1 -1
- package/esm/service/mod.d.ts.map +1 -1
- package/esm/service/node.d.ts +1 -1
- package/esm/service/node.d.ts.map +1 -1
- package/esm/trellis.d.ts +28 -4
- package/esm/trellis.d.ts.map +1 -1
- package/esm/trellis.js +117 -26
- package/package.json +2 -2
- package/script/client.d.ts +2 -0
- package/script/client.d.ts.map +1 -1
- package/script/client.js +2 -0
- package/script/client_connect.d.ts +3 -2
- package/script/client_connect.d.ts.map +1 -1
- package/script/client_connect.js +4 -1
- package/script/generated-sdk/auth/api.d.ts.map +1 -1
- package/script/generated-sdk/auth/client.d.ts.map +1 -1
- package/script/generated-sdk/auth/contract.d.ts.map +1 -1
- package/script/generated-sdk/auth/contract.js +9590 -7
- package/script/generated-sdk/auth/mod.d.ts +3 -3
- package/script/generated-sdk/auth/mod.d.ts.map +1 -1
- package/script/generated-sdk/auth/mod.js +2 -2
- package/script/generated-sdk/auth/owned_api.d.ts.map +1 -1
- package/script/generated-sdk/auth/owned_api.js +304 -61
- package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
- package/script/generated-sdk/auth/schemas.js +6492 -139
- package/script/generated-sdk/auth/types.d.ts +254 -254
- package/script/generated-sdk/auth/types.d.ts.map +1 -1
- package/script/generated-sdk/health/api.d.ts.map +1 -1
- package/script/generated-sdk/health/client.d.ts.map +1 -1
- package/script/generated-sdk/health/contract.d.ts.map +1 -1
- package/script/generated-sdk/health/contract.js +117 -7
- package/script/generated-sdk/health/mod.d.ts +2 -2
- package/script/generated-sdk/health/mod.d.ts.map +1 -1
- package/script/generated-sdk/health/mod.js +2 -2
- package/script/generated-sdk/health/owned_api.d.ts.map +1 -1
- package/script/generated-sdk/health/schemas.d.ts.map +1 -1
- package/script/generated-sdk/health/schemas.js +79 -1
- package/script/generated-sdk/health/types.d.ts +4 -4
- package/script/generated-sdk/health/types.d.ts.map +1 -1
- package/script/generated-sdk/jobs/api.d.ts.map +1 -1
- package/script/generated-sdk/jobs/api.js +12 -4
- package/script/generated-sdk/jobs/client.d.ts.map +1 -1
- package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
- package/script/generated-sdk/jobs/contract.js +1080 -7
- package/script/generated-sdk/jobs/mod.d.ts +2 -2
- package/script/generated-sdk/jobs/mod.d.ts.map +1 -1
- package/script/generated-sdk/jobs/mod.js +2 -2
- package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -1
- package/script/generated-sdk/jobs/owned_api.js +25 -5
- package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
- package/script/generated-sdk/jobs/schemas.js +768 -18
- package/script/generated-sdk/jobs/types.d.ts +14 -14
- package/script/generated-sdk/jobs/types.d.ts.map +1 -1
- package/script/generated-sdk/state/api.d.ts.map +1 -1
- package/script/generated-sdk/state/api.js +3 -1
- package/script/generated-sdk/state/client.d.ts.map +1 -1
- package/script/generated-sdk/state/contract.d.ts.map +1 -1
- package/script/generated-sdk/state/contract.js +638 -7
- package/script/generated-sdk/state/mod.d.ts +2 -2
- package/script/generated-sdk/state/mod.d.ts.map +1 -1
- package/script/generated-sdk/state/mod.js +2 -2
- package/script/generated-sdk/state/owned_api.d.ts.map +1 -1
- package/script/generated-sdk/state/owned_api.js +35 -7
- package/script/generated-sdk/state/schemas.d.ts.map +1 -1
- package/script/generated-sdk/state/schemas.js +441 -14
- package/script/generated-sdk/state/types.d.ts +15 -15
- package/script/generated-sdk/state/types.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/contract.js +744 -7
- package/script/generated-sdk/trellis-core/mod.d.ts +2 -2
- package/script/generated-sdk/trellis-core/mod.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/mod.js +2 -2
- package/script/generated-sdk/trellis-core/owned_api.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/schemas.js +626 -8
- package/script/generated-sdk/trellis-core/types.d.ts +14 -14
- package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
- package/script/server/health.d.ts.map +1 -1
- package/script/server/health.js +34 -3
- package/script/server/service.d.ts +35 -13
- package/script/server/service.d.ts.map +1 -1
- package/script/server/service.js +32 -2
- package/script/server.d.ts.map +1 -1
- package/script/server.js +48 -7
- package/script/service/deno.d.ts +1 -1
- package/script/service/deno.d.ts.map +1 -1
- package/script/service/mod.d.ts +1 -1
- package/script/service/mod.d.ts.map +1 -1
- package/script/service/node.d.ts +1 -1
- package/script/service/node.d.ts.map +1 -1
- package/script/trellis.d.ts +28 -4
- package/script/trellis.d.ts.map +1 -1
- package/script/trellis.js +118 -26
- package/src/client.ts +4 -0
- package/src/client_connect.ts +11 -9
- package/src/sdk/_generated/auth/api.ts +10 -21
- package/src/sdk/_generated/auth/client.ts +1178 -160
- package/src/sdk/_generated/auth/contract.ts +9637 -13
- package/src/sdk/_generated/auth/mod.ts +22 -3
- package/src/sdk/_generated/auth/owned_api.ts +897 -264
- package/src/sdk/_generated/auth/schemas.ts +6630 -278
- package/src/sdk/_generated/auth/types.ts +2950 -359
- package/src/sdk/_generated/core/api.ts +10 -21
- package/src/sdk/_generated/core/client.ts +105 -12
- package/src/sdk/_generated/core/contract.ts +774 -13
- package/src/sdk/_generated/core/mod.ts +17 -2
- package/src/sdk/_generated/core/owned_api.ts +40 -24
- package/src/sdk/_generated/core/schemas.ts +626 -9
- package/src/sdk/_generated/core/types.ts +233 -18
- package/src/sdk/_generated/health/api.ts +10 -21
- package/src/sdk/_generated/health/client.ts +104 -8
- package/src/sdk/_generated/health/contract.ts +144 -13
- package/src/sdk/_generated/health/mod.ts +17 -2
- package/src/sdk/_generated/health/owned_api.ts +4 -9
- package/src/sdk/_generated/health/schemas.ts +79 -2
- package/src/sdk/_generated/health/types.ts +31 -4
- package/src/sdk/_generated/jobs/api.ts +20 -18
- package/src/sdk/_generated/jobs/client.ts +199 -28
- package/src/sdk/_generated/jobs/contract.ts +1119 -13
- package/src/sdk/_generated/jobs/mod.ts +17 -2
- package/src/sdk/_generated/jobs/owned_api.ts +64 -27
- package/src/sdk/_generated/jobs/schemas.ts +776 -20
- package/src/sdk/_generated/jobs/types.ts +407 -34
- package/src/sdk/_generated/state/api.ts +11 -18
- package/src/sdk/_generated/state/client.ts +169 -22
- package/src/sdk/_generated/state/contract.ts +670 -13
- package/src/sdk/_generated/state/mod.ts +17 -2
- package/src/sdk/_generated/state/owned_api.ts +65 -25
- package/src/sdk/_generated/state/schemas.ts +441 -15
- package/src/sdk/_generated/state/types.ts +229 -26
- package/src/server/health.ts +41 -3
- package/src/server/service.ts +140 -18
- package/src/server.ts +62 -7
- package/src/service/deno.ts +4 -0
- package/src/service/mod.ts +4 -0
- package/src/service/node.ts +4 -0
- package/src/trellis.ts +167 -55
|
@@ -3,42 +3,246 @@ import type { RpcHandlerFn } from "../../../index.js";
|
|
|
3
3
|
import type { API } from "./api.js";
|
|
4
4
|
|
|
5
5
|
export const CONTRACT_ID = "trellis.state@v1" as const;
|
|
6
|
-
export const CONTRACT_DIGEST =
|
|
6
|
+
export const CONTRACT_DIGEST =
|
|
7
|
+
"XfWDYLTBlYFjDqMPBEXrTBccZbFvHp0MnqscehdRKT4" as const;
|
|
7
8
|
|
|
8
|
-
export type StateAdminDeleteInput =
|
|
9
|
-
|
|
9
|
+
export type StateAdminDeleteInput = {
|
|
10
|
+
contractDigest: string;
|
|
11
|
+
contractId: string;
|
|
12
|
+
expectedRevision?: string;
|
|
13
|
+
key?: string;
|
|
14
|
+
scope: "userApp";
|
|
15
|
+
store: string;
|
|
16
|
+
user: { id: string; origin: string; userId?: string };
|
|
17
|
+
} | {
|
|
18
|
+
contractDigest: string;
|
|
19
|
+
contractId: string;
|
|
20
|
+
deviceId: string;
|
|
21
|
+
expectedRevision?: string;
|
|
22
|
+
key?: string;
|
|
23
|
+
scope: "deviceApp";
|
|
24
|
+
store: string;
|
|
25
|
+
};
|
|
26
|
+
export type StateAdminDeleteOutput = { deleted: boolean };
|
|
10
27
|
|
|
11
|
-
export type StateAdminGetInput =
|
|
12
|
-
|
|
28
|
+
export type StateAdminGetInput = {
|
|
29
|
+
contractDigest: string;
|
|
30
|
+
contractId: string;
|
|
31
|
+
key?: string;
|
|
32
|
+
scope: "userApp";
|
|
33
|
+
store: string;
|
|
34
|
+
user: { id: string; origin: string; userId?: string };
|
|
35
|
+
} | {
|
|
36
|
+
contractDigest: string;
|
|
37
|
+
contractId: string;
|
|
38
|
+
deviceId: string;
|
|
39
|
+
key?: string;
|
|
40
|
+
scope: "deviceApp";
|
|
41
|
+
store: string;
|
|
42
|
+
};
|
|
43
|
+
export type StateAdminGetOutput = { found: false } | {
|
|
44
|
+
entry: {
|
|
45
|
+
expiresAt?: string;
|
|
46
|
+
key?: string;
|
|
47
|
+
revision: string;
|
|
48
|
+
updatedAt: string;
|
|
49
|
+
value: unknown;
|
|
50
|
+
};
|
|
51
|
+
found: true;
|
|
52
|
+
} | {
|
|
53
|
+
currentStateVersion: string;
|
|
54
|
+
entry: {
|
|
55
|
+
expiresAt?: string;
|
|
56
|
+
key?: string;
|
|
57
|
+
revision: string;
|
|
58
|
+
updatedAt: string;
|
|
59
|
+
value: unknown;
|
|
60
|
+
};
|
|
61
|
+
migrationRequired: true;
|
|
62
|
+
stateVersion: string;
|
|
63
|
+
writerContractDigest: string;
|
|
64
|
+
};
|
|
13
65
|
|
|
14
|
-
export type StateAdminListInput =
|
|
15
|
-
|
|
66
|
+
export type StateAdminListInput = {
|
|
67
|
+
contractDigest: string;
|
|
68
|
+
contractId: string;
|
|
69
|
+
limit: number;
|
|
70
|
+
offset?: number;
|
|
71
|
+
prefix?: string;
|
|
72
|
+
scope: "userApp";
|
|
73
|
+
store: string;
|
|
74
|
+
user: { id: string; origin: string; userId?: string };
|
|
75
|
+
} | {
|
|
76
|
+
contractDigest: string;
|
|
77
|
+
contractId: string;
|
|
78
|
+
deviceId: string;
|
|
79
|
+
limit: number;
|
|
80
|
+
offset?: number;
|
|
81
|
+
prefix?: string;
|
|
82
|
+
scope: "deviceApp";
|
|
83
|
+
store: string;
|
|
84
|
+
};
|
|
85
|
+
export type StateAdminListOutput = {
|
|
86
|
+
count: number;
|
|
87
|
+
entries: Array<
|
|
88
|
+
({
|
|
89
|
+
expiresAt?: string;
|
|
90
|
+
key?: string;
|
|
91
|
+
revision: string;
|
|
92
|
+
updatedAt: string;
|
|
93
|
+
value: unknown;
|
|
94
|
+
} | {
|
|
95
|
+
currentStateVersion: string;
|
|
96
|
+
entry: {
|
|
97
|
+
expiresAt?: string;
|
|
98
|
+
key?: string;
|
|
99
|
+
revision: string;
|
|
100
|
+
updatedAt: string;
|
|
101
|
+
value: unknown;
|
|
102
|
+
};
|
|
103
|
+
migrationRequired: true;
|
|
104
|
+
stateVersion: string;
|
|
105
|
+
writerContractDigest: string;
|
|
106
|
+
})
|
|
107
|
+
>;
|
|
108
|
+
limit: number;
|
|
109
|
+
nextOffset?: number;
|
|
110
|
+
offset: number;
|
|
111
|
+
};
|
|
16
112
|
|
|
17
|
-
export type StateDeleteInput = {
|
|
18
|
-
|
|
113
|
+
export type StateDeleteInput = {
|
|
114
|
+
expectedRevision?: string;
|
|
115
|
+
key?: string;
|
|
116
|
+
store: string;
|
|
117
|
+
};
|
|
118
|
+
export type StateDeleteOutput = { deleted: boolean };
|
|
19
119
|
|
|
20
|
-
export type StateGetInput = { key?: string; store: string
|
|
21
|
-
export type StateGetOutput =
|
|
120
|
+
export type StateGetInput = { key?: string; store: string };
|
|
121
|
+
export type StateGetOutput = { found: false } | {
|
|
122
|
+
entry: {
|
|
123
|
+
expiresAt?: string;
|
|
124
|
+
key?: string;
|
|
125
|
+
revision: string;
|
|
126
|
+
updatedAt: string;
|
|
127
|
+
value: unknown;
|
|
128
|
+
};
|
|
129
|
+
found: true;
|
|
130
|
+
} | {
|
|
131
|
+
currentStateVersion: string;
|
|
132
|
+
entry: {
|
|
133
|
+
expiresAt?: string;
|
|
134
|
+
key?: string;
|
|
135
|
+
revision: string;
|
|
136
|
+
updatedAt: string;
|
|
137
|
+
value: unknown;
|
|
138
|
+
};
|
|
139
|
+
migrationRequired: true;
|
|
140
|
+
stateVersion: string;
|
|
141
|
+
writerContractDigest: string;
|
|
142
|
+
};
|
|
22
143
|
|
|
23
|
-
export type StateListInput = {
|
|
24
|
-
|
|
144
|
+
export type StateListInput = {
|
|
145
|
+
limit: number;
|
|
146
|
+
offset?: number;
|
|
147
|
+
prefix?: string;
|
|
148
|
+
store: string;
|
|
149
|
+
};
|
|
150
|
+
export type StateListOutput = {
|
|
151
|
+
count: number;
|
|
152
|
+
entries: Array<
|
|
153
|
+
({
|
|
154
|
+
expiresAt?: string;
|
|
155
|
+
key?: string;
|
|
156
|
+
revision: string;
|
|
157
|
+
updatedAt: string;
|
|
158
|
+
value: unknown;
|
|
159
|
+
} | {
|
|
160
|
+
currentStateVersion: string;
|
|
161
|
+
entry: {
|
|
162
|
+
expiresAt?: string;
|
|
163
|
+
key?: string;
|
|
164
|
+
revision: string;
|
|
165
|
+
updatedAt: string;
|
|
166
|
+
value: unknown;
|
|
167
|
+
};
|
|
168
|
+
migrationRequired: true;
|
|
169
|
+
stateVersion: string;
|
|
170
|
+
writerContractDigest: string;
|
|
171
|
+
})
|
|
172
|
+
>;
|
|
173
|
+
limit: number;
|
|
174
|
+
nextOffset?: number;
|
|
175
|
+
offset: number;
|
|
176
|
+
};
|
|
25
177
|
|
|
26
|
-
export type StatePutInput = {
|
|
27
|
-
|
|
178
|
+
export type StatePutInput = {
|
|
179
|
+
expectedRevision?: string | null;
|
|
180
|
+
key?: string;
|
|
181
|
+
store: string;
|
|
182
|
+
ttlMs?: number;
|
|
183
|
+
value: unknown;
|
|
184
|
+
};
|
|
185
|
+
export type StatePutOutput = {
|
|
186
|
+
applied: true;
|
|
187
|
+
entry: {
|
|
188
|
+
expiresAt?: string;
|
|
189
|
+
key?: string;
|
|
190
|
+
revision: string;
|
|
191
|
+
updatedAt: string;
|
|
192
|
+
value: unknown;
|
|
193
|
+
};
|
|
194
|
+
} | {
|
|
195
|
+
applied: false;
|
|
196
|
+
entry?: {
|
|
197
|
+
expiresAt?: string;
|
|
198
|
+
key?: string;
|
|
199
|
+
revision: string;
|
|
200
|
+
updatedAt: string;
|
|
201
|
+
value: unknown;
|
|
202
|
+
} | {
|
|
203
|
+
currentStateVersion: string;
|
|
204
|
+
entry: {
|
|
205
|
+
expiresAt?: string;
|
|
206
|
+
key?: string;
|
|
207
|
+
revision: string;
|
|
208
|
+
updatedAt: string;
|
|
209
|
+
value: unknown;
|
|
210
|
+
};
|
|
211
|
+
migrationRequired: true;
|
|
212
|
+
stateVersion: string;
|
|
213
|
+
writerContractDigest: string;
|
|
214
|
+
};
|
|
215
|
+
found: boolean;
|
|
216
|
+
};
|
|
28
217
|
|
|
29
218
|
export interface RpcMap {
|
|
30
|
-
"State.Admin.Delete": {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"State.Get": { input:
|
|
35
|
-
"State.List": {
|
|
36
|
-
|
|
219
|
+
"State.Admin.Delete": {
|
|
220
|
+
input: StateAdminDeleteInput;
|
|
221
|
+
output: StateAdminDeleteOutput;
|
|
222
|
+
};
|
|
223
|
+
"State.Admin.Get": { input: StateAdminGetInput; output: StateAdminGetOutput };
|
|
224
|
+
"State.Admin.List": {
|
|
225
|
+
input: StateAdminListInput;
|
|
226
|
+
output: StateAdminListOutput;
|
|
227
|
+
};
|
|
228
|
+
"State.Delete": { input: StateDeleteInput; output: StateDeleteOutput };
|
|
229
|
+
"State.Get": { input: StateGetInput; output: StateGetOutput };
|
|
230
|
+
"State.List": { input: StateListInput; output: StateListOutput };
|
|
231
|
+
"State.Put": { input: StatePutInput; output: StatePutOutput };
|
|
37
232
|
}
|
|
38
233
|
|
|
39
|
-
export type StateAdminDeleteHandler = RpcHandlerFn<
|
|
40
|
-
|
|
41
|
-
|
|
234
|
+
export type StateAdminDeleteHandler = RpcHandlerFn<
|
|
235
|
+
typeof API.owned,
|
|
236
|
+
"State.Admin.Delete"
|
|
237
|
+
>;
|
|
238
|
+
export type StateAdminGetHandler = RpcHandlerFn<
|
|
239
|
+
typeof API.owned,
|
|
240
|
+
"State.Admin.Get"
|
|
241
|
+
>;
|
|
242
|
+
export type StateAdminListHandler = RpcHandlerFn<
|
|
243
|
+
typeof API.owned,
|
|
244
|
+
"State.Admin.List"
|
|
245
|
+
>;
|
|
42
246
|
export type StateDeleteHandler = RpcHandlerFn<typeof API.owned, "State.Delete">;
|
|
43
247
|
export type StateGetHandler = RpcHandlerFn<typeof API.owned, "State.Get">;
|
|
44
248
|
export type StateListHandler = RpcHandlerFn<typeof API.owned, "State.List">;
|
|
@@ -52,4 +256,3 @@ export interface FeedMap {
|
|
|
52
256
|
|
|
53
257
|
export interface SubjectMap {
|
|
54
258
|
}
|
|
55
|
-
|
package/src/server/health.ts
CHANGED
|
@@ -104,6 +104,25 @@ function summarizeHealthChecks(
|
|
|
104
104
|
return `${failedCount} check${failedCount === 1 ? "" : "s"} failing`;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
function annotateServiceHealthCheck(
|
|
108
|
+
result: HealthCheckResult,
|
|
109
|
+
metadata: { service: string; contractId: string; contractDigest: string },
|
|
110
|
+
): HealthCheckResult {
|
|
111
|
+
if (result.status !== "failed") {
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
...result,
|
|
117
|
+
info: {
|
|
118
|
+
...(result.info ?? {}),
|
|
119
|
+
service: metadata.service,
|
|
120
|
+
contractId: metadata.contractId,
|
|
121
|
+
contractDigest: metadata.contractDigest,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
107
126
|
function normalizeLegacyHealthCheck(
|
|
108
127
|
check: HealthCheckFn,
|
|
109
128
|
): ServiceHealthCheckFn {
|
|
@@ -114,6 +133,10 @@ function normalizeLegacyHealthCheck(
|
|
|
114
133
|
status: "failed",
|
|
115
134
|
error: result.error.message,
|
|
116
135
|
summary: result.error.message,
|
|
136
|
+
info: {
|
|
137
|
+
errorType: result.error.name,
|
|
138
|
+
errorId: result.error.id,
|
|
139
|
+
},
|
|
117
140
|
};
|
|
118
141
|
}
|
|
119
142
|
|
|
@@ -206,6 +229,9 @@ export async function runServiceHealthCheck(
|
|
|
206
229
|
status: "failed",
|
|
207
230
|
error: message,
|
|
208
231
|
summary: message,
|
|
232
|
+
info: {
|
|
233
|
+
errorType: error instanceof Error ? error.name : typeof error,
|
|
234
|
+
},
|
|
209
235
|
latencyMs,
|
|
210
236
|
};
|
|
211
237
|
}
|
|
@@ -350,16 +376,28 @@ export class ServiceHealth {
|
|
|
350
376
|
}
|
|
351
377
|
|
|
352
378
|
async checks(): Promise<HealthCheckResult[]> {
|
|
353
|
-
|
|
379
|
+
const results = await Promise.all(
|
|
354
380
|
Array.from(this.#checks.entries()).map(([name, check]) =>
|
|
355
381
|
runServiceHealthCheck(name, check)
|
|
356
382
|
),
|
|
357
383
|
);
|
|
384
|
+
return results.map((result) =>
|
|
385
|
+
annotateServiceHealthCheck(result, {
|
|
386
|
+
service: this.serviceName,
|
|
387
|
+
contractId: this.contractId,
|
|
388
|
+
contractDigest: this.contractDigest,
|
|
389
|
+
})
|
|
390
|
+
);
|
|
358
391
|
}
|
|
359
392
|
|
|
360
393
|
async response(): Promise<HealthResponse> {
|
|
361
|
-
const
|
|
362
|
-
return
|
|
394
|
+
const results = await this.checks();
|
|
395
|
+
return {
|
|
396
|
+
status: summarizeHealthStatus(results),
|
|
397
|
+
service: this.serviceName,
|
|
398
|
+
timestamp: new Date().toISOString(),
|
|
399
|
+
checks: results,
|
|
400
|
+
};
|
|
363
401
|
}
|
|
364
402
|
|
|
365
403
|
async heartbeat(): Promise<Omit<HealthHeartbeat, "header">> {
|
package/src/server/service.ts
CHANGED
|
@@ -77,7 +77,10 @@ import type {
|
|
|
77
77
|
RpcHandlerContext,
|
|
78
78
|
RpcHandlerErrorOf,
|
|
79
79
|
} from "../trellis.js";
|
|
80
|
-
import {
|
|
80
|
+
import {
|
|
81
|
+
annotateHandlerBoundaryError,
|
|
82
|
+
createTrellisInternal,
|
|
83
|
+
} from "../trellis.js";
|
|
81
84
|
import type {
|
|
82
85
|
NatsConnectFn,
|
|
83
86
|
NatsConnectOpts,
|
|
@@ -956,6 +959,22 @@ type ContractJobName<
|
|
|
956
959
|
>,
|
|
957
960
|
> = keyof ContractJobsOf<TContract> & string;
|
|
958
961
|
|
|
962
|
+
type ContractEventName<
|
|
963
|
+
TContract extends ServiceContract<
|
|
964
|
+
TrellisAPI,
|
|
965
|
+
TrellisAPI | undefined,
|
|
966
|
+
ContractJobsMetadata
|
|
967
|
+
>,
|
|
968
|
+
> = ServiceEventName<ContractTrellisApi<TContract>>;
|
|
969
|
+
|
|
970
|
+
type ContractFeedName<
|
|
971
|
+
TContract extends ServiceContract<
|
|
972
|
+
TrellisAPI,
|
|
973
|
+
TrellisAPI | undefined,
|
|
974
|
+
ContractJobsMetadata
|
|
975
|
+
>,
|
|
976
|
+
> = keyof ContractOwnedApi<TContract>["feeds"] & string;
|
|
977
|
+
|
|
959
978
|
type ContractOperationName<
|
|
960
979
|
TContract extends ServiceContract<
|
|
961
980
|
TrellisAPI,
|
|
@@ -991,6 +1010,7 @@ export type JobArgs<
|
|
|
991
1010
|
ContractKvMetadata
|
|
992
1011
|
>,
|
|
993
1012
|
TJob extends ContractJobName<TContract>,
|
|
1013
|
+
TDeps = undefined,
|
|
994
1014
|
> = {
|
|
995
1015
|
job: PublicActiveJob<
|
|
996
1016
|
ContractJobPayload<TContract, TJob>,
|
|
@@ -1001,7 +1021,7 @@ export type JobArgs<
|
|
|
1001
1021
|
ContractKvOf<TContract>,
|
|
1002
1022
|
ContractJobsOf<TContract>
|
|
1003
1023
|
>;
|
|
1004
|
-
}
|
|
1024
|
+
} & WithDeps<TDeps>;
|
|
1005
1025
|
|
|
1006
1026
|
/** Result returned by a typed Trellis service job handler. */
|
|
1007
1027
|
export type JobResult<
|
|
@@ -1014,6 +1034,9 @@ export type JobResult<
|
|
|
1014
1034
|
TJob extends ContractJobName<TContract>,
|
|
1015
1035
|
> = Result<ContractJobResult<TContract, TJob>, BaseError>;
|
|
1016
1036
|
|
|
1037
|
+
type WithDeps<TDeps> = [TDeps] extends [undefined] ? {} : { deps: TDeps };
|
|
1038
|
+
|
|
1039
|
+
/** Typed RPC handler function for an extracted Trellis service handler. */
|
|
1017
1040
|
export type RpcHandler<
|
|
1018
1041
|
TContract extends ServiceContract<
|
|
1019
1042
|
TrellisAPI,
|
|
@@ -1022,6 +1045,7 @@ export type RpcHandler<
|
|
|
1022
1045
|
ContractKvMetadata
|
|
1023
1046
|
>,
|
|
1024
1047
|
M extends RpcMethodName<ContractOwnedApi<TContract>>,
|
|
1048
|
+
TDeps = undefined,
|
|
1025
1049
|
> = ({
|
|
1026
1050
|
input,
|
|
1027
1051
|
context,
|
|
@@ -1034,7 +1058,7 @@ export type RpcHandler<
|
|
|
1034
1058
|
ContractKvOf<TContract>,
|
|
1035
1059
|
ContractJobsOf<TContract>
|
|
1036
1060
|
>;
|
|
1037
|
-
}) =>
|
|
1061
|
+
} & WithDeps<TDeps>) =>
|
|
1038
1062
|
| Promise<
|
|
1039
1063
|
Result<
|
|
1040
1064
|
RpcMethodOutput<ContractOwnedApi<TContract>, M>,
|
|
@@ -1046,6 +1070,55 @@ export type RpcHandler<
|
|
|
1046
1070
|
RpcHandlerErrorOf<ContractOwnedApi<TContract>, M>
|
|
1047
1071
|
>;
|
|
1048
1072
|
|
|
1073
|
+
/** Typed event listener function for an extracted Trellis service listener. */
|
|
1074
|
+
export type ServiceEventHandler<
|
|
1075
|
+
TContract extends ServiceContract<
|
|
1076
|
+
TrellisAPI,
|
|
1077
|
+
TrellisAPI | undefined,
|
|
1078
|
+
ContractJobsMetadata,
|
|
1079
|
+
ContractKvMetadata
|
|
1080
|
+
>,
|
|
1081
|
+
E extends ContractEventName<TContract>,
|
|
1082
|
+
TDeps = undefined,
|
|
1083
|
+
> = (
|
|
1084
|
+
args: {
|
|
1085
|
+
event: ServiceEventOf<ContractTrellisApi<TContract>, E>;
|
|
1086
|
+
context: EventListenerContext;
|
|
1087
|
+
client: Trellis<
|
|
1088
|
+
ContractTrellisApi<TContract>,
|
|
1089
|
+
ContractKvOf<TContract>,
|
|
1090
|
+
ContractJobsOf<TContract>
|
|
1091
|
+
>;
|
|
1092
|
+
} & WithDeps<TDeps>,
|
|
1093
|
+
) => MaybeAsync<void, BaseError>;
|
|
1094
|
+
|
|
1095
|
+
/** Typed feed handler function for an extracted Trellis service handler. */
|
|
1096
|
+
export type FeedHandler<
|
|
1097
|
+
TContract extends ServiceContract<
|
|
1098
|
+
TrellisAPI,
|
|
1099
|
+
TrellisAPI | undefined,
|
|
1100
|
+
ContractJobsMetadata,
|
|
1101
|
+
ContractKvMetadata
|
|
1102
|
+
>,
|
|
1103
|
+
F extends ContractFeedName<TContract>,
|
|
1104
|
+
TDeps = undefined,
|
|
1105
|
+
> = (
|
|
1106
|
+
context: {
|
|
1107
|
+
input: FeedInputOf<ContractOwnedApi<TContract>, F>;
|
|
1108
|
+
caller: unknown;
|
|
1109
|
+
signal: AbortSignal;
|
|
1110
|
+
emit(
|
|
1111
|
+
event: FeedEventOf<ContractOwnedApi<TContract>, F>,
|
|
1112
|
+
): AsyncResult<void, ValidationError | UnexpectedError>;
|
|
1113
|
+
client: Trellis<
|
|
1114
|
+
ContractTrellisApi<TContract>,
|
|
1115
|
+
ContractKvOf<TContract>,
|
|
1116
|
+
ContractJobsOf<TContract>
|
|
1117
|
+
>;
|
|
1118
|
+
} & WithDeps<TDeps>,
|
|
1119
|
+
) => unknown | Promise<unknown>;
|
|
1120
|
+
|
|
1121
|
+
/** Typed job handler function for an extracted Trellis service job handler. */
|
|
1049
1122
|
export type JobHandler<
|
|
1050
1123
|
TContract extends ServiceContract<
|
|
1051
1124
|
TrellisAPI,
|
|
@@ -1054,8 +1127,12 @@ export type JobHandler<
|
|
|
1054
1127
|
ContractKvMetadata
|
|
1055
1128
|
>,
|
|
1056
1129
|
TJob extends ContractJobName<TContract>,
|
|
1057
|
-
|
|
1130
|
+
TDeps = undefined,
|
|
1131
|
+
> = (args: JobArgs<TContract, TJob, TDeps>) => Promise<
|
|
1132
|
+
JobResult<TContract, TJob>
|
|
1133
|
+
>;
|
|
1058
1134
|
|
|
1135
|
+
/** Typed operation handler function for an extracted Trellis service handler. */
|
|
1059
1136
|
export type OperationHandler<
|
|
1060
1137
|
TContract extends ServiceContract<
|
|
1061
1138
|
TrellisAPI,
|
|
@@ -1064,6 +1141,7 @@ export type OperationHandler<
|
|
|
1064
1141
|
ContractKvMetadata
|
|
1065
1142
|
>,
|
|
1066
1143
|
O extends ContractOperationName<TContract>,
|
|
1144
|
+
TDeps = undefined,
|
|
1067
1145
|
> = (
|
|
1068
1146
|
args:
|
|
1069
1147
|
& OperationHandlerContext<
|
|
@@ -1078,9 +1156,20 @@ export type OperationHandler<
|
|
|
1078
1156
|
ContractKvOf<TContract>,
|
|
1079
1157
|
ContractJobsOf<TContract>
|
|
1080
1158
|
>;
|
|
1081
|
-
}
|
|
1159
|
+
}
|
|
1160
|
+
& WithDeps<TDeps>,
|
|
1082
1161
|
) => unknown | Promise<unknown>;
|
|
1083
1162
|
|
|
1163
|
+
/** Typed health info function for an extracted bound service health handler. */
|
|
1164
|
+
export type HealthInfoHandler<TDeps = undefined> = (
|
|
1165
|
+
args: WithDeps<TDeps>,
|
|
1166
|
+
) => ServiceHealthInfo | undefined | Promise<ServiceHealthInfo | undefined>;
|
|
1167
|
+
|
|
1168
|
+
/** Typed health check function for an extracted bound service health handler. */
|
|
1169
|
+
export type HealthCheckHandler<TDeps = undefined> = (
|
|
1170
|
+
args: WithDeps<TDeps>,
|
|
1171
|
+
) => ServiceHealthCheck | Promise<ServiceHealthCheck>;
|
|
1172
|
+
|
|
1084
1173
|
export type JobQueue<
|
|
1085
1174
|
TPayload,
|
|
1086
1175
|
TResult,
|
|
@@ -1326,19 +1415,10 @@ type BoundJobsFacadeOf<
|
|
|
1326
1415
|
};
|
|
1327
1416
|
|
|
1328
1417
|
type BoundServiceHealth<TDeps> = Omit<ServiceHealth, "add" | "setInfo"> & {
|
|
1329
|
-
setInfo(
|
|
1330
|
-
info:
|
|
1331
|
-
| ServiceHealthInfo
|
|
1332
|
-
| ((args: { deps: TDeps }) =>
|
|
1333
|
-
| ServiceHealthInfo
|
|
1334
|
-
| undefined
|
|
1335
|
-
| Promise<ServiceHealthInfo | undefined>),
|
|
1336
|
-
): void;
|
|
1418
|
+
setInfo(info: ServiceHealthInfo | HealthInfoHandler<TDeps>): void;
|
|
1337
1419
|
add(
|
|
1338
1420
|
name: string,
|
|
1339
|
-
check:
|
|
1340
|
-
| ServiceHealthCheck
|
|
1341
|
-
| Promise<ServiceHealthCheck>,
|
|
1421
|
+
check: HealthCheckHandler<TDeps>,
|
|
1342
1422
|
): () => void;
|
|
1343
1423
|
};
|
|
1344
1424
|
|
|
@@ -1741,6 +1821,8 @@ export async function createConnectedService<
|
|
|
1741
1821
|
stream: args.server.stream,
|
|
1742
1822
|
noResponderRetry: args.server.noResponderRetry,
|
|
1743
1823
|
api: runtimeApi,
|
|
1824
|
+
contractId: args.contractId,
|
|
1825
|
+
contractDigest: args.contractDigest,
|
|
1744
1826
|
connection,
|
|
1745
1827
|
transferSupport: {
|
|
1746
1828
|
openOperationTransfer: (transferArgs) =>
|
|
@@ -1760,6 +1842,8 @@ export async function createConnectedService<
|
|
|
1760
1842
|
stream: args.server.stream,
|
|
1761
1843
|
noResponderRetry: args.server.noResponderRetry,
|
|
1762
1844
|
api: runtimeApi,
|
|
1845
|
+
contractId: args.contractId,
|
|
1846
|
+
contractDigest: args.contractDigest,
|
|
1763
1847
|
eventConsumers: {
|
|
1764
1848
|
metadata: args.contractEventConsumers,
|
|
1765
1849
|
bindings: args.bindings.eventConsumers,
|
|
@@ -1932,6 +2016,14 @@ function toUnexpectedError(cause: unknown): UnexpectedError {
|
|
|
1932
2016
|
: new UnexpectedError({ cause });
|
|
1933
2017
|
}
|
|
1934
2018
|
|
|
2019
|
+
function serializeJobHandlerError(error: BaseError): string {
|
|
2020
|
+
try {
|
|
2021
|
+
return JSON.stringify(error.toSerializable());
|
|
2022
|
+
} catch {
|
|
2023
|
+
return error.message;
|
|
2024
|
+
}
|
|
2025
|
+
}
|
|
2026
|
+
|
|
1935
2027
|
function okVoid(): Result<void, never> {
|
|
1936
2028
|
return Result.ok(undefined);
|
|
1937
2029
|
}
|
|
@@ -2326,6 +2418,8 @@ function createJobsFacade<
|
|
|
2326
2418
|
TKv extends ContractKvMetadata = ContractKvMetadata,
|
|
2327
2419
|
>(args: {
|
|
2328
2420
|
serviceName: string;
|
|
2421
|
+
contractId?: string;
|
|
2422
|
+
contractDigest?: string;
|
|
2329
2423
|
nc: NatsConnection;
|
|
2330
2424
|
contractJobs: TJobs;
|
|
2331
2425
|
client: Trellis<TTrellisApi, TKv, TJobs>;
|
|
@@ -2489,9 +2583,35 @@ function createJobsFacade<
|
|
|
2489
2583
|
},
|
|
2490
2584
|
);
|
|
2491
2585
|
|
|
2492
|
-
const
|
|
2586
|
+
const jobErrorContext = {
|
|
2587
|
+
jobType: queueType,
|
|
2588
|
+
requestId: job.context().requestId,
|
|
2589
|
+
service: args.serviceName,
|
|
2590
|
+
contractId: args.contractId,
|
|
2591
|
+
contractDigest: args.contractDigest,
|
|
2592
|
+
traceId: job.context().traceId,
|
|
2593
|
+
};
|
|
2594
|
+
|
|
2595
|
+
let handled: unknown | Result<never, BaseError>;
|
|
2596
|
+
try {
|
|
2597
|
+
handled = (await handler(publicJob)).take();
|
|
2598
|
+
} catch (cause) {
|
|
2599
|
+
const annotatedError = annotateHandlerBoundaryError(
|
|
2600
|
+
cause,
|
|
2601
|
+
jobErrorContext,
|
|
2602
|
+
);
|
|
2603
|
+
throw InternalJobProcessError.failed(
|
|
2604
|
+
serializeJobHandlerError(annotatedError),
|
|
2605
|
+
);
|
|
2606
|
+
}
|
|
2493
2607
|
if (isErr(handled)) {
|
|
2494
|
-
|
|
2608
|
+
const annotatedError = annotateHandlerBoundaryError(
|
|
2609
|
+
handled.error,
|
|
2610
|
+
jobErrorContext,
|
|
2611
|
+
);
|
|
2612
|
+
throw InternalJobProcessError.failed(
|
|
2613
|
+
serializeJobHandlerError(annotatedError),
|
|
2614
|
+
);
|
|
2495
2615
|
}
|
|
2496
2616
|
return handled;
|
|
2497
2617
|
},
|
|
@@ -2679,6 +2799,8 @@ export class TrellisService<
|
|
|
2679
2799
|
this.#operationTransfer = operationTransfer;
|
|
2680
2800
|
const jobs = createJobsFacade<TJobs, TTrellisApi, TKv>({
|
|
2681
2801
|
serviceName: name,
|
|
2802
|
+
contractId: health.contractId,
|
|
2803
|
+
contractDigest: health.contractDigest,
|
|
2682
2804
|
nc,
|
|
2683
2805
|
contractJobs,
|
|
2684
2806
|
client: handlerTrellis,
|