@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.
Files changed (158) hide show
  1. package/dist/generated/entities.ids.generated.js +0 -1
  2. package/dist/generated/entities.ids.generated.js.map +2 -2
  3. package/dist/generated/entity-fields-registry.js +0 -2
  4. package/dist/generated/entity-fields-registry.js.map +2 -2
  5. package/dist/modules/business_rules/data/validators.js +0 -34
  6. package/dist/modules/business_rules/data/validators.js.map +2 -2
  7. package/dist/modules/business_rules/index.js +1 -21
  8. package/dist/modules/business_rules/index.js.map +2 -2
  9. package/dist/modules/business_rules/lib/rule-engine.js +1 -182
  10. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  11. package/dist/modules/sales/acl.js +0 -1
  12. package/dist/modules/sales/acl.js.map +2 -2
  13. package/dist/modules/sales/backend/sales/documents/[id]/page.js +0 -12
  14. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  15. package/dist/modules/sales/commands/documents.js +0 -62
  16. package/dist/modules/sales/commands/documents.js.map +2 -2
  17. package/dist/modules/sales/lib/dictionaries.js +0 -3
  18. package/dist/modules/sales/lib/dictionaries.js.map +2 -2
  19. package/dist/modules/workflows/acl.js +0 -2
  20. package/dist/modules/workflows/acl.js.map +2 -2
  21. package/dist/modules/workflows/api/instances/route.js +6 -18
  22. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  23. package/dist/modules/workflows/api/tasks/route.js +1 -6
  24. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  25. package/dist/modules/workflows/backend/definitions/[id]/page.js +1 -9
  26. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
  27. package/dist/modules/workflows/backend/definitions/[id]/page.meta.js +1 -1
  28. package/dist/modules/workflows/backend/definitions/[id]/page.meta.js.map +2 -2
  29. package/dist/modules/workflows/backend/definitions/create/page.js +15 -24
  30. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  31. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  32. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  33. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +132 -150
  34. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  35. package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js +1 -1
  36. package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js.map +2 -2
  37. package/dist/modules/workflows/backend/events/[id]/page.js +1 -1
  38. package/dist/modules/workflows/backend/events/[id]/page.js.map +2 -2
  39. package/dist/modules/workflows/backend/events/[id]/page.meta.js +2 -2
  40. package/dist/modules/workflows/backend/events/[id]/page.meta.js.map +2 -2
  41. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +2 -2
  42. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +2 -2
  43. package/dist/modules/workflows/backend/tasks/[id]/page.js +1 -1
  44. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
  45. package/dist/modules/workflows/backend/tasks/[id]/page.meta.js +2 -2
  46. package/dist/modules/workflows/backend/tasks/[id]/page.meta.js.map +2 -2
  47. package/dist/modules/workflows/backend/tasks/page.js +6 -5
  48. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  49. package/dist/modules/workflows/cli.js +3 -81
  50. package/dist/modules/workflows/cli.js.map +3 -3
  51. package/dist/modules/workflows/data/entities.js +1 -64
  52. package/dist/modules/workflows/data/entities.js.map +2 -2
  53. package/dist/modules/workflows/data/validators.js +0 -115
  54. package/dist/modules/workflows/data/validators.js.map +2 -2
  55. package/dist/modules/workflows/examples/checkout-demo-definition.json +5 -1
  56. package/dist/modules/workflows/lib/activity-executor.js +13 -75
  57. package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
  58. package/dist/modules/workflows/lib/graph-utils.js +2 -71
  59. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  60. package/dist/modules/workflows/lib/seeds.js +5 -22
  61. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  62. package/dist/modules/workflows/lib/start-validator.js +23 -33
  63. package/dist/modules/workflows/lib/start-validator.js.map +2 -2
  64. package/dist/modules/workflows/lib/transition-handler.js +45 -157
  65. package/dist/modules/workflows/lib/transition-handler.js.map +3 -3
  66. package/generated/entities.ids.generated.ts +0 -1
  67. package/generated/entity-fields-registry.ts +0 -2
  68. package/package.json +2 -2
  69. package/src/modules/business_rules/data/validators.ts +0 -40
  70. package/src/modules/business_rules/index.ts +0 -25
  71. package/src/modules/business_rules/lib/rule-engine.ts +1 -281
  72. package/src/modules/sales/acl.ts +0 -1
  73. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +0 -16
  74. package/src/modules/sales/commands/documents.ts +1 -74
  75. package/src/modules/sales/lib/dictionaries.ts +0 -3
  76. package/src/modules/workflows/acl.ts +0 -2
  77. package/src/modules/workflows/api/__tests__/instances.route.test.ts +2 -5
  78. package/src/modules/workflows/api/instances/route.ts +7 -21
  79. package/src/modules/workflows/api/tasks/route.ts +1 -7
  80. package/src/modules/workflows/backend/definitions/[id]/page.meta.ts +1 -1
  81. package/src/modules/workflows/backend/definitions/[id]/page.tsx +0 -9
  82. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  83. package/src/modules/workflows/backend/definitions/create/page.tsx +0 -9
  84. package/src/modules/workflows/backend/definitions/visual-editor/page.meta.ts +1 -1
  85. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3 -21
  86. package/src/modules/workflows/backend/events/[id]/page.meta.ts +2 -2
  87. package/src/modules/workflows/backend/events/[id]/page.tsx +1 -1
  88. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +2 -2
  89. package/src/modules/workflows/backend/tasks/[id]/page.meta.ts +2 -2
  90. package/src/modules/workflows/backend/tasks/[id]/page.tsx +1 -1
  91. package/src/modules/workflows/backend/tasks/page.tsx +6 -5
  92. package/src/modules/workflows/cli.ts +0 -111
  93. package/src/modules/workflows/data/entities.ts +0 -124
  94. package/src/modules/workflows/data/validators.ts +0 -138
  95. package/src/modules/workflows/examples/checkout-demo-definition.json +5 -1
  96. package/src/modules/workflows/i18n/en.json +0 -71
  97. package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +36 -43
  98. package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +90 -170
  99. package/src/modules/workflows/lib/activity-executor.ts +16 -129
  100. package/src/modules/workflows/lib/graph-utils.ts +2 -117
  101. package/src/modules/workflows/lib/seeds.ts +8 -34
  102. package/src/modules/workflows/lib/start-validator.ts +28 -38
  103. package/src/modules/workflows/lib/transition-handler.ts +55 -208
  104. package/dist/generated/entities/workflow_event_trigger/index.js +0 -33
  105. package/dist/generated/entities/workflow_event_trigger/index.js.map +0 -7
  106. package/dist/modules/auth/events.js +0 -30
  107. package/dist/modules/auth/events.js.map +0 -7
  108. package/dist/modules/business_rules/api/execute/[ruleId]/route.js +0 -145
  109. package/dist/modules/business_rules/api/execute/[ruleId]/route.js.map +0 -7
  110. package/dist/modules/catalog/events.js +0 -34
  111. package/dist/modules/catalog/events.js.map +0 -7
  112. package/dist/modules/customers/events.js +0 -49
  113. package/dist/modules/customers/events.js.map +0 -7
  114. package/dist/modules/directory/events.js +0 -23
  115. package/dist/modules/directory/events.js.map +0 -7
  116. package/dist/modules/sales/events.js +0 -63
  117. package/dist/modules/sales/events.js.map +0 -7
  118. package/dist/modules/sales/lib/frontend/documentDataEvents.js +0 -25
  119. package/dist/modules/sales/lib/frontend/documentDataEvents.js.map +0 -7
  120. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +0 -481
  121. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +0 -7
  122. package/dist/modules/workflows/components/EventTriggersEditor.js +0 -553
  123. package/dist/modules/workflows/components/EventTriggersEditor.js.map +0 -7
  124. package/dist/modules/workflows/events.js +0 -38
  125. package/dist/modules/workflows/events.js.map +0 -7
  126. package/dist/modules/workflows/examples/order-approval-definition.json +0 -257
  127. package/dist/modules/workflows/examples/order-approval-guard-rules.json +0 -32
  128. package/dist/modules/workflows/lib/event-trigger-service.js +0 -308
  129. package/dist/modules/workflows/lib/event-trigger-service.js.map +0 -7
  130. package/dist/modules/workflows/migrations/Migration20260123143500.js +0 -36
  131. package/dist/modules/workflows/migrations/Migration20260123143500.js.map +0 -7
  132. package/dist/modules/workflows/subscribers/event-trigger.js +0 -78
  133. package/dist/modules/workflows/subscribers/event-trigger.js.map +0 -7
  134. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +0 -323
  135. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +0 -7
  136. package/dist/modules/workflows/widgets/injection/order-approval/widget.js +0 -17
  137. package/dist/modules/workflows/widgets/injection/order-approval/widget.js.map +0 -7
  138. package/dist/modules/workflows/widgets/injection-table.js +0 -19
  139. package/dist/modules/workflows/widgets/injection-table.js.map +0 -7
  140. package/generated/entities/workflow_event_trigger/index.ts +0 -15
  141. package/src/modules/auth/events.ts +0 -39
  142. package/src/modules/business_rules/api/execute/[ruleId]/route.ts +0 -163
  143. package/src/modules/catalog/events.ts +0 -45
  144. package/src/modules/customers/events.ts +0 -63
  145. package/src/modules/directory/events.ts +0 -31
  146. package/src/modules/sales/events.ts +0 -82
  147. package/src/modules/sales/lib/frontend/documentDataEvents.ts +0 -28
  148. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +0 -581
  149. package/src/modules/workflows/components/EventTriggersEditor.tsx +0 -664
  150. package/src/modules/workflows/events.ts +0 -49
  151. package/src/modules/workflows/examples/order-approval-definition.json +0 -257
  152. package/src/modules/workflows/examples/order-approval-guard-rules.json +0 -32
  153. package/src/modules/workflows/lib/event-trigger-service.ts +0 -557
  154. package/src/modules/workflows/migrations/Migration20260123143500.ts +0 -38
  155. package/src/modules/workflows/subscribers/event-trigger.ts +0 -109
  156. package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +0 -446
  157. package/src/modules/workflows/widgets/injection/order-approval/widget.ts +0 -16
  158. 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
- }