@objectstack/platform-objects 6.7.1 → 6.8.1

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.
@@ -27,6 +27,33 @@ import { TranslationBundle, TranslationData } from '@objectstack/spec/system';
27
27
 
28
28
  declare const SETUP_APP: App;
29
29
 
30
+ /**
31
+ * Platform Studio App — static definition.
32
+ *
33
+ * The developer/maker workbench. Studio surfaces every editable
34
+ * metadata type (objects, views, flows, agents, …) — i.e. the
35
+ * "schema-side" of the platform — and is intentionally separate from
36
+ * Setup, which is the operator/admin app for users/permissions/system
37
+ * configuration.
38
+ *
39
+ * The split mirrors the industry convention:
40
+ * - Salesforce: Setup (admin) ⟷ App Builder + Schema Builder + Flow Builder (developer)
41
+ * - ServiceNow: System Definition ⟷ Studio
42
+ * - Microsoft Power Platform: Admin Center ⟷ Maker Portal
43
+ *
44
+ * Rationale:
45
+ * - Different audience (implementers/devs vs IT admins)
46
+ * - Different risk surface (schema changes vs user/SSO changes)
47
+ * - Independent permission gating (`studio.access` vs `setup.access`)
48
+ * - Different operational cadence (continuous in dev/staging, gated in prod)
49
+ * - Future home for source-control, change sets, sandbox refresh, deploy
50
+ *
51
+ * Registration: alongside SETUP_APP in plugin-auth, so it ships out of
52
+ * the box whenever the auth/security trio is loaded.
53
+ */
54
+
55
+ declare const STUDIO_APP: App;
56
+
30
57
  /**
31
58
  * System Overview Dashboard
32
59
  *
@@ -271,4 +298,4 @@ declare const jaJP: TranslationData;
271
298
  */
272
299
  declare const esES: TranslationData;
273
300
 
274
- export { SETUP_APP, SetupAppTranslations, SystemOverviewDashboard, en, esES, jaJP, zhCN };
301
+ export { SETUP_APP, STUDIO_APP, SetupAppTranslations, SystemOverviewDashboard, en, esES, jaJP, zhCN };
@@ -27,6 +27,33 @@ import { TranslationBundle, TranslationData } from '@objectstack/spec/system';
27
27
 
28
28
  declare const SETUP_APP: App;
29
29
 
30
+ /**
31
+ * Platform Studio App — static definition.
32
+ *
33
+ * The developer/maker workbench. Studio surfaces every editable
34
+ * metadata type (objects, views, flows, agents, …) — i.e. the
35
+ * "schema-side" of the platform — and is intentionally separate from
36
+ * Setup, which is the operator/admin app for users/permissions/system
37
+ * configuration.
38
+ *
39
+ * The split mirrors the industry convention:
40
+ * - Salesforce: Setup (admin) ⟷ App Builder + Schema Builder + Flow Builder (developer)
41
+ * - ServiceNow: System Definition ⟷ Studio
42
+ * - Microsoft Power Platform: Admin Center ⟷ Maker Portal
43
+ *
44
+ * Rationale:
45
+ * - Different audience (implementers/devs vs IT admins)
46
+ * - Different risk surface (schema changes vs user/SSO changes)
47
+ * - Independent permission gating (`studio.access` vs `setup.access`)
48
+ * - Different operational cadence (continuous in dev/staging, gated in prod)
49
+ * - Future home for source-control, change sets, sandbox refresh, deploy
50
+ *
51
+ * Registration: alongside SETUP_APP in plugin-auth, so it ships out of
52
+ * the box whenever the auth/security trio is loaded.
53
+ */
54
+
55
+ declare const STUDIO_APP: App;
56
+
30
57
  /**
31
58
  * System Overview Dashboard
32
59
  *
@@ -271,4 +298,4 @@ declare const jaJP: TranslationData;
271
298
  */
272
299
  declare const esES: TranslationData;
273
300
 
274
- export { SETUP_APP, SetupAppTranslations, SystemOverviewDashboard, en, esES, jaJP, zhCN };
301
+ export { SETUP_APP, STUDIO_APP, SetupAppTranslations, SystemOverviewDashboard, en, esES, jaJP, zhCN };
@@ -25,6 +25,36 @@ var SETUP_APP = {
25
25
  { id: "nav_system_overview", type: "dashboard", label: "System Overview", dashboardName: "system_overview", icon: "activity" }
26
26
  ]
27
27
  },
28
+ {
29
+ // App Marketplace — browse + install packages. The browse page is
30
+ // always available: single-environment runtimes use the
31
+ // `MarketplaceProxy` plugin to browse the remote catalog;
32
+ // control-plane (cloud) deployments add `sys_package_installation`
33
+ // to track per-env installs. The "Installed Apps" entry is gated
34
+ // on that object so it only appears when the catalog backend
35
+ // exposes installations (i.e. control-plane / multi-tenant).
36
+ id: "group_apps",
37
+ type: "group",
38
+ label: "Apps",
39
+ icon: "package",
40
+ children: [
41
+ {
42
+ id: "nav_marketplace_browse",
43
+ type: "url",
44
+ label: "Browse Marketplace",
45
+ url: "/apps/setup/system/marketplace",
46
+ icon: "store"
47
+ },
48
+ {
49
+ id: "nav_marketplace_installed",
50
+ type: "url",
51
+ label: "Installed Apps",
52
+ url: "/apps/setup/system/marketplace/installed",
53
+ icon: "package-check",
54
+ requiresObject: "sys_package_installation"
55
+ }
56
+ ]
57
+ },
28
58
  {
29
59
  id: "group_people_org",
30
60
  type: "group",
@@ -154,18 +184,272 @@ var SETUP_APP = {
154
184
  // from sys_user / org members.
155
185
  // - Demoted "All Metadata" from the (now-deleted) Platform group
156
186
  // to this Advanced/debug bucket.
157
- // - The marketplace-only `sys_app` / `sys_package` /
158
- // `sys_package_installation` menus have been removed entirely;
159
- // they are contributed by `@objectstack/service-tenant`
160
- // (control-plane) and are not present in single-environment runtimes.
187
+ // - The raw `sys_app` / `sys_package` / `sys_package_installation`
188
+ // object-list menus stay removed (they are control-plane admin
189
+ // surfaces and live in `cloud-control.app.ts`). End-user
190
+ // marketplace access lives in the top-level `Apps` group above,
191
+ // pointing at the React browse/installed pages.
161
192
  { id: "nav_oauth_apps", type: "object", label: "OAuth Applications", objectName: "sys_oauth_application", icon: "app-window" },
162
193
  { id: "nav_jwks", type: "object", label: "Signing Keys (JWKS)", objectName: "sys_jwks", icon: "key-round" },
163
194
  { id: "nav_verifications", type: "object", label: "Verifications", objectName: "sys_verification", icon: "mail-check" },
164
195
  { id: "nav_two_factor", type: "object", label: "Two-Factor", objectName: "sys_two_factor", icon: "smartphone" },
165
196
  { id: "nav_device_codes", type: "object", label: "Device Codes", objectName: "sys_device_code", icon: "qr-code" },
166
197
  { id: "nav_accounts", type: "object", label: "Identity Links", objectName: "sys_account", icon: "link-2" },
167
- { id: "nav_user_preferences", type: "object", label: "User Preferences", objectName: "sys_user_preference", icon: "sliders" },
168
- { id: "nav_metadata", type: "object", label: "All Metadata", objectName: "sys_metadata", icon: "file-cog" }
198
+ { id: "nav_user_preferences", type: "object", label: "User Preferences", objectName: "sys_user_preference", icon: "sliders" }
199
+ ]
200
+ }
201
+ ]
202
+ };
203
+
204
+ // src/apps/studio.app.ts
205
+ var STUDIO_APP = {
206
+ name: "studio",
207
+ label: "Studio",
208
+ description: "Metadata workbench for developers, analysts, and implementers",
209
+ icon: "hammer",
210
+ active: true,
211
+ isDefault: false,
212
+ branding: {
213
+ primaryColor: "#6366f1"
214
+ // Indigo-500 — distinct from Setup's slate
215
+ },
216
+ requiredPermissions: ["studio.access"],
217
+ navigation: [
218
+ {
219
+ id: "group_overview",
220
+ type: "group",
221
+ label: "Overview",
222
+ icon: "layout-dashboard",
223
+ children: [
224
+ {
225
+ id: "nav_metadata_directory",
226
+ type: "component",
227
+ label: "All Metadata Types",
228
+ componentRef: "metadata:directory",
229
+ icon: "layers"
230
+ }
231
+ ]
232
+ },
233
+ {
234
+ // Data Model — schema-design surfaces. Objects are the primary
235
+ // entry; field management happens in-context on each object's
236
+ // detail form (master-detail), so no top-level field link.
237
+ id: "group_data_model",
238
+ type: "group",
239
+ label: "Data Model",
240
+ icon: "database",
241
+ children: [
242
+ {
243
+ id: "nav_objects",
244
+ type: "component",
245
+ label: "Objects",
246
+ componentRef: "metadata:resource",
247
+ params: { type: "object" },
248
+ icon: "box"
249
+ },
250
+ {
251
+ id: "nav_validations",
252
+ type: "component",
253
+ label: "Validations",
254
+ componentRef: "metadata:resource",
255
+ params: { type: "validation" },
256
+ icon: "check-square"
257
+ }
258
+ ]
259
+ },
260
+ {
261
+ // User Experience — the metadata that shapes what end users see.
262
+ id: "group_ux",
263
+ type: "group",
264
+ label: "User Experience",
265
+ icon: "layout",
266
+ children: [
267
+ {
268
+ id: "nav_apps",
269
+ type: "component",
270
+ label: "Apps",
271
+ componentRef: "metadata:resource",
272
+ params: { type: "app" },
273
+ icon: "app-window"
274
+ },
275
+ {
276
+ id: "nav_views",
277
+ type: "component",
278
+ label: "Views",
279
+ componentRef: "metadata:resource",
280
+ params: { type: "view" },
281
+ icon: "table"
282
+ },
283
+ {
284
+ id: "nav_pages",
285
+ type: "component",
286
+ label: "Pages",
287
+ componentRef: "metadata:resource",
288
+ params: { type: "page" },
289
+ icon: "file-text"
290
+ },
291
+ {
292
+ id: "nav_dashboards",
293
+ type: "component",
294
+ label: "Dashboards",
295
+ componentRef: "metadata:resource",
296
+ params: { type: "dashboard" },
297
+ icon: "layout-dashboard"
298
+ },
299
+ {
300
+ id: "nav_reports",
301
+ type: "component",
302
+ label: "Reports",
303
+ componentRef: "metadata:resource",
304
+ params: { type: "report" },
305
+ icon: "bar-chart-3"
306
+ }
307
+ ]
308
+ },
309
+ {
310
+ // Logic — declarative + scripted business rules.
311
+ id: "group_logic",
312
+ type: "group",
313
+ label: "Logic",
314
+ icon: "function-square",
315
+ children: [
316
+ {
317
+ id: "nav_actions",
318
+ type: "component",
319
+ label: "Actions",
320
+ componentRef: "metadata:resource",
321
+ params: { type: "action" },
322
+ icon: "mouse-pointer-click"
323
+ },
324
+ {
325
+ id: "nav_hooks",
326
+ type: "component",
327
+ label: "Hooks",
328
+ componentRef: "metadata:resource",
329
+ params: { type: "hook" },
330
+ icon: "webhook"
331
+ }
332
+ ]
333
+ },
334
+ {
335
+ // Automation — flows, declarative workflow rules, approval processes.
336
+ id: "group_automation",
337
+ type: "group",
338
+ label: "Automation",
339
+ icon: "workflow",
340
+ children: [
341
+ {
342
+ id: "nav_flows",
343
+ type: "component",
344
+ label: "Flows",
345
+ componentRef: "metadata:resource",
346
+ params: { type: "flow" },
347
+ icon: "git-branch"
348
+ },
349
+ {
350
+ id: "nav_workflows",
351
+ type: "component",
352
+ label: "Workflow Rules",
353
+ componentRef: "metadata:resource",
354
+ params: { type: "workflow" },
355
+ icon: "zap"
356
+ },
357
+ {
358
+ id: "nav_approvals",
359
+ type: "component",
360
+ label: "Approval Processes",
361
+ componentRef: "metadata:resource",
362
+ params: { type: "approval" },
363
+ icon: "check-circle"
364
+ }
365
+ ]
366
+ },
367
+ {
368
+ // AI — agent/tool/skill metadata. Configured together by the
369
+ // same team in practice; runtime conversations live in their
370
+ // own app surface, not here.
371
+ id: "group_ai",
372
+ type: "group",
373
+ label: "AI",
374
+ icon: "sparkles",
375
+ children: [
376
+ {
377
+ id: "nav_agents",
378
+ type: "component",
379
+ label: "Agents",
380
+ componentRef: "metadata:resource",
381
+ params: { type: "agent" },
382
+ icon: "bot"
383
+ },
384
+ {
385
+ id: "nav_tools",
386
+ type: "component",
387
+ label: "Tools",
388
+ componentRef: "metadata:resource",
389
+ params: { type: "tool" },
390
+ icon: "wrench"
391
+ },
392
+ {
393
+ id: "nav_skills",
394
+ type: "component",
395
+ label: "Skills",
396
+ componentRef: "metadata:resource",
397
+ params: { type: "skill" },
398
+ icon: "brain"
399
+ }
400
+ ]
401
+ },
402
+ {
403
+ // Developer — first-party developer tooling surfaces hosted by the
404
+ // console (API console, flow run inspector, public forms registry).
405
+ // Registered as built-in components in the console's
406
+ // ComponentRegistry under the `developer:*` namespace.
407
+ id: "group_developer",
408
+ type: "group",
409
+ label: "Developer",
410
+ icon: "terminal",
411
+ children: [
412
+ {
413
+ id: "nav_api_console",
414
+ type: "component",
415
+ label: "API Console",
416
+ componentRef: "developer:api-console",
417
+ icon: "terminal"
418
+ },
419
+ {
420
+ id: "nav_flow_runs",
421
+ type: "component",
422
+ label: "Flow Runs",
423
+ componentRef: "developer:flow-runs",
424
+ icon: "activity"
425
+ },
426
+ {
427
+ id: "nav_public_forms",
428
+ type: "component",
429
+ label: "Public Forms",
430
+ componentRef: "developer:public-forms",
431
+ icon: "file-text"
432
+ }
433
+ ]
434
+ },
435
+ {
436
+ // Integration — outbound shapes: datasources, email templates,
437
+ // routes/functions/services live here too once they have CRUD
438
+ // surfaces. Email templates are a developer artefact (templates
439
+ // referenced by transactional sends), not a Setup item.
440
+ id: "group_integration",
441
+ type: "group",
442
+ label: "Integration",
443
+ icon: "plug",
444
+ children: [
445
+ {
446
+ id: "nav_email_templates",
447
+ type: "component",
448
+ label: "Email Templates",
449
+ componentRef: "metadata:resource",
450
+ params: { type: "email_template" },
451
+ icon: "mail"
452
+ }
169
453
  ]
170
454
  }
171
455
  ]
@@ -3234,6 +3518,7 @@ var en = {
3234
3518
  navigation: {
3235
3519
  // Groups
3236
3520
  group_overview: { label: "Overview" },
3521
+ group_apps: { label: "Apps" },
3237
3522
  group_people_org: { label: "People & Organization" },
3238
3523
  group_access_control: { label: "Access Control" },
3239
3524
  group_approvals: { label: "Approvals" },
@@ -3242,6 +3527,9 @@ var en = {
3242
3527
  group_advanced: { label: "Advanced" },
3243
3528
  // Overview
3244
3529
  nav_system_overview: { label: "System Overview" },
3530
+ // Apps / Marketplace
3531
+ nav_marketplace_browse: { label: "Browse Marketplace" },
3532
+ nav_marketplace_installed: { label: "Installed Apps" },
3245
3533
  // People & Organization
3246
3534
  nav_users: { label: "Users" },
3247
3535
  nav_departments: { label: "Departments" },
@@ -6249,6 +6537,9 @@ var zhCN = {
6249
6537
  description: "\u5E73\u53F0\u8BBE\u7F6E\u4E0E\u7BA1\u7406",
6250
6538
  navigation: {
6251
6539
  group_overview: { label: "\u603B\u89C8" },
6540
+ group_apps: { label: "\u5E94\u7528" },
6541
+ nav_marketplace_browse: { label: "\u6D4F\u89C8\u5E94\u7528\u5E02\u573A" },
6542
+ nav_marketplace_installed: { label: "\u5DF2\u5B89\u88C5\u5E94\u7528" },
6252
6543
  group_people_org: { label: "\u4EBA\u5458\u4E0E\u7EC4\u7EC7" },
6253
6544
  group_access_control: { label: "\u8BBF\u95EE\u63A7\u5236" },
6254
6545
  group_approvals: { label: "\u5BA1\u6279" },
@@ -9223,6 +9514,9 @@ var jaJP = {
9223
9514
  description: "\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u8A2D\u5B9A\u3068\u7BA1\u7406",
9224
9515
  navigation: {
9225
9516
  group_overview: { label: "\u6982\u8981" },
9517
+ group_apps: { label: "\u30A2\u30D7\u30EA" },
9518
+ nav_marketplace_browse: { label: "\u30DE\u30FC\u30B1\u30C3\u30C8\u30D7\u30EC\u30A4\u30B9\u3092\u95B2\u89A7" },
9519
+ nav_marketplace_installed: { label: "\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F\u30A2\u30D7\u30EA" },
9226
9520
  group_people_org: { label: "\u30E6\u30FC\u30B6\u30FC\u3068\u7D44\u7E54" },
9227
9521
  group_access_control: { label: "\u30A2\u30AF\u30BB\u30B9\u5236\u5FA1" },
9228
9522
  group_approvals: { label: "\u627F\u8A8D" },
@@ -12197,6 +12491,9 @@ var esES = {
12197
12491
  description: "Configuraci\xF3n y administraci\xF3n de la plataforma",
12198
12492
  navigation: {
12199
12493
  group_overview: { label: "Resumen" },
12494
+ group_apps: { label: "Aplicaciones" },
12495
+ nav_marketplace_browse: { label: "Explorar Marketplace" },
12496
+ nav_marketplace_installed: { label: "Aplicaciones instaladas" },
12200
12497
  group_people_org: { label: "Personas y Organizaci\xF3n" },
12201
12498
  group_access_control: { label: "Control de Acceso" },
12202
12499
  group_approvals: { label: "Aprobaciones" },
@@ -12264,6 +12561,7 @@ var SetupAppTranslations = {
12264
12561
  };
12265
12562
 
12266
12563
  exports.SETUP_APP = SETUP_APP;
12564
+ exports.STUDIO_APP = STUDIO_APP;
12267
12565
  exports.SetupAppTranslations = SetupAppTranslations;
12268
12566
  exports.SystemOverviewDashboard = SystemOverviewDashboard;
12269
12567
  exports.en = en;