@open-mercato/core 0.4.2-canary-d0a025141f → 0.4.2-canary-3efa759f5c
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/generated/entities.ids.generated.js +0 -1
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +0 -2
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/modules/business_rules/data/validators.js +0 -34
- package/dist/modules/business_rules/data/validators.js.map +2 -2
- package/dist/modules/business_rules/index.js +1 -21
- package/dist/modules/business_rules/index.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +1 -182
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/sales/acl.js +0 -1
- package/dist/modules/sales/acl.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +0 -12
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +0 -62
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/lib/dictionaries.js +0 -3
- package/dist/modules/sales/lib/dictionaries.js.map +2 -2
- package/dist/modules/workflows/acl.js +0 -2
- package/dist/modules/workflows/acl.js.map +2 -2
- package/dist/modules/workflows/api/instances/route.js +6 -18
- package/dist/modules/workflows/api/instances/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/route.js +1 -6
- package/dist/modules/workflows/api/tasks/route.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.js +1 -9
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.js +15 -24
- package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +132 -150
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.js +1 -1
- package/dist/modules/workflows/backend/events/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.js +1 -1
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +6 -5
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/cli.js +3 -81
- package/dist/modules/workflows/cli.js.map +3 -3
- package/dist/modules/workflows/data/entities.js +1 -64
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/validators.js +0 -115
- package/dist/modules/workflows/data/validators.js.map +2 -2
- package/dist/modules/workflows/examples/checkout-demo-definition.json +5 -1
- package/dist/modules/workflows/lib/activity-executor.js +13 -75
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/dist/modules/workflows/lib/graph-utils.js +2 -71
- package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
- package/dist/modules/workflows/lib/seeds.js +5 -22
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/start-validator.js +23 -33
- package/dist/modules/workflows/lib/start-validator.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +45 -157
- package/dist/modules/workflows/lib/transition-handler.js.map +3 -3
- package/generated/entities.ids.generated.ts +0 -1
- package/generated/entity-fields-registry.ts +0 -2
- package/package.json +2 -2
- package/src/modules/business_rules/data/validators.ts +0 -40
- package/src/modules/business_rules/index.ts +0 -25
- package/src/modules/business_rules/lib/rule-engine.ts +1 -281
- package/src/modules/sales/acl.ts +0 -1
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +0 -16
- package/src/modules/sales/commands/documents.ts +1 -74
- package/src/modules/sales/lib/dictionaries.ts +0 -3
- package/src/modules/workflows/acl.ts +0 -2
- package/src/modules/workflows/api/__tests__/instances.route.test.ts +2 -5
- package/src/modules/workflows/api/instances/route.ts +7 -21
- package/src/modules/workflows/api/tasks/route.ts +1 -7
- package/src/modules/workflows/backend/definitions/[id]/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +0 -9
- package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/create/page.tsx +0 -9
- package/src/modules/workflows/backend/definitions/visual-editor/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3 -21
- package/src/modules/workflows/backend/events/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/events/[id]/page.tsx +1 -1
- package/src/modules/workflows/backend/instances/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/tasks/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +1 -1
- package/src/modules/workflows/backend/tasks/page.tsx +6 -5
- package/src/modules/workflows/cli.ts +0 -111
- package/src/modules/workflows/data/entities.ts +0 -124
- package/src/modules/workflows/data/validators.ts +0 -138
- package/src/modules/workflows/examples/checkout-demo-definition.json +5 -1
- package/src/modules/workflows/i18n/en.json +0 -71
- package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +36 -43
- package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +90 -170
- package/src/modules/workflows/lib/activity-executor.ts +16 -129
- package/src/modules/workflows/lib/graph-utils.ts +2 -117
- package/src/modules/workflows/lib/seeds.ts +8 -34
- package/src/modules/workflows/lib/start-validator.ts +28 -38
- package/src/modules/workflows/lib/transition-handler.ts +55 -208
- package/dist/generated/entities/workflow_event_trigger/index.js +0 -33
- package/dist/generated/entities/workflow_event_trigger/index.js.map +0 -7
- package/dist/modules/auth/events.js +0 -30
- package/dist/modules/auth/events.js.map +0 -7
- package/dist/modules/business_rules/api/execute/[ruleId]/route.js +0 -145
- package/dist/modules/business_rules/api/execute/[ruleId]/route.js.map +0 -7
- package/dist/modules/catalog/events.js +0 -34
- package/dist/modules/catalog/events.js.map +0 -7
- package/dist/modules/customers/events.js +0 -49
- package/dist/modules/customers/events.js.map +0 -7
- package/dist/modules/directory/events.js +0 -23
- package/dist/modules/directory/events.js.map +0 -7
- package/dist/modules/sales/events.js +0 -63
- package/dist/modules/sales/events.js.map +0 -7
- package/dist/modules/sales/lib/frontend/documentDataEvents.js +0 -25
- package/dist/modules/sales/lib/frontend/documentDataEvents.js.map +0 -7
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +0 -481
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +0 -7
- package/dist/modules/workflows/components/EventTriggersEditor.js +0 -553
- package/dist/modules/workflows/components/EventTriggersEditor.js.map +0 -7
- package/dist/modules/workflows/events.js +0 -38
- package/dist/modules/workflows/events.js.map +0 -7
- package/dist/modules/workflows/examples/order-approval-definition.json +0 -257
- package/dist/modules/workflows/examples/order-approval-guard-rules.json +0 -32
- package/dist/modules/workflows/lib/event-trigger-service.js +0 -308
- package/dist/modules/workflows/lib/event-trigger-service.js.map +0 -7
- package/dist/modules/workflows/migrations/Migration20260123143500.js +0 -36
- package/dist/modules/workflows/migrations/Migration20260123143500.js.map +0 -7
- package/dist/modules/workflows/subscribers/event-trigger.js +0 -78
- package/dist/modules/workflows/subscribers/event-trigger.js.map +0 -7
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +0 -323
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +0 -7
- package/dist/modules/workflows/widgets/injection/order-approval/widget.js +0 -17
- package/dist/modules/workflows/widgets/injection/order-approval/widget.js.map +0 -7
- package/dist/modules/workflows/widgets/injection-table.js +0 -19
- package/dist/modules/workflows/widgets/injection-table.js.map +0 -7
- package/generated/entities/workflow_event_trigger/index.ts +0 -15
- package/src/modules/auth/events.ts +0 -39
- package/src/modules/business_rules/api/execute/[ruleId]/route.ts +0 -163
- package/src/modules/catalog/events.ts +0 -45
- package/src/modules/customers/events.ts +0 -63
- package/src/modules/directory/events.ts +0 -31
- package/src/modules/sales/events.ts +0 -82
- package/src/modules/sales/lib/frontend/documentDataEvents.ts +0 -28
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +0 -581
- package/src/modules/workflows/components/EventTriggersEditor.tsx +0 -664
- package/src/modules/workflows/events.ts +0 -49
- package/src/modules/workflows/examples/order-approval-definition.json +0 -257
- package/src/modules/workflows/examples/order-approval-guard-rules.json +0 -32
- package/src/modules/workflows/lib/event-trigger-service.ts +0 -557
- package/src/modules/workflows/migrations/Migration20260123143500.ts +0 -38
- package/src/modules/workflows/subscribers/event-trigger.ts +0 -109
- package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +0 -446
- package/src/modules/workflows/widgets/injection/order-approval/widget.ts +0 -16
- package/src/modules/workflows/widgets/injection-table.ts +0 -21
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
const injectionTable = {
|
|
2
|
-
// Inject the order approval widget into the sales order detail page
|
|
3
|
-
"sales.document.detail.order:details": [
|
|
4
|
-
{
|
|
5
|
-
widgetId: "workflows.injection.order-approval",
|
|
6
|
-
kind: "group",
|
|
7
|
-
column: 2,
|
|
8
|
-
groupLabel: "workflows.orderApproval.groupLabel",
|
|
9
|
-
groupDescription: "workflows.orderApproval.groupDescription",
|
|
10
|
-
priority: 200
|
|
11
|
-
}
|
|
12
|
-
]
|
|
13
|
-
};
|
|
14
|
-
var injection_table_default = injectionTable;
|
|
15
|
-
export {
|
|
16
|
-
injection_table_default as default,
|
|
17
|
-
injectionTable
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=injection-table.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/modules/workflows/widgets/injection-table.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ModuleInjectionTable } from '@open-mercato/shared/modules/widgets/injection'\n\n/**\n * Workflows module injection table\n * Maps injection spot IDs to widget IDs for automatic widget injection\n */\nexport const injectionTable: ModuleInjectionTable = {\n // Inject the order approval widget into the sales order detail page\n 'sales.document.detail.order:details': [\n {\n widgetId: 'workflows.injection.order-approval',\n kind: 'group',\n column: 2,\n groupLabel: 'workflows.orderApproval.groupLabel',\n groupDescription: 'workflows.orderApproval.groupDescription',\n priority: 200,\n },\n ],\n}\n\nexport default injectionTable\n"],
|
|
5
|
-
"mappings": "AAMO,MAAM,iBAAuC;AAAA;AAAA,EAElD,uCAAuC;AAAA,IACrC;AAAA,MACE,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAEA,IAAO,0BAAQ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export const id = 'id'
|
|
2
|
-
export const name = 'name'
|
|
3
|
-
export const description = 'description'
|
|
4
|
-
export const workflow_definition_id = 'workflow_definition_id'
|
|
5
|
-
export const event_pattern = 'event_pattern'
|
|
6
|
-
export const config = 'config'
|
|
7
|
-
export const enabled = 'enabled'
|
|
8
|
-
export const priority = 'priority'
|
|
9
|
-
export const tenant_id = 'tenant_id'
|
|
10
|
-
export const organization_id = 'organization_id'
|
|
11
|
-
export const created_by = 'created_by'
|
|
12
|
-
export const updated_by = 'updated_by'
|
|
13
|
-
export const created_at = 'created_at'
|
|
14
|
-
export const updated_at = 'updated_at'
|
|
15
|
-
export const deleted_at = 'deleted_at'
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { createModuleEvents } from '@open-mercato/shared/modules/events'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Auth Module Events
|
|
5
|
-
*
|
|
6
|
-
* Declares all events that can be emitted by the auth module.
|
|
7
|
-
*/
|
|
8
|
-
const events = [
|
|
9
|
-
// Users
|
|
10
|
-
{ id: 'auth.users.created', label: 'User Created', entity: 'users', category: 'crud' },
|
|
11
|
-
{ id: 'auth.users.updated', label: 'User Updated', entity: 'users', category: 'crud' },
|
|
12
|
-
{ id: 'auth.users.deleted', label: 'User Deleted', entity: 'users', category: 'crud' },
|
|
13
|
-
|
|
14
|
-
// Roles
|
|
15
|
-
{ id: 'auth.roles.created', label: 'Role Created', entity: 'roles', category: 'crud' },
|
|
16
|
-
{ id: 'auth.roles.updated', label: 'Role Updated', entity: 'roles', category: 'crud' },
|
|
17
|
-
{ id: 'auth.roles.deleted', label: 'Role Deleted', entity: 'roles', category: 'crud' },
|
|
18
|
-
|
|
19
|
-
// Authentication events
|
|
20
|
-
{ id: 'auth.login.success', label: 'Login Successful', category: 'lifecycle' },
|
|
21
|
-
{ id: 'auth.login.failed', label: 'Login Failed', category: 'lifecycle' },
|
|
22
|
-
{ id: 'auth.logout', label: 'User Logged Out', category: 'lifecycle' },
|
|
23
|
-
{ id: 'auth.password.changed', label: 'Password Changed', category: 'lifecycle' },
|
|
24
|
-
{ id: 'auth.password.reset.requested', label: 'Password Reset Requested', category: 'lifecycle' },
|
|
25
|
-
{ id: 'auth.password.reset.completed', label: 'Password Reset Completed', category: 'lifecycle' },
|
|
26
|
-
] as const
|
|
27
|
-
|
|
28
|
-
export const eventsConfig = createModuleEvents({
|
|
29
|
-
moduleId: 'auth',
|
|
30
|
-
events,
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
/** Type-safe event emitter for auth module */
|
|
34
|
-
export const emitAuthEvent = eventsConfig.emit
|
|
35
|
-
|
|
36
|
-
/** Event IDs that can be emitted by the auth module */
|
|
37
|
-
export type AuthEventId = typeof events[number]['id']
|
|
38
|
-
|
|
39
|
-
export default eventsConfig
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { NextResponse } from 'next/server'
|
|
2
|
-
import { z } from 'zod'
|
|
3
|
-
import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
4
|
-
import { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'
|
|
5
|
-
import { createRequestContainer } from '@open-mercato/shared/lib/di/container'
|
|
6
|
-
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
7
|
-
import * as ruleEngine from '../../../lib/rule-engine'
|
|
8
|
-
|
|
9
|
-
const executeByIdRequestSchema = z.object({
|
|
10
|
-
data: z.any(),
|
|
11
|
-
dryRun: z.boolean().optional().default(false),
|
|
12
|
-
entityType: z.string().optional(),
|
|
13
|
-
entityId: z.string().optional(),
|
|
14
|
-
eventType: z.string().optional(),
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
const executeByIdResponseSchema = z.object({
|
|
18
|
-
success: z.boolean(),
|
|
19
|
-
ruleId: z.string(),
|
|
20
|
-
ruleName: z.string(),
|
|
21
|
-
conditionResult: z.boolean(),
|
|
22
|
-
actionsExecuted: z.object({
|
|
23
|
-
success: z.boolean(),
|
|
24
|
-
results: z.array(z.object({
|
|
25
|
-
type: z.string(),
|
|
26
|
-
success: z.boolean(),
|
|
27
|
-
error: z.string().optional(),
|
|
28
|
-
})),
|
|
29
|
-
}).nullable(),
|
|
30
|
-
executionTime: z.number(),
|
|
31
|
-
error: z.string().optional(),
|
|
32
|
-
logId: z.string().optional(),
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
const errorResponseSchema = z.object({
|
|
36
|
-
error: z.string(),
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
const routeMetadata = {
|
|
40
|
-
POST: { requireAuth: true, requireFeatures: ['business_rules.execute'] },
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export const metadata = routeMetadata
|
|
44
|
-
|
|
45
|
-
interface RouteContext {
|
|
46
|
-
params: Promise<{ ruleId: string }>
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export async function POST(req: Request, context: RouteContext) {
|
|
50
|
-
const auth = await getAuthFromRequest(req)
|
|
51
|
-
if (!auth) {
|
|
52
|
-
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const params = await context.params
|
|
56
|
-
const ruleId = params.ruleId
|
|
57
|
-
|
|
58
|
-
if (!ruleId || !z.uuid().safeParse(ruleId).success) {
|
|
59
|
-
return NextResponse.json({ error: 'Invalid rule ID' }, { status: 400 })
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const container = await createRequestContainer()
|
|
63
|
-
const em = container.resolve('em') as EntityManager
|
|
64
|
-
|
|
65
|
-
let body: any
|
|
66
|
-
try {
|
|
67
|
-
body = await req.json()
|
|
68
|
-
} catch {
|
|
69
|
-
return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 })
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const parsed = executeByIdRequestSchema.safeParse(body)
|
|
73
|
-
if (!parsed.success) {
|
|
74
|
-
const errors = parsed.error.issues.map(e => `${e.path.join('.')}: ${e.message}`)
|
|
75
|
-
return NextResponse.json({ error: `Validation failed: ${errors.join(', ')}` }, { status: 400 })
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const { data, dryRun, entityType, entityId, eventType } = parsed.data
|
|
79
|
-
|
|
80
|
-
const execContext: ruleEngine.DirectRuleExecutionContext = {
|
|
81
|
-
ruleId,
|
|
82
|
-
data,
|
|
83
|
-
user: {
|
|
84
|
-
id: auth.sub,
|
|
85
|
-
email: auth.email,
|
|
86
|
-
role: (auth.role as string) ?? undefined,
|
|
87
|
-
},
|
|
88
|
-
tenantId: auth.tenantId ?? '',
|
|
89
|
-
organizationId: auth.orgId ?? '',
|
|
90
|
-
executedBy: auth.sub ?? auth.email ?? undefined,
|
|
91
|
-
dryRun,
|
|
92
|
-
entityType,
|
|
93
|
-
entityId,
|
|
94
|
-
eventType,
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
const result = await ruleEngine.executeRuleById(em, execContext)
|
|
99
|
-
|
|
100
|
-
const response = {
|
|
101
|
-
success: result.success,
|
|
102
|
-
ruleId: result.ruleId,
|
|
103
|
-
ruleName: result.ruleName,
|
|
104
|
-
conditionResult: result.conditionResult,
|
|
105
|
-
actionsExecuted: result.actionsExecuted ? {
|
|
106
|
-
success: result.actionsExecuted.success,
|
|
107
|
-
results: result.actionsExecuted.results.map(ar => ({
|
|
108
|
-
type: ar.action.type,
|
|
109
|
-
success: ar.success,
|
|
110
|
-
error: ar.error,
|
|
111
|
-
})),
|
|
112
|
-
} : null,
|
|
113
|
-
executionTime: result.executionTime,
|
|
114
|
-
error: result.error,
|
|
115
|
-
logId: result.logId,
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Return appropriate status based on result
|
|
119
|
-
const status = result.success ? 200 : (result.error === 'Rule not found' ? 404 : 200)
|
|
120
|
-
return NextResponse.json(response, { status })
|
|
121
|
-
} catch (error) {
|
|
122
|
-
const errorMessage = error instanceof Error ? error.message : String(error)
|
|
123
|
-
return NextResponse.json(
|
|
124
|
-
{ error: `Rule execution failed: ${errorMessage}` },
|
|
125
|
-
{ status: 500 }
|
|
126
|
-
)
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export const openApi: OpenApiRouteDoc = {
|
|
131
|
-
tag: 'Business Rules',
|
|
132
|
-
summary: 'Execute a specific business rule by ID',
|
|
133
|
-
methods: {
|
|
134
|
-
POST: {
|
|
135
|
-
summary: 'Execute a specific rule by its database UUID',
|
|
136
|
-
description: 'Directly executes a specific business rule identified by its UUID, bypassing the normal entityType/eventType discovery mechanism. Useful for workflows and targeted rule execution.',
|
|
137
|
-
pathParams: z.object({
|
|
138
|
-
ruleId: z.string().uuid().describe('The database UUID of the business rule to execute'),
|
|
139
|
-
}),
|
|
140
|
-
requestBody: {
|
|
141
|
-
contentType: 'application/json',
|
|
142
|
-
schema: executeByIdRequestSchema,
|
|
143
|
-
},
|
|
144
|
-
responses: [
|
|
145
|
-
{
|
|
146
|
-
status: 200,
|
|
147
|
-
description: 'Rule executed successfully',
|
|
148
|
-
schema: executeByIdResponseSchema,
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
status: 404,
|
|
152
|
-
description: 'Rule not found',
|
|
153
|
-
schema: errorResponseSchema,
|
|
154
|
-
},
|
|
155
|
-
],
|
|
156
|
-
errors: [
|
|
157
|
-
{ status: 400, description: 'Invalid request payload or rule ID', schema: errorResponseSchema },
|
|
158
|
-
{ status: 401, description: 'Unauthorized', schema: errorResponseSchema },
|
|
159
|
-
{ status: 500, description: 'Execution error', schema: errorResponseSchema },
|
|
160
|
-
],
|
|
161
|
-
},
|
|
162
|
-
},
|
|
163
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { createModuleEvents } from '@open-mercato/shared/modules/events'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Catalog Module Events
|
|
5
|
-
*
|
|
6
|
-
* Declares all events that can be emitted by the catalog module.
|
|
7
|
-
*/
|
|
8
|
-
const events = [
|
|
9
|
-
// Products
|
|
10
|
-
{ id: 'catalog.product.created', label: 'Product Created', entity: 'product', category: 'crud' },
|
|
11
|
-
{ id: 'catalog.product.updated', label: 'Product Updated', entity: 'product', category: 'crud' },
|
|
12
|
-
{ id: 'catalog.product.deleted', label: 'Product Deleted', entity: 'product', category: 'crud' },
|
|
13
|
-
|
|
14
|
-
// Categories
|
|
15
|
-
{ id: 'catalog.category.created', label: 'Category Created', entity: 'category', category: 'crud' },
|
|
16
|
-
{ id: 'catalog.category.updated', label: 'Category Updated', entity: 'category', category: 'crud' },
|
|
17
|
-
{ id: 'catalog.category.deleted', label: 'Category Deleted', entity: 'category', category: 'crud' },
|
|
18
|
-
|
|
19
|
-
// Variants
|
|
20
|
-
{ id: 'catalog.variant.created', label: 'Variant Created', entity: 'variant', category: 'crud' },
|
|
21
|
-
{ id: 'catalog.variant.updated', label: 'Variant Updated', entity: 'variant', category: 'crud' },
|
|
22
|
-
{ id: 'catalog.variant.deleted', label: 'Variant Deleted', entity: 'variant', category: 'crud' },
|
|
23
|
-
|
|
24
|
-
// Prices
|
|
25
|
-
{ id: 'catalog.price.created', label: 'Price Created', entity: 'price', category: 'crud' },
|
|
26
|
-
{ id: 'catalog.price.updated', label: 'Price Updated', entity: 'price', category: 'crud' },
|
|
27
|
-
{ id: 'catalog.price.deleted', label: 'Price Deleted', entity: 'price', category: 'crud' },
|
|
28
|
-
|
|
29
|
-
// Lifecycle events - Pricing resolution
|
|
30
|
-
{ id: 'catalog.pricing.resolve.before', label: 'Before Pricing Resolve', category: 'lifecycle', excludeFromTriggers: true },
|
|
31
|
-
{ id: 'catalog.pricing.resolve.after', label: 'After Pricing Resolve', category: 'lifecycle', excludeFromTriggers: true },
|
|
32
|
-
] as const
|
|
33
|
-
|
|
34
|
-
export const eventsConfig = createModuleEvents({
|
|
35
|
-
moduleId: 'catalog',
|
|
36
|
-
events,
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
/** Type-safe event emitter for catalog module */
|
|
40
|
-
export const emitCatalogEvent = eventsConfig.emit
|
|
41
|
-
|
|
42
|
-
/** Event IDs that can be emitted by the catalog module */
|
|
43
|
-
export type CatalogEventId = typeof events[number]['id']
|
|
44
|
-
|
|
45
|
-
export default eventsConfig
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { createModuleEvents } from '@open-mercato/shared/modules/events'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Customers Module Events
|
|
5
|
-
*
|
|
6
|
-
* Declares all events that can be emitted by the customers module.
|
|
7
|
-
*/
|
|
8
|
-
const events = [
|
|
9
|
-
// People
|
|
10
|
-
{ id: 'customers.people.created', label: 'Customer (Person) Created', entity: 'people', category: 'crud' },
|
|
11
|
-
{ id: 'customers.people.updated', label: 'Customer (Person) Updated', entity: 'people', category: 'crud' },
|
|
12
|
-
{ id: 'customers.people.deleted', label: 'Customer (Person) Deleted', entity: 'people', category: 'crud' },
|
|
13
|
-
|
|
14
|
-
// Companies
|
|
15
|
-
{ id: 'customers.companies.created', label: 'Customer (Company) Created', entity: 'companies', category: 'crud' },
|
|
16
|
-
{ id: 'customers.companies.updated', label: 'Customer (Company) Updated', entity: 'companies', category: 'crud' },
|
|
17
|
-
{ id: 'customers.companies.deleted', label: 'Customer (Company) Deleted', entity: 'companies', category: 'crud' },
|
|
18
|
-
|
|
19
|
-
// Deals
|
|
20
|
-
{ id: 'customers.deals.created', label: 'Deal Created', entity: 'deals', category: 'crud' },
|
|
21
|
-
{ id: 'customers.deals.updated', label: 'Deal Updated', entity: 'deals', category: 'crud' },
|
|
22
|
-
{ id: 'customers.deals.deleted', label: 'Deal Deleted', entity: 'deals', category: 'crud' },
|
|
23
|
-
|
|
24
|
-
// Comments
|
|
25
|
-
{ id: 'customers.comments.created', label: 'Comment Created', entity: 'comments', category: 'crud' },
|
|
26
|
-
{ id: 'customers.comments.updated', label: 'Comment Updated', entity: 'comments', category: 'crud' },
|
|
27
|
-
{ id: 'customers.comments.deleted', label: 'Comment Deleted', entity: 'comments', category: 'crud' },
|
|
28
|
-
|
|
29
|
-
// Addresses
|
|
30
|
-
{ id: 'customers.addresses.created', label: 'Address Created', entity: 'addresses', category: 'crud' },
|
|
31
|
-
{ id: 'customers.addresses.updated', label: 'Address Updated', entity: 'addresses', category: 'crud' },
|
|
32
|
-
{ id: 'customers.addresses.deleted', label: 'Address Deleted', entity: 'addresses', category: 'crud' },
|
|
33
|
-
|
|
34
|
-
// Activities
|
|
35
|
-
{ id: 'customers.activities.created', label: 'Activity Created', entity: 'activities', category: 'crud' },
|
|
36
|
-
{ id: 'customers.activities.updated', label: 'Activity Updated', entity: 'activities', category: 'crud' },
|
|
37
|
-
{ id: 'customers.activities.deleted', label: 'Activity Deleted', entity: 'activities', category: 'crud' },
|
|
38
|
-
|
|
39
|
-
// Tags
|
|
40
|
-
{ id: 'customers.tags.created', label: 'Tag Created', entity: 'tags', category: 'crud' },
|
|
41
|
-
{ id: 'customers.tags.updated', label: 'Tag Updated', entity: 'tags', category: 'crud' },
|
|
42
|
-
{ id: 'customers.tags.deleted', label: 'Tag Deleted', entity: 'tags', category: 'crud' },
|
|
43
|
-
{ id: 'customers.tags.assigned', label: 'Tag Assigned', entity: 'tags', category: 'crud' },
|
|
44
|
-
{ id: 'customers.tags.removed', label: 'Tag Removed', entity: 'tags', category: 'crud' },
|
|
45
|
-
|
|
46
|
-
// Todos
|
|
47
|
-
{ id: 'customers.todos.created', label: 'Todo Created', entity: 'todos', category: 'crud' },
|
|
48
|
-
{ id: 'customers.todos.updated', label: 'Todo Updated', entity: 'todos', category: 'crud' },
|
|
49
|
-
{ id: 'customers.todos.deleted', label: 'Todo Deleted', entity: 'todos', category: 'crud' },
|
|
50
|
-
] as const
|
|
51
|
-
|
|
52
|
-
export const eventsConfig = createModuleEvents({
|
|
53
|
-
moduleId: 'customers',
|
|
54
|
-
events,
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
/** Type-safe event emitter for customers module */
|
|
58
|
-
export const emitCustomersEvent = eventsConfig.emit
|
|
59
|
-
|
|
60
|
-
/** Event IDs that can be emitted by the customers module */
|
|
61
|
-
export type CustomersEventId = typeof events[number]['id']
|
|
62
|
-
|
|
63
|
-
export default eventsConfig
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { createModuleEvents } from '@open-mercato/shared/modules/events'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Directory Module Events
|
|
5
|
-
*
|
|
6
|
-
* Declares all events that can be emitted by the directory module.
|
|
7
|
-
*/
|
|
8
|
-
const events = [
|
|
9
|
-
// Tenants
|
|
10
|
-
{ id: 'directory.tenants.created', label: 'Tenant Created', entity: 'tenants', category: 'crud' },
|
|
11
|
-
{ id: 'directory.tenants.updated', label: 'Tenant Updated', entity: 'tenants', category: 'crud' },
|
|
12
|
-
{ id: 'directory.tenants.deleted', label: 'Tenant Deleted', entity: 'tenants', category: 'crud' },
|
|
13
|
-
|
|
14
|
-
// Organizations
|
|
15
|
-
{ id: 'directory.organizations.created', label: 'Organization Created', entity: 'organizations', category: 'crud' },
|
|
16
|
-
{ id: 'directory.organizations.updated', label: 'Organization Updated', entity: 'organizations', category: 'crud' },
|
|
17
|
-
{ id: 'directory.organizations.deleted', label: 'Organization Deleted', entity: 'organizations', category: 'crud' },
|
|
18
|
-
] as const
|
|
19
|
-
|
|
20
|
-
export const eventsConfig = createModuleEvents({
|
|
21
|
-
moduleId: 'directory',
|
|
22
|
-
events,
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
/** Type-safe event emitter for directory module */
|
|
26
|
-
export const emitDirectoryEvent = eventsConfig.emit
|
|
27
|
-
|
|
28
|
-
/** Event IDs that can be emitted by the directory module */
|
|
29
|
-
export type DirectoryEventId = typeof events[number]['id']
|
|
30
|
-
|
|
31
|
-
export default eventsConfig
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { createModuleEvents } from '@open-mercato/shared/modules/events'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Sales Module Events
|
|
5
|
-
*
|
|
6
|
-
* Declares all events that can be emitted by the sales module.
|
|
7
|
-
*/
|
|
8
|
-
const events = [
|
|
9
|
-
// Orders
|
|
10
|
-
{ id: 'sales.orders.created', label: 'Sales Order Created', entity: 'orders', category: 'crud' },
|
|
11
|
-
{ id: 'sales.orders.updated', label: 'Sales Order Updated', entity: 'orders', category: 'crud' },
|
|
12
|
-
{ id: 'sales.orders.deleted', label: 'Sales Order Deleted', entity: 'orders', category: 'crud' },
|
|
13
|
-
|
|
14
|
-
// Quotes
|
|
15
|
-
{ id: 'sales.quotes.created', label: 'Quote Created', entity: 'quotes', category: 'crud' },
|
|
16
|
-
{ id: 'sales.quotes.updated', label: 'Quote Updated', entity: 'quotes', category: 'crud' },
|
|
17
|
-
{ id: 'sales.quotes.deleted', label: 'Quote Deleted', entity: 'quotes', category: 'crud' },
|
|
18
|
-
|
|
19
|
-
// Invoices
|
|
20
|
-
{ id: 'sales.invoices.created', label: 'Invoice Created', entity: 'invoices', category: 'crud' },
|
|
21
|
-
{ id: 'sales.invoices.updated', label: 'Invoice Updated', entity: 'invoices', category: 'crud' },
|
|
22
|
-
{ id: 'sales.invoices.deleted', label: 'Invoice Deleted', entity: 'invoices', category: 'crud' },
|
|
23
|
-
|
|
24
|
-
// Order Lines
|
|
25
|
-
{ id: 'sales.lines.created', label: 'Order Line Created', entity: 'lines', category: 'crud' },
|
|
26
|
-
{ id: 'sales.lines.updated', label: 'Order Line Updated', entity: 'lines', category: 'crud' },
|
|
27
|
-
{ id: 'sales.lines.deleted', label: 'Order Line Deleted', entity: 'lines', category: 'crud' },
|
|
28
|
-
|
|
29
|
-
// Payments
|
|
30
|
-
{ id: 'sales.payments.created', label: 'Payment Created', entity: 'payments', category: 'crud' },
|
|
31
|
-
{ id: 'sales.payments.updated', label: 'Payment Updated', entity: 'payments', category: 'crud' },
|
|
32
|
-
{ id: 'sales.payments.deleted', label: 'Payment Deleted', entity: 'payments', category: 'crud' },
|
|
33
|
-
|
|
34
|
-
// Shipments
|
|
35
|
-
{ id: 'sales.shipments.created', label: 'Shipment Created', entity: 'shipments', category: 'crud' },
|
|
36
|
-
{ id: 'sales.shipments.updated', label: 'Shipment Updated', entity: 'shipments', category: 'crud' },
|
|
37
|
-
{ id: 'sales.shipments.deleted', label: 'Shipment Deleted', entity: 'shipments', category: 'crud' },
|
|
38
|
-
|
|
39
|
-
// Notes
|
|
40
|
-
{ id: 'sales.notes.created', label: 'Note Created', entity: 'notes', category: 'crud' },
|
|
41
|
-
{ id: 'sales.notes.updated', label: 'Note Updated', entity: 'notes', category: 'crud' },
|
|
42
|
-
{ id: 'sales.notes.deleted', label: 'Note Deleted', entity: 'notes', category: 'crud' },
|
|
43
|
-
|
|
44
|
-
// Configuration
|
|
45
|
-
{ id: 'sales.configuration.created', label: 'Configuration Created', entity: 'configuration', category: 'crud' },
|
|
46
|
-
{ id: 'sales.configuration.updated', label: 'Configuration Updated', entity: 'configuration', category: 'crud' },
|
|
47
|
-
{ id: 'sales.configuration.deleted', label: 'Configuration Deleted', entity: 'configuration', category: 'crud' },
|
|
48
|
-
|
|
49
|
-
// Lifecycle events - Document calculations
|
|
50
|
-
{ id: 'sales.document.totals.calculated', label: 'Document Totals Calculated', category: 'lifecycle' },
|
|
51
|
-
{ id: 'sales.document.calculate.before', label: 'Before Document Calculate', category: 'lifecycle', excludeFromTriggers: true },
|
|
52
|
-
{ id: 'sales.document.calculate.after', label: 'After Document Calculate', category: 'lifecycle', excludeFromTriggers: true },
|
|
53
|
-
|
|
54
|
-
// Lifecycle events - Line calculations
|
|
55
|
-
{ id: 'sales.line.calculate.before', label: 'Before Line Calculate', category: 'lifecycle', excludeFromTriggers: true },
|
|
56
|
-
{ id: 'sales.line.calculate.after', label: 'After Line Calculate', category: 'lifecycle', excludeFromTriggers: true },
|
|
57
|
-
|
|
58
|
-
// Lifecycle events - Tax calculations
|
|
59
|
-
{ id: 'sales.tax.calculate.before', label: 'Before Tax Calculate', category: 'lifecycle', excludeFromTriggers: true },
|
|
60
|
-
{ id: 'sales.tax.calculate.after', label: 'After Tax Calculate', category: 'lifecycle', excludeFromTriggers: true },
|
|
61
|
-
|
|
62
|
-
// Lifecycle events - Shipping adjustments
|
|
63
|
-
{ id: 'sales.shipping.adjustments.apply.before', label: 'Before Shipping Adjustments', category: 'lifecycle', excludeFromTriggers: true },
|
|
64
|
-
{ id: 'sales.shipping.adjustments.apply.after', label: 'After Shipping Adjustments', category: 'lifecycle', excludeFromTriggers: true },
|
|
65
|
-
|
|
66
|
-
// Lifecycle events - Payment adjustments
|
|
67
|
-
{ id: 'sales.payment.adjustments.apply.before', label: 'Before Payment Adjustments', category: 'lifecycle', excludeFromTriggers: true },
|
|
68
|
-
{ id: 'sales.payment.adjustments.apply.after', label: 'After Payment Adjustments', category: 'lifecycle', excludeFromTriggers: true },
|
|
69
|
-
] as const
|
|
70
|
-
|
|
71
|
-
export const eventsConfig = createModuleEvents({
|
|
72
|
-
moduleId: 'sales',
|
|
73
|
-
events,
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
/** Type-safe event emitter for sales module */
|
|
77
|
-
export const emitSalesEvent = eventsConfig.emit
|
|
78
|
-
|
|
79
|
-
/** Event IDs that can be emitted by the sales module */
|
|
80
|
-
export type SalesEventId = typeof events[number]['id']
|
|
81
|
-
|
|
82
|
-
export default eventsConfig
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
export const SALES_DOCUMENT_DATA_REFRESH_EVENT = 'sales:document:data:refresh'
|
|
4
|
-
|
|
5
|
-
export type SalesDocumentDataRefreshDetail = {
|
|
6
|
-
documentId: string
|
|
7
|
-
kind?: 'order' | 'quote'
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function emitSalesDocumentDataRefresh(detail: SalesDocumentDataRefreshDetail): void {
|
|
11
|
-
if (typeof window === 'undefined' || typeof CustomEvent === 'undefined') return
|
|
12
|
-
window.dispatchEvent(
|
|
13
|
-
new CustomEvent<SalesDocumentDataRefreshDetail>(SALES_DOCUMENT_DATA_REFRESH_EVENT, { detail }),
|
|
14
|
-
)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function subscribeSalesDocumentDataRefresh(
|
|
18
|
-
handler: (detail: SalesDocumentDataRefreshDetail) => void,
|
|
19
|
-
): () => void {
|
|
20
|
-
if (typeof window === 'undefined') return () => {}
|
|
21
|
-
const listener = (event: Event) => {
|
|
22
|
-
const detail = (event as CustomEvent<SalesDocumentDataRefreshDetail>).detail
|
|
23
|
-
if (!detail) return
|
|
24
|
-
handler(detail)
|
|
25
|
-
}
|
|
26
|
-
window.addEventListener(SALES_DOCUMENT_DATA_REFRESH_EVENT, listener as EventListener)
|
|
27
|
-
return () => window.removeEventListener(SALES_DOCUMENT_DATA_REFRESH_EVENT, listener as EventListener)
|
|
28
|
-
}
|