@spine-event-engine/server 2.0.0-snapshot.25 → 2.0.0-snapshot.26

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 (150) hide show
  1. package/README.md +49 -9
  2. package/REFERENCE.md +339 -22
  3. package/dist/agent/agent-history.d.ts +19 -3
  4. package/dist/agent/agent-history.d.ts.map +1 -1
  5. package/dist/agent/agent-history.js +41 -10
  6. package/dist/agent/agent-history.js.map +1 -1
  7. package/dist/agent/agent-live-read-runtime.d.ts +12 -1
  8. package/dist/agent/agent-live-read-runtime.d.ts.map +1 -1
  9. package/dist/agent/agent-live-read-runtime.js +5 -4
  10. package/dist/agent/agent-live-read-runtime.js.map +1 -1
  11. package/dist/browser/browser-server.d.ts +163 -0
  12. package/dist/browser/browser-server.d.ts.map +1 -1
  13. package/dist/browser/browser-server.js +579 -188
  14. package/dist/browser/browser-server.js.map +1 -1
  15. package/dist/browser/durable-subscription-bindings.d.ts +5 -0
  16. package/dist/browser/durable-subscription-bindings.d.ts.map +1 -1
  17. package/dist/browser/durable-subscription-bindings.js +226 -38
  18. package/dist/browser/durable-subscription-bindings.js.map +1 -1
  19. package/dist/browser/options.d.ts +5 -0
  20. package/dist/browser/options.d.ts.map +1 -1
  21. package/dist/bus/command-bus.d.ts +3 -0
  22. package/dist/bus/command-bus.d.ts.map +1 -1
  23. package/dist/bus/command-bus.js +69 -9
  24. package/dist/bus/command-bus.js.map +1 -1
  25. package/dist/bus/command-errors.d.ts +20 -4
  26. package/dist/bus/command-errors.d.ts.map +1 -1
  27. package/dist/bus/command-errors.js +47 -7
  28. package/dist/bus/command-errors.js.map +1 -1
  29. package/dist/bus/event-bus.d.ts +3 -0
  30. package/dist/bus/event-bus.d.ts.map +1 -1
  31. package/dist/bus/event-bus.js +130 -8
  32. package/dist/bus/event-bus.js.map +1 -1
  33. package/dist/context/bounded-context.d.ts +29 -11
  34. package/dist/context/bounded-context.d.ts.map +1 -1
  35. package/dist/context/bounded-context.js +147 -186
  36. package/dist/context/bounded-context.js.map +1 -1
  37. package/dist/entity/entity.d.ts +59 -0
  38. package/dist/entity/entity.d.ts.map +1 -1
  39. package/dist/entity/entity.js +60 -0
  40. package/dist/entity/entity.js.map +1 -1
  41. package/dist/handler/app-query-handler.d.ts +60 -0
  42. package/dist/handler/app-query-handler.d.ts.map +1 -0
  43. package/dist/handler/app-query-handler.js +23 -0
  44. package/dist/handler/app-query-handler.js.map +1 -0
  45. package/dist/handler/generated-registry-discovery.d.ts +6 -0
  46. package/dist/handler/generated-registry-discovery.d.ts.map +1 -1
  47. package/dist/handler/generated-registry-discovery.js +71 -2
  48. package/dist/handler/generated-registry-discovery.js.map +1 -1
  49. package/dist/handler/handler-decorators.d.ts +8 -29
  50. package/dist/handler/handler-decorators.d.ts.map +1 -1
  51. package/dist/handler/handler-decorators.js +33 -210
  52. package/dist/handler/handler-decorators.js.map +1 -1
  53. package/dist/handler/spine-metadata-inventory.d.ts +99 -0
  54. package/dist/handler/spine-metadata-inventory.d.ts.map +1 -0
  55. package/dist/handler/spine-metadata-inventory.js +162 -0
  56. package/dist/handler/spine-metadata-inventory.js.map +1 -0
  57. package/dist/index.d.ts +5 -3
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -2
  60. package/dist/index.js.map +1 -1
  61. package/dist/repository/repository.d.ts +44 -1
  62. package/dist/repository/repository.d.ts.map +1 -1
  63. package/dist/repository/repository.js +368 -88
  64. package/dist/repository/repository.js.map +1 -1
  65. package/dist/server/managed-server-application.d.ts +12 -11
  66. package/dist/server/managed-server-application.d.ts.map +1 -1
  67. package/dist/server/managed-server-application.js +41 -25
  68. package/dist/server/managed-server-application.js.map +1 -1
  69. package/dist/server/node-coordinator.d.ts +18 -5
  70. package/dist/server/node-coordinator.d.ts.map +1 -1
  71. package/dist/server/node-coordinator.js +554 -84
  72. package/dist/server/node-coordinator.js.map +1 -1
  73. package/dist/server/reserved-spine-rpc-paths.json +1 -0
  74. package/dist/server/server-environment.d.ts +17 -0
  75. package/dist/server/server-environment.d.ts.map +1 -1
  76. package/dist/server/server-environment.js +77 -16
  77. package/dist/server/server-environment.js.map +1 -1
  78. package/dist/server/server.d.ts +45 -0
  79. package/dist/server/server.d.ts.map +1 -1
  80. package/dist/server/server.js +111 -3
  81. package/dist/server/server.js.map +1 -1
  82. package/dist/services/app-query-execution.d.ts +53 -0
  83. package/dist/services/app-query-execution.d.ts.map +1 -0
  84. package/dist/services/app-query-execution.js +408 -0
  85. package/dist/services/app-query-execution.js.map +1 -0
  86. package/dist/services/query-reader.d.ts +32 -7
  87. package/dist/services/query-reader.d.ts.map +1 -1
  88. package/dist/services/query-reader.js +22 -2
  89. package/dist/services/query-reader.js.map +1 -1
  90. package/dist/services/read-request-status.d.ts +65 -0
  91. package/dist/services/read-request-status.d.ts.map +1 -0
  92. package/dist/services/read-request-status.js +151 -0
  93. package/dist/services/read-request-status.js.map +1 -0
  94. package/dist/services/spine-services.d.ts +36 -7
  95. package/dist/services/spine-services.d.ts.map +1 -1
  96. package/dist/services/spine-services.js +900 -168
  97. package/dist/services/spine-services.js.map +1 -1
  98. package/dist/services/trusted-reader-ingress.d.ts +92 -0
  99. package/dist/services/trusted-reader-ingress.d.ts.map +1 -0
  100. package/dist/services/trusted-reader-ingress.js +89 -0
  101. package/dist/services/trusted-reader-ingress.js.map +1 -0
  102. package/dist/spi/handler-registry.d.ts +2 -0
  103. package/dist/spi/handler-registry.d.ts.map +1 -1
  104. package/dist/spi/handler-registry.js +1 -1
  105. package/dist/spi/handler-registry.js.map +1 -1
  106. package/dist/stand/read-side-filter-engine.d.ts +46 -0
  107. package/dist/stand/read-side-filter-engine.d.ts.map +1 -0
  108. package/dist/stand/read-side-filter-engine.js +356 -0
  109. package/dist/stand/read-side-filter-engine.js.map +1 -0
  110. package/dist/stand/read-side-filter.d.ts +247 -0
  111. package/dist/stand/read-side-filter.d.ts.map +1 -0
  112. package/dist/stand/read-side-filter.js +39 -0
  113. package/dist/stand/read-side-filter.js.map +1 -0
  114. package/dist/stand/read-side-message.d.ts +66 -0
  115. package/dist/stand/read-side-message.d.ts.map +1 -0
  116. package/dist/stand/read-side-message.js +167 -0
  117. package/dist/stand/read-side-message.js.map +1 -0
  118. package/dist/stand/stand-direct-delivery.d.ts +161 -0
  119. package/dist/stand/stand-direct-delivery.d.ts.map +1 -0
  120. package/dist/stand/stand-direct-delivery.js +210 -0
  121. package/dist/stand/stand-direct-delivery.js.map +1 -0
  122. package/dist/stand/stand.d.ts +80 -42
  123. package/dist/stand/stand.d.ts.map +1 -1
  124. package/dist/stand/stand.js +410 -54
  125. package/dist/stand/stand.js.map +1 -1
  126. package/dist/stand/subscription-observer.d.ts.map +1 -1
  127. package/dist/stand/subscription-observer.js +103 -0
  128. package/dist/stand/subscription-observer.js.map +1 -1
  129. package/dist/stand/subscription-read-filters.d.ts +40 -0
  130. package/dist/stand/subscription-read-filters.d.ts.map +1 -0
  131. package/dist/stand/subscription-read-filters.js +91 -0
  132. package/dist/stand/subscription-read-filters.js.map +1 -0
  133. package/dist/stand/subscription-reader-binding.d.ts +20 -0
  134. package/dist/stand/subscription-reader-binding.d.ts.map +1 -0
  135. package/dist/stand/subscription-reader-binding.js +56 -0
  136. package/dist/stand/subscription-reader-binding.js.map +1 -0
  137. package/dist/stand/subscription-records.d.ts +30 -3
  138. package/dist/stand/subscription-records.d.ts.map +1 -1
  139. package/dist/stand/subscription-records.js +61 -16
  140. package/dist/stand/subscription-records.js.map +1 -1
  141. package/dist/stand/subscription-registry.d.ts +49 -14
  142. package/dist/stand/subscription-registry.d.ts.map +1 -1
  143. package/dist/stand/subscription-registry.js +150 -31
  144. package/dist/stand/subscription-registry.js.map +1 -1
  145. package/dist/stand/subscription-runtime.d.ts +7 -2
  146. package/dist/stand/subscription-runtime.d.ts.map +1 -1
  147. package/dist/stand/subscription-runtime.js +131 -25
  148. package/dist/stand/subscription-runtime.js.map +1 -1
  149. package/dist/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +14 -14
@@ -0,0 +1,151 @@
1
+ /*
2
+ * Copyright 2026, CodeMatters. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
+ * in compliance with the License. You may obtain a copy of the License at
6
+ *
7
+ * https://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
10
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
+ * or implied. See the License for the specific language governing permissions and limitations under
12
+ * the License.
13
+ */
14
+ import { create, toBinary } from "@bufbuild/protobuf";
15
+ import { Code, ConnectError } from "@connectrpc/connect";
16
+ import { AnyPacker, ValidationException } from "@spine-event-engine/core";
17
+ import { ErrorSchema, ValidationErrorSchema } from "@spine-event-engine/proto";
18
+ import { QueryValidationError, SubscriptionValidationError, TopicValidationError, } from "@spine-event-engine/proto/client";
19
+ /**
20
+ * Maps read-side validation to native Spine Error trailers and Connect details.
21
+ */
22
+ export const ReadRequestStatus = {
23
+ /**
24
+ * Maps policy failures to sanitized transport codes without exposing private messages.
25
+ * @param error Policy, handler, or storage failure.
26
+ * @param message Public boundary failure message.
27
+ * @returns Sanitized recognized status or an internal error.
28
+ */
29
+ technical(error, message) {
30
+ const recognized = [
31
+ Code.Canceled,
32
+ Code.Unauthenticated,
33
+ Code.PermissionDenied,
34
+ Code.Unavailable,
35
+ ];
36
+ return new ConnectError(message, error instanceof ConnectError && recognized.includes(error.code) ? error.code : Code.Internal);
37
+ },
38
+ /**
39
+ * Creates a structured NotFound for a receiving context's missing membership.
40
+ *
41
+ * @param error Confirmed missing tenant from the target context.
42
+ * @returns Native and Connect status carrying the stable tenant type.
43
+ */
44
+ unknownTenant(error) {
45
+ const value = create(ErrorSchema, {
46
+ type: error.type,
47
+ code: Code.NotFound,
48
+ message: error.message,
49
+ });
50
+ const metadata = new Headers({
51
+ "spine-error-bin": Buffer.from(toBinary(ErrorSchema, value)).toString("base64"),
52
+ });
53
+ return new ConnectError(error.message, Code.NotFound, metadata, [{ desc: ErrorSchema, value }], error);
54
+ },
55
+ /**
56
+ * Creates the status for a well-formed activation without a registry record.
57
+ *
58
+ * @returns A structured NotFound status for direct and managed clients.
59
+ */
60
+ unknownSubscription() {
61
+ const message = "Subscription is unknown to this server.";
62
+ const value = create(ErrorSchema, {
63
+ type: "spine.client.SubscriptionValidationError",
64
+ code: SubscriptionValidationError.UNKNOWN_SUBSCRIPTION,
65
+ message,
66
+ });
67
+ const metadata = new Headers({
68
+ "spine-error-bin": Buffer.from(toBinary(ErrorSchema, value)).toString("base64"),
69
+ });
70
+ return new ConnectError(message, Code.NotFound, metadata, [{ desc: ErrorSchema, value }]);
71
+ },
72
+ /**
73
+ * Validates a complete request and sanitizes unexpected validator failures.
74
+ *
75
+ * @param kind The public request kind.
76
+ * @param validate Performs declared Protobuf validation.
77
+ */
78
+ check(kind, validate) {
79
+ try {
80
+ validate();
81
+ }
82
+ catch (error) {
83
+ if (error instanceof ValidationException) {
84
+ throw ReadRequestStatus.invalid(kind, false, `${kind} validation failed.`, AnyPacker.pack(ValidationErrorSchema, error.asMessage()));
85
+ }
86
+ throw new ConnectError("Read request validation failed.", Code.Internal);
87
+ }
88
+ },
89
+ /**
90
+ * Rejects unusable Topic criteria in lifecycle requests before record access.
91
+ *
92
+ * @param subscription Validated activation or cancellation request.
93
+ */
94
+ checkLifecycleCriterion(subscription) {
95
+ const criterion = subscription.topic?.target?.criterion;
96
+ if (criterion?.case === "includeAll" && criterion.value)
97
+ return;
98
+ if (criterion?.case === "filters") {
99
+ const filters = criterion.value;
100
+ if ((filters.idFilter?.id.length ?? 0) > 0 || filters.filter.length > 0)
101
+ return;
102
+ throw ReadRequestStatus.invalid("subscription", false, "Subscription requires an ID filter or field filter.");
103
+ }
104
+ throw ReadRequestStatus.invalid("subscription", false, "Subscription requires filters or include_all = true.");
105
+ },
106
+ /**
107
+ * Maps tenant admission to a distinct structured status.
108
+ *
109
+ * @param type Existing tenant failure type.
110
+ * @param message Safe tenant explanation.
111
+ * @returns A structured InvalidArgument status.
112
+ */
113
+ tenant(type, message) {
114
+ const value = create(ErrorSchema, { type, code: Code.InvalidArgument, message });
115
+ const metadata = new Headers({
116
+ "spine-error-bin": Buffer.from(toBinary(ErrorSchema, value)).toString("base64"),
117
+ });
118
+ return new ConnectError(message, Code.InvalidArgument, metadata, [
119
+ { desc: ErrorSchema, value },
120
+ ]);
121
+ },
122
+ /**
123
+ * Creates an InvalidArgument status with an enum-qualified Spine Error.
124
+ *
125
+ * @param kind The invalid read-side request.
126
+ * @param unsupported Whether its target is not registered.
127
+ * @param message Safe public explanation.
128
+ * @param details Declared constraint violations, when available.
129
+ * @returns A transport error carrying native and Connect structured details.
130
+ */
131
+ invalid(kind, unsupported, message, details) {
132
+ const type = `spine.client.${kind.charAt(0).toUpperCase()}${kind.slice(1)}ValidationError`;
133
+ const code = unsupported
134
+ ? kind === "query"
135
+ ? QueryValidationError.UNSUPPORTED_QUERY_TARGET
136
+ : TopicValidationError.UNSUPPORTED_TOPIC_TARGET
137
+ : kind === "query"
138
+ ? QueryValidationError.INVALID_QUERY
139
+ : kind === "topic"
140
+ ? TopicValidationError.INVALID_TOPIC
141
+ : SubscriptionValidationError.INVALID_SUBSCRIPTION;
142
+ const value = create(ErrorSchema, { type, code, message, details });
143
+ const metadata = new Headers({
144
+ "spine-error-bin": Buffer.from(toBinary(ErrorSchema, value)).toString("base64"),
145
+ });
146
+ return new ConnectError(message, Code.InvalidArgument, metadata, [
147
+ { desc: ErrorSchema, value },
148
+ ]);
149
+ },
150
+ };
151
+ //# sourceMappingURL=read-request-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-request-status.js","sourceRoot":"","sources":["../../src/services/read-request-status.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,28 @@
1
1
  import type { ILogLayer } from "loglayer";
2
- import { type ConnectRouter } from "@connectrpc/connect";
2
+ import { type ConnectRouter, type HandlerContext } from "@connectrpc/connect";
3
+ import type { ReaderProofVerifier } from "@spine-event-engine/core/spi/reader-forwarding";
3
4
  import { BoundedContext } from "../context/bounded-context.js";
5
+ import { AppQueryExecution } from "./app-query-execution.js";
6
+ import { type DirectReaderAuthenticator } from "./trusted-reader-ingress.js";
7
+ import { ReadSideFilterEngine } from "../stand/read-side-filter-engine.js";
8
+ /**
9
+ * Framework-only hooks for installing service read policies and App Query routing.
10
+ */
4
11
  interface SpineServicesAccess {
12
+ /**
13
+ * Attaches one Server's gRPC read policy before accepting requests.
14
+ *
15
+ * @param services Prepared service adapter.
16
+ * @param filters Registered policy engine.
17
+ */
18
+ installReadFilters(services: SpineServices, filters: ReadSideFilterEngine): void;
19
+ /**
20
+ * Attaches the Server-selected App Query capability before listener binding.
21
+ *
22
+ * @param services Adapter created for this Server.
23
+ * @param queries Exact-class handler table prepared by the Server.
24
+ */
25
+ installAppQueries(services: SpineServices, queries: AppQueryExecution): void;
5
26
  /**
6
27
  * Sets the server logger for service diagnostics.
7
28
  *
@@ -32,7 +53,8 @@ interface SpineServicesAccess {
32
53
  * Queries allow at most 100 IDs, 16 simple filters, 8 composites, and 8 orderings.
33
54
  * Use proto column names such as `open_task_count`, not generated TS local names
34
55
  * such as `openTaskCount`. Invalid columns, values, operators, and query shapes
35
- * return stable `INVALID_QUERY` responses before Stand storage is read.
56
+ * reject with structured `INVALID_ARGUMENT` and `INVALID_QUERY` details before
57
+ * Stand storage is read.
36
58
  *
37
59
  * `SubscriptionService.Subscribe` accepts known state targets with
38
60
  * `include_all` or validated ID/field filters and known event targets exposed
@@ -48,7 +70,9 @@ interface SpineServicesAccess {
48
70
  * rejected-command payload forms and stack trace from their client-facing
49
71
  * context.
50
72
  * Application code remains on generated domain event messages through handler
51
- * dispatch. Unknown or duplicate activation IDs complete without updates.
73
+ * dispatch. Unknown or expired activation IDs fail with `NOT_FOUND` and
74
+ * `UNKNOWN_SUBSCRIPTION` details. A duplicate active activation completes
75
+ * without another update stream.
52
76
  * Cancellation of unknown or already-cleaned IDs returns OK after admission to
53
77
  * the bounded unknown-removal pool.
54
78
  */
@@ -83,11 +107,16 @@ export interface SpineServicesOptions {
83
107
  */
84
108
  readonly contexts: readonly BoundedContext[];
85
109
  /**
86
- * Maximum queued updates per active subscription before delivery is closed.
87
- *
88
- * Defaults to 100. Non-positive or non-finite values are coerced to 1.
110
+ * Existing native request-size bound used for internal reader assertions.
111
+ */
112
+ readonly readMaxBytes?: number;
113
+ /**
114
+ * Configured direct and trusted-peer authentication ports.
89
115
  */
90
- readonly queueLimit?: number;
116
+ readonly readerAdmission?: Readonly<{
117
+ forwarded?: ReaderProofVerifier<HandlerContext>;
118
+ direct?: DirectReaderAuthenticator<HandlerContext>;
119
+ }>;
91
120
  /**
92
121
  * Maximum concurrent unknown-ID cancellation operations for this
93
122
  * `SpineServices` instance.
@@ -1 +1 @@
1
- {"version":3,"file":"spine-services.d.ts","sourceRoot":"","sources":["../../src/services/spine-services.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAyE7E,OAAO,EAAE,cAAc,EAAwB,MAAM,+BAA+B,CAAC;AAerF,UAAU,mBAAmB;IAC3B;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAEhE;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,aAAa;;IAqBxB;;;;OAIG;gBACS,OAAO,EAAE,oBAAoB;IA4DzC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;CAqhB/C;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,mBAyBhC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAGnC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAE7C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC"}
1
+ {"version":3,"file":"spine-services.d.ts","sourceRoot":"","sources":["../../src/services/spine-services.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUlG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAgF1F,OAAO,EAAE,cAAc,EAAwB,MAAM,+BAA+B,CAAC;AAOrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAwB,KAAK,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AASnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAY3E;;GAEG;AACH,UAAU,mBAAmB;IAC3B;;;;;OAKG;IACH,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAEjF;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAE7E;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAEhE;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,aAAa;;IAyBxB;;;;OAIG;gBACS,OAAO,EAAE,oBAAoB;IA4DzC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;CAg9B/C;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,mBA+ChC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAGnC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC;QAClC,SAAS,CAAC,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,yBAAyB,CAAC,cAAc,CAAC,CAAC;KACpD,CAAC,CAAC;IAEH;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC"}