@open-mercato/core 0.4.2-canary-15e78de280 → 0.4.2-canary-f075c3eb92
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/modules/api_keys/setup.js +11 -0
- package/dist/modules/api_keys/setup.js.map +7 -0
- package/dist/modules/attachments/components/AttachmentLibrary.js +1 -1
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/lib/assignmentDetails.js +31 -17
- package/dist/modules/attachments/lib/assignmentDetails.js.map +2 -2
- package/dist/modules/attachments/lib/partitions.js +3 -3
- package/dist/modules/attachments/lib/partitions.js.map +2 -2
- package/dist/modules/attachments/setup.js +11 -0
- package/dist/modules/attachments/setup.js.map +7 -0
- package/dist/modules/audit_logs/setup.js +12 -0
- package/dist/modules/audit_logs/setup.js.map +7 -0
- package/dist/modules/auth/lib/setup-app.js +29 -159
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/setup.js +11 -0
- package/dist/modules/auth/setup.js.map +7 -0
- package/dist/modules/business_rules/setup.js +11 -0
- package/dist/modules/business_rules/setup.js.map +7 -0
- package/dist/modules/catalog/setup.js +22 -0
- package/dist/modules/catalog/setup.js.map +7 -0
- package/dist/modules/configs/lib/upgrade-actions.js +65 -15
- package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
- package/dist/modules/configs/setup.js +16 -0
- package/dist/modules/configs/setup.js.map +7 -0
- package/dist/modules/currencies/setup.js +16 -0
- package/dist/modules/currencies/setup.js.map +7 -0
- package/dist/modules/customers/setup.js +36 -0
- package/dist/modules/customers/setup.js.map +7 -0
- package/dist/modules/dashboards/setup.js +12 -0
- package/dist/modules/dashboards/setup.js.map +7 -0
- package/dist/modules/dictionaries/setup.js +12 -0
- package/dist/modules/dictionaries/setup.js.map +7 -0
- package/dist/modules/directory/setup.js +12 -0
- package/dist/modules/directory/setup.js.map +7 -0
- package/dist/modules/entities/setup.js +11 -0
- package/dist/modules/entities/setup.js.map +7 -0
- package/dist/modules/feature_toggles/setup.js +11 -0
- package/dist/modules/feature_toggles/setup.js.map +7 -0
- package/dist/modules/perspectives/setup.js +12 -0
- package/dist/modules/perspectives/setup.js.map +7 -0
- package/dist/modules/planner/setup.js +21 -0
- package/dist/modules/planner/setup.js.map +7 -0
- package/dist/modules/query_index/setup.js +11 -0
- package/dist/modules/query_index/setup.js.map +7 -0
- package/dist/modules/resources/setup.js +21 -0
- package/dist/modules/resources/setup.js.map +7 -0
- package/dist/modules/sales/setup.js +99 -0
- package/dist/modules/sales/setup.js.map +7 -0
- package/dist/modules/staff/setup.js +27 -0
- package/dist/modules/staff/setup.js.map +7 -0
- package/dist/modules/workflows/lib/seeds.js +3 -15
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/migrations/Migration20251207131955.js +76 -72
- package/dist/modules/workflows/migrations/Migration20251207131955.js.map +2 -2
- package/dist/modules/workflows/setup.js +16 -0
- package/dist/modules/workflows/setup.js.map +7 -0
- package/package.json +2 -2
- package/src/__tests__/module-decoupling.test.ts +356 -0
- package/src/modules/api_keys/setup.ts +9 -0
- package/src/modules/attachments/components/AttachmentLibrary.tsx +2 -2
- package/src/modules/attachments/lib/assignmentDetails.ts +32 -16
- package/src/modules/attachments/lib/partitions.ts +3 -3
- package/src/modules/attachments/setup.ts +9 -0
- package/src/modules/audit_logs/setup.ts +10 -0
- package/src/modules/auth/__tests__/cli-setup-acl.test.ts +30 -0
- package/src/modules/auth/lib/setup-app.ts +40 -177
- package/src/modules/auth/setup.ts +9 -0
- package/src/modules/business_rules/setup.ts +9 -0
- package/src/modules/catalog/setup.ts +22 -0
- package/src/modules/configs/lib/upgrade-actions.ts +78 -17
- package/src/modules/configs/setup.ts +14 -0
- package/src/modules/currencies/setup.ts +15 -0
- package/src/modules/customers/setup.ts +36 -0
- package/src/modules/dashboards/setup.ts +10 -0
- package/src/modules/dictionaries/setup.ts +10 -0
- package/src/modules/directory/setup.ts +10 -0
- package/src/modules/entities/setup.ts +9 -0
- package/src/modules/feature_toggles/setup.ts +9 -0
- package/src/modules/perspectives/setup.ts +10 -0
- package/src/modules/planner/setup.ts +21 -0
- package/src/modules/query_index/setup.ts +9 -0
- package/src/modules/resources/setup.ts +21 -0
- package/src/modules/sales/setup.ts +108 -0
- package/src/modules/staff/setup.ts +27 -0
- package/src/modules/workflows/lib/seeds.ts +4 -16
- package/src/modules/workflows/migrations/Migration20251207131955.ts +77 -143
- package/src/modules/workflows/setup.ts +15 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/configs/lib/upgrade-actions.ts"],
|
|
4
|
-
"sourcesContent": ["import { runWithCacheTenant } from '@open-mercato/cache'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AwilixContainer } from 'awilix'\nimport { Role, RoleAcl } from '@open-mercato/core/modules/auth/data/entities'\nimport type { RbacService } from '@open-mercato/core/modules/auth/services/rbacService'\nimport { reindexModules } from '@open-mercato/core/modules/configs/lib/reindex-helpers'\nimport { installExampleCatalogData, type CatalogSeedScope } from '@open-mercato/core/modules/catalog/lib/seeds'\nimport { seedSalesExamples } from '@open-mercato/core/modules/sales/seed/examples'\nimport { seedExampleCurrencies } from '@open-mercato/core/modules/currencies/lib/seeds'\nimport { seedExampleWorkflows } from '@open-mercato/core/modules/workflows/lib/seeds'\nimport { seedPlannerAvailabilityRuleSetDefaults, seedPlannerUnavailabilityReasons } from '@open-mercato/core/modules/planner/lib/seeds'\nimport { seedResourcesAddressTypes, seedResourcesCapacityUnits, seedResourcesResourceExamples } from '@open-mercato/core/modules/resources/lib/seeds'\nimport { seedStaffTeamExamples } from '@open-mercato/core/modules/staff/lib/seeds'\nimport { collectCrudCacheStats, purgeCrudCacheSegment } from '@open-mercato/shared/lib/crud/cache-stats'\nimport { isCrudCacheEnabled, resolveCrudCache } from '@open-mercato/shared/lib/crud/cache'\nimport * as semver from 'semver'\nimport type { VectorIndexService } from '@open-mercato/search/vector'\nimport { EncryptionMap } from '@open-mercato/core/modules/entities/data/entities'\nimport { DEFAULT_ENCRYPTION_MAPS } from '@open-mercato/core/modules/entities/lib/encryptionDefaults'\nimport type { TenantDataEncryptionService } from '@open-mercato/shared/lib/encryption/tenantDataEncryptionService'\n\nfunction resolveVectorService(container: AwilixContainer): VectorIndexService | null {\n try {\n return container.resolve<VectorIndexService>('vectorIndexService')\n } catch {\n return null\n }\n}\n\nfunction resolveEncryptionService(container: AwilixContainer): TenantDataEncryptionService | null {\n try {\n return container.resolve<TenantDataEncryptionService>('tenantEncryptionService')\n } catch {\n return null\n }\n}\n\nasync function ensureVectorSearchEncryptionMap(\n em: EntityManager,\n tenantId: string,\n organizationId: string | null,\n): Promise<boolean> {\n const spec = DEFAULT_ENCRYPTION_MAPS.find((entry) => entry.entityId === 'vector:vector_search')\n const required = spec?.fields ?? []\n if (!required.length) return false\n\n const repo = em.getRepository(EncryptionMap)\n const existing = await repo.findOne({\n entityId: 'vector:vector_search',\n tenantId,\n organizationId,\n deletedAt: null,\n })\n\n if (!existing) {\n em.persist(\n em.create(EncryptionMap, {\n entityId: 'vector:vector_search',\n tenantId,\n organizationId,\n fieldsJson: required,\n isActive: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n }),\n )\n await em.flush()\n return true\n }\n\n const existingFields = Array.isArray(existing.fieldsJson) ? existing.fieldsJson : []\n const byField = new Map<string, { field: string; hashField?: string | null }>()\n for (const item of existingFields) {\n if (!item?.field) continue\n byField.set(item.field, item)\n }\n for (const req of required) {\n if (!req?.field) continue\n if (byField.has(req.field)) continue\n byField.set(req.field, req)\n }\n\n const merged = Array.from(byField.values())\n const changed = merged.length !== existingFields.length\n if (!changed && existing.isActive) return false\n\n existing.fieldsJson = merged\n existing.isActive = true\n existing.updatedAt = new Date()\n await em.flush()\n return true\n}\n\nexport type UpgradeActionContext = CatalogSeedScope & {\n container: AwilixContainer\n em: EntityManager\n}\n\nexport type UpgradeActionDefinition = {\n id: string\n version: string\n messageKey: string\n ctaKey: string\n successKey: string\n loadingKey?: string\n run: (ctx: UpgradeActionContext) => Promise<void>\n}\n\n/**\n * Compare two semantic version strings.\n * Uses the semver library for robust version comparison.\n * Returns negative if a < b, positive if a > b, 0 if equal.\n * Throws an error if either version string is invalid.\n */\nexport function compareVersions(a: string, b: string): number {\n const cleanA = semver.valid(semver.coerce(a))\n const cleanB = semver.valid(semver.coerce(b))\n if (!cleanA) {\n throw new Error(`Invalid version string: \"${a}\". Expected a valid semver format (e.g., \"1.2.3\").`)\n }\n if (!cleanB) {\n throw new Error(`Invalid version string: \"${b}\". Expected a valid semver format (e.g., \"1.2.3\").`)\n }\n return semver.compare(cleanA, cleanB)\n}\n\nasync function purgeCatalogCrudCache(container: AwilixContainer, tenantId: string | null) {\n if (!isCrudCacheEnabled()) return\n const cache = resolveCrudCache(container)\n if (!cache) return\n await runWithCacheTenant(tenantId ?? null, async () => {\n const stats = await collectCrudCacheStats(cache)\n const catalogSegments = stats.segments.filter((segment) => segment.resource?.startsWith('catalog.'))\n if (!catalogSegments.length) return\n for (const segment of catalogSegments) {\n try {\n await purgeCrudCacheSegment(cache, segment.segment)\n } catch (error) {\n console.warn('[upgrade-actions] failed to purge catalog cache segment', {\n tenantId,\n segment: segment.segment,\n error,\n })\n }\n }\n })\n}\n\nexport const upgradeActions: UpgradeActionDefinition[] = [\n {\n id: 'configs.upgrades.catalog.examples',\n version: '0.3.4',\n messageKey: 'upgrades.v034.message',\n ctaKey: 'upgrades.v034.cta',\n successKey: 'upgrades.v034.success',\n loadingKey: 'upgrades.v034.loading',\n async run({ container, em, tenantId, organizationId }) {\n await installExampleCatalogData(container, { tenantId, organizationId }, em)\n const vectorService = resolveVectorService(container)\n await reindexModules(em, ['catalog'], { tenantId, organizationId, vectorService })\n },\n },\n {\n id: 'configs.upgrades.auth.admin_business_rules_acl',\n version: '0.3.5',\n messageKey: 'upgrades.v035.message',\n ctaKey: 'upgrades.v035.cta',\n successKey: 'upgrades.v035.success',\n loadingKey: 'upgrades.v035.loading',\n async run({ container, em, tenantId }) {\n const normalizedTenantId = tenantId.trim()\n await em.transactional(async (tem) => {\n const adminRole = await tem.findOne(Role, { name: 'admin', tenantId: normalizedTenantId, deletedAt: null })\n if (!adminRole) return\n\n const roleAcls = await tem.find(RoleAcl, { role: adminRole, tenantId: normalizedTenantId, deletedAt: null })\n let touched = false\n if (!roleAcls.length) {\n tem.persist(\n tem.create(RoleAcl, {\n role: adminRole,\n tenantId: normalizedTenantId,\n featuresJson: ['business_rules.*'],\n isSuperAdmin: false,\n createdAt: new Date(),\n updatedAt: new Date(),\n }),\n )\n touched = true\n }\n\n for (const acl of roleAcls) {\n const features = Array.isArray(acl.featuresJson) ? [...acl.featuresJson] : []\n if (features.includes('business_rules.*')) continue\n acl.featuresJson = [...features, 'business_rules.*']\n acl.updatedAt = new Date()\n touched = true\n }\n\n if (touched) {\n await tem.flush()\n }\n })\n\n const rbac = container.resolve<RbacService>('rbacService')\n await rbac.invalidateTenantCache(normalizedTenantId)\n },\n },\n {\n id: 'configs.upgrades.sales.examples',\n version: '0.3.6',\n messageKey: 'upgrades.v036.message',\n ctaKey: 'upgrades.v036.cta',\n successKey: 'upgrades.v036.success',\n loadingKey: 'upgrades.v036.loading',\n async run({ container, em, tenantId, organizationId }) {\n await em.transactional(async (tem) => {\n await seedSalesExamples(tem, container, { tenantId, organizationId })\n })\n const vectorService = resolveVectorService(container)\n await reindexModules(em, ['sales', 'catalog'], { tenantId, organizationId, vectorService })\n await purgeCatalogCrudCache(container, tenantId)\n },\n },\n {\n id: 'configs.upgrades.vector.encryption_vector_search',\n version: '0.3.6',\n messageKey: 'upgrades.v036_vector_encryption.message',\n ctaKey: 'upgrades.v036_vector_encryption.cta',\n successKey: 'upgrades.v036_vector_encryption.success',\n loadingKey: 'upgrades.v036_vector_encryption.loading',\n async run({ container, em, tenantId, organizationId }) {\n const normalizedTenantId = tenantId.trim()\n const normalizedOrgId = organizationId ?? null\n\n const encryptionService = resolveEncryptionService(container)\n if (!encryptionService?.isEnabled?.()) {\n return\n }\n\n const updated = await em.transactional(async (tem) => {\n return ensureVectorSearchEncryptionMap(tem, normalizedTenantId, normalizedOrgId)\n })\n\n if (updated) {\n await encryptionService.invalidateMap('vector:vector_search', normalizedTenantId, normalizedOrgId)\n }\n\n const vectorService = resolveVectorService(container)\n if (vectorService) {\n await vectorService.reindexAll({ tenantId: normalizedTenantId, organizationId: normalizedOrgId, purgeFirst: false })\n }\n },\n },\n {\n id: 'configs.upgrades.examples.currencies_workflows',\n version: '0.3.13',\n messageKey: 'upgrades.v0313.message',\n ctaKey: 'upgrades.v0313.cta',\n successKey: 'upgrades.v0313.success',\n loadingKey: 'upgrades.v0313.loading',\n async run({ container, em, tenantId, organizationId }) {\n const normalizedTenantId = tenantId.trim()\n const scope = { tenantId, organizationId }\n await em.transactional(async (tem) => {\n await seedExampleCurrencies(tem, scope)\n await seedExampleWorkflows(tem, scope)\n\n const adminRole = await tem.findOne(Role, { name: 'admin', tenantId: normalizedTenantId, deletedAt: null })\n if (!adminRole) return\n\n const roleAcls = await tem.find(RoleAcl, { role: adminRole, tenantId: normalizedTenantId, deletedAt: null })\n let touched = false\n if (!roleAcls.length) {\n tem.persist(\n tem.create(RoleAcl, {\n role: adminRole,\n tenantId: normalizedTenantId,\n featuresJson: ['search.*', 'feature_toggles.*', 'currencies.*'],\n isSuperAdmin: false,\n createdAt: new Date(),\n updatedAt: new Date(),\n }),\n )\n touched = true\n }\n\n for (const acl of roleAcls) {\n const features = Array.isArray(acl.featuresJson) ? [...acl.featuresJson] : []\n const nextFeatures = new Set(features)\n nextFeatures.add('search.*')\n nextFeatures.add('feature_toggles.*')\n nextFeatures.add('currencies.*')\n if (nextFeatures.size === features.length) continue\n acl.featuresJson = Array.from(nextFeatures)\n acl.updatedAt = new Date()\n touched = true\n }\n\n if (touched) {\n await tem.flush()\n }\n })\n const rbac = container.resolve<RbacService>('rbacService')\n await rbac.invalidateTenantCache(normalizedTenantId)\n },\n },\n {\n id: 'configs.upgrades.examples.planner_staff_resources',\n version: '0.4.1',\n messageKey: 'upgrades.v041.message',\n ctaKey: 'upgrades.v041.cta',\n successKey: 'upgrades.v041.success',\n loadingKey: 'upgrades.v041.loading',\n async run({ container, em, tenantId, organizationId }) {\n const normalizedTenantId = tenantId.trim()\n const scope = { tenantId, organizationId }\n await em.transactional(async (tem) => {\n await seedPlannerAvailabilityRuleSetDefaults(tem, scope)\n await seedPlannerUnavailabilityReasons(tem, scope)\n await seedStaffTeamExamples(tem, scope)\n await seedResourcesCapacityUnits(tem, scope)\n await seedResourcesAddressTypes(tem, scope)\n await seedResourcesResourceExamples(tem, scope)\n\n const adminRole = await tem.findOne(Role, { name: 'admin', tenantId: normalizedTenantId, deletedAt: null })\n if (!adminRole) return\n\n const roleAcls = await tem.find(RoleAcl, { role: adminRole, tenantId: normalizedTenantId, deletedAt: null })\n const addedFeatures = [\n 'staff.*',\n 'staff.leave_requests.manage',\n 'resources.*',\n 'planner.*',\n ]\n let touched = false\n if (!roleAcls.length) {\n tem.persist(\n tem.create(RoleAcl, {\n role: adminRole,\n tenantId: normalizedTenantId,\n featuresJson: addedFeatures,\n isSuperAdmin: false,\n createdAt: new Date(),\n updatedAt: new Date(),\n }),\n )\n touched = true\n }\n\n for (const acl of roleAcls) {\n const features = Array.isArray(acl.featuresJson) ? [...acl.featuresJson] : []\n const nextFeatures = new Set(features)\n for (const feature of addedFeatures) nextFeatures.add(feature)\n if (nextFeatures.size === features.length) continue\n acl.featuresJson = Array.from(nextFeatures)\n acl.updatedAt = new Date()\n touched = true\n }\n\n if (touched) {\n await tem.flush()\n }\n })\n\n const rbac = container.resolve<RbacService>('rbacService')\n await rbac.invalidateTenantCache(normalizedTenantId)\n\n const vectorService = resolveVectorService(container)\n await reindexModules(em, ['planner', 'staff', 'resources'], { tenantId, organizationId, vectorService })\n },\n },\n]\n\nexport function actionsUpToVersion(version: string): UpgradeActionDefinition[] {\n return upgradeActions\n .filter((action) => compareVersions(action.version, version) <= 0)\n .sort((a, b) => compareVersions(a.version, b.version) || a.id.localeCompare(b.id))\n}\n\nexport function findUpgradeAction(actionId: string, maxVersion: string): UpgradeActionDefinition | undefined {\n const matches = actionsUpToVersion(maxVersion).filter((action) => action.id === actionId)\n if (!matches.length) return undefined\n return matches[matches.length - 1]\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,0BAA0B;AAGnC,SAAS,MAAM,eAAe;AAE9B,SAAS,sBAAsB;
|
|
4
|
+
"sourcesContent": ["import { runWithCacheTenant } from '@open-mercato/cache'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AwilixContainer } from 'awilix'\nimport { Role, RoleAcl } from '@open-mercato/core/modules/auth/data/entities'\nimport type { RbacService } from '@open-mercato/core/modules/auth/services/rbacService'\nimport { reindexModules } from '@open-mercato/core/modules/configs/lib/reindex-helpers'\n// Optional module imports are loaded dynamically inside each upgrade action\n// so the app does not crash when a module is disabled.\nimport { collectCrudCacheStats, purgeCrudCacheSegment } from '@open-mercato/shared/lib/crud/cache-stats'\nimport { isCrudCacheEnabled, resolveCrudCache } from '@open-mercato/shared/lib/crud/cache'\nimport * as semver from 'semver'\nimport type { VectorIndexService } from '@open-mercato/search/vector'\nimport { EncryptionMap } from '@open-mercato/core/modules/entities/data/entities'\nimport { DEFAULT_ENCRYPTION_MAPS } from '@open-mercato/core/modules/entities/lib/encryptionDefaults'\nimport type { TenantDataEncryptionService } from '@open-mercato/shared/lib/encryption/tenantDataEncryptionService'\n\nfunction resolveVectorService(container: AwilixContainer): VectorIndexService | null {\n try {\n return container.resolve<VectorIndexService>('vectorIndexService')\n } catch {\n return null\n }\n}\n\nfunction resolveEncryptionService(container: AwilixContainer): TenantDataEncryptionService | null {\n try {\n return container.resolve<TenantDataEncryptionService>('tenantEncryptionService')\n } catch {\n return null\n }\n}\n\nasync function ensureVectorSearchEncryptionMap(\n em: EntityManager,\n tenantId: string,\n organizationId: string | null,\n): Promise<boolean> {\n const spec = DEFAULT_ENCRYPTION_MAPS.find((entry) => entry.entityId === 'vector:vector_search')\n const required = spec?.fields ?? []\n if (!required.length) return false\n\n const repo = em.getRepository(EncryptionMap)\n const existing = await repo.findOne({\n entityId: 'vector:vector_search',\n tenantId,\n organizationId,\n deletedAt: null,\n })\n\n if (!existing) {\n em.persist(\n em.create(EncryptionMap, {\n entityId: 'vector:vector_search',\n tenantId,\n organizationId,\n fieldsJson: required,\n isActive: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n }),\n )\n await em.flush()\n return true\n }\n\n const existingFields = Array.isArray(existing.fieldsJson) ? existing.fieldsJson : []\n const byField = new Map<string, { field: string; hashField?: string | null }>()\n for (const item of existingFields) {\n if (!item?.field) continue\n byField.set(item.field, item)\n }\n for (const req of required) {\n if (!req?.field) continue\n if (byField.has(req.field)) continue\n byField.set(req.field, req)\n }\n\n const merged = Array.from(byField.values())\n const changed = merged.length !== existingFields.length\n if (!changed && existing.isActive) return false\n\n existing.fieldsJson = merged\n existing.isActive = true\n existing.updatedAt = new Date()\n await em.flush()\n return true\n}\n\nexport type UpgradeActionContext = {\n tenantId: string\n organizationId: string\n container: AwilixContainer\n em: EntityManager\n}\n\nexport type UpgradeActionDefinition = {\n id: string\n version: string\n messageKey: string\n ctaKey: string\n successKey: string\n loadingKey?: string\n run: (ctx: UpgradeActionContext) => Promise<void>\n}\n\n/**\n * Compare two semantic version strings.\n * Uses the semver library for robust version comparison.\n * Returns negative if a < b, positive if a > b, 0 if equal.\n * Throws an error if either version string is invalid.\n */\nexport function compareVersions(a: string, b: string): number {\n const cleanA = semver.valid(semver.coerce(a))\n const cleanB = semver.valid(semver.coerce(b))\n if (!cleanA) {\n throw new Error(`Invalid version string: \"${a}\". Expected a valid semver format (e.g., \"1.2.3\").`)\n }\n if (!cleanB) {\n throw new Error(`Invalid version string: \"${b}\". Expected a valid semver format (e.g., \"1.2.3\").`)\n }\n return semver.compare(cleanA, cleanB)\n}\n\nasync function purgeCatalogCrudCache(container: AwilixContainer, tenantId: string | null) {\n if (!isCrudCacheEnabled()) return\n const cache = resolveCrudCache(container)\n if (!cache) return\n await runWithCacheTenant(tenantId ?? null, async () => {\n const stats = await collectCrudCacheStats(cache)\n const catalogSegments = stats.segments.filter((segment) => segment.resource?.startsWith('catalog.'))\n if (!catalogSegments.length) return\n for (const segment of catalogSegments) {\n try {\n await purgeCrudCacheSegment(cache, segment.segment)\n } catch (error) {\n console.warn('[upgrade-actions] failed to purge catalog cache segment', {\n tenantId,\n segment: segment.segment,\n error,\n })\n }\n }\n })\n}\n\nexport const upgradeActions: UpgradeActionDefinition[] = [\n {\n id: 'configs.upgrades.catalog.examples',\n version: '0.3.4',\n messageKey: 'upgrades.v034.message',\n ctaKey: 'upgrades.v034.cta',\n successKey: 'upgrades.v034.success',\n loadingKey: 'upgrades.v034.loading',\n async run({ container, em, tenantId, organizationId }) {\n let installExampleCatalogData: typeof import('@open-mercato/core/modules/catalog/lib/seeds')['installExampleCatalogData'] | undefined\n try {\n const catalogSeeds = await import('@open-mercato/core/modules/catalog/lib/seeds')\n installExampleCatalogData = catalogSeeds.installExampleCatalogData\n } catch {\n console.warn('[upgrade-actions] catalog module not available, skipping catalog example data')\n return\n }\n await installExampleCatalogData(container, { tenantId, organizationId }, em)\n const vectorService = resolveVectorService(container)\n await reindexModules(em, ['catalog'], { tenantId, organizationId, vectorService })\n },\n },\n {\n id: 'configs.upgrades.auth.admin_business_rules_acl',\n version: '0.3.5',\n messageKey: 'upgrades.v035.message',\n ctaKey: 'upgrades.v035.cta',\n successKey: 'upgrades.v035.success',\n loadingKey: 'upgrades.v035.loading',\n async run({ container, em, tenantId }) {\n const normalizedTenantId = tenantId.trim()\n await em.transactional(async (tem) => {\n const adminRole = await tem.findOne(Role, { name: 'admin', tenantId: normalizedTenantId, deletedAt: null })\n if (!adminRole) return\n\n const roleAcls = await tem.find(RoleAcl, { role: adminRole, tenantId: normalizedTenantId, deletedAt: null })\n let touched = false\n if (!roleAcls.length) {\n tem.persist(\n tem.create(RoleAcl, {\n role: adminRole,\n tenantId: normalizedTenantId,\n featuresJson: ['business_rules.*'],\n isSuperAdmin: false,\n createdAt: new Date(),\n updatedAt: new Date(),\n }),\n )\n touched = true\n }\n\n for (const acl of roleAcls) {\n const features = Array.isArray(acl.featuresJson) ? [...acl.featuresJson] : []\n if (features.includes('business_rules.*')) continue\n acl.featuresJson = [...features, 'business_rules.*']\n acl.updatedAt = new Date()\n touched = true\n }\n\n if (touched) {\n await tem.flush()\n }\n })\n\n const rbac = container.resolve<RbacService>('rbacService')\n await rbac.invalidateTenantCache(normalizedTenantId)\n },\n },\n {\n id: 'configs.upgrades.sales.examples',\n version: '0.3.6',\n messageKey: 'upgrades.v036.message',\n ctaKey: 'upgrades.v036.cta',\n successKey: 'upgrades.v036.success',\n loadingKey: 'upgrades.v036.loading',\n async run({ container, em, tenantId, organizationId }) {\n let seedSalesExamples: typeof import('@open-mercato/core/modules/sales/seed/examples')['seedSalesExamples'] | undefined\n try {\n const salesSeeds = await import('@open-mercato/core/modules/sales/seed/examples')\n seedSalesExamples = salesSeeds.seedSalesExamples\n } catch {\n console.warn('[upgrade-actions] sales module not available, skipping sales example data')\n return\n }\n await em.transactional(async (tem) => {\n await seedSalesExamples!(tem, container, { tenantId, organizationId })\n })\n const vectorService = resolveVectorService(container)\n await reindexModules(em, ['sales', 'catalog'], { tenantId, organizationId, vectorService })\n await purgeCatalogCrudCache(container, tenantId)\n },\n },\n {\n id: 'configs.upgrades.vector.encryption_vector_search',\n version: '0.3.6',\n messageKey: 'upgrades.v036_vector_encryption.message',\n ctaKey: 'upgrades.v036_vector_encryption.cta',\n successKey: 'upgrades.v036_vector_encryption.success',\n loadingKey: 'upgrades.v036_vector_encryption.loading',\n async run({ container, em, tenantId, organizationId }) {\n const normalizedTenantId = tenantId.trim()\n const normalizedOrgId = organizationId ?? null\n\n const encryptionService = resolveEncryptionService(container)\n if (!encryptionService?.isEnabled?.()) {\n return\n }\n\n const updated = await em.transactional(async (tem) => {\n return ensureVectorSearchEncryptionMap(tem, normalizedTenantId, normalizedOrgId)\n })\n\n if (updated) {\n await encryptionService.invalidateMap('vector:vector_search', normalizedTenantId, normalizedOrgId)\n }\n\n const vectorService = resolveVectorService(container)\n if (vectorService) {\n await vectorService.reindexAll({ tenantId: normalizedTenantId, organizationId: normalizedOrgId, purgeFirst: false })\n }\n },\n },\n {\n id: 'configs.upgrades.examples.currencies_workflows',\n version: '0.3.13',\n messageKey: 'upgrades.v0313.message',\n ctaKey: 'upgrades.v0313.cta',\n successKey: 'upgrades.v0313.success',\n loadingKey: 'upgrades.v0313.loading',\n async run({ container, em, tenantId, organizationId }) {\n const normalizedTenantId = tenantId.trim()\n const scope = { tenantId, organizationId }\n\n let seedExampleCurrencies: typeof import('@open-mercato/core/modules/currencies/lib/seeds')['seedExampleCurrencies'] | undefined\n try {\n const currenciesSeeds = await import('@open-mercato/core/modules/currencies/lib/seeds')\n seedExampleCurrencies = currenciesSeeds.seedExampleCurrencies\n } catch {\n console.warn('[upgrade-actions] currencies module not available, skipping currency seeding')\n }\n\n let seedExampleWorkflows: typeof import('@open-mercato/core/modules/workflows/lib/seeds')['seedExampleWorkflows'] | undefined\n try {\n const workflowsSeeds = await import('@open-mercato/core/modules/workflows/lib/seeds')\n seedExampleWorkflows = workflowsSeeds.seedExampleWorkflows\n } catch {\n console.warn('[upgrade-actions] workflows module not available, skipping workflow seeding')\n }\n\n await em.transactional(async (tem) => {\n if (seedExampleCurrencies) await seedExampleCurrencies(tem, scope)\n if (seedExampleWorkflows) await seedExampleWorkflows(tem, scope)\n\n const adminRole = await tem.findOne(Role, { name: 'admin', tenantId: normalizedTenantId, deletedAt: null })\n if (!adminRole) return\n\n const roleAcls = await tem.find(RoleAcl, { role: adminRole, tenantId: normalizedTenantId, deletedAt: null })\n let touched = false\n if (!roleAcls.length) {\n tem.persist(\n tem.create(RoleAcl, {\n role: adminRole,\n tenantId: normalizedTenantId,\n featuresJson: ['search.*', 'feature_toggles.*', 'currencies.*'],\n isSuperAdmin: false,\n createdAt: new Date(),\n updatedAt: new Date(),\n }),\n )\n touched = true\n }\n\n for (const acl of roleAcls) {\n const features = Array.isArray(acl.featuresJson) ? [...acl.featuresJson] : []\n const nextFeatures = new Set(features)\n nextFeatures.add('search.*')\n nextFeatures.add('feature_toggles.*')\n nextFeatures.add('currencies.*')\n if (nextFeatures.size === features.length) continue\n acl.featuresJson = Array.from(nextFeatures)\n acl.updatedAt = new Date()\n touched = true\n }\n\n if (touched) {\n await tem.flush()\n }\n })\n const rbac = container.resolve<RbacService>('rbacService')\n await rbac.invalidateTenantCache(normalizedTenantId)\n },\n },\n {\n id: 'configs.upgrades.examples.planner_staff_resources',\n version: '0.4.1',\n messageKey: 'upgrades.v041.message',\n ctaKey: 'upgrades.v041.cta',\n successKey: 'upgrades.v041.success',\n loadingKey: 'upgrades.v041.loading',\n async run({ container, em, tenantId, organizationId }) {\n const normalizedTenantId = tenantId.trim()\n const scope = { tenantId, organizationId }\n\n let seedPlannerAvailabilityRuleSetDefaults: typeof import('@open-mercato/core/modules/planner/lib/seeds')['seedPlannerAvailabilityRuleSetDefaults'] | undefined\n let seedPlannerUnavailabilityReasons: typeof import('@open-mercato/core/modules/planner/lib/seeds')['seedPlannerUnavailabilityReasons'] | undefined\n try {\n const plannerSeeds = await import('@open-mercato/core/modules/planner/lib/seeds')\n seedPlannerAvailabilityRuleSetDefaults = plannerSeeds.seedPlannerAvailabilityRuleSetDefaults\n seedPlannerUnavailabilityReasons = plannerSeeds.seedPlannerUnavailabilityReasons\n } catch {\n console.warn('[upgrade-actions] planner module not available, skipping planner seeding')\n }\n\n let seedStaffTeamExamples: typeof import('@open-mercato/core/modules/staff/lib/seeds')['seedStaffTeamExamples'] | undefined\n try {\n const staffSeeds = await import('@open-mercato/core/modules/staff/lib/seeds')\n seedStaffTeamExamples = staffSeeds.seedStaffTeamExamples\n } catch {\n console.warn('[upgrade-actions] staff module not available, skipping staff seeding')\n }\n\n let seedResourcesAddressTypes: typeof import('@open-mercato/core/modules/resources/lib/seeds')['seedResourcesAddressTypes'] | undefined\n let seedResourcesCapacityUnits: typeof import('@open-mercato/core/modules/resources/lib/seeds')['seedResourcesCapacityUnits'] | undefined\n let seedResourcesResourceExamples: typeof import('@open-mercato/core/modules/resources/lib/seeds')['seedResourcesResourceExamples'] | undefined\n try {\n const resourcesSeeds = await import('@open-mercato/core/modules/resources/lib/seeds')\n seedResourcesAddressTypes = resourcesSeeds.seedResourcesAddressTypes\n seedResourcesCapacityUnits = resourcesSeeds.seedResourcesCapacityUnits\n seedResourcesResourceExamples = resourcesSeeds.seedResourcesResourceExamples\n } catch {\n console.warn('[upgrade-actions] resources module not available, skipping resources seeding')\n }\n\n await em.transactional(async (tem) => {\n if (seedPlannerAvailabilityRuleSetDefaults) await seedPlannerAvailabilityRuleSetDefaults(tem, scope)\n if (seedPlannerUnavailabilityReasons) await seedPlannerUnavailabilityReasons(tem, scope)\n if (seedStaffTeamExamples) await seedStaffTeamExamples(tem, scope)\n if (seedResourcesCapacityUnits) await seedResourcesCapacityUnits(tem, scope)\n if (seedResourcesAddressTypes) await seedResourcesAddressTypes(tem, scope)\n if (seedResourcesResourceExamples) await seedResourcesResourceExamples(tem, scope)\n\n const adminRole = await tem.findOne(Role, { name: 'admin', tenantId: normalizedTenantId, deletedAt: null })\n if (!adminRole) return\n\n const roleAcls = await tem.find(RoleAcl, { role: adminRole, tenantId: normalizedTenantId, deletedAt: null })\n const addedFeatures = [\n 'staff.*',\n 'staff.leave_requests.manage',\n 'resources.*',\n 'planner.*',\n ]\n let touched = false\n if (!roleAcls.length) {\n tem.persist(\n tem.create(RoleAcl, {\n role: adminRole,\n tenantId: normalizedTenantId,\n featuresJson: addedFeatures,\n isSuperAdmin: false,\n createdAt: new Date(),\n updatedAt: new Date(),\n }),\n )\n touched = true\n }\n\n for (const acl of roleAcls) {\n const features = Array.isArray(acl.featuresJson) ? [...acl.featuresJson] : []\n const nextFeatures = new Set(features)\n for (const feature of addedFeatures) nextFeatures.add(feature)\n if (nextFeatures.size === features.length) continue\n acl.featuresJson = Array.from(nextFeatures)\n acl.updatedAt = new Date()\n touched = true\n }\n\n if (touched) {\n await tem.flush()\n }\n })\n\n const rbac = container.resolve<RbacService>('rbacService')\n await rbac.invalidateTenantCache(normalizedTenantId)\n\n const vectorService = resolveVectorService(container)\n await reindexModules(em, ['planner', 'staff', 'resources'], { tenantId, organizationId, vectorService })\n },\n },\n]\n\nexport function actionsUpToVersion(version: string): UpgradeActionDefinition[] {\n return upgradeActions\n .filter((action) => compareVersions(action.version, version) <= 0)\n .sort((a, b) => compareVersions(a.version, b.version) || a.id.localeCompare(b.id))\n}\n\nexport function findUpgradeAction(actionId: string, maxVersion: string): UpgradeActionDefinition | undefined {\n const matches = actionsUpToVersion(maxVersion).filter((action) => action.id === actionId)\n if (!matches.length) return undefined\n return matches[matches.length - 1]\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const setup = {
|
|
2
|
+
defaultRoleFeatures: {
|
|
3
|
+
admin: [
|
|
4
|
+
"configs.system_status.view",
|
|
5
|
+
"configs.cache.view",
|
|
6
|
+
"configs.cache.manage",
|
|
7
|
+
"configs.manage"
|
|
8
|
+
]
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
var setup_default = setup;
|
|
12
|
+
export {
|
|
13
|
+
setup_default as default,
|
|
14
|
+
setup
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/configs/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: [\n 'configs.system_status.view',\n 'configs.cache.view',\n 'configs.cache.manage',\n 'configs.manage',\n ],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { seedExampleCurrencies } from "./lib/seeds.js";
|
|
2
|
+
const setup = {
|
|
3
|
+
seedDefaults: async (ctx) => {
|
|
4
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
5
|
+
await seedExampleCurrencies(ctx.em, scope);
|
|
6
|
+
},
|
|
7
|
+
defaultRoleFeatures: {
|
|
8
|
+
admin: ["currencies.*"]
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
var setup_default = setup;
|
|
12
|
+
export {
|
|
13
|
+
setup_default as default,
|
|
14
|
+
setup
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/currencies/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\nimport { seedExampleCurrencies } from './lib/seeds'\n\nexport const setup: ModuleSetupConfig = {\n seedDefaults: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedExampleCurrencies(ctx.em, scope)\n },\n\n defaultRoleFeatures: {\n admin: ['currencies.*'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,6BAA6B;AAE/B,MAAM,QAA2B;AAAA,EACtC,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,sBAAsB,IAAI,IAAI,KAAK;AAAA,EAC3C;AAAA,EAEA,qBAAqB;AAAA,IACnB,OAAO,CAAC,cAAc;AAAA,EACxB;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { seedCustomerDictionaries, seedCurrencyDictionary, seedCustomerExamples } from "./cli.js";
|
|
2
|
+
const setup = {
|
|
3
|
+
seedDefaults: async (ctx) => {
|
|
4
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
5
|
+
await seedCustomerDictionaries(ctx.em, scope);
|
|
6
|
+
await seedCurrencyDictionary(ctx.em, scope);
|
|
7
|
+
},
|
|
8
|
+
seedExamples: async (ctx) => {
|
|
9
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
10
|
+
await seedCustomerExamples(ctx.em, ctx.container, scope);
|
|
11
|
+
},
|
|
12
|
+
defaultRoleFeatures: {
|
|
13
|
+
admin: [
|
|
14
|
+
"customers.*",
|
|
15
|
+
"customers.people.view",
|
|
16
|
+
"customers.people.manage",
|
|
17
|
+
"customers.companies.view",
|
|
18
|
+
"customers.companies.manage",
|
|
19
|
+
"customers.deals.view",
|
|
20
|
+
"customers.deals.manage"
|
|
21
|
+
],
|
|
22
|
+
employee: [
|
|
23
|
+
"customers.*",
|
|
24
|
+
"customers.people.view",
|
|
25
|
+
"customers.people.manage",
|
|
26
|
+
"customers.companies.view",
|
|
27
|
+
"customers.companies.manage"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var setup_default = setup;
|
|
32
|
+
export {
|
|
33
|
+
setup_default as default,
|
|
34
|
+
setup
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/customers/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\nimport { seedCustomerDictionaries, seedCurrencyDictionary, seedCustomerExamples } from './cli'\n\nexport const setup: ModuleSetupConfig = {\n seedDefaults: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedCustomerDictionaries(ctx.em, scope)\n await seedCurrencyDictionary(ctx.em, scope)\n },\n\n seedExamples: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedCustomerExamples(ctx.em, ctx.container, scope)\n },\n\n defaultRoleFeatures: {\n admin: [\n 'customers.*',\n 'customers.people.view',\n 'customers.people.manage',\n 'customers.companies.view',\n 'customers.companies.manage',\n 'customers.deals.view',\n 'customers.deals.manage',\n ],\n employee: [\n 'customers.*',\n 'customers.people.view',\n 'customers.people.manage',\n 'customers.companies.view',\n 'customers.companies.manage',\n ],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,0BAA0B,wBAAwB,4BAA4B;AAEhF,MAAM,QAA2B;AAAA,EACtC,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,yBAAyB,IAAI,IAAI,KAAK;AAC5C,UAAM,uBAAuB,IAAI,IAAI,KAAK;AAAA,EAC5C;AAAA,EAEA,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,qBAAqB,IAAI,IAAI,IAAI,WAAW,KAAK;AAAA,EACzD;AAAA,EAEA,qBAAqB;AAAA,IACnB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const setup = {
|
|
2
|
+
defaultRoleFeatures: {
|
|
3
|
+
admin: ["dashboards.*", "dashboards.admin.assign-widgets", "analytics.view"],
|
|
4
|
+
employee: ["dashboards.view", "dashboards.configure", "analytics.view"]
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
var setup_default = setup;
|
|
8
|
+
export {
|
|
9
|
+
setup_default as default,
|
|
10
|
+
setup
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/dashboards/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: ['dashboards.*', 'dashboards.admin.assign-widgets', 'analytics.view'],\n employee: ['dashboards.view', 'dashboards.configure', 'analytics.view'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,OAAO,CAAC,gBAAgB,mCAAmC,gBAAgB;AAAA,IAC3E,UAAU,CAAC,mBAAmB,wBAAwB,gBAAgB;AAAA,EACxE;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const setup = {
|
|
2
|
+
defaultRoleFeatures: {
|
|
3
|
+
admin: ["dictionaries.view", "dictionaries.manage"],
|
|
4
|
+
employee: ["dictionaries.view"]
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
var setup_default = setup;
|
|
8
|
+
export {
|
|
9
|
+
setup_default as default,
|
|
10
|
+
setup
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/dictionaries/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: ['dictionaries.view', 'dictionaries.manage'],\n employee: ['dictionaries.view'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,OAAO,CAAC,qBAAqB,qBAAqB;AAAA,IAClD,UAAU,CAAC,mBAAmB;AAAA,EAChC;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const setup = {
|
|
2
|
+
defaultRoleFeatures: {
|
|
3
|
+
superadmin: ["directory.tenants.*"],
|
|
4
|
+
admin: ["directory.organizations.view", "directory.organizations.manage"]
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
var setup_default = setup;
|
|
8
|
+
export {
|
|
9
|
+
setup_default as default,
|
|
10
|
+
setup
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/directory/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n superadmin: ['directory.tenants.*'],\n admin: ['directory.organizations.view', 'directory.organizations.manage'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,YAAY,CAAC,qBAAqB;AAAA,IAClC,OAAO,CAAC,gCAAgC,gCAAgC;AAAA,EAC1E;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/entities/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: ['entities.*'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,OAAO,CAAC,YAAY;AAAA,EACtB;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/feature_toggles/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: ['feature_toggles.*'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,OAAO,CAAC,mBAAmB;AAAA,EAC7B;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const setup = {
|
|
2
|
+
defaultRoleFeatures: {
|
|
3
|
+
admin: ["perspectives.use", "perspectives.role_defaults"],
|
|
4
|
+
employee: ["perspectives.use"]
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
var setup_default = setup;
|
|
8
|
+
export {
|
|
9
|
+
setup_default as default,
|
|
10
|
+
setup
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/perspectives/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: ['perspectives.use', 'perspectives.role_defaults'],\n employee: ['perspectives.use'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,OAAO,CAAC,oBAAoB,4BAA4B;AAAA,IACxD,UAAU,CAAC,kBAAkB;AAAA,EAC/B;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { seedPlannerUnavailabilityReasons, seedPlannerAvailabilityRuleSetDefaults } from "./lib/seeds.js";
|
|
2
|
+
const setup = {
|
|
3
|
+
seedDefaults: async (ctx) => {
|
|
4
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
5
|
+
await seedPlannerUnavailabilityReasons(ctx.em, scope);
|
|
6
|
+
},
|
|
7
|
+
seedExamples: async (ctx) => {
|
|
8
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
9
|
+
await seedPlannerAvailabilityRuleSetDefaults(ctx.em, scope);
|
|
10
|
+
},
|
|
11
|
+
defaultRoleFeatures: {
|
|
12
|
+
admin: ["planner.*"],
|
|
13
|
+
employee: ["planner.view"]
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
var setup_default = setup;
|
|
17
|
+
export {
|
|
18
|
+
setup_default as default,
|
|
19
|
+
setup
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/planner/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\nimport { seedPlannerUnavailabilityReasons, seedPlannerAvailabilityRuleSetDefaults } from './lib/seeds'\n\nexport const setup: ModuleSetupConfig = {\n seedDefaults: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedPlannerUnavailabilityReasons(ctx.em, scope)\n },\n\n seedExamples: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedPlannerAvailabilityRuleSetDefaults(ctx.em, scope)\n },\n\n defaultRoleFeatures: {\n admin: ['planner.*'],\n employee: ['planner.view'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,kCAAkC,8CAA8C;AAElF,MAAM,QAA2B;AAAA,EACtC,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,iCAAiC,IAAI,IAAI,KAAK;AAAA,EACtD;AAAA,EAEA,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,uCAAuC,IAAI,IAAI,KAAK;AAAA,EAC5D;AAAA,EAEA,qBAAqB;AAAA,IACnB,OAAO,CAAC,WAAW;AAAA,IACnB,UAAU,CAAC,cAAc;AAAA,EAC3B;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/query_index/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: ['query_index.*'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA,IACnB,OAAO,CAAC,eAAe;AAAA,EACzB;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { seedResourcesAddressTypes, seedResourcesCapacityUnits, seedResourcesResourceExamples } from "./lib/seeds.js";
|
|
2
|
+
const setup = {
|
|
3
|
+
seedDefaults: async (ctx) => {
|
|
4
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
5
|
+
await seedResourcesAddressTypes(ctx.em, scope);
|
|
6
|
+
},
|
|
7
|
+
seedExamples: async (ctx) => {
|
|
8
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
9
|
+
await seedResourcesCapacityUnits(ctx.em, scope);
|
|
10
|
+
await seedResourcesResourceExamples(ctx.em, scope);
|
|
11
|
+
},
|
|
12
|
+
defaultRoleFeatures: {
|
|
13
|
+
admin: ["resources.*"]
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
var setup_default = setup;
|
|
17
|
+
export {
|
|
18
|
+
setup_default as default,
|
|
19
|
+
setup
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/resources/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\nimport { seedResourcesAddressTypes, seedResourcesCapacityUnits, seedResourcesResourceExamples } from './lib/seeds'\n\nexport const setup: ModuleSetupConfig = {\n seedDefaults: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedResourcesAddressTypes(ctx.em, scope)\n },\n\n seedExamples: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedResourcesCapacityUnits(ctx.em, scope)\n await seedResourcesResourceExamples(ctx.em, scope)\n },\n\n defaultRoleFeatures: {\n admin: ['resources.*'],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,2BAA2B,4BAA4B,qCAAqC;AAE9F,MAAM,QAA2B;AAAA,EACtC,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,0BAA0B,IAAI,IAAI,KAAK;AAAA,EAC/C;AAAA,EAEA,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,2BAA2B,IAAI,IAAI,KAAK;AAC9C,UAAM,8BAA8B,IAAI,IAAI,KAAK;AAAA,EACnD;AAAA,EAEA,qBAAqB;AAAA,IACnB,OAAO,CAAC,aAAa;AAAA,EACvB;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { SalesSettings, SalesDocumentSequence, SalesTaxRate } from "./data/entities.js";
|
|
2
|
+
import { DEFAULT_ORDER_NUMBER_FORMAT, DEFAULT_QUOTE_NUMBER_FORMAT } from "./lib/documentNumberTokens.js";
|
|
3
|
+
import { seedSalesStatusDictionaries, seedSalesAdjustmentKinds } from "./lib/dictionaries.js";
|
|
4
|
+
import { ensureExampleShippingMethods, ensureExamplePaymentMethods } from "./seed/examples-data.js";
|
|
5
|
+
import { seedSalesExamples } from "./seed/examples.js";
|
|
6
|
+
const DEFAULT_TAX_RATES = [
|
|
7
|
+
{ code: "vat-23", name: "23% VAT", rate: "23" },
|
|
8
|
+
{ code: "vat-0", name: "0% VAT", rate: "0" }
|
|
9
|
+
];
|
|
10
|
+
async function seedSalesTaxRates(em, scope) {
|
|
11
|
+
await em.transactional(async (tem) => {
|
|
12
|
+
const existing = await tem.find(SalesTaxRate, {
|
|
13
|
+
tenantId: scope.tenantId,
|
|
14
|
+
organizationId: scope.organizationId,
|
|
15
|
+
deletedAt: null
|
|
16
|
+
});
|
|
17
|
+
const existingCodes = new Set(existing.map((rate) => rate.code));
|
|
18
|
+
const hasDefault = existing.some((rate) => rate.isDefault);
|
|
19
|
+
const now = /* @__PURE__ */ new Date();
|
|
20
|
+
let isFirst = !hasDefault;
|
|
21
|
+
for (const seed of DEFAULT_TAX_RATES) {
|
|
22
|
+
if (existingCodes.has(seed.code)) continue;
|
|
23
|
+
tem.persist(
|
|
24
|
+
tem.create(SalesTaxRate, {
|
|
25
|
+
tenantId: scope.tenantId,
|
|
26
|
+
organizationId: scope.organizationId,
|
|
27
|
+
code: seed.code,
|
|
28
|
+
name: seed.name,
|
|
29
|
+
rate: seed.rate,
|
|
30
|
+
priority: 0,
|
|
31
|
+
isCompound: false,
|
|
32
|
+
isDefault: isFirst,
|
|
33
|
+
createdAt: now,
|
|
34
|
+
updatedAt: now
|
|
35
|
+
})
|
|
36
|
+
);
|
|
37
|
+
isFirst = false;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const setup = {
|
|
42
|
+
defaultRoleFeatures: {
|
|
43
|
+
admin: ["sales.*"],
|
|
44
|
+
employee: ["sales.*"]
|
|
45
|
+
},
|
|
46
|
+
async onTenantCreated({ em, tenantId, organizationId }) {
|
|
47
|
+
const exists = await em.findOne(SalesSettings, { tenantId, organizationId });
|
|
48
|
+
if (!exists) {
|
|
49
|
+
em.persist(
|
|
50
|
+
em.create(SalesSettings, {
|
|
51
|
+
tenantId,
|
|
52
|
+
organizationId,
|
|
53
|
+
orderNumberFormat: DEFAULT_ORDER_NUMBER_FORMAT,
|
|
54
|
+
quoteNumberFormat: DEFAULT_QUOTE_NUMBER_FORMAT,
|
|
55
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
56
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
57
|
+
})
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
for (const kind of ["order", "quote"]) {
|
|
61
|
+
const seq = await em.findOne(SalesDocumentSequence, {
|
|
62
|
+
tenantId,
|
|
63
|
+
organizationId,
|
|
64
|
+
documentKind: kind
|
|
65
|
+
});
|
|
66
|
+
if (!seq) {
|
|
67
|
+
em.persist(
|
|
68
|
+
em.create(SalesDocumentSequence, {
|
|
69
|
+
tenantId,
|
|
70
|
+
organizationId,
|
|
71
|
+
documentKind: kind,
|
|
72
|
+
currentValue: 0,
|
|
73
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
74
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
await em.flush();
|
|
80
|
+
},
|
|
81
|
+
async seedDefaults({ em, tenantId, organizationId }) {
|
|
82
|
+
const scope = { tenantId, organizationId };
|
|
83
|
+
await seedSalesTaxRates(em, scope);
|
|
84
|
+
await seedSalesStatusDictionaries(em, scope);
|
|
85
|
+
await seedSalesAdjustmentKinds(em, scope);
|
|
86
|
+
await ensureExampleShippingMethods(em, scope);
|
|
87
|
+
await ensureExamplePaymentMethods(em, scope);
|
|
88
|
+
},
|
|
89
|
+
async seedExamples({ em, container, tenantId, organizationId }) {
|
|
90
|
+
const scope = { tenantId, organizationId };
|
|
91
|
+
await seedSalesExamples(em, container, scope);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
var setup_default = setup;
|
|
95
|
+
export {
|
|
96
|
+
setup_default as default,
|
|
97
|
+
setup
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/sales/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\nimport { SalesSettings, SalesDocumentSequence, SalesTaxRate } from './data/entities'\nimport { DEFAULT_ORDER_NUMBER_FORMAT, DEFAULT_QUOTE_NUMBER_FORMAT } from './lib/documentNumberTokens'\nimport { seedSalesStatusDictionaries, seedSalesAdjustmentKinds } from './lib/dictionaries'\nimport { ensureExampleShippingMethods, ensureExamplePaymentMethods } from './seed/examples-data'\nimport { seedSalesExamples } from './seed/examples'\n\ntype SeedScope = { tenantId: string; organizationId: string }\n\nconst DEFAULT_TAX_RATES = [\n { code: 'vat-23', name: '23% VAT', rate: '23' },\n { code: 'vat-0', name: '0% VAT', rate: '0' },\n] as const\n\nasync function seedSalesTaxRates(em: EntityManager, scope: SeedScope): Promise<void> {\n await em.transactional(async (tem) => {\n const existing = await tem.find(SalesTaxRate, {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n deletedAt: null,\n })\n const existingCodes = new Set(existing.map((rate) => rate.code))\n const hasDefault = existing.some((rate) => rate.isDefault)\n const now = new Date()\n let isFirst = !hasDefault\n\n for (const seed of DEFAULT_TAX_RATES) {\n if (existingCodes.has(seed.code)) continue\n tem.persist(\n tem.create(SalesTaxRate, {\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n code: seed.code,\n name: seed.name,\n rate: seed.rate,\n priority: 0,\n isCompound: false,\n isDefault: isFirst,\n createdAt: now,\n updatedAt: now,\n })\n )\n isFirst = false\n }\n })\n}\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n admin: ['sales.*'],\n employee: ['sales.*'],\n },\n\n async onTenantCreated({ em, tenantId, organizationId }) {\n const exists = await em.findOne(SalesSettings, { tenantId, organizationId })\n if (!exists) {\n em.persist(\n em.create(SalesSettings, {\n tenantId,\n organizationId,\n orderNumberFormat: DEFAULT_ORDER_NUMBER_FORMAT,\n quoteNumberFormat: DEFAULT_QUOTE_NUMBER_FORMAT,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n )\n }\n\n for (const kind of ['order', 'quote'] as const) {\n const seq = await em.findOne(SalesDocumentSequence, {\n tenantId,\n organizationId,\n documentKind: kind,\n })\n if (!seq) {\n em.persist(\n em.create(SalesDocumentSequence, {\n tenantId,\n organizationId,\n documentKind: kind,\n currentValue: 0,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n )\n }\n }\n\n await em.flush()\n },\n\n async seedDefaults({ em, tenantId, organizationId }) {\n const scope = { tenantId, organizationId }\n await seedSalesTaxRates(em, scope)\n await seedSalesStatusDictionaries(em, scope)\n await seedSalesAdjustmentKinds(em, scope)\n await ensureExampleShippingMethods(em, scope)\n await ensureExamplePaymentMethods(em, scope)\n },\n\n async seedExamples({ em, container, tenantId, organizationId }) {\n const scope = { tenantId, organizationId }\n await seedSalesExamples(em, container, scope)\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { seedStaffAddressTypes, seedStaffTeamExamples } from "./lib/seeds.js";
|
|
2
|
+
const setup = {
|
|
3
|
+
seedDefaults: async (ctx) => {
|
|
4
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
5
|
+
await seedStaffAddressTypes(ctx.em, scope);
|
|
6
|
+
},
|
|
7
|
+
seedExamples: async (ctx) => {
|
|
8
|
+
const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
9
|
+
await seedStaffTeamExamples(ctx.em, scope);
|
|
10
|
+
},
|
|
11
|
+
defaultRoleFeatures: {
|
|
12
|
+
admin: ["staff.*", "staff.leave_requests.manage"],
|
|
13
|
+
employee: [
|
|
14
|
+
"staff.leave_requests.send",
|
|
15
|
+
"staff.my_availability.view",
|
|
16
|
+
"staff.my_availability.manage",
|
|
17
|
+
"staff.my_leave_requests.view",
|
|
18
|
+
"staff.my_leave_requests.send"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var setup_default = setup;
|
|
23
|
+
export {
|
|
24
|
+
setup_default as default,
|
|
25
|
+
setup
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/staff/setup.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\nimport { seedStaffAddressTypes, seedStaffTeamExamples } from './lib/seeds'\n\nexport const setup: ModuleSetupConfig = {\n seedDefaults: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedStaffAddressTypes(ctx.em, scope)\n },\n\n seedExamples: async (ctx) => {\n const scope = { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n await seedStaffTeamExamples(ctx.em, scope)\n },\n\n defaultRoleFeatures: {\n admin: ['staff.*', 'staff.leave_requests.manage'],\n employee: [\n 'staff.leave_requests.send',\n 'staff.my_availability.view',\n 'staff.my_availability.manage',\n 'staff.my_leave_requests.view',\n 'staff.my_leave_requests.send',\n ],\n },\n}\n\nexport default setup\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,uBAAuB,6BAA6B;AAEtD,MAAM,QAA2B;AAAA,EACtC,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,sBAAsB,IAAI,IAAI,KAAK;AAAA,EAC3C;AAAA,EAEA,cAAc,OAAO,QAAQ;AAC3B,UAAM,QAAQ,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AAC3E,UAAM,sBAAsB,IAAI,IAAI,KAAK;AAAA,EAC3C;AAAA,EAEA,qBAAqB;AAAA,IACnB,OAAO,CAAC,WAAW,6BAA6B;AAAA,IAChD,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|