@empire-builder-kit/runtime 1.0.0-beta.9 → 1.0.0-rc.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 (218) hide show
  1. package/NOTICE +6 -0
  2. package/package.json +94 -4
  3. package/src/api-contract/artifacts.d.ts +67 -0
  4. package/src/api-contract/artifacts.js +349 -0
  5. package/src/api-contract/artifacts.js.map +1 -0
  6. package/src/api-contract/client.d.ts +79 -0
  7. package/src/api-contract/client.js +561 -0
  8. package/src/api-contract/client.js.map +1 -0
  9. package/src/api-contract/errors.d.ts +7 -0
  10. package/src/api-contract/errors.js +11 -0
  11. package/src/api-contract/errors.js.map +1 -0
  12. package/src/api-contract/index.d.ts +9 -0
  13. package/src/api-contract/index.js +10 -0
  14. package/src/api-contract/index.js.map +1 -0
  15. package/src/api-contract/operation.d.ts +118 -0
  16. package/src/api-contract/operation.js +609 -0
  17. package/src/api-contract/operation.js.map +1 -0
  18. package/src/api-contract/schema.d.ts +81 -0
  19. package/src/api-contract/schema.js +313 -0
  20. package/src/api-contract/schema.js.map +1 -0
  21. package/src/api-contract/server.d.ts +77 -0
  22. package/src/api-contract/server.js +466 -0
  23. package/src/api-contract/server.js.map +1 -0
  24. package/src/async-work/contract.d.ts +17 -0
  25. package/src/async-work/contract.js +105 -0
  26. package/src/async-work/contract.js.map +1 -0
  27. package/src/async-work/idempotency.d.ts +123 -0
  28. package/src/async-work/idempotency.js +167 -0
  29. package/src/async-work/idempotency.js.map +1 -0
  30. package/src/async-work/index.d.ts +8 -0
  31. package/src/async-work/index.js +9 -0
  32. package/src/async-work/index.js.map +1 -0
  33. package/src/async-work/provider.d.ts +90 -0
  34. package/src/async-work/provider.js +155 -0
  35. package/src/async-work/provider.js.map +1 -0
  36. package/src/async-work/recovery.d.ts +103 -0
  37. package/src/async-work/recovery.js +291 -0
  38. package/src/async-work/recovery.js.map +1 -0
  39. package/src/async-work/schedule.d.ts +117 -0
  40. package/src/async-work/schedule.js +279 -0
  41. package/src/async-work/schedule.js.map +1 -0
  42. package/src/async-work/sqs.d.ts +133 -0
  43. package/src/async-work/sqs.js +280 -0
  44. package/src/async-work/sqs.js.map +1 -0
  45. package/src/async-work/webhook.d.ts +60 -0
  46. package/src/async-work/webhook.js +178 -0
  47. package/src/async-work/webhook.js.map +1 -0
  48. package/src/async-work/workflow.d.ts +98 -0
  49. package/src/async-work/workflow.js +225 -0
  50. package/src/async-work/workflow.js.map +1 -0
  51. package/src/auth-backend.d.ts +12 -2
  52. package/src/auth-backend.js +30 -18
  53. package/src/auth-backend.js.map +1 -1
  54. package/src/authorization/admission.d.ts +30 -0
  55. package/src/authorization/admission.js +87 -0
  56. package/src/authorization/admission.js.map +1 -0
  57. package/src/authorization/approval.d.ts +99 -0
  58. package/src/authorization/approval.js +249 -0
  59. package/src/authorization/approval.js.map +1 -0
  60. package/src/authorization/audit.d.ts +35 -0
  61. package/src/authorization/audit.js +35 -0
  62. package/src/authorization/audit.js.map +1 -0
  63. package/src/authorization/delegation.d.ts +149 -0
  64. package/src/authorization/delegation.js +401 -0
  65. package/src/authorization/delegation.js.map +1 -0
  66. package/src/authorization/errors.d.ts +32 -0
  67. package/src/authorization/errors.js +153 -0
  68. package/src/authorization/errors.js.map +1 -0
  69. package/src/authorization/evaluator.d.ts +39 -0
  70. package/src/authorization/evaluator.js +199 -0
  71. package/src/authorization/evaluator.js.map +1 -0
  72. package/src/authorization/index.d.ts +14 -0
  73. package/src/authorization/index.js +15 -0
  74. package/src/authorization/index.js.map +1 -0
  75. package/src/authorization/machine-token.d.ts +87 -0
  76. package/src/authorization/machine-token.js +201 -0
  77. package/src/authorization/machine-token.js.map +1 -0
  78. package/src/authorization/machine.d.ts +32 -0
  79. package/src/authorization/machine.js +41 -0
  80. package/src/authorization/machine.js.map +1 -0
  81. package/src/authorization/model.d.ts +112 -0
  82. package/src/authorization/model.js +112 -0
  83. package/src/authorization/model.js.map +1 -0
  84. package/src/canonical-json.cjs +157 -0
  85. package/src/canonical-json.d.cts +26 -0
  86. package/src/canonical-json.d.ts +18 -0
  87. package/src/canonical-json.js +125 -0
  88. package/src/canonical-json.js.map +1 -0
  89. package/src/configuration/contract.d.ts +107 -0
  90. package/src/configuration/contract.js +461 -0
  91. package/src/configuration/contract.js.map +1 -0
  92. package/src/configuration/index.d.ts +3 -0
  93. package/src/configuration/index.js +4 -0
  94. package/src/configuration/index.js.map +1 -0
  95. package/src/configuration/provider.d.ts +59 -0
  96. package/src/configuration/provider.js +198 -0
  97. package/src/configuration/provider.js.map +1 -0
  98. package/src/configuration/rollout-evaluator.cjs +54 -0
  99. package/src/configuration/rollout-evaluator.d.cts +26 -0
  100. package/src/configuration/rollout-evaluator.d.ts +18 -0
  101. package/src/configuration/rollout-evaluator.js +38 -0
  102. package/src/configuration/rollout-evaluator.js.map +1 -0
  103. package/src/configuration/rollout-key.cjs +38 -0
  104. package/src/configuration/rollout-key.d.cts +14 -0
  105. package/src/configuration/rollout-key.d.ts +10 -0
  106. package/src/configuration/rollout-key.js +26 -0
  107. package/src/configuration/rollout-key.js.map +1 -0
  108. package/src/configuration/rollout.d.ts +60 -0
  109. package/src/configuration/rollout.js +42 -0
  110. package/src/configuration/rollout.js.map +1 -0
  111. package/src/data-lifecycle/contract.d.ts +33 -0
  112. package/src/data-lifecycle/contract.js +118 -0
  113. package/src/data-lifecycle/contract.js.map +1 -0
  114. package/src/data-lifecycle/event.d.ts +28 -0
  115. package/src/data-lifecycle/event.js +76 -0
  116. package/src/data-lifecycle/event.js.map +1 -0
  117. package/src/data-lifecycle/evidence.d.ts +65 -0
  118. package/src/data-lifecycle/evidence.js +162 -0
  119. package/src/data-lifecycle/evidence.js.map +1 -0
  120. package/src/data-lifecycle/holds.d.ts +29 -0
  121. package/src/data-lifecycle/holds.js +124 -0
  122. package/src/data-lifecycle/holds.js.map +1 -0
  123. package/src/data-lifecycle/index.d.ts +8 -0
  124. package/src/data-lifecycle/index.js +9 -0
  125. package/src/data-lifecycle/index.js.map +1 -0
  126. package/src/data-lifecycle/policy.d.ts +16 -0
  127. package/src/data-lifecycle/policy.js +79 -0
  128. package/src/data-lifecycle/policy.js.map +1 -0
  129. package/src/data-lifecycle/restore.d.ts +90 -0
  130. package/src/data-lifecycle/restore.js +336 -0
  131. package/src/data-lifecycle/restore.js.map +1 -0
  132. package/src/data-lifecycle/retention.d.ts +57 -0
  133. package/src/data-lifecycle/retention.js +232 -0
  134. package/src/data-lifecycle/retention.js.map +1 -0
  135. package/src/data-lifecycle/rights.d.ts +171 -0
  136. package/src/data-lifecycle/rights.js +533 -0
  137. package/src/data-lifecycle/rights.js.map +1 -0
  138. package/src/database.d.ts +36 -0
  139. package/src/database.js +119 -0
  140. package/src/database.js.map +1 -0
  141. package/src/deterministic-order.cjs +16 -0
  142. package/src/deterministic-order.d.cts +9 -0
  143. package/src/deterministic-order.d.ts +7 -0
  144. package/src/deterministic-order.js +10 -0
  145. package/src/deterministic-order.js.map +1 -0
  146. package/src/events.d.ts +28 -19
  147. package/src/events.js +171 -66
  148. package/src/events.js.map +1 -1
  149. package/src/index.d.ts +7 -1
  150. package/src/index.js +24 -0
  151. package/src/index.js.map +1 -1
  152. package/src/lambda.d.ts +8 -2
  153. package/src/lambda.js +100 -39
  154. package/src/lambda.js.map +1 -1
  155. package/src/logging.d.ts +95 -36
  156. package/src/logging.js +460 -62
  157. package/src/logging.js.map +1 -1
  158. package/src/observability.d.ts +80 -18
  159. package/src/observability.js +252 -61
  160. package/src/observability.js.map +1 -1
  161. package/src/performance/index.d.ts +1 -0
  162. package/src/performance/index.js +2 -0
  163. package/src/performance/index.js.map +1 -0
  164. package/src/performance/protected-load-endpoint.d.ts +140 -0
  165. package/src/performance/protected-load-endpoint.js +462 -0
  166. package/src/performance/protected-load-endpoint.js.map +1 -0
  167. package/src/rds-global-ca-bundle.d.ts +1 -0
  168. package/src/rds-global-ca-bundle.js +2742 -0
  169. package/src/rds-global-ca-bundle.js.map +1 -0
  170. package/src/reliability/burn.d.ts +39 -0
  171. package/src/reliability/burn.js +102 -0
  172. package/src/reliability/burn.js.map +1 -0
  173. package/src/reliability/contract.d.ts +5 -0
  174. package/src/reliability/contract.js +317 -0
  175. package/src/reliability/contract.js.map +1 -0
  176. package/src/reliability/incident.d.ts +16 -0
  177. package/src/reliability/incident.js +562 -0
  178. package/src/reliability/incident.js.map +1 -0
  179. package/src/reliability/index.d.ts +5 -0
  180. package/src/reliability/index.js +6 -0
  181. package/src/reliability/index.js.map +1 -0
  182. package/src/reliability/model.d.ts +191 -0
  183. package/src/reliability/model.fixtures.d.ts +2 -0
  184. package/src/reliability/model.fixtures.js +57 -0
  185. package/src/reliability/model.fixtures.js.map +1 -0
  186. package/src/reliability/model.js +2 -0
  187. package/src/reliability/model.js.map +1 -0
  188. package/src/reliability/slo.d.ts +9 -0
  189. package/src/reliability/slo.js +74 -0
  190. package/src/reliability/slo.js.map +1 -0
  191. package/src/request-context.d.ts +57 -15
  192. package/src/request-context.js +116 -36
  193. package/src/request-context.js.map +1 -1
  194. package/src/safe-reference.cjs +57 -0
  195. package/src/safe-reference.d.cts +25 -0
  196. package/src/safe-reference.d.ts +11 -0
  197. package/src/safe-reference.js +46 -0
  198. package/src/safe-reference.js.map +1 -0
  199. package/src/secrets/contract.d.ts +99 -0
  200. package/src/secrets/contract.js +238 -0
  201. package/src/secrets/contract.js.map +1 -0
  202. package/src/secrets/index.d.ts +4 -0
  203. package/src/secrets/index.js +5 -0
  204. package/src/secrets/index.js.map +1 -0
  205. package/src/secrets/observability.d.ts +14 -0
  206. package/src/secrets/observability.js +100 -0
  207. package/src/secrets/observability.js.map +1 -0
  208. package/src/secrets/personal.d.ts +48 -0
  209. package/src/secrets/personal.js +332 -0
  210. package/src/secrets/personal.js.map +1 -0
  211. package/src/secrets/resolver.d.ts +125 -0
  212. package/src/secrets/resolver.js +602 -0
  213. package/src/secrets/resolver.js.map +1 -0
  214. package/src/secrets/sensitive-patterns.cjs +84 -0
  215. package/src/secrets/sensitive-patterns.d.cts +62 -0
  216. package/src/secrets/sensitive-patterns.d.ts +40 -0
  217. package/src/secrets/sensitive-patterns.js +60 -0
  218. package/src/secrets/sensitive-patterns.js.map +1 -0
@@ -0,0 +1,112 @@
1
+ import type { AuthSessionSubject, Principal, PrincipalKind } from '../auth.js';
2
+ import type { RequestActor } from '../request-context.js';
3
+ export declare const AUTHORIZATION_AUTHORITY_MODES: readonly ["direct", "delegated", "machine"];
4
+ export type AuthorizationAuthorityMode = (typeof AUTHORIZATION_AUTHORITY_MODES)[number];
5
+ export interface DirectAuthorizationAuthority {
6
+ mode: 'direct';
7
+ }
8
+ export interface MachineAuthorizationAuthority {
9
+ machineIdentityId: string;
10
+ mode: 'machine';
11
+ }
12
+ export interface DelegatedAuthorizationAuthority {
13
+ delegatedBy: {
14
+ id: string;
15
+ type: 'user';
16
+ };
17
+ delegationId: string;
18
+ mode: 'delegated';
19
+ }
20
+ export type AuthorizationAuthority = DelegatedAuthorizationAuthority | DirectAuthorizationAuthority | MachineAuthorizationAuthority;
21
+ export interface AuthorizationPrincipal {
22
+ /**
23
+ * Request provenance uses the already shipped RequestActor taxonomy.
24
+ * `id` is required here because an authorization principal is authenticated.
25
+ */
26
+ actor: RequestActor & {
27
+ id: string;
28
+ };
29
+ audience?: string;
30
+ authority: AuthorizationAuthority;
31
+ /**
32
+ * Coarse classification uses the already shipped PrincipalKind union. This
33
+ * module deliberately does not introduce another role or principal enum.
34
+ */
35
+ kind: PrincipalKind;
36
+ roles: readonly string[];
37
+ scopes: readonly string[];
38
+ /**
39
+ * The allowlisted authenticated subject projection. Raw token claims never
40
+ * become policy input through this contract.
41
+ */
42
+ subject: AuthSessionSubject;
43
+ }
44
+ export interface AuthorizationResource<Type extends string = string, Attributes = Readonly<Record<string, unknown>>> {
45
+ attributes: Attributes;
46
+ /**
47
+ * A Slice-owned safe identifier. Callers should omit it for a collection.
48
+ */
49
+ id?: string;
50
+ type: Type;
51
+ }
52
+ export interface AuthorizationContext<Facts = Readonly<Record<string, unknown>>> {
53
+ facts: Facts;
54
+ /**
55
+ * The decision clock is explicit so policy tests stay deterministic.
56
+ */
57
+ now: string;
58
+ stage: string;
59
+ }
60
+ export interface AuthorizationInput<Action extends string = string, Resource extends AuthorizationResource = AuthorizationResource, Context extends AuthorizationContext = AuthorizationContext, AuthorizationPrincipalType extends AuthorizationPrincipal = AuthorizationPrincipal> {
61
+ action: Action;
62
+ context: Context;
63
+ principal: AuthorizationPrincipalType;
64
+ resource: Resource;
65
+ }
66
+ export declare const AUTHORIZATION_DENIAL_CATEGORIES: readonly ["authentication-missing", "authentication-invalid", "admission-kind-denied", "admission-role-denied", "admission-scope-denied", "domain-authorization-denied", "delegation-expired", "delegation-revoked", "delegation-out-of-bounds", "delegation-rate-limited", "approval-required", "approval-pending", "approval-expired", "approval-invalid", "authorization-unavailable", "policy-stale", "policy-input-invalid"];
67
+ export type AuthorizationDenialCategory = (typeof AUTHORIZATION_DENIAL_CATEGORIES)[number];
68
+ export interface AuthorizationObligation {
69
+ kind: string;
70
+ reference?: string;
71
+ }
72
+ export interface AuthorizationAllowDecision<Obligation extends AuthorizationObligation = AuthorizationObligation> {
73
+ decision: 'allow';
74
+ obligations: readonly Obligation[];
75
+ policyVersion: string;
76
+ }
77
+ export interface AuthorizationDenyDecision {
78
+ category: AuthorizationDenialCategory;
79
+ decision: 'deny';
80
+ obligations: readonly [];
81
+ policyVersion: string;
82
+ }
83
+ export type AuthorizationDecision<Obligation extends AuthorizationObligation = AuthorizationObligation> = AuthorizationAllowDecision<Obligation> | AuthorizationDenyDecision;
84
+ export interface AuthorizationPolicyAllow<Obligation extends AuthorizationObligation = AuthorizationObligation> {
85
+ decision: 'allow';
86
+ obligations?: readonly Obligation[];
87
+ }
88
+ export interface AuthorizationPolicyDeny {
89
+ decision: 'deny';
90
+ }
91
+ export type AuthorizationPolicyResult<Obligation extends AuthorizationObligation = AuthorizationObligation> = AuthorizationPolicyAllow<Obligation> | AuthorizationPolicyDeny;
92
+ export interface AuthorizationPolicy<Input extends AuthorizationInput = AuthorizationInput, Obligation extends AuthorizationObligation = AuthorizationObligation> {
93
+ evaluate(input: Input): AuthorizationPolicyResult<Obligation> | Promise<AuthorizationPolicyResult<Obligation>>;
94
+ version: string;
95
+ }
96
+ export declare function allowAuthorization<Obligation extends AuthorizationObligation = AuthorizationObligation>(policyVersion: string, obligations?: readonly Obligation[]): AuthorizationAllowDecision<Obligation>;
97
+ export declare function denyAuthorization(category: AuthorizationDenialCategory, policyVersion: string): AuthorizationDenyDecision;
98
+ /**
99
+ * Composes the existing Principal, AuthSessionSubject, and RequestActor
100
+ * dimensions into the domain-policy principal. Authority mode is explicit;
101
+ * callers cannot infer delegation or machine authority from an unverified
102
+ * request field.
103
+ */
104
+ export declare function composeAuthorizationPrincipal(principal: Principal, authority: AuthorizationAuthority): AuthorizationPrincipal;
105
+ export declare function createDirectAuthorizationPrincipal(principal: Principal): AuthorizationPrincipal;
106
+ /**
107
+ * Composes an authorization model value only. This helper does not validate a
108
+ * grant, capability, audience, policy, expiry, revocation, or use limit and
109
+ * therefore must never authorize a protected effect. Runtime callers obtain a
110
+ * validated delegated principal from `useDelegation` instead.
111
+ */
112
+ export declare function composeDelegatedAuthorizationPrincipalModel(principal: AuthorizationPrincipal, input: Omit<DelegatedAuthorizationAuthority, 'mode'>): AuthorizationPrincipal;
@@ -0,0 +1,112 @@
1
+ export const AUTHORIZATION_AUTHORITY_MODES = [
2
+ 'direct',
3
+ 'delegated',
4
+ 'machine',
5
+ ];
6
+ export const AUTHORIZATION_DENIAL_CATEGORIES = [
7
+ 'authentication-missing',
8
+ 'authentication-invalid',
9
+ 'admission-kind-denied',
10
+ 'admission-role-denied',
11
+ 'admission-scope-denied',
12
+ 'domain-authorization-denied',
13
+ 'delegation-expired',
14
+ 'delegation-revoked',
15
+ 'delegation-out-of-bounds',
16
+ 'delegation-rate-limited',
17
+ 'approval-required',
18
+ 'approval-pending',
19
+ 'approval-expired',
20
+ 'approval-invalid',
21
+ 'authorization-unavailable',
22
+ 'policy-stale',
23
+ 'policy-input-invalid',
24
+ ];
25
+ export function allowAuthorization(policyVersion, obligations = []) {
26
+ return {
27
+ decision: 'allow',
28
+ obligations: [...obligations],
29
+ policyVersion,
30
+ };
31
+ }
32
+ export function denyAuthorization(category, policyVersion) {
33
+ return {
34
+ category,
35
+ decision: 'deny',
36
+ obligations: [],
37
+ policyVersion,
38
+ };
39
+ }
40
+ function requiredText(value, label) {
41
+ const normalized = value.trim();
42
+ if (!normalized || normalized.length > 256 || /[\r\n]/.test(normalized)) {
43
+ throw new Error(`[runtime/authorization] ${label} must be a non-empty bounded value.`);
44
+ }
45
+ return normalized;
46
+ }
47
+ function cloneSubject(subject) {
48
+ return Object.assign(Object.assign({}, subject), { id: requiredText(subject.id, 'subject id'), permissions: subject.permissions ? [...subject.permissions] : undefined, roles: subject.roles ? [...subject.roles] : undefined });
49
+ }
50
+ /**
51
+ * Composes the existing Principal, AuthSessionSubject, and RequestActor
52
+ * dimensions into the domain-policy principal. Authority mode is explicit;
53
+ * callers cannot infer delegation or machine authority from an unverified
54
+ * request field.
55
+ */
56
+ export function composeAuthorizationPrincipal(principal, authority) {
57
+ const subject = cloneSubject(principal.session.subject);
58
+ if (subject.id !== principal.id) {
59
+ throw new Error('[runtime/authorization] Principal and authenticated subject ids must match.');
60
+ }
61
+ if (authority.mode === 'direct' && subject.type !== 'user') {
62
+ throw new Error('[runtime/authorization] Direct authority requires an authenticated user subject.');
63
+ }
64
+ if (authority.mode === 'machine' && subject.type !== 'service') {
65
+ throw new Error('[runtime/authorization] Machine authority requires an authenticated service subject.');
66
+ }
67
+ if (authority.mode === 'delegated') {
68
+ if (principal.kind !== 'agent') {
69
+ throw new Error('[runtime/authorization] Delegated authority requires PrincipalKind agent.');
70
+ }
71
+ requiredText(authority.delegationId, 'delegation id');
72
+ requiredText(authority.delegatedBy.id, 'delegating subject id');
73
+ }
74
+ const normalizedAuthority = authority.mode === 'machine'
75
+ ? {
76
+ machineIdentityId: requiredText(authority.machineIdentityId, 'machine identity id'),
77
+ mode: 'machine',
78
+ }
79
+ : authority.mode === 'delegated'
80
+ ? {
81
+ delegatedBy: {
82
+ id: requiredText(authority.delegatedBy.id, 'delegating subject id'),
83
+ type: 'user',
84
+ },
85
+ delegationId: requiredText(authority.delegationId, 'delegation id'),
86
+ mode: 'delegated',
87
+ }
88
+ : { mode: 'direct' };
89
+ return Object.freeze(Object.assign(Object.assign({ actor: Object.freeze({ id: subject.id, type: subject.type }) }, (principal.audience ? { audience: principal.audience } : {})), { authority: Object.freeze(normalizedAuthority), kind: principal.kind, roles: Object.freeze([...principal.roles]), scopes: Object.freeze([...principal.scopes]), subject: Object.freeze(subject) }));
90
+ }
91
+ export function createDirectAuthorizationPrincipal(principal) {
92
+ return composeAuthorizationPrincipal(principal, { mode: 'direct' });
93
+ }
94
+ /**
95
+ * Composes an authorization model value only. This helper does not validate a
96
+ * grant, capability, audience, policy, expiry, revocation, or use limit and
97
+ * therefore must never authorize a protected effect. Runtime callers obtain a
98
+ * validated delegated principal from `useDelegation` instead.
99
+ */
100
+ export function composeDelegatedAuthorizationPrincipalModel(principal, input) {
101
+ if (principal.kind !== 'agent') {
102
+ throw new Error('[runtime/authorization] Delegated authority requires PrincipalKind agent.');
103
+ }
104
+ const delegationId = requiredText(input.delegationId, 'delegation id');
105
+ const delegatedById = requiredText(input.delegatedBy.id, 'delegating subject id');
106
+ return Object.freeze(Object.assign(Object.assign({}, principal), { authority: Object.freeze({
107
+ delegatedBy: { id: delegatedById, type: 'user' },
108
+ delegationId,
109
+ mode: 'delegated',
110
+ }) }));
111
+ }
112
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/authorization/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ // @generated from packages/runtime/src/canonical-json.ts by tools/runtime/generate-shared-authorities.mjs
2
+ // Do not edit this artifact directly.
3
+ 'use strict';
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+ exports.CanonicalJsonError = void 0;
6
+ exports.canonicalJson = canonicalJson;
7
+ exports.canonicalJsonSha256 = canonicalJsonSha256;
8
+ const node_crypto_1 = require('node:crypto');
9
+ class CanonicalJsonError extends Error {
10
+ path;
11
+ constructor(path, message) {
12
+ super(`Canonical JSON ${path} ${message}.`);
13
+ this.path = path;
14
+ this.name = 'CanonicalJsonError';
15
+ }
16
+ }
17
+ exports.CanonicalJsonError = CanonicalJsonError;
18
+ function compareStrings(left, right) {
19
+ return left < right ? -1 : left > right ? 1 : 0;
20
+ }
21
+ function fail(path, message) {
22
+ throw new CanonicalJsonError(path, message);
23
+ }
24
+ function childPath(path, key) {
25
+ return `${path}/${key.replace(/~/g, '~0').replace(/\//g, '~1')}`;
26
+ }
27
+ function hasOwn(value, key) {
28
+ return Object.prototype.hasOwnProperty.call(value, key);
29
+ }
30
+ function serialize(value, path, ancestors, depth, options) {
31
+ if (depth > options.maximumDepth) {
32
+ fail(path, 'exceeds the maximum nesting depth');
33
+ }
34
+ if (value === null) return 'null';
35
+ if (typeof value === 'string') return JSON.stringify(value);
36
+ if (typeof value === 'boolean') return value ? 'true' : 'false';
37
+ if (typeof value === 'number') {
38
+ if (!Number.isFinite(value)) fail(path, 'contains a non-finite number');
39
+ return JSON.stringify(value);
40
+ }
41
+ if (typeof value !== 'object') {
42
+ fail(path, 'contains a non-JSON value');
43
+ }
44
+ if (ancestors.has(value)) {
45
+ fail(path, 'must be acyclic; a cycle was detected');
46
+ }
47
+ ancestors.add(value);
48
+ try {
49
+ if (Array.isArray(value)) {
50
+ const entries = [];
51
+ for (let index = 0; index < value.length; index += 1) {
52
+ if (!hasOwn(value, index)) {
53
+ fail(`${path}/${index}`, 'contains a sparse array entry');
54
+ }
55
+ entries.push(
56
+ serialize(
57
+ value[index],
58
+ `${path}/${index}`,
59
+ ancestors,
60
+ depth + 1,
61
+ options,
62
+ ),
63
+ );
64
+ }
65
+ const allowedKeys = new Set(['length']);
66
+ for (let index = 0; index < value.length; index += 1) {
67
+ allowedKeys.add(String(index));
68
+ }
69
+ if (
70
+ Reflect.ownKeys(value).some(
71
+ (key) => typeof key !== 'string' || !allowedKeys.has(key),
72
+ )
73
+ ) {
74
+ fail(path, 'contains non-index array properties');
75
+ }
76
+ return `[${entries.join(',')}]`;
77
+ }
78
+ const prototype = Object.getPrototypeOf(value);
79
+ if (prototype !== Object.prototype && prototype !== null) {
80
+ fail(path, 'contains a non-plain object');
81
+ }
82
+ const descriptors = Object.getOwnPropertyDescriptors(value);
83
+ const keys = Reflect.ownKeys(descriptors);
84
+ if (keys.some((key) => typeof key !== 'string')) {
85
+ fail(path, 'contains symbol properties');
86
+ }
87
+ const stringKeys = keys;
88
+ for (const key of stringKeys) {
89
+ const descriptor = descriptors[key];
90
+ if (
91
+ (options.rejectEmptyKeys && key.length === 0) ||
92
+ (options.maximumKeyLength !== undefined &&
93
+ key.length > options.maximumKeyLength) ||
94
+ (options.rejectControlCharactersInKeys && /[\r\n]/.test(key)) ||
95
+ !descriptor ||
96
+ descriptor.enumerable !== true ||
97
+ !hasOwn(descriptor, 'value')
98
+ ) {
99
+ fail(childPath(path, key), 'contains a non-data property');
100
+ }
101
+ }
102
+ const serializedKeys = stringKeys.filter(
103
+ (key) =>
104
+ !options.omitUndefinedObjectValues ||
105
+ descriptors[key]?.value !== undefined,
106
+ );
107
+ return `{${serializedKeys
108
+ .sort(compareStrings)
109
+ .map((key) => {
110
+ return `${JSON.stringify(key)}:${serialize(descriptors[key]?.value, childPath(path, key), ancestors, depth + 1, options)}`;
111
+ })
112
+ .join(',')}}`;
113
+ } finally {
114
+ ancestors.delete(value);
115
+ }
116
+ }
117
+ /**
118
+ * Serializes strict acyclic JSON with literal UTF-16 key ordering. Arrays keep
119
+ * their declared order; objects must contain enumerable data properties only.
120
+ * The CommonJS peer is held to identical behavior by the parity spec.
121
+ */
122
+ function canonicalJson(value, options = {}) {
123
+ const maximumDepth = options.maximumDepth ?? 128;
124
+ if (!Number.isInteger(maximumDepth) || maximumDepth < 1) {
125
+ throw new CanonicalJsonError(
126
+ '$options/maximumDepth',
127
+ 'must be a positive integer',
128
+ );
129
+ }
130
+ if (
131
+ options.maximumKeyLength !== undefined &&
132
+ (!Number.isInteger(options.maximumKeyLength) ||
133
+ options.maximumKeyLength < 1)
134
+ ) {
135
+ throw new CanonicalJsonError(
136
+ '$options/maximumKeyLength',
137
+ 'must be a positive integer',
138
+ );
139
+ }
140
+ return serialize(value, '$', new Set(), 0, {
141
+ maximumDepth,
142
+ ...(options.maximumKeyLength === undefined
143
+ ? {}
144
+ : { maximumKeyLength: options.maximumKeyLength }),
145
+ omitUndefinedObjectValues: options.omitUndefinedObjectValues === true,
146
+ rejectControlCharactersInKeys:
147
+ options.rejectControlCharactersInKeys === true,
148
+ rejectEmptyKeys: options.rejectEmptyKeys === true,
149
+ });
150
+ }
151
+ function canonicalJsonSha256(value, options = {}) {
152
+ return (0, node_crypto_1.createHash)('sha256')
153
+ .update(canonicalJson(value, options), 'utf8')
154
+ .digest('hex');
155
+ }
156
+
157
+ Object.freeze(module.exports);
@@ -0,0 +1,26 @@
1
+ // @generated from packages/runtime/src/canonical-json.ts by tools/runtime/generate-shared-authorities.mjs
2
+ // Do not edit this artifact directly.
3
+ export declare class CanonicalJsonError extends Error {
4
+ readonly path: string;
5
+ constructor(path: string, message: string);
6
+ }
7
+ export interface CanonicalJsonOptions {
8
+ maximumDepth?: number;
9
+ maximumKeyLength?: number;
10
+ omitUndefinedObjectValues?: boolean;
11
+ rejectControlCharactersInKeys?: boolean;
12
+ rejectEmptyKeys?: boolean;
13
+ }
14
+ /**
15
+ * Serializes strict acyclic JSON with literal UTF-16 key ordering. Arrays keep
16
+ * their declared order; objects must contain enumerable data properties only.
17
+ * The CommonJS peer is held to identical behavior by the parity spec.
18
+ */
19
+ export declare function canonicalJson(
20
+ value: unknown,
21
+ options?: CanonicalJsonOptions,
22
+ ): string;
23
+ export declare function canonicalJsonSha256(
24
+ value: unknown,
25
+ options?: CanonicalJsonOptions,
26
+ ): string;
@@ -0,0 +1,18 @@
1
+ export declare class CanonicalJsonError extends Error {
2
+ readonly path: string;
3
+ constructor(path: string, message: string);
4
+ }
5
+ export interface CanonicalJsonOptions {
6
+ maximumDepth?: number;
7
+ maximumKeyLength?: number;
8
+ omitUndefinedObjectValues?: boolean;
9
+ rejectControlCharactersInKeys?: boolean;
10
+ rejectEmptyKeys?: boolean;
11
+ }
12
+ /**
13
+ * Serializes strict acyclic JSON with literal UTF-16 key ordering. Arrays keep
14
+ * their declared order; objects must contain enumerable data properties only.
15
+ * The CommonJS peer is held to identical behavior by the parity spec.
16
+ */
17
+ export declare function canonicalJson(value: unknown, options?: CanonicalJsonOptions): string;
18
+ export declare function canonicalJsonSha256(value: unknown, options?: CanonicalJsonOptions): string;
@@ -0,0 +1,125 @@
1
+ import { createHash } from 'node:crypto';
2
+ export class CanonicalJsonError extends Error {
3
+ constructor(path, message) {
4
+ super(`Canonical JSON ${path} ${message}.`);
5
+ this.path = path;
6
+ this.name = 'CanonicalJsonError';
7
+ }
8
+ }
9
+ function compareStrings(left, right) {
10
+ return left < right ? -1 : left > right ? 1 : 0;
11
+ }
12
+ function fail(path, message) {
13
+ throw new CanonicalJsonError(path, message);
14
+ }
15
+ function childPath(path, key) {
16
+ return `${path}/${key.replace(/~/g, '~0').replace(/\//g, '~1')}`;
17
+ }
18
+ function hasOwn(value, key) {
19
+ return Object.prototype.hasOwnProperty.call(value, key);
20
+ }
21
+ function serialize(value, path, ancestors, depth, options) {
22
+ if (depth > options.maximumDepth) {
23
+ fail(path, 'exceeds the maximum nesting depth');
24
+ }
25
+ if (value === null)
26
+ return 'null';
27
+ if (typeof value === 'string')
28
+ return JSON.stringify(value);
29
+ if (typeof value === 'boolean')
30
+ return value ? 'true' : 'false';
31
+ if (typeof value === 'number') {
32
+ if (!Number.isFinite(value))
33
+ fail(path, 'contains a non-finite number');
34
+ return JSON.stringify(value);
35
+ }
36
+ if (typeof value !== 'object') {
37
+ fail(path, 'contains a non-JSON value');
38
+ }
39
+ if (ancestors.has(value)) {
40
+ fail(path, 'must be acyclic; a cycle was detected');
41
+ }
42
+ ancestors.add(value);
43
+ try {
44
+ if (Array.isArray(value)) {
45
+ const entries = [];
46
+ for (let index = 0; index < value.length; index += 1) {
47
+ if (!hasOwn(value, index)) {
48
+ fail(`${path}/${index}`, 'contains a sparse array entry');
49
+ }
50
+ entries.push(serialize(value[index], `${path}/${index}`, ancestors, depth + 1, options));
51
+ }
52
+ const allowedKeys = new Set(['length']);
53
+ for (let index = 0; index < value.length; index += 1) {
54
+ allowedKeys.add(String(index));
55
+ }
56
+ if (Reflect.ownKeys(value).some((key) => typeof key !== 'string' || !allowedKeys.has(key))) {
57
+ fail(path, 'contains non-index array properties');
58
+ }
59
+ return `[${entries.join(',')}]`;
60
+ }
61
+ const prototype = Object.getPrototypeOf(value);
62
+ if (prototype !== Object.prototype && prototype !== null) {
63
+ fail(path, 'contains a non-plain object');
64
+ }
65
+ const descriptors = Object.getOwnPropertyDescriptors(value);
66
+ const keys = Reflect.ownKeys(descriptors);
67
+ if (keys.some((key) => typeof key !== 'string')) {
68
+ fail(path, 'contains symbol properties');
69
+ }
70
+ const stringKeys = keys;
71
+ for (const key of stringKeys) {
72
+ const descriptor = descriptors[key];
73
+ if ((options.rejectEmptyKeys && key.length === 0) ||
74
+ (options.maximumKeyLength !== undefined &&
75
+ key.length > options.maximumKeyLength) ||
76
+ (options.rejectControlCharactersInKeys && /[\r\n]/.test(key)) ||
77
+ !descriptor ||
78
+ descriptor.enumerable !== true ||
79
+ !hasOwn(descriptor, 'value')) {
80
+ fail(childPath(path, key), 'contains a non-data property');
81
+ }
82
+ }
83
+ const serializedKeys = stringKeys.filter((key) => {
84
+ var _a;
85
+ return !options.omitUndefinedObjectValues ||
86
+ ((_a = descriptors[key]) === null || _a === void 0 ? void 0 : _a.value) !== undefined;
87
+ });
88
+ return `{${serializedKeys
89
+ .sort(compareStrings)
90
+ .map((key) => {
91
+ var _a;
92
+ return `${JSON.stringify(key)}:${serialize((_a = descriptors[key]) === null || _a === void 0 ? void 0 : _a.value, childPath(path, key), ancestors, depth + 1, options)}`;
93
+ })
94
+ .join(',')}}`;
95
+ }
96
+ finally {
97
+ ancestors.delete(value);
98
+ }
99
+ }
100
+ /**
101
+ * Serializes strict acyclic JSON with literal UTF-16 key ordering. Arrays keep
102
+ * their declared order; objects must contain enumerable data properties only.
103
+ * The CommonJS peer is held to identical behavior by the parity spec.
104
+ */
105
+ export function canonicalJson(value, options = {}) {
106
+ var _a;
107
+ const maximumDepth = (_a = options.maximumDepth) !== null && _a !== void 0 ? _a : 128;
108
+ if (!Number.isInteger(maximumDepth) || maximumDepth < 1) {
109
+ throw new CanonicalJsonError('$options/maximumDepth', 'must be a positive integer');
110
+ }
111
+ if (options.maximumKeyLength !== undefined &&
112
+ (!Number.isInteger(options.maximumKeyLength) ||
113
+ options.maximumKeyLength < 1)) {
114
+ throw new CanonicalJsonError('$options/maximumKeyLength', 'must be a positive integer');
115
+ }
116
+ return serialize(value, '$', new Set(), 0, Object.assign(Object.assign({ maximumDepth }, (options.maximumKeyLength === undefined
117
+ ? {}
118
+ : { maximumKeyLength: options.maximumKeyLength })), { omitUndefinedObjectValues: options.omitUndefinedObjectValues === true, rejectControlCharactersInKeys: options.rejectControlCharactersInKeys === true, rejectEmptyKeys: options.rejectEmptyKeys === true }));
119
+ }
120
+ export function canonicalJsonSha256(value, options = {}) {
121
+ return createHash('sha256')
122
+ .update(canonicalJson(value, options), 'utf8')
123
+ .digest('hex');
124
+ }
125
+ //# sourceMappingURL=canonical-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../../../../packages/runtime/src/canonical-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YACW,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,kBAAkB,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC;QAHnC,SAAI,GAAJ,IAAI,CAAQ;QAIrB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAkBD,SAAS,cAAc,CAAC,IAAY,EAAE,KAAa;IACjD,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,OAAe;IACzC,MAAM,IAAI,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,GAAW;IAC1C,OAAO,GAAG,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,GAAgB;IAC7C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS,CAChB,KAAc,EACd,IAAY,EACZ,SAAsB,EACtB,KAAa,EACb,OAAqC;IAErC,IAAI,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;IACtD,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,+BAA+B,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO,CAAC,IAAI,CACV,SAAS,CACP,KAAK,CAAC,KAAK,CAAC,EACZ,GAAG,IAAI,IAAI,KAAK,EAAE,EAClB,SAAS,EACT,KAAK,GAAG,CAAC,EACT,OAAO,CACR,CACF,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACrD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,CAAC;YACD,IACE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CACzB,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAC1D,EACD,CAAC;gBACD,IAAI,CAAC,IAAI,EAAE,qCAAqC,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACzD,IAAI,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,UAAU,GAAG,IAAgB,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACpC,IACE,CAAC,OAAO,CAAC,eAAe,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;gBAC7C,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;oBACrC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;gBACxC,CAAC,OAAO,CAAC,6BAA6B,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7D,CAAC,UAAU;gBACX,UAAU,CAAC,UAAU,KAAK,IAAI;gBAC9B,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,EAC5B,CAAC;gBACD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,EAAE;;YACN,OAAA,CAAC,OAAO,CAAC,yBAAyB;gBAClC,CAAA,MAAA,WAAW,CAAC,GAAG,CAAC,0CAAE,KAAK,MAAK,SAAS,CAAA;SAAA,CACxC,CAAC;QACF,OAAO,IAAI,cAAc;aACtB,IAAI,CAAC,cAAc,CAAC;aACpB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;YACX,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CACxC,MAAA,WAAW,CAAC,GAAG,CAAC,0CAAE,KAAK,EACvB,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,EACpB,SAAS,EACT,KAAK,GAAG,CAAC,EACT,OAAO,CACR,EAAE,CAAC;QACN,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAc,EACd,UAAgC,EAAE;;IAElC,MAAM,YAAY,GAAG,MAAA,OAAO,CAAC,YAAY,mCAAI,GAAG,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,EACvB,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IACD,IACE,OAAO,CAAC,gBAAgB,KAAK,SAAS;QACtC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC1C,OAAO,CAAC,gBAAgB,GAAG,CAAC,CAAC,EAC/B,CAAC;QACD,MAAM,IAAI,kBAAkB,CAC1B,2BAA2B,EAC3B,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,gCACvC,YAAY,IACT,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;QACxC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,KACnD,yBAAyB,EAAE,OAAO,CAAC,yBAAyB,KAAK,IAAI,EACrE,6BAA6B,EAC3B,OAAO,CAAC,6BAA6B,KAAK,IAAI,EAChD,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,IAAI,IACjD,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAc,EACd,UAAgC,EAAE;IAElC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC;SAC7C,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC"}