@goplusvn/core 0.1.0 → 0.1.2
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/package.json +31 -175
- package/src/assets/erp_wallpaper.png +0 -0
- package/src/assets/goeat_logo.png +0 -0
- package/src/audit/audit-manager.ts +139 -0
- package/src/audit/index.ts +11 -0
- package/src/audit/memory-audit-logger.ts +86 -0
- package/src/audit/types.ts +50 -0
- package/src/auth/auth-service.ts +97 -0
- package/src/auth/index.ts +266 -0
- package/src/code-generation/index.ts +69 -0
- package/src/configs/auth-routes.ts +17 -0
- package/src/configs/crud.ts +136 -0
- package/src/configs/data/navigations.ts +781 -0
- package/src/configs/data/oauth-links.ts +10 -0
- package/src/configs/entities/material-categories.config.ts +125 -0
- package/src/configs/i18n.ts +12 -0
- package/src/configs/index.ts +26 -0
- package/src/configs/status.ts +25 -0
- package/src/configs/themes.ts +100 -0
- package/src/crud/components/crud-bulk-actions.tsx +91 -0
- package/src/crud/components/crud-card-view.tsx +241 -0
- package/src/crud/components/crud-context.tsx +122 -0
- package/src/crud/components/crud-delete-dialog.tsx +145 -0
- package/src/crud/components/crud-dialog.tsx +406 -0
- package/src/crud/components/crud-empty-state.tsx +104 -0
- package/src/crud/components/crud-export-button.tsx +170 -0
- package/src/crud/components/crud-field-renderer.tsx +653 -0
- package/src/crud/components/crud-filter-chips.tsx +102 -0
- package/src/crud/components/crud-filters/checkbox-filter.tsx +97 -0
- package/src/crud/components/crud-filters/datetime-filter.tsx +83 -0
- package/src/crud/components/crud-filters/filter-builder.tsx +66 -0
- package/src/crud/components/crud-filters/index.tsx +76 -0
- package/src/crud/components/crud-filters/radio-filter.tsx +86 -0
- package/src/crud/components/crud-filters/select-filter.tsx +141 -0
- package/src/crud/components/crud-filters/text-filter.tsx +86 -0
- package/src/crud/components/crud-form.tsx +642 -0
- package/src/crud/components/crud-import-dialog.tsx +440 -0
- package/src/crud/components/crud-infinite-scroll.tsx +116 -0
- package/src/crud/components/crud-page.tsx +1017 -0
- package/src/crud/components/crud-provider.tsx +277 -0
- package/src/crud/components/crud-row-actions.tsx +189 -0
- package/src/crud/components/crud-search.tsx +82 -0
- package/src/crud/components/crud-sheet.tsx +336 -0
- package/src/crud/components/crud-table-skeleton.tsx +26 -0
- package/src/crud/components/crud-table-toolbar.tsx +91 -0
- package/src/crud/components/crud-table.tsx +352 -0
- package/src/crud/components/crud-virtual-table.tsx +55 -0
- package/src/crud/components/index.tsx +20 -0
- package/src/crud/crud-filters/checkbox-filter.tsx +87 -0
- package/src/crud/crud-filters/datetime-filter.tsx +82 -0
- package/src/crud/crud-filters/filter-builder.tsx +64 -0
- package/src/crud/crud-filters/index.tsx +78 -0
- package/src/crud/crud-filters/radio-filter.tsx +79 -0
- package/src/crud/crud-filters/select-filter.tsx +148 -0
- package/src/crud/crud-filters/text-filter.tsx +81 -0
- package/src/crud/index.ts +43 -0
- package/src/crud/lib/crud-service.test.ts +334 -0
- package/src/crud/lib/crud-service.ts +358 -0
- package/src/crud/lib/crud-utils.test.ts +354 -0
- package/src/crud/lib/crud-utils.ts +299 -0
- package/src/crud/lib/crud-validator.ts +247 -0
- package/src/crud/lib/data-loader.ts +234 -0
- package/src/crud/lib/field-calculator.ts +241 -0
- package/src/crud/lib/field-formatter.ts +240 -0
- package/src/crud/lib/import-export-service.test.ts +290 -0
- package/src/crud/lib/import-export-service.ts +352 -0
- package/src/crud/lib/import-server-utils.ts +109 -0
- package/src/crud/lib/lazy-loader.ts +241 -0
- package/src/crud/lib/parse-filters.ts +85 -0
- package/src/crud/lib/permissions.ts +52 -0
- package/src/crud/lib/serialize-config.ts +60 -0
- package/src/crud/lib/stream-loader.ts +145 -0
- package/src/crud/lib/translate-config.ts +335 -0
- package/src/crud/lib/types.ts +11 -0
- package/src/crud/pages/entity-crud-page.tsx +144 -0
- package/src/crud/server.ts +8 -0
- package/src/home/constants.tsx +142 -0
- package/src/home/feature-showcase.tsx +171 -0
- package/src/home/home-page.tsx +191 -0
- package/src/home/hooks/index.ts +1 -0
- package/src/home/hooks/useWidgetPreferences.ts +167 -0
- package/src/home/index.ts +33 -0
- package/src/home/quick-access-dialog.tsx +271 -0
- package/src/home/quick-access-menu.tsx +267 -0
- package/src/home/types.ts +140 -0
- package/src/home/welcome-card.tsx +92 -0
- package/src/home/widget-container.tsx +258 -0
- package/src/home/widgets/base-widget.tsx +200 -0
- package/src/home/widgets/customers-widget.tsx +74 -0
- package/src/home/widgets/index.ts +6 -0
- package/src/home/widgets/orders-widget.tsx +87 -0
- package/src/home/widgets/revenue-widget.tsx +71 -0
- package/src/home/widgets/stock-widget.tsx +109 -0
- package/src/hooks/index.tsx +598 -0
- package/src/hooks/use-tenant.test.tsx +30 -0
- package/src/hooks/use-tenant.ts +5 -0
- package/src/index.ts +17 -0
- package/src/infrastructure/__tests__/architecture-verification.spec.ts +103 -0
- package/src/infrastructure/api-service.ts +317 -0
- package/src/infrastructure/cache/cache-manager.ts +107 -0
- package/src/infrastructure/cache/cache.ts +120 -0
- package/src/infrastructure/cache/index.ts +8 -0
- package/src/infrastructure/cache/types.ts +48 -0
- package/src/infrastructure/cron/cron-manager.ts +239 -0
- package/src/infrastructure/cron/index.ts +6 -0
- package/src/infrastructure/cron/types.ts +41 -0
- package/src/infrastructure/event-bus/event-bus.ts +145 -0
- package/src/infrastructure/event-bus/index.ts +2 -0
- package/src/infrastructure/event-bus/types.ts +22 -0
- package/src/infrastructure/index.ts +32 -0
- package/src/infrastructure/lock/decorators.ts +67 -0
- package/src/infrastructure/lock/index.ts +2 -0
- package/src/infrastructure/lock/lock-manager.ts +33 -0
- package/src/infrastructure/logger/index.ts +2 -0
- package/src/infrastructure/logger/logger.ts +96 -0
- package/src/infrastructure/logger/types.ts +25 -0
- package/src/layout/index.tsx +185 -0
- package/src/navigation/index.ts +91 -0
- package/src/notification/index.ts +14 -0
- package/src/notification/notification-service.ts +120 -0
- package/src/notification/storage/in-memory.ts +56 -0
- package/src/notification/storage/index.ts +1 -0
- package/src/notification/types.ts +51 -0
- package/src/organization/branch-service.ts +299 -0
- package/src/organization/branches.config.ts +154 -0
- package/src/organization/index.ts +5 -0
- package/src/plugin/apps-registry.ts +97 -0
- package/src/plugin/index.ts +5 -0
- package/src/plugin/types.ts +41 -0
- package/src/providers/index.tsx +109 -0
- package/src/providers/tenant-provider.tsx +45 -0
- package/src/rbac/components/roles/role-card.tsx +158 -0
- package/src/rbac/components/roles/role-stats-cards.tsx +29 -0
- package/src/rbac/components/roles/role-toolbar.tsx +123 -0
- package/src/rbac/hooks/use-role-operations.ts +159 -0
- package/src/rbac/hooks/use-roles-data.ts +59 -0
- package/src/rbac/index.ts +297 -0
- package/src/rbac/lib/permission-helpers.ts +63 -0
- package/src/rbac/pages/action-list-page.tsx +25 -0
- package/src/rbac/pages/resource-list-page.tsx +25 -0
- package/src/rbac/pages/role-list-page.tsx +378 -0
- package/src/rbac/permission-service.ts +140 -0
- package/src/rbac/permissions.ts +135 -0
- package/src/rbac/resource-service.ts +115 -0
- package/src/rbac/resource-validator.ts +119 -0
- package/src/rbac/role-service.ts +165 -0
- package/src/rbac/server.ts +16 -0
- package/src/rbac/types.ts +38 -0
- package/src/schemas/action.schema.ts +66 -0
- package/src/schemas/branch.schema.ts +52 -0
- package/src/schemas/coming-soon-schema.ts +9 -0
- package/src/schemas/company.schema.ts +44 -0
- package/src/schemas/forgot-passward-schema.ts +9 -0
- package/src/schemas/index.ts +30 -0
- package/src/schemas/material-category.schema.ts +43 -0
- package/src/schemas/material-pricing.schema.ts +74 -0
- package/src/schemas/material.schema.ts +76 -0
- package/src/schemas/materials.ts +52 -0
- package/src/schemas/new-passward-schema.ts +15 -0
- package/src/schemas/partner-company.schema.ts +149 -0
- package/src/schemas/register-schema.ts +36 -0
- package/src/schemas/resource.schema.ts +133 -0
- package/src/schemas/role.schema.ts +11 -0
- package/src/schemas/sign-in-schema.ts +24 -0
- package/src/schemas/supplier-pricing.schema.ts +15 -0
- package/src/schemas/supplier.schema.ts +120 -0
- package/src/schemas/system-category-group.schema.ts +67 -0
- package/src/schemas/system-category.schema.ts +77 -0
- package/src/schemas/system-config.schema.ts +118 -0
- package/src/schemas/uom.schema.ts +75 -0
- package/src/schemas/user-supplier.schema.ts +179 -0
- package/src/schemas/user.schema.ts +18 -0
- package/src/schemas/verify-email-schema.ts +9 -0
- package/src/schemas/warehouse.schema.ts +49 -0
- package/src/system/components/categories/category-list.tsx +529 -0
- package/src/system/components/categories/category-manager.tsx +89 -0
- package/src/system/components/categories/group-sidebar.tsx +308 -0
- package/src/system/components/settings/setting-dialogs.tsx +197 -0
- package/src/system/components/settings/setting-field.tsx +291 -0
- package/src/system/components/settings/setting-form-dialog.tsx +308 -0
- package/src/system/components/settings/settings-groups.ts +80 -0
- package/src/system/components/settings/settings-search.tsx +71 -0
- package/src/system/components/settings/settings-section.tsx +74 -0
- package/src/system/components/settings/settings-sidebar.tsx +81 -0
- package/src/system/constants.ts +3 -0
- package/src/system/index.ts +150 -0
- package/src/system/job-manager.ts +176 -0
- package/src/system/pages/components/categories/category-list.tsx +537 -0
- package/src/system/pages/components/categories/category-manager.tsx +90 -0
- package/src/system/pages/components/categories/group-sidebar.tsx +311 -0
- package/src/system/pages/components/settings/sales-rules-settings.tsx +222 -0
- package/src/system/pages/components/settings/setting-dialogs.tsx +197 -0
- package/src/system/pages/components/settings/setting-field.tsx +292 -0
- package/src/system/pages/components/settings/setting-form-dialog.tsx +308 -0
- package/src/system/pages/components/settings/settings-groups.ts +87 -0
- package/src/system/pages/components/settings/settings-page.tsx +372 -0
- package/src/system/pages/components/settings/settings-search.tsx +71 -0
- package/src/system/pages/components/settings/settings-section.tsx +74 -0
- package/src/system/pages/components/settings/settings-sidebar.tsx +81 -0
- package/src/system/pages/components/settings/system-settings.tsx +244 -0
- package/src/system/pages/system-category-page.tsx +15 -0
- package/src/system/pages/system-settings-page.tsx +380 -0
- package/src/system/schemas/system-category-group.schema.ts +46 -0
- package/src/system/schemas/system-category.schema.ts +56 -0
- package/src/system/services/settings-service.ts +127 -0
- package/src/system/services/system-category-service.ts +63 -0
- package/src/system/types.ts +45 -0
- package/src/types/index.ts +703 -0
- package/src/ui/auth/auth-layout.tsx +135 -0
- package/src/ui/auth/forgot-password-form.tsx +98 -0
- package/src/ui/auth/index.tsx +7 -0
- package/src/ui/auth/new-password-form.tsx +107 -0
- package/src/ui/auth/oauth-links.tsx +30 -0
- package/src/ui/auth/register-form.tsx +202 -0
- package/src/ui/auth/sign-in-form.tsx +238 -0
- package/src/ui/auth/verify-email-form.tsx +104 -0
- package/src/ui/crud/index.tsx +10 -0
- package/src/ui/data-display/accordion.tsx +65 -0
- package/src/ui/data-display/aspect-ratio.tsx +11 -0
- package/src/ui/data-display/avatar.tsx +163 -0
- package/src/ui/data-display/bento-grid.tsx +77 -0
- package/src/ui/data-display/carousel.tsx +249 -0
- package/src/ui/data-display/chart.tsx +363 -0
- package/src/ui/data-display/code-block-highlight.tsx +54 -0
- package/src/ui/data-display/collapsible.tsx +42 -0
- package/src/ui/data-display/compact-stat-bar.tsx +149 -0
- package/src/ui/data-display/data-table/data-table-context.tsx +255 -0
- package/src/ui/data-display/data-table/data-table-empty-state.tsx +133 -0
- package/src/ui/data-display/data-table/data-table-skeleton.tsx +145 -0
- package/src/ui/data-display/data-table/data-table-toolbar.tsx +353 -0
- package/src/ui/data-display/data-table/data-table.tsx +597 -0
- package/src/ui/data-display/data-table/index.ts +44 -0
- package/src/ui/data-display/data-table-column-header.tsx +75 -0
- package/src/ui/data-display/data-table-pagination.tsx +130 -0
- package/src/ui/data-display/data-table-view-options.tsx +59 -0
- package/src/ui/data-display/formatted-number-input.tsx +210 -0
- package/src/ui/data-display/highlight.tsx +20 -0
- package/src/ui/data-display/hover-card.tsx +48 -0
- package/src/ui/data-display/index.tsx +50 -0
- package/src/ui/data-display/iphone-15-pro.tsx +114 -0
- package/src/ui/data-display/kanban/index.ts +4 -0
- package/src/ui/data-display/kanban/kanban-board.tsx +192 -0
- package/src/ui/data-display/kanban/kanban-column.tsx +74 -0
- package/src/ui/data-display/kanban/kanban-item.tsx +50 -0
- package/src/ui/data-display/kanban/kanban-types.ts +21 -0
- package/src/ui/data-display/kpi-card.tsx +68 -0
- package/src/ui/data-display/media-grid.tsx +110 -0
- package/src/ui/data-display/safari.tsx +175 -0
- package/src/ui/data-display/show-more-text.tsx +55 -0
- package/src/ui/data-display/tabs.tsx +68 -0
- package/src/ui/data-display/timeline.tsx +256 -0
- package/src/ui/feedback/alert.tsx +60 -0
- package/src/ui/feedback/context-menu.tsx +245 -0
- package/src/ui/feedback/drawer.tsx +132 -0
- package/src/ui/feedback/error-dialog.tsx +273 -0
- package/src/ui/feedback/index.tsx +183 -0
- package/src/ui/feedback/progress.tsx +32 -0
- package/src/ui/feedback/sheet.tsx +148 -0
- package/src/ui/feedback/sonner.tsx +36 -0
- package/src/ui/forms/command.tsx +157 -0
- package/src/ui/forms/date-picker.tsx +73 -0
- package/src/ui/forms/date-range-picker.tsx +76 -0
- package/src/ui/forms/date-time-picker.tsx +109 -0
- package/src/ui/forms/editor/editor-menu-bar.tsx +394 -0
- package/src/ui/forms/editor/index.tsx +130 -0
- package/src/ui/forms/editor/multi-select-example.tsx +1234 -0
- package/src/ui/forms/emoji-picker.tsx +109 -0
- package/src/ui/forms/file-dropzone.tsx +169 -0
- package/src/ui/forms/file-thumbnail.tsx +29 -0
- package/src/ui/forms/index.tsx +201 -0
- package/src/ui/forms/input-file.tsx +99 -0
- package/src/ui/forms/input-group.tsx +46 -0
- package/src/ui/forms/input-otp.tsx +81 -0
- package/src/ui/forms/input-phone.tsx +172 -0
- package/src/ui/forms/input-spin.tsx +116 -0
- package/src/ui/forms/input-tags.tsx +219 -0
- package/src/ui/forms/input-time.tsx +42 -0
- package/src/ui/forms/multi-select.tsx +629 -0
- package/src/ui/forms/multiple-date-picker.tsx +74 -0
- package/src/ui/forms/radio-group.tsx +42 -0
- package/src/ui/forms/rating.tsx +158 -0
- package/src/ui/forms/time-picker.tsx +57 -0
- package/src/ui/index.tsx +17 -0
- package/src/ui/layout/animated-list.tsx +77 -0
- package/src/ui/layout/animated-sidebar.tsx +294 -0
- package/src/ui/layout/command-menu.tsx +355 -0
- package/src/ui/layout/customizer.tsx +324 -0
- package/src/ui/layout/footer.tsx +43 -0
- package/src/ui/layout/full-screen-toggle.tsx +52 -0
- package/src/ui/layout/header-breadcrumb.tsx +77 -0
- package/src/ui/layout/horizontal-layout-header.tsx +83 -0
- package/src/ui/layout/horizontal-layout.tsx +50 -0
- package/src/ui/layout/index.tsx +25 -0
- package/src/ui/layout/language-dropdown.tsx +103 -0
- package/src/ui/layout/logo.tsx +63 -0
- package/src/ui/layout/main-layout.tsx +57 -0
- package/src/ui/layout/mode-dropdown.tsx +58 -0
- package/src/ui/layout/notification-dropdown.tsx +127 -0
- package/src/ui/layout/page-tabs.tsx +306 -0
- package/src/ui/layout/route-cache.tsx +214 -0
- package/src/ui/layout/sidebar-group-icon-menu.tsx +195 -0
- package/src/ui/layout/sidebar.tsx +279 -0
- package/src/ui/layout/tab-content-cache.tsx +201 -0
- package/src/ui/layout/tab-navigation-provider.tsx +536 -0
- package/src/ui/layout/toggle-mobile-sidebar.tsx +33 -0
- package/src/ui/layout/top-bar-header-menubar.tsx +412 -0
- package/src/ui/layout/user-dropdown.tsx +188 -0
- package/src/ui/layout/vertical-layout-header.tsx +65 -0
- package/src/ui/layout/vertical-layout.tsx +47 -0
- package/src/ui/management/audit-log-page.tsx +209 -0
- package/src/ui/management/cache-management.tsx +349 -0
- package/src/ui/management/index.ts +3 -0
- package/src/ui/management/job-management.tsx +308 -0
- package/src/ui/pages/not-found.tsx +30 -0
- package/src/ui/primitives/badge.tsx +66 -0
- package/src/ui/primitives/breadcrumb.tsx +103 -0
- package/src/ui/primitives/button.tsx +129 -0
- package/src/ui/primitives/calendar.tsx +74 -0
- package/src/ui/primitives/card.tsx +86 -0
- package/src/ui/primitives/checkbox.tsx +31 -0
- package/src/ui/primitives/client.ts +30 -0
- package/src/ui/primitives/combobox.tsx +290 -0
- package/src/ui/primitives/dialog.tsx +121 -0
- package/src/ui/primitives/dropdown-menu.tsx +239 -0
- package/src/ui/primitives/dynamic-icon.tsx +24 -0
- package/src/ui/primitives/index.tsx +134 -0
- package/src/ui/primitives/input-number.tsx +131 -0
- package/src/ui/primitives/input.tsx +22 -0
- package/src/ui/primitives/keyboard.tsx +23 -0
- package/src/ui/primitives/label.tsx +24 -0
- package/src/ui/primitives/menubar.tsx +262 -0
- package/src/ui/primitives/navigation-menu.tsx +157 -0
- package/src/ui/primitives/pagination.tsx +118 -0
- package/src/ui/primitives/popover.tsx +56 -0
- package/src/ui/primitives/prefetch-link.tsx +60 -0
- package/src/ui/primitives/resizable.tsx +59 -0
- package/src/ui/primitives/scroll-area.tsx +63 -0
- package/src/ui/primitives/select.tsx +172 -0
- package/src/ui/primitives/separator.tsx +51 -0
- package/src/ui/primitives/sidebar.tsx +844 -0
- package/src/ui/primitives/slider.tsx +27 -0
- package/src/ui/primitives/status-badge.tsx +47 -0
- package/src/ui/primitives/sticky-layout.tsx +50 -0
- package/src/ui/primitives/switch.tsx +29 -0
- package/src/ui/primitives/table.tsx +116 -0
- package/src/ui/primitives/tabs.tsx +55 -0
- package/src/ui/primitives/toggle-group.tsx +70 -0
- package/src/ui/primitives/toggle.tsx +47 -0
- package/src/ui/primitives/tooltip.tsx +59 -0
- package/src/user/components/dangerous-zone.tsx +34 -0
- package/src/user/components/delete-account-form.tsx +40 -0
- package/src/user/components/index.ts +4 -0
- package/src/user/components/profile-info-form.tsx +390 -0
- package/src/user/components/profile-info.tsx +32 -0
- package/src/user/components/unified-profile-dialog.tsx +1019 -0
- package/src/user/components/user-stats.tsx +27 -0
- package/src/user/components/user-toolbar.tsx +137 -0
- package/src/user/components/users-card-view.tsx +253 -0
- package/src/user/index.ts +11 -0
- package/src/user/pages/user-list-page.tsx +234 -0
- package/src/user/pages/users-client-page.tsx +385 -0
- package/src/user/profile-page.tsx +19 -0
- package/src/user/schemas.ts +68 -0
- package/src/user/types.ts +34 -0
- package/src/user/user-service.ts +538 -0
- package/src/utils/index.ts +906 -0
- package/src/workflow/activity-timeline.tsx +412 -0
- package/src/workflow/approval-workflow.tsx +31 -0
- package/src/workflow/index.ts +2 -0
- package/dist/audit/index.d.mts +0 -115
- package/dist/audit/index.d.ts +0 -115
- package/dist/audit/index.js +0 -204
- package/dist/audit/index.js.map +0 -1
- package/dist/audit/index.mjs +0 -200
- package/dist/audit/index.mjs.map +0 -1
- package/dist/auth/index.d.mts +0 -86
- package/dist/auth/index.d.ts +0 -86
- package/dist/auth/index.js +0 -210
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/index.mjs +0 -198
- package/dist/auth/index.mjs.map +0 -1
- package/dist/button-1dWvP9Ib.d.mts +0 -30
- package/dist/button-1dWvP9Ib.d.ts +0 -30
- package/dist/calendar-2QzdEo1z.d.mts +0 -20
- package/dist/calendar-2QzdEo1z.d.ts +0 -20
- package/dist/code-generation/index.d.mts +0 -30
- package/dist/code-generation/index.d.ts +0 -30
- package/dist/code-generation/index.js +0 -31
- package/dist/code-generation/index.js.map +0 -1
- package/dist/code-generation/index.mjs +0 -28
- package/dist/code-generation/index.mjs.map +0 -1
- package/dist/configs/index.d.mts +0 -175
- package/dist/configs/index.d.ts +0 -175
- package/dist/configs/index.js +0 -254
- package/dist/configs/index.js.map +0 -1
- package/dist/configs/index.mjs +0 -233
- package/dist/configs/index.mjs.map +0 -1
- package/dist/crud/index.d.mts +0 -646
- package/dist/crud/index.d.ts +0 -646
- package/dist/crud/index.js +0 -11772
- package/dist/crud/index.js.map +0 -1
- package/dist/crud/index.mjs +0 -11665
- package/dist/crud/index.mjs.map +0 -1
- package/dist/crud/server.d.mts +0 -20
- package/dist/crud/server.d.ts +0 -20
- package/dist/crud/server.js +0 -123
- package/dist/crud/server.js.map +0 -1
- package/dist/crud/server.mjs +0 -120
- package/dist/crud/server.mjs.map +0 -1
- package/dist/data-table-skeleton-12NA8Mjx.d.mts +0 -39
- package/dist/data-table-skeleton-12NA8Mjx.d.ts +0 -39
- package/dist/dialog-bKfjZMTd.d.mts +0 -22
- package/dist/dialog-bKfjZMTd.d.ts +0 -22
- package/dist/dynamic-icon-DrGIiu2N.d.mts +0 -10
- package/dist/dynamic-icon-DrGIiu2N.d.ts +0 -10
- package/dist/home/index.d.mts +0 -269
- package/dist/home/index.d.ts +0 -269
- package/dist/home/index.js +0 -1678
- package/dist/home/index.js.map +0 -1
- package/dist/home/index.mjs +0 -1635
- package/dist/home/index.mjs.map +0 -1
- package/dist/hooks/index.d.mts +0 -7
- package/dist/hooks/index.d.ts +0 -7
- package/dist/hooks/index.js +0 -8316
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/index.mjs +0 -8255
- package/dist/hooks/index.mjs.map +0 -1
- package/dist/index-50hpiPrV.d.ts +0 -116
- package/dist/index-B9zQVEVi.d.mts +0 -116
- package/dist/index.d.mts +0 -5
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -123
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -118
- package/dist/index.mjs.map +0 -1
- package/dist/infrastructure/index.d.mts +0 -423
- package/dist/infrastructure/index.d.ts +0 -423
- package/dist/infrastructure/index.js +0 -633
- package/dist/infrastructure/index.js.map +0 -1
- package/dist/infrastructure/index.mjs +0 -619
- package/dist/infrastructure/index.mjs.map +0 -1
- package/dist/label-DWTEkNPo.d.ts +0 -226
- package/dist/label-LPpdcoBx.d.mts +0 -226
- package/dist/layout/index.d.mts +0 -48
- package/dist/layout/index.d.ts +0 -48
- package/dist/layout/index.js +0 -117
- package/dist/layout/index.js.map +0 -1
- package/dist/layout/index.mjs +0 -90
- package/dist/layout/index.mjs.map +0 -1
- package/dist/navigation/index.d.mts +0 -16
- package/dist/navigation/index.d.ts +0 -16
- package/dist/navigation/index.js +0 -53
- package/dist/navigation/index.js.map +0 -1
- package/dist/navigation/index.mjs +0 -50
- package/dist/navigation/index.mjs.map +0 -1
- package/dist/notification/index.d.mts +0 -105
- package/dist/notification/index.d.ts +0 -105
- package/dist/notification/index.js +0 -278
- package/dist/notification/index.js.map +0 -1
- package/dist/notification/index.mjs +0 -274
- package/dist/notification/index.mjs.map +0 -1
- package/dist/organization/index.d.mts +0 -99
- package/dist/organization/index.d.ts +0 -99
- package/dist/organization/index.js +0 -360
- package/dist/organization/index.js.map +0 -1
- package/dist/organization/index.mjs +0 -352
- package/dist/organization/index.mjs.map +0 -1
- package/dist/plugin/index.d.mts +0 -83
- package/dist/plugin/index.d.ts +0 -83
- package/dist/plugin/index.js +0 -86
- package/dist/plugin/index.js.map +0 -1
- package/dist/plugin/index.mjs +0 -84
- package/dist/plugin/index.mjs.map +0 -1
- package/dist/providers/index.d.mts +0 -25
- package/dist/providers/index.d.ts +0 -25
- package/dist/providers/index.js +0 -84
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/index.mjs +0 -77
- package/dist/providers/index.mjs.map +0 -1
- package/dist/rbac/index.d.mts +0 -226
- package/dist/rbac/index.d.ts +0 -226
- package/dist/rbac/index.js +0 -4784
- package/dist/rbac/index.js.map +0 -1
- package/dist/rbac/index.mjs +0 -4722
- package/dist/rbac/index.mjs.map +0 -1
- package/dist/rbac/permissions.d.mts +0 -26
- package/dist/rbac/permissions.d.ts +0 -26
- package/dist/rbac/permissions.js +0 -94
- package/dist/rbac/permissions.js.map +0 -1
- package/dist/rbac/permissions.mjs +0 -90
- package/dist/rbac/permissions.mjs.map +0 -1
- package/dist/rbac/server.d.mts +0 -1
- package/dist/rbac/server.d.ts +0 -1
- package/dist/rbac/server.js +0 -128
- package/dist/rbac/server.js.map +0 -1
- package/dist/rbac/server.mjs +0 -124
- package/dist/rbac/server.mjs.map +0 -1
- package/dist/schemas/index.d.mts +0 -1257
- package/dist/schemas/index.d.ts +0 -1257
- package/dist/schemas/index.js +0 -572
- package/dist/schemas/index.js.map +0 -1
- package/dist/schemas/index.mjs +0 -523
- package/dist/schemas/index.mjs.map +0 -1
- package/dist/server-QuYCTa89.d.mts +0 -83
- package/dist/server-QuYCTa89.d.ts +0 -83
- package/dist/sonner-C74GlRDQ.d.mts +0 -71
- package/dist/sonner-C74GlRDQ.d.ts +0 -71
- package/dist/status-BOXZgIqX.d.mts +0 -12
- package/dist/status-BOXZgIqX.d.ts +0 -12
- package/dist/system/index.d.mts +0 -77
- package/dist/system/index.d.ts +0 -77
- package/dist/system/index.js +0 -102
- package/dist/system/index.js.map +0 -1
- package/dist/system/index.mjs +0 -100
- package/dist/system/index.mjs.map +0 -1
- package/dist/tabs-C6FfBwPY.d.mts +0 -18
- package/dist/tabs-C6FfBwPY.d.ts +0 -18
- package/dist/tenant-provider-B8eC_Wpb.d.mts +0 -27
- package/dist/tenant-provider-B8eC_Wpb.d.ts +0 -27
- package/dist/types/index.d.mts +0 -469
- package/dist/types/index.d.ts +0 -469
- package/dist/types/index.js +0 -25
- package/dist/types/index.js.map +0 -1
- package/dist/types/index.mjs +0 -21
- package/dist/types/index.mjs.map +0 -1
- package/dist/ui/auth.d.mts +0 -39
- package/dist/ui/auth.d.ts +0 -39
- package/dist/ui/auth.js +0 -4941
- package/dist/ui/auth.js.map +0 -1
- package/dist/ui/auth.mjs +0 -4896
- package/dist/ui/auth.mjs.map +0 -1
- package/dist/ui/crud.d.mts +0 -2
- package/dist/ui/crud.d.ts +0 -2
- package/dist/ui/crud.js +0 -4
- package/dist/ui/crud.js.map +0 -1
- package/dist/ui/crud.mjs +0 -3
- package/dist/ui/crud.mjs.map +0 -1
- package/dist/ui/data-display.d.mts +0 -596
- package/dist/ui/data-display.d.ts +0 -596
- package/dist/ui/data-display.js +0 -5307
- package/dist/ui/data-display.js.map +0 -1
- package/dist/ui/data-display.mjs +0 -5212
- package/dist/ui/data-display.mjs.map +0 -1
- package/dist/ui/feedback.d.mts +0 -55
- package/dist/ui/feedback.d.ts +0 -55
- package/dist/ui/feedback.js +0 -2608
- package/dist/ui/feedback.js.map +0 -1
- package/dist/ui/feedback.mjs +0 -2526
- package/dist/ui/feedback.mjs.map +0 -1
- package/dist/ui/forms.d.mts +0 -309
- package/dist/ui/forms.d.ts +0 -309
- package/dist/ui/forms.js +0 -4656
- package/dist/ui/forms.js.map +0 -1
- package/dist/ui/forms.mjs +0 -4571
- package/dist/ui/forms.mjs.map +0 -1
- package/dist/ui/index.d.mts +0 -331
- package/dist/ui/index.d.ts +0 -331
- package/dist/ui/index.js +0 -16953
- package/dist/ui/index.js.map +0 -1
- package/dist/ui/index.mjs +0 -16598
- package/dist/ui/index.mjs.map +0 -1
- package/dist/ui/primitives/client.d.mts +0 -61
- package/dist/ui/primitives/client.d.ts +0 -61
- package/dist/ui/primitives/client.js +0 -3408
- package/dist/ui/primitives/client.js.map +0 -1
- package/dist/ui/primitives/client.mjs +0 -3256
- package/dist/ui/primitives/client.mjs.map +0 -1
- package/dist/ui/primitives.d.mts +0 -113
- package/dist/ui/primitives.d.ts +0 -113
- package/dist/ui/primitives.js +0 -3356
- package/dist/ui/primitives.js.map +0 -1
- package/dist/ui/primitives.mjs +0 -3227
- package/dist/ui/primitives.mjs.map +0 -1
- package/dist/user/index.d.mts +0 -228
- package/dist/user/index.d.ts +0 -228
- package/dist/user/index.js +0 -4306
- package/dist/user/index.js.map +0 -1
- package/dist/user/index.mjs +0 -4260
- package/dist/user/index.mjs.map +0 -1
- package/dist/utils/index.d.mts +0 -205
- package/dist/utils/index.d.ts +0 -205
- package/dist/utils/index.js +0 -574
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/index.mjs +0 -514
- package/dist/utils/index.mjs.map +0 -1
- package/dist/workflow/index.d.mts +0 -40
- package/dist/workflow/index.d.ts +0 -40
- package/dist/workflow/index.js +0 -3710
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/index.mjs +0 -3677
- package/dist/workflow/index.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/infrastructure/logger/logger.ts","../../src/infrastructure/cache/cache.ts","../../src/infrastructure/cache/cache-manager.ts","../../src/infrastructure/event-bus/event-bus.ts","../../src/infrastructure/cron/cron-manager.ts","../../src/infrastructure/api-service.ts"],"names":["logger"],"mappings":"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","file":"index.js","sourcesContent":["import type { Logger, LoggerOptions, LogContext, LogLevel } from \"./types\";\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n};\n\nfunction getLogLevel(): LogLevel {\n const envLevel = process.env.LOG_LEVEL?.toLowerCase() as LogLevel;\n if (envLevel && LOG_LEVELS[envLevel] !== undefined) {\n return envLevel;\n }\n return process.env.NODE_ENV === \"production\" ? \"info\" : \"debug\";\n}\n\nfunction formatMessage(\n level: LogLevel,\n name: string,\n message: string,\n context?: LogContext,\n): string {\n const timestamp = new Date().toISOString();\n const contextStr = context ? ` ${JSON.stringify(context)}` : \"\";\n return `${timestamp} [${level.toUpperCase()}] [${name}] ${message}${contextStr}`;\n}\n\nfunction shouldLog(level: LogLevel, minLevel: LogLevel): boolean {\n return LOG_LEVELS[level] >= LOG_LEVELS[minLevel];\n}\n\nclass ConsoleLogger implements Logger {\n private name: string;\n private level: LogLevel;\n\n constructor(options: LoggerOptions = {}) {\n this.name = options.name || \"App\";\n this.level = options.level || getLogLevel();\n }\n\n trace(message: string, context?: LogContext): void {\n if (shouldLog(\"trace\", this.level)) {\n console.log(formatMessage(\"trace\", this.name, message, context));\n }\n }\n\n debug(message: string, context?: LogContext): void {\n if (shouldLog(\"debug\", this.level)) {\n console.log(formatMessage(\"debug\", this.name, message, context));\n }\n }\n\n info(message: string, context?: LogContext): void {\n if (shouldLog(\"info\", this.level)) {\n console.info(formatMessage(\"info\", this.name, message, context));\n }\n }\n\n warn(message: string, context?: LogContext): void {\n if (shouldLog(\"warn\", this.level)) {\n console.warn(formatMessage(\"warn\", this.name, message, context));\n }\n }\n\n error(message: string, context?: LogContext): void {\n if (shouldLog(\"error\", this.level)) {\n console.error(formatMessage(\"error\", this.name, message, context));\n }\n }\n}\n\n/**\n * Create a logger instance with the given name/options\n *\n * @example\n * ```typescript\n * import { createLogger } from '@goerp/core/infrastructure';\n *\n * const logger = createLogger('OrderService');\n * logger.info('Order created', { orderId: '123' });\n * logger.error('Payment failed', { error: err.message });\n * ```\n */\nexport function createLogger(\n nameOrOptions: string | LoggerOptions = {},\n): Logger {\n const options =\n typeof nameOrOptions === \"string\" ? { name: nameOrOptions } : nameOrOptions;\n\n return new ConsoleLogger(options);\n}\n\n// Default app logger\nexport const logger = createLogger(\"App\");\n","import type { Cache, CacheOptions } from \"./types\";\n\ninterface CacheEntry<T> {\n value: T;\n expireAt: number | null;\n}\n\n/**\n * Simple in-memory cache implementation\n */\nexport class MemoryCache implements Cache {\n private store = new Map<string, CacheEntry<unknown>>();\n private name: string;\n private defaultTtl: number;\n private maxSize: number;\n private prefix: string;\n\n constructor(options: CacheOptions & { prefix?: string }) {\n this.name = options.name;\n this.defaultTtl = options.ttl || 3600;\n this.maxSize = options.max || 1000;\n this.prefix = options.prefix || \"\";\n }\n\n private getFullKey(key: string): string {\n return this.prefix\n ? `${this.prefix}:${this.name}:${key}`\n : `${this.name}:${key}`;\n }\n\n private isExpired(entry: CacheEntry<unknown>): boolean {\n if (entry.expireAt === null) return false;\n return Date.now() > entry.expireAt;\n }\n\n private cleanup(): void {\n for (const [key, entry] of this.store.entries()) {\n if (this.isExpired(entry)) {\n this.store.delete(key);\n }\n }\n }\n\n async get<T>(key: string): Promise<T | undefined> {\n const fullKey = this.getFullKey(key);\n const entry = this.store.get(fullKey);\n\n if (!entry) return undefined;\n\n if (this.isExpired(entry)) {\n this.store.delete(fullKey);\n return undefined;\n }\n\n return entry.value as T;\n }\n\n async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n const fullKey = this.getFullKey(key);\n const ttlSeconds = ttl ?? this.defaultTtl;\n\n // Enforce max size\n if (this.store.size >= this.maxSize) {\n this.cleanup();\n // If still full, remove oldest\n if (this.store.size >= this.maxSize) {\n const firstKey = this.store.keys().next().value;\n if (firstKey) this.store.delete(firstKey);\n }\n }\n\n this.store.set(fullKey, {\n value,\n expireAt: ttlSeconds > 0 ? Date.now() + ttlSeconds * 1000 : null,\n });\n }\n\n async del(key: string): Promise<void> {\n const fullKey = this.getFullKey(key);\n this.store.delete(fullKey);\n }\n\n async has(key: string): Promise<boolean> {\n const value = await this.get(key);\n return value !== undefined;\n }\n\n async reset(): Promise<void> {\n // Only clear keys for this cache (by prefix)\n const prefix = this.getFullKey(\"\");\n for (const key of this.store.keys()) {\n if (key.startsWith(prefix)) {\n this.store.delete(key);\n }\n }\n }\n\n async keys(): Promise<string[]> {\n this.cleanup();\n const prefix = this.getFullKey(\"\");\n const result: string[] = [];\n\n for (const key of this.store.keys()) {\n if (key.startsWith(prefix)) {\n result.push(key.slice(prefix.length));\n }\n }\n\n return result;\n }\n\n /** Get cache info for admin dashboard */\n getInfo(): { name: string; ttl: number; maxSize: number } {\n return {\n name: this.name,\n ttl: this.defaultTtl,\n maxSize: this.maxSize,\n };\n }\n}\n","import type {\n Cache,\n CacheManager as ICacheManager,\n CacheManagerOptions,\n CacheOptions,\n} from \"./types\";\nimport { MemoryCache } from \"./cache\";\n\n/**\n * CacheManager - manages multiple cache instances\n *\n * @example\n * ```typescript\n * import { cacheManager } from '@goerp/core/infrastructure';\n *\n * const userCache = cacheManager.create({ name: 'users', ttl: 3600 });\n * await userCache.set('user:123', userData);\n * const user = await userCache.get('user:123');\n * ```\n */\nclass CacheManagerImpl implements ICacheManager {\n private caches = new Map<string, Cache>();\n private options: CacheManagerOptions;\n\n constructor(options: CacheManagerOptions = {}) {\n this.options = {\n defaultTtl: options.defaultTtl || 3600,\n prefix: options.prefix || \"\",\n };\n }\n\n create(options: CacheOptions): Cache {\n const existing = this.caches.get(options.name);\n if (existing) {\n return existing;\n }\n\n const cache = new MemoryCache({\n ...options,\n ttl: options.ttl || this.options.defaultTtl,\n prefix: this.options.prefix,\n });\n\n this.caches.set(options.name, cache);\n return cache;\n }\n\n get(name: string): Cache | undefined {\n return this.caches.get(name);\n }\n\n async flushAll(): Promise<void> {\n const promises: Promise<void>[] = [];\n for (const cache of this.caches.values()) {\n promises.push(cache.reset());\n }\n await Promise.all(promises);\n }\n\n /** Get all cache names */\n getAllCaches(): string[] {\n return Array.from(this.caches.keys());\n }\n\n /** Get stats for all caches (for admin dashboard) */\n async getStats(): Promise<\n Array<{ name: string; itemCount: number; ttl: number }>\n > {\n const stats: Array<{ name: string; itemCount: number; ttl: number }> = [];\n\n for (const [name, cache] of this.caches.entries()) {\n const keys = await cache.keys();\n stats.push({\n name,\n itemCount: keys.length,\n ttl: (cache as MemoryCache).getInfo().ttl,\n });\n }\n\n return stats;\n }\n\n /** Clear a specific cache by name */\n async clearCache(name: string): Promise<boolean> {\n const cache = this.caches.get(name);\n if (cache) {\n await cache.reset();\n return true;\n }\n return false;\n }\n}\n\n// Singleton instance pattern stable across hot-reloads\nconst globalForCache = globalThis as unknown as {\n coreCacheManager: CacheManagerImpl | undefined;\n};\n\nexport const cacheManager =\n globalForCache.coreCacheManager ?? new CacheManagerImpl();\n\nif (process.env.NODE_ENV !== \"production\") {\n globalForCache.coreCacheManager = cacheManager;\n}\n\n// Export class for testing\nexport { CacheManagerImpl };\n","import type {\n EventBus as IEventBus,\n EventHandler,\n EventSubscription,\n} from \"./types\";\nimport { createLogger } from \"../logger\";\n\nconst logger = createLogger(\"EventBus\");\n\n/**\n * Simple in-memory event bus for pub/sub pattern\n *\n * @example\n * ```typescript\n * import { eventBus } from '@goerp/core/infrastructure';\n *\n * // Subscribe\n * eventBus.on('order.created', async ({ orderId }) => {\n * await notificationService.notify(orderId);\n * });\n *\n * // Publish\n * eventBus.emit('order.created', { orderId: '123' });\n *\n * // Async emit (wait for handlers)\n * await eventBus.emitAsync('order.approved', { orderId: '123' });\n * ```\n */\nclass EventBusImpl implements IEventBus {\n private handlers = new Map<string, Set<EventHandler<unknown>>>();\n private onceHandlers = new Map<string, Set<EventHandler<unknown>>>();\n\n on<T>(event: string, handler: EventHandler<T>): EventSubscription {\n if (!this.handlers.has(event)) {\n this.handlers.set(event, new Set());\n }\n this.handlers.get(event)!.add(handler as EventHandler<unknown>);\n\n logger.debug(`Subscribed to event: ${event}`);\n\n return {\n unsubscribe: () => {\n this.handlers.get(event)?.delete(handler as EventHandler<unknown>);\n },\n };\n }\n\n once<T>(event: string, handler: EventHandler<T>): EventSubscription {\n if (!this.onceHandlers.has(event)) {\n this.onceHandlers.set(event, new Set());\n }\n this.onceHandlers.get(event)!.add(handler as EventHandler<unknown>);\n\n return {\n unsubscribe: () => {\n this.onceHandlers.get(event)?.delete(handler as EventHandler<unknown>);\n },\n };\n }\n\n emit<T>(event: string, data: T): void {\n logger.debug(`Emitting event: ${event}`);\n\n const handlers = this.handlers.get(event);\n const onceHandlers = this.onceHandlers.get(event);\n\n if (handlers) {\n for (const handler of handlers) {\n try {\n handler(data);\n } catch (error) {\n logger.error(`Error in event handler for ${event}`, {\n error: String(error),\n });\n }\n }\n }\n\n if (onceHandlers) {\n for (const handler of onceHandlers) {\n try {\n handler(data);\n } catch (error) {\n logger.error(`Error in once handler for ${event}`, {\n error: String(error),\n });\n }\n }\n this.onceHandlers.delete(event);\n }\n }\n\n async emitAsync<T>(event: string, data: T): Promise<void> {\n logger.debug(`Emitting async event: ${event}`);\n\n const handlers = this.handlers.get(event);\n const onceHandlers = this.onceHandlers.get(event);\n const promises: Promise<void>[] = [];\n\n if (handlers) {\n for (const handler of handlers) {\n promises.push(\n Promise.resolve(handler(data)).catch((error) => {\n logger.error(`Error in async handler for ${event}`, {\n error: String(error),\n });\n }),\n );\n }\n }\n\n if (onceHandlers) {\n for (const handler of onceHandlers) {\n promises.push(\n Promise.resolve(handler(data)).catch((error) => {\n logger.error(`Error in async once handler for ${event}`, {\n error: String(error),\n });\n }),\n );\n }\n this.onceHandlers.delete(event);\n }\n\n await Promise.all(promises);\n }\n\n off(event: string): void {\n this.handlers.delete(event);\n this.onceHandlers.delete(event);\n logger.debug(`Removed all handlers for event: ${event}`);\n }\n\n removeAllListeners(): void {\n this.handlers.clear();\n this.onceHandlers.clear();\n logger.debug(\"Removed all event listeners\");\n }\n}\n\n// Singleton instance\nexport const eventBus = new EventBusImpl();\n\n// Export class for testing\nexport { EventBusImpl };\n","import type {\n CronJob,\n CronJobManager as ICronJobManager,\n CronJobOptions,\n} from \"./types\";\nimport { createLogger } from \"../logger\";\n\nconst logger = createLogger(\"CronJobManager\");\n\n/**\n * Simple interval-based cron job (no external dependencies)\n * Supports basic cron expressions: minute, hour, day, month, weekday\n */\nclass SimpleCronJob implements CronJob {\n name: string;\n cronTime: string;\n private onTick: () => void | Promise<void>;\n private intervalId: NodeJS.Timeout | null = null;\n private running = false;\n private intervalMs: number;\n\n constructor(options: CronJobOptions) {\n this.name = options.name;\n this.cronTime = options.cronTime;\n this.onTick = options.onTick;\n this.intervalMs = this.parseInterval(options.cronTime);\n\n if (options.start) {\n this.start();\n }\n }\n\n /**\n * Parse simple cron expressions to interval\n * Supports:\n * - '* * * * *' - every minute\n * - '0 * * * *' - every hour\n * - '0 0 * * *' - every day at midnight\n * - Also supports simple intervals: '5m', '1h', '1d'\n */\n private parseInterval(cronTime: string): number {\n // Simple interval format: 5m, 1h, 1d\n const simpleMatch = cronTime.match(/^(\\d+)([smhd])$/);\n if (simpleMatch) {\n const value = parseInt(simpleMatch[1], 10);\n const unit = simpleMatch[2];\n switch (unit) {\n case \"s\":\n return value * 1000;\n case \"m\":\n return value * 60 * 1000;\n case \"h\":\n return value * 60 * 60 * 1000;\n case \"d\":\n return value * 24 * 60 * 60 * 1000;\n }\n }\n\n // Parse cron expression\n const parts = cronTime.split(\" \");\n if (parts.length >= 5) {\n const [minute, hour, dayOfMonth, ,] = parts;\n\n // Every minute\n if (minute === \"*\" && hour === \"*\") {\n return 60 * 1000; // 1 minute\n }\n\n // Every hour (minute = 0)\n if (minute !== \"*\" && hour === \"*\") {\n return 60 * 60 * 1000; // 1 hour\n }\n\n // Every day (minute and hour specified)\n if (minute !== \"*\" && hour !== \"*\" && dayOfMonth === \"*\") {\n return 24 * 60 * 60 * 1000; // 1 day\n }\n }\n\n // Default: every minute\n logger.warn(\n `Could not parse cron expression \"${cronTime}\", defaulting to every minute`,\n );\n return 60 * 1000;\n }\n\n start(): void {\n if (this.running) return;\n\n logger.info(`Starting cron job: ${this.name}`, {\n interval: `${this.intervalMs}ms`,\n });\n\n this.running = true;\n this.intervalId = setInterval(async () => {\n try {\n await this.onTick();\n } catch (error) {\n logger.error(`Cron job \"${this.name}\" failed`, {\n error: String(error),\n });\n }\n }, this.intervalMs);\n }\n\n stop(): void {\n if (!this.running || !this.intervalId) return;\n\n logger.info(`Stopping cron job: ${this.name}`);\n clearInterval(this.intervalId);\n this.intervalId = null;\n this.running = false;\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n nextDate(): Date | null {\n if (!this.running) return null;\n return new Date(Date.now() + this.intervalMs);\n }\n}\n\n/**\n * CronJobManager - manages scheduled tasks\n *\n * @example\n * ```typescript\n * import { cronJobManager } from '@goerp/core/infrastructure';\n *\n * // Add a job that runs every hour\n * cronJobManager.addJob({\n * name: 'cleanup-expired-tokens',\n * cronTime: '1h', // or '0 * * * *'\n * onTick: async () => {\n * await db.token.deleteMany({ where: { expiredAt: { lt: new Date() } } });\n * },\n * start: true\n * });\n *\n * // Stop all jobs on shutdown\n * cronJobManager.stopAll();\n * ```\n */\nclass CronJobManagerImpl implements ICronJobManager {\n private jobs = new Map<string, CronJob>();\n\n addJob(options: CronJobOptions): CronJob {\n if (this.jobs.has(options.name)) {\n logger.warn(`Job \"${options.name}\" already exists, removing old one`);\n this.removeJob(options.name);\n }\n\n const job = new SimpleCronJob(options);\n this.jobs.set(options.name, job);\n\n logger.info(`Added cron job: ${options.name}`, {\n cronTime: options.cronTime,\n });\n return job;\n }\n\n removeJob(name: string): void {\n const job = this.jobs.get(name);\n if (job) {\n job.stop();\n this.jobs.delete(name);\n logger.info(`Removed cron job: ${name}`);\n }\n }\n\n getJob(name: string): CronJob | undefined {\n return this.jobs.get(name);\n }\n\n getAllJobs(): CronJob[] {\n return Array.from(this.jobs.values());\n }\n\n startAll(): void {\n for (const job of this.jobs.values()) {\n job.start();\n }\n logger.info(`Started ${this.jobs.size} cron jobs`);\n }\n\n stopAll(): void {\n for (const job of this.jobs.values()) {\n job.stop();\n }\n logger.info(`Stopped ${this.jobs.size} cron jobs`);\n }\n\n /** Get info for all jobs (for admin dashboard) */\n getJobsInfo(): Array<{\n name: string;\n cronTime: string;\n isRunning: boolean;\n nextDate: Date | null;\n }> {\n const info: Array<{\n name: string;\n cronTime: string;\n isRunning: boolean;\n nextDate: Date | null;\n }> = [];\n\n for (const job of this.jobs.values()) {\n info.push({\n name: job.name,\n cronTime: job.cronTime,\n isRunning: job.isRunning(),\n nextDate: job.nextDate(),\n });\n }\n\n return info;\n }\n\n /** Toggle a job on/off */\n toggleJob(name: string): boolean {\n const job = this.jobs.get(name);\n if (!job) return false;\n\n if (job.isRunning()) {\n job.stop();\n } else {\n job.start();\n }\n return true;\n }\n}\n\n// Singleton instance\nexport const cronJobManager = new CronJobManagerImpl();\n\n// Export classes for testing\nexport { CronJobManagerImpl, SimpleCronJob };\n","/**\n * @goerp/core - Abstract API Service Layer\n * Inspired by Plane's APIService pattern (packages/services/src/api.service.ts)\n *\n * Provides a centralized HTTP client base class for all domain services.\n * Features:\n * - Centralized error handling & 401 redirect\n * - Request/Response interceptors\n * - Type-safe CRUD methods\n * - Automatic retry logic (configurable)\n *\n * @example\n * ```typescript\n * class CustomerService extends APIService {\n * constructor() { super('/api/sales/customers') }\n *\n * async list(filters?: CustomerFilters) {\n * return this.get<PaginatedResponse<Customer>>('/', { params: filters })\n * }\n *\n * async getById(id: string) {\n * return this.get<Customer>(`/${id}`)\n * }\n *\n * async create(data: CreateCustomerDTO) {\n * return this.post<Customer>('/', data)\n * }\n * }\n * ```\n */\n\n// ============================================================\n// Types\n// ============================================================\n\nexport interface APIRequestConfig {\n params?: Record<string, unknown>\n headers?: Record<string, string>\n signal?: AbortSignal\n /** Override default timeout (ms) */\n timeout?: number\n}\n\nexport interface APIResponse<T = unknown> {\n data: T\n status: number\n ok: boolean\n}\n\nexport interface APIError {\n message: string\n status: number\n code?: string\n details?: unknown\n}\n\nexport interface APIServiceOptions {\n /** Called when a 401 response is received */\n onUnauthorized?: () => void\n /** Called before each request (e.g., for logging) */\n onRequest?: (method: string, url: string) => void\n /** Called after each response (e.g., for logging) */\n onResponse?: (method: string, url: string, status: number) => void\n /** Called on any error */\n onError?: (error: APIError) => void\n /** Default timeout in ms (default: 30000) */\n timeout?: number\n /** Default headers to include in every request */\n defaultHeaders?: Record<string, string>\n}\n\n// ============================================================\n// APIService Base Class\n// ============================================================\n\n/**\n * Abstract base class for making HTTP requests using fetch API.\n * All domain services (CustomerService, OrderService, etc.) should extend this class.\n *\n * Unlike Plane's axios-based approach, we use native fetch() for Next.js compatibility\n * (better SSR support, no extra dependency, works with Server Components).\n */\nexport abstract class APIService {\n protected readonly baseURL: string\n private readonly options: APIServiceOptions\n\n constructor(baseURL: string, options: APIServiceOptions = {}) {\n this.baseURL = baseURL\n this.options = options\n }\n\n // --------------------------------------------------------\n // Core HTTP Methods\n // --------------------------------------------------------\n\n /**\n * Makes a GET request to the specified endpoint\n */\n protected async get<T = unknown>(\n endpoint: string = \"\",\n config: APIRequestConfig = {}\n ): Promise<T> {\n const url = this.buildURL(endpoint, config.params)\n return this.request<T>(\"GET\", url, undefined, config)\n }\n\n /**\n * Makes a POST request with JSON body\n */\n protected async post<T = unknown>(\n endpoint: string = \"\",\n data?: unknown,\n config: APIRequestConfig = {}\n ): Promise<T> {\n const url = this.buildURL(endpoint)\n return this.request<T>(\"POST\", url, data, config)\n }\n\n /**\n * Makes a PUT request with JSON body\n */\n protected async put<T = unknown>(\n endpoint: string = \"\",\n data?: unknown,\n config: APIRequestConfig = {}\n ): Promise<T> {\n const url = this.buildURL(endpoint)\n return this.request<T>(\"PUT\", url, data, config)\n }\n\n /**\n * Makes a PATCH request with JSON body\n */\n protected async patch<T = unknown>(\n endpoint: string = \"\",\n data?: unknown,\n config: APIRequestConfig = {}\n ): Promise<T> {\n const url = this.buildURL(endpoint)\n return this.request<T>(\"PATCH\", url, data, config)\n }\n\n /**\n * Makes a DELETE request\n */\n protected async delete<T = unknown>(\n endpoint: string = \"\",\n data?: unknown,\n config: APIRequestConfig = {}\n ): Promise<T> {\n const url = this.buildURL(endpoint)\n return this.request<T>(\"DELETE\", url, data, config)\n }\n\n // --------------------------------------------------------\n // Internal Helpers\n // --------------------------------------------------------\n\n /**\n * Build full URL with query params\n */\n private buildURL(endpoint: string, params?: Record<string, unknown>): string {\n const url = `${this.baseURL}${endpoint}`\n if (!params || Object.keys(params).length === 0) return url\n\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null && value !== \"\") {\n searchParams.append(key, String(value))\n }\n }\n\n const queryString = searchParams.toString()\n return queryString ? `${url}?${queryString}` : url\n }\n\n /**\n * Core request method — all HTTP methods funnel through here.\n * Handles: headers, body, timeout, error handling, 401 redirect.\n */\n private async request<T>(\n method: string,\n url: string,\n data?: unknown,\n config: APIRequestConfig = {}\n ): Promise<T> {\n // Notify interceptor\n this.options.onRequest?.(method, url)\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...this.options.defaultHeaders,\n ...config.headers,\n }\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n credentials: \"include\", // Send cookies (same as axios withCredentials)\n signal: config.signal,\n }\n\n // Attach body for non-GET methods\n if (data !== undefined && method !== \"GET\") {\n fetchOptions.body = JSON.stringify(data)\n }\n\n try {\n const response = await fetch(url, fetchOptions)\n\n // Notify response interceptor\n this.options.onResponse?.(method, url, response.status)\n\n // Handle 401 — Centralized unauthorized redirect\n if (response.status === 401) {\n const error: APIError = {\n message: \"Unauthorized\",\n status: 401,\n code: \"UNAUTHORIZED\",\n }\n this.options.onUnauthorized?.()\n this.options.onError?.(error)\n throw error\n }\n\n // Handle other error statuses\n if (!response.ok) {\n let errorBody: unknown\n try {\n errorBody = await response.json()\n } catch {\n errorBody = await response.text()\n }\n\n const error: APIError = {\n message:\n typeof errorBody === \"object\" && errorBody !== null && \"message\" in errorBody\n ? String((errorBody as Record<string, unknown>).message)\n : `HTTP Error ${response.status}`,\n status: response.status,\n code:\n typeof errorBody === \"object\" && errorBody !== null && \"code\" in errorBody\n ? String((errorBody as Record<string, unknown>).code)\n : undefined,\n details: errorBody,\n }\n this.options.onError?.(error)\n throw error\n }\n\n // Handle empty responses (204 No Content)\n if (response.status === 204) {\n return undefined as T\n }\n\n // Parse JSON response\n const responseData = await response.json()\n return responseData as T\n } catch (error) {\n // Re-throw APIError as-is\n if (this.isAPIError(error)) {\n throw error\n }\n\n // Wrap network/timeout errors\n const apiError: APIError = {\n message: error instanceof Error ? error.message : \"Network error\",\n status: 0,\n code: \"NETWORK_ERROR\",\n }\n this.options.onError?.(apiError)\n throw apiError\n }\n }\n\n /**\n * Type guard for APIError\n */\n private isAPIError(error: unknown): error is APIError {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n \"status\" in error\n )\n }\n}\n\n// ============================================================\n// Pre-configured Service Factory\n// ============================================================\n\n/**\n * Default options for client-side services.\n * Handles 401 redirect to login page automatically.\n */\nexport const defaultClientOptions: APIServiceOptions = {\n onUnauthorized: () => {\n if (typeof window !== \"undefined\") {\n const currentPath = window.location.pathname\n window.location.replace(`/login?next_path=${encodeURIComponent(currentPath)}`)\n }\n },\n}\n\n/**\n * Helper to check if an error is an APIError\n */\nexport function isAPIError(error: unknown): error is APIError {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n \"status\" in error &&\n typeof (error as APIError).status === \"number\"\n )\n}\n"]}
|