@elevasis/core 0.23.0 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4343 -2690
- package/dist/index.js +1101 -156
- package/dist/knowledge/index.d.ts +574 -210
- package/dist/knowledge/index.js +104 -1
- package/dist/organization-model/index.d.ts +4343 -2690
- package/dist/organization-model/index.js +1101 -156
- package/dist/test-utils/index.d.ts +483 -109
- package/dist/test-utils/index.js +904 -144
- package/package.json +3 -3
- package/src/README.md +14 -14
- package/src/__tests__/publish.test.ts +24 -24
- package/src/__tests__/template-core-compatibility.test.ts +9 -12
- package/src/_gen/__tests__/__snapshots__/contracts.md.snap +2137 -2093
- package/src/_gen/__tests__/scaffold-contracts.test.ts +30 -30
- package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +217 -217
- package/src/auth/multi-tenancy/credentials/server/encryption.ts +69 -69
- package/src/auth/multi-tenancy/credentials/server/kek-loader.ts +37 -37
- package/src/auth/multi-tenancy/index.ts +26 -26
- package/src/auth/multi-tenancy/invitations/api-schemas.ts +104 -104
- package/src/auth/multi-tenancy/memberships/api-schemas.ts +143 -143
- package/src/auth/multi-tenancy/memberships/index.ts +26 -26
- package/src/auth/multi-tenancy/memberships/membership.ts +130 -130
- package/src/auth/multi-tenancy/organizations/__tests__/api-schemas.test.ts +194 -194
- package/src/auth/multi-tenancy/organizations/api-schemas.ts +136 -136
- package/src/auth/multi-tenancy/permissions.test.ts +42 -42
- package/src/auth/multi-tenancy/permissions.ts +123 -123
- package/src/auth/multi-tenancy/role-management/api-schemas.ts +78 -78
- package/src/auth/multi-tenancy/role-management/index.ts +16 -16
- package/src/auth/multi-tenancy/theme-presets.ts +45 -45
- package/src/auth/multi-tenancy/types.ts +57 -57
- package/src/auth/multi-tenancy/users/api-schemas.ts +165 -165
- package/src/business/README.md +2 -2
- package/src/business/acquisition/activity-events.test.ts +250 -250
- package/src/business/acquisition/activity-events.ts +93 -93
- package/src/business/acquisition/api-schemas.test.ts +1883 -1843
- package/src/business/acquisition/api-schemas.ts +1492 -1497
- package/src/business/acquisition/build-templates.test.ts +240 -240
- package/src/business/acquisition/build-templates.ts +98 -98
- package/src/business/acquisition/crm-next-action.test.ts +262 -262
- package/src/business/acquisition/crm-next-action.ts +220 -220
- package/src/business/acquisition/crm-priority.test.ts +216 -216
- package/src/business/acquisition/crm-priority.ts +349 -349
- package/src/business/acquisition/crm-state-actions.test.ts +153 -153
- package/src/business/acquisition/deal-ownership.test.ts +351 -351
- package/src/business/acquisition/deal-ownership.ts +120 -120
- package/src/business/acquisition/derive-actions.test.ts +129 -104
- package/src/business/acquisition/derive-actions.ts +74 -84
- package/src/business/acquisition/index.ts +171 -170
- package/src/business/acquisition/ontology-validation.ts +309 -0
- package/src/business/acquisition/stateful.ts +30 -30
- package/src/business/acquisition/types.ts +396 -396
- package/src/business/clients/api-schemas.test.ts +115 -115
- package/src/business/clients/api-schemas.ts +158 -158
- package/src/business/clients/index.ts +1 -1
- package/src/business/crm/api-schemas.ts +40 -40
- package/src/business/crm/index.ts +1 -1
- package/src/business/deals/api-schemas.ts +87 -87
- package/src/business/deals/index.ts +1 -1
- package/src/business/index.ts +5 -5
- package/src/business/projects/types.ts +144 -144
- package/src/commands/queue/types/task.ts +15 -15
- package/src/execution/core/runner-types.ts +61 -61
- package/src/execution/core/sse-executions.ts +7 -7
- package/src/execution/engine/__tests__/fixtures/test-agents.ts +10 -10
- package/src/execution/engine/agent/core/__tests__/agent.test.ts +16 -16
- package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +4 -4
- package/src/execution/engine/agent/core/types.ts +25 -25
- package/src/execution/engine/agent/index.ts +6 -6
- package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +24 -24
- package/src/execution/engine/index.ts +443 -443
- package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +298 -298
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.test.ts +55 -55
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +107 -107
- package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.test.ts +48 -48
- package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.ts +99 -99
- package/src/execution/engine/tools/integration/server/adapters/apollo/index.ts +1 -1
- package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +363 -363
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +162 -162
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +316 -316
- package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.test.ts +18 -18
- package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.ts +194 -194
- package/src/execution/engine/tools/integration/server/adapters/clickup/index.ts +7 -7
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +204 -204
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +105 -105
- package/src/execution/engine/tools/integration/server/adapters/google-calendar/google-calendar-adapter.ts +428 -428
- package/src/execution/engine/tools/integration/server/adapters/google-calendar/index.ts +2 -2
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -261
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1474 -1474
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +103 -103
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.test.ts +88 -88
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +141 -141
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +76 -76
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +182 -182
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +310 -310
- package/src/execution/engine/tools/integration/service.test.ts +239 -239
- package/src/execution/engine/tools/integration/service.ts +172 -172
- package/src/execution/engine/tools/integration/tool.ts +255 -255
- package/src/execution/engine/tools/lead-service-types.ts +1005 -1005
- package/src/execution/engine/tools/messages.ts +43 -43
- package/src/execution/engine/tools/platform/acquisition/company-tools.ts +7 -7
- package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +6 -6
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -6
- package/src/execution/engine/tools/platform/acquisition/types.ts +280 -280
- package/src/execution/engine/tools/platform/email/types.ts +97 -97
- package/src/execution/engine/tools/registry.ts +704 -704
- package/src/execution/engine/tools/tool-maps.ts +831 -831
- package/src/execution/engine/tools/types.ts +234 -234
- package/src/execution/engine/workflow/types.ts +195 -197
- package/src/execution/external/__tests__/api-schemas.test.ts +127 -127
- package/src/execution/external/api-schemas.ts +40 -40
- package/src/execution/external/index.ts +1 -1
- package/src/index.ts +18 -18
- package/src/integrations/credentials/__tests__/api-schemas.test.ts +420 -420
- package/src/integrations/credentials/api-schemas.ts +146 -146
- package/src/integrations/credentials/schemas.ts +200 -200
- package/src/integrations/oauth/__tests__/provider-registry.test.ts +7 -7
- package/src/integrations/oauth/provider-registry.ts +74 -74
- package/src/integrations/oauth/server/credentials.ts +43 -43
- package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +327 -327
- package/src/integrations/webhook-endpoints/api-schemas.ts +103 -103
- package/src/integrations/webhook-endpoints/types.ts +58 -58
- package/src/knowledge/README.md +32 -32
- package/src/knowledge/__tests__/queries.test.ts +626 -535
- package/src/knowledge/format.ts +99 -99
- package/src/knowledge/index.ts +5 -5
- package/src/knowledge/published.ts +5 -5
- package/src/knowledge/queries.ts +269 -218
- package/src/operations/activities/api-schemas.ts +80 -80
- package/src/operations/activities/types.ts +64 -64
- package/src/organization-model/README.md +149 -149
- package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -210
- package/src/organization-model/__tests__/defaults.test.ts +168 -168
- package/src/organization-model/__tests__/domains/actions.test.ts +78 -56
- package/src/organization-model/__tests__/domains/customers.test.ts +299 -299
- package/src/organization-model/__tests__/domains/entities.test.ts +56 -56
- package/src/organization-model/__tests__/domains/goals.test.ts +493 -493
- package/src/organization-model/__tests__/domains/identity.test.ts +280 -280
- package/src/organization-model/__tests__/domains/navigation.test.ts +268 -268
- package/src/organization-model/__tests__/domains/offerings.test.ts +414 -414
- package/src/organization-model/__tests__/domains/policies.test.ts +323 -323
- package/src/organization-model/__tests__/domains/resource-mappings.test.ts +293 -293
- package/src/organization-model/__tests__/domains/resources.test.ts +387 -277
- package/src/organization-model/__tests__/domains/roles.test.ts +463 -463
- package/src/organization-model/__tests__/domains/statuses.test.ts +246 -246
- package/src/organization-model/__tests__/domains/systems.test.ts +209 -209
- package/src/organization-model/__tests__/domains/topology.test.ts +188 -0
- package/src/organization-model/__tests__/flatten-additive-merge.test.ts +362 -361
- package/src/organization-model/__tests__/foundation.test.ts +77 -77
- package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -144
- package/src/organization-model/__tests__/graph.test.ts +1312 -862
- package/src/organization-model/__tests__/icons.test.ts +10 -1
- package/src/organization-model/__tests__/knowledge.test.ts +251 -15
- package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -438
- package/src/organization-model/__tests__/migration-helpers.test.ts +591 -591
- package/src/organization-model/__tests__/prospecting-ssot.test.ts +103 -103
- package/src/organization-model/__tests__/recursive-system-schema.test.ts +535 -506
- package/src/organization-model/__tests__/resolve.test.ts +274 -164
- package/src/organization-model/__tests__/schema.test.ts +844 -301
- package/src/organization-model/__tests__/surface-projection.test.ts +284 -284
- package/src/organization-model/catalogs/lead-gen.ts +144 -144
- package/src/organization-model/content-kinds/config.ts +36 -36
- package/src/organization-model/content-kinds/index.ts +76 -72
- package/src/organization-model/content-kinds/pipeline.ts +68 -68
- package/src/organization-model/content-kinds/registry.ts +44 -44
- package/src/organization-model/content-kinds/status.ts +71 -71
- package/src/organization-model/content-kinds/template.ts +83 -83
- package/src/organization-model/content-kinds/types.ts +117 -117
- package/src/organization-model/contracts.ts +27 -27
- package/src/organization-model/defaults.ts +42 -50
- package/src/organization-model/domains/actions.ts +333 -239
- package/src/organization-model/domains/customers.ts +78 -78
- package/src/organization-model/domains/entities.ts +144 -144
- package/src/organization-model/domains/goals.ts +83 -83
- package/src/organization-model/domains/knowledge.ts +117 -101
- package/src/organization-model/domains/navigation.ts +139 -139
- package/src/organization-model/domains/offerings.ts +71 -71
- package/src/organization-model/domains/policies.ts +102 -102
- package/src/organization-model/domains/projects.ts +14 -14
- package/src/organization-model/domains/prospecting.ts +395 -395
- package/src/organization-model/domains/resources.ts +202 -124
- package/src/organization-model/domains/roles.ts +96 -96
- package/src/organization-model/domains/sales.test.ts +218 -218
- package/src/organization-model/domains/sales.ts +380 -380
- package/src/organization-model/domains/shared.ts +63 -63
- package/src/organization-model/domains/statuses.ts +339 -339
- package/src/organization-model/domains/systems.ts +217 -172
- package/src/organization-model/domains/topology.ts +261 -0
- package/src/organization-model/foundation.ts +75 -75
- package/src/organization-model/graph/build.ts +1043 -867
- package/src/organization-model/graph/index.ts +4 -4
- package/src/organization-model/graph/link.ts +10 -10
- package/src/organization-model/graph/schema.ts +75 -68
- package/src/organization-model/graph/types.ts +71 -64
- package/src/organization-model/helpers.ts +289 -241
- package/src/organization-model/icons.ts +78 -66
- package/src/organization-model/index.ts +128 -125
- package/src/organization-model/migration-helpers.ts +247 -244
- package/src/organization-model/ontology.ts +658 -0
- package/src/organization-model/organization-graph.mdx +110 -90
- package/src/organization-model/organization-model.mdx +225 -213
- package/src/organization-model/published.ts +299 -222
- package/src/organization-model/resolve.ts +146 -91
- package/src/organization-model/schema.ts +818 -659
- package/src/organization-model/surface-projection.ts +212 -212
- package/src/organization-model/types.ts +179 -155
- package/src/platform/api/types.ts +38 -38
- package/src/platform/constants/versions.ts +3 -3
- package/src/platform/index.ts +23 -23
- package/src/platform/registry/__tests__/command-view.test.ts +10 -10
- package/src/platform/registry/__tests__/resource-link.test.ts +35 -35
- package/src/platform/registry/__tests__/resource-registry.integration.test.ts +20 -20
- package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -245
- package/src/platform/registry/__tests__/resource-registry.test.ts +2053 -2053
- package/src/platform/registry/__tests__/validation.test.ts +1444 -1259
- package/src/platform/registry/command-view.ts +10 -10
- package/src/platform/registry/index.ts +103 -103
- package/src/platform/registry/resource-link.ts +32 -32
- package/src/platform/registry/resource-registry.ts +886 -886
- package/src/platform/registry/serialization.ts +295 -295
- package/src/platform/registry/serialized-types.ts +166 -166
- package/src/platform/registry/stats-types.ts +68 -68
- package/src/platform/registry/types.ts +425 -425
- package/src/platform/registry/validation.ts +876 -684
- package/src/platform/utils/__tests__/validation.test.ts +1084 -1084
- package/src/platform/utils/validation.ts +425 -425
- package/src/projects/api-schemas.test.ts +39 -39
- package/src/projects/api-schemas.ts +291 -291
- package/src/reference/_generated/contracts.md +2136 -2093
- package/src/reference/glossary.md +76 -76
- package/src/scaffold-registry/__tests__/index.test.ts +206 -206
- package/src/scaffold-registry/__tests__/schema.test.ts +166 -166
- package/src/scaffold-registry/index.ts +392 -392
- package/src/scaffold-registry/schema.ts +243 -243
- package/src/server.ts +289 -289
- package/src/supabase/database.types.ts +3 -0
- package/src/test-utils/README.md +37 -37
- package/src/test-utils/entities.ts +108 -108
- package/src/test-utils/fixtures/memberships.ts +82 -82
- package/src/test-utils/index.ts +12 -12
- package/src/test-utils/organization-model.ts +65 -65
- package/src/test-utils/published.ts +6 -6
- package/src/test-utils/rls/RLSTestContext.ts +588 -588
- package/src/test-utils/test-utils.test.ts +44 -44
|
@@ -1,117 +1,172 @@
|
|
|
1
|
-
import { DEFAULT_ORGANIZATION_MODEL } from './defaults'
|
|
2
|
-
import { listAllSystems } from './helpers'
|
|
3
|
-
import { OrganizationModelSchema } from './schema'
|
|
4
|
-
import type { DeepPartial, OrganizationModel, OrganizationModelSystemEntry } from './types'
|
|
5
|
-
import type { ResourceEntry } from './domains/resources'
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* A system entry enriched with the list of resources that directly attach to
|
|
9
|
-
* this system (i.e. `resource.systemPath` exactly matches the system's path).
|
|
10
|
-
*
|
|
11
|
-
* Descendant rollup is NOT included here — callers that need it should use
|
|
12
|
-
* `getResourcesForSystem(model, path, { includeDescendants: true })` from helpers.
|
|
13
|
-
*/
|
|
14
|
-
export type ResolvedSystemEntry = OrganizationModelSystemEntry & {
|
|
15
|
-
/** Resources whose `systemPath` exactly matches this system's path. */
|
|
16
|
-
resources?: ResourceEntry[]
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* An `OrganizationModel` where every flat-system entry in `systems` has been
|
|
21
|
-
* enriched with its directly-attached `resources`.
|
|
22
|
-
*
|
|
23
|
-
* Produced by `resolveOrganizationModelWithResources`. The flat `systems` map
|
|
24
|
-
* only covers top-level keys (same shape as `OrganizationModel.systems`);
|
|
25
|
-
* hierarchical walk uses `listAllSystems` from helpers.
|
|
26
|
-
*/
|
|
1
|
+
import { DEFAULT_ORGANIZATION_MODEL } from './defaults'
|
|
2
|
+
import { listAllSystems, resolveSystemConfig } from './helpers'
|
|
3
|
+
import { OrganizationModelSchema } from './schema'
|
|
4
|
+
import type { DeepPartial, OrganizationModel, OrganizationModelSystemEntry } from './types'
|
|
5
|
+
import type { ResourceEntry } from './domains/resources'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A system entry enriched with the list of resources that directly attach to
|
|
9
|
+
* this system (i.e. `resource.systemPath` exactly matches the system's path).
|
|
10
|
+
*
|
|
11
|
+
* Descendant rollup is NOT included here — callers that need it should use
|
|
12
|
+
* `getResourcesForSystem(model, path, { includeDescendants: true })` from helpers.
|
|
13
|
+
*/
|
|
14
|
+
export type ResolvedSystemEntry = OrganizationModelSystemEntry & {
|
|
15
|
+
/** Resources whose `systemPath` exactly matches this system's path. */
|
|
16
|
+
resources?: ResourceEntry[]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* An `OrganizationModel` where every flat-system entry in `systems` has been
|
|
21
|
+
* enriched with its directly-attached `resources`.
|
|
22
|
+
*
|
|
23
|
+
* Produced by `resolveOrganizationModelWithResources`. The flat `systems` map
|
|
24
|
+
* only covers top-level keys (same shape as `OrganizationModel.systems`);
|
|
25
|
+
* hierarchical walk uses `listAllSystems` from helpers.
|
|
26
|
+
*/
|
|
27
27
|
export type ResolvedOrganizationModel = Omit<OrganizationModel, 'systems'> & {
|
|
28
28
|
systems: Record<string, ResolvedSystemEntry>
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
export type ResolveOrganizationModelOptions = {
|
|
32
|
+
/**
|
|
33
|
+
* Tenant-style overrides merge against the generic default fixture by
|
|
34
|
+
* default. Full canonical models can disable that merge to avoid inheriting
|
|
35
|
+
* fixture-only Systems.
|
|
36
|
+
*/
|
|
37
|
+
mergeDefaults?: boolean
|
|
38
|
+
}
|
|
39
|
+
|
|
31
40
|
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
32
41
|
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
33
42
|
}
|
|
34
43
|
|
|
35
|
-
function
|
|
36
|
-
|
|
37
|
-
return base
|
|
38
|
-
}
|
|
44
|
+
function collectNestedSystemPaths(systems: Record<string, unknown>, prefix = ''): Set<string> {
|
|
45
|
+
const paths = new Set<string>()
|
|
39
46
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
for (const [key, value] of Object.entries(systems)) {
|
|
48
|
+
if (!isPlainObject(value)) continue
|
|
49
|
+
|
|
50
|
+
const path = prefix ? `${prefix}.${key}` : key
|
|
51
|
+
for (const childKey of ['systems', 'subsystems']) {
|
|
52
|
+
const childSystems = value[childKey]
|
|
53
|
+
if (!isPlainObject(childSystems)) continue
|
|
43
54
|
|
|
44
|
-
|
|
45
|
-
|
|
55
|
+
for (const childPath of collectNestedSystemPaths(childSystems, path)) {
|
|
56
|
+
paths.add(childPath)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (prefix !== '') {
|
|
61
|
+
paths.add(path)
|
|
62
|
+
}
|
|
46
63
|
}
|
|
47
64
|
|
|
48
|
-
|
|
65
|
+
return paths
|
|
66
|
+
}
|
|
49
67
|
|
|
50
|
-
|
|
51
|
-
|
|
68
|
+
function pruneFlatSystemDescendantCollisions(
|
|
69
|
+
base: Record<string, unknown>,
|
|
70
|
+
override: Record<string, unknown>
|
|
71
|
+
): Record<string, unknown> {
|
|
72
|
+
const result: Record<string, unknown> = { ...base }
|
|
52
73
|
|
|
53
|
-
|
|
54
|
-
result[
|
|
74
|
+
for (const nestedPath of collectNestedSystemPaths(override)) {
|
|
75
|
+
delete result[nestedPath]
|
|
55
76
|
}
|
|
56
77
|
|
|
57
|
-
return result
|
|
78
|
+
return result
|
|
58
79
|
}
|
|
59
80
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
81
|
+
function deepMerge<T>(base: T, override: DeepPartial<T> | undefined): T {
|
|
82
|
+
if (override === undefined) {
|
|
83
|
+
return base
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (Array.isArray(base)) {
|
|
87
|
+
return (override as T) ?? base
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (!isPlainObject(base) || !isPlainObject(override)) {
|
|
91
|
+
return (override as T) ?? base
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const result: Record<string, unknown> = { ...base }
|
|
95
|
+
|
|
96
|
+
for (const [key, value] of Object.entries(override)) {
|
|
97
|
+
if (value === undefined) continue
|
|
63
98
|
|
|
99
|
+
const existing = result[key]
|
|
100
|
+
if (key === 'systems' && isPlainObject(existing) && isPlainObject(value)) {
|
|
101
|
+
result[key] = deepMerge(pruneFlatSystemDescendantCollisions(existing, value), value)
|
|
102
|
+
continue
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
result[key] = isPlainObject(existing) && isPlainObject(value) ? deepMerge(existing, value) : value
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return result as T
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function defineOrganizationModel<T extends DeepPartial<OrganizationModel>>(model: T): T {
|
|
112
|
+
return model
|
|
113
|
+
}
|
|
114
|
+
|
|
64
115
|
export function resolveOrganizationModel(
|
|
65
116
|
override?: DeepPartial<OrganizationModel>,
|
|
66
|
-
|
|
117
|
+
organizationIdOrOptions?: string | ResolveOrganizationModelOptions,
|
|
118
|
+
options?: ResolveOrganizationModelOptions
|
|
67
119
|
): OrganizationModel {
|
|
68
|
-
|
|
69
|
-
const
|
|
120
|
+
const resolvedOptions = typeof organizationIdOrOptions === 'object' ? organizationIdOrOptions : options
|
|
121
|
+
const mergeDefaults = resolvedOptions?.mergeDefaults ?? true
|
|
122
|
+
const merged = mergeDefaults ? deepMerge(DEFAULT_ORGANIZATION_MODEL, override) : (override ?? {})
|
|
70
123
|
// Phase 4: compound-domain sanity gate for model.sales?.pipelines removed.
|
|
71
|
-
// Pipeline data now lives in system.content; use getAllPipelines(model) from
|
|
72
|
-
// migration-helpers to check pipeline presence when needed.
|
|
73
|
-
return OrganizationModelSchema.parse(merged)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Resolve the organization model and enrich each flat system entry in
|
|
78
|
-
* `model.systems` with the list of resources whose `systemPath` exactly
|
|
79
|
-
* matches that system's flat key.
|
|
80
|
-
*
|
|
81
|
-
* This is a pure additive view — no schema is changed. Descendant resource
|
|
82
|
-
* rollup is intentionally excluded; consumers that need it can call
|
|
83
|
-
* `getResourcesForSystem(model, path, { includeDescendants: true })`.
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* const resolved = resolveOrganizationModelWithResources(override)
|
|
87
|
-
* resolved.systems['sys.lead-gen']?.resources
|
|
88
|
-
* // → ResourceEntry[] | undefined
|
|
89
|
-
*/
|
|
90
|
-
export function resolveOrganizationModelWithResources(
|
|
91
|
-
override?: DeepPartial<OrganizationModel>,
|
|
92
|
-
organizationId?: string
|
|
93
|
-
): ResolvedOrganizationModel {
|
|
94
|
-
const model = resolveOrganizationModel(override, organizationId)
|
|
95
|
-
|
|
96
|
-
// Build a path → resource[] index from the flat resources map.
|
|
97
|
-
// Only direct system-path matches (no descendant rollup).
|
|
98
|
-
const byPath = new Map<string, ResourceEntry[]>()
|
|
99
|
-
for (const resource of Object.values(model.resources ?? {})) {
|
|
100
|
-
const existing = byPath.get(resource.systemPath)
|
|
101
|
-
if (existing) {
|
|
102
|
-
existing.push(resource)
|
|
103
|
-
} else {
|
|
104
|
-
byPath.set(resource.systemPath, [resource])
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Enrich every system entry, including nested subsystems, with directly
|
|
109
|
-
// attached resources keyed by computed system path.
|
|
110
|
-
const enrichedSystems: Record<string, ResolvedSystemEntry> = {}
|
|
124
|
+
// Pipeline data now lives in system.content; use getAllPipelines(model) from
|
|
125
|
+
// migration-helpers to check pipeline presence when needed.
|
|
126
|
+
return OrganizationModelSchema.parse(merged)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Resolve the organization model and enrich each flat system entry in
|
|
131
|
+
* `model.systems` with the list of resources whose `systemPath` exactly
|
|
132
|
+
* matches that system's flat key.
|
|
133
|
+
*
|
|
134
|
+
* This is a pure additive view — no schema is changed. Descendant resource
|
|
135
|
+
* rollup is intentionally excluded; consumers that need it can call
|
|
136
|
+
* `getResourcesForSystem(model, path, { includeDescendants: true })`.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* const resolved = resolveOrganizationModelWithResources(override)
|
|
140
|
+
* resolved.systems['sys.lead-gen']?.resources
|
|
141
|
+
* // → ResourceEntry[] | undefined
|
|
142
|
+
*/
|
|
143
|
+
export function resolveOrganizationModelWithResources(
|
|
144
|
+
override?: DeepPartial<OrganizationModel>,
|
|
145
|
+
organizationId?: string
|
|
146
|
+
): ResolvedOrganizationModel {
|
|
147
|
+
const model = resolveOrganizationModel(override, organizationId)
|
|
148
|
+
|
|
149
|
+
// Build a path → resource[] index from the flat resources map.
|
|
150
|
+
// Only direct system-path matches (no descendant rollup).
|
|
151
|
+
const byPath = new Map<string, ResourceEntry[]>()
|
|
152
|
+
for (const resource of Object.values(model.resources ?? {})) {
|
|
153
|
+
const existing = byPath.get(resource.systemPath)
|
|
154
|
+
if (existing) {
|
|
155
|
+
existing.push(resource)
|
|
156
|
+
} else {
|
|
157
|
+
byPath.set(resource.systemPath, [resource])
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Enrich every system entry, including nested subsystems, with directly
|
|
162
|
+
// attached resources keyed by computed system path.
|
|
163
|
+
const enrichedSystems: Record<string, ResolvedSystemEntry> = {}
|
|
111
164
|
for (const { path, system } of listAllSystems(model)) {
|
|
112
165
|
const resources = byPath.get(path) ?? byPath.get(system.id)
|
|
113
|
-
|
|
166
|
+
const config = resolveSystemConfig(model, path)
|
|
167
|
+
enrichedSystems[path] =
|
|
168
|
+
resources !== undefined ? { ...system, id: path, config, resources } : { ...system, id: path, config }
|
|
114
169
|
}
|
|
115
|
-
|
|
116
|
-
return { ...model, systems: enrichedSystems }
|
|
117
|
-
}
|
|
170
|
+
|
|
171
|
+
return { ...model, systems: enrichedSystems }
|
|
172
|
+
}
|