minutework 0.1.34 → 0.1.36
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/EXTERNAL_ALPHA.md +8 -6
- package/README.md +1 -1
- package/assets/claude-local/CLAUDE.md.template +12 -8
- package/assets/templates/mobile-app/package.json +1 -0
- package/assets/templates/mobile-app/src/mw/client.ts +29 -232
- package/assets/templates/mobile-app/src/mw/session.ts +6 -2
- package/assets/templates/next-tenant-app/.env.example +2 -8
- package/assets/templates/next-tenant-app/README.md +4 -0
- package/assets/templates/next-tenant-app/src/app/app/demo/page.tsx +1 -7
- package/assets/templates/next-tenant-app/src/app/app/layout.tsx +9 -1
- package/assets/templates/next-tenant-app/src/features/shell/components/authenticated-app-layout-shell.tsx +181 -0
- package/assets/templates/next-tenant-app/src/features/shell/components/private-app-shell.tsx +3 -113
- package/assets/templates/next-tenant-app/src/mw/mock.test.ts +2 -1
- package/assets/templates/next-tenant-app/src/mw/mock.ts +3 -1
- package/assets/templates/next-tenant-app/tools/template/validate-route-contract.mjs +120 -1
- package/assets/templates/next-tenant-app/tools/template/with-public-site-fixture.mjs +28 -114
- package/assets/templates/next-tenant-app/vitest.config.ts +2 -6
- package/dist/runtime-package.d.ts +2 -1
- package/dist/runtime-package.js +12 -4
- package/dist/runtime-package.js.map +1 -1
- package/dist/workspace-bootstrap.js +2 -5
- package/dist/workspace-bootstrap.js.map +1 -1
- package/package.json +1 -1
- package/vendor/workspace-mcp/types.d.ts +27 -0
- package/assets/templates/mobile-app/src/mw/contracts.ts +0 -79
- package/assets/templates/mobile-app/src/mw/endpoints.ts +0 -42
package/assets/templates/next-tenant-app/src/features/shell/components/private-app-shell.tsx
CHANGED
|
@@ -1,120 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { startTransition } from "react";
|
|
4
|
-
import Link from "next/link";
|
|
5
|
-
import { useRouter } from "next/navigation";
|
|
6
|
-
import { LayoutDashboard, LogOut, PlaySquare } from "lucide-react";
|
|
7
|
-
|
|
8
|
-
import { PanelFrame } from "@/design-system/patterns/panel-frame";
|
|
9
|
-
import { ThemeModeToggle } from "@/design-system/patterns/theme-mode-toggle";
|
|
10
|
-
import { Button } from "@/design-system/primitives/button";
|
|
11
3
|
import { TenantDashboard } from "@/features/dashboard/components/tenant-dashboard";
|
|
12
|
-
import {
|
|
13
|
-
import { useMinuteWorkAuth, useMinuteWorkSession } from "@minutework/web-auth/react";
|
|
4
|
+
import { useAuthenticatedTenantCustomerSession } from "@/features/shell/components/authenticated-app-layout-shell";
|
|
14
5
|
|
|
15
6
|
export function PrivateAppShell({ appName }: { appName: string }) {
|
|
16
|
-
const
|
|
17
|
-
const { logout } = useMinuteWorkAuth();
|
|
18
|
-
const { session, loading, authenticated, emailVerificationRequired } =
|
|
19
|
-
useMinuteWorkSession();
|
|
20
|
-
|
|
21
|
-
function redirectToLogin() {
|
|
22
|
-
startTransition(() => {
|
|
23
|
-
router.replace(appRoutes.login);
|
|
24
|
-
router.refresh();
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async function handleLogout() {
|
|
29
|
-
await logout().catch(() => undefined);
|
|
30
|
-
redirectToLogin();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (loading) {
|
|
34
|
-
return (
|
|
35
|
-
<main className="min-h-screen bg-background text-foreground">
|
|
36
|
-
<div className="mx-auto flex min-h-screen max-w-5xl items-center px-6 py-10">
|
|
37
|
-
<PanelFrame tone="floating" radius="xl" padding="lg" className="w-full">
|
|
38
|
-
<p className="text-sm text-muted-foreground">Loading session</p>
|
|
39
|
-
</PanelFrame>
|
|
40
|
-
</div>
|
|
41
|
-
</main>
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (!authenticated || !session?.customer_membership) {
|
|
46
|
-
return (
|
|
47
|
-
<main className="min-h-screen bg-background text-foreground">
|
|
48
|
-
<div className="mx-auto flex min-h-screen max-w-5xl items-center px-6 py-10">
|
|
49
|
-
<PanelFrame tone="floating" radius="xl" padding="lg" className="w-full space-y-4">
|
|
50
|
-
<div className="space-y-2">
|
|
51
|
-
<h1 className="text-3xl font-semibold tracking-tight">
|
|
52
|
-
{emailVerificationRequired
|
|
53
|
-
? "Email verification required"
|
|
54
|
-
: "Log in to continue"}
|
|
55
|
-
</h1>
|
|
56
|
-
<p className="text-sm leading-7 text-muted-foreground">
|
|
57
|
-
{emailVerificationRequired
|
|
58
|
-
? "Finish verification from your email before opening the workspace."
|
|
59
|
-
: "This area is available to verified customers."}
|
|
60
|
-
</p>
|
|
61
|
-
</div>
|
|
62
|
-
<Button onClick={redirectToLogin} className="w-fit">
|
|
63
|
-
Open login
|
|
64
|
-
</Button>
|
|
65
|
-
</PanelFrame>
|
|
66
|
-
</div>
|
|
67
|
-
</main>
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return (
|
|
72
|
-
<main className="min-h-screen bg-background text-foreground">
|
|
73
|
-
<div className="mx-auto flex min-h-screen max-w-7xl flex-col gap-6 px-6 py-8">
|
|
74
|
-
<header className="flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between">
|
|
75
|
-
<div className="space-y-2">
|
|
76
|
-
<p className="text-sm font-semibold uppercase tracking-widest text-muted-foreground">
|
|
77
|
-
{session.tenant.name}
|
|
78
|
-
</p>
|
|
79
|
-
<h1 className="max-w-3xl text-4xl font-semibold tracking-tight text-balance sm:text-5xl">
|
|
80
|
-
{appName}
|
|
81
|
-
</h1>
|
|
82
|
-
<p className="max-w-3xl text-base leading-7 text-muted-foreground sm:text-lg">
|
|
83
|
-
Signed in as {session.user?.email || session.user?.username}.
|
|
84
|
-
</p>
|
|
85
|
-
</div>
|
|
86
|
-
|
|
87
|
-
<div className="flex flex-col gap-3 sm:flex-row sm:items-start">
|
|
88
|
-
<ThemeModeToggle className="w-full sm:w-72" />
|
|
89
|
-
<Button
|
|
90
|
-
type="button"
|
|
91
|
-
variant="outline"
|
|
92
|
-
className="gap-2"
|
|
93
|
-
onClick={handleLogout}
|
|
94
|
-
>
|
|
95
|
-
<LogOut className="size-4" />
|
|
96
|
-
Log out
|
|
97
|
-
</Button>
|
|
98
|
-
</div>
|
|
99
|
-
</header>
|
|
100
|
-
|
|
101
|
-
<nav className="flex flex-wrap gap-2">
|
|
102
|
-
<Button asChild variant="default">
|
|
103
|
-
<Link href={appRoutes.appHome}>
|
|
104
|
-
<LayoutDashboard className="size-4" />
|
|
105
|
-
Dashboard
|
|
106
|
-
</Link>
|
|
107
|
-
</Button>
|
|
108
|
-
<Button asChild variant="outline">
|
|
109
|
-
<Link href={appRoutes.demo}>
|
|
110
|
-
<PlaySquare className="size-4" />
|
|
111
|
-
Demo
|
|
112
|
-
</Link>
|
|
113
|
-
</Button>
|
|
114
|
-
</nav>
|
|
7
|
+
const session = useAuthenticatedTenantCustomerSession();
|
|
115
8
|
|
|
116
|
-
|
|
117
|
-
</div>
|
|
118
|
-
</main>
|
|
119
|
-
);
|
|
9
|
+
return <TenantDashboard appName={appName} session={session} />;
|
|
120
10
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
|
|
3
|
-
import { createIdempotencyKey } from "@/mw/client";
|
|
3
|
+
import { createIdempotencyKey, mwAppId } from "@/mw/client";
|
|
4
4
|
import { createTemplateMockMinuteWorkClient } from "@/mw/mock";
|
|
5
5
|
|
|
6
6
|
describe("MinuteWork SDK mock substrate", () => {
|
|
@@ -17,5 +17,6 @@ describe("MinuteWork SDK mock substrate", () => {
|
|
|
17
17
|
|
|
18
18
|
expect(queryResult.count).toBe(1);
|
|
19
19
|
expect(actionResult.created).toBe(true);
|
|
20
|
+
expect(client.appId).toBe(mwAppId);
|
|
20
21
|
});
|
|
21
22
|
});
|
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
import { createMockMinuteWorkClient } from "@minutework/web-auth/mock";
|
|
6
6
|
|
|
7
|
+
import { mwAppId } from "@/mw/client";
|
|
8
|
+
|
|
7
9
|
export function createTemplateMockMinuteWorkClient() {
|
|
8
10
|
return createMockMinuteWorkClient({
|
|
9
|
-
appId:
|
|
11
|
+
appId: mwAppId,
|
|
10
12
|
verified: true,
|
|
11
13
|
queryHandlers: {
|
|
12
14
|
"demo.list": () => ({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
|
|
@@ -22,6 +22,38 @@ const requiredPaths = [
|
|
|
22
22
|
"src/mw/provider.tsx",
|
|
23
23
|
"src/mw/mock.ts",
|
|
24
24
|
];
|
|
25
|
+
const appRoutesRoot = path.join(templateRoot, "src", "app", "app");
|
|
26
|
+
const appLayoutPath = path.join(appRoutesRoot, "layout.tsx");
|
|
27
|
+
const appLayoutSource = readFileSync(appLayoutPath, "utf8");
|
|
28
|
+
const appRoutePagePaths = collectNamedFiles(appRoutesRoot, new Set(["page.tsx"]));
|
|
29
|
+
const appRouteHandlerPaths = collectNamedFiles(appRoutesRoot, new Set(["route.ts", "route.tsx"]));
|
|
30
|
+
const guardedSurfaceSourcePaths = [
|
|
31
|
+
...collectSourceFiles(appRoutesRoot),
|
|
32
|
+
...collectSourceFiles(path.join(templateRoot, "src", "features")),
|
|
33
|
+
];
|
|
34
|
+
const allowedGuardPatternFiles = new Map([
|
|
35
|
+
[
|
|
36
|
+
"src/app/app/layout.tsx",
|
|
37
|
+
new Set(["AuthenticatedAppLayoutShell"]),
|
|
38
|
+
],
|
|
39
|
+
[
|
|
40
|
+
"src/features/auth/components/login-screen.tsx",
|
|
41
|
+
new Set(["useMinuteWorkAuth"]),
|
|
42
|
+
],
|
|
43
|
+
[
|
|
44
|
+
"src/features/shell/components/authenticated-app-layout-shell.tsx",
|
|
45
|
+
new Set([
|
|
46
|
+
"AuthenticatedAppLayoutShell",
|
|
47
|
+
"useMinuteWorkAuth",
|
|
48
|
+
"useMinuteWorkSession",
|
|
49
|
+
]),
|
|
50
|
+
],
|
|
51
|
+
]);
|
|
52
|
+
const forbiddenGuardPatterns = [
|
|
53
|
+
"useMinuteWorkSession",
|
|
54
|
+
"useMinuteWorkAuth",
|
|
55
|
+
"AuthenticatedAppLayoutShell",
|
|
56
|
+
];
|
|
25
57
|
|
|
26
58
|
const missingPaths = requiredPaths.filter(
|
|
27
59
|
(relativePath) => !existsSync(path.join(templateRoot, relativePath)),
|
|
@@ -35,4 +67,91 @@ if (missingPaths.length > 0) {
|
|
|
35
67
|
);
|
|
36
68
|
}
|
|
37
69
|
|
|
70
|
+
if (!appLayoutSource.includes("AuthenticatedAppLayoutShell")) {
|
|
71
|
+
throw new Error("src/app/app/layout.tsx must wrap all /app routes in AuthenticatedAppLayoutShell.");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (!appLayoutSource.includes("{children}")) {
|
|
75
|
+
throw new Error("src/app/app/layout.tsx must pass children through the authenticated layout guard.");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const appRouteRelativePaths = appRoutePagePaths.map((absolutePath) =>
|
|
79
|
+
path.relative(templateRoot, absolutePath),
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
if (!appRouteRelativePaths.includes(path.join("src", "app", "app", "demo", "page.tsx"))) {
|
|
83
|
+
throw new Error("Route contract must include /app/demo so the guarded layout cannot be bypassed.");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (appRouteHandlerPaths.length > 0) {
|
|
87
|
+
throw new Error(
|
|
88
|
+
`Route handlers under /app bypass the authenticated layout guard.\n${appRouteHandlerPaths
|
|
89
|
+
.map((absolutePath) => `- ${path.relative(templateRoot, absolutePath)}`)
|
|
90
|
+
.join("\n")}`,
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
for (const sourcePath of guardedSurfaceSourcePaths) {
|
|
95
|
+
const source = readFileSync(sourcePath, "utf8");
|
|
96
|
+
const relativePath = normalizePath(path.relative(templateRoot, sourcePath));
|
|
97
|
+
const allowedPatterns = allowedGuardPatternFiles.get(relativePath) ?? new Set();
|
|
98
|
+
const matchedPattern = forbiddenGuardPatterns.find(
|
|
99
|
+
(pattern) => source.includes(pattern) && !allowedPatterns.has(pattern),
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
if (matchedPattern) {
|
|
103
|
+
throw new Error(
|
|
104
|
+
`${relativePath} must not own guarded-surface auth wiring (${matchedPattern}); keep raw SDK auth/session hooks in src/features/shell/components/authenticated-app-layout-shell.tsx or the public login screen.`,
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
38
109
|
console.log("combined route contract is valid");
|
|
110
|
+
|
|
111
|
+
function collectNamedFiles(directory, names) {
|
|
112
|
+
const entries = readdirSync(directory, { withFileTypes: true });
|
|
113
|
+
const files = [];
|
|
114
|
+
|
|
115
|
+
for (const entry of entries) {
|
|
116
|
+
const absolutePath = path.join(directory, entry.name);
|
|
117
|
+
if (entry.isDirectory()) {
|
|
118
|
+
files.push(...collectNamedFiles(absolutePath, names));
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (!entry.isFile() || !names.has(entry.name)) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (!statSync(absolutePath).isFile()) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
files.push(absolutePath);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return files;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function collectSourceFiles(directory) {
|
|
134
|
+
const entries = readdirSync(directory, { withFileTypes: true });
|
|
135
|
+
const files = [];
|
|
136
|
+
|
|
137
|
+
for (const entry of entries) {
|
|
138
|
+
const absolutePath = path.join(directory, entry.name);
|
|
139
|
+
if (entry.isDirectory()) {
|
|
140
|
+
files.push(...collectSourceFiles(absolutePath));
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (!entry.isFile() || !/\.(tsx|ts)$/.test(entry.name)) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (!statSync(absolutePath).isFile()) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
files.push(absolutePath);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return files;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function normalizePath(value) {
|
|
156
|
+
return value.split(path.sep).join("/");
|
|
157
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { createServer } from "node:http";
|
|
3
2
|
|
|
4
3
|
const [command, ...args] = process.argv.slice(2);
|
|
5
4
|
const storybookHeapMb = process.env.MW_STORYBOOK_NODE_HEAP_MB ?? "768";
|
|
@@ -9,123 +8,38 @@ if (!command) {
|
|
|
9
8
|
process.exit(1);
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
footerBlurb: "Validation fixture content.",
|
|
18
|
-
primaryCta: {
|
|
19
|
-
label: "Sign In",
|
|
20
|
-
href: "/login",
|
|
21
|
-
},
|
|
22
|
-
secondaryCta: {
|
|
23
|
-
label: "Docs",
|
|
24
|
-
href: "/docs",
|
|
25
|
-
},
|
|
26
|
-
primaryNavigation: [
|
|
27
|
-
{ label: "Home", href: "/" },
|
|
28
|
-
{ label: "Pricing", href: "/pricing" },
|
|
29
|
-
{ label: "Docs", href: "/docs" },
|
|
30
|
-
{ label: "Blog", href: "/blog" },
|
|
31
|
-
],
|
|
32
|
-
collections: {
|
|
33
|
-
docs: {
|
|
34
|
-
eyebrow: "Docs",
|
|
35
|
-
title: "Documentation",
|
|
36
|
-
description: "Validation fixture docs collection.",
|
|
37
|
-
},
|
|
38
|
-
blog: {
|
|
39
|
-
eyebrow: "Blog",
|
|
40
|
-
title: "Updates",
|
|
41
|
-
description: "Validation fixture blog collection.",
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
marketingPages: [],
|
|
46
|
-
docs: [],
|
|
47
|
-
blog: [],
|
|
11
|
+
const childEnv = {
|
|
12
|
+
...process.env,
|
|
13
|
+
NEXT_PUBLIC_MW_APP_ID: process.env.NEXT_PUBLIC_MW_APP_ID ?? "tenant.app",
|
|
14
|
+
MW_TEMPLATE_APP_NAME: process.env.MW_TEMPLATE_APP_NAME ?? "Tenant App",
|
|
15
|
+
MW_PUBLIC_BASE_URL: process.env.MW_PUBLIC_BASE_URL ?? "https://public.example.com",
|
|
48
16
|
};
|
|
49
17
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const environment = requestUrl.searchParams.get("environment") ?? "preview";
|
|
62
|
-
const sourceBoundary = environment === "live" ? "runtime_live" : "runtime_preview";
|
|
18
|
+
if (
|
|
19
|
+
command === "storybook" &&
|
|
20
|
+
!/\bmax-old-space-size=/.test(childEnv.NODE_OPTIONS ?? "")
|
|
21
|
+
) {
|
|
22
|
+
childEnv.NODE_OPTIONS = [childEnv.NODE_OPTIONS, `--max-old-space-size=${storybookHeapMb}`]
|
|
23
|
+
.filter(Boolean)
|
|
24
|
+
.join(" ");
|
|
25
|
+
}
|
|
63
26
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
environment,
|
|
68
|
-
source_boundary: sourceBoundary,
|
|
69
|
-
snapshot: emptySnapshot,
|
|
70
|
-
}),
|
|
71
|
-
);
|
|
27
|
+
const child = spawn(command, args, {
|
|
28
|
+
env: childEnv,
|
|
29
|
+
stdio: "inherit",
|
|
72
30
|
});
|
|
73
31
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const address = server.address();
|
|
79
|
-
if (!address || typeof address === "string") {
|
|
80
|
-
reject(new Error("Unable to resolve validation fixture server address."));
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
resolve(`http://127.0.0.1:${address.port}`);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
const exitCode = await new Promise((resolve, reject) => {
|
|
88
|
-
const childEnv = {
|
|
89
|
-
...process.env,
|
|
90
|
-
MW_CONTENT_API_TOKEN: "validate-content-token",
|
|
91
|
-
MW_PLATFORM_BASE_URL: baseUrl,
|
|
92
|
-
MW_PUBLIC_CONTENT_SOURCE: "minutework_cms",
|
|
93
|
-
MW_PUBLIC_BASE_URL: "https://public.example.com",
|
|
94
|
-
MW_PUBLIC_SITE_ENV: "preview",
|
|
95
|
-
MW_PUBLIC_SITE_PROPERTY_KEY: "main-site",
|
|
96
|
-
};
|
|
97
|
-
if (
|
|
98
|
-
command === "storybook" &&
|
|
99
|
-
!/\bmax-old-space-size=/.test(childEnv.NODE_OPTIONS ?? "")
|
|
100
|
-
) {
|
|
101
|
-
childEnv.NODE_OPTIONS = [childEnv.NODE_OPTIONS, `--max-old-space-size=${storybookHeapMb}`]
|
|
102
|
-
.filter(Boolean)
|
|
103
|
-
.join(" ");
|
|
104
|
-
}
|
|
105
|
-
const child = spawn(command, args, {
|
|
106
|
-
env: childEnv,
|
|
107
|
-
stdio: "inherit",
|
|
108
|
-
});
|
|
32
|
+
child.once("error", (error) => {
|
|
33
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
34
|
+
process.exitCode = 1;
|
|
35
|
+
});
|
|
109
36
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
resolve(code ?? 1);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
37
|
+
child.once("exit", (code, signal) => {
|
|
38
|
+
if (signal) {
|
|
39
|
+
console.error(`Validation fixture command exited via signal ${signal}.`);
|
|
40
|
+
process.exitCode = 1;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
119
43
|
|
|
120
|
-
process.exitCode =
|
|
121
|
-
}
|
|
122
|
-
await new Promise((resolve, reject) => {
|
|
123
|
-
server.close((error) => {
|
|
124
|
-
if (error) {
|
|
125
|
-
reject(error);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
resolve(undefined);
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
}
|
|
44
|
+
process.exitCode = code ?? 1;
|
|
45
|
+
});
|
|
@@ -11,13 +11,9 @@ export default defineConfig({
|
|
|
11
11
|
},
|
|
12
12
|
test: {
|
|
13
13
|
env: {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
MW_CONTENT_API_TOKEN: "test-content-token",
|
|
14
|
+
NEXT_PUBLIC_MW_APP_ID: "tenant.app",
|
|
15
|
+
MW_TEMPLATE_APP_NAME: "Tenant App",
|
|
17
16
|
MW_PUBLIC_BASE_URL: "http://127.0.0.1:3000",
|
|
18
|
-
MW_PUBLIC_SITE_PROPERTY_KEY: "main-site",
|
|
19
|
-
MW_PUBLIC_SITE_ENV: "preview",
|
|
20
|
-
MW_STATIC_PUBLIC_CONTENT_PATH: "content/public-site.json",
|
|
21
17
|
},
|
|
22
18
|
environment: "node",
|
|
23
19
|
globals: true,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CompileGraph, RuntimeAppReleaseMetadata, SeedDataManifestDocument } from "@minutework/schema-compiler";
|
|
1
|
+
import type { CompileGraph, PlatformChannelManifestDocument, RuntimeAppReleaseMetadata, SeedDataManifestDocument } from "@minutework/schema-compiler";
|
|
2
2
|
export declare const MINUTEWORK_RUNTIME_APP_PACKAGE_VERSION = "MinuteWorkRuntimeAppPackageV1";
|
|
3
3
|
export type RuntimeAppSourceBundleFile = {
|
|
4
4
|
contentBase64: string;
|
|
@@ -14,6 +14,7 @@ export type RuntimeAppPackageArtifact = {
|
|
|
14
14
|
sha256: string;
|
|
15
15
|
};
|
|
16
16
|
release: RuntimeAppReleaseMetadata;
|
|
17
|
+
platformChannelManifest: PlatformChannelManifestDocument | null;
|
|
17
18
|
seedDataManifest: SeedDataManifestDocument | null;
|
|
18
19
|
sourceBundle: {
|
|
19
20
|
files: RuntimeAppSourceBundleFile[];
|
package/dist/runtime-package.js
CHANGED
|
@@ -16,6 +16,7 @@ export async function buildRuntimeAppPackage(options) {
|
|
|
16
16
|
sidecarRoot,
|
|
17
17
|
});
|
|
18
18
|
const seedDataManifest = options.compileGraph.documents.seedDataManifests[0] ?? null;
|
|
19
|
+
const platformChannelManifest = options.compileGraph.documents.platformChannelManifests[0] ?? null;
|
|
19
20
|
const artifactSetDigest = sha256Hex(JSON.stringify({
|
|
20
21
|
compileGraph: options.compileGraph.documents,
|
|
21
22
|
dependencyExport: {
|
|
@@ -24,7 +25,10 @@ export async function buildRuntimeAppPackage(options) {
|
|
|
24
25
|
},
|
|
25
26
|
release: options.releaseMetadata,
|
|
26
27
|
sourceBundle: {
|
|
27
|
-
files: sourceBundle.files.map((file) => ({
|
|
28
|
+
files: sourceBundle.files.map((file) => ({
|
|
29
|
+
path: file.path,
|
|
30
|
+
sha256: file.sha256,
|
|
31
|
+
})),
|
|
28
32
|
sha256: sourceBundle.sha256,
|
|
29
33
|
},
|
|
30
34
|
template,
|
|
@@ -35,6 +39,7 @@ export async function buildRuntimeAppPackage(options) {
|
|
|
35
39
|
compileGraph: options.compileGraph,
|
|
36
40
|
dependencyExport,
|
|
37
41
|
release: options.releaseMetadata,
|
|
42
|
+
platformChannelManifest,
|
|
38
43
|
seedDataManifest,
|
|
39
44
|
sourceBundle,
|
|
40
45
|
template,
|
|
@@ -43,13 +48,16 @@ export async function buildRuntimeAppPackage(options) {
|
|
|
43
48
|
}
|
|
44
49
|
export function buildRuntimePackagePayload(packageArtifact) {
|
|
45
50
|
const payload = JSON.parse(JSON.stringify(packageArtifact));
|
|
46
|
-
// Drop
|
|
47
|
-
// consumes
|
|
48
|
-
// apps/mwv3-runtime-dj/apps/runtime_app_host/deployment_services.py:416).
|
|
51
|
+
// Drop camelCase artifact-surface fields. The runtime install pipe
|
|
52
|
+
// consumes snake_case manifest keys.
|
|
49
53
|
delete payload.seedDataManifest;
|
|
54
|
+
delete payload.platformChannelManifest;
|
|
50
55
|
if (packageArtifact.seedDataManifest !== null) {
|
|
51
56
|
payload.seed_data_manifest = packageArtifact.seedDataManifest;
|
|
52
57
|
}
|
|
58
|
+
if (packageArtifact.platformChannelManifest !== null) {
|
|
59
|
+
payload.platform_channel_manifest = packageArtifact.platformChannelManifest;
|
|
60
|
+
}
|
|
53
61
|
return payload;
|
|
54
62
|
}
|
|
55
63
|
async function buildSourceBundle(root) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-package.js","sourceRoot":"","sources":["../src/runtime-package.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-package.js","sourceRoot":"","sources":["../src/runtime-package.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,12 +11,9 @@ export async function bootstrapVmLocalWorkspaceEnv(options) {
|
|
|
11
11
|
}
|
|
12
12
|
if (options.starters.tenantApp) {
|
|
13
13
|
await writeManagedEnvBlock(path.join(options.workspaceRoot, "tenant-app", ".env.local"), "tenant-app", {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
NEXT_PUBLIC_MW_APP_ID: workspaceWiring.app_id ?? "tenant.app",
|
|
15
|
+
MW_TEMPLATE_APP_NAME: workspaceWiring.workspace_name ?? "Tenant App",
|
|
16
16
|
MW_PUBLIC_BASE_URL: workspaceWiring.public_base_url ?? "",
|
|
17
|
-
MW_PUBLIC_SITE_PROPERTY_KEY: workspaceWiring.public_site_property_key ?? "",
|
|
18
|
-
MW_PUBLIC_SITE_ENV: workspaceWiring.public_site_env ?? "preview",
|
|
19
|
-
MW_ENABLE_RUNTIME_COMMAND_EXAMPLE: "false",
|
|
20
17
|
});
|
|
21
18
|
}
|
|
22
19
|
if (options.starters.sidecar) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-bootstrap.js","sourceRoot":"","sources":["../src/workspace-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-bootstrap.js","sourceRoot":"","sources":["../src/workspace-bootstrap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -401,6 +401,33 @@ export declare const SchemaStatusSchema: z.ZodObject<{
|
|
|
401
401
|
mapping_id: z.ZodString;
|
|
402
402
|
version: z.ZodLiteral<"OntologyMappingManifestV1">;
|
|
403
403
|
}, z.core.$strict>>;
|
|
404
|
+
platformChannelManifests: z.ZodArray<z.ZodObject<{
|
|
405
|
+
channels: z.ZodArray<z.ZodObject<{
|
|
406
|
+
category: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
407
|
+
label: z.ZodOptional<z.ZodString>;
|
|
408
|
+
ordering: z.ZodOptional<z.ZodNumber>;
|
|
409
|
+
slug: z.ZodString;
|
|
410
|
+
}, z.core.$strict>]>;
|
|
411
|
+
category_label: z.ZodOptional<z.ZodString>;
|
|
412
|
+
category_ordering: z.ZodOptional<z.ZodNumber>;
|
|
413
|
+
customer_visibility: z.ZodEnum<{
|
|
414
|
+
hidden: "hidden";
|
|
415
|
+
visible: "visible";
|
|
416
|
+
}>;
|
|
417
|
+
label: z.ZodString;
|
|
418
|
+
landing_agent_ref: z.ZodOptional<z.ZodString>;
|
|
419
|
+
landing_thread_kind: z.ZodOptional<z.ZodEnum<{
|
|
420
|
+
"": "";
|
|
421
|
+
channel: "channel";
|
|
422
|
+
private: "private";
|
|
423
|
+
guest_shared: "guest_shared";
|
|
424
|
+
}>>;
|
|
425
|
+
landing_title: z.ZodOptional<z.ZodString>;
|
|
426
|
+
ordering: z.ZodNumber;
|
|
427
|
+
slug: z.ZodString;
|
|
428
|
+
}, z.core.$strict>>;
|
|
429
|
+
version: z.ZodLiteral<"1">;
|
|
430
|
+
}, z.core.$strict>>;
|
|
404
431
|
projectionContracts: z.ZodArray<z.ZodObject<{
|
|
405
432
|
app_id: z.ZodString;
|
|
406
433
|
contract_id: z.ZodString;
|