swallowkit 1.0.0-beta.9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/README.ja.md +87 -181
  2. package/README.md +87 -238
  3. package/dist/__tests__/fixtures.d.ts +12 -0
  4. package/dist/__tests__/fixtures.d.ts.map +1 -1
  5. package/dist/__tests__/fixtures.js +101 -0
  6. package/dist/__tests__/fixtures.js.map +1 -1
  7. package/dist/cli/commands/add-auth.d.ts +15 -0
  8. package/dist/cli/commands/add-auth.d.ts.map +1 -0
  9. package/dist/cli/commands/add-auth.js +790 -0
  10. package/dist/cli/commands/add-auth.js.map +1 -0
  11. package/dist/cli/commands/add-connector.d.ts +20 -0
  12. package/dist/cli/commands/add-connector.d.ts.map +1 -0
  13. package/dist/cli/commands/add-connector.js +164 -0
  14. package/dist/cli/commands/add-connector.js.map +1 -0
  15. package/dist/cli/commands/cosmos-worktree-isolation.d.ts +25 -0
  16. package/dist/cli/commands/cosmos-worktree-isolation.d.ts.map +1 -0
  17. package/dist/cli/commands/cosmos-worktree-isolation.js +124 -0
  18. package/dist/cli/commands/cosmos-worktree-isolation.js.map +1 -0
  19. package/dist/cli/commands/create-model.d.ts +1 -4
  20. package/dist/cli/commands/create-model.d.ts.map +1 -1
  21. package/dist/cli/commands/create-model.js +20 -82
  22. package/dist/cli/commands/create-model.js.map +1 -1
  23. package/dist/cli/commands/dev-seeds.d.ts +27 -0
  24. package/dist/cli/commands/dev-seeds.d.ts.map +1 -1
  25. package/dist/cli/commands/dev-seeds.js +188 -6
  26. package/dist/cli/commands/dev-seeds.js.map +1 -1
  27. package/dist/cli/commands/dev.d.ts +30 -0
  28. package/dist/cli/commands/dev.d.ts.map +1 -1
  29. package/dist/cli/commands/dev.js +495 -129
  30. package/dist/cli/commands/dev.js.map +1 -1
  31. package/dist/cli/commands/init.d.ts +69 -1
  32. package/dist/cli/commands/init.d.ts.map +1 -1
  33. package/dist/cli/commands/init.js +788 -766
  34. package/dist/cli/commands/init.js.map +1 -1
  35. package/dist/cli/commands/scaffold.d.ts +24 -3
  36. package/dist/cli/commands/scaffold.d.ts.map +1 -1
  37. package/dist/cli/commands/scaffold.js +408 -189
  38. package/dist/cli/commands/scaffold.js.map +1 -1
  39. package/dist/cli/index.d.ts +5 -1
  40. package/dist/cli/index.d.ts.map +1 -1
  41. package/dist/cli/index.js +335 -58
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/core/config.d.ts +13 -3
  44. package/dist/core/config.d.ts.map +1 -1
  45. package/dist/core/config.js +151 -8
  46. package/dist/core/config.js.map +1 -1
  47. package/dist/core/mock/connector-mock-server.d.ts +101 -0
  48. package/dist/core/mock/connector-mock-server.d.ts.map +1 -0
  49. package/dist/core/mock/connector-mock-server.js +480 -0
  50. package/dist/core/mock/connector-mock-server.js.map +1 -0
  51. package/dist/core/mock/zod-mock-generator.d.ts +14 -0
  52. package/dist/core/mock/zod-mock-generator.d.ts.map +1 -0
  53. package/dist/core/mock/zod-mock-generator.js +163 -0
  54. package/dist/core/mock/zod-mock-generator.js.map +1 -0
  55. package/dist/core/operations/auth-operations.d.ts +61 -0
  56. package/dist/core/operations/auth-operations.d.ts.map +1 -0
  57. package/dist/core/operations/auth-operations.js +272 -0
  58. package/dist/core/operations/auth-operations.js.map +1 -0
  59. package/dist/core/operations/create-model.d.ts +15 -0
  60. package/dist/core/operations/create-model.d.ts.map +1 -0
  61. package/dist/core/operations/create-model.js +185 -0
  62. package/dist/core/operations/create-model.js.map +1 -0
  63. package/dist/core/operations/file-session.d.ts +56 -0
  64. package/dist/core/operations/file-session.d.ts.map +1 -0
  65. package/dist/core/operations/file-session.js +203 -0
  66. package/dist/core/operations/file-session.js.map +1 -0
  67. package/dist/core/operations/provision-operations.d.ts +52 -0
  68. package/dist/core/operations/provision-operations.d.ts.map +1 -0
  69. package/dist/core/operations/provision-operations.js +211 -0
  70. package/dist/core/operations/provision-operations.js.map +1 -0
  71. package/dist/core/operations/runtime.d.ts +37 -0
  72. package/dist/core/operations/runtime.d.ts.map +1 -0
  73. package/dist/core/operations/runtime.js +248 -0
  74. package/dist/core/operations/runtime.js.map +1 -0
  75. package/dist/core/operations/scaffold-apply.d.ts +21 -0
  76. package/dist/core/operations/scaffold-apply.d.ts.map +1 -0
  77. package/dist/core/operations/scaffold-apply.js +57 -0
  78. package/dist/core/operations/scaffold-apply.js.map +1 -0
  79. package/dist/core/operations/scaffold-machine.d.ts +16 -0
  80. package/dist/core/operations/scaffold-machine.d.ts.map +1 -0
  81. package/dist/core/operations/scaffold-machine.js +51 -0
  82. package/dist/core/operations/scaffold-machine.js.map +1 -0
  83. package/dist/core/operations/scaffold-plan.d.ts +43 -0
  84. package/dist/core/operations/scaffold-plan.d.ts.map +1 -0
  85. package/dist/core/operations/scaffold-plan.js +187 -0
  86. package/dist/core/operations/scaffold-plan.js.map +1 -0
  87. package/dist/core/project/agent-instructions.d.ts +29 -0
  88. package/dist/core/project/agent-instructions.d.ts.map +1 -0
  89. package/dist/core/project/agent-instructions.js +160 -0
  90. package/dist/core/project/agent-instructions.js.map +1 -0
  91. package/dist/core/project/artifacts.d.ts +58 -0
  92. package/dist/core/project/artifacts.d.ts.map +1 -0
  93. package/dist/core/project/artifacts.js +179 -0
  94. package/dist/core/project/artifacts.js.map +1 -0
  95. package/dist/core/project/boundaries.d.ts +50 -0
  96. package/dist/core/project/boundaries.d.ts.map +1 -0
  97. package/dist/core/project/boundaries.js +117 -0
  98. package/dist/core/project/boundaries.js.map +1 -0
  99. package/dist/core/project/capabilities.d.ts +58 -0
  100. package/dist/core/project/capabilities.d.ts.map +1 -0
  101. package/dist/core/project/capabilities.js +135 -0
  102. package/dist/core/project/capabilities.js.map +1 -0
  103. package/dist/core/project/drift.d.ts +29 -0
  104. package/dist/core/project/drift.d.ts.map +1 -0
  105. package/dist/core/project/drift.js +188 -0
  106. package/dist/core/project/drift.js.map +1 -0
  107. package/dist/core/project/infra.d.ts +49 -0
  108. package/dist/core/project/infra.d.ts.map +1 -0
  109. package/dist/core/project/infra.js +167 -0
  110. package/dist/core/project/infra.js.map +1 -0
  111. package/dist/core/project/manifest.d.ts +92 -0
  112. package/dist/core/project/manifest.d.ts.map +1 -0
  113. package/dist/core/project/manifest.js +321 -0
  114. package/dist/core/project/manifest.js.map +1 -0
  115. package/dist/core/project/state.d.ts +15 -0
  116. package/dist/core/project/state.d.ts.map +1 -0
  117. package/dist/core/project/state.js +106 -0
  118. package/dist/core/project/state.js.map +1 -0
  119. package/dist/core/project/validation.d.ts +20 -0
  120. package/dist/core/project/validation.d.ts.map +1 -0
  121. package/dist/core/project/validation.js +274 -0
  122. package/dist/core/project/validation.js.map +1 -0
  123. package/dist/core/project/workflows.d.ts +43 -0
  124. package/dist/core/project/workflows.d.ts.map +1 -0
  125. package/dist/core/project/workflows.js +299 -0
  126. package/dist/core/project/workflows.js.map +1 -0
  127. package/dist/core/scaffold/auth-generator.d.ts +63 -0
  128. package/dist/core/scaffold/auth-generator.d.ts.map +1 -0
  129. package/dist/core/scaffold/auth-generator.js +1774 -0
  130. package/dist/core/scaffold/auth-generator.js.map +1 -0
  131. package/dist/core/scaffold/connector-functions-generator.d.ts +41 -0
  132. package/dist/core/scaffold/connector-functions-generator.d.ts.map +1 -0
  133. package/dist/core/scaffold/connector-functions-generator.js +1029 -0
  134. package/dist/core/scaffold/connector-functions-generator.js.map +1 -0
  135. package/dist/core/scaffold/functions-generator.d.ts +4 -3
  136. package/dist/core/scaffold/functions-generator.d.ts.map +1 -1
  137. package/dist/core/scaffold/functions-generator.js +405 -134
  138. package/dist/core/scaffold/functions-generator.js.map +1 -1
  139. package/dist/core/scaffold/model-parser.d.ts +20 -0
  140. package/dist/core/scaffold/model-parser.d.ts.map +1 -1
  141. package/dist/core/scaffold/model-parser.js +229 -78
  142. package/dist/core/scaffold/model-parser.js.map +1 -1
  143. package/dist/core/scaffold/native-schema-generator.d.ts +19 -0
  144. package/dist/core/scaffold/native-schema-generator.d.ts.map +1 -0
  145. package/dist/core/scaffold/native-schema-generator.js +753 -0
  146. package/dist/core/scaffold/native-schema-generator.js.map +1 -0
  147. package/dist/core/scaffold/nextjs-generator.d.ts +8 -0
  148. package/dist/core/scaffold/nextjs-generator.d.ts.map +1 -1
  149. package/dist/core/scaffold/nextjs-generator.js +152 -8
  150. package/dist/core/scaffold/nextjs-generator.js.map +1 -1
  151. package/dist/core/scaffold/ui-generator.d.ts +17 -4
  152. package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
  153. package/dist/core/scaffold/ui-generator.js +174 -34
  154. package/dist/core/scaffold/ui-generator.js.map +1 -1
  155. package/dist/core/verify/index.d.ts +69 -0
  156. package/dist/core/verify/index.d.ts.map +1 -0
  157. package/dist/core/verify/index.js +412 -0
  158. package/dist/core/verify/index.js.map +1 -0
  159. package/dist/machine/contracts.d.ts +24 -0
  160. package/dist/machine/contracts.d.ts.map +1 -0
  161. package/dist/machine/contracts.js +3 -0
  162. package/dist/machine/contracts.js.map +1 -0
  163. package/dist/machine/errors.d.ts +14 -0
  164. package/dist/machine/errors.d.ts.map +1 -0
  165. package/dist/machine/errors.js +42 -0
  166. package/dist/machine/errors.js.map +1 -0
  167. package/dist/machine/index.d.ts +3 -0
  168. package/dist/machine/index.d.ts.map +1 -0
  169. package/dist/machine/index.js +566 -0
  170. package/dist/machine/index.js.map +1 -0
  171. package/dist/mcp/index.d.ts +25 -0
  172. package/dist/mcp/index.d.ts.map +1 -0
  173. package/dist/mcp/index.js +425 -0
  174. package/dist/mcp/index.js.map +1 -0
  175. package/dist/types/index.d.ts +105 -0
  176. package/dist/types/index.d.ts.map +1 -1
  177. package/dist/utils/package-manager.d.ts +7 -11
  178. package/dist/utils/package-manager.d.ts.map +1 -1
  179. package/dist/utils/package-manager.js +42 -17
  180. package/dist/utils/package-manager.js.map +1 -1
  181. package/dist/utils/python-uv.d.ts +21 -0
  182. package/dist/utils/python-uv.d.ts.map +1 -0
  183. package/dist/utils/python-uv.js +111 -0
  184. package/dist/utils/python-uv.js.map +1 -0
  185. package/dist/version.d.ts +2 -0
  186. package/dist/version.d.ts.map +1 -0
  187. package/dist/version.js +49 -0
  188. package/dist/version.js.map +1 -0
  189. package/package.json +15 -17
  190. package/src/__tests__/__snapshots__/functions-generator.test.ts.snap +716 -22
  191. package/src/__tests__/__snapshots__/nextjs-generator.test.ts.snap +19 -7
  192. package/src/__tests__/__snapshots__/ui-generator.test.ts.snap +20 -12
  193. package/src/__tests__/agent-instructions.test.ts +237 -0
  194. package/src/__tests__/agent-loop-phase34.test.ts +513 -0
  195. package/src/__tests__/auth.test.ts +770 -0
  196. package/src/__tests__/bff-swa-auth.test.ts +275 -0
  197. package/src/__tests__/config.test.ts +176 -3
  198. package/src/__tests__/connector-functions-generator.test.ts +288 -0
  199. package/src/__tests__/connector-mock-server.test.ts +459 -0
  200. package/src/__tests__/connector-model-bff.test.ts +162 -0
  201. package/src/__tests__/cosmos-worktree-isolation.test.ts +149 -0
  202. package/src/__tests__/dev-seeds.test.ts +124 -0
  203. package/src/__tests__/dev.test.ts +254 -0
  204. package/src/__tests__/file-session.test.ts +98 -0
  205. package/src/__tests__/fixtures.ts +101 -0
  206. package/src/__tests__/functions-generator.test.ts +137 -1
  207. package/src/__tests__/init.test.ts +366 -2
  208. package/src/__tests__/jest-globals.d.ts +8 -0
  209. package/src/__tests__/machine.test.ts +371 -0
  210. package/src/__tests__/mcp.test.ts +253 -0
  211. package/src/__tests__/model-parser.test.ts +142 -0
  212. package/src/__tests__/multi-auth.test.ts +160 -0
  213. package/src/__tests__/nextjs-generator.test.ts +8 -0
  214. package/src/__tests__/package-manager.test.ts +59 -4
  215. package/src/__tests__/plan-apply.test.ts +499 -0
  216. package/src/__tests__/python-uv.test.ts +48 -0
  217. package/src/__tests__/scaffold.test.ts +287 -24
  218. package/src/__tests__/tsconfig.json +15 -0
  219. package/src/__tests__/ui-generator.test.ts +104 -0
  220. package/src/__tests__/zod-mock-generator.test.ts +132 -0
  221. package/src/cli/commands/add-auth.ts +853 -0
  222. package/src/cli/commands/add-connector.ts +159 -0
  223. package/src/cli/commands/cosmos-worktree-isolation.ts +130 -0
  224. package/src/cli/commands/create-model.ts +21 -100
  225. package/src/cli/commands/dev-seeds.ts +278 -7
  226. package/src/cli/commands/dev.ts +607 -160
  227. package/src/cli/commands/init.ts +851 -786
  228. package/src/cli/commands/scaffold.ts +531 -236
  229. package/src/cli/index.ts +338 -60
  230. package/src/core/config.ts +145 -9
  231. package/src/core/mock/connector-mock-server.ts +555 -0
  232. package/src/core/mock/zod-mock-generator.ts +205 -0
  233. package/src/core/operations/auth-operations.ts +360 -0
  234. package/src/core/operations/create-model.ts +191 -0
  235. package/src/core/operations/file-session.ts +222 -0
  236. package/src/core/operations/provision-operations.ts +297 -0
  237. package/src/core/operations/runtime.ts +258 -0
  238. package/src/core/operations/scaffold-apply.ts +106 -0
  239. package/src/core/operations/scaffold-machine.ts +77 -0
  240. package/src/core/operations/scaffold-plan.ts +215 -0
  241. package/src/core/project/agent-instructions.ts +167 -0
  242. package/src/core/project/agent-templates/AGENTS.md +504 -0
  243. package/src/core/project/agent-templates/CLAUDE.md +31 -0
  244. package/src/core/project/agent-templates/azure-functions.instructions.md +22 -0
  245. package/src/core/project/agent-templates/bff-routes.instructions.md +18 -0
  246. package/src/core/project/agent-templates/copilot-instructions.md +27 -0
  247. package/src/core/project/agent-templates/shared-models.instructions.md +72 -0
  248. package/src/core/project/artifacts.ts +205 -0
  249. package/src/core/project/boundaries.ts +170 -0
  250. package/src/core/project/capabilities.ts +193 -0
  251. package/src/core/project/drift.ts +202 -0
  252. package/src/core/project/infra.ts +196 -0
  253. package/src/core/project/manifest.ts +402 -0
  254. package/src/core/project/state.ts +77 -0
  255. package/src/core/project/validation.ts +295 -0
  256. package/src/core/project/workflows.ts +295 -0
  257. package/src/core/scaffold/auth-generator.ts +1824 -0
  258. package/src/core/scaffold/connector-functions-generator.ts +1133 -0
  259. package/src/core/scaffold/functions-generator.ts +432 -134
  260. package/src/core/scaffold/model-parser.ts +244 -90
  261. package/src/core/scaffold/native-schema-generator.ts +904 -0
  262. package/src/core/scaffold/nextjs-generator.ts +174 -9
  263. package/src/core/scaffold/ui-generator.ts +191 -36
  264. package/src/core/verify/index.ts +468 -0
  265. package/src/machine/contracts.ts +33 -0
  266. package/src/machine/errors.ts +45 -0
  267. package/src/machine/index.ts +690 -0
  268. package/src/mcp/index.ts +423 -0
  269. package/src/types/index.ts +137 -0
  270. package/src/utils/package-manager.ts +41 -19
  271. package/src/utils/python-uv.ts +96 -0
  272. package/src/version.ts +13 -0
@@ -0,0 +1,480 @@
1
+ "use strict";
2
+ /**
3
+ * コネクタモデル用モックサーバー
4
+ * - コネクタモデルへのリクエスト → Zodベースのインメモリ CRUD で応答
5
+ * - その他のリクエスト → 実Azure Functions へプロキシ
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.ConnectorMockServer = void 0;
45
+ const http = __importStar(require("http"));
46
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
47
+ const model_parser_1 = require("../scaffold/model-parser");
48
+ const zod_mock_generator_1 = require("./zod-mock-generator");
49
+ const dev_seeds_1 = require("../../cli/commands/dev-seeds");
50
+ /**
51
+ * コネクタモデル用モックサーバー
52
+ */
53
+ class ConnectorMockServer {
54
+ constructor(options) {
55
+ this.server = null;
56
+ this.stores = new Map();
57
+ this.routeMap = new Map(); // route → model
58
+ this.options = options;
59
+ // ルートマップを構築: モデル名(camelCase) → ModelInfo
60
+ for (const model of options.connectorModels) {
61
+ const route = (0, model_parser_1.toCamelCase)(model.name);
62
+ this.routeMap.set(route, model);
63
+ }
64
+ }
65
+ /**
66
+ * モックデータを初期化し、サーバーを起動
67
+ */
68
+ async start() {
69
+ await this.initializeStores();
70
+ return new Promise((resolve, reject) => {
71
+ this.server = http.createServer((req, res) => {
72
+ this.handleRequest(req, res);
73
+ });
74
+ this.server.on("error", reject);
75
+ this.server.listen(this.options.port, this.options.host || "localhost", () => {
76
+ resolve();
77
+ });
78
+ });
79
+ }
80
+ /**
81
+ * サーバーを停止
82
+ */
83
+ stop() {
84
+ return new Promise((resolve) => {
85
+ if (this.server) {
86
+ // Force close keep-alive connections (Node.js 18.2+)
87
+ if (typeof this.server.closeAllConnections === "function") {
88
+ this.server.closeAllConnections();
89
+ }
90
+ this.server.close(() => resolve());
91
+ }
92
+ else {
93
+ resolve();
94
+ }
95
+ });
96
+ }
97
+ /**
98
+ * 特定モデルの現在のストアデータを取得(テスト用)
99
+ */
100
+ getStore(modelName) {
101
+ const route = (0, model_parser_1.toCamelCase)(modelName);
102
+ return this.stores.get(route) || [];
103
+ }
104
+ // ─── Internal ─────────────────────────────────────────────
105
+ async initializeStores() {
106
+ const allModels = this.options.allModels || this.options.connectorModels;
107
+ const mockCount = this.options.mockCount ?? 5;
108
+ // まず Zod ベースのモックデータで初期化
109
+ for (const model of this.options.connectorModels) {
110
+ const route = (0, model_parser_1.toCamelCase)(model.name);
111
+ this.stores.set(route, (0, zod_mock_generator_1.generateMockDocuments)(model, mockCount, allModels));
112
+ }
113
+ // dev-seeds があれば上書き
114
+ if (this.options.seedEnv) {
115
+ try {
116
+ const seedFiles = await (0, dev_seeds_1.loadDevSeedFiles)(this.options.seedEnv, this.options.connectorModels, this.options.seedsDir);
117
+ for (const seedFile of seedFiles) {
118
+ const route = (0, model_parser_1.toCamelCase)(seedFile.model.name);
119
+ if (this.stores.has(route)) {
120
+ this.stores.set(route, seedFile.documents);
121
+ console.log(` 📂 Loaded ${seedFile.documents.length} seed doc(s) for ${seedFile.model.name}`);
122
+ }
123
+ }
124
+ }
125
+ catch (err) {
126
+ console.warn(`⚠️ Failed to load dev-seeds for connectors: ${err.message}`);
127
+ }
128
+ }
129
+ }
130
+ handleRequest(req, res) {
131
+ const { route, id } = this.parseRoute(req.url || "");
132
+ // Auth endpoints (when authConfig is set)
133
+ if (this.options.authConfig && route === "auth") {
134
+ this.handleAuthRequest(req, res, id);
135
+ return;
136
+ }
137
+ // コネクタモデルのルートか判定
138
+ if (route && this.routeMap.has(route)) {
139
+ this.handleMockCrud(req, res, route, id);
140
+ }
141
+ else {
142
+ this.proxyToFunctions(req, res);
143
+ }
144
+ }
145
+ /**
146
+ * URL パス解析: /api/backlogIssue/123 → { route: "backlogIssue", id: "123" }
147
+ */
148
+ parseRoute(url) {
149
+ const parsed = new URL(url, "http://localhost");
150
+ const segments = parsed.pathname.split("/").filter(Boolean);
151
+ // /api/<route> or /api/<route>/<id>
152
+ if (segments.length >= 2 && segments[0] === "api") {
153
+ return {
154
+ route: segments[1],
155
+ id: segments.length >= 3 ? segments[2] : null,
156
+ };
157
+ }
158
+ return { route: null, id: null };
159
+ }
160
+ handleMockCrud(req, res, route, id) {
161
+ const method = (req.method || "GET").toUpperCase();
162
+ const store = this.stores.get(route) || [];
163
+ const model = this.routeMap.get(route);
164
+ const ops = model.connectorConfig?.operations || [];
165
+ const isWrite = method === "POST" || method === "PUT" || method === "DELETE";
166
+ const requiredRoles = this.resolveRequiredRoles(model, isWrite);
167
+ const authResult = this.checkAuth(req, res, model, requiredRoles);
168
+ if (authResult === "error")
169
+ return; // 401/403 already sent
170
+ switch (method) {
171
+ case "GET":
172
+ req.resume();
173
+ if (id) {
174
+ if (!ops.includes("getById")) {
175
+ return this.sendJson(res, 405, { error: "getById not supported" });
176
+ }
177
+ const item = store.find((doc) => doc.id === id);
178
+ return item
179
+ ? this.sendJson(res, 200, item)
180
+ : this.sendJson(res, 404, { error: "Item not found" });
181
+ }
182
+ if (!ops.includes("getAll")) {
183
+ return this.sendJson(res, 405, { error: "getAll not supported" });
184
+ }
185
+ return this.sendJson(res, 200, store);
186
+ case "POST":
187
+ if (!ops.includes("create")) {
188
+ return this.drainAndRespond(req, res, 405, { error: "create not supported" });
189
+ }
190
+ this.readBody(req, (body) => {
191
+ if (!body.id) {
192
+ body.id = `${route}-${Date.now()}`;
193
+ }
194
+ body.createdAt = body.createdAt || new Date().toISOString();
195
+ body.updatedAt = body.updatedAt || new Date().toISOString();
196
+ store.push(body);
197
+ this.sendJson(res, 201, body);
198
+ });
199
+ return;
200
+ case "PUT":
201
+ if (!ops.includes("update")) {
202
+ return this.drainAndRespond(req, res, 405, { error: "update not supported" });
203
+ }
204
+ if (!id)
205
+ return this.drainAndRespond(req, res, 400, { error: "id required" });
206
+ this.readBody(req, (body) => {
207
+ const idx = store.findIndex((doc) => doc.id === id);
208
+ if (idx === -1)
209
+ return this.sendJson(res, 404, { error: "Item not found" });
210
+ body.updatedAt = new Date().toISOString();
211
+ store[idx] = { ...store[idx], ...body, id };
212
+ this.sendJson(res, 200, store[idx]);
213
+ });
214
+ return;
215
+ case "DELETE":
216
+ {
217
+ req.resume();
218
+ if (!ops.includes("delete")) {
219
+ return this.sendJson(res, 405, { error: "delete not supported" });
220
+ }
221
+ if (!id)
222
+ return this.sendJson(res, 400, { error: "id required" });
223
+ const deleteIdx = store.findIndex((doc) => doc.id === id);
224
+ if (deleteIdx === -1)
225
+ return this.sendJson(res, 404, { error: "Item not found" });
226
+ store.splice(deleteIdx, 1);
227
+ return this.sendJson(res, 204, null);
228
+ }
229
+ default:
230
+ req.resume();
231
+ return this.sendJson(res, 405, { error: `Method ${method} not allowed` });
232
+ }
233
+ }
234
+ /**
235
+ * コネクタモデル以外のリクエストをAzure Functionsへプロキシ
236
+ */
237
+ proxyToFunctions(req, res) {
238
+ const [targetHost, targetPort] = this.options.functionsTarget.split(":");
239
+ const proxyOpts = {
240
+ hostname: targetHost,
241
+ port: parseInt(targetPort, 10),
242
+ path: req.url,
243
+ method: req.method,
244
+ headers: { ...req.headers, host: this.options.functionsTarget },
245
+ };
246
+ const proxyReq = http.request(proxyOpts, (proxyRes) => {
247
+ res.writeHead(proxyRes.statusCode || 502, proxyRes.headers);
248
+ proxyRes.pipe(res, { end: true });
249
+ });
250
+ proxyReq.on("error", (err) => {
251
+ // Functions がまだ起動していない場合
252
+ this.sendJson(res, 502, {
253
+ error: "Azure Functions not available",
254
+ detail: err.message,
255
+ });
256
+ });
257
+ req.pipe(proxyReq, { end: true });
258
+ }
259
+ // ─── Auth Routes (RDB user queries + JWT generation) ───
260
+ handleAuthRequest(req, res, endpoint) {
261
+ const method = (req.method || "GET").toUpperCase();
262
+ // Handle CORS preflight
263
+ if (method === "OPTIONS") {
264
+ req.resume();
265
+ res.writeHead(200, {
266
+ "Access-Control-Allow-Origin": "*",
267
+ "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
268
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
269
+ });
270
+ res.end();
271
+ return;
272
+ }
273
+ if (endpoint === "login" && method === "POST") {
274
+ this.handleLogin(req, res);
275
+ }
276
+ else if (endpoint === "me" && method === "GET") {
277
+ this.handleMe(req, res);
278
+ }
279
+ else if (endpoint === "logout" && method === "POST") {
280
+ req.resume();
281
+ this.sendJson(res, 200, { message: "Logged out" });
282
+ }
283
+ else {
284
+ req.resume();
285
+ this.sendJson(res, 404, { error: "Auth endpoint not found" });
286
+ }
287
+ }
288
+ handleLogin(req, res) {
289
+ this.readBody(req, (body) => {
290
+ const loginId = body.loginId;
291
+ const password = body.password;
292
+ if (!loginId || !password) {
293
+ return this.sendJson(res, 400, { error: "loginId and password are required" });
294
+ }
295
+ const users = this.resolveUserStore();
296
+ if (!users) {
297
+ return this.sendJson(res, 500, {
298
+ error: "No user model found — ensure a connector model with the configured userTable exists",
299
+ });
300
+ }
301
+ const loginField = this.options.authConfig?.customJwt?.loginIdColumn || "loginId";
302
+ const passwordField = this.options.authConfig?.customJwt?.passwordHashColumn || "password";
303
+ const rolesField = this.options.authConfig?.customJwt?.rolesColumn || "roles";
304
+ const user = users.find((u) => (u[loginField] || u.loginId) === loginId);
305
+ if (!user) {
306
+ return this.sendJson(res, 401, { error: "Invalid credentials" });
307
+ }
308
+ // Plaintext password comparison (mock mode only)
309
+ const storedPassword = (user[passwordField] || user.password);
310
+ if (storedPassword !== password) {
311
+ return this.sendJson(res, 401, { error: "Invalid credentials" });
312
+ }
313
+ // Parse roles
314
+ let roles = [];
315
+ const rolesValue = user[rolesField] || user.roles;
316
+ if (Array.isArray(rolesValue)) {
317
+ roles = rolesValue;
318
+ }
319
+ else if (typeof rolesValue === "string") {
320
+ try {
321
+ roles = JSON.parse(rolesValue);
322
+ }
323
+ catch {
324
+ roles = rolesValue.split(",").map((r) => r.trim());
325
+ }
326
+ }
327
+ const authUser = {
328
+ id: String(user.id),
329
+ loginId: String(user[loginField] || user.loginId),
330
+ name: String(user.name || user[loginField] || user.loginId),
331
+ email: String(user.email || ""),
332
+ roles,
333
+ };
334
+ // Generate JWT
335
+ const secret = this.options.authConfig.jwtSecret;
336
+ const expiry = (this.options.authConfig.tokenExpiry || "24h");
337
+ const token = jsonwebtoken_1.default.sign({
338
+ sub: authUser.id,
339
+ loginId: authUser.loginId,
340
+ name: authUser.name,
341
+ email: authUser.email,
342
+ roles: authUser.roles,
343
+ }, secret, { expiresIn: expiry });
344
+ const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString();
345
+ this.sendJson(res, 200, { user: authUser, token, expiresAt });
346
+ });
347
+ }
348
+ handleMe(req, res) {
349
+ req.resume();
350
+ const authHeader = req.headers["authorization"];
351
+ if (!authHeader || !authHeader.startsWith("Bearer ")) {
352
+ return this.sendJson(res, 401, { error: "Missing or invalid Authorization header" });
353
+ }
354
+ const token = authHeader.slice(7);
355
+ try {
356
+ const secret = this.options.authConfig.jwtSecret;
357
+ const payload = jsonwebtoken_1.default.verify(token, secret);
358
+ this.sendJson(res, 200, {
359
+ sub: payload.sub,
360
+ loginId: payload.loginId,
361
+ name: payload.name,
362
+ email: payload.email,
363
+ roles: payload.roles,
364
+ });
365
+ }
366
+ catch {
367
+ this.sendJson(res, 401, { error: "Invalid or expired token" });
368
+ }
369
+ }
370
+ // ─── Utilities ────────────────────────────────────────────
371
+ /**
372
+ * authConfig.customJwt.userTable に対応するモデルのストアを返す。
373
+ * ユーザーテーブルが見つからない場合は null を返す。
374
+ */
375
+ resolveUserStore() {
376
+ const userTable = this.options.authConfig?.customJwt?.userTable;
377
+ if (!userTable)
378
+ return null;
379
+ for (const model of this.options.connectorModels) {
380
+ const cfg = model.connectorConfig;
381
+ if (cfg && "table" in cfg && cfg.table === userTable) {
382
+ return this.stores.get((0, model_parser_1.toCamelCase)(model.name)) || null;
383
+ }
384
+ }
385
+ return null;
386
+ }
387
+ /**
388
+ * JWT を検証し、ペイロード(roles 含む)を返す。
389
+ * 認証不要な場合は null を返す。401/403 の場合はレスポンスを送信して 'error' を返す。
390
+ */
391
+ checkAuth(req, res, model, requiredRoles) {
392
+ const authCfg = this.options.authConfig;
393
+ if (!authCfg)
394
+ return null; // auth 未設定 → 全スルー
395
+ const policy = model.authPolicy;
396
+ const defaultPolicy = authCfg.defaultPolicy || "anonymous";
397
+ // モデルに authPolicy がなく defaultPolicy が anonymous → 認証不要
398
+ if (!policy && defaultPolicy === "anonymous")
399
+ return null;
400
+ // JWT 検証
401
+ const authHeader = req.headers["authorization"];
402
+ if (!authHeader || !authHeader.startsWith("Bearer ")) {
403
+ this.sendJson(res, 401, { error: "Missing or invalid Authorization header" });
404
+ return "error";
405
+ }
406
+ const token = authHeader.slice(7);
407
+ try {
408
+ const payload = jsonwebtoken_1.default.verify(token, authCfg.jwtSecret);
409
+ // ロールチェック
410
+ if (requiredRoles && requiredRoles.length > 0) {
411
+ const userRoles = Array.isArray(payload.roles) ? payload.roles : [];
412
+ const hasRole = requiredRoles.some((r) => userRoles.includes(r));
413
+ if (!hasRole) {
414
+ this.sendJson(res, 403, {
415
+ error: `Requires one of roles: ${requiredRoles.join(", ")}`,
416
+ });
417
+ return "error";
418
+ }
419
+ }
420
+ return payload;
421
+ }
422
+ catch {
423
+ this.sendJson(res, 401, { error: "Invalid or expired token" });
424
+ return "error";
425
+ }
426
+ }
427
+ /**
428
+ * モデルの authPolicy から read/write に必要なロールを解決
429
+ */
430
+ resolveRequiredRoles(model, isWrite) {
431
+ const policy = model.authPolicy;
432
+ if (!policy)
433
+ return undefined; // defaultPolicy: authenticated → 認証のみ、ロールチェック不要
434
+ if (isWrite) {
435
+ return Array.isArray(policy.write) ? policy.write : policy.roles;
436
+ }
437
+ return Array.isArray(policy.read) ? policy.read : policy.roles;
438
+ }
439
+ readBody(req, callback) {
440
+ let data = "";
441
+ req.on("data", (chunk) => (data += chunk));
442
+ req.on("end", () => {
443
+ try {
444
+ callback(JSON.parse(data));
445
+ }
446
+ catch {
447
+ callback({});
448
+ }
449
+ });
450
+ }
451
+ sendJson(res, status, body) {
452
+ res.writeHead(status, {
453
+ "Content-Type": "application/json",
454
+ "Access-Control-Allow-Origin": "*",
455
+ "Connection": "close",
456
+ });
457
+ if (body !== null && body !== undefined) {
458
+ res.end(JSON.stringify(body));
459
+ }
460
+ else {
461
+ res.end();
462
+ }
463
+ }
464
+ /**
465
+ * リクエストボディを完全に読み捨ててからレスポンスを送信
466
+ * POST/PUT の 405 等で未読ボディがある場合に Linux で RST を防ぐ
467
+ */
468
+ drainAndRespond(req, res, status, body) {
469
+ if (req.readableEnded) {
470
+ this.sendJson(res, status, body);
471
+ return;
472
+ }
473
+ req.resume();
474
+ req.on("end", () => {
475
+ this.sendJson(res, status, body);
476
+ });
477
+ }
478
+ }
479
+ exports.ConnectorMockServer = ConnectorMockServer;
480
+ //# sourceMappingURL=connector-mock-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector-mock-server.js","sourceRoot":"","sources":["../../../src/core/mock/connector-mock-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Zod スキーマ(ModelInfo)からモックデータを自動生成する
3
+ * フィールド名・型のヒューリスティクスで現実的な値を生成
4
+ */
5
+ import { ModelInfo } from "../scaffold/model-parser";
6
+ /**
7
+ * 単一のモックドキュメントを生成
8
+ */
9
+ export declare function generateMockDocument(model: ModelInfo, index: number, allModels?: ModelInfo[], seenModels?: Set<string>): Record<string, unknown>;
10
+ /**
11
+ * 複数のモックドキュメントを生成
12
+ */
13
+ export declare function generateMockDocuments(model: ModelInfo, count?: number, allModels?: ModelInfo[]): Record<string, unknown>[];
14
+ //# sourceMappingURL=zod-mock-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-mock-generator.d.ts","sourceRoot":"","sources":["../../../src/core/mock/zod-mock-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAuC,MAAM,0BAA0B,CAAC;AAE1F;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,SAAS,EAAY,EAChC,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,KAAK,GAAE,MAAU,EACjB,SAAS,GAAE,SAAS,EAAY,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAM3B"}