@oatscenter/trellis 0.100.0-rc.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.
Files changed (264) hide show
  1. package/README.md +59 -0
  2. package/auth/authorization/client_context.d.ts +61 -0
  3. package/auth/authorization/client_context.js +266 -0
  4. package/auth/authorization/nats_registry.d.ts +41 -0
  5. package/auth/authorization/nats_registry.js +283 -0
  6. package/auth/authorization/provider_cache.d.ts +90 -0
  7. package/auth/authorization/provider_cache.js +783 -0
  8. package/auth/authorization/refresh.d.ts +46 -0
  9. package/auth/authorization/refresh.js +246 -0
  10. package/auth/authorization/types.d.ts +207 -0
  11. package/auth/authorization/types.js +60 -0
  12. package/auth/authorization_context.d.ts +11 -0
  13. package/auth/authorization_context.js +10 -0
  14. package/auth/browser/flow_types.d.ts +84 -0
  15. package/auth/browser/flow_types.js +70 -0
  16. package/auth/browser/portal.d.ts +21 -0
  17. package/auth/browser/portal.js +307 -0
  18. package/auth/browser/storage.d.ts +26 -0
  19. package/auth/browser/storage.js +224 -0
  20. package/auth/browser.d.ts +11 -0
  21. package/auth/browser.js +10 -0
  22. package/auth/browser_recovery.d.ts +13 -0
  23. package/auth/browser_recovery.js +38 -0
  24. package/auth/device_activation.d.ts +134 -0
  25. package/auth/device_activation.js +376 -0
  26. package/auth/http_error.d.ts +12 -0
  27. package/auth/http_error.js +32 -0
  28. package/auth/keys.d.ts +5 -0
  29. package/auth/keys.js +63 -0
  30. package/auth/mod.d.ts +16 -0
  31. package/auth/mod.js +16 -0
  32. package/auth/proof.d.ts +31 -0
  33. package/auth/proof.js +95 -0
  34. package/auth/protocol_wasm/trellis_protocol_wasm.d.ts +138 -0
  35. package/auth/protocol_wasm/trellis_protocol_wasm.js +605 -0
  36. package/auth/protocol_wasm/trellis_protocol_wasm_bg.wasm +0 -0
  37. package/auth/protocol_wasm/trellis_protocol_wasm_bytes.d.ts +1 -0
  38. package/auth/protocol_wasm/trellis_protocol_wasm_bytes.js +2 -0
  39. package/auth/protocol_wasm.d.ts +179 -0
  40. package/auth/protocol_wasm.js +133 -0
  41. package/auth/session_auth.d.ts +30 -0
  42. package/auth/session_auth.js +77 -0
  43. package/auth/session_proof.d.ts +53 -0
  44. package/auth/session_proof.js +43 -0
  45. package/auth/time.d.ts +6 -0
  46. package/auth/time.js +7 -0
  47. package/auth/trellis_id.d.ts +1 -0
  48. package/auth/trellis_id.js +5 -0
  49. package/auth/utils.d.ts +10 -0
  50. package/auth/utils.js +69 -0
  51. package/auth.d.ts +1 -0
  52. package/auth.js +1 -0
  53. package/caller.d.ts +111 -0
  54. package/caller.js +85 -0
  55. package/client.d.ts +14 -0
  56. package/client.js +1 -0
  57. package/client_connect.d.ts +143 -0
  58. package/client_connect.js +1097 -0
  59. package/codec.d.ts +13 -0
  60. package/codec.js +192 -0
  61. package/connection.d.ts +107 -0
  62. package/connection.js +396 -0
  63. package/device/activation.d.ts +42 -0
  64. package/device/activation.js +319 -0
  65. package/device.d.ts +80 -0
  66. package/device.js +687 -0
  67. package/env.d.ts +2 -0
  68. package/env.js +10 -0
  69. package/errors/AuthError.d.ts +30 -0
  70. package/errors/AuthError.js +34 -0
  71. package/errors/KVError.d.ts +30 -0
  72. package/errors/KVError.js +36 -0
  73. package/errors/OperationLifecycleError.d.ts +110 -0
  74. package/errors/OperationLifecycleError.js +142 -0
  75. package/errors/RemoteError.d.ts +61 -0
  76. package/errors/RemoteError.js +72 -0
  77. package/errors/SchemaValidationError.d.ts +48 -0
  78. package/errors/SchemaValidationError.js +49 -0
  79. package/errors/StoreError.d.ts +21 -0
  80. package/errors/StoreError.js +31 -0
  81. package/errors/TransferError.d.ts +21 -0
  82. package/errors/TransferError.js +31 -0
  83. package/errors/TransportError.d.ts +29 -0
  84. package/errors/TransportError.js +33 -0
  85. package/errors/TrellisError.d.ts +15 -0
  86. package/errors/TrellisError.js +15 -0
  87. package/errors/ValidationError.d.ts +50 -0
  88. package/errors/ValidationError.js +59 -0
  89. package/errors/index.d.ts +254 -0
  90. package/errors/index.js +238 -0
  91. package/generated.d.ts +4 -0
  92. package/generated.js +3 -0
  93. package/generated_support.d.ts +120 -0
  94. package/generated_support.js +359 -0
  95. package/globals.d.ts +9 -0
  96. package/globals.js +16 -0
  97. package/health_transport.d.ts +18 -0
  98. package/health_transport.js +32 -0
  99. package/helpers.d.ts +11 -0
  100. package/helpers.js +53 -0
  101. package/index.d.ts +2 -0
  102. package/index.js +2 -0
  103. package/internal_sdk/generated/apis/auth/mod.d.ts +805 -0
  104. package/internal_sdk/generated/apis/auth/mod.js +958 -0
  105. package/internal_sdk/generated/apis/core/mod.d.ts +79 -0
  106. package/internal_sdk/generated/apis/core/mod.js +93 -0
  107. package/internal_sdk/generated/apis/events/mod.d.ts +224 -0
  108. package/internal_sdk/generated/apis/events/mod.js +313 -0
  109. package/internal_sdk/generated/apis/health/mod.d.ts +106 -0
  110. package/internal_sdk/generated/apis/health/mod.js +132 -0
  111. package/internal_sdk/generated/apis/index.d.ts +7 -0
  112. package/internal_sdk/generated/apis/index.js +8 -0
  113. package/internal_sdk/generated/apis/jobs/mod.d.ts +176 -0
  114. package/internal_sdk/generated/apis/jobs/mod.js +209 -0
  115. package/internal_sdk/generated/apis/state/mod.d.ts +104 -0
  116. package/internal_sdk/generated/apis/state/mod.js +139 -0
  117. package/internal_sdk/generated/index.d.ts +4 -0
  118. package/internal_sdk/generated/index.js +5 -0
  119. package/internal_sdk/generated/package.json +18 -0
  120. package/internal_sdk/generated/participants/cli/mod.d.ts +402 -0
  121. package/internal_sdk/generated/participants/cli/mod.js +460 -0
  122. package/internal_sdk/generated/participants/cli/types.d.ts +2 -0
  123. package/internal_sdk/generated/participants/cli/types.js +3 -0
  124. package/internal_sdk/generated/participants/console/mod.d.ts +489 -0
  125. package/internal_sdk/generated/participants/console/mod.js +579 -0
  126. package/internal_sdk/generated/participants/console/types.d.ts +2 -0
  127. package/internal_sdk/generated/participants/console/types.js +3 -0
  128. package/internal_sdk/generated/participants/eventsRuntime/mod.d.ts +64 -0
  129. package/internal_sdk/generated/participants/eventsRuntime/mod.js +42 -0
  130. package/internal_sdk/generated/participants/eventsRuntime/types.d.ts +2 -0
  131. package/internal_sdk/generated/participants/eventsRuntime/types.js +3 -0
  132. package/internal_sdk/generated/participants/healthRuntime/mod.d.ts +58 -0
  133. package/internal_sdk/generated/participants/healthRuntime/mod.js +36 -0
  134. package/internal_sdk/generated/participants/healthRuntime/types.d.ts +2 -0
  135. package/internal_sdk/generated/participants/healthRuntime/types.js +3 -0
  136. package/internal_sdk/generated/participants/index.d.ts +8 -0
  137. package/internal_sdk/generated/participants/index.js +9 -0
  138. package/internal_sdk/generated/participants/jobsRuntime/mod.d.ts +64 -0
  139. package/internal_sdk/generated/participants/jobsRuntime/mod.js +42 -0
  140. package/internal_sdk/generated/participants/jobsRuntime/types.d.ts +2 -0
  141. package/internal_sdk/generated/participants/jobsRuntime/types.js +3 -0
  142. package/internal_sdk/generated/participants/platform/mod.d.ts +164 -0
  143. package/internal_sdk/generated/participants/platform/mod.js +149 -0
  144. package/internal_sdk/generated/participants/platform/types.d.ts +7 -0
  145. package/internal_sdk/generated/participants/platform/types.js +5 -0
  146. package/internal_sdk/generated/participants/portal/mod.d.ts +131 -0
  147. package/internal_sdk/generated/participants/portal/mod.js +109 -0
  148. package/internal_sdk/generated/participants/portal/types.d.ts +2 -0
  149. package/internal_sdk/generated/participants/portal/types.js +3 -0
  150. package/internal_sdk/generated/types/_internal/p0.d.ts +13511 -0
  151. package/internal_sdk/generated/types/_internal/p0.js +6105 -0
  152. package/internal_sdk/generated/types/index.d.ts +2951 -0
  153. package/internal_sdk/generated/types/index.js +1477 -0
  154. package/jobs.d.ts +309 -0
  155. package/jobs.js +389 -0
  156. package/kv.d.ts +85 -0
  157. package/kv.js +330 -0
  158. package/operations.d.ts +189 -0
  159. package/operations.js +847 -0
  160. package/package.json +73 -0
  161. package/pagination.d.ts +25 -0
  162. package/pagination.js +117 -0
  163. package/participant.d.ts +6 -0
  164. package/participant.js +6 -0
  165. package/participant_runtime/api.d.ts +131 -0
  166. package/participant_runtime/api.js +42 -0
  167. package/participant_runtime/json.d.ts +16 -0
  168. package/participant_runtime/json.js +193 -0
  169. package/participant_runtime/metadata.d.ts +34 -0
  170. package/participant_runtime/metadata.js +4 -0
  171. package/participant_runtime/participant.d.ts +200 -0
  172. package/participant_runtime/participant.js +330 -0
  173. package/participant_runtime/schemas.d.ts +347 -0
  174. package/participant_runtime/schemas.js +211 -0
  175. package/participant_runtime/surface_names.d.ts +16 -0
  176. package/participant_runtime/surface_names.js +34 -0
  177. package/portable.d.ts +30 -0
  178. package/portable.js +14 -0
  179. package/provider.d.ts +69 -0
  180. package/provider.js +68 -0
  181. package/runtime_transport.d.ts +25 -0
  182. package/runtime_transport.js +48 -0
  183. package/service/mod.d.ts +14 -0
  184. package/service/mod.js +13 -0
  185. package/service/outbox_inbox.d.ts +259 -0
  186. package/service/outbox_inbox.js +908 -0
  187. package/service/runtime/bootstrap.d.ts +56 -0
  188. package/service/runtime/bootstrap.js +226 -0
  189. package/service/runtime/core.d.ts +46 -0
  190. package/service/runtime/core.js +1747 -0
  191. package/service/runtime/health.d.ts +97 -0
  192. package/service/runtime/health.js +153 -0
  193. package/service/runtime/health_schemas.d.ts +23 -0
  194. package/service/runtime/health_schemas.js +20 -0
  195. package/service/runtime/internal_jobs/active-job.d.ts +40 -0
  196. package/service/runtime/internal_jobs/active-job.js +91 -0
  197. package/service/runtime/internal_jobs/bindings.d.ts +40 -0
  198. package/service/runtime/internal_jobs/bindings.js +1 -0
  199. package/service/runtime/internal_jobs/cancellation-registry.d.ts +13 -0
  200. package/service/runtime/internal_jobs/cancellation-registry.js +55 -0
  201. package/service/runtime/internal_jobs/heartbeat.d.ts +33 -0
  202. package/service/runtime/internal_jobs/heartbeat.js +65 -0
  203. package/service/runtime/internal_jobs/job-manager.d.ts +126 -0
  204. package/service/runtime/internal_jobs/job-manager.js +821 -0
  205. package/service/runtime/internal_jobs/key-coordinator.d.ts +280 -0
  206. package/service/runtime/internal_jobs/key-coordinator.js +747 -0
  207. package/service/runtime/internal_jobs/projection.d.ts +3 -0
  208. package/service/runtime/internal_jobs/projection.js +42 -0
  209. package/service/runtime/internal_jobs/runtime-worker.d.ts +126 -0
  210. package/service/runtime/internal_jobs/runtime-worker.js +454 -0
  211. package/service/runtime/internal_jobs/types.d.ts +246 -0
  212. package/service/runtime/internal_jobs/types.js +163 -0
  213. package/service/runtime/logger.d.ts +2 -0
  214. package/service/runtime/logger.js +7 -0
  215. package/service/runtime/runtime.d.ts +16 -0
  216. package/service/runtime/runtime.js +1 -0
  217. package/service/runtime/service.d.ts +372 -0
  218. package/service/runtime/service.js +1896 -0
  219. package/service/runtime/transfer/download.d.ts +27 -0
  220. package/service/runtime/transfer/download.js +1 -0
  221. package/service/runtime/transfer/protocol.d.ts +15 -0
  222. package/service/runtime/transfer/protocol.js +46 -0
  223. package/service/runtime/transfer/queue.d.ts +18 -0
  224. package/service/runtime/transfer/queue.js +136 -0
  225. package/service/runtime/transfer/upload.d.ts +40 -0
  226. package/service/runtime/transfer/upload.js +27 -0
  227. package/service/runtime/transfer.d.ts +62 -0
  228. package/service/runtime/transfer.js +763 -0
  229. package/session.d.ts +862 -0
  230. package/session.js +3407 -0
  231. package/store.d.ts +71 -0
  232. package/store.js +412 -0
  233. package/store_entry.d.ts +20 -0
  234. package/store_entry.js +75 -0
  235. package/tasks.d.ts +10 -0
  236. package/tasks.js +28 -0
  237. package/telemetry/carrier.d.ts +8 -0
  238. package/telemetry/carrier.js +20 -0
  239. package/telemetry/core.d.ts +7 -0
  240. package/telemetry/core.js +14 -0
  241. package/telemetry/env.d.ts +2 -0
  242. package/telemetry/env.js +10 -0
  243. package/telemetry/init.d.ts +2 -0
  244. package/telemetry/init.js +7 -0
  245. package/telemetry/metrics.d.ts +81 -0
  246. package/telemetry/metrics.js +267 -0
  247. package/telemetry/mod.d.ts +13 -0
  248. package/telemetry/mod.js +8 -0
  249. package/telemetry/nats.d.ts +6 -0
  250. package/telemetry/nats.js +6 -0
  251. package/telemetry/result.d.ts +1 -0
  252. package/telemetry/result.js +18 -0
  253. package/telemetry/runtime.d.ts +1 -0
  254. package/telemetry/runtime.js +141 -0
  255. package/telemetry/trace.d.ts +4 -0
  256. package/telemetry/trace.js +26 -0
  257. package/telemetry/trellis.d.ts +1 -0
  258. package/telemetry/trellis.js +1 -0
  259. package/telemetry.d.ts +1 -0
  260. package/telemetry.js +1 -0
  261. package/transfer.d.ts +112 -0
  262. package/transfer.js +525 -0
  263. package/transfer_protocol.d.ts +1 -0
  264. package/transfer_protocol.js +13 -0
@@ -0,0 +1,372 @@
1
+ import type { StoreError } from "../../errors/index.ts";
2
+ import { TypedKV } from "../../kv.ts";
3
+ import { type StoreWaitOptions, TypedStore, type TypedStoreEntry } from "../../store.ts";
4
+ import { type TrellisAuth as SessionAuth } from "../../auth.ts";
5
+ import type { InferSchemaType } from "../../participant.ts";
6
+ import type { PermissionAtom, RuntimeApi } from "../../participant_runtime/api.ts";
7
+ import type { ParticipantJobsMetadata, ParticipantKvMetadata } from "../../participant_runtime/metadata.ts";
8
+ import { type GeneratedParticipant } from "../../participant_runtime/participant.ts";
9
+ import { type ConnectedActionName } from "../../participant_runtime/surface_names.ts";
10
+ import { AsyncResult, type BaseError, type MaybeAsync, Result } from "@oatscenter/result";
11
+ import { type ServiceHealth, type ServiceHealthCheckFn, type ServiceHealthInfoFn } from "./health.ts";
12
+ import type { EventDesc } from "../../participant.ts";
13
+ import type { ActiveEventFacade, EventListenerContext, FeedEventOf, FeedHandlerContext, FeedInputOf, FeedRegistration as RootFeedRegistration, FeedsOf, HandlerTrellis, OperationHandlerContext, OperationHandlerErrorOf, OperationOutputOf, OperationProgressOf, OperationTransferContextOf, OperationUpdateOf, PreparedTrellisEvent, RpcHandlerContext, RpcHandlerErrorOf } from "../../session.ts";
14
+ import { type LoggerLike } from "../../globals.ts";
15
+ import { PROVIDER_CALLER, type ProviderCaller, type ProviderHandlerClient, type ProviderRuntime } from "../../provider.ts";
16
+ import { type TransferError, TransportError, UnexpectedError, ValidationError } from "../../errors/index.ts";
17
+ import type { ReceiveTransferGrant } from "../../transfer.ts";
18
+ import { ActiveJob as PublicActiveJob, type JobHandlerOptions, JobRef, type JobSubmitOutcome, type JobUpdatesOptions, type JobUpdateSubscription } from "../../jobs.ts";
19
+ import type { JobKeyConcurrencyBinding, JobQueuePolicyBinding } from "./internal_jobs/key-coordinator.ts";
20
+ import { type TrellisConnection } from "../../connection.ts";
21
+ import { type OutboxDispatcherOptions, type OutboxJobDispatchOutcome, type OutboxMessage, type SqlDialect, type SqlExecutor, type SqlOutboxTables } from "../outbox_inbox.ts";
22
+ type ResourceBindingJobsQueue = {
23
+ queueType: string;
24
+ publishPrefix: string;
25
+ workSubject: string;
26
+ consumerName: string;
27
+ payload: {
28
+ schema: string;
29
+ };
30
+ update?: {
31
+ schema: string;
32
+ };
33
+ updatesPrefix?: string;
34
+ result?: {
35
+ schema: string;
36
+ };
37
+ maxDeliver: number;
38
+ backoffMs: number[];
39
+ ackWaitMs: number;
40
+ defaultDeadlineMs?: number;
41
+ keyConcurrency?: JobKeyConcurrencyBinding;
42
+ queue?: JobQueuePolicyBinding;
43
+ };
44
+ type ResourceBindingJobs = {
45
+ serviceName: string;
46
+ namespace: string;
47
+ workStream?: string;
48
+ queues: Record<string, ResourceBindingJobsQueue>;
49
+ };
50
+ type ResourceBindingEventConsumer = {
51
+ stream: string;
52
+ consumerName: string;
53
+ resourceId: string;
54
+ filterSubjects: string[];
55
+ replay: "new" | "all";
56
+ concurrency: number;
57
+ ackWaitMs: number;
58
+ maxDeliver: number;
59
+ backoffMs: number[];
60
+ replayBinding: {
61
+ stream: string;
62
+ consumerName: string;
63
+ };
64
+ };
65
+ type RpcMethodName<TA extends RuntimeApi> = keyof TA["rpc"] & string;
66
+ type RpcMethodInput<TA extends RuntimeApi, M extends RpcMethodName<TA>> = InferSchemaType<TA["rpc"][M]["input"]>;
67
+ type RpcMethodOutput<TA extends RuntimeApi, M extends RpcMethodName<TA>> = InferSchemaType<TA["rpc"][M]["output"]>;
68
+ export type TrellisServiceHealthOpts = {
69
+ publishIntervalMs?: number;
70
+ };
71
+ export type TrellisServiceRuntimeOpts = {
72
+ log?: LoggerLike | false;
73
+ timeout?: number;
74
+ stream?: string;
75
+ noResponderRetry?: {
76
+ maxAttempts?: number;
77
+ baseDelayMs?: number;
78
+ };
79
+ version?: string;
80
+ health?: TrellisServiceHealthOpts;
81
+ };
82
+ export type ResourceBindingKV = {
83
+ bucket: string;
84
+ history: number;
85
+ ttlMs: number;
86
+ maxValueBytes?: number;
87
+ };
88
+ export type ResourceBindingStore = {
89
+ name: string;
90
+ ttlMs: number;
91
+ maxObjectBytes?: number;
92
+ maxTotalBytes?: number;
93
+ };
94
+ export type ResourceBindings = {
95
+ kv: Record<string, ResourceBindingKV>;
96
+ store: Record<string, ResourceBindingStore>;
97
+ jobs?: ResourceBindingJobs;
98
+ eventConsumers?: Record<string, ResourceBindingEventConsumer>;
99
+ };
100
+ export declare abstract class StoreHandle {
101
+ abstract readonly binding: ResourceBindingStore;
102
+ abstract open(): AsyncResult<TypedStore, StoreError>;
103
+ /**
104
+ * Waits for a staged object to appear in the bound store and returns its entry.
105
+ */
106
+ abstract waitFor(key: string, options?: StoreWaitOptions): AsyncResult<TypedStoreEntry, StoreError>;
107
+ }
108
+ export type TrellisServiceConnectOpts<TOwnedApi extends RuntimeApi = RuntimeApi, TTrellisApi extends RuntimeApi | undefined = TOwnedApi> = {
109
+ trellisUrl: string;
110
+ participant: GeneratedServiceParticipant<TOwnedApi, TTrellisApi>;
111
+ name?: string;
112
+ /** Immutable provisioned service identity. */
113
+ seed: string;
114
+ /** Controls automatic telemetry initialization. Enabled by default. */
115
+ telemetry?: TrellisServiceConnectTelemetryOpts;
116
+ /** Configures the connected service runtime. */
117
+ runtime?: TrellisServiceRuntimeOpts;
118
+ };
119
+ /** Controls automatic telemetry initialization for `TrellisService.connect()`. */
120
+ export type TrellisServiceConnectTelemetryOpts = false | {
121
+ /** Whether automatic telemetry initialization is enabled. Defaults to `true`. */
122
+ enabled?: boolean;
123
+ };
124
+ type ServiceKvFacade<TKv extends ParticipantKvMetadata> = {
125
+ [K in keyof TKv]: TKv[K]["required"] extends false ? TypedKV<TKv[K]["value"]> | undefined : TypedKV<TKv[K]["value"]>;
126
+ };
127
+ type ServiceHandlerResources<TKv extends ParticipantKvMetadata, TJobs extends ParticipantJobsMetadata, TTrellisApi extends RuntimeApi> = {
128
+ kv: ServiceKvFacade<TKv>;
129
+ store: Record<string, StoreHandle>;
130
+ jobs: JobsFacadeOf<TJobs, TTrellisApi, TKv>;
131
+ };
132
+ export type Trellis<TTrellisApi extends RuntimeApi, TKv extends ParticipantKvMetadata = ParticipantKvMetadata, TJobs extends ParticipantJobsMetadata = ParticipantJobsMetadata> = HandlerTrellis<TTrellisApi> & ServiceHandlerResources<TKv, TJobs, TTrellisApi>;
133
+ export type GeneratedServiceParticipant<TOwnedApi extends RuntimeApi, TTrellisApi extends RuntimeApi | undefined, TJobs extends ParticipantJobsMetadata = ParticipantJobsMetadata, TKv extends ParticipantKvMetadata = ParticipantKvMetadata> = GeneratedParticipant & {
134
+ readonly __runtimeTypes?: {
135
+ ownedApi: TOwnedApi;
136
+ api: TTrellisApi;
137
+ jobs: TJobs;
138
+ kv: TKv;
139
+ };
140
+ };
141
+ type ParticipantOwnedApi<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata>> = TContract extends {
142
+ readonly __runtimeTypes?: {
143
+ ownedApi: infer TOwnedApi;
144
+ };
145
+ } ? Extract<TOwnedApi, RuntimeApi> : RuntimeApi;
146
+ type ParticipantTrellisApi<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata>> = TContract extends {
147
+ readonly __runtimeTypes?: {
148
+ api: infer TApi;
149
+ };
150
+ } ? Extract<TApi, RuntimeApi> : ParticipantOwnedApi<TContract>;
151
+ type ParticipantJobsOf<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>> = TContract extends {
152
+ readonly __runtimeTypes?: {
153
+ jobs: infer TJobs;
154
+ };
155
+ } ? Extract<TJobs, ParticipantJobsMetadata> : Record<string, never>;
156
+ type ParticipantKvOf<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>> = TContract extends {
157
+ readonly __runtimeTypes?: {
158
+ kv: infer TKv;
159
+ };
160
+ } ? Extract<TKv, ParticipantKvMetadata> : Record<string, never>;
161
+ type ServiceHandlerClient<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>> = ProviderHandlerClient<TContract, TrellisServiceSession<ParticipantOwnedApi<TContract>, ParticipantTrellisApi<TContract>, ParticipantJobsOf<TContract>, ParticipantKvOf<TContract>>>;
162
+ type ParticipantEventName<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata>> = ServiceEventName<ParticipantTrellisApi<TContract>>;
163
+ type ContractOperationName<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata>> = keyof ParticipantOwnedApi<TContract>["operations"] & string;
164
+ type ContractFeedName<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata>> = FeedsOf<ParticipantOwnedApi<TContract>>;
165
+ type ContractJobName<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>> = keyof ParticipantJobsOf<TContract> & string;
166
+ /** Typed RPC handler function for an extracted Trellis service handler. */
167
+ export type RpcHandler<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>, M extends RpcMethodName<ParticipantOwnedApi<TContract>>> = ({ input, context, client, }: {
168
+ input: RpcMethodInput<ParticipantOwnedApi<TContract>, M>;
169
+ context: RpcHandlerContext;
170
+ client: ServiceHandlerClient<TContract>;
171
+ }) => Promise<Result<RpcMethodOutput<ParticipantOwnedApi<TContract>, M>, RpcHandlerErrorOf<ParticipantOwnedApi<TContract>, M>>> | Result<RpcMethodOutput<ParticipantOwnedApi<TContract>, M>, RpcHandlerErrorOf<ParticipantOwnedApi<TContract>, M>>;
172
+ /** Typed event listener function for an extracted Trellis service listener. */
173
+ export type ServiceEventHandler<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>, E extends ParticipantEventName<TContract>> = (args: {
174
+ event: ServiceEventOf<ParticipantTrellisApi<TContract>, E>;
175
+ context: EventListenerContext;
176
+ client: ServiceHandlerClient<TContract>;
177
+ }) => MaybeAsync<void, BaseError>;
178
+ /** Typed operation handler function for an extracted Trellis service handler. */
179
+ export type OperationHandler<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>, O extends ContractOperationName<TContract>> = (args: OperationHandlerContext<InferSchemaType<ParticipantOwnedApi<TContract>["operations"][O]["input"]>, OperationProgressOf<ParticipantOwnedApi<TContract>, O>, OperationOutputOf<ParticipantOwnedApi<TContract>, O>, OperationTransferContextOf<ParticipantOwnedApi<TContract>, O>, OperationHandlerErrorOf<ParticipantOwnedApi<TContract>, O>, OperationUpdateOf<ParticipantOwnedApi<TContract>, O>> & {
180
+ client: ServiceHandlerClient<TContract>;
181
+ }) => unknown | Promise<unknown>;
182
+ /** Typed feed handler function for an extracted Trellis service handler. */
183
+ export type FeedHandler<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>, F extends ContractFeedName<TContract>> = (context: FeedHandlerContext<FeedInputOf<ParticipantOwnedApi<TContract>, F>, FeedEventOf<ParticipantOwnedApi<TContract>, F>>) => unknown | Promise<unknown>;
184
+ /** Typed job handler function for an extracted Trellis service job. */
185
+ export type JobHandler<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>, K extends ContractJobName<TContract>> = (args: {
186
+ job: PublicActiveJob<ParticipantJobsOf<TContract>[K]["payload"], ParticipantJobsOf<TContract>[K]["result"], ParticipantJobsOf<TContract>[K]["update"]>;
187
+ client: ServiceHandlerClient<TContract>;
188
+ }) => Promise<Result<ParticipantJobsOf<TContract>[K]["result"], BaseError>>;
189
+ /** Typed health info function for an extracted service health handler. */
190
+ export type HealthInfoHandler = ServiceHealthInfoFn;
191
+ /** Typed health check function for an extracted service health handler. */
192
+ export type HealthCheckHandler = ServiceHealthCheckFn;
193
+ export type JobQueue<TPayload, TResult, TTrellisApi extends RuntimeApi, TKv extends ParticipantKvMetadata = ParticipantKvMetadata, TJobs extends ParticipantJobsMetadata = ParticipantJobsMetadata, TUpdate = never> = {
194
+ create(payload: TPayload): AsyncResult<JobRef<TPayload, TResult, TUpdate>, BaseError>;
195
+ submit(payload: TPayload): AsyncResult<JobSubmitOutcome<TPayload, TResult, TUpdate>, BaseError>;
196
+ updates(jobId: string, options?: JobUpdatesOptions): AsyncResult<JobUpdateSubscription<TUpdate>, BaseError>;
197
+ handle(handler: (args: {
198
+ job: PublicActiveJob<TPayload, TResult, TUpdate>;
199
+ client: Trellis<TTrellisApi, TKv, TJobs>;
200
+ }) => Promise<Result<TResult, BaseError>>, options?: JobHandlerOptions): void;
201
+ };
202
+ export type JobsFacadeOf<TJobs extends ParticipantJobsMetadata, TTrellisApi extends RuntimeApi, TKv extends ParticipantKvMetadata = ParticipantKvMetadata> = {
203
+ [K in keyof TJobs]: JobQueue<TJobs[K]["payload"], TJobs[K]["result"], TTrellisApi, TKv, TJobs, TJobs[K]["update"]>;
204
+ };
205
+ type ServiceEventName<TA extends RuntimeApi> = keyof TA["events"] & string;
206
+ type ServiceEventOf<TA extends RuntimeApi, E extends ServiceEventName<TA>> = TA["events"][E] extends EventDesc<infer TEvent> ? InferSchemaType<TEvent> : never;
207
+ type ServiceEventPayloadOf<TA extends RuntimeApi, E extends ServiceEventName<TA>> = ServiceEventOf<TA, E> & Record<string, unknown>;
208
+ /** Runs SQL outbox work inside a caller-owned service database transaction. */
209
+ export type SqlOutboxTransactionRunner<TTx> = <TResult>(work: (context: {
210
+ tx: TTx;
211
+ executor: SqlExecutor;
212
+ }) => Promise<TResult> | TResult) => Promise<TResult>;
213
+ /** Options shared by all Trellis SQL outbox service bindings. */
214
+ export type TrellisServiceSqlOutboxCommonOptions = {
215
+ /** SQL dialect used by the Trellis helper tables. */
216
+ readonly dialect: SqlDialect;
217
+ /** Optional Trellis helper-table names; omitted names use Trellis defaults. */
218
+ readonly tables?: Partial<SqlOutboxTables>;
219
+ /** Optional process-local dispatcher tuning. */
220
+ readonly dispatcher?: OutboxDispatcherOptions;
221
+ };
222
+ /** Options for binding a Trellis service to generic caller-owned SQL storage. */
223
+ export type TrellisServiceSqlOutboxExecutorOptions<TTx> = TrellisServiceSqlOutboxCommonOptions & {
224
+ /** Non-transactional executor used by the process-local dispatcher. */
225
+ readonly executor: SqlExecutor;
226
+ /** Service-owned transaction runner for handler-scoped work. */
227
+ readonly transaction: SqlOutboxTransactionRunner<TTx>;
228
+ };
229
+ /** Options for binding a Trellis service to caller-owned SQL outbox storage. */
230
+ export type TrellisServiceSqlOutboxOptions<TTx> = TrellisServiceSqlOutboxExecutorOptions<TTx>;
231
+ /** Typed transaction-scoped event facade that enqueues prepared events. */
232
+ export type SqlOutboxEventEnqueueFacade<TEventApi extends RuntimeApi = RuntimeApi> = {
233
+ readonly [TGroup in SurfaceGroupName<ServiceEventName<TEventApi>>]: {
234
+ readonly [E in SurfaceKeysForGroup<ServiceEventName<TEventApi>, TGroup> as SurfaceLeafName<E>]: {
235
+ enqueue(event: ServiceEventPayloadOf<TEventApi, E>): AsyncResult<OutboxMessage, ValidationError | UnexpectedError>;
236
+ };
237
+ };
238
+ };
239
+ /** Returned by outbox.job.<queue>.create/submit inside a transaction. */
240
+ export type SqlOutboxJobSubmission = {
241
+ readonly submissionId: string;
242
+ readonly jobId: string;
243
+ readonly queue: string;
244
+ readonly mode: "create" | "submit";
245
+ };
246
+ /** Transaction-scoped facade for enqueuing job creation/submission intents. */
247
+ export type SqlOutboxJobEnqueueFacade<TJobs extends ParticipantJobsMetadata> = {
248
+ readonly [K in keyof TJobs]: {
249
+ create(payload: TJobs[K]["payload"]): AsyncResult<SqlOutboxJobSubmission, ValidationError | UnexpectedError>;
250
+ submit(payload: TJobs[K]["payload"]): AsyncResult<SqlOutboxJobSubmission, ValidationError | UnexpectedError>;
251
+ };
252
+ };
253
+ /** Context supplied to `outbox.transaction(...)` work callbacks. */
254
+ export type SqlOutboxTransactionContext<TTx, TEventApi extends RuntimeApi = RuntimeApi, TJobs extends ParticipantJobsMetadata = ParticipantJobsMetadata> = {
255
+ /** Service-owned transaction object supplied by the configured runner. */
256
+ readonly tx: TTx;
257
+ /** Transaction-scoped typed event enqueue facade. */
258
+ readonly event: SqlOutboxEventEnqueueFacade<TEventApi>;
259
+ /** Transaction-scoped typed job enqueue facade. */
260
+ readonly job: SqlOutboxJobEnqueueFacade<TJobs>;
261
+ };
262
+ /** Startup-created SQL outbox dependency for transactional event/job enqueue. */
263
+ export type SqlOutbox<TTx, TEventApi extends RuntimeApi = RuntimeApi, TJobs extends ParticipantJobsMetadata = ParticipantJobsMetadata> = {
264
+ /**
265
+ * Runs service DB work and typed event/job enqueue operations in one SQL
266
+ * transaction, notifying the dispatcher once after a successful commit.
267
+ */
268
+ transaction<TResult>(work: (context: SqlOutboxTransactionContext<TTx, TEventApi, TJobs>) => Promise<TResult> | TResult): AsyncResult<TResult, ValidationError | UnexpectedError>;
269
+ /** Returns the durable queue-admission outcome once a job submission dispatches. */
270
+ jobSubmissionOutcome(submissionId: string): AsyncResult<OutboxJobDispatchOutcome | undefined, UnexpectedError>;
271
+ };
272
+ type SurfaceGroupName<T extends string> = T extends `${infer Head}.${string}` ? ConnectedActionName<Head> : ConnectedActionName<T>;
273
+ type SurfaceLeafName<T extends string> = T extends `${string}.${infer Tail}` ? ConnectedActionName<Tail> : ConnectedActionName<T>;
274
+ type SurfaceKeysForGroup<TKeys extends string, TGroup extends string> = TKeys extends string ? SurfaceGroupName<TKeys> extends TGroup ? TKeys : never : never;
275
+ type TypedServiceHandleFacade<TOwnedApi extends RuntimeApi, TTrellisApi extends RuntimeApi, TKv extends ParticipantKvMetadata, TJobs extends ParticipantJobsMetadata> = {
276
+ readonly rpc: {
277
+ readonly [TGroup in SurfaceGroupName<RpcMethodName<TOwnedApi>>]: {
278
+ readonly [M in SurfaceKeysForGroup<RpcMethodName<TOwnedApi>, TGroup> as SurfaceLeafName<M>]: (handler: RpcHandleFn<TOwnedApi, TTrellisApi, M, TKv, TJobs>) => Promise<void>;
279
+ };
280
+ };
281
+ readonly feed: {
282
+ readonly [TGroup in SurfaceGroupName<keyof TOwnedApi["feeds"] & string>]: {
283
+ readonly [F in SurfaceKeysForGroup<keyof TOwnedApi["feeds"] & string, TGroup> as SurfaceLeafName<F>]: (handler: FeedHandleFn<TOwnedApi, TTrellisApi, F, TKv, TJobs>) => Promise<void>;
284
+ };
285
+ };
286
+ readonly operation: {
287
+ readonly [TGroup in SurfaceGroupName<keyof TOwnedApi["operations"] & string>]: {
288
+ readonly [O in SurfaceKeysForGroup<keyof TOwnedApi["operations"] & string, TGroup> as SurfaceLeafName<O>]: OperationHandleFn<TOwnedApi, TTrellisApi, O, TKv, TJobs>;
289
+ };
290
+ };
291
+ };
292
+ type RpcHandleFn<TOwnedApi extends RuntimeApi, TTrellisApi extends RuntimeApi, M extends RpcMethodName<TOwnedApi>, TKv extends ParticipantKvMetadata, TJobs extends ParticipantJobsMetadata> = (args: {
293
+ input: RpcMethodInput<TOwnedApi, M>;
294
+ context: RpcHandlerContext;
295
+ client: Trellis<TTrellisApi, TKv, TJobs>;
296
+ }) => Promise<Result<RpcMethodOutput<TOwnedApi, M>, RpcHandlerErrorOf<TOwnedApi, M>>> | Result<RpcMethodOutput<TOwnedApi, M>, RpcHandlerErrorOf<TOwnedApi, M>>;
297
+ type FeedHandleFn<TOwnedApi extends RuntimeApi, TTrellisApi extends RuntimeApi, F extends keyof TOwnedApi["feeds"] & string, TKv extends ParticipantKvMetadata, TJobs extends ParticipantJobsMetadata> = (context: {
298
+ input: FeedInputOf<TOwnedApi, F>;
299
+ caller: unknown;
300
+ signal: AbortSignal;
301
+ emit(event: FeedEventOf<TOwnedApi, F>): AsyncResult<void, ValidationError | UnexpectedError>;
302
+ client: Trellis<TTrellisApi, TKv, TJobs>;
303
+ }) => unknown | Promise<unknown>;
304
+ type OperationHandleFn<TOwnedApi extends RuntimeApi, TTrellisApi extends RuntimeApi, O extends keyof TOwnedApi["operations"] & string, TKv extends ParticipantKvMetadata, TJobs extends ParticipantJobsMetadata> = (handler: (context: OperationHandlerContext<InferSchemaType<TOwnedApi["operations"][O]["input"]>, OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationTransferContextOf<TOwnedApi, O>, OperationHandlerErrorOf<TOwnedApi, O>, OperationUpdateOf<TOwnedApi, O>> & {
305
+ client: Trellis<TTrellisApi, TKv, TJobs>;
306
+ }) => unknown | Promise<unknown>) => Promise<void>;
307
+ export type OperationRegistration<TOwnedApi extends RuntimeApi, TTrellisApi extends RuntimeApi, O extends keyof TOwnedApi["operations"] & string, TKv extends ParticipantKvMetadata = ParticipantKvMetadata, TJobs extends ParticipantJobsMetadata = ParticipantJobsMetadata> = {
308
+ handle(handler: (args: OperationHandlerContext<InferSchemaType<TOwnedApi["operations"][O]["input"]>, OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationTransferContextOf<TOwnedApi, O>, OperationHandlerErrorOf<TOwnedApi, O>, OperationUpdateOf<TOwnedApi, O>> & {
309
+ client: Trellis<TTrellisApi, TKv, TJobs>;
310
+ }) => unknown | Promise<unknown>): Promise<void>;
311
+ };
312
+ export type FeedRegistration<TOwnedApi extends RuntimeApi, F extends keyof TOwnedApi["feeds"] & string> = RootFeedRegistration<FeedInputOf<TOwnedApi, F>, FeedEventOf<TOwnedApi, F>>;
313
+ export type TrellisServiceConnectArgs<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>> = {
314
+ trellisUrl: string;
315
+ participant: TContract;
316
+ name?: string;
317
+ /** Immutable provisioned service identity. */
318
+ seed: string;
319
+ /** Controls automatic telemetry initialization. Enabled by default. */
320
+ telemetry?: TrellisServiceConnectTelemetryOpts;
321
+ /** Configures the connected service runtime. */
322
+ runtime?: TrellisServiceRuntimeOpts;
323
+ };
324
+ /** Connected provider runtime inferred from a service contract. */
325
+ export type ConnectedTrellisService<TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>> = ProviderRuntime<TContract, TrellisServiceSession<ParticipantOwnedApi<TContract>, ParticipantTrellisApi<TContract>, ParticipantJobsOf<TContract>, ParticipantKvOf<TContract>>>;
326
+ /** Connected session implementation backing the public service type. */
327
+ export declare class TrellisServiceSession<TOwnedApi extends RuntimeApi = RuntimeApi, TTrellisApi extends RuntimeApi = TOwnedApi, TJobs extends ParticipantJobsMetadata = ParticipantJobsMetadata, TKv extends ParticipantKvMetadata = ParticipantKvMetadata> {
328
+ #private;
329
+ readonly name: string;
330
+ readonly auth: SessionAuth;
331
+ readonly [PROVIDER_CALLER]: ProviderCaller;
332
+ /** Event lifecycle surface for service startup listeners and publishers. */
333
+ readonly event: ActiveEventFacade<TTrellisApi>;
334
+ readonly kv: ServiceKvFacade<TKv>;
335
+ readonly store: Record<string, StoreHandle>;
336
+ readonly jobs: JobsFacadeOf<TJobs, TTrellisApi, TKv>;
337
+ readonly health: ServiceHealth;
338
+ readonly handle: TypedServiceHandleFacade<TOwnedApi, TTrellisApi, TKv, TJobs>;
339
+ /** Framework-neutral lifecycle handle for the service runtime connection. */
340
+ readonly connection: TrellisConnection;
341
+ private constructor();
342
+ /**
343
+ * Creates an explicit SQL outbox helper for service-owned transactions.
344
+ * Services should create this at startup and close over it in handlers.
345
+ */
346
+ createSqlOutbox<TTx>(options: TrellisServiceSqlOutboxExecutorOptions<TTx>): SqlOutbox<TTx, TTrellisApi, TJobs>;
347
+ /** Publishes a prepared event through the service runtime connection. */
348
+ publishPrepared(event: PreparedTrellisEvent): AsyncResult<void, UnexpectedError>;
349
+ /**
350
+ * Creates a short-lived receive transfer grant for a caller session.
351
+ */
352
+ createTransfer(args: {
353
+ direction: "receive";
354
+ store: string;
355
+ key: string;
356
+ sessionKey: string;
357
+ permission: PermissionAtom;
358
+ requiredCapabilities?: readonly string[];
359
+ inboxPrefix: string;
360
+ expiresInMs?: number;
361
+ }): AsyncResult<ReceiveTransferGrant, TransferError>;
362
+ static connect<const TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>>(args: TrellisServiceConnectArgs<TContract>): AsyncResult<ConnectedTrellisService<TContract>, TransportError | UnexpectedError>;
363
+ wait(): Promise<void>;
364
+ stop(): Promise<void>;
365
+ }
366
+ /** Public factory for connecting a descriptor-defined Trellis service. */
367
+ export declare class TrellisService {
368
+ private constructor();
369
+ /** Connects a service and returns its provider-only runtime facade. */
370
+ static connect<const TContract extends GeneratedServiceParticipant<RuntimeApi, RuntimeApi | undefined, ParticipantJobsMetadata, ParticipantKvMetadata>>(args: TrellisServiceConnectArgs<TContract>): AsyncResult<ConnectedTrellisService<TContract>, TransportError | UnexpectedError>;
371
+ }
372
+ export {};