swallowkit 1.0.0-beta.58 → 1.0.0-beta.59
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/dist/cli/commands/add-auth.d.ts +3 -1
- package/dist/cli/commands/add-auth.d.ts.map +1 -1
- package/dist/cli/commands/add-auth.js +55 -21
- package/dist/cli/commands/add-auth.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/operations/auth-operations.d.ts +4 -0
- package/dist/core/operations/auth-operations.d.ts.map +1 -1
- package/dist/core/operations/auth-operations.js +5 -2
- package/dist/core/operations/auth-operations.js.map +1 -1
- package/dist/core/operations/create-model.d.ts.map +1 -1
- package/dist/core/operations/create-model.js +6 -2
- package/dist/core/operations/create-model.js.map +1 -1
- package/dist/core/project/capabilities.d.ts +58 -0
- package/dist/core/project/capabilities.d.ts.map +1 -0
- package/dist/core/project/capabilities.js +135 -0
- package/dist/core/project/capabilities.js.map +1 -0
- package/dist/core/project/validation.d.ts.map +1 -1
- package/dist/core/project/validation.js +48 -0
- package/dist/core/project/validation.js.map +1 -1
- package/dist/core/project/workflows.d.ts.map +1 -1
- package/dist/core/project/workflows.js +46 -2
- package/dist/core/project/workflows.js.map +1 -1
- package/dist/core/scaffold/auth-generator.d.ts.map +1 -1
- package/dist/core/scaffold/auth-generator.js +6 -2
- package/dist/core/scaffold/auth-generator.js.map +1 -1
- package/dist/core/verify/index.d.ts +7 -0
- package/dist/core/verify/index.d.ts.map +1 -1
- package/dist/core/verify/index.js +69 -0
- package/dist/core/verify/index.js.map +1 -1
- package/dist/machine/index.d.ts.map +1 -1
- package/dist/machine/index.js +117 -41
- package/dist/machine/index.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +32 -10
- package/dist/mcp/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/agent-loop-phase34.test.ts +66 -2
- package/src/__tests__/auth.test.ts +9 -0
- package/src/__tests__/machine.test.ts +15 -0
- package/src/__tests__/multi-auth.test.ts +12 -0
- package/src/__tests__/plan-apply.test.ts +38 -0
- package/src/cli/commands/add-auth.ts +59 -21
- package/src/cli/index.ts +2 -0
- package/src/core/operations/auth-operations.ts +9 -2
- package/src/core/operations/create-model.ts +7 -2
- package/src/core/project/agent-templates/AGENTS.md +62 -2
- package/src/core/project/agent-templates/CLAUDE.md +3 -0
- package/src/core/project/agent-templates/copilot-instructions.md +3 -0
- package/src/core/project/agent-templates/shared-models.instructions.md +39 -2
- package/src/core/project/capabilities.ts +193 -0
- package/src/core/project/validation.ts +50 -0
- package/src/core/project/workflows.ts +48 -2
- package/src/core/scaffold/auth-generator.ts +7 -2
- package/src/core/verify/index.ts +76 -0
- package/src/machine/index.ts +133 -45
- package/src/mcp/index.ts +28 -10
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@ import * as path from "path";
|
|
|
12
12
|
import * as childProcess from "child_process";
|
|
13
13
|
import { runMachineCli } from "../machine";
|
|
14
14
|
import { inspectInfra } from "../core/project/infra";
|
|
15
|
-
import { loadCustomVerifyChecks } from "../core/verify";
|
|
15
|
+
import { loadCustomVerifyChecks, compactVerifyResult, VerifyResult } from "../core/verify";
|
|
16
16
|
import { buildAgentSkills, buildWorkflowDocs, writeAgentSkills, writeWorkflowDocs } from "../core/project/workflows";
|
|
17
17
|
|
|
18
18
|
jest.mock("child_process", () => {
|
|
@@ -229,6 +229,37 @@ describe("agent loop phase 3/4", () => {
|
|
|
229
229
|
expect(fs.readFileSync(path.join(tempDir, "lib", "auth", "auth-context.tsx"), "utf-8")).not.toContain("// hand edit");
|
|
230
230
|
});
|
|
231
231
|
|
|
232
|
+
it("threads --allowed-providers into the config and generated SWA artifacts for a named scheme", async () => {
|
|
233
|
+
createProjectFixture(tempDir);
|
|
234
|
+
|
|
235
|
+
const plan = await runMachine([
|
|
236
|
+
"node", "swallowkit", "machine", "plan", "auth",
|
|
237
|
+
"--provider", "swa", "--scheme", "admin", "--allowed-providers", "github",
|
|
238
|
+
]);
|
|
239
|
+
expect(plan.response.ok).toBe(true);
|
|
240
|
+
expect(plan.response.data.allowedProviders).toEqual(["github"]);
|
|
241
|
+
|
|
242
|
+
const apply = await runMachine([
|
|
243
|
+
"node", "swallowkit", "machine", "apply", "auth", "--plan", plan.response.data.planId,
|
|
244
|
+
]);
|
|
245
|
+
expect(apply.response.ok).toBe(true);
|
|
246
|
+
|
|
247
|
+
const config = fs.readFileSync(path.join(tempDir, "swallowkit.config.js"), "utf-8");
|
|
248
|
+
expect(config).toContain("swa: { allowedProviders: ['github'] }");
|
|
249
|
+
|
|
250
|
+
const authContext = fs.readFileSync(
|
|
251
|
+
path.join(tempDir, "lib", "auth", "schemes", "admin", "auth-context.tsx"),
|
|
252
|
+
"utf-8"
|
|
253
|
+
);
|
|
254
|
+
expect(authContext).toContain("/.auth/login/github?");
|
|
255
|
+
expect(authContext).not.toContain("/.auth/login/aad");
|
|
256
|
+
|
|
257
|
+
// apply auth は「policies を定義せよ」等の後続手順を nextActions で返す
|
|
258
|
+
const descriptions = apply.response.nextActions.map((a: any) => a.description).join(" ");
|
|
259
|
+
expect(descriptions).toContain("auth.authorization.policies");
|
|
260
|
+
expect(descriptions).toContain("allowedProviders");
|
|
261
|
+
});
|
|
262
|
+
|
|
232
263
|
it("plans provision locally and always requires human approval to apply", async () => {
|
|
233
264
|
createProjectFixture(tempDir);
|
|
234
265
|
writeFile(path.join(tempDir, "infra", "main.bicep"), SAMPLE_MAIN_BICEP);
|
|
@@ -309,12 +340,43 @@ describe("agent loop phase 3/4", () => {
|
|
|
309
340
|
expect(checks[0]).toMatchObject({ id: "smoke-api", command: "node scripts/smoke.js" });
|
|
310
341
|
});
|
|
311
342
|
|
|
343
|
+
it("compactVerifyResult suppresses info findings without changing the summary", () => {
|
|
344
|
+
const result: VerifyResult = {
|
|
345
|
+
verifiedAt: new Date().toISOString(),
|
|
346
|
+
summary: { passed: 1, failed: 0, skipped: 0, errors: 0, done: true },
|
|
347
|
+
checks: [
|
|
348
|
+
{
|
|
349
|
+
id: "drift",
|
|
350
|
+
title: "Generated artifact drift",
|
|
351
|
+
status: "pass",
|
|
352
|
+
durationMs: 1,
|
|
353
|
+
fixable: true,
|
|
354
|
+
evidence: {
|
|
355
|
+
findings: [
|
|
356
|
+
{ kind: "artifact-modified", severity: "info", path: "shared/models/todo.ts", message: "expected edit", repairAction: "none" },
|
|
357
|
+
{ kind: "schema-drift", severity: "warning", path: "functions/src/todo.ts", message: "stale", repairAction: "re-plan" },
|
|
358
|
+
] as never,
|
|
359
|
+
},
|
|
360
|
+
suggestedActions: [],
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
const compact = compactVerifyResult(result);
|
|
366
|
+
expect(compact.summary).toEqual(result.summary);
|
|
367
|
+
expect(compact.checks[0].evidence.findings).toHaveLength(1);
|
|
368
|
+
expect(compact.checks[0].evidence.findings![0].severity).toBe("warning");
|
|
369
|
+
expect(compact.checks[0].evidence.suppressedInfoFindings).toBe(1);
|
|
370
|
+
// 元の結果は変更しない
|
|
371
|
+
expect(result.checks[0].evidence.findings).toHaveLength(2);
|
|
372
|
+
});
|
|
373
|
+
|
|
312
374
|
describe("workflow docs & agent skills", () => {
|
|
313
375
|
it("builds workflow docs including provision and an index referencing skills", () => {
|
|
314
376
|
const docs = buildWorkflowDocs("pnpm exec");
|
|
315
377
|
const fileNames = docs.map((d) => d.fileName);
|
|
316
378
|
expect(fileNames).toEqual(
|
|
317
|
-
expect.arrayContaining(["README.md", "add-model.md", "modify-model.md", "verify-and-repair.md", "provision.md"])
|
|
379
|
+
expect.arrayContaining(["README.md", "add-model.md", "modify-model.md", "add-auth.md", "verify-and-repair.md", "provision.md"])
|
|
318
380
|
);
|
|
319
381
|
const index = docs.find((d) => d.fileName === "README.md")!;
|
|
320
382
|
expect(index.content).toContain(".github/skills/");
|
|
@@ -326,6 +388,7 @@ describe("agent loop phase 3/4", () => {
|
|
|
326
388
|
expect(skills.map((s) => s.skillName)).toEqual([
|
|
327
389
|
"swallowkit-add-model",
|
|
328
390
|
"swallowkit-modify-model",
|
|
391
|
+
"swallowkit-add-auth",
|
|
329
392
|
"swallowkit-verify-repair",
|
|
330
393
|
"swallowkit-provision",
|
|
331
394
|
]);
|
|
@@ -351,6 +414,7 @@ describe("agent loop phase 3/4", () => {
|
|
|
351
414
|
expect(skillPaths).toEqual([
|
|
352
415
|
".github/skills/swallowkit-add-model/SKILL.md",
|
|
353
416
|
".github/skills/swallowkit-modify-model/SKILL.md",
|
|
417
|
+
".github/skills/swallowkit-add-auth/SKILL.md",
|
|
354
418
|
".github/skills/swallowkit-verify-repair/SKILL.md",
|
|
355
419
|
".github/skills/swallowkit-provision/SKILL.md",
|
|
356
420
|
]);
|
|
@@ -380,6 +380,15 @@ describe("SWA built-in auth generators", () => {
|
|
|
380
380
|
expect(code).toContain("satisfies AuthUser");
|
|
381
381
|
});
|
|
382
382
|
|
|
383
|
+
it("derives the login URL from allowedProviders instead of hardcoding aad", () => {
|
|
384
|
+
expect(generateSwaAuthContext()).toContain("/.auth/login/aad?");
|
|
385
|
+
const github = generateSwaAuthContext(["github"]);
|
|
386
|
+
expect(github).toContain("/.auth/login/github?");
|
|
387
|
+
expect(github).not.toContain("/.auth/login/aad");
|
|
388
|
+
// 先頭のプロバイダが既定のログイン先になる
|
|
389
|
+
expect(generateSwaAuthContext(["google", "aad"])).toContain("/.auth/login/google?");
|
|
390
|
+
});
|
|
391
|
+
|
|
383
392
|
it("forwards a normalized platform principal with /.auth/me fallback", () => {
|
|
384
393
|
const code = generateBFFCallFunctionWithSwaAuth();
|
|
385
394
|
expect(code).toContain("x-ms-client-principal");
|
|
@@ -216,6 +216,21 @@ describe("machine CLI", () => {
|
|
|
216
216
|
);
|
|
217
217
|
});
|
|
218
218
|
|
|
219
|
+
it("returns the framework capability contract via inspect capabilities", async () => {
|
|
220
|
+
const { response, exitCode } = await runMachine(["node", "swallowkit", "machine", "inspect", "capabilities"]);
|
|
221
|
+
|
|
222
|
+
expect(exitCode).toBe(0);
|
|
223
|
+
expect(response.ok).toBe(true);
|
|
224
|
+
expect(response.command).toBe("inspect-capabilities");
|
|
225
|
+
const declarationNames = response.data.modelDeclarations.map((declaration: { name: string }) => declaration.name);
|
|
226
|
+
expect(declarationNames).toEqual(expect.arrayContaining(["schema", "displayName", "partitionKey", "authPolicy", "connectorConfig"]));
|
|
227
|
+
const partitionKey = response.data.modelDeclarations.find((declaration: { name: string }) => declaration.name === "partitionKey");
|
|
228
|
+
expect(partitionKey.format).toContain("export const partitionKey = '/");
|
|
229
|
+
expect(response.data.authentication.rules.join(" ")).toContain("NEVER hand-write auth.schemes");
|
|
230
|
+
expect(response.data.generatedCrud.notGuaranteed.join(" ")).toContain("Owner scoping");
|
|
231
|
+
expect(response.data.seeding.applySeeds).toContain("dev --seed-env");
|
|
232
|
+
});
|
|
233
|
+
|
|
219
234
|
it("validates forbidden BFF dependencies", async () => {
|
|
220
235
|
createProjectFixture(tempDir, {
|
|
221
236
|
includeGeneratedArtifacts: true,
|
|
@@ -63,6 +63,18 @@ describe("named authentication routers", () => {
|
|
|
63
63
|
expect(generateNamedAuthRouterCSharp(swaOnly)).toContain("AllowedProviders[scheme]");
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
+
it("emits Array.Empty<string>() instead of untyped new[] { } for empty C# arrays (CS0826)", () => {
|
|
67
|
+
const emptyLists = normalizeAuthConfig({
|
|
68
|
+
schemes: { api: { provider: "external-token" } },
|
|
69
|
+
authorization: { defaultPolicy: "anonymous", policies: { apiOnly: { schemes: ["api"] } } },
|
|
70
|
+
})!;
|
|
71
|
+
const csharp = generateNamedAuthRouterCSharp(emptyLists);
|
|
72
|
+
expect(csharp).not.toMatch(/new\[\]\s*\{\s*\}/);
|
|
73
|
+
expect(csharp).toContain("Array.Empty<string>()");
|
|
74
|
+
// 非空のリストは従来通り new[] リテラル
|
|
75
|
+
expect(csharp).toContain('new[] { "api" }');
|
|
76
|
+
});
|
|
77
|
+
|
|
66
78
|
it("scaffolds named read/write guards for all Functions languages", () => {
|
|
67
79
|
const policy = { read: "adminOnly", write: "lineUserOnly" };
|
|
68
80
|
const model = createBasicModelInfo();
|
|
@@ -178,6 +178,44 @@ describe("plan / apply / drift / verify machine commands", () => {
|
|
|
178
178
|
).toBe(true);
|
|
179
179
|
});
|
|
180
180
|
|
|
181
|
+
it("plans and applies multiple models in one command (scaffold batch)", async () => {
|
|
182
|
+
createProjectFixture(tempDir);
|
|
183
|
+
writeFile(path.join(tempDir, "shared", "models", "note.ts"), createModelSource("Note"));
|
|
184
|
+
|
|
185
|
+
const plan = await runMachine(machineArgs("plan", "scaffold", "todo", "note", "--api-only"));
|
|
186
|
+
|
|
187
|
+
expect(plan.exitCode).toBe(0);
|
|
188
|
+
expect(plan.response.ok).toBe(true);
|
|
189
|
+
expect(plan.response.command).toBe("plan-scaffold");
|
|
190
|
+
expect(plan.response.status).toBe("complete");
|
|
191
|
+
expect(plan.response.data.planType).toBe("scaffold-batch");
|
|
192
|
+
expect(plan.response.data.plans).toHaveLength(2);
|
|
193
|
+
expect(plan.response.nextActions).toHaveLength(2);
|
|
194
|
+
expect(plan.response.nextActions[0].description).toContain("todo");
|
|
195
|
+
expect(plan.response.nextActions[1].description).toContain("note");
|
|
196
|
+
// 何も書き込まれていない
|
|
197
|
+
expect(fs.existsSync(path.join(tempDir, "app"))).toBe(false);
|
|
198
|
+
|
|
199
|
+
const apply = await runMachine(machineArgs("apply", "scaffold", "todo", "note", "--api-only"));
|
|
200
|
+
|
|
201
|
+
expect(apply.exitCode).toBe(0);
|
|
202
|
+
expect(apply.response.ok).toBe(true);
|
|
203
|
+
expect(apply.response.data.applyType).toBe("scaffold-batch");
|
|
204
|
+
expect(apply.response.data.results).toHaveLength(2);
|
|
205
|
+
expect(fs.existsSync(path.join(tempDir, "app", "api", "todo", "route.ts"))).toBe(true);
|
|
206
|
+
expect(fs.existsSync(path.join(tempDir, "app", "api", "note", "route.ts"))).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it("rejects --plan combined with multiple models", async () => {
|
|
210
|
+
createProjectFixture(tempDir);
|
|
211
|
+
|
|
212
|
+
const { response, exitCode } = await runMachine(machineArgs("apply", "scaffold", "a", "b", "--plan", "abc"));
|
|
213
|
+
|
|
214
|
+
expect(exitCode).toBe(1);
|
|
215
|
+
expect(response.ok).toBe(false);
|
|
216
|
+
expect(response.error.code).toBe("invalid-arguments");
|
|
217
|
+
});
|
|
218
|
+
|
|
181
219
|
it("applies a previously computed plan and records the artifact ledger", async () => {
|
|
182
220
|
createProjectFixture(tempDir);
|
|
183
221
|
|
|
@@ -51,6 +51,29 @@ import { buildSharedTsConfig } from "./init";
|
|
|
51
51
|
interface AddAuthOptions {
|
|
52
52
|
provider?: string;
|
|
53
53
|
scheme?: string;
|
|
54
|
+
/** SWA の許可する identity provider (例: ['github'])。未指定時は ['aad']。 */
|
|
55
|
+
allowedProviders?: string[];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const SWA_PROVIDER_LABELS: Record<string, string> = {
|
|
59
|
+
aad: "Microsoft",
|
|
60
|
+
github: "GitHub",
|
|
61
|
+
google: "Google",
|
|
62
|
+
twitter: "X",
|
|
63
|
+
apple: "Apple",
|
|
64
|
+
facebook: "Facebook",
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
function swaProviderLabel(provider: string): string {
|
|
68
|
+
return SWA_PROVIDER_LABELS[provider] ?? provider.charAt(0).toUpperCase() + provider.slice(1);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function normalizeSwaProviders(allowedProviders?: string[]): string[] {
|
|
72
|
+
const providers = (allowedProviders ?? []).map((p) => p.trim().toLowerCase()).filter(Boolean);
|
|
73
|
+
for (const provider of providers) {
|
|
74
|
+
if (!/^[a-z0-9-]+$/.test(provider)) throw new Error(`Invalid SWA identity provider name: ${provider}`);
|
|
75
|
+
}
|
|
76
|
+
return providers.length > 0 ? providers : ["aad"];
|
|
54
77
|
}
|
|
55
78
|
|
|
56
79
|
const AUTH_GENERATOR = "add-auth";
|
|
@@ -75,7 +98,8 @@ function defaultCustomJwtConfig(): CustomJwtConfig {
|
|
|
75
98
|
};
|
|
76
99
|
}
|
|
77
100
|
|
|
78
|
-
function setupSwaAuth(cwd: string, backendLanguage: BackendLanguage, session: FileOperationSession): void {
|
|
101
|
+
function setupSwaAuth(cwd: string, backendLanguage: BackendLanguage, session: FileOperationSession, allowedProviders?: string[]): void {
|
|
102
|
+
const providers = normalizeSwaProviders(allowedProviders);
|
|
79
103
|
const helperPath = backendLanguage === "typescript"
|
|
80
104
|
? path.join(cwd, "functions", "src", "auth", "jwt-helper.ts")
|
|
81
105
|
: backendLanguage === "csharp"
|
|
@@ -92,11 +116,11 @@ function setupSwaAuth(cwd: string, backendLanguage: BackendLanguage, session: Fi
|
|
|
92
116
|
session.writeFile(callFnPath, generateBFFCallFunctionWithSwaAuth(), managedMeta);
|
|
93
117
|
|
|
94
118
|
const authDir = path.join(cwd, "lib", "auth");
|
|
95
|
-
session.writeFile(path.join(authDir, "auth-context.tsx"), generateSwaAuthContext(), managedMeta);
|
|
119
|
+
session.writeFile(path.join(authDir, "auth-context.tsx"), generateSwaAuthContext(providers), managedMeta);
|
|
96
120
|
updateRootLayoutWithAuthProvider(cwd, session);
|
|
97
121
|
const loginDir = path.join(cwd, "app", "login");
|
|
98
|
-
session.writeFile(path.join(loginDir, "page.tsx"), generateSwaLoginPage(), managedMeta);
|
|
99
|
-
updateSwaRouteConfig(cwd, session);
|
|
122
|
+
session.writeFile(path.join(loginDir, "page.tsx"), generateSwaLoginPage(providers), managedMeta);
|
|
123
|
+
updateSwaRouteConfig(cwd, session, providers);
|
|
100
124
|
}
|
|
101
125
|
|
|
102
126
|
function setupExternalTokenAuth(cwd: string, backendLanguage: BackendLanguage, session: FileOperationSession): void {
|
|
@@ -143,15 +167,21 @@ function updatePythonAuthMeRegistration(cwd: string, session: FileOperationSessi
|
|
|
143
167
|
session.writeFile(appPath, content, extensionMeta);
|
|
144
168
|
}
|
|
145
169
|
|
|
146
|
-
function generateSwaLoginPage(): string {
|
|
170
|
+
function generateSwaLoginPage(allowedProviders?: string[]): string {
|
|
171
|
+
const providers = normalizeSwaProviders(allowedProviders);
|
|
172
|
+
const links = providers
|
|
173
|
+
.map((provider) => `<a href="/.auth/login/${provider}?post_login_redirect_uri=/">Sign in with ${swaProviderLabel(provider)}</a>`)
|
|
174
|
+
.join("");
|
|
147
175
|
return `'use client';
|
|
148
176
|
export default function LoginPage() {
|
|
149
|
-
return <main><h1>Sign in</h1
|
|
177
|
+
return <main><h1>Sign in</h1>${links}</main>;
|
|
150
178
|
}
|
|
151
179
|
`;
|
|
152
180
|
}
|
|
153
181
|
|
|
154
|
-
export function generateSwaAuthContext(): string {
|
|
182
|
+
export function generateSwaAuthContext(allowedProviders?: string[]): string {
|
|
183
|
+
const providers = normalizeSwaProviders(allowedProviders);
|
|
184
|
+
const primaryProvider = providers[0];
|
|
155
185
|
return `'use client';
|
|
156
186
|
import { createContext, useContext, useEffect, useState, type ReactNode } from 'react';
|
|
157
187
|
|
|
@@ -184,7 +214,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
|
|
184
214
|
.catch(() => setUser(null))
|
|
185
215
|
.finally(() => setLoading(false));
|
|
186
216
|
}, []);
|
|
187
|
-
const login = () => { window.location.href = '/.auth/login
|
|
217
|
+
const login = () => { window.location.href = '/.auth/login/${primaryProvider}?post_login_redirect_uri=/'; };
|
|
188
218
|
const logout = () => { window.location.href = '/.auth/logout?post_logout_redirect_uri=/'; };
|
|
189
219
|
const hasRole = (role: string) => user?.roles.includes(role) ?? false;
|
|
190
220
|
return <AuthContext.Provider value={{ user, loading, login, logout, hasRole, hasAnyRole: roles => roles.some(hasRole) }}>{children}</AuthContext.Provider>;
|
|
@@ -219,14 +249,15 @@ function updateRootLayoutWithAuthProvider(cwd: string, session: FileOperationSes
|
|
|
219
249
|
if (updated !== layout) session.writeFile(layoutPath, updated, extensionMeta);
|
|
220
250
|
}
|
|
221
251
|
|
|
222
|
-
function updateSwaRouteConfig(cwd: string, session: FileOperationSession): void {
|
|
252
|
+
function updateSwaRouteConfig(cwd: string, session: FileOperationSession, allowedProviders?: string[]): void {
|
|
253
|
+
const primaryProvider = normalizeSwaProviders(allowedProviders)[0];
|
|
223
254
|
const configPath = path.join(cwd, "staticwebapp.config.json");
|
|
224
255
|
const config = session.fileExists(configPath) ? JSON.parse(session.readFile(configPath)) : {};
|
|
225
256
|
config.routes = Array.isArray(config.routes)
|
|
226
257
|
? config.routes.filter((route: { route?: string }) => route.route !== "/api/*")
|
|
227
258
|
: [];
|
|
228
259
|
config.routes.unshift({ route: "/api/*", allowedRoles: ["authenticated"] });
|
|
229
|
-
config.responseOverrides = { ...(config.responseOverrides || {}), "401": { statusCode: 302, redirect:
|
|
260
|
+
config.responseOverrides = { ...(config.responseOverrides || {}), "401": { statusCode: 302, redirect: `/.auth/login/${primaryProvider}?post_login_redirect_uri=.referrer` } };
|
|
230
261
|
session.writeFile(configPath, JSON.stringify(config, null, 2), extensionMeta);
|
|
231
262
|
}
|
|
232
263
|
|
|
@@ -257,7 +288,7 @@ export async function addAuthCommand(options: AddAuthOptions) {
|
|
|
257
288
|
if (options.scheme) {
|
|
258
289
|
if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(options.scheme)) throw new Error("--scheme must start with a letter and contain only letters, digits, '_' or '-'");
|
|
259
290
|
if (provider === "none" || provider === "swa-custom") throw new Error(`Provider '${provider}' cannot be added as a named scheme`);
|
|
260
|
-
addNamedScheme(cwd, options.scheme, provider, backendLanguage, session);
|
|
291
|
+
addNamedScheme(cwd, options.scheme, provider, backendLanguage, session, options.allowedProviders);
|
|
261
292
|
await finalize();
|
|
262
293
|
console.log(`\n Named authentication scheme '${options.scheme}' added.`);
|
|
263
294
|
return;
|
|
@@ -273,8 +304,8 @@ export async function addAuthCommand(options: AddAuthOptions) {
|
|
|
273
304
|
return;
|
|
274
305
|
}
|
|
275
306
|
if (provider === "swa") {
|
|
276
|
-
setupSwaAuth(cwd, backendLanguage, session);
|
|
277
|
-
updateConfigWithAuth(cwd, provider, config.auth?.customJwt || defaultCustomJwtConfig(), session);
|
|
307
|
+
setupSwaAuth(cwd, backendLanguage, session, options.allowedProviders);
|
|
308
|
+
updateConfigWithAuth(cwd, provider, config.auth?.customJwt || defaultCustomJwtConfig(), session, options.allowedProviders);
|
|
278
309
|
await finalize();
|
|
279
310
|
console.log("\n SWA built-in authentication setup complete!");
|
|
280
311
|
return;
|
|
@@ -392,17 +423,22 @@ function findObjectEnd(content: string, open: number): number {
|
|
|
392
423
|
return -1;
|
|
393
424
|
}
|
|
394
425
|
|
|
395
|
-
function updateConfigWithNamedScheme(cwd: string, scheme: string, provider: AuthProvider, session: FileOperationSession): void {
|
|
426
|
+
function updateConfigWithNamedScheme(cwd: string, scheme: string, provider: AuthProvider, session: FileOperationSession, allowedProviders?: string[]): void {
|
|
396
427
|
const jsPath = path.join(cwd, "swallowkit.config.js");
|
|
397
428
|
const jsonPath = path.join(cwd, "swallowkit.config.json");
|
|
398
429
|
const configPath = session.fileExists(jsPath) ? jsPath : jsonPath;
|
|
399
430
|
if (!session.fileExists(configPath)) throw new Error("swallowkit.config.js or swallowkit.config.json is required");
|
|
431
|
+
const swaProviders = provider === "swa" ? normalizeSwaProviders(allowedProviders) : undefined;
|
|
400
432
|
if (configPath.endsWith(".json")) {
|
|
401
433
|
const value = JSON.parse(session.readFile(configPath));
|
|
402
434
|
value.auth ??= {};
|
|
403
435
|
value.auth.schemes ??= {};
|
|
404
436
|
if (value.auth.schemes[scheme]) throw new Error(`auth.schemes.${scheme} already exists; no files were changed`);
|
|
405
|
-
value.auth.schemes[scheme] = provider === "custom-jwt"
|
|
437
|
+
value.auth.schemes[scheme] = provider === "custom-jwt"
|
|
438
|
+
? { provider, customJwt: defaultCustomJwtConfig() }
|
|
439
|
+
: swaProviders
|
|
440
|
+
? { provider, swa: { allowedProviders: swaProviders } }
|
|
441
|
+
: { provider };
|
|
406
442
|
value.auth.authorization ??= { defaultPolicy: "anonymous", policies: {} };
|
|
407
443
|
session.writeFile(configPath, JSON.stringify(value, null, 2) + "\n", extensionMeta);
|
|
408
444
|
return;
|
|
@@ -412,7 +448,9 @@ function updateConfigWithNamedScheme(cwd: string, scheme: string, provider: Auth
|
|
|
412
448
|
const customJwt = defaultCustomJwtConfig();
|
|
413
449
|
const entry = provider === "custom-jwt"
|
|
414
450
|
? `\n ${scheme}: { provider: 'custom-jwt', customJwt: ${JSON.stringify(customJwt)} },`
|
|
415
|
-
:
|
|
451
|
+
: swaProviders
|
|
452
|
+
? `\n ${scheme}: { provider: '${provider}', swa: { allowedProviders: [${swaProviders.map((p) => `'${p}'`).join(", ")}] } },`
|
|
453
|
+
: `\n ${scheme}: { provider: '${provider}' },`;
|
|
416
454
|
if (!authMatch) {
|
|
417
455
|
const rootEnd = content.lastIndexOf("}");
|
|
418
456
|
const beforeRootEnd = content.slice(0, rootEnd).trimEnd();
|
|
@@ -436,9 +474,9 @@ function updateConfigWithNamedScheme(cwd: string, scheme: string, provider: Auth
|
|
|
436
474
|
session.writeFile(configPath, content, extensionMeta);
|
|
437
475
|
}
|
|
438
476
|
|
|
439
|
-
function addNamedScheme(cwd: string, scheme: string, provider: AuthProvider, language: BackendLanguage, session: FileOperationSession): void {
|
|
477
|
+
function addNamedScheme(cwd: string, scheme: string, provider: AuthProvider, language: BackendLanguage, session: FileOperationSession, allowedProviders?: string[]): void {
|
|
440
478
|
// Validate/update config before creating files, so duplicate names stop safely.
|
|
441
|
-
updateConfigWithNamedScheme(cwd, scheme, provider, session);
|
|
479
|
+
updateConfigWithNamedScheme(cwd, scheme, provider, session, allowedProviders);
|
|
442
480
|
const slug = scheme.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/_/g, "-").toLowerCase();
|
|
443
481
|
if (language === "typescript") {
|
|
444
482
|
const dir = path.join(cwd, "functions", "src", "auth", "schemes", slug);
|
|
@@ -462,7 +500,7 @@ function addNamedScheme(cwd: string, scheme: string, provider: AuthProvider, lan
|
|
|
462
500
|
writeIfMissing(session, path.join(clientDir, "authenticated-fetch.ts"), generateAuthenticatedFetch().replace("'./external-token-adapter'", "'./token-adapter'"));
|
|
463
501
|
writeIfMissing(session, path.join(clientDir, "auth-context.tsx"), generateExternalTokenAuthContext().replace(/external-token-adapter/g, "token-adapter"));
|
|
464
502
|
} else if (provider === "swa") {
|
|
465
|
-
writeIfMissing(session, path.join(clientDir, "auth-context.tsx"), generateSwaAuthContext());
|
|
503
|
+
writeIfMissing(session, path.join(clientDir, "auth-context.tsx"), generateSwaAuthContext(allowedProviders));
|
|
466
504
|
} else if (provider === "custom-jwt") {
|
|
467
505
|
writeIfMissing(session, path.join(clientDir, "auth-context.tsx"), generateAuthContext());
|
|
468
506
|
}
|
|
@@ -659,7 +697,7 @@ function generateBFFAuth(cwd: string, projectName: string, sharedPackageName: st
|
|
|
659
697
|
console.log(` Created: app/api/auth/me/route.ts`);
|
|
660
698
|
}
|
|
661
699
|
|
|
662
|
-
function updateConfigWithAuth(cwd: string, provider: AuthProvider, config: CustomJwtConfig, session: FileOperationSession): void {
|
|
700
|
+
function updateConfigWithAuth(cwd: string, provider: AuthProvider, config: CustomJwtConfig, session: FileOperationSession, allowedProviders?: string[]): void {
|
|
663
701
|
const configPath = path.join(cwd, "swallowkit.config.js");
|
|
664
702
|
if (!session.fileExists(configPath)) {
|
|
665
703
|
console.warn(" swallowkit.config.js not found. Please add auth config manually.");
|
|
@@ -694,7 +732,7 @@ function updateConfigWithAuth(cwd: string, provider: AuthProvider, config: Custo
|
|
|
694
732
|
tokenExpiry: '${config.tokenExpiry || "24h"}',
|
|
695
733
|
},` : provider === "swa" ? `
|
|
696
734
|
swa: {
|
|
697
|
-
allowedProviders: ['
|
|
735
|
+
allowedProviders: [${normalizeSwaProviders(allowedProviders).map((p) => `'${p}'`).join(", ")}],
|
|
698
736
|
roleSource: 'swa-roles',
|
|
699
737
|
},` : "";
|
|
700
738
|
|
package/src/cli/index.ts
CHANGED
|
@@ -189,10 +189,12 @@ export function createProgram(devCommandOverride: Command = devCommand): Command
|
|
|
189
189
|
.description("Add authentication and authorization to the project")
|
|
190
190
|
.option("--provider <provider>", "Auth provider: custom-jwt | swa | external-token | swa-custom | none", "custom-jwt")
|
|
191
191
|
.option("--scheme <name>", "Add a named authentication scheme")
|
|
192
|
+
.option("--allowed-providers <list>", "Comma-separated SWA identity providers to allow (e.g. github,aad); defaults to aad")
|
|
192
193
|
.action((options) => {
|
|
193
194
|
addAuthCommand({
|
|
194
195
|
provider: options.provider,
|
|
195
196
|
scheme: options.scheme,
|
|
197
|
+
allowedProviders: options.allowedProviders ? String(options.allowedProviders).split(",") : undefined,
|
|
196
198
|
});
|
|
197
199
|
});
|
|
198
200
|
|
|
@@ -27,6 +27,8 @@ import {
|
|
|
27
27
|
export interface PlanAuthOptions {
|
|
28
28
|
provider: string;
|
|
29
29
|
scheme?: string;
|
|
30
|
+
/** SWA の許可 identity provider。未指定時は add-auth 側の既定 (['aad'])。 */
|
|
31
|
+
allowedProviders?: string[];
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
export type AuthPlanAction = "create" | "update" | "overwrite" | "append" | "delete" | "skip";
|
|
@@ -44,6 +46,7 @@ export interface AuthPlanData {
|
|
|
44
46
|
planType: "auth";
|
|
45
47
|
provider: string;
|
|
46
48
|
scheme?: string;
|
|
49
|
+
allowedProviders?: string[];
|
|
47
50
|
createdAt: string;
|
|
48
51
|
swallowkitVersion: string;
|
|
49
52
|
operations: AuthPlanOperation[];
|
|
@@ -70,7 +73,7 @@ async function collectAuthOperations(options: PlanAuthOptions): Promise<FileOper
|
|
|
70
73
|
const captured = await captureConsoleMessagesWithError(async () => {
|
|
71
74
|
await interceptProcessExit(async () => {
|
|
72
75
|
await runWithFileSession(session, async () => {
|
|
73
|
-
await addAuthCommand({ provider: options.provider, scheme: options.scheme });
|
|
76
|
+
await addAuthCommand({ provider: options.provider, scheme: options.scheme, allowedProviders: options.allowedProviders });
|
|
74
77
|
});
|
|
75
78
|
});
|
|
76
79
|
});
|
|
@@ -166,6 +169,7 @@ export async function planAuthOperation(options: PlanAuthOptions): Promise<AuthP
|
|
|
166
169
|
JSON.stringify({
|
|
167
170
|
provider: options.provider,
|
|
168
171
|
scheme: options.scheme,
|
|
172
|
+
allowedProviders: options.allowedProviders,
|
|
169
173
|
operations: operations.map((op) => ({ path: op.path, action: op.action })),
|
|
170
174
|
fingerprints,
|
|
171
175
|
})
|
|
@@ -178,6 +182,7 @@ export async function planAuthOperation(options: PlanAuthOptions): Promise<AuthP
|
|
|
178
182
|
planType: "auth",
|
|
179
183
|
provider: options.provider,
|
|
180
184
|
...(options.scheme ? { scheme: options.scheme } : {}),
|
|
185
|
+
...(options.allowedProviders && options.allowedProviders.length > 0 ? { allowedProviders: options.allowedProviders } : {}),
|
|
181
186
|
createdAt: new Date().toISOString(),
|
|
182
187
|
swallowkitVersion: getSwallowKitVersion(),
|
|
183
188
|
operations,
|
|
@@ -208,6 +213,7 @@ export function verifyAuthPlanFingerprints(
|
|
|
208
213
|
export interface ApplyAuthOptions {
|
|
209
214
|
provider?: string;
|
|
210
215
|
scheme?: string;
|
|
216
|
+
allowedProviders?: string[];
|
|
211
217
|
planId?: string;
|
|
212
218
|
approve?: boolean;
|
|
213
219
|
}
|
|
@@ -241,7 +247,7 @@ async function runCommitAuthOperation(options: PlanAuthOptions): Promise<{
|
|
|
241
247
|
const tracked = await trackFileMutations(async () => {
|
|
242
248
|
const captured = await captureConsoleMessagesWithError(async () => {
|
|
243
249
|
await interceptProcessExit(async () => {
|
|
244
|
-
await addAuthCommand({ provider: options.provider, scheme: options.scheme });
|
|
250
|
+
await addAuthCommand({ provider: options.provider, scheme: options.scheme, allowedProviders: options.allowedProviders });
|
|
245
251
|
});
|
|
246
252
|
});
|
|
247
253
|
|
|
@@ -318,6 +324,7 @@ export async function applyAuthOperation(options: ApplyAuthOptions): Promise<App
|
|
|
318
324
|
const effectiveOptions: PlanAuthOptions = {
|
|
319
325
|
provider,
|
|
320
326
|
scheme: options.scheme ?? basePlan?.scheme,
|
|
327
|
+
allowedProviders: options.allowedProviders ?? basePlan?.allowedProviders,
|
|
321
328
|
};
|
|
322
329
|
|
|
323
330
|
// 常に最新状態で collect し、競合を再確認する
|
|
@@ -131,6 +131,11 @@ export async function createModelOperation(options: CreateModelOperationOptions)
|
|
|
131
131
|
const modelsDir = options.modelsDir || "shared/models";
|
|
132
132
|
|
|
133
133
|
const session = getActiveFileSession() ?? new FileOperationSession("commit");
|
|
134
|
+
// jest 等の環境で path.resolve の内部 cwd キャッシュが process.chdir と食い違うことが
|
|
135
|
+
// あるため、cwd を明示的に固定して絶対パスを組み立てる。
|
|
136
|
+
const projectRoot = process.cwd();
|
|
137
|
+
const resolveFromRoot = (relativePath: string) =>
|
|
138
|
+
path.isAbsolute(relativePath) ? relativePath : path.join(projectRoot, relativePath);
|
|
134
139
|
|
|
135
140
|
const createdFiles: string[] = [];
|
|
136
141
|
const skippedFiles: string[] = [];
|
|
@@ -141,7 +146,7 @@ export async function createModelOperation(options: CreateModelOperationOptions)
|
|
|
141
146
|
const filePath = path.join(modelsDir, `${kebabName}.ts`);
|
|
142
147
|
const pascalName = toPascalCase(name);
|
|
143
148
|
|
|
144
|
-
if (session.fileExists(
|
|
149
|
+
if (session.fileExists(resolveFromRoot(filePath))) {
|
|
145
150
|
const overwriteMode = options.overwriteMode || "prompt";
|
|
146
151
|
const shouldOverwrite = overwriteMode === "always"
|
|
147
152
|
? true
|
|
@@ -160,7 +165,7 @@ export async function createModelOperation(options: CreateModelOperationOptions)
|
|
|
160
165
|
const content = options.connector && connectorType
|
|
161
166
|
? generateConnectorModelTemplate(name, options.connector, connectorType)
|
|
162
167
|
: generateModelTemplate(name);
|
|
163
|
-
session.writeFile(
|
|
168
|
+
session.writeFile(resolveFromRoot(filePath), content, {
|
|
164
169
|
ownership: "user-owned",
|
|
165
170
|
generator: CREATE_MODEL_GENERATOR,
|
|
166
171
|
sourceModel: pascalName,
|