@jskit-ai/jskit-catalog 0.1.4
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/catalog/packages.json +3161 -0
- package/package.json +31 -0
- package/scripts/build-catalog.mjs +151 -0
|
@@ -0,0 +1,3161 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"source": {
|
|
4
|
+
"kind": "packages-directory"
|
|
5
|
+
},
|
|
6
|
+
"packages": [
|
|
7
|
+
{
|
|
8
|
+
"packageId": "@jskit-ai/assistant",
|
|
9
|
+
"version": "0.1.4",
|
|
10
|
+
"descriptor": {
|
|
11
|
+
"packageVersion": 1,
|
|
12
|
+
"packageId": "@jskit-ai/assistant",
|
|
13
|
+
"version": "0.1.4",
|
|
14
|
+
"description": "Unified assistant module with streaming chat, transcript persistence, service-aware tool execution, and workspace UI.",
|
|
15
|
+
"options": {
|
|
16
|
+
"ai-provider": {
|
|
17
|
+
"required": true,
|
|
18
|
+
"defaultValue": "openai",
|
|
19
|
+
"promptLabel": "AI provider",
|
|
20
|
+
"promptHint": "Supported values: openai | deepseek | anthropic."
|
|
21
|
+
},
|
|
22
|
+
"ai-api-key": {
|
|
23
|
+
"required": true,
|
|
24
|
+
"allowEmpty": true,
|
|
25
|
+
"defaultValue": "",
|
|
26
|
+
"promptLabel": "AI API key",
|
|
27
|
+
"promptHint": "Leave empty to keep assistant disabled until you add a key."
|
|
28
|
+
},
|
|
29
|
+
"ai-base-url": {
|
|
30
|
+
"required": true,
|
|
31
|
+
"allowEmpty": true,
|
|
32
|
+
"defaultValue": "",
|
|
33
|
+
"promptLabel": "AI base URL",
|
|
34
|
+
"promptHint": "Optional provider-compatible base URL override."
|
|
35
|
+
},
|
|
36
|
+
"ai-timeout-ms": {
|
|
37
|
+
"required": true,
|
|
38
|
+
"defaultValue": "120000",
|
|
39
|
+
"promptLabel": "AI timeout (ms)",
|
|
40
|
+
"promptHint": "Abort AI requests after this many milliseconds."
|
|
41
|
+
},
|
|
42
|
+
"surfaces": {
|
|
43
|
+
"required": true,
|
|
44
|
+
"inputType": "text",
|
|
45
|
+
"defaultValue": "admin",
|
|
46
|
+
"promptLabel": "Target workspace surfaces",
|
|
47
|
+
"promptHint": "Comma-separated workspace surface ids for assistant page + menu placement (for example: admin,app)."
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"dependsOn": [
|
|
51
|
+
"@jskit-ai/auth-core",
|
|
52
|
+
"@jskit-ai/database-runtime",
|
|
53
|
+
"@jskit-ai/http-runtime",
|
|
54
|
+
"@jskit-ai/realtime",
|
|
55
|
+
"@jskit-ai/users-core",
|
|
56
|
+
"@jskit-ai/users-web"
|
|
57
|
+
],
|
|
58
|
+
"capabilities": {
|
|
59
|
+
"provides": [
|
|
60
|
+
"assistant"
|
|
61
|
+
],
|
|
62
|
+
"requires": [
|
|
63
|
+
"runtime.actions",
|
|
64
|
+
"runtime.database",
|
|
65
|
+
"auth.policy",
|
|
66
|
+
"users.core",
|
|
67
|
+
"users.web",
|
|
68
|
+
"runtime.realtime.client"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"runtime": {
|
|
72
|
+
"server": {
|
|
73
|
+
"providers": [
|
|
74
|
+
{
|
|
75
|
+
"entrypoint": "src/server/AssistantServiceProvider.js",
|
|
76
|
+
"export": "AssistantServiceProvider"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"client": {
|
|
81
|
+
"providers": [
|
|
82
|
+
{
|
|
83
|
+
"entrypoint": "src/client/providers/AssistantWebClientProvider.js",
|
|
84
|
+
"export": "AssistantWebClientProvider"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"metadata": {
|
|
90
|
+
"apiSummary": {
|
|
91
|
+
"surfaces": [
|
|
92
|
+
{
|
|
93
|
+
"subpath": "./server/AssistantServiceProvider",
|
|
94
|
+
"summary": "Exports assistant runtime provider."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"subpath": "./client",
|
|
98
|
+
"summary": "Exports assistant workspace element and composables."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"subpath": "./shared",
|
|
102
|
+
"summary": "Exports assistant API paths, query keys, stream events, and resource validators."
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"containerTokens": {
|
|
106
|
+
"server": [
|
|
107
|
+
"assistant.chat.service",
|
|
108
|
+
"assistant.settings.service",
|
|
109
|
+
"assistant.transcript.service",
|
|
110
|
+
"assistant.conversation.repository",
|
|
111
|
+
"assistant.message.repository",
|
|
112
|
+
"assistant.settings.repository"
|
|
113
|
+
],
|
|
114
|
+
"client": [
|
|
115
|
+
"assistant.web.console-settings.element",
|
|
116
|
+
"assistant.web.workspace-settings.element"
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"mutations": {
|
|
122
|
+
"dependencies": {
|
|
123
|
+
"runtime": {
|
|
124
|
+
"@jskit-ai/assistant": "0.1.4",
|
|
125
|
+
"@jskit-ai/auth-core": "0.1.4",
|
|
126
|
+
"@jskit-ai/database-runtime": "0.1.4",
|
|
127
|
+
"@jskit-ai/http-runtime": "0.1.4",
|
|
128
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
129
|
+
"@jskit-ai/realtime": "0.1.4",
|
|
130
|
+
"@jskit-ai/users-core": "0.1.4",
|
|
131
|
+
"@jskit-ai/users-web": "0.1.4",
|
|
132
|
+
"@tanstack/vue-query": "^5.90.5",
|
|
133
|
+
"dompurify": "^3.3.3",
|
|
134
|
+
"marked": "^17.0.4",
|
|
135
|
+
"openai": "^6.22.0",
|
|
136
|
+
"typebox": "^1.0.81",
|
|
137
|
+
"vuetify": "^4.0.0"
|
|
138
|
+
},
|
|
139
|
+
"dev": {}
|
|
140
|
+
},
|
|
141
|
+
"packageJson": {
|
|
142
|
+
"scripts": {}
|
|
143
|
+
},
|
|
144
|
+
"procfile": {},
|
|
145
|
+
"files": [
|
|
146
|
+
{
|
|
147
|
+
"op": "install-migration",
|
|
148
|
+
"from": "templates/migrations/assistant_transcripts_initial.cjs",
|
|
149
|
+
"toDir": "migrations",
|
|
150
|
+
"slug": "assistant_transcripts_initial",
|
|
151
|
+
"extension": ".cjs",
|
|
152
|
+
"reason": "Install assistant conversation/message schema migration.",
|
|
153
|
+
"category": "assistant",
|
|
154
|
+
"id": "assistant-transcripts-initial-schema"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"op": "install-migration",
|
|
158
|
+
"from": "templates/migrations/assistant_settings_initial.cjs",
|
|
159
|
+
"toDir": "migrations",
|
|
160
|
+
"slug": "assistant_settings_initial",
|
|
161
|
+
"extension": ".cjs",
|
|
162
|
+
"reason": "Install assistant settings schema migration.",
|
|
163
|
+
"category": "assistant",
|
|
164
|
+
"id": "assistant-settings-initial-schema"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"from": "templates/src/pages/admin/workspace/assistant/index.vue",
|
|
168
|
+
"toSurface": "${option:surfaces|lower}",
|
|
169
|
+
"toSurfacePath": "workspace/assistant/index.vue",
|
|
170
|
+
"reason": "Install assistant workspace page scaffold.",
|
|
171
|
+
"category": "assistant",
|
|
172
|
+
"id": "assistant-page-admin-workspace-assistant-index",
|
|
173
|
+
"when": {
|
|
174
|
+
"config": "tenancyMode",
|
|
175
|
+
"in": [
|
|
176
|
+
"personal",
|
|
177
|
+
"workspace"
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"text": [
|
|
183
|
+
{
|
|
184
|
+
"op": "append-text",
|
|
185
|
+
"file": "src/placement.js",
|
|
186
|
+
"position": "bottom",
|
|
187
|
+
"skipIfContains": "id: \"assistant.workspace.menu\"",
|
|
188
|
+
"value": "\n(() => {\n const assistantWorkspaceSurfaceIds = \"${option:surfaces|lower}\"\n .split(\",\")\n .map((entry) => String(entry || \"\").trim().toLowerCase())\n .filter(Boolean);\n\n addPlacement({\n id: \"assistant.workspace.menu\",\n host: \"shell-layout\",\n position: \"primary-menu\",\n surfaces: assistantWorkspaceSurfaceIds.length > 0 ? assistantWorkspaceSurfaceIds : [\"*\"],\n order: 310,\n componentToken: \"users.web.shell.surface-aware-menu-link-item\",\n props: {\n label: \"Assistant\",\n workspaceSuffix: \"/workspace/assistant\",\n nonWorkspaceSuffix: \"/workspace/assistant\"\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n });\n})();\n",
|
|
189
|
+
"reason": "Append assistant menu placement into app-owned placement registry.",
|
|
190
|
+
"category": "assistant",
|
|
191
|
+
"id": "assistant-placement-menu",
|
|
192
|
+
"when": {
|
|
193
|
+
"config": "tenancyMode",
|
|
194
|
+
"in": [
|
|
195
|
+
"personal",
|
|
196
|
+
"workspace"
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"op": "append-text",
|
|
202
|
+
"file": "src/placement.js",
|
|
203
|
+
"position": "bottom",
|
|
204
|
+
"skipIfContains": "id: \"assistant.workspace.settings.form\"",
|
|
205
|
+
"value": "\naddPlacement({\n id: \"assistant.workspace.settings.form\",\n host: \"workspace-settings\",\n position: \"forms\",\n surfaces: [\"*\"],\n order: 250,\n componentToken: \"assistant.web.workspace-settings.element\"\n});\n",
|
|
206
|
+
"reason": "Append assistant workspace settings form into app-owned settings placements.",
|
|
207
|
+
"category": "assistant",
|
|
208
|
+
"id": "assistant-workspace-settings-form-placement",
|
|
209
|
+
"when": {
|
|
210
|
+
"config": "tenancyMode",
|
|
211
|
+
"in": [
|
|
212
|
+
"personal",
|
|
213
|
+
"workspace"
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"op": "append-text",
|
|
219
|
+
"file": "src/placement.js",
|
|
220
|
+
"position": "bottom",
|
|
221
|
+
"skipIfContains": "id: \"assistant.console.settings.form\"",
|
|
222
|
+
"value": "\naddPlacement({\n id: \"assistant.console.settings.form\",\n host: \"console-settings\",\n position: \"forms\",\n surfaces: [\"*\"],\n order: 250,\n componentToken: \"assistant.web.console-settings.element\",\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
|
|
223
|
+
"reason": "Append assistant console settings form into app-owned settings placements.",
|
|
224
|
+
"category": "assistant",
|
|
225
|
+
"id": "assistant-console-settings-form-placement"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"op": "append-text",
|
|
229
|
+
"file": "packages/main/src/shared/resources/consoleSettingsFields.js",
|
|
230
|
+
"position": "top",
|
|
231
|
+
"skipIfContains": "import { Type } from \"typebox\";",
|
|
232
|
+
"value": "import { Type } from \"typebox\";\n",
|
|
233
|
+
"reason": "Ensure app-owned console settings field registry has TypeBox import for assistant fields.",
|
|
234
|
+
"category": "assistant",
|
|
235
|
+
"id": "assistant-console-settings-fields-import-typebox"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"op": "append-text",
|
|
239
|
+
"file": "packages/main/src/shared/resources/consoleSettingsFields.js",
|
|
240
|
+
"position": "bottom",
|
|
241
|
+
"skipIfContains": "key: \"workspaceSurfacePrompt\"",
|
|
242
|
+
"value": "\ndefineField({\n key: \"workspaceSurfacePrompt\",\n dbColumn: \"assistant_workspace_surface_prompt\",\n required: true,\n inputSchema: Type.String({\n maxLength: 12000,\n messages: {\n maxLength: \"Workspace surface system prompt must be at most 12000 characters.\",\n default: \"Workspace surface system prompt must be valid text.\"\n }\n }),\n outputSchema: Type.String({ maxLength: 12000 }),\n normalizeInput: (value) => String(value || \"\"),\n normalizeOutput: (value) => String(value || \"\"),\n resolveDefault: () => \"\"\n});\n",
|
|
243
|
+
"reason": "Append assistant console settings field into app-owned console settings field registry.",
|
|
244
|
+
"category": "assistant",
|
|
245
|
+
"id": "assistant-console-settings-field-definition"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"op": "append-text",
|
|
249
|
+
"file": "packages/main/src/shared/resources/workspaceSettingsFields.js",
|
|
250
|
+
"position": "bottom",
|
|
251
|
+
"skipIfContains": "key: \"appSurfacePrompt\"",
|
|
252
|
+
"value": "\ndefineField({\n key: \"appSurfacePrompt\",\n dbColumn: \"assistant_app_surface_prompt\",\n required: true,\n inputSchema: Type.String({\n maxLength: 12000,\n messages: {\n maxLength: \"App surface system prompt must be at most 12000 characters.\",\n default: \"App surface system prompt must be valid text.\"\n }\n }),\n outputSchema: Type.String({ maxLength: 12000 }),\n normalizeInput: (value) => String(value || \"\"),\n normalizeOutput: (value) => String(value || \"\"),\n resolveDefault: () => \"\"\n});\n",
|
|
253
|
+
"reason": "Append assistant workspace settings field into app-owned workspace settings field registry.",
|
|
254
|
+
"category": "assistant",
|
|
255
|
+
"id": "assistant-workspace-settings-field-definition",
|
|
256
|
+
"when": {
|
|
257
|
+
"config": "tenancyMode",
|
|
258
|
+
"in": [
|
|
259
|
+
"personal",
|
|
260
|
+
"workspace"
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"file": ".env",
|
|
266
|
+
"op": "upsert-env",
|
|
267
|
+
"key": "AI_PROVIDER",
|
|
268
|
+
"value": "${option:ai-provider}",
|
|
269
|
+
"reason": "Configure assistant AI provider id.",
|
|
270
|
+
"category": "runtime-config",
|
|
271
|
+
"id": "assistant-ai-provider"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"file": ".env",
|
|
275
|
+
"op": "upsert-env",
|
|
276
|
+
"key": "AI_API_KEY",
|
|
277
|
+
"value": "${option:ai-api-key}",
|
|
278
|
+
"reason": "Configure assistant provider API key.",
|
|
279
|
+
"category": "runtime-config",
|
|
280
|
+
"id": "assistant-ai-api-key"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"file": ".env",
|
|
284
|
+
"op": "upsert-env",
|
|
285
|
+
"key": "AI_BASE_URL",
|
|
286
|
+
"value": "${option:ai-base-url}",
|
|
287
|
+
"reason": "Configure optional assistant provider base URL.",
|
|
288
|
+
"category": "runtime-config",
|
|
289
|
+
"id": "assistant-ai-base-url"
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"file": ".env",
|
|
293
|
+
"op": "upsert-env",
|
|
294
|
+
"key": "AI_TIMEOUT_MS",
|
|
295
|
+
"value": "${option:ai-timeout-ms}",
|
|
296
|
+
"reason": "Configure assistant provider timeout.",
|
|
297
|
+
"category": "runtime-config",
|
|
298
|
+
"id": "assistant-ai-timeout-ms"
|
|
299
|
+
}
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"packageId": "@jskit-ai/auth-core",
|
|
306
|
+
"version": "0.1.4",
|
|
307
|
+
"descriptor": {
|
|
308
|
+
"packageVersion": 1,
|
|
309
|
+
"packageId": "@jskit-ai/auth-core",
|
|
310
|
+
"version": "0.1.4",
|
|
311
|
+
"dependsOn": [
|
|
312
|
+
"@jskit-ai/value-app-config-shared"
|
|
313
|
+
],
|
|
314
|
+
"capabilities": {
|
|
315
|
+
"provides": [
|
|
316
|
+
"auth.access",
|
|
317
|
+
"auth.policy"
|
|
318
|
+
],
|
|
319
|
+
"requires": []
|
|
320
|
+
},
|
|
321
|
+
"runtime": {
|
|
322
|
+
"server": {
|
|
323
|
+
"providerEntrypoint": "src/server/providers/AccessCoreServiceProvider.js",
|
|
324
|
+
"providers": [
|
|
325
|
+
{
|
|
326
|
+
"entrypoint": "src/server/providers/AccessCoreServiceProvider.js",
|
|
327
|
+
"export": "AccessCoreServiceProvider"
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"entrypoint": "src/server/providers/FastifyAuthPolicyServiceProvider.js",
|
|
331
|
+
"export": "FastifyAuthPolicyServiceProvider"
|
|
332
|
+
}
|
|
333
|
+
]
|
|
334
|
+
},
|
|
335
|
+
"client": {
|
|
336
|
+
"providers": [
|
|
337
|
+
{
|
|
338
|
+
"entrypoint": "src/client/providers/AccessCoreClientProvider.js",
|
|
339
|
+
"export": "AccessCoreClientProvider"
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"entrypoint": "src/client/providers/FastifyAuthPolicyClientProvider.js",
|
|
343
|
+
"export": "FastifyAuthPolicyClientProvider"
|
|
344
|
+
}
|
|
345
|
+
]
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
"metadata": {
|
|
349
|
+
"apiSummary": {
|
|
350
|
+
"surfaces": [
|
|
351
|
+
{
|
|
352
|
+
"subpath": "./client",
|
|
353
|
+
"summary": "Exports client auth access APIs plus AccessCoreClientProvider/FastifyAuthPolicyClientProvider."
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"subpath": "./server",
|
|
357
|
+
"summary": "Exports server auth access and Fastify auth policy providers plus server auth utility modules."
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"subpath": "./shared",
|
|
361
|
+
"summary": "Exports shared auth client helpers (createApi and runAuthSignOutFlow), with structured subpaths at ./shared/authApi and ./shared/signOutFlow."
|
|
362
|
+
}
|
|
363
|
+
],
|
|
364
|
+
"containerTokens": {
|
|
365
|
+
"server": [
|
|
366
|
+
"auth.access"
|
|
367
|
+
],
|
|
368
|
+
"client": [
|
|
369
|
+
"auth.access.client"
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
"mutations": {
|
|
375
|
+
"dependencies": {
|
|
376
|
+
"runtime": {
|
|
377
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
378
|
+
"@fastify/cookie": "^11.0.2",
|
|
379
|
+
"@fastify/csrf-protection": "^7.1.0",
|
|
380
|
+
"@fastify/rate-limit": "^10.3.0"
|
|
381
|
+
},
|
|
382
|
+
"dev": {}
|
|
383
|
+
},
|
|
384
|
+
"packageJson": {
|
|
385
|
+
"scripts": {}
|
|
386
|
+
},
|
|
387
|
+
"procfile": {},
|
|
388
|
+
"files": [],
|
|
389
|
+
"text": [
|
|
390
|
+
{
|
|
391
|
+
"file": ".env",
|
|
392
|
+
"op": "upsert-env",
|
|
393
|
+
"key": "AUTH_PROFILE_MODE",
|
|
394
|
+
"value": "standalone",
|
|
395
|
+
"reason": "Default auth profile mode to standalone when users-core is not installed.",
|
|
396
|
+
"category": "runtime-config",
|
|
397
|
+
"id": "auth-profile-mode"
|
|
398
|
+
}
|
|
399
|
+
]
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"packageId": "@jskit-ai/auth-provider-supabase-core",
|
|
405
|
+
"version": "0.1.4",
|
|
406
|
+
"descriptor": {
|
|
407
|
+
"packageVersion": 1,
|
|
408
|
+
"packageId": "@jskit-ai/auth-provider-supabase-core",
|
|
409
|
+
"version": "0.1.4",
|
|
410
|
+
"options": {
|
|
411
|
+
"auth-supabase-url": {
|
|
412
|
+
"required": true,
|
|
413
|
+
"values": [],
|
|
414
|
+
"promptLabel": "Supabase URL",
|
|
415
|
+
"promptHint": "https://YOUR-PROJECT.supabase.co"
|
|
416
|
+
},
|
|
417
|
+
"auth-supabase-publishable-key": {
|
|
418
|
+
"required": true,
|
|
419
|
+
"values": [],
|
|
420
|
+
"promptLabel": "Supabase publishable key",
|
|
421
|
+
"promptHint": "sb_publishable_..."
|
|
422
|
+
},
|
|
423
|
+
"app-public-url": {
|
|
424
|
+
"required": true,
|
|
425
|
+
"values": [],
|
|
426
|
+
"defaultValue": "http://localhost:5173",
|
|
427
|
+
"promptLabel": "App public URL",
|
|
428
|
+
"promptHint": "Browser URL used for auth redirects"
|
|
429
|
+
}
|
|
430
|
+
},
|
|
431
|
+
"dependsOn": [
|
|
432
|
+
"@jskit-ai/auth-core",
|
|
433
|
+
"@jskit-ai/value-app-config-shared"
|
|
434
|
+
],
|
|
435
|
+
"capabilities": {
|
|
436
|
+
"provides": [
|
|
437
|
+
"auth.provider.supabase",
|
|
438
|
+
"auth.provider"
|
|
439
|
+
],
|
|
440
|
+
"requires": [
|
|
441
|
+
"auth.access"
|
|
442
|
+
]
|
|
443
|
+
},
|
|
444
|
+
"runtime": {
|
|
445
|
+
"server": {
|
|
446
|
+
"providerEntrypoint": "src/server/providers/AuthSupabaseServiceProvider.js",
|
|
447
|
+
"providers": [
|
|
448
|
+
{
|
|
449
|
+
"entrypoint": "src/server/providers/AuthSupabaseServiceProvider.js",
|
|
450
|
+
"export": "AuthSupabaseServiceProvider"
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
"entrypoint": "src/server/providers/AuthProviderServiceProvider.js",
|
|
454
|
+
"export": "AuthProviderServiceProvider"
|
|
455
|
+
}
|
|
456
|
+
]
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
"metadata": {
|
|
460
|
+
"apiSummary": {
|
|
461
|
+
"surfaces": [
|
|
462
|
+
{
|
|
463
|
+
"subpath": "./server/providers/AuthSupabaseServiceProvider",
|
|
464
|
+
"summary": "Exports the Supabase auth provider service provider."
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"subpath": "./server/providers/AuthProviderServiceProvider",
|
|
468
|
+
"summary": "Exports the generic auth provider registration service provider."
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
"subpath": "./server/lib/index",
|
|
472
|
+
"summary": "Exports curated server-side Supabase auth service helpers."
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"subpath": "./client",
|
|
476
|
+
"summary": "Exports no runtime API today (reserved client entrypoint)."
|
|
477
|
+
}
|
|
478
|
+
],
|
|
479
|
+
"containerTokens": {
|
|
480
|
+
"server": [
|
|
481
|
+
"authService",
|
|
482
|
+
"auth.provider.supabase.actionContributor"
|
|
483
|
+
],
|
|
484
|
+
"client": []
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
},
|
|
488
|
+
"mutations": {
|
|
489
|
+
"dependencies": {
|
|
490
|
+
"runtime": {
|
|
491
|
+
"@jskit-ai/auth-core": "0.1.4",
|
|
492
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
493
|
+
"dotenv": "^16.4.5",
|
|
494
|
+
"@supabase/supabase-js": "^2.57.4",
|
|
495
|
+
"jose": "^6.1.0"
|
|
496
|
+
},
|
|
497
|
+
"dev": {}
|
|
498
|
+
},
|
|
499
|
+
"packageJson": {
|
|
500
|
+
"scripts": {}
|
|
501
|
+
},
|
|
502
|
+
"procfile": {},
|
|
503
|
+
"files": [],
|
|
504
|
+
"text": [
|
|
505
|
+
{
|
|
506
|
+
"file": ".env",
|
|
507
|
+
"op": "upsert-env",
|
|
508
|
+
"key": "AUTH_PROVIDER",
|
|
509
|
+
"value": "supabase",
|
|
510
|
+
"reason": "Select Supabase as the auth provider.",
|
|
511
|
+
"category": "runtime-config",
|
|
512
|
+
"id": "auth-provider"
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
"file": ".env",
|
|
516
|
+
"op": "upsert-env",
|
|
517
|
+
"key": "AUTH_SUPABASE_URL",
|
|
518
|
+
"value": "${option:auth-supabase-url}",
|
|
519
|
+
"reason": "Configure Supabase project URL for auth.",
|
|
520
|
+
"category": "runtime-config",
|
|
521
|
+
"id": "auth-supabase-url"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"file": ".env",
|
|
525
|
+
"op": "upsert-env",
|
|
526
|
+
"key": "AUTH_SUPABASE_PUBLISHABLE_KEY",
|
|
527
|
+
"value": "${option:auth-supabase-publishable-key}",
|
|
528
|
+
"reason": "Configure Supabase publishable key for auth.",
|
|
529
|
+
"category": "runtime-config",
|
|
530
|
+
"id": "auth-supabase-publishable-key"
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"file": ".env",
|
|
534
|
+
"op": "upsert-env",
|
|
535
|
+
"key": "APP_PUBLIC_URL",
|
|
536
|
+
"value": "${option:app-public-url}",
|
|
537
|
+
"reason": "Configure application public URL for auth redirect flows.",
|
|
538
|
+
"category": "runtime-config",
|
|
539
|
+
"id": "auth-app-public-url"
|
|
540
|
+
}
|
|
541
|
+
]
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
"packageId": "@jskit-ai/auth-web",
|
|
547
|
+
"version": "0.1.4",
|
|
548
|
+
"descriptor": {
|
|
549
|
+
"packageVersion": 1,
|
|
550
|
+
"packageId": "@jskit-ai/auth-web",
|
|
551
|
+
"version": "0.1.4",
|
|
552
|
+
"description": "Auth web module: Fastify auth routes plus web login/sign-out scaffolds.",
|
|
553
|
+
"dependsOn": [
|
|
554
|
+
"@jskit-ai/auth-core",
|
|
555
|
+
"@jskit-ai/http-runtime",
|
|
556
|
+
"@jskit-ai/shell-web",
|
|
557
|
+
"@jskit-ai/value-app-config-shared"
|
|
558
|
+
],
|
|
559
|
+
"capabilities": {
|
|
560
|
+
"provides": [
|
|
561
|
+
"auth.server-routes",
|
|
562
|
+
"auth.web-login"
|
|
563
|
+
],
|
|
564
|
+
"requires": [
|
|
565
|
+
"auth.access",
|
|
566
|
+
"auth.provider",
|
|
567
|
+
"validators.http",
|
|
568
|
+
"auth.policy",
|
|
569
|
+
"runtime.web-placement"
|
|
570
|
+
]
|
|
571
|
+
},
|
|
572
|
+
"runtime": {
|
|
573
|
+
"server": {
|
|
574
|
+
"providerEntrypoint": "src/server/providers/AuthWebServiceProvider.js",
|
|
575
|
+
"providers": [
|
|
576
|
+
{
|
|
577
|
+
"entrypoint": "src/server/providers/AuthWebServiceProvider.js",
|
|
578
|
+
"export": "AuthWebServiceProvider"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"entrypoint": "src/server/providers/AuthRouteServiceProvider.js",
|
|
582
|
+
"export": "AuthRouteServiceProvider"
|
|
583
|
+
}
|
|
584
|
+
]
|
|
585
|
+
},
|
|
586
|
+
"client": {
|
|
587
|
+
"providers": [
|
|
588
|
+
{
|
|
589
|
+
"entrypoint": "src/client/providers/AuthWebClientProvider.js",
|
|
590
|
+
"export": "AuthWebClientProvider"
|
|
591
|
+
}
|
|
592
|
+
]
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
"metadata": {
|
|
596
|
+
"apiSummary": {
|
|
597
|
+
"surfaces": [
|
|
598
|
+
{
|
|
599
|
+
"subpath": "./client",
|
|
600
|
+
"summary": "Exports auth web client provider, default auth views, and route/provider registration surface."
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
"subpath": "./server",
|
|
604
|
+
"summary": "Exports auth web server providers, controller/service classes, route builders, and HTTP schema modules."
|
|
605
|
+
}
|
|
606
|
+
],
|
|
607
|
+
"containerTokens": {
|
|
608
|
+
"server": [
|
|
609
|
+
"auth.web.service"
|
|
610
|
+
],
|
|
611
|
+
"client": [
|
|
612
|
+
"runtime.auth-guard.client",
|
|
613
|
+
"auth.login.component",
|
|
614
|
+
"auth.login.useLoginView",
|
|
615
|
+
"auth.web.profile.widget",
|
|
616
|
+
"auth.web.profile.menu.link-item"
|
|
617
|
+
]
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
"server": {
|
|
621
|
+
"routes": [
|
|
622
|
+
{
|
|
623
|
+
"method": "POST",
|
|
624
|
+
"path": "/api/login",
|
|
625
|
+
"summary": "Log in with configured credentials"
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
"method": "POST",
|
|
629
|
+
"path": "/api/login/otp/request",
|
|
630
|
+
"summary": "Request one-time email login code"
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
"method": "POST",
|
|
634
|
+
"path": "/api/login/otp/verify",
|
|
635
|
+
"summary": "Verify one-time email login code and create session"
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
"method": "POST",
|
|
639
|
+
"path": "/api/logout",
|
|
640
|
+
"summary": "Log out and clear session cookies"
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"method": "GET",
|
|
644
|
+
"path": "/api/oauth/:provider/start",
|
|
645
|
+
"summary": "Start OAuth login with configured provider"
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
"method": "POST",
|
|
649
|
+
"path": "/api/oauth/complete",
|
|
650
|
+
"summary": "Complete OAuth code exchange and set session cookies"
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
"method": "POST",
|
|
654
|
+
"path": "/api/password/forgot",
|
|
655
|
+
"summary": "Request a password reset email"
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
"method": "POST",
|
|
659
|
+
"path": "/api/password/recovery",
|
|
660
|
+
"summary": "Complete password recovery link exchange"
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"method": "POST",
|
|
664
|
+
"path": "/api/password/reset",
|
|
665
|
+
"summary": "Set a new password for authenticated recovery session"
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"method": "POST",
|
|
669
|
+
"path": "/api/register",
|
|
670
|
+
"summary": "Register a new user"
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
"method": "GET",
|
|
674
|
+
"path": "/api/session",
|
|
675
|
+
"summary": "Get current session status and CSRF token"
|
|
676
|
+
}
|
|
677
|
+
]
|
|
678
|
+
},
|
|
679
|
+
"ui": {
|
|
680
|
+
"routes": [
|
|
681
|
+
{
|
|
682
|
+
"id": "auth.login",
|
|
683
|
+
"path": "/auth/login",
|
|
684
|
+
"scope": "surface",
|
|
685
|
+
"surface": "auth",
|
|
686
|
+
"name": "auth-login",
|
|
687
|
+
"componentKey": "auth-login",
|
|
688
|
+
"autoRegister": false,
|
|
689
|
+
"guard": {
|
|
690
|
+
"policy": "public"
|
|
691
|
+
},
|
|
692
|
+
"purpose": "Public login route for authentication flows."
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
"id": "auth.signout",
|
|
696
|
+
"path": "/auth/signout",
|
|
697
|
+
"scope": "surface",
|
|
698
|
+
"surface": "auth",
|
|
699
|
+
"name": "auth-signout",
|
|
700
|
+
"componentKey": "auth-signout",
|
|
701
|
+
"autoRegister": false,
|
|
702
|
+
"guard": {
|
|
703
|
+
"policy": "public"
|
|
704
|
+
},
|
|
705
|
+
"purpose": "Public sign-out route that clears session then returns to login."
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
"id": "auth.default-login",
|
|
709
|
+
"path": "/auth/default-login",
|
|
710
|
+
"scope": "surface",
|
|
711
|
+
"surface": "auth",
|
|
712
|
+
"name": "auth-default-login",
|
|
713
|
+
"componentKey": "auth-default-login",
|
|
714
|
+
"autoRegister": true,
|
|
715
|
+
"guard": {
|
|
716
|
+
"policy": "public"
|
|
717
|
+
},
|
|
718
|
+
"purpose": "Default module-supplied login screen."
|
|
719
|
+
}
|
|
720
|
+
],
|
|
721
|
+
"elements": [],
|
|
722
|
+
"overrides": [],
|
|
723
|
+
"placements": {
|
|
724
|
+
"outlets": [
|
|
725
|
+
{
|
|
726
|
+
"host": "auth-profile-menu",
|
|
727
|
+
"position": "primary-menu",
|
|
728
|
+
"surfaces": [
|
|
729
|
+
"*"
|
|
730
|
+
],
|
|
731
|
+
"source": "src/client/views/AuthProfileWidget.vue"
|
|
732
|
+
}
|
|
733
|
+
],
|
|
734
|
+
"contributions": [
|
|
735
|
+
{
|
|
736
|
+
"id": "auth.profile.widget",
|
|
737
|
+
"host": "shell-layout",
|
|
738
|
+
"position": "top-right",
|
|
739
|
+
"surfaces": [
|
|
740
|
+
"*"
|
|
741
|
+
],
|
|
742
|
+
"order": 1000,
|
|
743
|
+
"componentToken": "auth.web.profile.widget",
|
|
744
|
+
"source": "mutations.text#auth-web-placement-block"
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
"id": "auth.profile.menu.sign-in",
|
|
748
|
+
"host": "auth-profile-menu",
|
|
749
|
+
"position": "primary-menu",
|
|
750
|
+
"surfaces": [
|
|
751
|
+
"*"
|
|
752
|
+
],
|
|
753
|
+
"order": 200,
|
|
754
|
+
"componentToken": "auth.web.profile.menu.link-item",
|
|
755
|
+
"when": "auth.authenticated !== true",
|
|
756
|
+
"source": "mutations.text#auth-web-placement-block"
|
|
757
|
+
},
|
|
758
|
+
{
|
|
759
|
+
"id": "auth.profile.menu.sign-out",
|
|
760
|
+
"host": "auth-profile-menu",
|
|
761
|
+
"position": "primary-menu",
|
|
762
|
+
"surfaces": [
|
|
763
|
+
"*"
|
|
764
|
+
],
|
|
765
|
+
"order": 1000,
|
|
766
|
+
"componentToken": "auth.web.profile.menu.link-item",
|
|
767
|
+
"when": "auth.authenticated === true",
|
|
768
|
+
"source": "mutations.text#auth-web-placement-block"
|
|
769
|
+
}
|
|
770
|
+
]
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
"mutations": {
|
|
775
|
+
"dependencies": {
|
|
776
|
+
"runtime": {
|
|
777
|
+
"@tanstack/vue-query": "^5.90.5",
|
|
778
|
+
"@mdi/js": "^7.4.47",
|
|
779
|
+
"@fastify/type-provider-typebox": "^6.1.0",
|
|
780
|
+
"@jskit-ai/auth-core": "0.1.4",
|
|
781
|
+
"@jskit-ai/http-runtime": "0.1.4",
|
|
782
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
783
|
+
"@jskit-ai/shell-web": "0.1.4",
|
|
784
|
+
"vuetify": "^4.0.0"
|
|
785
|
+
},
|
|
786
|
+
"dev": {}
|
|
787
|
+
},
|
|
788
|
+
"packageJson": {
|
|
789
|
+
"scripts": {}
|
|
790
|
+
},
|
|
791
|
+
"procfile": {},
|
|
792
|
+
"files": [
|
|
793
|
+
{
|
|
794
|
+
"from": "templates/src/views/auth/LoginView.vue",
|
|
795
|
+
"to": "src/views/auth/LoginView.vue",
|
|
796
|
+
"reason": "Install minimal login container that renders the module-provided DefaultLoginView by default.",
|
|
797
|
+
"category": "auth-web",
|
|
798
|
+
"id": "auth-view-login"
|
|
799
|
+
},
|
|
800
|
+
{
|
|
801
|
+
"from": "templates/src/views/auth/SignOutView.vue",
|
|
802
|
+
"to": "src/views/auth/SignOutView.vue",
|
|
803
|
+
"reason": "Install minimal sign-out container that renders the module-provided SignOutView by default (edit the scaffolded file to customize).",
|
|
804
|
+
"category": "auth-web",
|
|
805
|
+
"id": "auth-view-signout"
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
"from": "templates/src/pages/auth/login.vue",
|
|
809
|
+
"to": "src/pages/auth/login.vue",
|
|
810
|
+
"reason": "Provide an auth-surface /auth/login wrapper that renders the package login view.",
|
|
811
|
+
"category": "auth-web",
|
|
812
|
+
"id": "auth-page-login"
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
"from": "templates/src/pages/auth/signout.vue",
|
|
816
|
+
"to": "src/pages/auth/signout.vue",
|
|
817
|
+
"reason": "Provide an auth-surface /auth/signout wrapper that renders the package sign-out view.",
|
|
818
|
+
"category": "auth-web",
|
|
819
|
+
"id": "auth-page-signout"
|
|
820
|
+
}
|
|
821
|
+
],
|
|
822
|
+
"text": [
|
|
823
|
+
{
|
|
824
|
+
"op": "append-text",
|
|
825
|
+
"file": "config/public.js",
|
|
826
|
+
"position": "bottom",
|
|
827
|
+
"skipIfContains": "config.surfaceDefinitions.auth = {",
|
|
828
|
+
"value": "\nconfig.surfaceDefinitions.auth = {\n id: \"auth\",\n label: \"Auth\",\n pagesRoot: \"auth\",\n enabled: true,\n requiresAuth: false,\n requiresWorkspace: false,\n origin: \"\"\n};\n",
|
|
829
|
+
"reason": "Register auth surface definition in public surface config.",
|
|
830
|
+
"category": "auth-web",
|
|
831
|
+
"id": "auth-web-surface-config-auth"
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
"op": "append-text",
|
|
835
|
+
"file": "src/placement.js",
|
|
836
|
+
"position": "bottom",
|
|
837
|
+
"skipIfContains": "id: \"auth.profile.widget\"",
|
|
838
|
+
"value": "\naddPlacement({\n id: \"auth.profile.widget\",\n host: \"shell-layout\",\n position: \"top-right\",\n surfaces: [\"*\"],\n order: 1000,\n componentToken: \"auth.web.profile.widget\"\n});\n\naddPlacement({\n id: \"auth.profile.menu.sign-in\",\n host: \"auth-profile-menu\",\n position: \"primary-menu\",\n surfaces: [\"*\"],\n order: 200,\n componentToken: \"auth.web.profile.menu.link-item\",\n props: {\n label: \"Sign in\",\n to: \"/auth/login\"\n },\n when: ({ auth }) => !Boolean(auth?.authenticated)\n});\n\naddPlacement({\n id: \"auth.profile.menu.sign-out\",\n host: \"auth-profile-menu\",\n position: \"primary-menu\",\n surfaces: [\"*\"],\n order: 1000,\n componentToken: \"auth.web.profile.menu.link-item\",\n props: {\n label: \"Sign out\",\n to: \"/auth/signout\"\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
|
|
839
|
+
"reason": "Append auth profile placement entries into app-owned placement registry.",
|
|
840
|
+
"category": "auth-web",
|
|
841
|
+
"id": "auth-web-placement-block"
|
|
842
|
+
}
|
|
843
|
+
]
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
"packageId": "@jskit-ai/crud",
|
|
849
|
+
"version": "0.1.4",
|
|
850
|
+
"descriptor": {
|
|
851
|
+
"packageVersion": 1,
|
|
852
|
+
"packageId": "@jskit-ai/crud",
|
|
853
|
+
"version": "0.1.4",
|
|
854
|
+
"installationMode": "clone-only",
|
|
855
|
+
"description": "CRUD module with server routes, actions, persistence, and client pages.",
|
|
856
|
+
"options": {
|
|
857
|
+
"namespace": {
|
|
858
|
+
"required": true,
|
|
859
|
+
"inputType": "text",
|
|
860
|
+
"defaultValue": "",
|
|
861
|
+
"promptLabel": "CRUD namespace",
|
|
862
|
+
"promptHint": "Required slug (example: customers, appointments, vendors)."
|
|
863
|
+
},
|
|
864
|
+
"surface": {
|
|
865
|
+
"required": true,
|
|
866
|
+
"inputType": "text",
|
|
867
|
+
"defaultFromConfig": "surfaceDefaultId",
|
|
868
|
+
"promptLabel": "Target surface",
|
|
869
|
+
"promptHint": "Defaults to config.public.surfaceDefaultId. Must match an enabled surface id."
|
|
870
|
+
},
|
|
871
|
+
"ownership-filter": {
|
|
872
|
+
"required": true,
|
|
873
|
+
"inputType": "text",
|
|
874
|
+
"defaultValue": "auto",
|
|
875
|
+
"promptLabel": "Ownership filter",
|
|
876
|
+
"promptHint": "auto | public | user | workspace | workspace_user"
|
|
877
|
+
},
|
|
878
|
+
"directory-prefix": {
|
|
879
|
+
"required": false,
|
|
880
|
+
"inputType": "text",
|
|
881
|
+
"defaultValue": "",
|
|
882
|
+
"promptLabel": "Page directory prefix",
|
|
883
|
+
"promptHint": "Optional subpath under the selected surface pages root (example: crm or ops/team-a)."
|
|
884
|
+
}
|
|
885
|
+
},
|
|
886
|
+
"optionPolicies": {
|
|
887
|
+
"surfaceVisibility": {
|
|
888
|
+
"visibilityOption": "ownership-filter"
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
"dependsOn": [
|
|
892
|
+
"@jskit-ai/auth-core",
|
|
893
|
+
"@jskit-ai/crud-core",
|
|
894
|
+
"@jskit-ai/database-runtime",
|
|
895
|
+
"@jskit-ai/http-runtime",
|
|
896
|
+
"@jskit-ai/realtime",
|
|
897
|
+
"@jskit-ai/shell-web",
|
|
898
|
+
"@jskit-ai/users-core",
|
|
899
|
+
"@jskit-ai/users-web"
|
|
900
|
+
],
|
|
901
|
+
"capabilities": {
|
|
902
|
+
"provides": [
|
|
903
|
+
"crud"
|
|
904
|
+
],
|
|
905
|
+
"requires": [
|
|
906
|
+
"runtime.actions",
|
|
907
|
+
"runtime.database",
|
|
908
|
+
"auth.policy",
|
|
909
|
+
"users.core",
|
|
910
|
+
"users.web",
|
|
911
|
+
"runtime.web-placement",
|
|
912
|
+
"runtime.realtime.client"
|
|
913
|
+
]
|
|
914
|
+
},
|
|
915
|
+
"runtime": {
|
|
916
|
+
"server": {
|
|
917
|
+
"providers": [
|
|
918
|
+
{
|
|
919
|
+
"entrypoint": "src/server/CrudServiceProvider.js",
|
|
920
|
+
"export": "CrudServiceProvider"
|
|
921
|
+
}
|
|
922
|
+
]
|
|
923
|
+
},
|
|
924
|
+
"client": {
|
|
925
|
+
"providers": []
|
|
926
|
+
}
|
|
927
|
+
},
|
|
928
|
+
"metadata": {
|
|
929
|
+
"apiSummary": {
|
|
930
|
+
"surfaces": [
|
|
931
|
+
{
|
|
932
|
+
"subpath": "./server",
|
|
933
|
+
"summary": "Scaffold package runtime provider (no-op) plus reference CRUD server modules."
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
"subpath": "./shared",
|
|
937
|
+
"summary": "Exports shared CRUD resource and module config helpers."
|
|
938
|
+
}
|
|
939
|
+
],
|
|
940
|
+
"containerTokens": {
|
|
941
|
+
"server": [
|
|
942
|
+
"crud.<namespace>.repository",
|
|
943
|
+
"crud.<namespace>.service"
|
|
944
|
+
],
|
|
945
|
+
"client": []
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
},
|
|
949
|
+
"mutations": {
|
|
950
|
+
"dependencies": {
|
|
951
|
+
"runtime": {
|
|
952
|
+
"@jskit-ai/auth-core": "0.1.4",
|
|
953
|
+
"@jskit-ai/crud-core": "0.1.4",
|
|
954
|
+
"@jskit-ai/database-runtime": "0.1.4",
|
|
955
|
+
"@jskit-ai/http-runtime": "0.1.4",
|
|
956
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
957
|
+
"@jskit-ai/realtime": "0.1.4",
|
|
958
|
+
"@jskit-ai/shell-web": "0.1.4",
|
|
959
|
+
"@jskit-ai/users-core": "0.1.4",
|
|
960
|
+
"@jskit-ai/users-web": "0.1.4",
|
|
961
|
+
"@local/${option:namespace|kebab}": "file:packages/${option:namespace|kebab}",
|
|
962
|
+
"@tanstack/vue-query": "^5.90.5",
|
|
963
|
+
"typebox": "^1.0.81",
|
|
964
|
+
"vuetify": "^4.0.0"
|
|
965
|
+
},
|
|
966
|
+
"dev": {}
|
|
967
|
+
},
|
|
968
|
+
"packageJson": {
|
|
969
|
+
"scripts": {}
|
|
970
|
+
},
|
|
971
|
+
"procfile": {},
|
|
972
|
+
"files": [
|
|
973
|
+
{
|
|
974
|
+
"op": "install-migration",
|
|
975
|
+
"from": "templates/migrations/crud_initial.cjs",
|
|
976
|
+
"toDir": "migrations",
|
|
977
|
+
"slug": "crud_initial_${option:namespace|snake}",
|
|
978
|
+
"extension": ".cjs",
|
|
979
|
+
"reason": "Install CRUD schema migration.",
|
|
980
|
+
"category": "crud",
|
|
981
|
+
"id": "crud-initial-schema-${option:namespace|snake}"
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
"from": "templates/src/local-package/package.json",
|
|
985
|
+
"to": "packages/${option:namespace|kebab}/package.json",
|
|
986
|
+
"reason": "Install app-local CRUD package manifest.",
|
|
987
|
+
"category": "crud",
|
|
988
|
+
"id": "crud-local-package-json-${option:namespace|snake}"
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
"from": "templates/src/local-package/package.descriptor.mjs",
|
|
992
|
+
"to": "packages/${option:namespace|kebab}/package.descriptor.mjs",
|
|
993
|
+
"reason": "Install app-local CRUD package descriptor.",
|
|
994
|
+
"category": "crud",
|
|
995
|
+
"id": "crud-local-package-descriptor-${option:namespace|snake}"
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
"from": "templates/src/local-package/client/index.js",
|
|
999
|
+
"to": "packages/${option:namespace|kebab}/src/client/index.js",
|
|
1000
|
+
"reason": "Install app-local CRUD client package exports.",
|
|
1001
|
+
"category": "crud",
|
|
1002
|
+
"id": "crud-local-package-client-index-${option:namespace|snake}"
|
|
1003
|
+
},
|
|
1004
|
+
{
|
|
1005
|
+
"from": "templates/src/local-package/server/diTokens.js",
|
|
1006
|
+
"to": "packages/${option:namespace|kebab}/src/server/diTokens.js",
|
|
1007
|
+
"reason": "Install app-local CRUD server DI token constants.",
|
|
1008
|
+
"category": "crud",
|
|
1009
|
+
"id": "crud-local-package-server-di-tokens-${option:namespace|snake}"
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
"from": "templates/src/local-package/server/CrudServiceProvider.js",
|
|
1013
|
+
"to": "packages/${option:namespace|kebab}/src/server/${option:namespace|pascal}ServiceProvider.js",
|
|
1014
|
+
"reason": "Install app-local CRUD server provider.",
|
|
1015
|
+
"category": "crud",
|
|
1016
|
+
"id": "crud-local-package-server-provider-${option:namespace|snake}"
|
|
1017
|
+
},
|
|
1018
|
+
{
|
|
1019
|
+
"from": "templates/src/local-package/server/actions.js",
|
|
1020
|
+
"to": "packages/${option:namespace|kebab}/src/server/actions.js",
|
|
1021
|
+
"reason": "Install app-local CRUD action definitions.",
|
|
1022
|
+
"category": "crud",
|
|
1023
|
+
"id": "crud-local-package-server-actions-${option:namespace|snake}"
|
|
1024
|
+
},
|
|
1025
|
+
{
|
|
1026
|
+
"from": "templates/src/local-package/server/actionIds.js",
|
|
1027
|
+
"to": "packages/${option:namespace|kebab}/src/server/actionIds.js",
|
|
1028
|
+
"reason": "Install app-local CRUD action IDs.",
|
|
1029
|
+
"category": "crud",
|
|
1030
|
+
"id": "crud-local-package-server-action-ids-${option:namespace|snake}"
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
"from": "templates/src/local-package/server/registerRoutes.js",
|
|
1034
|
+
"to": "packages/${option:namespace|kebab}/src/server/registerRoutes.js",
|
|
1035
|
+
"reason": "Install app-local CRUD route registration.",
|
|
1036
|
+
"category": "crud",
|
|
1037
|
+
"id": "crud-local-package-server-routes-${option:namespace|snake}"
|
|
1038
|
+
},
|
|
1039
|
+
{
|
|
1040
|
+
"from": "src/server/repository.js",
|
|
1041
|
+
"to": "packages/${option:namespace|kebab}/src/server/repository.js",
|
|
1042
|
+
"reason": "Install app-local CRUD repository.",
|
|
1043
|
+
"category": "crud",
|
|
1044
|
+
"id": "crud-local-package-server-repository-${option:namespace|snake}"
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"from": "templates/src/local-package/server/service.js",
|
|
1048
|
+
"to": "packages/${option:namespace|kebab}/src/server/service.js",
|
|
1049
|
+
"reason": "Install app-local CRUD service.",
|
|
1050
|
+
"category": "crud",
|
|
1051
|
+
"id": "crud-local-package-server-service-${option:namespace|snake}"
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
"from": "templates/src/local-package/shared/index.js",
|
|
1055
|
+
"to": "packages/${option:namespace|kebab}/src/shared/index.js",
|
|
1056
|
+
"reason": "Install app-local CRUD shared exports.",
|
|
1057
|
+
"category": "crud",
|
|
1058
|
+
"id": "crud-local-package-shared-index-${option:namespace|snake}"
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
"from": "templates/src/local-package/shared/moduleConfig.js",
|
|
1062
|
+
"to": "packages/${option:namespace|kebab}/src/shared/moduleConfig.js",
|
|
1063
|
+
"reason": "Install app-local CRUD shared module config.",
|
|
1064
|
+
"category": "crud",
|
|
1065
|
+
"id": "crud-local-package-shared-module-config-${option:namespace|snake}"
|
|
1066
|
+
},
|
|
1067
|
+
{
|
|
1068
|
+
"from": "src/shared/crud/crudResource.js",
|
|
1069
|
+
"to": "packages/${option:namespace|kebab}/src/shared/${option:namespace|singular|camel}Resource.js",
|
|
1070
|
+
"reason": "Install app-local CRUD resource.",
|
|
1071
|
+
"category": "crud",
|
|
1072
|
+
"id": "crud-local-package-shared-resource-${option:namespace|snake}"
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
"from": "templates/src/elements/clientSupport.js",
|
|
1076
|
+
"to": "packages/${option:namespace|kebab}/src/client/clientSupport.js",
|
|
1077
|
+
"reason": "Install app-local CRUD client support helpers.",
|
|
1078
|
+
"category": "crud",
|
|
1079
|
+
"id": "crud-local-package-client-support-${option:namespace|snake}"
|
|
1080
|
+
},
|
|
1081
|
+
{
|
|
1082
|
+
"from": "templates/src/elements/ListElement.vue",
|
|
1083
|
+
"to": "packages/${option:namespace|kebab}/src/client/List${option:namespace|plural|pascal}Element.vue",
|
|
1084
|
+
"reason": "Install app-local CRUD list element.",
|
|
1085
|
+
"category": "crud",
|
|
1086
|
+
"id": "crud-local-package-client-list-${option:namespace|snake}"
|
|
1087
|
+
},
|
|
1088
|
+
{
|
|
1089
|
+
"from": "templates/src/elements/ViewElement.vue",
|
|
1090
|
+
"to": "packages/${option:namespace|kebab}/src/client/View${option:namespace|singular|pascal}Element.vue",
|
|
1091
|
+
"reason": "Install app-local CRUD view element.",
|
|
1092
|
+
"category": "crud",
|
|
1093
|
+
"id": "crud-local-package-client-view-${option:namespace|snake}"
|
|
1094
|
+
},
|
|
1095
|
+
{
|
|
1096
|
+
"from": "templates/src/elements/CreateElement.vue",
|
|
1097
|
+
"to": "packages/${option:namespace|kebab}/src/client/Create${option:namespace|singular|pascal}Element.vue",
|
|
1098
|
+
"reason": "Install app-local CRUD create element.",
|
|
1099
|
+
"category": "crud",
|
|
1100
|
+
"id": "crud-local-package-client-create-${option:namespace|snake}"
|
|
1101
|
+
},
|
|
1102
|
+
{
|
|
1103
|
+
"from": "templates/src/elements/EditElement.vue",
|
|
1104
|
+
"to": "packages/${option:namespace|kebab}/src/client/Edit${option:namespace|singular|pascal}Element.vue",
|
|
1105
|
+
"reason": "Install app-local CRUD edit element.",
|
|
1106
|
+
"category": "crud",
|
|
1107
|
+
"id": "crud-local-package-client-edit-${option:namespace|snake}"
|
|
1108
|
+
},
|
|
1109
|
+
{
|
|
1110
|
+
"from": "templates/src/pages/admin/crud/index.vue",
|
|
1111
|
+
"toSurface": "${option:surface|lower}",
|
|
1112
|
+
"toSurfacePath": "${option:directory-prefix|pathprefix}${option:namespace|kebab}/index.vue",
|
|
1113
|
+
"reason": "Install CRUD list page scaffold.",
|
|
1114
|
+
"category": "crud",
|
|
1115
|
+
"id": "crud-page-surface-crud-index",
|
|
1116
|
+
"when": {
|
|
1117
|
+
"config": "tenancyMode",
|
|
1118
|
+
"in": [
|
|
1119
|
+
"personal",
|
|
1120
|
+
"workspace"
|
|
1121
|
+
]
|
|
1122
|
+
}
|
|
1123
|
+
},
|
|
1124
|
+
{
|
|
1125
|
+
"from": "templates/src/pages/admin/crud/new.vue",
|
|
1126
|
+
"toSurface": "${option:surface|lower}",
|
|
1127
|
+
"toSurfacePath": "${option:directory-prefix|pathprefix}${option:namespace|kebab}/new.vue",
|
|
1128
|
+
"reason": "Install CRUD create page scaffold.",
|
|
1129
|
+
"category": "crud",
|
|
1130
|
+
"id": "crud-page-surface-crud-new",
|
|
1131
|
+
"when": {
|
|
1132
|
+
"config": "tenancyMode",
|
|
1133
|
+
"in": [
|
|
1134
|
+
"personal",
|
|
1135
|
+
"workspace"
|
|
1136
|
+
]
|
|
1137
|
+
}
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
"from": "templates/src/pages/admin/crud/[recordId]/index.vue",
|
|
1141
|
+
"toSurface": "${option:surface|lower}",
|
|
1142
|
+
"toSurfacePath": "${option:directory-prefix|pathprefix}${option:namespace|kebab}/[recordId]/index.vue",
|
|
1143
|
+
"reason": "Install CRUD detail page scaffold.",
|
|
1144
|
+
"category": "crud",
|
|
1145
|
+
"id": "crud-page-surface-crud-view",
|
|
1146
|
+
"when": {
|
|
1147
|
+
"config": "tenancyMode",
|
|
1148
|
+
"in": [
|
|
1149
|
+
"personal",
|
|
1150
|
+
"workspace"
|
|
1151
|
+
]
|
|
1152
|
+
}
|
|
1153
|
+
},
|
|
1154
|
+
{
|
|
1155
|
+
"from": "templates/src/pages/admin/crud/[recordId]/edit.vue",
|
|
1156
|
+
"toSurface": "${option:surface|lower}",
|
|
1157
|
+
"toSurfacePath": "${option:directory-prefix|pathprefix}${option:namespace|kebab}/[recordId]/edit.vue",
|
|
1158
|
+
"reason": "Install CRUD edit page scaffold.",
|
|
1159
|
+
"category": "crud",
|
|
1160
|
+
"id": "crud-page-surface-crud-edit",
|
|
1161
|
+
"when": {
|
|
1162
|
+
"config": "tenancyMode",
|
|
1163
|
+
"in": [
|
|
1164
|
+
"personal",
|
|
1165
|
+
"workspace"
|
|
1166
|
+
]
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
],
|
|
1170
|
+
"text": [
|
|
1171
|
+
{
|
|
1172
|
+
"op": "append-text",
|
|
1173
|
+
"file": "src/placement.js",
|
|
1174
|
+
"position": "bottom",
|
|
1175
|
+
"skipIfContains": "jskit:crud.menu:${option:namespace|kebab}:${option:directory-prefix|path}",
|
|
1176
|
+
"value": "\n// jskit:crud.menu:${option:namespace|kebab}:${option:directory-prefix|path}\nimport { crudModuleConfig as crud${option:namespace|pascal}ModuleConfig } from \"@local/${option:namespace|kebab}/shared\";\n{\n const crudNamespace = \"${option:namespace|kebab}\";\n\n addPlacement({\n id: \"crud.\" + crudNamespace + \".menu\",\n host: \"shell-layout\",\n position: \"primary-menu\",\n surfaces: [\"${option:surface|lower}\"],\n order: 150,\n componentToken: \"users.web.shell.surface-aware-menu-link-item\",\n props: {\n label: \"${option:namespace|plural|pascal}\",\n surface: \"${option:surface|lower}\",\n workspaceSuffix: crud${option:namespace|pascal}ModuleConfig.relativePath,\n nonWorkspaceSuffix: crud${option:namespace|pascal}ModuleConfig.relativePath\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n });\n}\n",
|
|
1177
|
+
"reason": "Append CRUD menu placement into app-owned placement registry.",
|
|
1178
|
+
"category": "crud",
|
|
1179
|
+
"id": "crud-placement-menu",
|
|
1180
|
+
"when": {
|
|
1181
|
+
"config": "tenancyMode",
|
|
1182
|
+
"in": [
|
|
1183
|
+
"personal",
|
|
1184
|
+
"workspace"
|
|
1185
|
+
]
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
]
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
"packageId": "@jskit-ai/crud-core",
|
|
1194
|
+
"version": "0.1.4",
|
|
1195
|
+
"descriptor": {
|
|
1196
|
+
"packageVersion": 1,
|
|
1197
|
+
"packageId": "@jskit-ai/crud-core",
|
|
1198
|
+
"version": "0.1.4",
|
|
1199
|
+
"description": "Shared CRUD helpers used by CRUD modules.",
|
|
1200
|
+
"dependsOn": [
|
|
1201
|
+
"@jskit-ai/kernel",
|
|
1202
|
+
"@jskit-ai/realtime",
|
|
1203
|
+
"@jskit-ai/shell-web",
|
|
1204
|
+
"@jskit-ai/users-web"
|
|
1205
|
+
],
|
|
1206
|
+
"capabilities": {
|
|
1207
|
+
"provides": [
|
|
1208
|
+
"crud.core"
|
|
1209
|
+
],
|
|
1210
|
+
"requires": []
|
|
1211
|
+
},
|
|
1212
|
+
"runtime": {
|
|
1213
|
+
"server": {
|
|
1214
|
+
"providers": []
|
|
1215
|
+
},
|
|
1216
|
+
"client": {
|
|
1217
|
+
"providers": []
|
|
1218
|
+
}
|
|
1219
|
+
},
|
|
1220
|
+
"mutations": {
|
|
1221
|
+
"dependencies": {
|
|
1222
|
+
"runtime": {
|
|
1223
|
+
"@jskit-ai/crud-core": "0.1.4"
|
|
1224
|
+
},
|
|
1225
|
+
"dev": {}
|
|
1226
|
+
},
|
|
1227
|
+
"packageJson": {
|
|
1228
|
+
"scripts": {}
|
|
1229
|
+
},
|
|
1230
|
+
"procfile": {},
|
|
1231
|
+
"files": []
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
},
|
|
1235
|
+
{
|
|
1236
|
+
"packageId": "@jskit-ai/database-runtime",
|
|
1237
|
+
"version": "0.1.4",
|
|
1238
|
+
"descriptor": {
|
|
1239
|
+
"packageVersion": 1,
|
|
1240
|
+
"packageId": "@jskit-ai/database-runtime",
|
|
1241
|
+
"version": "0.1.4",
|
|
1242
|
+
"dependsOn": [
|
|
1243
|
+
"@jskit-ai/kernel"
|
|
1244
|
+
],
|
|
1245
|
+
"capabilities": {
|
|
1246
|
+
"provides": [
|
|
1247
|
+
"runtime.database"
|
|
1248
|
+
],
|
|
1249
|
+
"requires": [
|
|
1250
|
+
"runtime.database.driver"
|
|
1251
|
+
]
|
|
1252
|
+
},
|
|
1253
|
+
"runtime": {
|
|
1254
|
+
"server": {
|
|
1255
|
+
"providerEntrypoint": "src/server/providers/DatabaseRuntimeServiceProvider.js",
|
|
1256
|
+
"providers": [
|
|
1257
|
+
{
|
|
1258
|
+
"entrypoint": "src/server/providers/DatabaseRuntimeServiceProvider.js",
|
|
1259
|
+
"export": "DatabaseRuntimeServiceProvider"
|
|
1260
|
+
}
|
|
1261
|
+
]
|
|
1262
|
+
},
|
|
1263
|
+
"client": {
|
|
1264
|
+
"providers": []
|
|
1265
|
+
}
|
|
1266
|
+
},
|
|
1267
|
+
"metadata": {
|
|
1268
|
+
"apiSummary": {
|
|
1269
|
+
"surfaces": [
|
|
1270
|
+
{
|
|
1271
|
+
"subpath": "./server",
|
|
1272
|
+
"summary": "Exports DatabaseRuntimeServiceProvider plus registerDatabaseRuntime for server container wiring."
|
|
1273
|
+
},
|
|
1274
|
+
{
|
|
1275
|
+
"subpath": "./shared",
|
|
1276
|
+
"summary": "Exports shared Knex runtime utilities (transaction manager, repository helpers, retention/json/date/dialect helpers)."
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
"subpath": "./client",
|
|
1280
|
+
"summary": "Exports no runtime API today (reserved client entrypoint)."
|
|
1281
|
+
}
|
|
1282
|
+
],
|
|
1283
|
+
"containerTokens": {
|
|
1284
|
+
"server": [
|
|
1285
|
+
"runtime.database",
|
|
1286
|
+
"runtime.database.driver"
|
|
1287
|
+
],
|
|
1288
|
+
"client": []
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
},
|
|
1292
|
+
"mutations": {
|
|
1293
|
+
"dependencies": {
|
|
1294
|
+
"runtime": {
|
|
1295
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
1296
|
+
"dotenv": "^16.4.5",
|
|
1297
|
+
"knex": "^3.1.0"
|
|
1298
|
+
},
|
|
1299
|
+
"dev": {}
|
|
1300
|
+
},
|
|
1301
|
+
"packageJson": {
|
|
1302
|
+
"scripts": {
|
|
1303
|
+
"db:migrate": "knex --knexfile ./knexfile.js migrate:latest",
|
|
1304
|
+
"db:migrate:rollback": "knex --knexfile ./knexfile.js migrate:rollback",
|
|
1305
|
+
"db:migrate:status": "knex --knexfile ./knexfile.js migrate:list"
|
|
1306
|
+
}
|
|
1307
|
+
},
|
|
1308
|
+
"procfile": {},
|
|
1309
|
+
"files": [
|
|
1310
|
+
{
|
|
1311
|
+
"from": "templates/knexfile.js",
|
|
1312
|
+
"to": "knexfile.js",
|
|
1313
|
+
"reason": "Install root Knex configuration so app scripts can run migrations through Knex CLI.",
|
|
1314
|
+
"category": "database-runtime",
|
|
1315
|
+
"id": "database-runtime-knexfile"
|
|
1316
|
+
},
|
|
1317
|
+
{
|
|
1318
|
+
"from": "templates/migrations/.gitkeep",
|
|
1319
|
+
"to": "migrations/.gitkeep",
|
|
1320
|
+
"reason": "Ensure migrations directory exists so Knex migration commands can run before any module installs migrations.",
|
|
1321
|
+
"category": "database-runtime",
|
|
1322
|
+
"id": "database-runtime-migrations-dir"
|
|
1323
|
+
}
|
|
1324
|
+
]
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
},
|
|
1328
|
+
{
|
|
1329
|
+
"packageId": "@jskit-ai/database-runtime-mysql",
|
|
1330
|
+
"version": "0.1.4",
|
|
1331
|
+
"descriptor": {
|
|
1332
|
+
"packageVersion": 1,
|
|
1333
|
+
"packageId": "@jskit-ai/database-runtime-mysql",
|
|
1334
|
+
"version": "0.1.4",
|
|
1335
|
+
"options": {
|
|
1336
|
+
"db-host": {
|
|
1337
|
+
"required": false,
|
|
1338
|
+
"values": [],
|
|
1339
|
+
"defaultValue": "localhost",
|
|
1340
|
+
"promptLabel": "Database host",
|
|
1341
|
+
"promptHint": "MySQL host (for example 127.0.0.1)"
|
|
1342
|
+
},
|
|
1343
|
+
"db-port": {
|
|
1344
|
+
"required": false,
|
|
1345
|
+
"values": [],
|
|
1346
|
+
"defaultValue": "3306",
|
|
1347
|
+
"promptLabel": "Database port",
|
|
1348
|
+
"promptHint": "MySQL port (usually 3306)"
|
|
1349
|
+
},
|
|
1350
|
+
"db-name": {
|
|
1351
|
+
"required": true,
|
|
1352
|
+
"values": [],
|
|
1353
|
+
"promptLabel": "Database name",
|
|
1354
|
+
"promptHint": "Schema/database name to connect to"
|
|
1355
|
+
},
|
|
1356
|
+
"db-user": {
|
|
1357
|
+
"required": true,
|
|
1358
|
+
"values": [],
|
|
1359
|
+
"promptLabel": "Database user",
|
|
1360
|
+
"promptHint": "Database username"
|
|
1361
|
+
},
|
|
1362
|
+
"db-password": {
|
|
1363
|
+
"required": true,
|
|
1364
|
+
"values": [],
|
|
1365
|
+
"inputType": "password",
|
|
1366
|
+
"promptLabel": "Database password",
|
|
1367
|
+
"promptHint": "Database password"
|
|
1368
|
+
}
|
|
1369
|
+
},
|
|
1370
|
+
"dependsOn": [
|
|
1371
|
+
"@jskit-ai/database-runtime"
|
|
1372
|
+
],
|
|
1373
|
+
"capabilities": {
|
|
1374
|
+
"provides": [
|
|
1375
|
+
"runtime.database.driver",
|
|
1376
|
+
"runtime.database.driver.mysql"
|
|
1377
|
+
],
|
|
1378
|
+
"requires": [
|
|
1379
|
+
"runtime.database"
|
|
1380
|
+
]
|
|
1381
|
+
},
|
|
1382
|
+
"runtime": {
|
|
1383
|
+
"server": {
|
|
1384
|
+
"providerEntrypoint": "src/server/providers/DatabaseRuntimeMysqlServiceProvider.js",
|
|
1385
|
+
"providers": [
|
|
1386
|
+
{
|
|
1387
|
+
"entrypoint": "src/server/providers/DatabaseRuntimeMysqlServiceProvider.js",
|
|
1388
|
+
"export": "DatabaseRuntimeMysqlServiceProvider"
|
|
1389
|
+
}
|
|
1390
|
+
]
|
|
1391
|
+
},
|
|
1392
|
+
"client": {
|
|
1393
|
+
"providers": []
|
|
1394
|
+
}
|
|
1395
|
+
},
|
|
1396
|
+
"metadata": {
|
|
1397
|
+
"apiSummary": {
|
|
1398
|
+
"surfaces": [
|
|
1399
|
+
{
|
|
1400
|
+
"subpath": "./server",
|
|
1401
|
+
"summary": "Exports MySQL database runtime provider."
|
|
1402
|
+
},
|
|
1403
|
+
{
|
|
1404
|
+
"subpath": "./shared",
|
|
1405
|
+
"summary": "Exports MySQL dialect metadata helpers."
|
|
1406
|
+
},
|
|
1407
|
+
{
|
|
1408
|
+
"subpath": "./client",
|
|
1409
|
+
"summary": "Exports no runtime API today (reserved client entrypoint)."
|
|
1410
|
+
}
|
|
1411
|
+
],
|
|
1412
|
+
"containerTokens": {
|
|
1413
|
+
"server": [
|
|
1414
|
+
"runtime.database.driver.mysql"
|
|
1415
|
+
],
|
|
1416
|
+
"client": []
|
|
1417
|
+
}
|
|
1418
|
+
}
|
|
1419
|
+
},
|
|
1420
|
+
"mutations": {
|
|
1421
|
+
"dependencies": {
|
|
1422
|
+
"runtime": {
|
|
1423
|
+
"@jskit-ai/database-runtime": "0.1.4",
|
|
1424
|
+
"mysql2": "^3.11.2"
|
|
1425
|
+
},
|
|
1426
|
+
"dev": {}
|
|
1427
|
+
},
|
|
1428
|
+
"packageJson": {
|
|
1429
|
+
"scripts": {}
|
|
1430
|
+
},
|
|
1431
|
+
"procfile": {},
|
|
1432
|
+
"files": [],
|
|
1433
|
+
"text": [
|
|
1434
|
+
{
|
|
1435
|
+
"file": ".env",
|
|
1436
|
+
"op": "upsert-env",
|
|
1437
|
+
"key": "DB_CLIENT",
|
|
1438
|
+
"value": "mysql2",
|
|
1439
|
+
"reason": "Configure database client driver for runtime wiring.",
|
|
1440
|
+
"category": "runtime-config",
|
|
1441
|
+
"id": "database-client-mysql"
|
|
1442
|
+
},
|
|
1443
|
+
{
|
|
1444
|
+
"file": ".env",
|
|
1445
|
+
"op": "upsert-env",
|
|
1446
|
+
"key": "DB_HOST",
|
|
1447
|
+
"value": "${option:db-host}",
|
|
1448
|
+
"reason": "Configure database host.",
|
|
1449
|
+
"category": "runtime-config",
|
|
1450
|
+
"id": "database-host"
|
|
1451
|
+
},
|
|
1452
|
+
{
|
|
1453
|
+
"file": ".env",
|
|
1454
|
+
"op": "upsert-env",
|
|
1455
|
+
"key": "DB_PORT",
|
|
1456
|
+
"value": "${option:db-port}",
|
|
1457
|
+
"reason": "Configure database port.",
|
|
1458
|
+
"category": "runtime-config",
|
|
1459
|
+
"id": "database-port"
|
|
1460
|
+
},
|
|
1461
|
+
{
|
|
1462
|
+
"file": ".env",
|
|
1463
|
+
"op": "upsert-env",
|
|
1464
|
+
"key": "DB_NAME",
|
|
1465
|
+
"value": "${option:db-name}",
|
|
1466
|
+
"reason": "Configure database name.",
|
|
1467
|
+
"category": "runtime-config",
|
|
1468
|
+
"id": "database-name"
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
"file": ".env",
|
|
1472
|
+
"op": "upsert-env",
|
|
1473
|
+
"key": "DB_USER",
|
|
1474
|
+
"value": "${option:db-user}",
|
|
1475
|
+
"reason": "Configure database user.",
|
|
1476
|
+
"category": "runtime-config",
|
|
1477
|
+
"id": "database-user"
|
|
1478
|
+
},
|
|
1479
|
+
{
|
|
1480
|
+
"file": ".env",
|
|
1481
|
+
"op": "upsert-env",
|
|
1482
|
+
"key": "DB_PASSWORD",
|
|
1483
|
+
"value": "${option:db-password}",
|
|
1484
|
+
"reason": "Configure database password.",
|
|
1485
|
+
"category": "runtime-config",
|
|
1486
|
+
"id": "database-password"
|
|
1487
|
+
}
|
|
1488
|
+
]
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
"packageId": "@jskit-ai/database-runtime-postgres",
|
|
1494
|
+
"version": "0.1.4",
|
|
1495
|
+
"descriptor": {
|
|
1496
|
+
"packageVersion": 1,
|
|
1497
|
+
"packageId": "@jskit-ai/database-runtime-postgres",
|
|
1498
|
+
"version": "0.1.4",
|
|
1499
|
+
"options": {
|
|
1500
|
+
"db-host": {
|
|
1501
|
+
"required": false,
|
|
1502
|
+
"values": [],
|
|
1503
|
+
"defaultValue": "localhost",
|
|
1504
|
+
"promptLabel": "Database host",
|
|
1505
|
+
"promptHint": "Postgres host (for example 127.0.0.1)"
|
|
1506
|
+
},
|
|
1507
|
+
"db-port": {
|
|
1508
|
+
"required": false,
|
|
1509
|
+
"values": [],
|
|
1510
|
+
"defaultValue": "5432",
|
|
1511
|
+
"promptLabel": "Database port",
|
|
1512
|
+
"promptHint": "Postgres port (usually 5432)"
|
|
1513
|
+
},
|
|
1514
|
+
"db-name": {
|
|
1515
|
+
"required": true,
|
|
1516
|
+
"values": [],
|
|
1517
|
+
"promptLabel": "Database name",
|
|
1518
|
+
"promptHint": "Database name to connect to"
|
|
1519
|
+
},
|
|
1520
|
+
"db-user": {
|
|
1521
|
+
"required": true,
|
|
1522
|
+
"values": [],
|
|
1523
|
+
"promptLabel": "Database user",
|
|
1524
|
+
"promptHint": "Database username"
|
|
1525
|
+
},
|
|
1526
|
+
"db-password": {
|
|
1527
|
+
"required": true,
|
|
1528
|
+
"values": [],
|
|
1529
|
+
"inputType": "password",
|
|
1530
|
+
"promptLabel": "Database password",
|
|
1531
|
+
"promptHint": "Database password"
|
|
1532
|
+
}
|
|
1533
|
+
},
|
|
1534
|
+
"dependsOn": [
|
|
1535
|
+
"@jskit-ai/database-runtime"
|
|
1536
|
+
],
|
|
1537
|
+
"capabilities": {
|
|
1538
|
+
"provides": [
|
|
1539
|
+
"runtime.database.driver",
|
|
1540
|
+
"runtime.database.driver.postgres"
|
|
1541
|
+
],
|
|
1542
|
+
"requires": [
|
|
1543
|
+
"runtime.database"
|
|
1544
|
+
]
|
|
1545
|
+
},
|
|
1546
|
+
"runtime": {
|
|
1547
|
+
"server": {
|
|
1548
|
+
"providerEntrypoint": "src/server/providers/DatabaseRuntimePostgresServiceProvider.js",
|
|
1549
|
+
"providers": [
|
|
1550
|
+
{
|
|
1551
|
+
"entrypoint": "src/server/providers/DatabaseRuntimePostgresServiceProvider.js",
|
|
1552
|
+
"export": "DatabaseRuntimePostgresServiceProvider"
|
|
1553
|
+
}
|
|
1554
|
+
]
|
|
1555
|
+
},
|
|
1556
|
+
"client": {
|
|
1557
|
+
"providers": []
|
|
1558
|
+
}
|
|
1559
|
+
},
|
|
1560
|
+
"metadata": {
|
|
1561
|
+
"apiSummary": {
|
|
1562
|
+
"surfaces": [
|
|
1563
|
+
{
|
|
1564
|
+
"subpath": "./server",
|
|
1565
|
+
"summary": "Exports Postgres database runtime provider."
|
|
1566
|
+
},
|
|
1567
|
+
{
|
|
1568
|
+
"subpath": "./shared",
|
|
1569
|
+
"summary": "Exports Postgres dialect metadata helpers."
|
|
1570
|
+
},
|
|
1571
|
+
{
|
|
1572
|
+
"subpath": "./client",
|
|
1573
|
+
"summary": "Exports no runtime API today (reserved client entrypoint)."
|
|
1574
|
+
}
|
|
1575
|
+
],
|
|
1576
|
+
"containerTokens": {
|
|
1577
|
+
"server": [
|
|
1578
|
+
"runtime.database.driver.postgres"
|
|
1579
|
+
],
|
|
1580
|
+
"client": []
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
},
|
|
1584
|
+
"mutations": {
|
|
1585
|
+
"dependencies": {
|
|
1586
|
+
"runtime": {
|
|
1587
|
+
"@jskit-ai/database-runtime": "0.1.4",
|
|
1588
|
+
"pg": "^8.13.1"
|
|
1589
|
+
},
|
|
1590
|
+
"dev": {}
|
|
1591
|
+
},
|
|
1592
|
+
"packageJson": {
|
|
1593
|
+
"scripts": {}
|
|
1594
|
+
},
|
|
1595
|
+
"procfile": {},
|
|
1596
|
+
"files": [],
|
|
1597
|
+
"text": [
|
|
1598
|
+
{
|
|
1599
|
+
"file": ".env",
|
|
1600
|
+
"op": "upsert-env",
|
|
1601
|
+
"key": "DB_CLIENT",
|
|
1602
|
+
"value": "pg",
|
|
1603
|
+
"reason": "Configure database client driver for runtime wiring.",
|
|
1604
|
+
"category": "runtime-config",
|
|
1605
|
+
"id": "database-client-postgres"
|
|
1606
|
+
},
|
|
1607
|
+
{
|
|
1608
|
+
"file": ".env",
|
|
1609
|
+
"op": "upsert-env",
|
|
1610
|
+
"key": "DB_HOST",
|
|
1611
|
+
"value": "${option:db-host}",
|
|
1612
|
+
"reason": "Configure database host.",
|
|
1613
|
+
"category": "runtime-config",
|
|
1614
|
+
"id": "database-host"
|
|
1615
|
+
},
|
|
1616
|
+
{
|
|
1617
|
+
"file": ".env",
|
|
1618
|
+
"op": "upsert-env",
|
|
1619
|
+
"key": "DB_PORT",
|
|
1620
|
+
"value": "${option:db-port}",
|
|
1621
|
+
"reason": "Configure database port.",
|
|
1622
|
+
"category": "runtime-config",
|
|
1623
|
+
"id": "database-port"
|
|
1624
|
+
},
|
|
1625
|
+
{
|
|
1626
|
+
"file": ".env",
|
|
1627
|
+
"op": "upsert-env",
|
|
1628
|
+
"key": "DB_NAME",
|
|
1629
|
+
"value": "${option:db-name}",
|
|
1630
|
+
"reason": "Configure database name.",
|
|
1631
|
+
"category": "runtime-config",
|
|
1632
|
+
"id": "database-name"
|
|
1633
|
+
},
|
|
1634
|
+
{
|
|
1635
|
+
"file": ".env",
|
|
1636
|
+
"op": "upsert-env",
|
|
1637
|
+
"key": "DB_USER",
|
|
1638
|
+
"value": "${option:db-user}",
|
|
1639
|
+
"reason": "Configure database user.",
|
|
1640
|
+
"category": "runtime-config",
|
|
1641
|
+
"id": "database-user"
|
|
1642
|
+
},
|
|
1643
|
+
{
|
|
1644
|
+
"file": ".env",
|
|
1645
|
+
"op": "upsert-env",
|
|
1646
|
+
"key": "DB_PASSWORD",
|
|
1647
|
+
"value": "${option:db-password}",
|
|
1648
|
+
"reason": "Configure database password.",
|
|
1649
|
+
"category": "runtime-config",
|
|
1650
|
+
"id": "database-password"
|
|
1651
|
+
}
|
|
1652
|
+
]
|
|
1653
|
+
}
|
|
1654
|
+
}
|
|
1655
|
+
},
|
|
1656
|
+
{
|
|
1657
|
+
"packageId": "@jskit-ai/http-runtime",
|
|
1658
|
+
"version": "0.1.4",
|
|
1659
|
+
"descriptor": {
|
|
1660
|
+
"packageVersion": 1,
|
|
1661
|
+
"packageId": "@jskit-ai/http-runtime",
|
|
1662
|
+
"version": "0.1.4",
|
|
1663
|
+
"dependsOn": [],
|
|
1664
|
+
"capabilities": {
|
|
1665
|
+
"provides": [
|
|
1666
|
+
"validators.http",
|
|
1667
|
+
"runtime.http-client"
|
|
1668
|
+
],
|
|
1669
|
+
"requires": []
|
|
1670
|
+
},
|
|
1671
|
+
"runtime": {
|
|
1672
|
+
"server": {
|
|
1673
|
+
"providerEntrypoint": "src/server/providers/HttpValidatorsServiceProvider.js",
|
|
1674
|
+
"providers": [
|
|
1675
|
+
{
|
|
1676
|
+
"entrypoint": "src/server/providers/HttpValidatorsServiceProvider.js",
|
|
1677
|
+
"export": "HttpValidatorsServiceProvider"
|
|
1678
|
+
},
|
|
1679
|
+
{
|
|
1680
|
+
"entrypoint": "src/server/providers/HttpClientRuntimeServiceProvider.js",
|
|
1681
|
+
"export": "HttpClientRuntimeServiceProvider"
|
|
1682
|
+
}
|
|
1683
|
+
]
|
|
1684
|
+
},
|
|
1685
|
+
"client": {
|
|
1686
|
+
"providers": [
|
|
1687
|
+
{
|
|
1688
|
+
"entrypoint": "src/client/providers/HttpValidatorsClientProvider.js",
|
|
1689
|
+
"export": "HttpValidatorsClientProvider"
|
|
1690
|
+
},
|
|
1691
|
+
{
|
|
1692
|
+
"entrypoint": "src/client/providers/HttpClientRuntimeClientProvider.js",
|
|
1693
|
+
"export": "HttpClientRuntimeClientProvider"
|
|
1694
|
+
}
|
|
1695
|
+
]
|
|
1696
|
+
}
|
|
1697
|
+
},
|
|
1698
|
+
"metadata": {
|
|
1699
|
+
"apiSummary": {
|
|
1700
|
+
"surfaces": [
|
|
1701
|
+
{
|
|
1702
|
+
"subpath": "./client",
|
|
1703
|
+
"summary": "Exports HTTP client runtime APIs (createHttpClient and transport helpers) plus client providers."
|
|
1704
|
+
},
|
|
1705
|
+
{
|
|
1706
|
+
"subpath": "./server",
|
|
1707
|
+
"summary": "Exports service providers only (HttpValidatorsServiceProvider, HttpClientRuntimeServiceProvider)."
|
|
1708
|
+
},
|
|
1709
|
+
{
|
|
1710
|
+
"subpath": "./shared",
|
|
1711
|
+
"summary": "Exports HTTP validator/schema utilities, with structured validator subpaths under ./shared/validators/*."
|
|
1712
|
+
}
|
|
1713
|
+
],
|
|
1714
|
+
"containerTokens": {
|
|
1715
|
+
"server": [
|
|
1716
|
+
"validators.http",
|
|
1717
|
+
"runtime.http-client"
|
|
1718
|
+
],
|
|
1719
|
+
"client": [
|
|
1720
|
+
"validators.http.client",
|
|
1721
|
+
"runtime.http-client.client"
|
|
1722
|
+
]
|
|
1723
|
+
}
|
|
1724
|
+
}
|
|
1725
|
+
},
|
|
1726
|
+
"mutations": {
|
|
1727
|
+
"dependencies": {
|
|
1728
|
+
"runtime": {
|
|
1729
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
1730
|
+
"@fastify/type-provider-typebox": "^6.1.0",
|
|
1731
|
+
"typebox": "^1.0.81"
|
|
1732
|
+
},
|
|
1733
|
+
"dev": {}
|
|
1734
|
+
},
|
|
1735
|
+
"packageJson": {
|
|
1736
|
+
"scripts": {}
|
|
1737
|
+
},
|
|
1738
|
+
"procfile": {},
|
|
1739
|
+
"files": []
|
|
1740
|
+
}
|
|
1741
|
+
}
|
|
1742
|
+
},
|
|
1743
|
+
{
|
|
1744
|
+
"packageId": "@jskit-ai/realtime",
|
|
1745
|
+
"version": "0.1.4",
|
|
1746
|
+
"descriptor": {
|
|
1747
|
+
"packageVersion": 1,
|
|
1748
|
+
"packageId": "@jskit-ai/realtime",
|
|
1749
|
+
"version": "0.1.4",
|
|
1750
|
+
"description": "Thin, generic realtime runtime wrappers for socket.io server and client.",
|
|
1751
|
+
"options": {
|
|
1752
|
+
"realtime-redis-url": {
|
|
1753
|
+
"required": true,
|
|
1754
|
+
"allowEmpty": true,
|
|
1755
|
+
"values": [],
|
|
1756
|
+
"defaultValue": "",
|
|
1757
|
+
"promptLabel": "Realtime Redis URL",
|
|
1758
|
+
"promptHint": "Leave empty to use in-memory socket adapter."
|
|
1759
|
+
}
|
|
1760
|
+
},
|
|
1761
|
+
"dependsOn": [
|
|
1762
|
+
"@jskit-ai/kernel"
|
|
1763
|
+
],
|
|
1764
|
+
"capabilities": {
|
|
1765
|
+
"provides": [
|
|
1766
|
+
"runtime.realtime",
|
|
1767
|
+
"runtime.realtime.client"
|
|
1768
|
+
],
|
|
1769
|
+
"requires": []
|
|
1770
|
+
},
|
|
1771
|
+
"runtime": {
|
|
1772
|
+
"server": {
|
|
1773
|
+
"providerEntrypoint": "src/server/RealtimeServiceProvider.js",
|
|
1774
|
+
"providers": [
|
|
1775
|
+
{
|
|
1776
|
+
"entrypoint": "src/server/RealtimeServiceProvider.js",
|
|
1777
|
+
"export": "RealtimeServiceProvider"
|
|
1778
|
+
}
|
|
1779
|
+
]
|
|
1780
|
+
},
|
|
1781
|
+
"client": {
|
|
1782
|
+
"providers": [
|
|
1783
|
+
{
|
|
1784
|
+
"entrypoint": "src/client/RealtimeClientProvider.js",
|
|
1785
|
+
"export": "RealtimeClientProvider"
|
|
1786
|
+
}
|
|
1787
|
+
]
|
|
1788
|
+
}
|
|
1789
|
+
},
|
|
1790
|
+
"metadata": {
|
|
1791
|
+
"apiSummary": {
|
|
1792
|
+
"surfaces": [
|
|
1793
|
+
{
|
|
1794
|
+
"subpath": "./server",
|
|
1795
|
+
"summary": "Exports RealtimeServiceProvider only."
|
|
1796
|
+
},
|
|
1797
|
+
{
|
|
1798
|
+
"subpath": "./client",
|
|
1799
|
+
"summary": "Exports RealtimeClientProvider only."
|
|
1800
|
+
},
|
|
1801
|
+
{
|
|
1802
|
+
"subpath": "./client/listeners",
|
|
1803
|
+
"summary": "Exports client listener registration helpers for provider-level realtime subscriptions."
|
|
1804
|
+
},
|
|
1805
|
+
{
|
|
1806
|
+
"subpath": "./client/composables/*",
|
|
1807
|
+
"summary": "Exports component-level realtime socket composables."
|
|
1808
|
+
}
|
|
1809
|
+
],
|
|
1810
|
+
"containerTokens": {
|
|
1811
|
+
"server": [
|
|
1812
|
+
"runtime.realtime"
|
|
1813
|
+
],
|
|
1814
|
+
"client": [
|
|
1815
|
+
"runtime.realtime.client",
|
|
1816
|
+
"runtime.realtime.client.socket",
|
|
1817
|
+
"realtime.web.connection.indicator"
|
|
1818
|
+
]
|
|
1819
|
+
}
|
|
1820
|
+
},
|
|
1821
|
+
"ui": {
|
|
1822
|
+
"placements": {
|
|
1823
|
+
"outlets": [],
|
|
1824
|
+
"contributions": [
|
|
1825
|
+
{
|
|
1826
|
+
"id": "realtime.connection.indicator",
|
|
1827
|
+
"host": "shell-layout",
|
|
1828
|
+
"position": "top-right",
|
|
1829
|
+
"surfaces": [
|
|
1830
|
+
"*"
|
|
1831
|
+
],
|
|
1832
|
+
"order": 950,
|
|
1833
|
+
"componentToken": "realtime.web.connection.indicator",
|
|
1834
|
+
"source": "mutations.text#realtime-placement-indicator"
|
|
1835
|
+
}
|
|
1836
|
+
]
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1839
|
+
},
|
|
1840
|
+
"mutations": {
|
|
1841
|
+
"dependencies": {
|
|
1842
|
+
"runtime": {
|
|
1843
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
1844
|
+
"@socket.io/redis-adapter": "^8.3.0",
|
|
1845
|
+
"redis": "^5.8.2",
|
|
1846
|
+
"socket.io": "^4.8.3",
|
|
1847
|
+
"socket.io-client": "^4.8.3"
|
|
1848
|
+
},
|
|
1849
|
+
"dev": {}
|
|
1850
|
+
},
|
|
1851
|
+
"packageJson": {
|
|
1852
|
+
"scripts": {}
|
|
1853
|
+
},
|
|
1854
|
+
"procfile": {},
|
|
1855
|
+
"files": [],
|
|
1856
|
+
"vite": {
|
|
1857
|
+
"proxy": [
|
|
1858
|
+
{
|
|
1859
|
+
"id": "realtime-socket-io",
|
|
1860
|
+
"path": "/socket.io",
|
|
1861
|
+
"changeOrigin": true,
|
|
1862
|
+
"ws": true
|
|
1863
|
+
}
|
|
1864
|
+
]
|
|
1865
|
+
},
|
|
1866
|
+
"text": [
|
|
1867
|
+
{
|
|
1868
|
+
"file": ".env",
|
|
1869
|
+
"op": "upsert-env",
|
|
1870
|
+
"key": "REALTIME_REDIS_URL",
|
|
1871
|
+
"value": "${option:realtime-redis-url}",
|
|
1872
|
+
"reason": "Configure optional Redis backplane URL for realtime socket adapter.",
|
|
1873
|
+
"category": "runtime-config",
|
|
1874
|
+
"id": "realtime-redis-url"
|
|
1875
|
+
},
|
|
1876
|
+
{
|
|
1877
|
+
"op": "append-text",
|
|
1878
|
+
"file": "src/placement.js",
|
|
1879
|
+
"position": "bottom",
|
|
1880
|
+
"skipIfContains": "id: \"realtime.connection.indicator\"",
|
|
1881
|
+
"value": "\naddPlacement({\n id: \"realtime.connection.indicator\",\n host: \"shell-layout\",\n position: \"top-right\",\n surfaces: [\"*\"],\n order: 950,\n componentToken: \"realtime.web.connection.indicator\"\n});\n",
|
|
1882
|
+
"reason": "Append realtime connection indicator placement into app-owned placement registry.",
|
|
1883
|
+
"category": "realtime-web",
|
|
1884
|
+
"id": "realtime-placement-indicator"
|
|
1885
|
+
}
|
|
1886
|
+
]
|
|
1887
|
+
}
|
|
1888
|
+
}
|
|
1889
|
+
},
|
|
1890
|
+
{
|
|
1891
|
+
"packageId": "@jskit-ai/shell-web",
|
|
1892
|
+
"version": "0.1.4",
|
|
1893
|
+
"descriptor": {
|
|
1894
|
+
"packageVersion": 1,
|
|
1895
|
+
"packageId": "@jskit-ai/shell-web",
|
|
1896
|
+
"version": "0.1.4",
|
|
1897
|
+
"description": "Web shell layout runtime with outlet-based placement contributions.",
|
|
1898
|
+
"dependsOn": [],
|
|
1899
|
+
"capabilities": {
|
|
1900
|
+
"provides": [
|
|
1901
|
+
"runtime.web-placement",
|
|
1902
|
+
"runtime.web-error"
|
|
1903
|
+
],
|
|
1904
|
+
"requires": []
|
|
1905
|
+
},
|
|
1906
|
+
"runtime": {
|
|
1907
|
+
"server": {
|
|
1908
|
+
"providers": []
|
|
1909
|
+
},
|
|
1910
|
+
"client": {
|
|
1911
|
+
"providers": [
|
|
1912
|
+
{
|
|
1913
|
+
"entrypoint": "src/client/providers/ShellWebClientProvider.js",
|
|
1914
|
+
"export": "ShellWebClientProvider"
|
|
1915
|
+
}
|
|
1916
|
+
]
|
|
1917
|
+
}
|
|
1918
|
+
},
|
|
1919
|
+
"metadata": {
|
|
1920
|
+
"apiSummary": {
|
|
1921
|
+
"surfaces": [
|
|
1922
|
+
{
|
|
1923
|
+
"subpath": "./client",
|
|
1924
|
+
"summary": "Exports shell layout/outlet/error-host components and ShellWebClientProvider."
|
|
1925
|
+
},
|
|
1926
|
+
{
|
|
1927
|
+
"subpath": "./client/placement",
|
|
1928
|
+
"summary": "Exports placement registry, placement context access, runtime token, and surface path helpers."
|
|
1929
|
+
},
|
|
1930
|
+
{
|
|
1931
|
+
"subpath": "./client/error",
|
|
1932
|
+
"summary": "Exports default error policy and runtime error reporter hook."
|
|
1933
|
+
}
|
|
1934
|
+
],
|
|
1935
|
+
"containerTokens": {
|
|
1936
|
+
"server": [],
|
|
1937
|
+
"client": [
|
|
1938
|
+
"runtime.web-placement.client",
|
|
1939
|
+
"runtime.web-error.client",
|
|
1940
|
+
"runtime.web-error.presentation-store.client"
|
|
1941
|
+
]
|
|
1942
|
+
}
|
|
1943
|
+
},
|
|
1944
|
+
"ui": {
|
|
1945
|
+
"placements": {
|
|
1946
|
+
"outlets": [
|
|
1947
|
+
{
|
|
1948
|
+
"host": "shell-layout",
|
|
1949
|
+
"position": "top-left",
|
|
1950
|
+
"surfaces": [
|
|
1951
|
+
"*"
|
|
1952
|
+
],
|
|
1953
|
+
"source": "src/client/components/ShellLayout.vue"
|
|
1954
|
+
},
|
|
1955
|
+
{
|
|
1956
|
+
"host": "shell-layout",
|
|
1957
|
+
"position": "top-right",
|
|
1958
|
+
"surfaces": [
|
|
1959
|
+
"*"
|
|
1960
|
+
],
|
|
1961
|
+
"source": "src/client/components/ShellLayout.vue"
|
|
1962
|
+
},
|
|
1963
|
+
{
|
|
1964
|
+
"host": "shell-layout",
|
|
1965
|
+
"position": "primary-menu",
|
|
1966
|
+
"surfaces": [
|
|
1967
|
+
"*"
|
|
1968
|
+
],
|
|
1969
|
+
"source": "src/client/components/ShellLayout.vue"
|
|
1970
|
+
},
|
|
1971
|
+
{
|
|
1972
|
+
"host": "shell-layout",
|
|
1973
|
+
"position": "secondary-menu",
|
|
1974
|
+
"surfaces": [
|
|
1975
|
+
"*"
|
|
1976
|
+
],
|
|
1977
|
+
"source": "src/client/components/ShellLayout.vue"
|
|
1978
|
+
}
|
|
1979
|
+
],
|
|
1980
|
+
"contributions": []
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1983
|
+
},
|
|
1984
|
+
"mutations": {
|
|
1985
|
+
"dependencies": {
|
|
1986
|
+
"runtime": {
|
|
1987
|
+
"@tanstack/vue-query": "^5.90.5",
|
|
1988
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
1989
|
+
"vuetify": "^4.0.0"
|
|
1990
|
+
},
|
|
1991
|
+
"dev": {}
|
|
1992
|
+
},
|
|
1993
|
+
"packageJson": {
|
|
1994
|
+
"scripts": {
|
|
1995
|
+
"dev:all": "vite",
|
|
1996
|
+
"dev:home": "VITE_SURFACE=home vite",
|
|
1997
|
+
"dev:console": "VITE_SURFACE=console vite"
|
|
1998
|
+
}
|
|
1999
|
+
},
|
|
2000
|
+
"procfile": {},
|
|
2001
|
+
"text": [],
|
|
2002
|
+
"files": [
|
|
2003
|
+
{
|
|
2004
|
+
"from": "templates/src/App.vue",
|
|
2005
|
+
"to": "src/App.vue",
|
|
2006
|
+
"reason": "Install full-width shell app root with shell-web error host and edge-to-edge layout.",
|
|
2007
|
+
"category": "shell-web",
|
|
2008
|
+
"id": "shell-web-app-root"
|
|
2009
|
+
},
|
|
2010
|
+
{
|
|
2011
|
+
"from": "templates/src/components/ShellLayout.vue",
|
|
2012
|
+
"to": "src/components/ShellLayout.vue",
|
|
2013
|
+
"reason": "Install app-owned shell layout component so apps can customize structure and slots.",
|
|
2014
|
+
"category": "shell-web",
|
|
2015
|
+
"id": "shell-web-component-shell-layout"
|
|
2016
|
+
},
|
|
2017
|
+
{
|
|
2018
|
+
"from": "templates/src/error.js",
|
|
2019
|
+
"to": "src/error.js",
|
|
2020
|
+
"reason": "Install app-owned error runtime policy and presenter config scaffold.",
|
|
2021
|
+
"category": "shell-web",
|
|
2022
|
+
"id": "shell-web-error-config"
|
|
2023
|
+
},
|
|
2024
|
+
{
|
|
2025
|
+
"from": "templates/src/placement.js",
|
|
2026
|
+
"to": "src/placement.js",
|
|
2027
|
+
"reason": "Install app-owned placement registry scaffold used by shell-web placement runtime.",
|
|
2028
|
+
"category": "shell-web",
|
|
2029
|
+
"id": "shell-web-placement-registry"
|
|
2030
|
+
},
|
|
2031
|
+
{
|
|
2032
|
+
"from": "templates/src/pages/home.vue",
|
|
2033
|
+
"toSurface": "home",
|
|
2034
|
+
"toSurfaceRoot": true,
|
|
2035
|
+
"reason": "Install shell-driven home wrapper page.",
|
|
2036
|
+
"category": "shell-web",
|
|
2037
|
+
"id": "shell-web-page-home-wrapper"
|
|
2038
|
+
},
|
|
2039
|
+
{
|
|
2040
|
+
"from": "templates/src/pages/home/index.vue",
|
|
2041
|
+
"toSurface": "home",
|
|
2042
|
+
"toSurfacePath": "index.vue",
|
|
2043
|
+
"reason": "Install shell-driven home surface starter page.",
|
|
2044
|
+
"category": "shell-web",
|
|
2045
|
+
"id": "shell-web-page-home"
|
|
2046
|
+
},
|
|
2047
|
+
{
|
|
2048
|
+
"from": "templates/src/pages/console.vue",
|
|
2049
|
+
"toSurface": "console",
|
|
2050
|
+
"toSurfaceRoot": true,
|
|
2051
|
+
"reason": "Install shell-driven console wrapper page.",
|
|
2052
|
+
"category": "shell-web",
|
|
2053
|
+
"id": "shell-web-page-console-wrapper"
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
"from": "templates/src/pages/console/index.vue",
|
|
2057
|
+
"toSurface": "console",
|
|
2058
|
+
"toSurfacePath": "index.vue",
|
|
2059
|
+
"reason": "Install shell-driven console page starter.",
|
|
2060
|
+
"category": "shell-web",
|
|
2061
|
+
"id": "shell-web-page-console"
|
|
2062
|
+
}
|
|
2063
|
+
]
|
|
2064
|
+
}
|
|
2065
|
+
}
|
|
2066
|
+
},
|
|
2067
|
+
{
|
|
2068
|
+
"packageId": "@jskit-ai/storage-runtime",
|
|
2069
|
+
"version": "0.1.4",
|
|
2070
|
+
"descriptor": {
|
|
2071
|
+
"packageVersion": 1,
|
|
2072
|
+
"packageId": "@jskit-ai/storage-runtime",
|
|
2073
|
+
"version": "0.1.4",
|
|
2074
|
+
"dependsOn": [
|
|
2075
|
+
"@jskit-ai/kernel"
|
|
2076
|
+
],
|
|
2077
|
+
"capabilities": {
|
|
2078
|
+
"provides": [
|
|
2079
|
+
"runtime.storage"
|
|
2080
|
+
],
|
|
2081
|
+
"requires": []
|
|
2082
|
+
},
|
|
2083
|
+
"runtime": {
|
|
2084
|
+
"server": {
|
|
2085
|
+
"providerEntrypoint": "src/server/providers/StorageRuntimeServiceProvider.js",
|
|
2086
|
+
"providers": [
|
|
2087
|
+
{
|
|
2088
|
+
"entrypoint": "src/server/providers/StorageRuntimeServiceProvider.js",
|
|
2089
|
+
"export": "StorageRuntimeServiceProvider"
|
|
2090
|
+
}
|
|
2091
|
+
]
|
|
2092
|
+
},
|
|
2093
|
+
"client": {
|
|
2094
|
+
"providers": []
|
|
2095
|
+
}
|
|
2096
|
+
},
|
|
2097
|
+
"metadata": {
|
|
2098
|
+
"apiSummary": {
|
|
2099
|
+
"surfaces": [
|
|
2100
|
+
{
|
|
2101
|
+
"subpath": "./server/providers/StorageRuntimeServiceProvider",
|
|
2102
|
+
"summary": "Exports storage runtime server provider."
|
|
2103
|
+
},
|
|
2104
|
+
{
|
|
2105
|
+
"subpath": "./client",
|
|
2106
|
+
"summary": "Exports no client runtime API today (reserved client entrypoint)."
|
|
2107
|
+
}
|
|
2108
|
+
],
|
|
2109
|
+
"containerTokens": {
|
|
2110
|
+
"server": [
|
|
2111
|
+
"runtime.storage",
|
|
2112
|
+
"KERNEL_TOKENS.Storage"
|
|
2113
|
+
],
|
|
2114
|
+
"client": []
|
|
2115
|
+
}
|
|
2116
|
+
}
|
|
2117
|
+
},
|
|
2118
|
+
"mutations": {
|
|
2119
|
+
"dependencies": {
|
|
2120
|
+
"runtime": {
|
|
2121
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
2122
|
+
"unstorage": "^1.17.3"
|
|
2123
|
+
},
|
|
2124
|
+
"dev": {}
|
|
2125
|
+
},
|
|
2126
|
+
"packageJson": {
|
|
2127
|
+
"scripts": {}
|
|
2128
|
+
},
|
|
2129
|
+
"procfile": {},
|
|
2130
|
+
"files": [],
|
|
2131
|
+
"text": []
|
|
2132
|
+
}
|
|
2133
|
+
}
|
|
2134
|
+
},
|
|
2135
|
+
{
|
|
2136
|
+
"packageId": "@jskit-ai/users-core",
|
|
2137
|
+
"version": "0.1.4",
|
|
2138
|
+
"descriptor": {
|
|
2139
|
+
"packageVersion": 1,
|
|
2140
|
+
"packageId": "@jskit-ai/users-core",
|
|
2141
|
+
"version": "0.1.4",
|
|
2142
|
+
"description": "Users/workspace domain runtime plus HTTP routes for workspace, account, and console features.",
|
|
2143
|
+
"dependsOn": [
|
|
2144
|
+
"@jskit-ai/auth-core",
|
|
2145
|
+
"@jskit-ai/database-runtime",
|
|
2146
|
+
"@jskit-ai/http-runtime",
|
|
2147
|
+
"@jskit-ai/storage-runtime"
|
|
2148
|
+
],
|
|
2149
|
+
"capabilities": {
|
|
2150
|
+
"provides": [
|
|
2151
|
+
"users.core",
|
|
2152
|
+
"users.server-routes"
|
|
2153
|
+
],
|
|
2154
|
+
"requires": [
|
|
2155
|
+
"runtime.actions",
|
|
2156
|
+
"runtime.database",
|
|
2157
|
+
"runtime.storage",
|
|
2158
|
+
"auth.provider",
|
|
2159
|
+
"auth.policy"
|
|
2160
|
+
]
|
|
2161
|
+
},
|
|
2162
|
+
"runtime": {
|
|
2163
|
+
"server": {
|
|
2164
|
+
"providers": [
|
|
2165
|
+
{
|
|
2166
|
+
"entrypoint": "src/server/UsersCoreServiceProvider.js",
|
|
2167
|
+
"export": "UsersCoreServiceProvider"
|
|
2168
|
+
}
|
|
2169
|
+
]
|
|
2170
|
+
},
|
|
2171
|
+
"client": {
|
|
2172
|
+
"providers": []
|
|
2173
|
+
}
|
|
2174
|
+
},
|
|
2175
|
+
"metadata": {
|
|
2176
|
+
"apiSummary": {
|
|
2177
|
+
"surfaces": [
|
|
2178
|
+
{
|
|
2179
|
+
"subpath": "./server",
|
|
2180
|
+
"summary": "Exports UsersCoreServiceProvider, users/workspace/console repositories/services, feature route registration modules, and action definitions."
|
|
2181
|
+
},
|
|
2182
|
+
{
|
|
2183
|
+
"subpath": "./shared",
|
|
2184
|
+
"summary": "Exports shared users/workspace role and settings utilities."
|
|
2185
|
+
},
|
|
2186
|
+
{
|
|
2187
|
+
"subpath": "./client",
|
|
2188
|
+
"summary": "Exports no runtime API today (reserved client entrypoint)."
|
|
2189
|
+
}
|
|
2190
|
+
],
|
|
2191
|
+
"containerTokens": {
|
|
2192
|
+
"server": [
|
|
2193
|
+
"users.core",
|
|
2194
|
+
"users.profile.sync.service",
|
|
2195
|
+
"users.workspace.service",
|
|
2196
|
+
"users.workspace.members.service",
|
|
2197
|
+
"users.workspace.settings.service",
|
|
2198
|
+
"users.settings.service",
|
|
2199
|
+
"users.console.settings.service"
|
|
2200
|
+
],
|
|
2201
|
+
"client": []
|
|
2202
|
+
}
|
|
2203
|
+
},
|
|
2204
|
+
"server": {
|
|
2205
|
+
"routes": [
|
|
2206
|
+
{
|
|
2207
|
+
"method": "POST",
|
|
2208
|
+
"path": "/api/workspaces",
|
|
2209
|
+
"summary": "Create a workspace for the authenticated user."
|
|
2210
|
+
},
|
|
2211
|
+
{
|
|
2212
|
+
"method": "GET",
|
|
2213
|
+
"path": "/api/workspaces",
|
|
2214
|
+
"summary": "List workspaces visible to authenticated user."
|
|
2215
|
+
},
|
|
2216
|
+
{
|
|
2217
|
+
"method": "GET",
|
|
2218
|
+
"path": "/api/workspace/invitations/pending",
|
|
2219
|
+
"summary": "List pending workspace invitations for authenticated user."
|
|
2220
|
+
},
|
|
2221
|
+
{
|
|
2222
|
+
"method": "POST",
|
|
2223
|
+
"path": "/api/workspace/invitations/redeem",
|
|
2224
|
+
"summary": "Accept or refuse a workspace invitation using an invite token."
|
|
2225
|
+
},
|
|
2226
|
+
{
|
|
2227
|
+
"method": "GET",
|
|
2228
|
+
"path": "/api/w/:workspaceSlug/workspace/settings",
|
|
2229
|
+
"summary": "Get workspace settings and role catalog by workspace slug."
|
|
2230
|
+
},
|
|
2231
|
+
{
|
|
2232
|
+
"method": "PATCH",
|
|
2233
|
+
"path": "/api/w/:workspaceSlug/workspace/settings",
|
|
2234
|
+
"summary": "Update workspace settings by workspace slug."
|
|
2235
|
+
},
|
|
2236
|
+
{
|
|
2237
|
+
"method": "GET",
|
|
2238
|
+
"path": "/api/w/:workspaceSlug/workspace/roles",
|
|
2239
|
+
"summary": "Get workspace role catalog by workspace slug."
|
|
2240
|
+
},
|
|
2241
|
+
{
|
|
2242
|
+
"method": "GET",
|
|
2243
|
+
"path": "/api/w/:workspaceSlug/workspace/members",
|
|
2244
|
+
"summary": "List members by workspace slug."
|
|
2245
|
+
},
|
|
2246
|
+
{
|
|
2247
|
+
"method": "PATCH",
|
|
2248
|
+
"path": "/api/w/:workspaceSlug/workspace/members/:memberUserId/role",
|
|
2249
|
+
"summary": "Update workspace member role by workspace slug."
|
|
2250
|
+
},
|
|
2251
|
+
{
|
|
2252
|
+
"method": "GET",
|
|
2253
|
+
"path": "/api/w/:workspaceSlug/workspace/invites",
|
|
2254
|
+
"summary": "List workspace invites by workspace slug."
|
|
2255
|
+
},
|
|
2256
|
+
{
|
|
2257
|
+
"method": "POST",
|
|
2258
|
+
"path": "/api/w/:workspaceSlug/workspace/invites",
|
|
2259
|
+
"summary": "Create workspace invite by workspace slug."
|
|
2260
|
+
},
|
|
2261
|
+
{
|
|
2262
|
+
"method": "DELETE",
|
|
2263
|
+
"path": "/api/w/:workspaceSlug/workspace/invites/:inviteId",
|
|
2264
|
+
"summary": "Revoke workspace invite by workspace slug."
|
|
2265
|
+
},
|
|
2266
|
+
{
|
|
2267
|
+
"method": "GET",
|
|
2268
|
+
"path": "/api/settings",
|
|
2269
|
+
"summary": "Get authenticated user settings."
|
|
2270
|
+
},
|
|
2271
|
+
{
|
|
2272
|
+
"method": "PATCH",
|
|
2273
|
+
"path": "/api/settings/profile",
|
|
2274
|
+
"summary": "Update profile settings."
|
|
2275
|
+
},
|
|
2276
|
+
{
|
|
2277
|
+
"method": "GET",
|
|
2278
|
+
"path": "/api/settings/profile/avatar",
|
|
2279
|
+
"summary": "Read authenticated user's uploaded avatar."
|
|
2280
|
+
},
|
|
2281
|
+
{
|
|
2282
|
+
"method": "POST",
|
|
2283
|
+
"path": "/api/settings/profile/avatar",
|
|
2284
|
+
"summary": "Upload profile avatar."
|
|
2285
|
+
},
|
|
2286
|
+
{
|
|
2287
|
+
"method": "DELETE",
|
|
2288
|
+
"path": "/api/settings/profile/avatar",
|
|
2289
|
+
"summary": "Delete profile avatar."
|
|
2290
|
+
},
|
|
2291
|
+
{
|
|
2292
|
+
"method": "PATCH",
|
|
2293
|
+
"path": "/api/settings/preferences",
|
|
2294
|
+
"summary": "Update user preferences."
|
|
2295
|
+
},
|
|
2296
|
+
{
|
|
2297
|
+
"method": "PATCH",
|
|
2298
|
+
"path": "/api/settings/notifications",
|
|
2299
|
+
"summary": "Update notification settings."
|
|
2300
|
+
},
|
|
2301
|
+
{
|
|
2302
|
+
"method": "POST",
|
|
2303
|
+
"path": "/api/settings/security/change-password",
|
|
2304
|
+
"summary": "Set or change password for authenticated user."
|
|
2305
|
+
},
|
|
2306
|
+
{
|
|
2307
|
+
"method": "PATCH",
|
|
2308
|
+
"path": "/api/settings/security/methods/password",
|
|
2309
|
+
"summary": "Enable or disable password sign-in method."
|
|
2310
|
+
},
|
|
2311
|
+
{
|
|
2312
|
+
"method": "GET",
|
|
2313
|
+
"path": "/api/settings/security/oauth/:provider/start",
|
|
2314
|
+
"summary": "Start linking an OAuth provider for authenticated user."
|
|
2315
|
+
},
|
|
2316
|
+
{
|
|
2317
|
+
"method": "DELETE",
|
|
2318
|
+
"path": "/api/settings/security/oauth/:provider",
|
|
2319
|
+
"summary": "Unlink an OAuth provider from authenticated account."
|
|
2320
|
+
},
|
|
2321
|
+
{
|
|
2322
|
+
"method": "POST",
|
|
2323
|
+
"path": "/api/settings/security/logout-others",
|
|
2324
|
+
"summary": "Sign out from other active sessions."
|
|
2325
|
+
},
|
|
2326
|
+
{
|
|
2327
|
+
"method": "GET",
|
|
2328
|
+
"path": "/api/console/settings",
|
|
2329
|
+
"summary": "Get console settings."
|
|
2330
|
+
},
|
|
2331
|
+
{
|
|
2332
|
+
"method": "PATCH",
|
|
2333
|
+
"path": "/api/console/settings",
|
|
2334
|
+
"summary": "Update console settings."
|
|
2335
|
+
}
|
|
2336
|
+
]
|
|
2337
|
+
}
|
|
2338
|
+
},
|
|
2339
|
+
"mutations": {
|
|
2340
|
+
"dependencies": {
|
|
2341
|
+
"runtime": {
|
|
2342
|
+
"@jskit-ai/auth-core": "0.1.4",
|
|
2343
|
+
"@jskit-ai/database-runtime": "0.1.4",
|
|
2344
|
+
"@jskit-ai/http-runtime": "0.1.4",
|
|
2345
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
2346
|
+
"@fastify/multipart": "^9.4.0",
|
|
2347
|
+
"@fastify/type-provider-typebox": "^6.1.0",
|
|
2348
|
+
"typebox": "^1.0.81"
|
|
2349
|
+
},
|
|
2350
|
+
"dev": {}
|
|
2351
|
+
},
|
|
2352
|
+
"packageJson": {
|
|
2353
|
+
"scripts": {}
|
|
2354
|
+
},
|
|
2355
|
+
"procfile": {},
|
|
2356
|
+
"files": [
|
|
2357
|
+
{
|
|
2358
|
+
"op": "install-migration",
|
|
2359
|
+
"from": "templates/migrations/users_core_initial.cjs",
|
|
2360
|
+
"toDir": "migrations",
|
|
2361
|
+
"slug": "users_core_initial",
|
|
2362
|
+
"extension": ".cjs",
|
|
2363
|
+
"reason": "Install users/workspace core schema migration.",
|
|
2364
|
+
"category": "migration",
|
|
2365
|
+
"id": "users-core-initial-schema"
|
|
2366
|
+
},
|
|
2367
|
+
{
|
|
2368
|
+
"op": "install-migration",
|
|
2369
|
+
"from": "templates/migrations/users_core_profile_username.cjs",
|
|
2370
|
+
"toDir": "migrations",
|
|
2371
|
+
"slug": "users_core_profile_username",
|
|
2372
|
+
"extension": ".cjs",
|
|
2373
|
+
"reason": "Install users profile username migration.",
|
|
2374
|
+
"category": "migration",
|
|
2375
|
+
"id": "users-core-profile-username-schema"
|
|
2376
|
+
},
|
|
2377
|
+
{
|
|
2378
|
+
"op": "install-migration",
|
|
2379
|
+
"from": "templates/migrations/users_core_console_owner.cjs",
|
|
2380
|
+
"toDir": "migrations",
|
|
2381
|
+
"slug": "users_core_console_owner",
|
|
2382
|
+
"extension": ".cjs",
|
|
2383
|
+
"reason": "Install users/workspace console owner migration.",
|
|
2384
|
+
"category": "migration",
|
|
2385
|
+
"id": "users-core-console-owner-schema"
|
|
2386
|
+
},
|
|
2387
|
+
{
|
|
2388
|
+
"from": "templates/packages/main/src/shared/resources/workspaceSettingsFields.js",
|
|
2389
|
+
"to": "packages/main/src/shared/resources/workspaceSettingsFields.js",
|
|
2390
|
+
"preserveOnRemove": true,
|
|
2391
|
+
"reason": "Install app-owned workspace settings field definitions.",
|
|
2392
|
+
"category": "users-core",
|
|
2393
|
+
"id": "users-core-app-owned-workspace-settings-fields"
|
|
2394
|
+
},
|
|
2395
|
+
{
|
|
2396
|
+
"from": "templates/packages/main/src/shared/resources/consoleSettingsFields.js",
|
|
2397
|
+
"to": "packages/main/src/shared/resources/consoleSettingsFields.js",
|
|
2398
|
+
"preserveOnRemove": true,
|
|
2399
|
+
"reason": "Install app-owned console settings field definitions.",
|
|
2400
|
+
"category": "users-core",
|
|
2401
|
+
"id": "users-core-app-owned-console-settings-fields"
|
|
2402
|
+
},
|
|
2403
|
+
{
|
|
2404
|
+
"from": "templates/packages/main/src/shared/resources/userSettingsFields.js",
|
|
2405
|
+
"to": "packages/main/src/shared/resources/userSettingsFields.js",
|
|
2406
|
+
"preserveOnRemove": true,
|
|
2407
|
+
"reason": "Install app-owned user settings field definitions.",
|
|
2408
|
+
"category": "users-core",
|
|
2409
|
+
"id": "users-core-app-owned-user-settings-fields"
|
|
2410
|
+
},
|
|
2411
|
+
{
|
|
2412
|
+
"from": "templates/config/workspaceRoles.js",
|
|
2413
|
+
"to": "config/workspaceRoles.js",
|
|
2414
|
+
"preserveOnRemove": true,
|
|
2415
|
+
"reason": "Install app-owned workspace role catalog in a dedicated config file.",
|
|
2416
|
+
"category": "users-core",
|
|
2417
|
+
"id": "users-core-app-owned-workspace-roles-config"
|
|
2418
|
+
}
|
|
2419
|
+
],
|
|
2420
|
+
"text": [
|
|
2421
|
+
{
|
|
2422
|
+
"op": "upsert-env",
|
|
2423
|
+
"file": ".env",
|
|
2424
|
+
"key": "AUTH_PROFILE_MODE",
|
|
2425
|
+
"value": "users",
|
|
2426
|
+
"reason": "Enable users-backed auth profile sync when users-core is installed.",
|
|
2427
|
+
"category": "runtime-config",
|
|
2428
|
+
"id": "users-core-auth-profile-mode"
|
|
2429
|
+
},
|
|
2430
|
+
{
|
|
2431
|
+
"op": "append-text",
|
|
2432
|
+
"file": "packages/main/src/shared/index.js",
|
|
2433
|
+
"position": "top",
|
|
2434
|
+
"skipIfContains": "import \"./resources/workspaceSettingsFields.js\";",
|
|
2435
|
+
"value": "import \"./resources/workspaceSettingsFields.js\";\n",
|
|
2436
|
+
"reason": "Load app-owned workspace settings field definitions inside the main shared module.",
|
|
2437
|
+
"category": "users-core",
|
|
2438
|
+
"id": "users-core-main-shared-workspace-settings-field-import"
|
|
2439
|
+
},
|
|
2440
|
+
{
|
|
2441
|
+
"op": "append-text",
|
|
2442
|
+
"file": "packages/main/src/shared/index.js",
|
|
2443
|
+
"position": "top",
|
|
2444
|
+
"skipIfContains": "import \"./resources/consoleSettingsFields.js\";",
|
|
2445
|
+
"value": "import \"./resources/consoleSettingsFields.js\";\n",
|
|
2446
|
+
"reason": "Load app-owned console settings field definitions inside the main shared module.",
|
|
2447
|
+
"category": "users-core",
|
|
2448
|
+
"id": "users-core-main-shared-console-settings-field-import"
|
|
2449
|
+
},
|
|
2450
|
+
{
|
|
2451
|
+
"op": "append-text",
|
|
2452
|
+
"file": "packages/main/src/shared/index.js",
|
|
2453
|
+
"position": "top",
|
|
2454
|
+
"skipIfContains": "import \"./resources/userSettingsFields.js\";",
|
|
2455
|
+
"value": "import \"./resources/userSettingsFields.js\";\n",
|
|
2456
|
+
"reason": "Load app-owned user settings field definitions inside the main shared module.",
|
|
2457
|
+
"category": "users-core",
|
|
2458
|
+
"id": "users-core-main-shared-user-settings-field-import"
|
|
2459
|
+
},
|
|
2460
|
+
{
|
|
2461
|
+
"op": "append-text",
|
|
2462
|
+
"file": "src/main.js",
|
|
2463
|
+
"position": "top",
|
|
2464
|
+
"skipIfContains": "import \"@local/main/shared\";",
|
|
2465
|
+
"value": "import \"@local/main/shared\";\n",
|
|
2466
|
+
"reason": "Ensure client runtime loads app-owned shared settings field registration.",
|
|
2467
|
+
"category": "users-core",
|
|
2468
|
+
"id": "users-core-client-import-main-shared"
|
|
2469
|
+
},
|
|
2470
|
+
{
|
|
2471
|
+
"op": "append-text",
|
|
2472
|
+
"file": "server.js",
|
|
2473
|
+
"position": "top",
|
|
2474
|
+
"skipIfContains": "import \"@local/main/shared\";",
|
|
2475
|
+
"value": "import \"@local/main/shared\";\n",
|
|
2476
|
+
"reason": "Ensure server runtime loads app-owned shared settings field registration.",
|
|
2477
|
+
"category": "users-core",
|
|
2478
|
+
"id": "users-core-server-import-main-shared"
|
|
2479
|
+
},
|
|
2480
|
+
{
|
|
2481
|
+
"op": "append-text",
|
|
2482
|
+
"file": "config/public.js",
|
|
2483
|
+
"position": "top",
|
|
2484
|
+
"skipIfContains": "import { workspaceRoles } from \"./workspaceRoles.js\";",
|
|
2485
|
+
"value": "import { workspaceRoles } from \"./workspaceRoles.js\";\n",
|
|
2486
|
+
"reason": "Load app-owned workspace role catalog from dedicated config file.",
|
|
2487
|
+
"category": "users-core",
|
|
2488
|
+
"id": "users-core-workspace-roles-public-import"
|
|
2489
|
+
},
|
|
2490
|
+
{
|
|
2491
|
+
"op": "append-text",
|
|
2492
|
+
"file": "config/public.js",
|
|
2493
|
+
"position": "top",
|
|
2494
|
+
"skipIfContains": "import { surfaceAccessPolicies } from \"./surfaceAccessPolicies.js\";",
|
|
2495
|
+
"value": "import { surfaceAccessPolicies } from \"./surfaceAccessPolicies.js\";\n",
|
|
2496
|
+
"reason": "Load app-owned surface access policy catalog from dedicated config file.",
|
|
2497
|
+
"category": "users-core",
|
|
2498
|
+
"id": "users-core-surface-access-policies-public-import"
|
|
2499
|
+
},
|
|
2500
|
+
{
|
|
2501
|
+
"op": "append-text",
|
|
2502
|
+
"file": "config/surfaceAccessPolicies.js",
|
|
2503
|
+
"position": "top",
|
|
2504
|
+
"skipIfContains": "export const surfaceAccessPolicies = {};",
|
|
2505
|
+
"value": "export const surfaceAccessPolicies = {};\n\n",
|
|
2506
|
+
"reason": "Initialize app-owned surface access policy config if missing.",
|
|
2507
|
+
"category": "users-core",
|
|
2508
|
+
"id": "users-core-surface-access-policies-config-init"
|
|
2509
|
+
},
|
|
2510
|
+
{
|
|
2511
|
+
"op": "append-text",
|
|
2512
|
+
"file": "config/surfaceAccessPolicies.js",
|
|
2513
|
+
"position": "bottom",
|
|
2514
|
+
"skipIfContains": "surfaceAccessPolicies.workspace_member = {",
|
|
2515
|
+
"value": "\nsurfaceAccessPolicies.workspace_member = {\n requireAuth: true,\n requireWorkspaceMembership: true\n};\n",
|
|
2516
|
+
"reason": "Register workspace-member surface access policy for workspace surfaces.",
|
|
2517
|
+
"category": "users-core",
|
|
2518
|
+
"id": "users-core-surface-access-policies-workspace-member"
|
|
2519
|
+
},
|
|
2520
|
+
{
|
|
2521
|
+
"op": "append-text",
|
|
2522
|
+
"file": "config/public.js",
|
|
2523
|
+
"position": "bottom",
|
|
2524
|
+
"skipIfContains": "config.surfaceDefinitions.app = {",
|
|
2525
|
+
"value": "\nconfig.surfaceDefinitions.app = {\n id: \"app\",\n label: \"App\",\n pagesRoot: \"w/[workspaceSlug]\",\n enabled: true,\n requiresAuth: true,\n requiresWorkspace: true,\n accessPolicyId: \"workspace_member\",\n origin: \"\"\n};\n\nconfig.surfaceDefinitions.admin = {\n id: \"admin\",\n label: \"Admin\",\n pagesRoot: \"w/[workspaceSlug]/admin\",\n enabled: true,\n requiresAuth: true,\n requiresWorkspace: true,\n accessPolicyId: \"workspace_member\",\n origin: \"\"\n};\n",
|
|
2526
|
+
"reason": "Append workspace surface topology when tenancy enables workspace routing.",
|
|
2527
|
+
"category": "users-core",
|
|
2528
|
+
"id": "users-core-surface-config-workspace",
|
|
2529
|
+
"when": {
|
|
2530
|
+
"config": "tenancyMode",
|
|
2531
|
+
"in": [
|
|
2532
|
+
"personal",
|
|
2533
|
+
"workspace"
|
|
2534
|
+
]
|
|
2535
|
+
}
|
|
2536
|
+
},
|
|
2537
|
+
{
|
|
2538
|
+
"op": "append-text",
|
|
2539
|
+
"file": "config/public.js",
|
|
2540
|
+
"position": "bottom",
|
|
2541
|
+
"skipIfContains": "config.workspaceSwitching =",
|
|
2542
|
+
"value": "\nconfig.workspaceSwitching = true;\nconfig.workspaceInvitations = {\n enabled: true,\n allowInPersonalMode: true\n};\nconfig.assistantEnabled = false;\nconfig.assistantRequiredPermission = \"\";\nconfig.socialEnabled = false;\nconfig.socialFederationEnabled = false;\n",
|
|
2543
|
+
"reason": "Append default public users/workspace feature toggles into app-owned config.",
|
|
2544
|
+
"category": "users-core",
|
|
2545
|
+
"id": "users-core-public-config"
|
|
2546
|
+
},
|
|
2547
|
+
{
|
|
2548
|
+
"op": "append-text",
|
|
2549
|
+
"file": "config/public.js",
|
|
2550
|
+
"position": "bottom",
|
|
2551
|
+
"skipIfContains": "config.workspaceRoles = workspaceRoles;",
|
|
2552
|
+
"value": "\nconfig.workspaceRoles = workspaceRoles;\n",
|
|
2553
|
+
"reason": "Bind app-owned workspace role catalog onto public config.",
|
|
2554
|
+
"category": "users-core",
|
|
2555
|
+
"id": "users-core-workspace-roles-public-config"
|
|
2556
|
+
},
|
|
2557
|
+
{
|
|
2558
|
+
"op": "append-text",
|
|
2559
|
+
"file": "config/public.js",
|
|
2560
|
+
"position": "bottom",
|
|
2561
|
+
"skipIfContains": "config.surfaceAccessPolicies = surfaceAccessPolicies;",
|
|
2562
|
+
"value": "\nconfig.surfaceAccessPolicies = surfaceAccessPolicies;\n",
|
|
2563
|
+
"reason": "Bind app-owned surface access policies onto public config.",
|
|
2564
|
+
"category": "users-core",
|
|
2565
|
+
"id": "users-core-surface-access-policies-public-config"
|
|
2566
|
+
},
|
|
2567
|
+
{
|
|
2568
|
+
"op": "append-text",
|
|
2569
|
+
"file": "config/server.js",
|
|
2570
|
+
"position": "bottom",
|
|
2571
|
+
"skipIfContains": "config.workspaceColor =",
|
|
2572
|
+
"value": "\nconfig.workspaceColor = \"indigo\";\n",
|
|
2573
|
+
"reason": "Append default server-only users/workspace settings into app-owned config.",
|
|
2574
|
+
"category": "users-core",
|
|
2575
|
+
"id": "users-core-server-config"
|
|
2576
|
+
},
|
|
2577
|
+
{
|
|
2578
|
+
"op": "append-text",
|
|
2579
|
+
"file": "config/server.js",
|
|
2580
|
+
"position": "bottom",
|
|
2581
|
+
"skipIfContains": "config.workspaceSettings =",
|
|
2582
|
+
"value": "\nconfig.workspaceSettings = {\n defaults: {\n invitesEnabled: true\n }\n};\n",
|
|
2583
|
+
"reason": "Append app-owned workspace settings defaults into the server config.",
|
|
2584
|
+
"category": "users-core",
|
|
2585
|
+
"id": "users-core-workspace-settings-server-config"
|
|
2586
|
+
},
|
|
2587
|
+
{
|
|
2588
|
+
"op": "append-text",
|
|
2589
|
+
"file": "config/server.js",
|
|
2590
|
+
"position": "bottom",
|
|
2591
|
+
"skipIfContains": "config.workspaceMembers =",
|
|
2592
|
+
"value": "\nconfig.workspaceMembers = {\n defaults: {\n inviteExpiresInMs: 604800000\n }\n};\n",
|
|
2593
|
+
"reason": "Append app-owned workspace member invite policy defaults into the server config.",
|
|
2594
|
+
"category": "users-core",
|
|
2595
|
+
"id": "users-core-workspace-members-server-config"
|
|
2596
|
+
}
|
|
2597
|
+
]
|
|
2598
|
+
}
|
|
2599
|
+
}
|
|
2600
|
+
},
|
|
2601
|
+
{
|
|
2602
|
+
"packageId": "@jskit-ai/users-web",
|
|
2603
|
+
"version": "0.1.4",
|
|
2604
|
+
"descriptor": {
|
|
2605
|
+
"packageVersion": 1,
|
|
2606
|
+
"packageId": "@jskit-ai/users-web",
|
|
2607
|
+
"version": "0.1.4",
|
|
2608
|
+
"description": "Users web module: workspace selector shell element plus workspace/profile/members UI elements.",
|
|
2609
|
+
"dependsOn": [
|
|
2610
|
+
"@jskit-ai/http-runtime",
|
|
2611
|
+
"@jskit-ai/shell-web",
|
|
2612
|
+
"@jskit-ai/users-core"
|
|
2613
|
+
],
|
|
2614
|
+
"capabilities": {
|
|
2615
|
+
"provides": [
|
|
2616
|
+
"users.web"
|
|
2617
|
+
],
|
|
2618
|
+
"requires": [
|
|
2619
|
+
"runtime.web-placement",
|
|
2620
|
+
"users.server-routes"
|
|
2621
|
+
]
|
|
2622
|
+
},
|
|
2623
|
+
"runtime": {
|
|
2624
|
+
"server": {
|
|
2625
|
+
"providers": []
|
|
2626
|
+
},
|
|
2627
|
+
"client": {
|
|
2628
|
+
"providers": [
|
|
2629
|
+
{
|
|
2630
|
+
"entrypoint": "src/client/providers/UsersWebClientProvider.js",
|
|
2631
|
+
"export": "UsersWebClientProvider"
|
|
2632
|
+
}
|
|
2633
|
+
]
|
|
2634
|
+
}
|
|
2635
|
+
},
|
|
2636
|
+
"metadata": {
|
|
2637
|
+
"client": {
|
|
2638
|
+
"optimizeDeps": {
|
|
2639
|
+
"include": [
|
|
2640
|
+
"@uppy/core",
|
|
2641
|
+
"@uppy/dashboard",
|
|
2642
|
+
"@uppy/image-editor",
|
|
2643
|
+
"@uppy/compressor",
|
|
2644
|
+
"@uppy/xhr-upload"
|
|
2645
|
+
]
|
|
2646
|
+
}
|
|
2647
|
+
},
|
|
2648
|
+
"apiSummary": {
|
|
2649
|
+
"surfaces": [
|
|
2650
|
+
{
|
|
2651
|
+
"subpath": "./client",
|
|
2652
|
+
"summary": "Exports users-web client provider registration surface."
|
|
2653
|
+
},
|
|
2654
|
+
{
|
|
2655
|
+
"subpath": "./client/providers/UsersWebClientProvider",
|
|
2656
|
+
"summary": "Exports users-web client provider class."
|
|
2657
|
+
},
|
|
2658
|
+
{
|
|
2659
|
+
"subpath": "./client/components/ProfileClientElement",
|
|
2660
|
+
"summary": "Exports profile settings client element scaffold component."
|
|
2661
|
+
},
|
|
2662
|
+
{
|
|
2663
|
+
"subpath": "./client/components/WorkspacesClientElement",
|
|
2664
|
+
"summary": "Exports workspace chooser client element component."
|
|
2665
|
+
},
|
|
2666
|
+
{
|
|
2667
|
+
"subpath": "./client/components/WorkspaceMembersClientElement",
|
|
2668
|
+
"summary": "Exports workspace members admin client element component."
|
|
2669
|
+
},
|
|
2670
|
+
{
|
|
2671
|
+
"subpath": "./client/composables/useAddEdit",
|
|
2672
|
+
"summary": "Exports add/edit operation composable."
|
|
2673
|
+
},
|
|
2674
|
+
{
|
|
2675
|
+
"subpath": "./client/composables/useList",
|
|
2676
|
+
"summary": "Exports list operation composable."
|
|
2677
|
+
},
|
|
2678
|
+
{
|
|
2679
|
+
"subpath": "./client/composables/useCommand",
|
|
2680
|
+
"summary": "Exports command operation composable."
|
|
2681
|
+
},
|
|
2682
|
+
{
|
|
2683
|
+
"subpath": "./client/composables/useView",
|
|
2684
|
+
"summary": "Exports read/view operation composable."
|
|
2685
|
+
},
|
|
2686
|
+
{
|
|
2687
|
+
"subpath": "./client/composables/usePagedCollection",
|
|
2688
|
+
"summary": "Exports paged collection query composable."
|
|
2689
|
+
},
|
|
2690
|
+
{
|
|
2691
|
+
"subpath": "./client/composables/usePaths",
|
|
2692
|
+
"summary": "Exports surface/workspace path resolver composable."
|
|
2693
|
+
},
|
|
2694
|
+
{
|
|
2695
|
+
"subpath": "./client/composables/useAccountSettingsRuntime",
|
|
2696
|
+
"summary": "Exports account settings runtime composable for app-owned settings UI."
|
|
2697
|
+
},
|
|
2698
|
+
{
|
|
2699
|
+
"subpath": "./client/composables/useWorkspaceRouteContext",
|
|
2700
|
+
"summary": "Exports workspace route context composable."
|
|
2701
|
+
},
|
|
2702
|
+
{
|
|
2703
|
+
"subpath": "./client/support/realtimeWorkspace",
|
|
2704
|
+
"summary": "Exports workspace realtime event helpers."
|
|
2705
|
+
}
|
|
2706
|
+
],
|
|
2707
|
+
"containerTokens": {
|
|
2708
|
+
"server": [],
|
|
2709
|
+
"client": [
|
|
2710
|
+
"users.web.workspace.selector",
|
|
2711
|
+
"users.web.workspace.tools.widget",
|
|
2712
|
+
"users.web.shell.menu-link-item",
|
|
2713
|
+
"users.web.shell.surface-aware-menu-link-item",
|
|
2714
|
+
"users.web.profile.menu.surface-switch-item",
|
|
2715
|
+
"users.web.workspace-settings.menu-item",
|
|
2716
|
+
"users.web.workspace-members.menu-item",
|
|
2717
|
+
"users.web.profile.element",
|
|
2718
|
+
"users.web.members-admin.element",
|
|
2719
|
+
"users.web.workspace-settings.element",
|
|
2720
|
+
"users.web.bootstrap-placement.runtime"
|
|
2721
|
+
]
|
|
2722
|
+
}
|
|
2723
|
+
},
|
|
2724
|
+
"ui": {
|
|
2725
|
+
"placements": {
|
|
2726
|
+
"outlets": [
|
|
2727
|
+
{
|
|
2728
|
+
"host": "workspace-tools",
|
|
2729
|
+
"position": "primary-menu",
|
|
2730
|
+
"surfaces": [
|
|
2731
|
+
"admin"
|
|
2732
|
+
],
|
|
2733
|
+
"source": "src/client/components/UsersWorkspaceToolsWidget.vue"
|
|
2734
|
+
},
|
|
2735
|
+
{
|
|
2736
|
+
"host": "workspace-settings",
|
|
2737
|
+
"position": "forms",
|
|
2738
|
+
"surfaces": [
|
|
2739
|
+
"admin"
|
|
2740
|
+
],
|
|
2741
|
+
"source": "templates/src/pages/admin/workspace/settings/index.vue"
|
|
2742
|
+
},
|
|
2743
|
+
{
|
|
2744
|
+
"host": "console-settings",
|
|
2745
|
+
"position": "forms",
|
|
2746
|
+
"surfaces": [
|
|
2747
|
+
"console"
|
|
2748
|
+
],
|
|
2749
|
+
"source": "templates/src/pages/console/settings/index.vue"
|
|
2750
|
+
}
|
|
2751
|
+
],
|
|
2752
|
+
"contributions": [
|
|
2753
|
+
{
|
|
2754
|
+
"id": "users.workspace.selector",
|
|
2755
|
+
"host": "shell-layout",
|
|
2756
|
+
"position": "top-left",
|
|
2757
|
+
"surfaces": [
|
|
2758
|
+
"*"
|
|
2759
|
+
],
|
|
2760
|
+
"order": 200,
|
|
2761
|
+
"componentToken": "users.web.workspace.selector",
|
|
2762
|
+
"when": "auth.authenticated === true",
|
|
2763
|
+
"source": "mutations.text#users-web-placement-block"
|
|
2764
|
+
},
|
|
2765
|
+
{
|
|
2766
|
+
"id": "users.account.invites.cue",
|
|
2767
|
+
"host": "shell-layout",
|
|
2768
|
+
"position": "top-right",
|
|
2769
|
+
"surfaces": [
|
|
2770
|
+
"*"
|
|
2771
|
+
],
|
|
2772
|
+
"order": 850,
|
|
2773
|
+
"componentToken": "local.main.account.pending-invites.cue",
|
|
2774
|
+
"when": "auth.authenticated === true",
|
|
2775
|
+
"source": "mutations.text#users-web-placement-block"
|
|
2776
|
+
},
|
|
2777
|
+
{
|
|
2778
|
+
"id": "users.profile.menu.surface-switch",
|
|
2779
|
+
"host": "auth-profile-menu",
|
|
2780
|
+
"position": "primary-menu",
|
|
2781
|
+
"surfaces": [
|
|
2782
|
+
"*"
|
|
2783
|
+
],
|
|
2784
|
+
"order": 100,
|
|
2785
|
+
"componentToken": "users.web.profile.menu.surface-switch-item",
|
|
2786
|
+
"when": "auth.authenticated === true",
|
|
2787
|
+
"source": "mutations.text#users-web-profile-surface-switch-placement"
|
|
2788
|
+
},
|
|
2789
|
+
{
|
|
2790
|
+
"id": "users.profile.menu.settings",
|
|
2791
|
+
"host": "auth-profile-menu",
|
|
2792
|
+
"position": "primary-menu",
|
|
2793
|
+
"surfaces": [
|
|
2794
|
+
"*"
|
|
2795
|
+
],
|
|
2796
|
+
"order": 500,
|
|
2797
|
+
"componentToken": "users.web.shell.menu-link-item",
|
|
2798
|
+
"when": "auth.authenticated === true",
|
|
2799
|
+
"source": "mutations.text#users-web-profile-settings-placement"
|
|
2800
|
+
},
|
|
2801
|
+
{
|
|
2802
|
+
"id": "users.workspace.tools.widget",
|
|
2803
|
+
"host": "shell-layout",
|
|
2804
|
+
"position": "top-right",
|
|
2805
|
+
"surfaces": [
|
|
2806
|
+
"admin"
|
|
2807
|
+
],
|
|
2808
|
+
"order": 900,
|
|
2809
|
+
"componentToken": "users.web.workspace.tools.widget",
|
|
2810
|
+
"source": "mutations.text#users-web-placement-block"
|
|
2811
|
+
},
|
|
2812
|
+
{
|
|
2813
|
+
"id": "users.workspace.menu.workspace-settings",
|
|
2814
|
+
"host": "workspace-tools",
|
|
2815
|
+
"position": "primary-menu",
|
|
2816
|
+
"surfaces": [
|
|
2817
|
+
"admin"
|
|
2818
|
+
],
|
|
2819
|
+
"order": 100,
|
|
2820
|
+
"componentToken": "users.web.workspace-settings.menu-item",
|
|
2821
|
+
"source": "mutations.text#users-web-placement-block"
|
|
2822
|
+
},
|
|
2823
|
+
{
|
|
2824
|
+
"id": "users.workspace.menu.members",
|
|
2825
|
+
"host": "workspace-tools",
|
|
2826
|
+
"position": "primary-menu",
|
|
2827
|
+
"surfaces": [
|
|
2828
|
+
"admin"
|
|
2829
|
+
],
|
|
2830
|
+
"order": 200,
|
|
2831
|
+
"componentToken": "users.web.workspace-members.menu-item",
|
|
2832
|
+
"source": "mutations.text#users-web-placement-block"
|
|
2833
|
+
},
|
|
2834
|
+
{
|
|
2835
|
+
"id": "users.console.menu.settings",
|
|
2836
|
+
"host": "shell-layout",
|
|
2837
|
+
"position": "primary-menu",
|
|
2838
|
+
"surfaces": [
|
|
2839
|
+
"console"
|
|
2840
|
+
],
|
|
2841
|
+
"order": 100,
|
|
2842
|
+
"componentToken": "users.web.shell.menu-link-item",
|
|
2843
|
+
"when": "auth.authenticated === true",
|
|
2844
|
+
"source": "mutations.text#users-web-console-settings-placement"
|
|
2845
|
+
},
|
|
2846
|
+
{
|
|
2847
|
+
"id": "users.workspace.settings.form",
|
|
2848
|
+
"host": "workspace-settings",
|
|
2849
|
+
"position": "forms",
|
|
2850
|
+
"surfaces": [
|
|
2851
|
+
"admin"
|
|
2852
|
+
],
|
|
2853
|
+
"order": 100,
|
|
2854
|
+
"componentToken": "users.web.workspace-settings.element",
|
|
2855
|
+
"source": "mutations.text#users-web-workspace-settings-form-placement"
|
|
2856
|
+
}
|
|
2857
|
+
]
|
|
2858
|
+
}
|
|
2859
|
+
}
|
|
2860
|
+
},
|
|
2861
|
+
"mutations": {
|
|
2862
|
+
"dependencies": {
|
|
2863
|
+
"runtime": {
|
|
2864
|
+
"@tanstack/vue-query": "^5.90.5",
|
|
2865
|
+
"@mdi/js": "^7.4.47",
|
|
2866
|
+
"@uppy/compressor": "^3.1.0",
|
|
2867
|
+
"@uppy/core": "^5.2.0",
|
|
2868
|
+
"@uppy/dashboard": "^5.1.1",
|
|
2869
|
+
"@uppy/image-editor": "^4.2.0",
|
|
2870
|
+
"@uppy/xhr-upload": "^5.1.1",
|
|
2871
|
+
"@jskit-ai/http-runtime": "0.1.4",
|
|
2872
|
+
"@jskit-ai/realtime": "0.1.4",
|
|
2873
|
+
"@jskit-ai/kernel": "0.1.4",
|
|
2874
|
+
"@jskit-ai/shell-web": "0.1.4",
|
|
2875
|
+
"@jskit-ai/users-core": "0.1.4",
|
|
2876
|
+
"vuetify": "^4.0.0"
|
|
2877
|
+
},
|
|
2878
|
+
"dev": {}
|
|
2879
|
+
},
|
|
2880
|
+
"packageJson": {
|
|
2881
|
+
"scripts": {}
|
|
2882
|
+
},
|
|
2883
|
+
"procfile": {},
|
|
2884
|
+
"files": [
|
|
2885
|
+
{
|
|
2886
|
+
"from": "templates/src/pages/account/index.vue",
|
|
2887
|
+
"to": "src/pages/account/index.vue",
|
|
2888
|
+
"reason": "Install app-owned account surface root page scaffold.",
|
|
2889
|
+
"category": "users-web",
|
|
2890
|
+
"id": "users-web-page-account-root"
|
|
2891
|
+
},
|
|
2892
|
+
{
|
|
2893
|
+
"from": "templates/src/components/account/settings/AccountSettingsClientElement.vue",
|
|
2894
|
+
"to": "src/components/account/settings/AccountSettingsClientElement.vue",
|
|
2895
|
+
"reason": "Install app-owned account settings container component scaffold.",
|
|
2896
|
+
"category": "users-web",
|
|
2897
|
+
"id": "users-web-component-account-settings-root"
|
|
2898
|
+
},
|
|
2899
|
+
{
|
|
2900
|
+
"from": "templates/src/components/account/settings/AccountSettingsProfileSection.vue",
|
|
2901
|
+
"to": "src/components/account/settings/AccountSettingsProfileSection.vue",
|
|
2902
|
+
"reason": "Install app-owned account settings profile section scaffold.",
|
|
2903
|
+
"category": "users-web",
|
|
2904
|
+
"id": "users-web-component-account-settings-profile"
|
|
2905
|
+
},
|
|
2906
|
+
{
|
|
2907
|
+
"from": "templates/src/components/account/settings/AccountSettingsPreferencesSection.vue",
|
|
2908
|
+
"to": "src/components/account/settings/AccountSettingsPreferencesSection.vue",
|
|
2909
|
+
"reason": "Install app-owned account settings preferences section scaffold.",
|
|
2910
|
+
"category": "users-web",
|
|
2911
|
+
"id": "users-web-component-account-settings-preferences"
|
|
2912
|
+
},
|
|
2913
|
+
{
|
|
2914
|
+
"from": "templates/src/components/account/settings/AccountSettingsNotificationsSection.vue",
|
|
2915
|
+
"to": "src/components/account/settings/AccountSettingsNotificationsSection.vue",
|
|
2916
|
+
"reason": "Install app-owned account settings notifications section scaffold.",
|
|
2917
|
+
"category": "users-web",
|
|
2918
|
+
"id": "users-web-component-account-settings-notifications"
|
|
2919
|
+
},
|
|
2920
|
+
{
|
|
2921
|
+
"from": "templates/src/components/account/settings/AccountSettingsInvitesSection.vue",
|
|
2922
|
+
"to": "src/components/account/settings/AccountSettingsInvitesSection.vue",
|
|
2923
|
+
"reason": "Install app-owned account settings invites section scaffold.",
|
|
2924
|
+
"category": "users-web",
|
|
2925
|
+
"id": "users-web-component-account-settings-invites"
|
|
2926
|
+
},
|
|
2927
|
+
{
|
|
2928
|
+
"from": "templates/packages/main/src/client/components/AccountPendingInvitesCue.vue",
|
|
2929
|
+
"to": "packages/main/src/client/components/AccountPendingInvitesCue.vue",
|
|
2930
|
+
"reason": "Install app-owned account pending invites cue component scaffold.",
|
|
2931
|
+
"category": "users-web",
|
|
2932
|
+
"id": "users-web-main-component-account-pending-invites-cue"
|
|
2933
|
+
},
|
|
2934
|
+
{
|
|
2935
|
+
"from": "templates/src/components/WorkspaceNotFoundCard.vue",
|
|
2936
|
+
"to": "src/components/WorkspaceNotFoundCard.vue",
|
|
2937
|
+
"reason": "Install app-owned workspace not-found card component used by workspace-dependent surfaces.",
|
|
2938
|
+
"category": "users-web",
|
|
2939
|
+
"id": "users-web-component-workspace-not-found-card",
|
|
2940
|
+
"when": {
|
|
2941
|
+
"config": "tenancyMode",
|
|
2942
|
+
"in": [
|
|
2943
|
+
"personal",
|
|
2944
|
+
"workspace"
|
|
2945
|
+
]
|
|
2946
|
+
}
|
|
2947
|
+
},
|
|
2948
|
+
{
|
|
2949
|
+
"from": "templates/src/composables/useWorkspaceNotFoundState.js",
|
|
2950
|
+
"to": "src/composables/useWorkspaceNotFoundState.js",
|
|
2951
|
+
"reason": "Install app-owned workspace bootstrap status composable for workspace-dependent surfaces.",
|
|
2952
|
+
"category": "users-web",
|
|
2953
|
+
"id": "users-web-composable-workspace-not-found-state",
|
|
2954
|
+
"when": {
|
|
2955
|
+
"config": "tenancyMode",
|
|
2956
|
+
"in": [
|
|
2957
|
+
"personal",
|
|
2958
|
+
"workspace"
|
|
2959
|
+
]
|
|
2960
|
+
}
|
|
2961
|
+
},
|
|
2962
|
+
{
|
|
2963
|
+
"from": "templates/src/surfaces/app/root.vue",
|
|
2964
|
+
"toSurface": "app",
|
|
2965
|
+
"toSurfaceRoot": true,
|
|
2966
|
+
"reason": "Install workspace app surface wrapper shell for users-web.",
|
|
2967
|
+
"category": "users-web",
|
|
2968
|
+
"id": "users-web-page-app-wrapper",
|
|
2969
|
+
"when": {
|
|
2970
|
+
"config": "tenancyMode",
|
|
2971
|
+
"in": [
|
|
2972
|
+
"personal",
|
|
2973
|
+
"workspace"
|
|
2974
|
+
]
|
|
2975
|
+
}
|
|
2976
|
+
},
|
|
2977
|
+
{
|
|
2978
|
+
"from": "templates/src/surfaces/app/index.vue",
|
|
2979
|
+
"toSurface": "app",
|
|
2980
|
+
"toSurfacePath": "index.vue",
|
|
2981
|
+
"reason": "Install workspace app surface starter page scaffold for users-web.",
|
|
2982
|
+
"category": "users-web",
|
|
2983
|
+
"id": "users-web-page-app-index",
|
|
2984
|
+
"when": {
|
|
2985
|
+
"config": "tenancyMode",
|
|
2986
|
+
"in": [
|
|
2987
|
+
"personal",
|
|
2988
|
+
"workspace"
|
|
2989
|
+
]
|
|
2990
|
+
}
|
|
2991
|
+
},
|
|
2992
|
+
{
|
|
2993
|
+
"from": "templates/src/surfaces/admin/root.vue",
|
|
2994
|
+
"toSurface": "admin",
|
|
2995
|
+
"toSurfaceRoot": true,
|
|
2996
|
+
"reason": "Install workspace admin surface wrapper shell for users-web.",
|
|
2997
|
+
"category": "users-web",
|
|
2998
|
+
"id": "users-web-page-admin-wrapper",
|
|
2999
|
+
"when": {
|
|
3000
|
+
"config": "tenancyMode",
|
|
3001
|
+
"in": [
|
|
3002
|
+
"personal",
|
|
3003
|
+
"workspace"
|
|
3004
|
+
]
|
|
3005
|
+
}
|
|
3006
|
+
},
|
|
3007
|
+
{
|
|
3008
|
+
"from": "templates/src/surfaces/admin/index.vue",
|
|
3009
|
+
"toSurface": "admin",
|
|
3010
|
+
"toSurfacePath": "index.vue",
|
|
3011
|
+
"reason": "Install workspace admin surface starter page scaffold for users-web.",
|
|
3012
|
+
"category": "users-web",
|
|
3013
|
+
"id": "users-web-page-admin-index",
|
|
3014
|
+
"when": {
|
|
3015
|
+
"config": "tenancyMode",
|
|
3016
|
+
"in": [
|
|
3017
|
+
"personal",
|
|
3018
|
+
"workspace"
|
|
3019
|
+
]
|
|
3020
|
+
}
|
|
3021
|
+
},
|
|
3022
|
+
{
|
|
3023
|
+
"from": "templates/src/pages/admin/members/index.vue",
|
|
3024
|
+
"toSurface": "admin",
|
|
3025
|
+
"toSurfacePath": "members/index.vue",
|
|
3026
|
+
"reason": "Install admin members starter page scaffold for users-web members UI.",
|
|
3027
|
+
"category": "users-web",
|
|
3028
|
+
"id": "users-web-page-admin-members",
|
|
3029
|
+
"when": {
|
|
3030
|
+
"config": "tenancyMode",
|
|
3031
|
+
"in": [
|
|
3032
|
+
"personal",
|
|
3033
|
+
"workspace"
|
|
3034
|
+
]
|
|
3035
|
+
}
|
|
3036
|
+
},
|
|
3037
|
+
{
|
|
3038
|
+
"from": "templates/src/pages/admin/workspace/settings/index.vue",
|
|
3039
|
+
"toSurface": "admin",
|
|
3040
|
+
"toSurfacePath": "workspace/settings/index.vue",
|
|
3041
|
+
"reason": "Install workspace settings page scaffold for users-web workspace admin UI.",
|
|
3042
|
+
"category": "users-web",
|
|
3043
|
+
"id": "users-web-page-admin-workspace-settings",
|
|
3044
|
+
"when": {
|
|
3045
|
+
"config": "tenancyMode",
|
|
3046
|
+
"in": [
|
|
3047
|
+
"personal",
|
|
3048
|
+
"workspace"
|
|
3049
|
+
]
|
|
3050
|
+
}
|
|
3051
|
+
},
|
|
3052
|
+
{
|
|
3053
|
+
"from": "templates/src/pages/console/settings/index.vue",
|
|
3054
|
+
"toSurface": "console",
|
|
3055
|
+
"toSurfacePath": "settings/index.vue",
|
|
3056
|
+
"reason": "Install console settings page scaffold for users-web console UI.",
|
|
3057
|
+
"category": "users-web",
|
|
3058
|
+
"id": "users-web-page-console-settings"
|
|
3059
|
+
}
|
|
3060
|
+
],
|
|
3061
|
+
"text": [
|
|
3062
|
+
{
|
|
3063
|
+
"op": "append-text",
|
|
3064
|
+
"file": "config/public.js",
|
|
3065
|
+
"position": "bottom",
|
|
3066
|
+
"skipIfContains": "config.surfaceDefinitions.account = {",
|
|
3067
|
+
"value": "\nconfig.surfaceDefinitions.account = {\n id: \"account\",\n label: \"Account\",\n pagesRoot: \"account\",\n enabled: true,\n requiresAuth: true,\n requiresWorkspace: false,\n origin: \"\"\n};\n",
|
|
3068
|
+
"reason": "Register account surface definition in public surface config.",
|
|
3069
|
+
"category": "users-web",
|
|
3070
|
+
"id": "users-web-surface-config-account"
|
|
3071
|
+
},
|
|
3072
|
+
{
|
|
3073
|
+
"op": "append-text",
|
|
3074
|
+
"file": "src/placement.js",
|
|
3075
|
+
"position": "bottom",
|
|
3076
|
+
"skipIfContains": "id: \"users.workspace.selector\"",
|
|
3077
|
+
"value": "\naddPlacement({\n id: \"users.workspace.selector\",\n host: \"shell-layout\",\n position: \"top-left\",\n surfaces: [\"*\"],\n order: 200,\n componentToken: \"users.web.workspace.selector\",\n props: {\n allowOnNonWorkspaceSurface: true,\n targetSurfaceId: \"app\"\n },\n when: ({ auth }) => {\n return Boolean(auth?.authenticated);\n }\n});\n\naddPlacement({\n id: \"users.account.invites.cue\",\n host: \"shell-layout\",\n position: \"top-right\",\n surfaces: [\"*\"],\n order: 850,\n componentToken: \"local.main.account.pending-invites.cue\",\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n\naddPlacement({\n id: \"users.workspace.tools.widget\",\n host: \"shell-layout\",\n position: \"top-right\",\n surfaces: [\"admin\"],\n order: 900,\n componentToken: \"users.web.workspace.tools.widget\"\n});\n\naddPlacement({\n id: \"users.workspace.menu.workspace-settings\",\n host: \"workspace-tools\",\n position: \"primary-menu\",\n surfaces: [\"admin\"],\n order: 100,\n componentToken: \"users.web.workspace-settings.menu-item\"\n});\n\naddPlacement({\n id: \"users.workspace.menu.members\",\n host: \"workspace-tools\",\n position: \"primary-menu\",\n surfaces: [\"admin\"],\n order: 200,\n componentToken: \"users.web.workspace-members.menu-item\"\n});\n",
|
|
3078
|
+
"reason": "Append users-web placement entries into app-owned placement registry.",
|
|
3079
|
+
"category": "users-web",
|
|
3080
|
+
"id": "users-web-placement-block",
|
|
3081
|
+
"when": {
|
|
3082
|
+
"config": "tenancyMode",
|
|
3083
|
+
"in": [
|
|
3084
|
+
"personal",
|
|
3085
|
+
"workspace"
|
|
3086
|
+
]
|
|
3087
|
+
}
|
|
3088
|
+
},
|
|
3089
|
+
{
|
|
3090
|
+
"op": "append-text",
|
|
3091
|
+
"file": "packages/main/src/client/providers/MainClientProvider.js",
|
|
3092
|
+
"position": "top",
|
|
3093
|
+
"skipIfContains": "import AccountPendingInvitesCue from \"../components/AccountPendingInvitesCue.vue\";",
|
|
3094
|
+
"value": "import AccountPendingInvitesCue from \"../components/AccountPendingInvitesCue.vue\";\n",
|
|
3095
|
+
"reason": "Bind app-owned account pending invites cue component into local main client provider imports.",
|
|
3096
|
+
"category": "users-web",
|
|
3097
|
+
"id": "users-web-main-client-provider-account-invites-import"
|
|
3098
|
+
},
|
|
3099
|
+
{
|
|
3100
|
+
"op": "append-text",
|
|
3101
|
+
"file": "packages/main/src/client/providers/MainClientProvider.js",
|
|
3102
|
+
"position": "bottom",
|
|
3103
|
+
"skipIfContains": "registerMainClientComponent(\"local.main.account.pending-invites.cue\", () => AccountPendingInvitesCue);",
|
|
3104
|
+
"value": "\nregisterMainClientComponent(\"local.main.account.pending-invites.cue\", () => AccountPendingInvitesCue);\n",
|
|
3105
|
+
"reason": "Bind app-owned account pending invites cue component token into local main client provider registry.",
|
|
3106
|
+
"category": "users-web",
|
|
3107
|
+
"id": "users-web-main-client-provider-account-invites-register"
|
|
3108
|
+
},
|
|
3109
|
+
{
|
|
3110
|
+
"op": "append-text",
|
|
3111
|
+
"file": "src/placement.js",
|
|
3112
|
+
"position": "bottom",
|
|
3113
|
+
"skipIfContains": "id: \"users.profile.menu.surface-switch\"",
|
|
3114
|
+
"value": "\naddPlacement({\n id: \"users.profile.menu.surface-switch\",\n host: \"auth-profile-menu\",\n position: \"primary-menu\",\n surfaces: [\"*\"],\n order: 100,\n componentToken: \"users.web.profile.menu.surface-switch-item\",\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
|
|
3115
|
+
"reason": "Append users-web profile surface switch placement into app-owned placement registry.",
|
|
3116
|
+
"category": "users-web",
|
|
3117
|
+
"id": "users-web-profile-surface-switch-placement"
|
|
3118
|
+
},
|
|
3119
|
+
{
|
|
3120
|
+
"op": "append-text",
|
|
3121
|
+
"file": "src/placement.js",
|
|
3122
|
+
"position": "bottom",
|
|
3123
|
+
"skipIfContains": "id: \"users.profile.menu.settings\"",
|
|
3124
|
+
"value": "\naddPlacement({\n id: \"users.profile.menu.settings\",\n host: \"auth-profile-menu\",\n position: \"primary-menu\",\n surfaces: [\"*\"],\n order: 500,\n componentToken: \"users.web.shell.menu-link-item\",\n props: {\n label: \"Settings\",\n to: \"/account\"\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
|
|
3125
|
+
"reason": "Append users-web profile settings menu placement into app-owned placement registry.",
|
|
3126
|
+
"category": "users-web",
|
|
3127
|
+
"id": "users-web-profile-settings-placement"
|
|
3128
|
+
},
|
|
3129
|
+
{
|
|
3130
|
+
"op": "append-text",
|
|
3131
|
+
"file": "src/placement.js",
|
|
3132
|
+
"position": "bottom",
|
|
3133
|
+
"skipIfContains": "id: \"users.console.menu.settings\"",
|
|
3134
|
+
"value": "\naddPlacement({\n id: \"users.console.menu.settings\",\n host: \"shell-layout\",\n position: \"primary-menu\",\n surfaces: [\"console\"],\n order: 100,\n componentToken: \"users.web.shell.menu-link-item\",\n props: {\n label: \"Settings\",\n to: \"/console/settings\",\n icon: \"mdi-cog-outline\"\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n});\n",
|
|
3135
|
+
"reason": "Append users-web console settings menu placement into app-owned placement registry.",
|
|
3136
|
+
"category": "users-web",
|
|
3137
|
+
"id": "users-web-console-settings-placement"
|
|
3138
|
+
},
|
|
3139
|
+
{
|
|
3140
|
+
"op": "append-text",
|
|
3141
|
+
"file": "src/placement.js",
|
|
3142
|
+
"position": "bottom",
|
|
3143
|
+
"skipIfContains": "id: \"users.workspace.settings.form\"",
|
|
3144
|
+
"value": "\naddPlacement({\n id: \"users.workspace.settings.form\",\n host: \"workspace-settings\",\n position: \"forms\",\n surfaces: [\"admin\"],\n order: 100,\n componentToken: \"users.web.workspace-settings.element\"\n});\n",
|
|
3145
|
+
"reason": "Append users-web workspace settings form placement into app-owned placement registry.",
|
|
3146
|
+
"category": "users-web",
|
|
3147
|
+
"id": "users-web-workspace-settings-form-placement",
|
|
3148
|
+
"when": {
|
|
3149
|
+
"config": "tenancyMode",
|
|
3150
|
+
"in": [
|
|
3151
|
+
"personal",
|
|
3152
|
+
"workspace"
|
|
3153
|
+
]
|
|
3154
|
+
}
|
|
3155
|
+
}
|
|
3156
|
+
]
|
|
3157
|
+
}
|
|
3158
|
+
}
|
|
3159
|
+
}
|
|
3160
|
+
]
|
|
3161
|
+
}
|