-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathobjectstack.config.ts
More file actions
89 lines (78 loc) · 3.08 KB
/
objectstack.config.ts
File metadata and controls
89 lines (78 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
import { defineStack } from '@objectstack/spec';
// ─── Barrel Imports (one per metadata type) ─────────────────────────
import * as objects from './src/objects';
import * as apis from './src/apis';
import * as actions from './src/actions';
import * as dashboards from './src/dashboards';
import * as reports from './src/reports';
import { allFlows } from './src/flows';
import { allAgents } from './src/agents';
import * as ragPipelines from './src/rag';
import * as profiles from './src/profiles';
import * as apps from './src/apps';
import * as translations from './src/translations';
import { CrmSeedData } from './src/data';
// ─── Sharing & Security (special: mixed single/array values) ───────
import {
AccountTeamSharingRule, TerritorySharingRules,
OpportunitySalesSharingRule,
CaseEscalationSharingRule,
RoleHierarchy,
} from './src/sharing';
// ─── Action Handler Registration (runtime lifecycle) ────────────────
// Handlers are wired separately from metadata. The `onEnable` export
// is called by the kernel's AppPlugin after the engine is ready.
// See: src/actions/register-handlers.ts for the full registration flow.
import { registerCrmActionHandlers } from './src/actions/register-handlers';
/**
* Plugin lifecycle hook — called by AppPlugin when the engine is ready.
* This is where action handlers are registered on the ObjectQL engine.
*/
export const onEnable = async (ctx: { ql: { registerAction: (...args: unknown[]) => void } }) => {
registerCrmActionHandlers(ctx.ql);
};
export default defineStack({
manifest: {
id: 'com.example.crm',
namespace: 'crm',
version: '3.0.0',
type: 'app',
name: 'Enterprise CRM',
description: 'Comprehensive enterprise CRM demonstrating all ObjectStack Protocol features including AI, security, and automation',
},
// Auto-collected from barrel index files via Object.values()
objects: Object.values(objects),
apis: Object.values(apis),
actions: Object.values(actions),
dashboards: Object.values(dashboards),
reports: Object.values(reports),
flows: allFlows,
agents: allAgents,
ragPipelines: Object.values(ragPipelines),
permissions: Object.values(profiles),
apps: Object.values(apps),
// Seed Data (top-level, registered as metadata)
data: CrmSeedData,
// I18n Configuration — per-locale file organization
i18n: {
defaultLocale: 'en',
supportedLocales: ['en', 'zh-CN', 'ja-JP', 'es-ES'],
fallbackLocale: 'en',
fileOrganization: 'per_locale',
},
// I18n Translation Bundles (en, zh-CN, ja-JP, es-ES)
translations: Object.values(translations),
// Sharing & security
sharingRules: [
AccountTeamSharingRule,
OpportunitySalesSharingRule,
CaseEscalationSharingRule,
...TerritorySharingRules,
],
roles: RoleHierarchy.roles.map((r: { name: string; label: string; parentRole: string | null }) => ({
name: r.name,
label: r.label,
parent: r.parentRole ?? undefined,
})),
});