@thatopen/services 0.6.0 → 0.7.0

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 (71) hide show
  1. package/README.md +62 -62
  2. package/dist/built-in/index.d.ts +485 -100
  3. package/dist/cli.js +12 -23
  4. package/dist/index.cjs.js +2 -2
  5. package/dist/index.es.js +41 -50
  6. package/dist/vite-env.d.ts +1 -1
  7. package/docs/ai-quickstart.md +18 -3
  8. package/docs/cli/create.md +29 -29
  9. package/docs/cli/local-server.md +38 -38
  10. package/docs/cli/login.md +32 -32
  11. package/docs/cli/publish.md +31 -31
  12. package/docs/cli/run.md +26 -26
  13. package/docs/cli/serve.md +43 -43
  14. package/docs/cli/swap.md +30 -30
  15. package/docs/flow-architecture.md +1 -1
  16. package/docs/flow-plugin-guide.md +1 -1
  17. package/docs/platform-token.md +81 -0
  18. package/docs/revit-collab-quickstart.md +89 -18
  19. package/docs/rhino-interop-quickstart.md +391 -0
  20. package/package.json +1 -1
  21. package/resources/AGENTS.md +40 -40
  22. package/src/built-in/CDEManager/example.ts +214 -214
  23. package/src/built-in/CDEManager/examples/FileEditing/example.ts +226 -226
  24. package/src/built-in/CDEManager/examples/FileMoves/example.ts +186 -186
  25. package/src/built-in/CDEManager/examples/FileOperations/example.ts +295 -295
  26. package/src/built-in/CDEManager/examples/FileTransfers/example.ts +210 -210
  27. package/src/built-in/CDEManager/examples/FolderManagement/example.ts +230 -230
  28. package/src/built-in/CDEManager/examples/MetadataSchema/example.ts +230 -230
  29. package/src/built-in/CDEManager/examples/MetadataViews/example.ts +166 -166
  30. package/src/built-in/CDEManager/examples/ProjectConfig/example.ts +177 -177
  31. package/src/built-in/UIManager/src/app/example.ts +97 -97
  32. package/src/built-in/UIManager/src/app/examples/AppState/example.ts +140 -140
  33. package/src/built-in/UIManager/src/app/examples/Banner/example.ts +159 -159
  34. package/src/built-in/UIManager/src/app/examples/Contexts/example.ts +123 -123
  35. package/src/built-in/UIManager/src/app/examples/FileDrop/example.ts +124 -124
  36. package/src/built-in/UIManager/src/app/examples/FloatingLayout/example.ts +90 -90
  37. package/src/built-in/UIManager/src/app/examples/Modal/example.ts +163 -163
  38. package/src/built-in/UIManager/src/app/examples/Notifications/example.ts +133 -133
  39. package/src/built-in/UIManager/src/app/examples/ProjectFileStorage/example.ts +150 -150
  40. package/src/built-in/UIManager/src/app/examples/Sidebar/example.ts +102 -102
  41. package/src/built-in/UIManager/src/clashes-panel/example.ts +183 -183
  42. package/src/built-in/UIManager/src/git-history-panel/example.ts +70 -70
  43. package/src/built-in/UIManager/src/models-list/example.ts +122 -122
  44. package/src/built-in/UIManager/src/topics-panel/example.ts +170 -170
  45. package/src/built-in/index.ts +485 -100
  46. package/src/cli/templates/app/index.html +35 -35
  47. package/src/cli/templates/app/package.json +32 -32
  48. package/src/cli/templates/app/src/bim-components/CloudRunner/index.ts +95 -95
  49. package/src/cli/templates/app/src/bim-components/CloudRunner/src/index.ts +1 -1
  50. package/src/cli/templates/app/src/bim-components/CloudRunner/src/types.ts +5 -5
  51. package/src/cli/templates/app/src/bim-components/index.ts +1 -1
  52. package/src/cli/templates/app/src/globals.ts +1 -1
  53. package/src/cli/templates/app/src/ui-components/app-info-section/index.ts +26 -26
  54. package/src/cli/templates/app/src/ui-components/app-info-section/src/index.ts +1 -1
  55. package/src/cli/templates/app/src/ui-components/app-info-section/src/types.ts +15 -15
  56. package/src/cli/templates/app/src/ui-components/cloud-runner-section/index.ts +37 -37
  57. package/src/cli/templates/app/src/ui-components/cloud-runner-section/src/index.ts +1 -1
  58. package/src/cli/templates/app/src/ui-components/cloud-runner-section/src/types.ts +14 -14
  59. package/src/cli/templates/app/src/ui-components/index.ts +2 -2
  60. package/src/cli/templates/app/tsconfig.json +16 -16
  61. package/src/cli/templates/app/vite.config.js +57 -57
  62. package/src/cli/templates/cloud-component/README.md +205 -205
  63. package/src/cli/templates/cloud-component/_thatopen +5 -5
  64. package/src/cli/templates/cloud-component/declarations.json +4 -4
  65. package/src/cli/templates/cloud-component/package.json +21 -21
  66. package/src/cli/templates/cloud-component/src/main.ts +70 -70
  67. package/src/cli/templates/cloud-component/tsconfig.json +16 -16
  68. package/src/cli/templates/cloud-component/vite.config.js +46 -46
  69. package/src/cli/templates/shared/AGENTS.md +8 -8
  70. package/src/cli/templates/shared/CLAUDE.md +1 -1
  71. package/src/cli/templates/shared/_gitignore +5 -5
@@ -1,70 +1,70 @@
1
- // Cloud Component Entry Point
2
- //
3
- // Your component runs on the server as a Node.js process.
4
- // The execution engine provides these globals — do NOT import them:
5
- //
6
- // thatOpenServices — pre-authenticated EngineServicesClient
7
- // executionParams — parameters passed by the caller (shape defined in ../declarations.json)
8
- // executionContext — platform-supplied run context: { projectId?, executionId, toolId, toolVersion }
9
- // Use executionContext.projectId to scope uploads/lookups to the launching project.
10
- // Undefined when the component is run outside a project context.
11
- // executionReporter — { message(msg), error(msg), progress(pct) } for live feedback
12
- //
13
- // Parameters are declared in `declarations.json` at the project root. That
14
- // file is bundled alongside this code at publish time so the platform (and
15
- // the CLI's `thatopen run`) knows which parameters the component accepts
16
- // and their types. Whenever you add, remove, or rename a parameter in this
17
- // file you MUST update `declarations.json` to match — `thatopen publish`
18
- // fails if they drift.
19
- //
20
- // Return value — must be { type, message }:
21
- // type: "SUCCESS" | "FAIL" | "WARNING"
22
-
23
- // Globals injected by the execution engine at runtime — keep these for type checking
24
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
25
- declare const thatOpenServices: import("@thatopen/services").EngineServicesClient;
26
- declare const executionParams: Record<string, unknown>;
27
- declare const executionContext: {
28
- projectId?: string;
29
- executionId: string;
30
- toolId: string;
31
- toolVersion: string;
32
- };
33
- declare const executionReporter: {
34
- message(msg: string): void;
35
- error(msg: string): void;
36
- progress(pct: number): void;
37
- };
38
-
39
- export async function main() {
40
- const projectName = executionParams.projectName as string | undefined;
41
- const iterations = Number(executionParams.iterations);
42
-
43
- executionReporter.message(
44
- `Starting for "${projectName ?? "(unnamed)"}"`,
45
- );
46
- executionReporter.message(`Will run ${iterations} iteration(s)`);
47
- if (executionContext?.projectId) {
48
- executionReporter.message(`Scoped to project ${executionContext.projectId}`);
49
- }
50
-
51
- if (!projectName) {
52
- return { type: "FAIL", message: "projectName parameter is required" };
53
- }
54
- if (!Number.isFinite(iterations) || iterations <= 0) {
55
- return { type: "FAIL", message: "iterations must be a positive number" };
56
- }
57
-
58
- for (let i = 1; i <= iterations; i++) {
59
- executionReporter.message(`Iteration ${i} of ${iterations}`);
60
- executionReporter.progress(Math.round((i / iterations) * 100));
61
- await new Promise((resolve) => setTimeout(resolve, 500));
62
- }
63
-
64
- executionReporter.message("All iterations completed");
65
-
66
- return {
67
- type: "SUCCESS",
68
- message: `Processed "${projectName}" across ${iterations} iteration(s)`,
69
- };
70
- }
1
+ // Cloud Component Entry Point
2
+ //
3
+ // Your component runs on the server as a Node.js process.
4
+ // The execution engine provides these globals — do NOT import them:
5
+ //
6
+ // thatOpenServices — pre-authenticated EngineServicesClient
7
+ // executionParams — parameters passed by the caller (shape defined in ../declarations.json)
8
+ // executionContext — platform-supplied run context: { projectId?, executionId, toolId, toolVersion }
9
+ // Use executionContext.projectId to scope uploads/lookups to the launching project.
10
+ // Undefined when the component is run outside a project context.
11
+ // executionReporter — { message(msg), error(msg), progress(pct) } for live feedback
12
+ //
13
+ // Parameters are declared in `declarations.json` at the project root. That
14
+ // file is bundled alongside this code at publish time so the platform (and
15
+ // the CLI's `thatopen run`) knows which parameters the component accepts
16
+ // and their types. Whenever you add, remove, or rename a parameter in this
17
+ // file you MUST update `declarations.json` to match — `thatopen publish`
18
+ // fails if they drift.
19
+ //
20
+ // Return value — must be { type, message }:
21
+ // type: "SUCCESS" | "FAIL" | "WARNING"
22
+
23
+ // Globals injected by the execution engine at runtime — keep these for type checking
24
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
25
+ declare const thatOpenServices: import("@thatopen/services").EngineServicesClient;
26
+ declare const executionParams: Record<string, unknown>;
27
+ declare const executionContext: {
28
+ projectId?: string;
29
+ executionId: string;
30
+ toolId: string;
31
+ toolVersion: string;
32
+ };
33
+ declare const executionReporter: {
34
+ message(msg: string): void;
35
+ error(msg: string): void;
36
+ progress(pct: number): void;
37
+ };
38
+
39
+ export async function main() {
40
+ const projectName = executionParams.projectName as string | undefined;
41
+ const iterations = Number(executionParams.iterations);
42
+
43
+ executionReporter.message(
44
+ `Starting for "${projectName ?? "(unnamed)"}"`,
45
+ );
46
+ executionReporter.message(`Will run ${iterations} iteration(s)`);
47
+ if (executionContext?.projectId) {
48
+ executionReporter.message(`Scoped to project ${executionContext.projectId}`);
49
+ }
50
+
51
+ if (!projectName) {
52
+ return { type: "FAIL", message: "projectName parameter is required" };
53
+ }
54
+ if (!Number.isFinite(iterations) || iterations <= 0) {
55
+ return { type: "FAIL", message: "iterations must be a positive number" };
56
+ }
57
+
58
+ for (let i = 1; i <= iterations; i++) {
59
+ executionReporter.message(`Iteration ${i} of ${iterations}`);
60
+ executionReporter.progress(Math.round((i / iterations) * 100));
61
+ await new Promise((resolve) => setTimeout(resolve, 500));
62
+ }
63
+
64
+ executionReporter.message("All iterations completed");
65
+
66
+ return {
67
+ type: "SUCCESS",
68
+ message: `Processed "${projectName}" across ${iterations} iteration(s)`,
69
+ };
70
+ }
@@ -1,16 +1,16 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "module": "ESNext",
5
- "lib": ["ES2020"],
6
- "skipLibCheck": true,
7
- "esModuleInterop": true,
8
- "moduleResolution": "bundler",
9
- "allowImportingTsExtensions": true,
10
- "resolveJsonModule": true,
11
- "isolatedModules": true,
12
- "noEmit": true,
13
- "strict": true
14
- },
15
- "include": ["src"]
16
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "ESNext",
5
+ "lib": ["ES2020"],
6
+ "skipLibCheck": true,
7
+ "esModuleInterop": true,
8
+ "moduleResolution": "bundler",
9
+ "allowImportingTsExtensions": true,
10
+ "resolveJsonModule": true,
11
+ "isolatedModules": true,
12
+ "noEmit": true,
13
+ "strict": true
14
+ },
15
+ "include": ["src"]
16
+ }
@@ -1,46 +1,46 @@
1
- // Production build config — builds dist/bundle.js as IIFE.
2
- // For local development, use: npm run dev (runs thatopen serve with esbuild).
3
- // Do NOT run "vite" or "vite build --watch" directly for dev.
4
- import { defineConfig } from 'vite';
5
- import { resolve } from 'path';
6
- import { existsSync, readFileSync } from 'fs';
7
-
8
- function getBetaAliases() {
9
- if (!existsSync('.thatopen')) return {};
10
- try {
11
- const config = JSON.parse(readFileSync('.thatopen', 'utf-8'));
12
- if (!config.beta) return {};
13
- return {
14
- '@thatopen/components': '@thatopen-platform/components-beta',
15
- '@thatopen/components-front': '@thatopen-platform/components-front-beta',
16
- '@thatopen/fragments': '@thatopen-platform/fragments-beta',
17
- };
18
- } catch {
19
- return {};
20
- }
21
- }
22
-
23
- export default defineConfig({
24
- resolve: {
25
- alias: getBetaAliases(),
26
- },
27
- build: {
28
- lib: {
29
- entry: resolve(__dirname, 'src/main.ts'),
30
- name: 'ThatOpenComponent',
31
- formats: ['iife'],
32
- fileName: () => 'bundle.js',
33
- },
34
- outDir: 'dist',
35
- rollupOptions: {
36
- // Only @thatopen/services is externalized — the execution wrapper
37
- // provides it at runtime via require('@thatopen/services'). Every
38
- // other dependency (including @thatopen/components, three, web-ifc,
39
- // or any npm package you install) must be bundled into bundle.js.
40
- external: ['@thatopen/services'],
41
- output: {
42
- footer: 'var main = ThatOpenComponent.main;',
43
- },
44
- },
45
- },
46
- });
1
+ // Production build config — builds dist/bundle.js as IIFE.
2
+ // For local development, use: npm run dev (runs thatopen serve with esbuild).
3
+ // Do NOT run "vite" or "vite build --watch" directly for dev.
4
+ import { defineConfig } from 'vite';
5
+ import { resolve } from 'path';
6
+ import { existsSync, readFileSync } from 'fs';
7
+
8
+ function getBetaAliases() {
9
+ if (!existsSync('.thatopen')) return {};
10
+ try {
11
+ const config = JSON.parse(readFileSync('.thatopen', 'utf-8'));
12
+ if (!config.beta) return {};
13
+ return {
14
+ '@thatopen/components': '@thatopen-platform/components-beta',
15
+ '@thatopen/components-front': '@thatopen-platform/components-front-beta',
16
+ '@thatopen/fragments': '@thatopen-platform/fragments-beta',
17
+ };
18
+ } catch {
19
+ return {};
20
+ }
21
+ }
22
+
23
+ export default defineConfig({
24
+ resolve: {
25
+ alias: getBetaAliases(),
26
+ },
27
+ build: {
28
+ lib: {
29
+ entry: resolve(__dirname, 'src/main.ts'),
30
+ name: 'ThatOpenComponent',
31
+ formats: ['iife'],
32
+ fileName: () => 'bundle.js',
33
+ },
34
+ outDir: 'dist',
35
+ rollupOptions: {
36
+ // Only @thatopen/services is externalized — the execution wrapper
37
+ // provides it at runtime via require('@thatopen/services'). Every
38
+ // other dependency (including @thatopen/components, three, web-ifc,
39
+ // or any npm package you install) must be bundled into bundle.js.
40
+ external: ['@thatopen/services'],
41
+ output: {
42
+ footer: 'var main = ThatOpenComponent.main;',
43
+ },
44
+ },
45
+ },
46
+ });
@@ -1,8 +1,8 @@
1
- # That Open Platform — Agent Guide
2
-
3
- Read these two files before doing anything else:
4
-
5
- 1. `node_modules/@thatopen/services/resources/AGENTS.md` — rules, hard constraints, and the full navigation table for the That Open Platform. Always current for the installed library version.
6
- 2. `README.md` (this folder) — what this specific project is, its commands, architecture, and patterns.
7
-
8
- If `node_modules/` doesn't exist yet, run `npm install` first or ask the user to do it.
1
+ # That Open Platform — Agent Guide
2
+
3
+ Read these two files before doing anything else:
4
+
5
+ 1. `node_modules/@thatopen/services/resources/AGENTS.md` — rules, hard constraints, and the full navigation table for the That Open Platform. Always current for the installed library version.
6
+ 2. `README.md` (this folder) — what this specific project is, its commands, architecture, and patterns.
7
+
8
+ If `node_modules/` doesn't exist yet, run `npm install` first or ask the user to do it.
@@ -1 +1 @@
1
- See [AGENTS.md](./AGENTS.md).
1
+ See [AGENTS.md](./AGENTS.md).
@@ -1,5 +1,5 @@
1
- node_modules
2
- dist
3
- *.zip
4
- .thatopen
5
- .npmrc
1
+ node_modules
2
+ dist
3
+ *.zip
4
+ .thatopen
5
+ .npmrc