@carthooks/arcubase-cli 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/bundle/arcubase-admin.mjs +1041 -5061
  2. package/bundle/arcubase.mjs +1041 -5061
  3. package/dist/generated/command_registry.generated.d.ts +693 -2812
  4. package/dist/generated/command_registry.generated.d.ts.map +1 -1
  5. package/dist/generated/command_registry.generated.js +812 -4100
  6. package/dist/generated/type_index.generated.d.ts +8 -397
  7. package/dist/generated/type_index.generated.d.ts.map +1 -1
  8. package/dist/generated/type_index.generated.js +8 -403
  9. package/dist/generated/zod_registry.generated.d.ts +33 -261
  10. package/dist/generated/zod_registry.generated.d.ts.map +1 -1
  11. package/dist/generated/zod_registry.generated.js +36 -365
  12. package/dist/runtime/body_loader.d.ts.map +1 -1
  13. package/dist/runtime/body_loader.js +12 -0
  14. package/dist/runtime/command_registry.d.ts +3 -21
  15. package/dist/runtime/command_registry.d.ts.map +1 -1
  16. package/dist/runtime/command_registry.js +17 -23
  17. package/dist/runtime/env.d.ts +0 -2
  18. package/dist/runtime/env.d.ts.map +1 -1
  19. package/dist/runtime/env.js +0 -2
  20. package/dist/runtime/execute.d.ts +3 -3
  21. package/dist/runtime/execute.d.ts.map +1 -1
  22. package/dist/runtime/execute.js +53 -157
  23. package/dist/runtime/http.d.ts +1 -1
  24. package/dist/runtime/http.d.ts.map +1 -1
  25. package/dist/runtime/http.js +1 -5
  26. package/dist/runtime/upload.js +3 -3
  27. package/dist/runtime/zod_registry.d.ts.map +1 -1
  28. package/dist/runtime/zod_registry.js +7 -24
  29. package/dist/tests/bootstrap.test.js +1 -12
  30. package/dist/tests/command_registry.test.js +81 -28
  31. package/dist/tests/execute_validation.test.js +175 -510
  32. package/dist/tests/help.test.js +39 -63
  33. package/dist/tests/upload.test.js +4 -5
  34. package/dist/tests/zod_registry.test.js +0 -10
  35. package/package.json +1 -1
  36. package/sdk-dist/docs/runtime-reference/README.md +20 -36
  37. package/sdk-dist/docs/runtime-reference/entity-schema/README.md +4 -5
  38. package/sdk-dist/docs/runtime-reference/entity-schema/linkto.md +3 -3
  39. package/sdk-dist/docs/runtime-reference/entity-schema/query.md +3 -3
  40. package/sdk-dist/docs/runtime-reference/entity-schema/relation.md +3 -3
  41. package/sdk-dist/docs/runtime-reference/entity-schema/relationfield.md +3 -3
  42. package/sdk-dist/docs/runtime-reference/entity-schema/subform.md +2 -2
  43. package/sdk-dist/docs/runtime-reference/entity-schema.md +4 -4
  44. package/sdk-dist/docs/runtime-reference/examples/README.md +2 -2
  45. package/sdk-dist/docs/runtime-reference/examples/oms-01/README.md +12 -12
  46. package/sdk-dist/docs/runtime-reference/examples/oms-01/app-overview.md +1 -1
  47. package/sdk-dist/docs/runtime-reference/row-crud.md +11 -32
  48. package/sdk-dist/docs/runtime-reference/search-and-bulk-actions.md +16 -47
  49. package/sdk-dist/docs/runtime-reference/table-lifecycle.md +11 -27
  50. package/sdk-dist/docs/runtime-reference/uploads.md +1 -1
  51. package/sdk-dist/docs/runtime-reference/workflow/README.md +19 -0
  52. package/sdk-dist/generated/command_registry.generated.ts +814 -4102
  53. package/sdk-dist/generated/type_index.generated.ts +8 -403
  54. package/sdk-dist/generated/zod_registry.generated.ts +44 -500
  55. package/sdk-dist/types/app.ts +3 -10
  56. package/sdk-dist/types/common.ts +7 -0
  57. package/sdk-dist/types/global-action.ts +2 -1
  58. package/src/generated/command_registry.generated.ts +814 -4102
  59. package/src/generated/type_index.generated.ts +8 -403
  60. package/src/generated/zod_registry.generated.ts +44 -500
  61. package/src/runtime/body_loader.ts +11 -0
  62. package/src/runtime/command_registry.ts +22 -44
  63. package/src/runtime/env.ts +0 -4
  64. package/src/runtime/execute.ts +58 -168
  65. package/src/runtime/http.ts +2 -6
  66. package/src/runtime/upload.ts +3 -3
  67. package/src/runtime/zod_registry.ts +7 -25
  68. package/src/tests/bootstrap.test.ts +1 -12
  69. package/src/tests/command_registry.test.ts +81 -31
  70. package/src/tests/execute_validation.test.ts +199 -640
  71. package/src/tests/help.test.ts +36 -70
  72. package/src/tests/upload.test.ts +4 -5
  73. package/src/tests/zod_registry.test.ts +0 -13
  74. package/sdk-dist/docs/runtime-reference/app-discovery.md +0 -84
@@ -3,23 +3,20 @@ import assert from 'node:assert/strict'
3
3
 
4
4
  import { loadRuntimeEnv } from '../runtime/env.js'
5
5
 
6
- test('loadRuntimeEnv requires base url, tenant id and access token', () => {
6
+ test('loadRuntimeEnv requires base url and access token', () => {
7
7
  assert.throws(() => loadRuntimeEnv('admin', {}), /ARCUBASE_BASE_URL is required/)
8
8
  })
9
9
 
10
10
  test('loadRuntimeEnv returns normalized runtime env', () => {
11
11
  const env = loadRuntimeEnv('admin', {
12
12
  ARCUBASE_BASE_URL: ' http://example.com ',
13
- ARCUBASE_TENANT_ID: ' tenant-1 ',
14
13
  ARCUBASE_ACCESS_TOKEN: ' token-1 ',
15
14
  ARCUBASE_TRACE_ID: ' trace-1 '
16
15
  })
17
16
 
18
17
  assert.deepEqual(env, {
19
18
  ARCUBASE_BASE_URL: 'http://example.com',
20
- ARCUBASE_TENANT_ID: 'tenant-1',
21
19
  ARCUBASE_ACCESS_TOKEN: 'token-1',
22
- ARCUBASE_HOST: undefined,
23
20
  ARCUBASE_TRACE_ID: 'trace-1',
24
21
  ARCUBASE_SUBJECT_TYPE: undefined,
25
22
  ARCUBASE_SUBJECT_ID: undefined,
@@ -30,18 +27,14 @@ test('loadRuntimeEnv returns normalized runtime env', () => {
30
27
  test('loadRuntimeEnv accepts admin-prefixed runtime env', () => {
31
28
  const env = loadRuntimeEnv('admin', {
32
29
  ARCUBASE_ADMIN_BASE_URL: ' https://admin.example.com ',
33
- ARCUBASE_ADMIN_TENANT_ID: ' tenant-admin ',
34
30
  ARCUBASE_ADMIN_ACCESS_TOKEN: ' token-admin ',
35
- ARCUBASE_ADMIN_HOST: ' tenant-admin.arcubase.co ',
36
31
  ARCUBASE_ADMIN_SUBJECT_TYPE: ' system_admin ',
37
32
  ARCUBASE_ADMIN_SUBJECT_ID: ' user-admin ',
38
33
  })
39
34
 
40
35
  assert.deepEqual(env, {
41
36
  ARCUBASE_BASE_URL: 'https://admin.example.com',
42
- ARCUBASE_TENANT_ID: 'tenant-admin',
43
37
  ARCUBASE_ACCESS_TOKEN: 'token-admin',
44
- ARCUBASE_HOST: 'tenant-admin.arcubase.co',
45
38
  ARCUBASE_TRACE_ID: undefined,
46
39
  ARCUBASE_SUBJECT_TYPE: 'system_admin',
47
40
  ARCUBASE_SUBJECT_ID: 'user-admin',
@@ -52,18 +45,14 @@ test('loadRuntimeEnv accepts admin-prefixed runtime env', () => {
52
45
  test('loadRuntimeEnv accepts user-prefixed runtime env', () => {
53
46
  const env = loadRuntimeEnv('user', {
54
47
  ARCUBASE_USER_BASE_URL: ' https://user.example.com ',
55
- ARCUBASE_USER_TENANT_ID: ' tenant-user ',
56
48
  ARCUBASE_USER_ACCESS_TOKEN: ' token-user ',
57
- ARCUBASE_USER_HOST: ' tenant-user.arcubase.co ',
58
49
  ARCUBASE_USER_SUBJECT_TYPE: ' service_account ',
59
50
  ARCUBASE_USER_SUBJECT_ID: ' sa-user ',
60
51
  })
61
52
 
62
53
  assert.deepEqual(env, {
63
54
  ARCUBASE_BASE_URL: 'https://user.example.com',
64
- ARCUBASE_TENANT_ID: 'tenant-user',
65
55
  ARCUBASE_ACCESS_TOKEN: 'token-user',
66
- ARCUBASE_HOST: 'tenant-user.arcubase.co',
67
56
  ARCUBASE_TRACE_ID: undefined,
68
57
  ARCUBASE_SUBJECT_TYPE: 'service_account',
69
58
  ARCUBASE_SUBJECT_ID: 'sa-user',
@@ -2,41 +2,91 @@ import test from 'node:test'
2
2
  import assert from 'node:assert/strict'
3
3
 
4
4
  import { adminCommands, userCommands } from '../generated/command_registry.generated.js'
5
- import { findCommandSuggestions } from '../runtime/command_registry.js'
6
5
 
7
- test('admin app create-entity command exists', () => {
8
- assert.ok(adminCommands.some((c) => c.commandPath.join(' ') === 'app create-entity'))
9
- })
10
-
11
- test('admin app list-apps command exists', () => {
12
- assert.ok(adminCommands.some((c) => c.commandPath.join(' ') === 'app list-apps'))
13
- })
14
-
15
- test('admin app inventory command exists', () => {
16
- const suggestions = findCommandSuggestions('app', 'inventory', 20)
17
- assert.ok(suggestions.some((item) => item.binary === 'arcubase-admin' && item.moduleName === 'app' && item.commandName === 'inventory'))
18
- })
19
-
20
- test('user rows query-entity command exists', () => {
21
- assert.ok(userCommands.some((c) => c.commandPath.join(' ') === 'rows query-entity'))
22
- })
6
+ function commandPaths(commands: ReadonlyArray<{ commandPath: readonly string[] }>): string[] {
7
+ return commands.map((item) => item.commandPath.join(' ')).sort()
8
+ }
23
9
 
24
- test('inline request type keeps full object text instead of truncated brace', () => {
25
- const command = adminCommands.find((c) => c.commandPath.join(' ') === 'dashboard clone-dashboard')
26
- assert.ok(command)
27
- const typed = command!
28
- assert.match(String(typed.requestType), /^\{\s*name:\s*string\s*\}$/)
10
+ test('admin surface is restricted to reset white list', () => {
11
+ const actual = commandPaths(adminCommands)
12
+ const expected = [
13
+ 'app create',
14
+ 'app delete',
15
+ 'app get',
16
+ 'app list',
17
+ 'app update',
18
+ 'table create',
19
+ 'table delete',
20
+ 'table get',
21
+ 'table list',
22
+ 'table rename',
23
+ 'table update-schema',
24
+ 'access-rule assign-users',
25
+ 'access-rule create',
26
+ 'access-rule delete',
27
+ 'access-rule get',
28
+ 'access-rule list',
29
+ 'access-rule update',
30
+ 'workflow create-version',
31
+ 'workflow deploy',
32
+ 'workflow get',
33
+ 'workflow update',
34
+ ].sort()
35
+ assert.deepEqual(actual, expected)
29
36
  })
30
37
 
31
- test('tag commands no longer emit truncated inline request type', () => {
32
- const command = adminCommands.find((c) => c.commandPath.join(' ') === 'entity-tags batch-add-entity-tags')
33
- assert.ok(command)
34
- const typed = command!
35
- assert.match(String(typed.requestType), /^\{\s*policy_id:\s*string.*selection:\s*any.*tag_names:\s*string\[\]\s*\}$/)
36
- assert.equal(typed.scalarParams.length, 0)
38
+ test('user surface is restricted to reset white list', () => {
39
+ const actual = commandPaths(userCommands)
40
+ const expected = [
41
+ 'entry',
42
+ 'profile get',
43
+ 'profile update',
44
+ 'row bulk-update',
45
+ 'row create',
46
+ 'row delete',
47
+ 'row get',
48
+ 'row query',
49
+ 'row selection-action',
50
+ 'row update',
51
+ 'table dataset',
52
+ 'table get',
53
+ 'table relation-options',
54
+ 'upload check-mobile',
55
+ 'upload mobile',
56
+ 'upload preview',
57
+ 'upload token',
58
+ 'workflow approve',
59
+ 'workflow countersign',
60
+ 'workflow forward',
61
+ 'workflow process-map',
62
+ 'workflow query-approve-users',
63
+ 'workflow query-nodes',
64
+ 'workflow resolve',
65
+ 'workflow retract',
66
+ 'workflow rollback',
67
+ ].sort()
68
+ assert.deepEqual(actual, expected)
37
69
  })
38
70
 
39
- test('suggestions can point wrong admin delete guess to user rows delete command', () => {
40
- const suggestions = findCommandSuggestions('entity', 'admin-delete-entity-row')
41
- assert.ok(suggestions.some((item) => item.binary === 'arcubase' && item.moduleName === 'rows' && item.commandName === 'delete-entity-row'))
71
+ test('black list commands are removed from registry', () => {
72
+ const all = new Set([...commandPaths(adminCommands), ...commandPaths(userCommands)])
73
+ const forbidden = [
74
+ 'app inventory',
75
+ 'app list-apps',
76
+ 'app create-entity',
77
+ 'entity admin-get-entity-info',
78
+ 'entity admin-save-entity',
79
+ 'ingress create-entity-ingress',
80
+ 'workflow query-entity',
81
+ 'workflow insert-entity',
82
+ 'workflow update-entity-row',
83
+ 'workflow delete-entity-row',
84
+ 'workflow restore-entity-row',
85
+ 'workflow query-entity-selection',
86
+ 'profile change-password',
87
+ 'profile auth-channels',
88
+ ]
89
+ for (const item of forbidden) {
90
+ assert.equal(all.has(item), false, `${item} should not exist`)
91
+ }
42
92
  })