business-as-code 2.1.3 → 2.3.0

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 (260) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +2 -0
  3. package/package.json +16 -13
  4. package/src/dollar.ts +5 -2
  5. package/src/entities/organization.ts +31 -18
  6. package/src/goals.ts +78 -12
  7. package/src/index.ts +48 -18
  8. package/src/kpis.ts +62 -8
  9. package/src/metrics.ts +92 -79
  10. package/src/okrs.ts +120 -20
  11. package/src/organization.ts +12 -15
  12. package/src/process.ts +11 -12
  13. package/src/product.ts +8 -9
  14. package/src/queries.ts +238 -75
  15. package/src/roles.ts +62 -61
  16. package/src/workflow.ts +22 -15
  17. package/test/business.test.ts +282 -0
  18. package/test/dollar.test.ts +270 -0
  19. package/test/entities.test.ts +628 -0
  20. package/test/financials.test.ts +539 -0
  21. package/test/goals.test.ts +451 -0
  22. package/{src → test}/index.test.ts +1 -1
  23. package/test/kpis.test.ts +440 -0
  24. package/test/metrics.test.ts +744 -0
  25. package/test/okrs.test.ts +741 -0
  26. package/test/organization.test.ts +548 -0
  27. package/test/process.test.ts +503 -0
  28. package/test/product.test.ts +430 -0
  29. package/test/queries.test.ts +556 -0
  30. package/test/roles.test.ts +546 -0
  31. package/test/service.test.ts +450 -0
  32. package/test/types.test.ts +1141 -0
  33. package/test/vision.test.ts +214 -0
  34. package/test/workflow.test.ts +501 -0
  35. package/vitest.config.ts +47 -0
  36. package/.turbo/turbo-build.log +0 -5
  37. package/LICENSE +0 -21
  38. package/dist/business.d.ts +0 -62
  39. package/dist/business.d.ts.map +0 -1
  40. package/dist/business.js +0 -109
  41. package/dist/business.js.map +0 -1
  42. package/dist/canvas/activities.d.ts +0 -19
  43. package/dist/canvas/activities.d.ts.map +0 -1
  44. package/dist/canvas/activities.js +0 -20
  45. package/dist/canvas/activities.js.map +0 -1
  46. package/dist/canvas/channels.d.ts +0 -20
  47. package/dist/canvas/channels.d.ts.map +0 -1
  48. package/dist/canvas/channels.js +0 -21
  49. package/dist/canvas/channels.js.map +0 -1
  50. package/dist/canvas/relationships.d.ts +0 -20
  51. package/dist/canvas/relationships.d.ts.map +0 -1
  52. package/dist/canvas/relationships.js +0 -21
  53. package/dist/canvas/relationships.js.map +0 -1
  54. package/dist/canvas/resources.d.ts +0 -20
  55. package/dist/canvas/resources.d.ts.map +0 -1
  56. package/dist/canvas/resources.js +0 -30
  57. package/dist/canvas/resources.js.map +0 -1
  58. package/dist/canvas/revenue.d.ts +0 -22
  59. package/dist/canvas/revenue.d.ts.map +0 -1
  60. package/dist/canvas/revenue.js +0 -30
  61. package/dist/canvas/revenue.js.map +0 -1
  62. package/dist/canvas/segments.d.ts +0 -20
  63. package/dist/canvas/segments.d.ts.map +0 -1
  64. package/dist/canvas/segments.js +0 -28
  65. package/dist/canvas/segments.js.map +0 -1
  66. package/dist/canvas/types.d.ts +0 -232
  67. package/dist/canvas/types.d.ts.map +0 -1
  68. package/dist/canvas/types.js +0 -8
  69. package/dist/canvas/types.js.map +0 -1
  70. package/dist/canvas/value.d.ts +0 -20
  71. package/dist/canvas/value.d.ts.map +0 -1
  72. package/dist/canvas/value.js +0 -21
  73. package/dist/canvas/value.js.map +0 -1
  74. package/dist/dollar.d.ts +0 -60
  75. package/dist/dollar.d.ts.map +0 -1
  76. package/dist/dollar.js +0 -107
  77. package/dist/dollar.js.map +0 -1
  78. package/dist/entities/assets.d.ts +0 -21
  79. package/dist/entities/assets.d.ts.map +0 -1
  80. package/dist/entities/assets.js +0 -323
  81. package/dist/entities/assets.js.map +0 -1
  82. package/dist/entities/business.d.ts +0 -36
  83. package/dist/entities/business.d.ts.map +0 -1
  84. package/dist/entities/business.js +0 -370
  85. package/dist/entities/business.js.map +0 -1
  86. package/dist/entities/communication.d.ts +0 -21
  87. package/dist/entities/communication.d.ts.map +0 -1
  88. package/dist/entities/communication.js +0 -255
  89. package/dist/entities/communication.js.map +0 -1
  90. package/dist/entities/customers.d.ts +0 -58
  91. package/dist/entities/customers.d.ts.map +0 -1
  92. package/dist/entities/customers.js +0 -989
  93. package/dist/entities/customers.js.map +0 -1
  94. package/dist/entities/financials.d.ts +0 -59
  95. package/dist/entities/financials.d.ts.map +0 -1
  96. package/dist/entities/financials.js +0 -932
  97. package/dist/entities/financials.js.map +0 -1
  98. package/dist/entities/goals.d.ts +0 -58
  99. package/dist/entities/goals.d.ts.map +0 -1
  100. package/dist/entities/goals.js +0 -800
  101. package/dist/entities/goals.js.map +0 -1
  102. package/dist/entities/index.d.ts +0 -299
  103. package/dist/entities/index.d.ts.map +0 -1
  104. package/dist/entities/index.js +0 -198
  105. package/dist/entities/index.js.map +0 -1
  106. package/dist/entities/legal.d.ts +0 -21
  107. package/dist/entities/legal.d.ts.map +0 -1
  108. package/dist/entities/legal.js +0 -301
  109. package/dist/entities/legal.js.map +0 -1
  110. package/dist/entities/market.d.ts +0 -21
  111. package/dist/entities/market.d.ts.map +0 -1
  112. package/dist/entities/market.js +0 -301
  113. package/dist/entities/market.js.map +0 -1
  114. package/dist/entities/marketing.d.ts +0 -67
  115. package/dist/entities/marketing.d.ts.map +0 -1
  116. package/dist/entities/marketing.js +0 -1157
  117. package/dist/entities/marketing.js.map +0 -1
  118. package/dist/entities/offerings.d.ts +0 -51
  119. package/dist/entities/offerings.d.ts.map +0 -1
  120. package/dist/entities/offerings.js +0 -727
  121. package/dist/entities/offerings.js.map +0 -1
  122. package/dist/entities/operations.d.ts +0 -58
  123. package/dist/entities/operations.d.ts.map +0 -1
  124. package/dist/entities/operations.js +0 -787
  125. package/dist/entities/operations.js.map +0 -1
  126. package/dist/entities/organization.d.ts +0 -57
  127. package/dist/entities/organization.d.ts.map +0 -1
  128. package/dist/entities/organization.js +0 -807
  129. package/dist/entities/organization.js.map +0 -1
  130. package/dist/entities/partnerships.d.ts +0 -21
  131. package/dist/entities/partnerships.d.ts.map +0 -1
  132. package/dist/entities/partnerships.js +0 -300
  133. package/dist/entities/partnerships.js.map +0 -1
  134. package/dist/entities/planning.d.ts +0 -0
  135. package/dist/entities/planning.d.ts.map +0 -1
  136. package/dist/entities/planning.js +0 -271
  137. package/dist/entities/planning.js.map +0 -1
  138. package/dist/entities/projects.d.ts +0 -25
  139. package/dist/entities/projects.d.ts.map +0 -1
  140. package/dist/entities/projects.js +0 -349
  141. package/dist/entities/projects.js.map +0 -1
  142. package/dist/entities/risk.d.ts +0 -21
  143. package/dist/entities/risk.d.ts.map +0 -1
  144. package/dist/entities/risk.js +0 -293
  145. package/dist/entities/risk.js.map +0 -1
  146. package/dist/entities/sales.d.ts +0 -72
  147. package/dist/entities/sales.d.ts.map +0 -1
  148. package/dist/entities/sales.js +0 -1248
  149. package/dist/entities/sales.js.map +0 -1
  150. package/dist/financials.d.ts +0 -130
  151. package/dist/financials.d.ts.map +0 -1
  152. package/dist/financials.js +0 -297
  153. package/dist/financials.js.map +0 -1
  154. package/dist/goals.d.ts +0 -87
  155. package/dist/goals.d.ts.map +0 -1
  156. package/dist/goals.js +0 -215
  157. package/dist/goals.js.map +0 -1
  158. package/dist/index.d.ts +0 -97
  159. package/dist/index.d.ts.map +0 -1
  160. package/dist/index.js +0 -132
  161. package/dist/index.js.map +0 -1
  162. package/dist/kpis.d.ts +0 -118
  163. package/dist/kpis.d.ts.map +0 -1
  164. package/dist/kpis.js +0 -232
  165. package/dist/kpis.js.map +0 -1
  166. package/dist/metrics.d.ts +0 -448
  167. package/dist/metrics.d.ts.map +0 -1
  168. package/dist/metrics.js +0 -325
  169. package/dist/metrics.js.map +0 -1
  170. package/dist/okrs.d.ts +0 -123
  171. package/dist/okrs.d.ts.map +0 -1
  172. package/dist/okrs.js +0 -269
  173. package/dist/okrs.js.map +0 -1
  174. package/dist/organization.d.ts +0 -585
  175. package/dist/organization.d.ts.map +0 -1
  176. package/dist/organization.js +0 -173
  177. package/dist/organization.js.map +0 -1
  178. package/dist/process.d.ts +0 -112
  179. package/dist/process.d.ts.map +0 -1
  180. package/dist/process.js +0 -241
  181. package/dist/process.js.map +0 -1
  182. package/dist/product.d.ts +0 -85
  183. package/dist/product.d.ts.map +0 -1
  184. package/dist/product.js +0 -145
  185. package/dist/product.js.map +0 -1
  186. package/dist/queries.d.ts +0 -304
  187. package/dist/queries.d.ts.map +0 -1
  188. package/dist/queries.js +0 -415
  189. package/dist/queries.js.map +0 -1
  190. package/dist/roles.d.ts +0 -340
  191. package/dist/roles.d.ts.map +0 -1
  192. package/dist/roles.js +0 -255
  193. package/dist/roles.js.map +0 -1
  194. package/dist/service.d.ts +0 -61
  195. package/dist/service.d.ts.map +0 -1
  196. package/dist/service.js +0 -140
  197. package/dist/service.js.map +0 -1
  198. package/dist/types.d.ts +0 -459
  199. package/dist/types.d.ts.map +0 -1
  200. package/dist/types.js +0 -5
  201. package/dist/types.js.map +0 -1
  202. package/dist/vision.d.ts +0 -38
  203. package/dist/vision.d.ts.map +0 -1
  204. package/dist/vision.js +0 -68
  205. package/dist/vision.js.map +0 -1
  206. package/dist/workflow.d.ts +0 -115
  207. package/dist/workflow.d.ts.map +0 -1
  208. package/dist/workflow.js +0 -247
  209. package/dist/workflow.js.map +0 -1
  210. package/src/business.js +0 -108
  211. package/src/canvas/activities.ts +0 -32
  212. package/src/canvas/canvas.ts +0 -482
  213. package/src/canvas/channels.ts +0 -34
  214. package/src/canvas/costs.ts +0 -43
  215. package/src/canvas/economics.ts +0 -99
  216. package/src/canvas/index.ts +0 -206
  217. package/src/canvas/partnerships.ts +0 -34
  218. package/src/canvas/projections.ts +0 -141
  219. package/src/canvas/relationships.ts +0 -34
  220. package/src/canvas/resources.ts +0 -43
  221. package/src/canvas/revenue.ts +0 -56
  222. package/src/canvas/segments.ts +0 -42
  223. package/src/canvas/types.ts +0 -363
  224. package/src/canvas/value.ts +0 -34
  225. package/src/dollar.js +0 -106
  226. package/src/entities/assets.js +0 -322
  227. package/src/entities/business.js +0 -369
  228. package/src/entities/communication.js +0 -254
  229. package/src/entities/customers.js +0 -988
  230. package/src/entities/financials.js +0 -931
  231. package/src/entities/goals.js +0 -799
  232. package/src/entities/index.js +0 -197
  233. package/src/entities/legal.js +0 -300
  234. package/src/entities/market.js +0 -300
  235. package/src/entities/marketing.js +0 -1156
  236. package/src/entities/offerings.js +0 -726
  237. package/src/entities/operations.js +0 -786
  238. package/src/entities/organization.js +0 -806
  239. package/src/entities/partnerships.js +0 -299
  240. package/src/entities/planning.js +0 -270
  241. package/src/entities/projects.js +0 -348
  242. package/src/entities/risk.js +0 -292
  243. package/src/entities/sales.js +0 -1247
  244. package/src/financials.js +0 -296
  245. package/src/goals.js +0 -214
  246. package/src/index.js +0 -131
  247. package/src/index.test.js +0 -274
  248. package/src/kpis.js +0 -231
  249. package/src/metrics.js +0 -324
  250. package/src/okrs.js +0 -268
  251. package/src/organization.js +0 -172
  252. package/src/process.js +0 -240
  253. package/src/product.js +0 -144
  254. package/src/queries.js +0 -414
  255. package/src/roles.js +0 -254
  256. package/src/service.js +0 -139
  257. package/src/types.js +0 -4
  258. package/src/vision.js +0 -67
  259. package/src/workflow.js +0 -246
  260. package/tests/canvas.test.ts +0 -842
@@ -1,585 +0,0 @@
1
- /**
2
- * Organization Structure - Flows to FGA/RBAC
3
- *
4
- * Defines the complete organizational hierarchy:
5
- *
6
- * Organization
7
- * └── Department
8
- * └── Team
9
- * └── Position (Role + Worker)
10
- * └── Permissions (FGA/RBAC)
11
- *
12
- * This structure enables:
13
- * - Hierarchical permission inheritance
14
- * - Role-based task assignment
15
- * - Approval chains based on org structure
16
- * - Resource access control based on department/team
17
- *
18
- * @packageDocumentation
19
- */
20
- import type { BusinessRole, TaskRoutingRule, WorkflowRole } from './roles.js';
21
- /**
22
- * Organization - top-level business entity
23
- *
24
- * @example
25
- * ```ts
26
- * const acme: Organization = {
27
- * id: 'org_acme',
28
- * name: 'Acme Corp',
29
- * domain: 'acme.com',
30
- * industry: 'technology',
31
- *
32
- * // Hierarchy
33
- * departments: [engineering, sales, support],
34
- *
35
- * // Global settings
36
- * settings: {
37
- * defaultCurrency: 'USD',
38
- * timezone: 'America/Los_Angeles',
39
- * workWeek: ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'],
40
- * },
41
- *
42
- * // Resource hierarchy for FGA
43
- * resourceHierarchy: {
44
- * organization: { children: ['department', 'project', 'repository'] },
45
- * department: { parent: 'organization', children: ['team'] },
46
- * team: { parent: 'department', children: ['position'] },
47
- * },
48
- * }
49
- * ```
50
- */
51
- export interface Organization {
52
- /** Unique identifier */
53
- id: string;
54
- /** Organization name */
55
- name: string;
56
- /** Primary domain */
57
- domain?: string;
58
- /** Legal name (if different) */
59
- legalName?: string;
60
- /** Industry/sector */
61
- industry?: string;
62
- /** Mission statement */
63
- mission?: string;
64
- /** Core values */
65
- values?: string[];
66
- /** Founded date */
67
- foundedAt?: Date;
68
- /** Headquarters location */
69
- headquarters?: Address;
70
- /** Organization settings */
71
- settings?: OrganizationSettings;
72
- /** Departments */
73
- departments?: Department[];
74
- /** Standalone teams (not in departments) */
75
- teams?: Team[];
76
- /** Organization-wide roles */
77
- roles?: BusinessRole[];
78
- /** Resource hierarchy for FGA */
79
- resourceHierarchy?: ResourceHierarchy;
80
- /** Global approval chains */
81
- approvalChains?: ApprovalChain[];
82
- /** Task routing rules */
83
- routingRules?: TaskRoutingRule[];
84
- /** Metadata */
85
- metadata?: Record<string, unknown>;
86
- }
87
- /**
88
- * Organization settings
89
- */
90
- export interface OrganizationSettings {
91
- /** Default currency */
92
- defaultCurrency?: string;
93
- /** Default timezone */
94
- timezone?: string;
95
- /** Work week days */
96
- workWeek?: string[];
97
- /** Business hours */
98
- businessHours?: {
99
- start: string;
100
- end: string;
101
- timezone?: string;
102
- };
103
- /** Fiscal year start month (1-12) */
104
- fiscalYearStart?: number;
105
- /** Default language */
106
- language?: string;
107
- /** Date format */
108
- dateFormat?: string;
109
- }
110
- /**
111
- * Address
112
- */
113
- export interface Address {
114
- street?: string;
115
- city?: string;
116
- state?: string;
117
- postalCode?: string;
118
- country?: string;
119
- }
120
- /**
121
- * Department - major organizational division
122
- *
123
- * @example
124
- * ```ts
125
- * const engineering: Department = {
126
- * id: 'dept_eng',
127
- * name: 'Engineering',
128
- * code: 'ENG',
129
- *
130
- * // Leadership
131
- * head: { roleId: 'role_cto', positionId: 'pos_cto_jane' },
132
- *
133
- * // Teams
134
- * teams: [platformTeam, productTeam, infraTeam],
135
- *
136
- * // Budget
137
- * budget: {
138
- * annual: 5000000,
139
- * currency: 'USD',
140
- * categories: {
141
- * salaries: 3500000,
142
- * tools: 200000,
143
- * infrastructure: 800000,
144
- * training: 100000,
145
- * },
146
- * },
147
- *
148
- * // FGA: Department-level permissions
149
- * defaultPermissions: {
150
- * repository: ['read'],
151
- * project: ['read'],
152
- * },
153
- * }
154
- * ```
155
- */
156
- export interface Department {
157
- /** Unique identifier */
158
- id: string;
159
- /** Department name */
160
- name: string;
161
- /** Short code (e.g., 'ENG', 'SALES') */
162
- code?: string;
163
- /** Description */
164
- description?: string;
165
- /** Department head position */
166
- head?: PositionRef;
167
- /** Parent department (for sub-departments) */
168
- parentId?: string;
169
- /** Teams within department */
170
- teams?: Team[];
171
- /** Department budget */
172
- budget?: Budget;
173
- /** Cost center code */
174
- costCenter?: string;
175
- /** Department goals */
176
- goals?: string[];
177
- /** Default permissions for department members */
178
- defaultPermissions?: Record<string, string[]>;
179
- /** Department-specific roles */
180
- roles?: BusinessRole[];
181
- /** Department-specific routing rules */
182
- routingRules?: TaskRoutingRule[];
183
- /** Metadata */
184
- metadata?: Record<string, unknown>;
185
- }
186
- /**
187
- * Team - working group within a department
188
- *
189
- * @example
190
- * ```ts
191
- * const platformTeam: Team = {
192
- * id: 'team_platform',
193
- * name: 'Platform Team',
194
- * departmentId: 'dept_eng',
195
- *
196
- * // Leadership
197
- * lead: { roleId: 'role_lead', positionId: 'pos_lead_bob' },
198
- *
199
- * // Members
200
- * positions: [
201
- * { id: 'pos_1', roleId: 'role_engineer', workerId: 'worker_alice' },
202
- * { id: 'pos_2', roleId: 'role_engineer', workerId: 'worker_charlie' },
203
- * { id: 'pos_3', roleId: 'role_engineer', workerId: null }, // Open position
204
- * ],
205
- *
206
- * // Team resources (for FGA scoping)
207
- * resources: {
208
- * repositories: ['platform-core', 'platform-api'],
209
- * projects: ['platform-v2'],
210
- * },
211
- *
212
- * // Team-level permissions (inherited by members)
213
- * defaultPermissions: {
214
- * repository: ['read', 'edit', 'act:merge'],
215
- * project: ['read', 'edit'],
216
- * },
217
- * }
218
- * ```
219
- */
220
- export interface Team {
221
- /** Unique identifier */
222
- id: string;
223
- /** Team name */
224
- name: string;
225
- /** Parent department */
226
- departmentId?: string;
227
- /** Description */
228
- description?: string;
229
- /** Team lead position */
230
- lead?: PositionRef;
231
- /** Team positions */
232
- positions?: Position[];
233
- /** Team objectives */
234
- objectives?: string[];
235
- /** Team resources (for FGA scoping) */
236
- resources?: TeamResources;
237
- /** Team budget (if separate from department) */
238
- budget?: Budget;
239
- /** Default permissions for team members */
240
- defaultPermissions?: Record<string, string[]>;
241
- /** Workflow roles for this team */
242
- workflowRoles?: WorkflowRole[];
243
- /** Communication channels */
244
- channels?: TeamChannels;
245
- /** Metadata */
246
- metadata?: Record<string, unknown>;
247
- }
248
- /**
249
- * Team resources - scopes FGA permissions
250
- */
251
- export interface TeamResources {
252
- /** Owned repositories */
253
- repositories?: string[];
254
- /** Owned projects */
255
- projects?: string[];
256
- /** Owned products */
257
- products?: string[];
258
- /** Custom resource types */
259
- [resourceType: string]: string[] | undefined;
260
- }
261
- /**
262
- * Team communication channels
263
- */
264
- export interface TeamChannels {
265
- slack?: string;
266
- teams?: string;
267
- email?: string;
268
- discord?: string;
269
- }
270
- /**
271
- * Position - a role filled by a worker
272
- *
273
- * The position is the link between:
274
- * - Business Role (responsibilities, permissions)
275
- * - Worker (human or AI agent)
276
- * - Location in org hierarchy (team → department → org)
277
- *
278
- * @example
279
- * ```ts
280
- * const seniorEngineerPosition: Position = {
281
- * id: 'pos_se_123',
282
- * title: 'Senior Software Engineer',
283
- *
284
- * // Role defines what this position can do
285
- * roleId: 'role_senior_engineer',
286
- *
287
- * // Worker currently filling this position
288
- * workerId: 'worker_alice',
289
- * workerType: 'human',
290
- *
291
- * // Hierarchy
292
- * teamId: 'team_platform',
293
- * reportsTo: 'pos_lead_bob',
294
- *
295
- * // Position-specific permissions (added to role permissions)
296
- * additionalPermissions: {
297
- * 'repository:platform-core': ['manage'],
298
- * },
299
- *
300
- * // Employment details
301
- * startDate: new Date('2023-01-15'),
302
- * status: 'active',
303
- * }
304
- * ```
305
- */
306
- export interface Position {
307
- /** Unique identifier */
308
- id: string;
309
- /** Position title */
310
- title: string;
311
- /** Business role this position requires */
312
- roleId: string;
313
- /** Worker filling this position (null = open position) */
314
- workerId?: string | null;
315
- /** Type of worker (human, agent, or either) */
316
- workerType?: 'human' | 'agent' | 'any';
317
- /** Team this position belongs to */
318
- teamId?: string;
319
- /** Position this reports to */
320
- reportsTo?: string;
321
- /** Direct reports (position IDs) */
322
- directReports?: string[];
323
- /** Position-specific additional permissions */
324
- additionalPermissions?: Record<string, string[]>;
325
- /** Start date */
326
- startDate?: Date;
327
- /** End date (for contractors/temporary) */
328
- endDate?: Date;
329
- /** Position status */
330
- status?: 'active' | 'open' | 'on-leave' | 'terminated';
331
- /** Full-time equivalent (1.0 = full-time) */
332
- fte?: number;
333
- /** Location */
334
- location?: string;
335
- /** Remote/hybrid/onsite */
336
- workModel?: 'remote' | 'hybrid' | 'onsite';
337
- /** Compensation */
338
- compensation?: Compensation;
339
- /** Metadata */
340
- metadata?: Record<string, unknown>;
341
- }
342
- /**
343
- * Position reference
344
- */
345
- export interface PositionRef {
346
- positionId?: string;
347
- roleId?: string;
348
- workerId?: string;
349
- }
350
- /**
351
- * Compensation details
352
- */
353
- export interface Compensation {
354
- /** Base salary */
355
- baseSalary?: number;
356
- /** Currency */
357
- currency?: string;
358
- /** Pay frequency */
359
- frequency?: 'hourly' | 'weekly' | 'biweekly' | 'monthly' | 'annual';
360
- /** Bonus target percentage */
361
- bonusTarget?: number;
362
- /** Equity grants */
363
- equity?: {
364
- type: 'options' | 'rsu' | 'shares';
365
- amount: number;
366
- vestingSchedule?: string;
367
- };
368
- /** Band/level */
369
- band?: string;
370
- }
371
- /**
372
- * Budget allocation
373
- */
374
- export interface Budget {
375
- /** Total annual budget */
376
- annual?: number;
377
- /** Currency */
378
- currency?: string;
379
- /** Budget period */
380
- period?: string;
381
- /** Budget categories */
382
- categories?: Record<string, number>;
383
- /** Spent to date */
384
- spent?: number;
385
- /** Remaining */
386
- remaining?: number;
387
- }
388
- /**
389
- * Resource hierarchy definition for FGA
390
- *
391
- * Defines how resources relate to each other for permission inheritance.
392
- *
393
- * @example
394
- * ```ts
395
- * const hierarchy: ResourceHierarchy = {
396
- * // Organization is root
397
- * organization: {
398
- * children: ['department', 'project', 'repository'],
399
- * },
400
- *
401
- * // Department inherits from org
402
- * department: {
403
- * parent: 'organization',
404
- * children: ['team'],
405
- * },
406
- *
407
- * // Team inherits from department
408
- * team: {
409
- * parent: 'department',
410
- * children: ['position'],
411
- * },
412
- *
413
- * // Project can be org-level or team-level
414
- * project: {
415
- * parent: 'organization',
416
- * alternateParents: ['team'],
417
- * children: ['document', 'task'],
418
- * },
419
- *
420
- * // Repository can be org-level or team-level
421
- * repository: {
422
- * parent: 'organization',
423
- * alternateParents: ['team'],
424
- * },
425
- * }
426
- * ```
427
- */
428
- export interface ResourceHierarchy {
429
- [resourceType: string]: ResourceHierarchyNode;
430
- }
431
- /**
432
- * Node in resource hierarchy
433
- */
434
- export interface ResourceHierarchyNode {
435
- /** Primary parent resource type */
436
- parent?: string;
437
- /** Alternative parent types */
438
- alternateParents?: string[];
439
- /** Child resource types */
440
- children?: string[];
441
- /** Whether permissions cascade down */
442
- inheritPermissions?: boolean;
443
- /** Maximum depth (for nested resources) */
444
- maxDepth?: number;
445
- }
446
- /**
447
- * Approval chain - defines who approves what
448
- *
449
- * @example
450
- * ```ts
451
- * const expenseApprovalChain: ApprovalChain = {
452
- * id: 'chain_expense',
453
- * name: 'Expense Approval',
454
- * type: 'expense',
455
- *
456
- * levels: [
457
- * {
458
- * threshold: 1000,
459
- * approvers: [{ type: 'direct-manager' }],
460
- * },
461
- * {
462
- * threshold: 5000,
463
- * approvers: [
464
- * { type: 'direct-manager' },
465
- * { type: 'role', roleId: 'director' },
466
- * ],
467
- * },
468
- * {
469
- * threshold: 25000,
470
- * approvers: [
471
- * { type: 'direct-manager' },
472
- * { type: 'role', roleId: 'vp' },
473
- * { type: 'role', roleId: 'cfo' },
474
- * ],
475
- * },
476
- * ],
477
- *
478
- * // Escalation settings
479
- * escalation: {
480
- * afterHours: 24,
481
- * escalateTo: 'skip-level-manager',
482
- * },
483
- * }
484
- * ```
485
- */
486
- export interface ApprovalChain {
487
- /** Chain identifier */
488
- id: string;
489
- /** Chain name */
490
- name: string;
491
- /** What type of requests this chain handles */
492
- type: string;
493
- /** Approval levels */
494
- levels: ApprovalLevel[];
495
- /** Escalation rules */
496
- escalation?: EscalationRule;
497
- /** Active/inactive */
498
- active?: boolean;
499
- /** Metadata */
500
- metadata?: Record<string, unknown>;
501
- }
502
- /**
503
- * Approval level within a chain
504
- */
505
- export interface ApprovalLevel {
506
- /** Threshold amount (requests above this need this level) */
507
- threshold?: number;
508
- /** Approvers at this level */
509
- approvers: ApproverSpec[];
510
- /** How many approvers needed */
511
- requiredApprovals?: number;
512
- /** Whether approvals at this level are sequential or parallel */
513
- approvalMode?: 'sequential' | 'parallel' | 'any';
514
- /** SLA for this level (hours) */
515
- slaHours?: number;
516
- }
517
- /**
518
- * Approver specification
519
- */
520
- export interface ApproverSpec {
521
- /** Approver type */
522
- type: 'direct-manager' | 'skip-level-manager' | 'role' | 'position' | 'worker' | 'team';
523
- /** Role ID (if type is 'role') */
524
- roleId?: string;
525
- /** Position ID (if type is 'position') */
526
- positionId?: string;
527
- /** Worker ID (if type is 'worker') */
528
- workerId?: string;
529
- /** Team ID (if type is 'team') */
530
- teamId?: string;
531
- }
532
- /**
533
- * Escalation rule
534
- */
535
- export interface EscalationRule {
536
- /** Hours before escalation */
537
- afterHours: number;
538
- /** Who to escalate to */
539
- escalateTo: 'skip-level-manager' | 'department-head' | 'role' | 'position';
540
- /** Role ID if escalating to role */
541
- roleId?: string;
542
- /** Position ID if escalating to position */
543
- positionId?: string;
544
- /** Maximum escalations */
545
- maxEscalations?: number;
546
- }
547
- /**
548
- * Resolved permissions for a worker
549
- *
550
- * Combines:
551
- * - Organization-level defaults
552
- * - Department-level permissions
553
- * - Team-level permissions
554
- * - Role permissions
555
- * - Position-specific permissions
556
- */
557
- export interface ResolvedPermissions {
558
- /** Worker ID */
559
- workerId: string;
560
- /** Position ID */
561
- positionId: string;
562
- /** Effective permissions by resource type */
563
- permissions: Record<string, string[]>;
564
- /** Resource-specific permissions */
565
- resourcePermissions: Record<string, Record<string, string[]>>;
566
- /** Approval capabilities */
567
- canApprove: string[];
568
- /** Task handling capabilities */
569
- canHandle: string[];
570
- /** Inheritance chain (for debugging) */
571
- inheritanceChain: string[];
572
- }
573
- /**
574
- * Resolve permissions for a position in the org hierarchy
575
- */
576
- export declare function resolvePermissions(org: Organization, positionId: string): ResolvedPermissions | null;
577
- /**
578
- * Get approval chain for a request
579
- */
580
- export declare function getApprovalChainForRequest(org: Organization, requestType: string, amount?: number): ApproverSpec[];
581
- /**
582
- * Find manager for a position (follows reportsTo chain)
583
- */
584
- export declare function findManager(org: Organization, positionId: string): Position | null;
585
- //# sourceMappingURL=organization.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../src/organization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAA;IAEV,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;IAEZ,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IAEjB,mBAAmB;IACnB,SAAS,CAAC,EAAE,IAAI,CAAA;IAEhB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAE/B,kBAAkB;IAClB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAE1B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IAEd,8BAA8B;IAC9B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;IAEtB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IAErC,6BAA6B;IAC7B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAA;IAEhC,yBAAyB;IACzB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;IAEhC,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB,qBAAqB;IACrB,aAAa,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,CAAA;QACb,GAAG,EAAE,MAAM,CAAA;QACX,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IAED,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAA;IAEV,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAA;IAEZ,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,WAAW,CAAA;IAElB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IAEd,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,uBAAuB;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAEhB,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAE7C,gCAAgC;IAChC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;IAEtB,wCAAwC;IACxC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAA;IAEhC,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,IAAI;IACnB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAA;IAEV,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAA;IAEZ,wBAAwB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,yBAAyB;IACzB,IAAI,CAAC,EAAE,WAAW,CAAA;IAElB,qBAAqB;IACrB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IAEtB,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IAErB,uCAAuC;IACvC,SAAS,CAAC,EAAE,aAAa,CAAA;IAEzB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAE7C,mCAAmC;IACnC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAE9B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,YAAY,CAAA;IAEvB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IAEvB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB,4BAA4B;IAC5B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,QAAQ;IACvB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAA;IAEV,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;IAEb,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IAEd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAExB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAA;IAEtC,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IAExB,+CAA+C;IAC/C,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAEhD,iBAAiB;IACjB,SAAS,CAAC,EAAE,IAAI,CAAA;IAEhB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,IAAI,CAAA;IAEd,sBAAsB;IACtB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAA;IAEtD,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAE1C,mBAAmB;IACnB,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,oBAAoB;IACpB,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAA;IAEnE,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,oBAAoB;IACpB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;QAClC,MAAM,EAAE,MAAM,CAAA;QACd,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;IAED,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAMD;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEnC,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,WAAW,iBAAiB;IAChC,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAAA;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAE3B,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IAEnB,uCAAuC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAA;IAEV,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAA;IAEZ,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAA;IAEZ,sBAAsB;IACtB,MAAM,EAAE,aAAa,EAAE,CAAA;IAEvB,uBAAuB;IACvB,UAAU,CAAC,EAAE,cAAc,CAAA;IAE3B,sBAAsB;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,8BAA8B;IAC9B,SAAS,EAAE,YAAY,EAAE,CAAA;IAEzB,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,iEAAiE;IACjE,YAAY,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,KAAK,CAAA;IAEhD,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAA;IAEvF,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAA;IAElB,yBAAyB;IACzB,UAAU,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,MAAM,GAAG,UAAU,CAAA;IAE1E,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAMD;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAEhB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAA;IAElB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAErC,oCAAoC;IACpC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAE7D,4BAA4B;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAA;IAEpB,iCAAiC;IACjC,SAAS,EAAE,MAAM,EAAE,CAAA;IAEnB,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,IAAI,CA0G5B;AAqBD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,YAAY,EAAE,CAehB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,GACjB,QAAQ,GAAG,IAAI,CAiBjB"}