@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.
Files changed (220) hide show
  1. package/esm/client.d.ts +2 -0
  2. package/esm/client.d.ts.map +1 -1
  3. package/esm/client.js +2 -0
  4. package/esm/client_connect.d.ts +3 -2
  5. package/esm/client_connect.d.ts.map +1 -1
  6. package/esm/client_connect.js +4 -1
  7. package/esm/generated-sdk/auth/api.d.ts.map +1 -1
  8. package/esm/generated-sdk/auth/client.d.ts.map +1 -1
  9. package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
  10. package/esm/generated-sdk/auth/contract.js +9590 -7
  11. package/esm/generated-sdk/auth/mod.d.ts +3 -3
  12. package/esm/generated-sdk/auth/mod.d.ts.map +1 -1
  13. package/esm/generated-sdk/auth/mod.js +1 -1
  14. package/esm/generated-sdk/auth/owned_api.d.ts.map +1 -1
  15. package/esm/generated-sdk/auth/owned_api.js +305 -62
  16. package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
  17. package/esm/generated-sdk/auth/schemas.js +6492 -139
  18. package/esm/generated-sdk/auth/types.d.ts +254 -254
  19. package/esm/generated-sdk/auth/types.d.ts.map +1 -1
  20. package/esm/generated-sdk/health/api.d.ts.map +1 -1
  21. package/esm/generated-sdk/health/client.d.ts.map +1 -1
  22. package/esm/generated-sdk/health/contract.d.ts.map +1 -1
  23. package/esm/generated-sdk/health/contract.js +117 -7
  24. package/esm/generated-sdk/health/mod.d.ts +2 -2
  25. package/esm/generated-sdk/health/mod.d.ts.map +1 -1
  26. package/esm/generated-sdk/health/mod.js +1 -1
  27. package/esm/generated-sdk/health/owned_api.d.ts.map +1 -1
  28. package/esm/generated-sdk/health/schemas.d.ts.map +1 -1
  29. package/esm/generated-sdk/health/schemas.js +79 -1
  30. package/esm/generated-sdk/health/types.d.ts +4 -4
  31. package/esm/generated-sdk/health/types.d.ts.map +1 -1
  32. package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
  33. package/esm/generated-sdk/jobs/api.js +12 -4
  34. package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
  35. package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
  36. package/esm/generated-sdk/jobs/contract.js +1080 -7
  37. package/esm/generated-sdk/jobs/mod.d.ts +2 -2
  38. package/esm/generated-sdk/jobs/mod.d.ts.map +1 -1
  39. package/esm/generated-sdk/jobs/mod.js +1 -1
  40. package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  41. package/esm/generated-sdk/jobs/owned_api.js +26 -6
  42. package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
  43. package/esm/generated-sdk/jobs/schemas.js +768 -18
  44. package/esm/generated-sdk/jobs/types.d.ts +14 -14
  45. package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
  46. package/esm/generated-sdk/state/api.d.ts.map +1 -1
  47. package/esm/generated-sdk/state/api.js +3 -1
  48. package/esm/generated-sdk/state/client.d.ts.map +1 -1
  49. package/esm/generated-sdk/state/contract.d.ts.map +1 -1
  50. package/esm/generated-sdk/state/contract.js +638 -7
  51. package/esm/generated-sdk/state/mod.d.ts +2 -2
  52. package/esm/generated-sdk/state/mod.d.ts.map +1 -1
  53. package/esm/generated-sdk/state/mod.js +1 -1
  54. package/esm/generated-sdk/state/owned_api.d.ts.map +1 -1
  55. package/esm/generated-sdk/state/owned_api.js +36 -8
  56. package/esm/generated-sdk/state/schemas.d.ts.map +1 -1
  57. package/esm/generated-sdk/state/schemas.js +441 -14
  58. package/esm/generated-sdk/state/types.d.ts +15 -15
  59. package/esm/generated-sdk/state/types.d.ts.map +1 -1
  60. package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
  61. package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
  62. package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  63. package/esm/generated-sdk/trellis-core/contract.js +744 -7
  64. package/esm/generated-sdk/trellis-core/mod.d.ts +2 -2
  65. package/esm/generated-sdk/trellis-core/mod.d.ts.map +1 -1
  66. package/esm/generated-sdk/trellis-core/mod.js +1 -1
  67. package/esm/generated-sdk/trellis-core/owned_api.d.ts.map +1 -1
  68. package/esm/generated-sdk/trellis-core/owned_api.js +1 -1
  69. package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  70. package/esm/generated-sdk/trellis-core/schemas.js +626 -8
  71. package/esm/generated-sdk/trellis-core/types.d.ts +14 -14
  72. package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
  73. package/esm/server/health.d.ts.map +1 -1
  74. package/esm/server/health.js +34 -3
  75. package/esm/server/service.d.ts +35 -13
  76. package/esm/server/service.d.ts.map +1 -1
  77. package/esm/server/service.js +33 -3
  78. package/esm/server.d.ts.map +1 -1
  79. package/esm/server.js +49 -8
  80. package/esm/service/deno.d.ts +1 -1
  81. package/esm/service/deno.d.ts.map +1 -1
  82. package/esm/service/mod.d.ts +1 -1
  83. package/esm/service/mod.d.ts.map +1 -1
  84. package/esm/service/node.d.ts +1 -1
  85. package/esm/service/node.d.ts.map +1 -1
  86. package/esm/trellis.d.ts +28 -4
  87. package/esm/trellis.d.ts.map +1 -1
  88. package/esm/trellis.js +117 -26
  89. package/package.json +2 -2
  90. package/script/client.d.ts +2 -0
  91. package/script/client.d.ts.map +1 -1
  92. package/script/client.js +2 -0
  93. package/script/client_connect.d.ts +3 -2
  94. package/script/client_connect.d.ts.map +1 -1
  95. package/script/client_connect.js +4 -1
  96. package/script/generated-sdk/auth/api.d.ts.map +1 -1
  97. package/script/generated-sdk/auth/client.d.ts.map +1 -1
  98. package/script/generated-sdk/auth/contract.d.ts.map +1 -1
  99. package/script/generated-sdk/auth/contract.js +9590 -7
  100. package/script/generated-sdk/auth/mod.d.ts +3 -3
  101. package/script/generated-sdk/auth/mod.d.ts.map +1 -1
  102. package/script/generated-sdk/auth/mod.js +2 -2
  103. package/script/generated-sdk/auth/owned_api.d.ts.map +1 -1
  104. package/script/generated-sdk/auth/owned_api.js +304 -61
  105. package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
  106. package/script/generated-sdk/auth/schemas.js +6492 -139
  107. package/script/generated-sdk/auth/types.d.ts +254 -254
  108. package/script/generated-sdk/auth/types.d.ts.map +1 -1
  109. package/script/generated-sdk/health/api.d.ts.map +1 -1
  110. package/script/generated-sdk/health/client.d.ts.map +1 -1
  111. package/script/generated-sdk/health/contract.d.ts.map +1 -1
  112. package/script/generated-sdk/health/contract.js +117 -7
  113. package/script/generated-sdk/health/mod.d.ts +2 -2
  114. package/script/generated-sdk/health/mod.d.ts.map +1 -1
  115. package/script/generated-sdk/health/mod.js +2 -2
  116. package/script/generated-sdk/health/owned_api.d.ts.map +1 -1
  117. package/script/generated-sdk/health/schemas.d.ts.map +1 -1
  118. package/script/generated-sdk/health/schemas.js +79 -1
  119. package/script/generated-sdk/health/types.d.ts +4 -4
  120. package/script/generated-sdk/health/types.d.ts.map +1 -1
  121. package/script/generated-sdk/jobs/api.d.ts.map +1 -1
  122. package/script/generated-sdk/jobs/api.js +12 -4
  123. package/script/generated-sdk/jobs/client.d.ts.map +1 -1
  124. package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
  125. package/script/generated-sdk/jobs/contract.js +1080 -7
  126. package/script/generated-sdk/jobs/mod.d.ts +2 -2
  127. package/script/generated-sdk/jobs/mod.d.ts.map +1 -1
  128. package/script/generated-sdk/jobs/mod.js +2 -2
  129. package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  130. package/script/generated-sdk/jobs/owned_api.js +25 -5
  131. package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
  132. package/script/generated-sdk/jobs/schemas.js +768 -18
  133. package/script/generated-sdk/jobs/types.d.ts +14 -14
  134. package/script/generated-sdk/jobs/types.d.ts.map +1 -1
  135. package/script/generated-sdk/state/api.d.ts.map +1 -1
  136. package/script/generated-sdk/state/api.js +3 -1
  137. package/script/generated-sdk/state/client.d.ts.map +1 -1
  138. package/script/generated-sdk/state/contract.d.ts.map +1 -1
  139. package/script/generated-sdk/state/contract.js +638 -7
  140. package/script/generated-sdk/state/mod.d.ts +2 -2
  141. package/script/generated-sdk/state/mod.d.ts.map +1 -1
  142. package/script/generated-sdk/state/mod.js +2 -2
  143. package/script/generated-sdk/state/owned_api.d.ts.map +1 -1
  144. package/script/generated-sdk/state/owned_api.js +35 -7
  145. package/script/generated-sdk/state/schemas.d.ts.map +1 -1
  146. package/script/generated-sdk/state/schemas.js +441 -14
  147. package/script/generated-sdk/state/types.d.ts +15 -15
  148. package/script/generated-sdk/state/types.d.ts.map +1 -1
  149. package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
  150. package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
  151. package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  152. package/script/generated-sdk/trellis-core/contract.js +744 -7
  153. package/script/generated-sdk/trellis-core/mod.d.ts +2 -2
  154. package/script/generated-sdk/trellis-core/mod.d.ts.map +1 -1
  155. package/script/generated-sdk/trellis-core/mod.js +2 -2
  156. package/script/generated-sdk/trellis-core/owned_api.d.ts.map +1 -1
  157. package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  158. package/script/generated-sdk/trellis-core/schemas.js +626 -8
  159. package/script/generated-sdk/trellis-core/types.d.ts +14 -14
  160. package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
  161. package/script/server/health.d.ts.map +1 -1
  162. package/script/server/health.js +34 -3
  163. package/script/server/service.d.ts +35 -13
  164. package/script/server/service.d.ts.map +1 -1
  165. package/script/server/service.js +32 -2
  166. package/script/server.d.ts.map +1 -1
  167. package/script/server.js +48 -7
  168. package/script/service/deno.d.ts +1 -1
  169. package/script/service/deno.d.ts.map +1 -1
  170. package/script/service/mod.d.ts +1 -1
  171. package/script/service/mod.d.ts.map +1 -1
  172. package/script/service/node.d.ts +1 -1
  173. package/script/service/node.d.ts.map +1 -1
  174. package/script/trellis.d.ts +28 -4
  175. package/script/trellis.d.ts.map +1 -1
  176. package/script/trellis.js +118 -26
  177. package/src/client.ts +4 -0
  178. package/src/client_connect.ts +11 -9
  179. package/src/sdk/_generated/auth/api.ts +10 -21
  180. package/src/sdk/_generated/auth/client.ts +1178 -160
  181. package/src/sdk/_generated/auth/contract.ts +9637 -13
  182. package/src/sdk/_generated/auth/mod.ts +22 -3
  183. package/src/sdk/_generated/auth/owned_api.ts +897 -264
  184. package/src/sdk/_generated/auth/schemas.ts +6630 -278
  185. package/src/sdk/_generated/auth/types.ts +2950 -359
  186. package/src/sdk/_generated/core/api.ts +10 -21
  187. package/src/sdk/_generated/core/client.ts +105 -12
  188. package/src/sdk/_generated/core/contract.ts +774 -13
  189. package/src/sdk/_generated/core/mod.ts +17 -2
  190. package/src/sdk/_generated/core/owned_api.ts +40 -24
  191. package/src/sdk/_generated/core/schemas.ts +626 -9
  192. package/src/sdk/_generated/core/types.ts +233 -18
  193. package/src/sdk/_generated/health/api.ts +10 -21
  194. package/src/sdk/_generated/health/client.ts +104 -8
  195. package/src/sdk/_generated/health/contract.ts +144 -13
  196. package/src/sdk/_generated/health/mod.ts +17 -2
  197. package/src/sdk/_generated/health/owned_api.ts +4 -9
  198. package/src/sdk/_generated/health/schemas.ts +79 -2
  199. package/src/sdk/_generated/health/types.ts +31 -4
  200. package/src/sdk/_generated/jobs/api.ts +20 -18
  201. package/src/sdk/_generated/jobs/client.ts +199 -28
  202. package/src/sdk/_generated/jobs/contract.ts +1119 -13
  203. package/src/sdk/_generated/jobs/mod.ts +17 -2
  204. package/src/sdk/_generated/jobs/owned_api.ts +64 -27
  205. package/src/sdk/_generated/jobs/schemas.ts +776 -20
  206. package/src/sdk/_generated/jobs/types.ts +407 -34
  207. package/src/sdk/_generated/state/api.ts +11 -18
  208. package/src/sdk/_generated/state/client.ts +169 -22
  209. package/src/sdk/_generated/state/contract.ts +670 -13
  210. package/src/sdk/_generated/state/mod.ts +17 -2
  211. package/src/sdk/_generated/state/owned_api.ts +65 -25
  212. package/src/sdk/_generated/state/schemas.ts +441 -15
  213. package/src/sdk/_generated/state/types.ts +229 -26
  214. package/src/server/health.ts +41 -3
  215. package/src/server/service.ts +140 -18
  216. package/src/server.ts +62 -7
  217. package/src/service/deno.ts +4 -0
  218. package/src/service/mod.ts +4 -0
  219. package/src/service/node.ts +4 -0
  220. 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 = "XfWDYLTBlYFjDqMPBEXrTBccZbFvHp0MnqscehdRKT4" as const;
6
+ export const CONTRACT_DIGEST =
7
+ "XfWDYLTBlYFjDqMPBEXrTBccZbFvHp0MnqscehdRKT4" as const;
7
8
 
8
- export type StateAdminDeleteInput = ({ contractDigest: string; contractId: string; expectedRevision?: string; key?: string; scope: "userApp"; store: string; user: { id: string; origin: string; userId?: string; }; } | { contractDigest: string; contractId: string; deviceId: string; expectedRevision?: string; key?: string; scope: "deviceApp"; store: string; });
9
- export type StateAdminDeleteOutput = { deleted: boolean; };
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 = ({ contractDigest: string; contractId: string; key?: string; scope: "userApp"; store: string; user: { id: string; origin: string; userId?: string; }; } | { contractDigest: string; contractId: string; deviceId: string; key?: string; scope: "deviceApp"; store: string; });
12
- export type StateAdminGetOutput = ({ found: false; } | { entry: { expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; }; found: true; } | { currentStateVersion: string; entry: { expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; }; migrationRequired: true; stateVersion: string; writerContractDigest: string; });
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 = ({ contractDigest: string; contractId: string; limit: number; offset?: number; prefix?: string; scope: "userApp"; store: string; user: { id: string; origin: string; userId?: string; }; } | { contractDigest: string; contractId: string; deviceId: string; limit: number; offset?: number; prefix?: string; scope: "deviceApp"; store: string; });
15
- export type StateAdminListOutput = { count: number; entries: Array<({ expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; } | { currentStateVersion: string; entry: { expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; }; migrationRequired: true; stateVersion: string; writerContractDigest: string; })>; limit: number; nextOffset?: number; offset: number; };
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 = { expectedRevision?: string; key?: string; store: string; };
18
- export type StateDeleteOutput = { deleted: boolean; };
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 = ({ found: false; } | { entry: { expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; }; found: true; } | { currentStateVersion: string; entry: { expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; }; migrationRequired: true; stateVersion: string; writerContractDigest: string; });
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 = { limit: number; offset?: number; prefix?: string; store: string; };
24
- export type StateListOutput = { count: number; entries: Array<({ expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; } | { currentStateVersion: string; entry: { expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; }; migrationRequired: true; stateVersion: string; writerContractDigest: string; })>; limit: number; nextOffset?: number; offset: number; };
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 = { expectedRevision?: (string | null); key?: string; store: string; ttlMs?: number; value: unknown; };
27
- export type StatePutOutput = ({ applied: true; entry: { expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; }; } | { applied: false; entry?: ({ expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; } | { currentStateVersion: string; entry: { expiresAt?: string; key?: string; revision: string; updatedAt: string; value: unknown; }; migrationRequired: true; stateVersion: string; writerContractDigest: string; }); found: boolean; });
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": { input: StateAdminDeleteInput; output: StateAdminDeleteOutput; };
31
- "State.Admin.Get": { input: StateAdminGetInput; output: StateAdminGetOutput; };
32
- "State.Admin.List": { input: StateAdminListInput; output: StateAdminListOutput; };
33
- "State.Delete": { input: StateDeleteInput; output: StateDeleteOutput; };
34
- "State.Get": { input: StateGetInput; output: StateGetOutput; };
35
- "State.List": { input: StateListInput; output: StateListOutput; };
36
- "State.Put": { input: StatePutInput; output: StatePutOutput; };
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<typeof API.owned, "State.Admin.Delete">;
40
- export type StateAdminGetHandler = RpcHandlerFn<typeof API.owned, "State.Admin.Get">;
41
- export type StateAdminListHandler = RpcHandlerFn<typeof API.owned, "State.Admin.List">;
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
-
@@ -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
- return await Promise.all(
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 checks = Object.fromEntries(this.#checks.entries());
362
- return await runAllServiceHealthChecks(this.serviceName, checks);
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">> {
@@ -77,7 +77,10 @@ import type {
77
77
  RpcHandlerContext,
78
78
  RpcHandlerErrorOf,
79
79
  } from "../trellis.js";
80
- import { createTrellisInternal } from "../trellis.js";
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
- > = (args: JobArgs<TContract, TJob>) => Promise<JobResult<TContract, TJob>>;
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: (args: { deps: TDeps }) =>
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 handled = (await handler(publicJob)).take();
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
- throw InternalJobProcessError.failed(handled.error.message);
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,