@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,71 +1,71 @@
|
|
|
1
|
-
import { z } from 'zod'
|
|
2
|
-
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
// Pricing model — the four canonical pricing structures used in B2B SaaS and
|
|
5
|
-
// professional services. "custom" covers bespoke / negotiated pricing.
|
|
6
|
-
// ---------------------------------------------------------------------------
|
|
7
|
-
|
|
8
|
-
export const PricingModelSchema = z
|
|
9
|
-
.enum(['one-time', 'subscription', 'usage-based', 'custom'])
|
|
10
|
-
.meta({ label: 'Pricing model', color: 'green' })
|
|
11
|
-
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
// Product schema — one entry per distinct offering (product or service).
|
|
14
|
-
// Modeled after Business Model Canvas "Value Propositions" and company profile
|
|
15
|
-
// product/service catalog language. Fields use plain English throughout.
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
17
|
-
|
|
18
|
-
export const ProductSchema = z.object({
|
|
19
|
-
/** Stable unique identifier for the product (e.g. "product-starter-plan"). */
|
|
20
|
-
id: z.string().trim().min(1).max(100),
|
|
21
|
-
/** Domain-map iteration order. Convention: multiples of 10 (10, 20, 30, ...) to allow easy insertion. */
|
|
22
|
-
order: z.number(),
|
|
23
|
-
/** Human-readable name shown to agents and in UI (e.g. "Starter Plan"). */
|
|
24
|
-
name: z.string().trim().max(200).default(''),
|
|
25
|
-
/** One or two sentences describing what this product/service delivers. */
|
|
26
|
-
description: z.string().trim().max(2000).default(''),
|
|
27
|
-
/**
|
|
28
|
-
* How this product is priced:
|
|
29
|
-
* - "one-time" — single purchase (setup fee, project fee)
|
|
30
|
-
* - "subscription" — recurring (monthly/annual SaaS, retainer)
|
|
31
|
-
* - "usage-based" — metered by consumption (API calls, seats)
|
|
32
|
-
* - "custom" — negotiated or bespoke pricing
|
|
33
|
-
*/
|
|
34
|
-
pricingModel: PricingModelSchema.default('custom'),
|
|
35
|
-
/** Base price amount (≥ 0). Currency unit defined by `currency`. */
|
|
36
|
-
price: z.number().min(0).default(0),
|
|
37
|
-
/**
|
|
38
|
-
* ISO 4217 currency code (e.g. "USD", "EUR", "GBP").
|
|
39
|
-
* Free-form string to accommodate any currency; defaults to "USD".
|
|
40
|
-
*/
|
|
41
|
-
currency: z.string().trim().max(10).default('USD'),
|
|
42
|
-
/**
|
|
43
|
-
* IDs of customer segments this product targets.
|
|
44
|
-
* Each id must reference a declared `customers.segments[].id`.
|
|
45
|
-
* Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
|
|
46
|
-
*/
|
|
47
|
-
targetSegmentIds: z.array(z.string().trim().min(1)).default([]),
|
|
48
|
-
/**
|
|
49
|
-
* Optional: ID of the platform system responsible for delivering this product.
|
|
50
|
-
* When present, must reference a declared `systems.systems[].id`.
|
|
51
|
-
* Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
|
|
52
|
-
*/
|
|
53
|
-
deliveryFeatureId: z.string().trim().min(1).optional()
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
// ---------------------------------------------------------------------------
|
|
57
|
-
// Offerings domain schema — id-keyed map of products and services.
|
|
58
|
-
// ---------------------------------------------------------------------------
|
|
59
|
-
|
|
60
|
-
export const OfferingsDomainSchema = z
|
|
61
|
-
.record(z.string(), ProductSchema)
|
|
62
|
-
.refine((record) => Object.entries(record).every(([key, entry]) => entry.id === key), {
|
|
63
|
-
message: 'Each product entry id must match its map key'
|
|
64
|
-
})
|
|
65
|
-
.default({})
|
|
66
|
-
|
|
67
|
-
// ---------------------------------------------------------------------------
|
|
68
|
-
// Seed — empty by default; adapters populate with real product definitions.
|
|
69
|
-
// ---------------------------------------------------------------------------
|
|
70
|
-
|
|
71
|
-
export const DEFAULT_ORGANIZATION_MODEL_OFFERINGS: z.infer<typeof OfferingsDomainSchema> = {}
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Pricing model — the four canonical pricing structures used in B2B SaaS and
|
|
5
|
+
// professional services. "custom" covers bespoke / negotiated pricing.
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
export const PricingModelSchema = z
|
|
9
|
+
.enum(['one-time', 'subscription', 'usage-based', 'custom'])
|
|
10
|
+
.meta({ label: 'Pricing model', color: 'green' })
|
|
11
|
+
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Product schema — one entry per distinct offering (product or service).
|
|
14
|
+
// Modeled after Business Model Canvas "Value Propositions" and company profile
|
|
15
|
+
// product/service catalog language. Fields use plain English throughout.
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
export const ProductSchema = z.object({
|
|
19
|
+
/** Stable unique identifier for the product (e.g. "product-starter-plan"). */
|
|
20
|
+
id: z.string().trim().min(1).max(100),
|
|
21
|
+
/** Domain-map iteration order. Convention: multiples of 10 (10, 20, 30, ...) to allow easy insertion. */
|
|
22
|
+
order: z.number(),
|
|
23
|
+
/** Human-readable name shown to agents and in UI (e.g. "Starter Plan"). */
|
|
24
|
+
name: z.string().trim().max(200).default(''),
|
|
25
|
+
/** One or two sentences describing what this product/service delivers. */
|
|
26
|
+
description: z.string().trim().max(2000).default(''),
|
|
27
|
+
/**
|
|
28
|
+
* How this product is priced:
|
|
29
|
+
* - "one-time" — single purchase (setup fee, project fee)
|
|
30
|
+
* - "subscription" — recurring (monthly/annual SaaS, retainer)
|
|
31
|
+
* - "usage-based" — metered by consumption (API calls, seats)
|
|
32
|
+
* - "custom" — negotiated or bespoke pricing
|
|
33
|
+
*/
|
|
34
|
+
pricingModel: PricingModelSchema.default('custom'),
|
|
35
|
+
/** Base price amount (≥ 0). Currency unit defined by `currency`. */
|
|
36
|
+
price: z.number().min(0).default(0),
|
|
37
|
+
/**
|
|
38
|
+
* ISO 4217 currency code (e.g. "USD", "EUR", "GBP").
|
|
39
|
+
* Free-form string to accommodate any currency; defaults to "USD".
|
|
40
|
+
*/
|
|
41
|
+
currency: z.string().trim().max(10).default('USD'),
|
|
42
|
+
/**
|
|
43
|
+
* IDs of customer segments this product targets.
|
|
44
|
+
* Each id must reference a declared `customers.segments[].id`.
|
|
45
|
+
* Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
|
|
46
|
+
*/
|
|
47
|
+
targetSegmentIds: z.array(z.string().trim().min(1)).default([]),
|
|
48
|
+
/**
|
|
49
|
+
* Optional: ID of the platform system responsible for delivering this product.
|
|
50
|
+
* When present, must reference a declared `systems.systems[].id`.
|
|
51
|
+
* Cross-reference enforced in `OrganizationModelSchema.superRefine()`.
|
|
52
|
+
*/
|
|
53
|
+
deliveryFeatureId: z.string().trim().min(1).optional()
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Offerings domain schema — id-keyed map of products and services.
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
|
|
60
|
+
export const OfferingsDomainSchema = z
|
|
61
|
+
.record(z.string(), ProductSchema)
|
|
62
|
+
.refine((record) => Object.entries(record).every(([key, entry]) => entry.id === key), {
|
|
63
|
+
message: 'Each product entry id must match its map key'
|
|
64
|
+
})
|
|
65
|
+
.default({})
|
|
66
|
+
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Seed — empty by default; adapters populate with real product definitions.
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
|
|
71
|
+
export const DEFAULT_ORGANIZATION_MODEL_OFFERINGS: z.infer<typeof OfferingsDomainSchema> = {}
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import { z } from 'zod'
|
|
2
|
-
import { DescriptionSchema, LabelSchema, ModelIdSchema } from './shared'
|
|
3
|
-
import { EventIdSchema } from './resources'
|
|
4
|
-
|
|
5
|
-
export const PolicyIdSchema = ModelIdSchema
|
|
6
|
-
|
|
7
|
-
export const PolicyApplicabilitySchema = z.object({
|
|
8
|
-
systemIds: z.array(ModelIdSchema.meta({ ref: 'system' })).default([]),
|
|
9
|
-
actionIds: z.array(ModelIdSchema.meta({ ref: 'action' })).default([]),
|
|
10
|
-
resourceIds: z.array(ModelIdSchema.meta({ ref: 'resource' })).default([]),
|
|
11
|
-
roleIds: z.array(ModelIdSchema.meta({ ref: 'role' })).default([])
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
export const PolicyTriggerSchema = z.discriminatedUnion('kind', [
|
|
15
|
-
z.object({
|
|
16
|
-
kind: z.literal('event'),
|
|
17
|
-
eventId: EventIdSchema.meta({ ref: 'event' })
|
|
18
|
-
}),
|
|
19
|
-
z.object({
|
|
20
|
-
kind: z.literal('action-invocation'),
|
|
21
|
-
actionId: ModelIdSchema.meta({ ref: 'action' })
|
|
22
|
-
}),
|
|
23
|
-
z.object({
|
|
24
|
-
kind: z.literal('schedule'),
|
|
25
|
-
cron: z.string().trim().min(1).max(120)
|
|
26
|
-
}),
|
|
27
|
-
z.object({
|
|
28
|
-
kind: z.literal('manual')
|
|
29
|
-
})
|
|
30
|
-
])
|
|
31
|
-
|
|
32
|
-
export const PolicyPredicateSchema = z.discriminatedUnion('kind', [
|
|
33
|
-
z.object({
|
|
34
|
-
kind: z.literal('always')
|
|
35
|
-
}),
|
|
36
|
-
z.object({
|
|
37
|
-
kind: z.literal('expression'),
|
|
38
|
-
expression: z.string().trim().min(1).max(2000)
|
|
39
|
-
}),
|
|
40
|
-
z.object({
|
|
41
|
-
kind: z.literal('threshold'),
|
|
42
|
-
metric: ModelIdSchema,
|
|
43
|
-
operator: z.enum(['lt', 'lte', 'eq', 'gte', 'gt']).meta({ label: 'Operator' }),
|
|
44
|
-
value: z.number()
|
|
45
|
-
})
|
|
46
|
-
])
|
|
47
|
-
|
|
48
|
-
export const PolicyEffectSchema = z.discriminatedUnion('kind', [
|
|
49
|
-
z.object({
|
|
50
|
-
kind: z.literal('require-approval'),
|
|
51
|
-
roleId: ModelIdSchema.meta({ ref: 'role' }).optional()
|
|
52
|
-
}),
|
|
53
|
-
z.object({
|
|
54
|
-
kind: z.literal('invoke-action'),
|
|
55
|
-
actionId: ModelIdSchema.meta({ ref: 'action' })
|
|
56
|
-
}),
|
|
57
|
-
z.object({
|
|
58
|
-
kind: z.literal('notify-role'),
|
|
59
|
-
roleId: ModelIdSchema.meta({ ref: 'role' })
|
|
60
|
-
}),
|
|
61
|
-
z.object({
|
|
62
|
-
kind: z.literal('block')
|
|
63
|
-
})
|
|
64
|
-
])
|
|
65
|
-
|
|
66
|
-
export const PolicySchema = z.object({
|
|
67
|
-
id: PolicyIdSchema,
|
|
68
|
-
/** Domain-map iteration order. Convention: multiples of 10 (10, 20, 30, ...) to allow easy insertion. */
|
|
69
|
-
order: z.number(),
|
|
70
|
-
label: LabelSchema,
|
|
71
|
-
description: DescriptionSchema.optional(),
|
|
72
|
-
trigger: PolicyTriggerSchema,
|
|
73
|
-
predicate: PolicyPredicateSchema.default({ kind: 'always' }),
|
|
74
|
-
actions: z.array(PolicyEffectSchema).min(1),
|
|
75
|
-
appliesTo: PolicyApplicabilitySchema.default({
|
|
76
|
-
systemIds: [],
|
|
77
|
-
actionIds: [],
|
|
78
|
-
resourceIds: [],
|
|
79
|
-
roleIds: []
|
|
80
|
-
}),
|
|
81
|
-
lifecycle: z
|
|
82
|
-
.enum(['draft', 'beta', 'active', 'deprecated', 'archived'])
|
|
83
|
-
.meta({ label: 'Lifecycle', color: 'teal' })
|
|
84
|
-
.default('active')
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
export const PoliciesDomainSchema = z
|
|
88
|
-
.record(z.string(), PolicySchema)
|
|
89
|
-
.refine((record) => Object.entries(record).every(([key, entry]) => entry.id === key), {
|
|
90
|
-
message: 'Each policy entry id must match its map key'
|
|
91
|
-
})
|
|
92
|
-
.default({})
|
|
93
|
-
|
|
94
|
-
export const DEFAULT_ORGANIZATION_MODEL_POLICIES: z.infer<typeof PoliciesDomainSchema> = {}
|
|
95
|
-
|
|
96
|
-
export type PolicyId = z.infer<typeof PolicyIdSchema>
|
|
97
|
-
export type PolicyApplicability = z.infer<typeof PolicyApplicabilitySchema>
|
|
98
|
-
export type PolicyTrigger = z.infer<typeof PolicyTriggerSchema>
|
|
99
|
-
export type PolicyPredicate = z.infer<typeof PolicyPredicateSchema>
|
|
100
|
-
export type PolicyEffect = z.infer<typeof PolicyEffectSchema>
|
|
101
|
-
export type Policy = z.infer<typeof PolicySchema>
|
|
102
|
-
export type PoliciesDomain = z.infer<typeof PoliciesDomainSchema>
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { DescriptionSchema, LabelSchema, ModelIdSchema } from './shared'
|
|
3
|
+
import { EventIdSchema } from './resources'
|
|
4
|
+
|
|
5
|
+
export const PolicyIdSchema = ModelIdSchema
|
|
6
|
+
|
|
7
|
+
export const PolicyApplicabilitySchema = z.object({
|
|
8
|
+
systemIds: z.array(ModelIdSchema.meta({ ref: 'system' })).default([]),
|
|
9
|
+
actionIds: z.array(ModelIdSchema.meta({ ref: 'action' })).default([]),
|
|
10
|
+
resourceIds: z.array(ModelIdSchema.meta({ ref: 'resource' })).default([]),
|
|
11
|
+
roleIds: z.array(ModelIdSchema.meta({ ref: 'role' })).default([])
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
export const PolicyTriggerSchema = z.discriminatedUnion('kind', [
|
|
15
|
+
z.object({
|
|
16
|
+
kind: z.literal('event'),
|
|
17
|
+
eventId: EventIdSchema.meta({ ref: 'event' })
|
|
18
|
+
}),
|
|
19
|
+
z.object({
|
|
20
|
+
kind: z.literal('action-invocation'),
|
|
21
|
+
actionId: ModelIdSchema.meta({ ref: 'action' })
|
|
22
|
+
}),
|
|
23
|
+
z.object({
|
|
24
|
+
kind: z.literal('schedule'),
|
|
25
|
+
cron: z.string().trim().min(1).max(120)
|
|
26
|
+
}),
|
|
27
|
+
z.object({
|
|
28
|
+
kind: z.literal('manual')
|
|
29
|
+
})
|
|
30
|
+
])
|
|
31
|
+
|
|
32
|
+
export const PolicyPredicateSchema = z.discriminatedUnion('kind', [
|
|
33
|
+
z.object({
|
|
34
|
+
kind: z.literal('always')
|
|
35
|
+
}),
|
|
36
|
+
z.object({
|
|
37
|
+
kind: z.literal('expression'),
|
|
38
|
+
expression: z.string().trim().min(1).max(2000)
|
|
39
|
+
}),
|
|
40
|
+
z.object({
|
|
41
|
+
kind: z.literal('threshold'),
|
|
42
|
+
metric: ModelIdSchema,
|
|
43
|
+
operator: z.enum(['lt', 'lte', 'eq', 'gte', 'gt']).meta({ label: 'Operator' }),
|
|
44
|
+
value: z.number()
|
|
45
|
+
})
|
|
46
|
+
])
|
|
47
|
+
|
|
48
|
+
export const PolicyEffectSchema = z.discriminatedUnion('kind', [
|
|
49
|
+
z.object({
|
|
50
|
+
kind: z.literal('require-approval'),
|
|
51
|
+
roleId: ModelIdSchema.meta({ ref: 'role' }).optional()
|
|
52
|
+
}),
|
|
53
|
+
z.object({
|
|
54
|
+
kind: z.literal('invoke-action'),
|
|
55
|
+
actionId: ModelIdSchema.meta({ ref: 'action' })
|
|
56
|
+
}),
|
|
57
|
+
z.object({
|
|
58
|
+
kind: z.literal('notify-role'),
|
|
59
|
+
roleId: ModelIdSchema.meta({ ref: 'role' })
|
|
60
|
+
}),
|
|
61
|
+
z.object({
|
|
62
|
+
kind: z.literal('block')
|
|
63
|
+
})
|
|
64
|
+
])
|
|
65
|
+
|
|
66
|
+
export const PolicySchema = z.object({
|
|
67
|
+
id: PolicyIdSchema,
|
|
68
|
+
/** Domain-map iteration order. Convention: multiples of 10 (10, 20, 30, ...) to allow easy insertion. */
|
|
69
|
+
order: z.number(),
|
|
70
|
+
label: LabelSchema,
|
|
71
|
+
description: DescriptionSchema.optional(),
|
|
72
|
+
trigger: PolicyTriggerSchema,
|
|
73
|
+
predicate: PolicyPredicateSchema.default({ kind: 'always' }),
|
|
74
|
+
actions: z.array(PolicyEffectSchema).min(1),
|
|
75
|
+
appliesTo: PolicyApplicabilitySchema.default({
|
|
76
|
+
systemIds: [],
|
|
77
|
+
actionIds: [],
|
|
78
|
+
resourceIds: [],
|
|
79
|
+
roleIds: []
|
|
80
|
+
}),
|
|
81
|
+
lifecycle: z
|
|
82
|
+
.enum(['draft', 'beta', 'active', 'deprecated', 'archived'])
|
|
83
|
+
.meta({ label: 'Lifecycle', color: 'teal' })
|
|
84
|
+
.default('active')
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
export const PoliciesDomainSchema = z
|
|
88
|
+
.record(z.string(), PolicySchema)
|
|
89
|
+
.refine((record) => Object.entries(record).every(([key, entry]) => entry.id === key), {
|
|
90
|
+
message: 'Each policy entry id must match its map key'
|
|
91
|
+
})
|
|
92
|
+
.default({})
|
|
93
|
+
|
|
94
|
+
export const DEFAULT_ORGANIZATION_MODEL_POLICIES: z.infer<typeof PoliciesDomainSchema> = {}
|
|
95
|
+
|
|
96
|
+
export type PolicyId = z.infer<typeof PolicyIdSchema>
|
|
97
|
+
export type PolicyApplicability = z.infer<typeof PolicyApplicabilitySchema>
|
|
98
|
+
export type PolicyTrigger = z.infer<typeof PolicyTriggerSchema>
|
|
99
|
+
export type PolicyPredicate = z.infer<typeof PolicyPredicateSchema>
|
|
100
|
+
export type PolicyEffect = z.infer<typeof PolicyEffectSchema>
|
|
101
|
+
export type Policy = z.infer<typeof PolicySchema>
|
|
102
|
+
export type PoliciesDomain = z.infer<typeof PoliciesDomainSchema>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { z } from 'zod'
|
|
2
|
-
import { DisplayMetadataSchema, ModelIdSchema } from './shared'
|
|
3
|
-
|
|
4
|
-
export const ProjectsDomainStateSchema = DisplayMetadataSchema.extend({
|
|
5
|
-
id: ModelIdSchema,
|
|
6
|
-
order: z.number().int().min(0)
|
|
7
|
-
})
|
|
8
|
-
|
|
9
|
-
// Phase 4 cut: OrganizationModelProjectsSchema and DEFAULT_ORGANIZATION_MODEL_PROJECTS removed.
|
|
10
|
-
// Project/milestone/task status data moved into system.content as (schema:status-flow) and
|
|
11
|
-
// (schema:status) content nodes on the owning system. Use getAllProjectStatuses() from
|
|
12
|
-
// migration-helpers to read status data portably.
|
|
13
|
-
//
|
|
14
|
-
// ProjectsDomainStateSchema is retained as the payload shape type for individual status entries.
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { DisplayMetadataSchema, ModelIdSchema } from './shared'
|
|
3
|
+
|
|
4
|
+
export const ProjectsDomainStateSchema = DisplayMetadataSchema.extend({
|
|
5
|
+
id: ModelIdSchema,
|
|
6
|
+
order: z.number().int().min(0)
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
// Phase 4 cut: OrganizationModelProjectsSchema and DEFAULT_ORGANIZATION_MODEL_PROJECTS removed.
|
|
10
|
+
// Project/milestone/task status data moved into system.content as (schema:status-flow) and
|
|
11
|
+
// (schema:status) content nodes on the owning system. Use getAllProjectStatuses() from
|
|
12
|
+
// migration-helpers to read status data portably.
|
|
13
|
+
//
|
|
14
|
+
// ProjectsDomainStateSchema is retained as the payload shape type for individual status entries.
|