@open-mercato/shared 0.6.7-develop.6593.1.0ecf630f1e → 0.6.7-develop.6595.1.e93ecd3cfa

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.
@@ -1,4 +1,4 @@
1
- const APP_VERSION = "0.6.7-develop.6593.1.0ecf630f1e";
1
+ const APP_VERSION = "0.6.7-develop.6595.1.e93ecd3cfa";
2
2
  const appVersion = APP_VERSION;
3
3
  export {
4
4
  APP_VERSION,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/version.ts"],
4
- "sourcesContent": ["// Build-time generated version\nexport const APP_VERSION = '0.6.7-develop.6593.1.0ecf630f1e'\nexport const appVersion = APP_VERSION\n"],
4
+ "sourcesContent": ["// Build-time generated version\nexport const APP_VERSION = '0.6.7-develop.6595.1.e93ecd3cfa'\nexport const appVersion = APP_VERSION\n"],
5
5
  "mappings": "AACO,MAAM,cAAc;AACpB,MAAM,aAAa;",
6
6
  "names": []
7
7
  }
@@ -13,6 +13,7 @@ const upsertCustomEntitySchema = z.object({
13
13
  labelField: z.string().min(1).max(100).regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/).optional(),
14
14
  defaultEditor: z.enum(["markdown", "simpleMarkdown", "htmlRichText"]).optional(),
15
15
  showInSidebar: z.boolean().default(false),
16
+ accessRestricted: z.boolean().default(false),
16
17
  isActive: z.boolean().optional()
17
18
  });
18
19
  const upsertCustomFieldDefSchema = z.object({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/modules/entities/validators.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\nimport { CUSTOM_FIELD_KINDS } from './kinds'\nimport { validationRulesArraySchema } from './validation'\n\nexport const entityIdRegex = /^[a-z0-9_]+:[a-z0-9_]+$/\nexport const fieldsetCodeRegex = /^[a-z0-9_\\-]+$/\n\nexport const upsertCustomEntitySchema = z.object({\n entityId: z.string().regex(\n entityIdRegex,\n 'Enter the entity id in the format: module_name:entity_id with your prefered entity and module names'\n ),\n label: z.string().min(1).max(200),\n description: z.string().max(2000).optional().nullable(),\n labelField: z.string().min(1).max(100).regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/).optional(),\n defaultEditor: z.enum(['markdown','simpleMarkdown','htmlRichText']).optional(),\n showInSidebar: z.boolean().default(false),\n isActive: z.boolean().optional(),\n})\n\nexport const upsertCustomFieldDefSchema = z.object({\n entityId: z.string().regex(entityIdRegex),\n key: z.string().min(1).max(100).regex(/^[a-z0-9_]+$/, 'snake_case only'),\n kind: z.enum(CUSTOM_FIELD_KINDS),\n configJson: z\n .object({\n // optional UI/behavioral hints\n label: z.string().max(200).optional(),\n description: z.string().max(2000).optional(),\n options: z.array(z.union([z.string(), z.number()])).optional(),\n optionsUrl: z.string().url().optional(),\n multi: z.boolean().optional(),\n editor: z.string().optional(),\n input: z.string().optional(),\n filterable: z.boolean().optional(),\n formEditable: z.boolean().optional(),\n listVisible: z.boolean().optional(),\n priority: z.number().optional(),\n encrypted: z.boolean().optional(),\n relatedEntityId: z.string().optional(),\n dictionaryId: z.string().uuid().optional(),\n dictionaryInlineCreate: z.boolean().optional(),\n // validation rules\n validation: validationRulesArraySchema.optional(),\n fieldset: z.string().regex(fieldsetCodeRegex).optional(),\n group: z\n .object({\n code: z.string().regex(fieldsetCodeRegex),\n title: z.string().max(200).optional(),\n hint: z.string().max(500).optional(),\n })\n .optional(),\n })\n .passthrough()\n .optional(),\n isActive: z.boolean().optional(),\n})\n\nexport const customFieldsetGroupSchema = z.object({\n code: z.string().regex(fieldsetCodeRegex),\n title: z.string().max(200).optional(),\n hint: z.string().max(500).optional(),\n})\n\nexport const customFieldsetSchema = z.object({\n code: z.string().regex(fieldsetCodeRegex),\n label: z.string().min(1).max(255),\n icon: z.string().max(100).optional(),\n description: z.string().max(2000).optional(),\n groups: z.array(customFieldsetGroupSchema).optional(),\n})\n\nexport const customFieldEntityConfigSchema = z.object({\n fieldsets: z.array(customFieldsetSchema).max(20).optional(),\n singleFieldsetPerRecord: z.boolean().optional(),\n})\n\nexport const encryptionFieldRuleSchema = z.object({\n field: z.string().min(1).max(200),\n hashField: z.string().min(1).max(200).optional().nullable(),\n})\n\nexport const upsertEncryptionMapSchema = z.object({\n entityId: z.string().regex(entityIdRegex),\n tenantId: z.string().uuid().nullable().optional(),\n organizationId: z.string().uuid().nullable().optional(),\n fields: z.array(encryptionFieldRuleSchema).min(1),\n isActive: z.boolean().optional(),\n})\n\nexport type UpsertCustomEntityInput = z.infer<typeof upsertCustomEntitySchema>\nexport type UpsertCustomFieldDefInput = z.infer<typeof upsertCustomFieldDefSchema>\nexport type UpsertEncryptionMapInput = z.infer<typeof upsertEncryptionMapSchema>\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { z } from 'zod'\nimport { CUSTOM_FIELD_KINDS } from './kinds'\nimport { validationRulesArraySchema } from './validation'\n\nexport const entityIdRegex = /^[a-z0-9_]+:[a-z0-9_]+$/\nexport const fieldsetCodeRegex = /^[a-z0-9_\\-]+$/\n\nexport const upsertCustomEntitySchema = z.object({\n entityId: z.string().regex(\n entityIdRegex,\n 'Enter the entity id in the format: module_name:entity_id with your prefered entity and module names'\n ),\n label: z.string().min(1).max(200),\n description: z.string().max(2000).optional().nullable(),\n labelField: z.string().min(1).max(100).regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/).optional(),\n defaultEditor: z.enum(['markdown','simpleMarkdown','htmlRichText']).optional(),\n showInSidebar: z.boolean().default(false),\n accessRestricted: z.boolean().default(false),\n isActive: z.boolean().optional(),\n})\n\nexport const upsertCustomFieldDefSchema = z.object({\n entityId: z.string().regex(entityIdRegex),\n key: z.string().min(1).max(100).regex(/^[a-z0-9_]+$/, 'snake_case only'),\n kind: z.enum(CUSTOM_FIELD_KINDS),\n configJson: z\n .object({\n // optional UI/behavioral hints\n label: z.string().max(200).optional(),\n description: z.string().max(2000).optional(),\n options: z.array(z.union([z.string(), z.number()])).optional(),\n optionsUrl: z.string().url().optional(),\n multi: z.boolean().optional(),\n editor: z.string().optional(),\n input: z.string().optional(),\n filterable: z.boolean().optional(),\n formEditable: z.boolean().optional(),\n listVisible: z.boolean().optional(),\n priority: z.number().optional(),\n encrypted: z.boolean().optional(),\n relatedEntityId: z.string().optional(),\n dictionaryId: z.string().uuid().optional(),\n dictionaryInlineCreate: z.boolean().optional(),\n // validation rules\n validation: validationRulesArraySchema.optional(),\n fieldset: z.string().regex(fieldsetCodeRegex).optional(),\n group: z\n .object({\n code: z.string().regex(fieldsetCodeRegex),\n title: z.string().max(200).optional(),\n hint: z.string().max(500).optional(),\n })\n .optional(),\n })\n .passthrough()\n .optional(),\n isActive: z.boolean().optional(),\n})\n\nexport const customFieldsetGroupSchema = z.object({\n code: z.string().regex(fieldsetCodeRegex),\n title: z.string().max(200).optional(),\n hint: z.string().max(500).optional(),\n})\n\nexport const customFieldsetSchema = z.object({\n code: z.string().regex(fieldsetCodeRegex),\n label: z.string().min(1).max(255),\n icon: z.string().max(100).optional(),\n description: z.string().max(2000).optional(),\n groups: z.array(customFieldsetGroupSchema).optional(),\n})\n\nexport const customFieldEntityConfigSchema = z.object({\n fieldsets: z.array(customFieldsetSchema).max(20).optional(),\n singleFieldsetPerRecord: z.boolean().optional(),\n})\n\nexport const encryptionFieldRuleSchema = z.object({\n field: z.string().min(1).max(200),\n hashField: z.string().min(1).max(200).optional().nullable(),\n})\n\nexport const upsertEncryptionMapSchema = z.object({\n entityId: z.string().regex(entityIdRegex),\n tenantId: z.string().uuid().nullable().optional(),\n organizationId: z.string().uuid().nullable().optional(),\n fields: z.array(encryptionFieldRuleSchema).min(1),\n isActive: z.boolean().optional(),\n})\n\nexport type UpsertCustomEntityInput = z.infer<typeof upsertCustomEntitySchema>\nexport type UpsertCustomFieldDefInput = z.infer<typeof upsertCustomFieldDefSchema>\nexport type UpsertEncryptionMapInput = z.infer<typeof upsertEncryptionMapSchema>\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-mercato/shared",
3
- "version": "0.6.7-develop.6593.1.0ecf630f1e",
3
+ "version": "0.6.7-develop.6595.1.e93ecd3cfa",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -97,7 +97,7 @@
97
97
  "@mikro-orm/core": "^7.1.5",
98
98
  "@mikro-orm/decorators": "^7.1.5",
99
99
  "@mikro-orm/postgresql": "^7.1.5",
100
- "@open-mercato/cache": "0.6.7-develop.6593.1.0ecf630f1e",
100
+ "@open-mercato/cache": "0.6.7-develop.6595.1.e93ecd3cfa",
101
101
  "@types/sanitize-html": "^2.16.1",
102
102
  "dotenv": "^17.4.2",
103
103
  "pino": "^10.3.1",
@@ -15,6 +15,7 @@ export const upsertCustomEntitySchema = z.object({
15
15
  labelField: z.string().min(1).max(100).regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/).optional(),
16
16
  defaultEditor: z.enum(['markdown','simpleMarkdown','htmlRichText']).optional(),
17
17
  showInSidebar: z.boolean().default(false),
18
+ accessRestricted: z.boolean().default(false),
18
19
  isActive: z.boolean().optional(),
19
20
  })
20
21
 
@@ -94,6 +94,10 @@ export type CustomEntitySpec = {
94
94
  labelField?: string
95
95
  defaultEditor?: string
96
96
  showInSidebar?: boolean
97
+ // When true, records of this entity require an explicit per-entity ACL grant
98
+ // (entities.records.<id>.view/.manage) beyond the coarse entities.records.*
99
+ // feature. Defaults to unrestricted.
100
+ accessRestricted?: boolean
97
101
  global?: boolean
98
102
  fields?: CustomFieldDefinition[]
99
103
  }