@braidhq/server 0.2.1 → 0.4.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 (84) hide show
  1. package/README.md +47 -2
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +47 -8
  4. package/dist/app.js.map +1 -1
  5. package/dist/composeApp.d.ts +15 -3
  6. package/dist/composeApp.d.ts.map +1 -1
  7. package/dist/composeApp.js +28 -2
  8. package/dist/composeApp.js.map +1 -1
  9. package/dist/composeFsApp.d.ts +52 -3
  10. package/dist/composeFsApp.d.ts.map +1 -1
  11. package/dist/composeFsApp.js +237 -64
  12. package/dist/composeFsApp.js.map +1 -1
  13. package/dist/defaultOntologyPlugins.d.ts +9 -0
  14. package/dist/defaultOntologyPlugins.d.ts.map +1 -0
  15. package/dist/defaultOntologyPlugins.js +11 -0
  16. package/dist/defaultOntologyPlugins.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/infrastructure/_shared/paths.d.ts +2 -0
  22. package/dist/infrastructure/_shared/paths.d.ts.map +1 -1
  23. package/dist/infrastructure/_shared/paths.js +6 -0
  24. package/dist/infrastructure/_shared/paths.js.map +1 -1
  25. package/dist/infrastructure/oauth/GitHubOAuth.d.ts +45 -0
  26. package/dist/infrastructure/oauth/GitHubOAuth.d.ts.map +1 -0
  27. package/dist/infrastructure/oauth/GitHubOAuth.js +85 -0
  28. package/dist/infrastructure/oauth/GitHubOAuth.js.map +1 -0
  29. package/dist/infrastructure/oauth/providers.d.ts +19 -0
  30. package/dist/infrastructure/oauth/providers.d.ts.map +1 -0
  31. package/dist/infrastructure/oauth/providers.js +22 -0
  32. package/dist/infrastructure/oauth/providers.js.map +1 -0
  33. package/dist/infrastructure/skill/FsSkillRegistry.d.ts +6 -0
  34. package/dist/infrastructure/skill/FsSkillRegistry.d.ts.map +1 -1
  35. package/dist/infrastructure/skill/FsSkillRegistry.js +7 -1
  36. package/dist/infrastructure/skill/FsSkillRegistry.js.map +1 -1
  37. package/dist/infrastructure/skill/SubprocessSkillRunner.d.ts +28 -5
  38. package/dist/infrastructure/skill/SubprocessSkillRunner.d.ts.map +1 -1
  39. package/dist/infrastructure/skill/SubprocessSkillRunner.js +133 -13
  40. package/dist/infrastructure/skill/SubprocessSkillRunner.js.map +1 -1
  41. package/dist/infrastructure/source/FsSourceSyncStateRepository.d.ts +24 -0
  42. package/dist/infrastructure/source/FsSourceSyncStateRepository.d.ts.map +1 -0
  43. package/dist/infrastructure/source/FsSourceSyncStateRepository.js +71 -0
  44. package/dist/infrastructure/source/FsSourceSyncStateRepository.js.map +1 -0
  45. package/dist/infrastructure/source/unitScan.d.ts.map +1 -1
  46. package/dist/infrastructure/source/unitScan.js +51 -3
  47. package/dist/infrastructure/source/unitScan.js.map +1 -1
  48. package/dist/infrastructure/workspace/productManifestWriter.d.ts +5 -1
  49. package/dist/infrastructure/workspace/productManifestWriter.d.ts.map +1 -1
  50. package/dist/infrastructure/workspace/productManifestWriter.js +5 -2
  51. package/dist/infrastructure/workspace/productManifestWriter.js.map +1 -1
  52. package/dist/middleware/auth.d.ts.map +1 -1
  53. package/dist/middleware/auth.js +8 -1
  54. package/dist/middleware/auth.js.map +1 -1
  55. package/dist/routes/oauth.d.ts +51 -10
  56. package/dist/routes/oauth.d.ts.map +1 -1
  57. package/dist/routes/oauth.js +174 -62
  58. package/dist/routes/oauth.js.map +1 -1
  59. package/dist/routes/skillInputOptions.js +4 -1
  60. package/dist/routes/skillInputOptions.js.map +1 -1
  61. package/dist/routes/skills.d.ts +7 -1
  62. package/dist/routes/skills.d.ts.map +1 -1
  63. package/dist/routes/skills.js +10 -0
  64. package/dist/routes/skills.js.map +1 -1
  65. package/dist/routes/sourceConnection.d.ts +30 -0
  66. package/dist/routes/sourceConnection.d.ts.map +1 -0
  67. package/dist/routes/sourceConnection.js +51 -0
  68. package/dist/routes/sourceConnection.js.map +1 -0
  69. package/dist/routes/sourceWebhooks.d.ts +10 -2
  70. package/dist/routes/sourceWebhooks.d.ts.map +1 -1
  71. package/dist/routes/sourceWebhooks.js +23 -11
  72. package/dist/routes/sourceWebhooks.js.map +1 -1
  73. package/dist/routes/workspaces.d.ts +10 -1
  74. package/dist/routes/workspaces.d.ts.map +1 -1
  75. package/dist/routes/workspaces.js +50 -7
  76. package/dist/routes/workspaces.js.map +1 -1
  77. package/dist/startServer.d.ts +7 -1
  78. package/dist/startServer.d.ts.map +1 -1
  79. package/dist/startServer.js +18 -3
  80. package/dist/startServer.js.map +1 -1
  81. package/dist/startup.d.ts.map +1 -1
  82. package/dist/startup.js +7 -1
  83. package/dist/startup.js.map +1 -1
  84. package/package.json +17 -15
@@ -0,0 +1,24 @@
1
+ import type { SourceSyncStateRepository } from '@braidhq/core';
2
+ import type { AbsolutePath, SourceId, SourceSyncState, WorkspaceId } from '@braidhq/schema';
3
+ export interface FsSourceSyncStateRepositoryOptions {
4
+ /** Shared `workspaceId` to `workspaceRoot` lookup, built once by `composeFsApp`. */
5
+ readonly workspaceRoots: () => Promise<ReadonlyMap<WorkspaceId, AbsolutePath>>;
6
+ }
7
+ /**
8
+ * Filesystem-backed `SourceSyncStateRepository`, one file per source,
9
+ * at `artifacts/source-sync-state/<sourceId>.json`,
10
+ * matching the file-per-entity pattern the other fs stores use.
11
+ *
12
+ * Writes go through a temp file and a rename,
13
+ * so a crash mid-write leaves the previous record intact,
14
+ * rather than a truncated one the next boot cannot parse.
15
+ */
16
+ export declare class FsSourceSyncStateRepository implements SourceSyncStateRepository {
17
+ private readonly options;
18
+ constructor(options: FsSourceSyncStateRepositoryOptions);
19
+ find(workspaceId: WorkspaceId, sourceId: SourceId): Promise<SourceSyncState | null>;
20
+ save(state: SourceSyncState): Promise<void>;
21
+ listByWorkspace(workspaceId: WorkspaceId): Promise<readonly SourceSyncState[]>;
22
+ private resolveRoot;
23
+ }
24
+ //# sourceMappingURL=FsSourceSyncStateRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsSourceSyncStateRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/source/FsSourceSyncStateRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAS3F,MAAM,WAAW,kCAAkC;IACjD,oFAAoF;IACpF,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;CAC/E;AAED;;;;;;;;GAQG;AACH,qBAAa,2BAA4B,YAAW,yBAAyB;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,kCAAkC;IAElE,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAanF,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;YAatE,WAAW;CAO1B"}
@@ -0,0 +1,71 @@
1
+ import { mkdir, readdir, readFile, rename, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import process from 'node:process';
4
+ import { NotFoundError } from '@braidhq/core';
5
+ import { SourceSyncState as SourceSyncStateSchema } from '@braidhq/schema';
6
+ import { sourceSyncStateDir, sourceSyncStateFilePath } from '../_shared/paths.js';
7
+ /**
8
+ * Filesystem-backed `SourceSyncStateRepository`, one file per source,
9
+ * at `artifacts/source-sync-state/<sourceId>.json`,
10
+ * matching the file-per-entity pattern the other fs stores use.
11
+ *
12
+ * Writes go through a temp file and a rename,
13
+ * so a crash mid-write leaves the previous record intact,
14
+ * rather than a truncated one the next boot cannot parse.
15
+ */
16
+ export class FsSourceSyncStateRepository {
17
+ options;
18
+ constructor(options) {
19
+ this.options = options;
20
+ }
21
+ async find(workspaceId, sourceId) {
22
+ const root = await this.resolveRoot(workspaceId);
23
+ try {
24
+ const raw = await readFile(sourceSyncStateFilePath(root, sourceId), 'utf-8');
25
+ return SourceSyncStateSchema.parse(JSON.parse(raw));
26
+ }
27
+ catch (error) {
28
+ if (error.code === 'ENOENT')
29
+ return null;
30
+ throw error;
31
+ }
32
+ }
33
+ async save(state) {
34
+ const root = await this.resolveRoot(state.workspaceId);
35
+ const file = sourceSyncStateFilePath(root, state.sourceId);
36
+ await mkdir(sourceSyncStateDir(root), { recursive: true });
37
+ const temporaryPath = `${file}.tmp-${process.pid}-${Date.now()}`;
38
+ await writeFile(temporaryPath, `${JSON.stringify(state, null, 2)}\n`, 'utf-8');
39
+ await rename(temporaryPath, file);
40
+ }
41
+ async listByWorkspace(workspaceId) {
42
+ const root = await this.resolveRoot(workspaceId);
43
+ const dir = sourceSyncStateDir(root);
44
+ const states = [];
45
+ for (const entry of await safeReaddir(dir)) {
46
+ if (!entry.isFile() || !entry.name.endsWith('.json'))
47
+ continue;
48
+ const raw = await readFile(join(dir, entry.name), 'utf-8');
49
+ states.push(SourceSyncStateSchema.parse(JSON.parse(raw)));
50
+ }
51
+ return states;
52
+ }
53
+ async resolveRoot(workspaceId) {
54
+ const roots = await this.options.workspaceRoots();
55
+ const root = roots.get(workspaceId);
56
+ if (!root)
57
+ throw new NotFoundError(`Workspace "${workspaceId}" has no registered root path`);
58
+ return root;
59
+ }
60
+ }
61
+ async function safeReaddir(dir) {
62
+ try {
63
+ return await readdir(dir, { withFileTypes: true });
64
+ }
65
+ catch (error) {
66
+ if (error.code === 'ENOENT')
67
+ return [];
68
+ throw error;
69
+ }
70
+ }
71
+ //# sourceMappingURL=FsSourceSyncStateRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsSourceSyncStateRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/source/FsSourceSyncStateRepository.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"unitScan.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/source/unitScan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAOjD,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,UAAU,EAAE,CAGxG;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAcjH"}
1
+ {"version":3,"file":"unitScan.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/source/unitScan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AASjD,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,UAAU,EAAE,CAGxG;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAcjH"}
@@ -1,6 +1,8 @@
1
- import { readdir } from 'node:fs/promises';
1
+ import { Buffer } from 'node:buffer';
2
+ import { open, readdir } from 'node:fs/promises';
2
3
  import { isAbsolute, join } from 'node:path';
3
4
  import { unitBearingRoleIds } from '@braidhq/core';
5
+ import { parseMarkdownFrontmatter } from '../_shared/frontmatter.js';
4
6
  const UNIT_FILE_EXTENSIONS = new Set(['.md', '.mdx', '.markdown', '.txt', '.rst']);
5
7
  /** The unit-bearing role ids the workspace's active ontology declares. */
6
8
  export function unitBearingRolesOf(registry, workspace) {
@@ -50,11 +52,13 @@ async function listUnitEntries(root, sourceId, sourceName) {
50
52
  const flatFiles = await listFlatDocumentFiles(folder);
51
53
  if (flatFiles) {
52
54
  for (const name of flatFiles) {
55
+ const title = await readTitle(join(folder, name));
53
56
  items.push({
54
57
  value: `${entry.name}/${name}`,
55
58
  label: `${entry.name}/${stripExtension(name)}`,
56
59
  sourceId,
57
60
  sourceName,
61
+ ...(title ? { title } : {}),
58
62
  });
59
63
  }
60
64
  continue;
@@ -70,15 +74,19 @@ async function listUnitEntries(root, sourceId, sourceName) {
70
74
  continue;
71
75
  }
72
76
  if (entry.isFile() && isUnitDocument(entry.name)) {
77
+ const title = await readTitle(join(root, entry.name));
73
78
  items.push({
74
79
  value: entry.name,
75
80
  label: stripExtension(entry.name),
76
81
  sourceId,
77
82
  sourceName,
83
+ ...(title ? { title } : {}),
78
84
  });
79
85
  }
80
86
  }
81
- return items.sort((a, b) => a.label.localeCompare(b.label));
87
+ // Newest first, which for a mirror named by upstream id,
88
+ // means the most recent work rather than the oldest.
89
+ return items.sort((a, b) => byNaturalName(b.label, a.label));
82
90
  }
83
91
  // A flat document directory has every visible entry a markdown file,
84
92
  // with no subdirectories.
@@ -109,7 +117,7 @@ async function listFlatDocumentFiles(dir) {
109
117
  }
110
118
  if (docs.length === 0)
111
119
  return undefined;
112
- return docs.sort((a, b) => a.localeCompare(b));
120
+ return docs.sort(byNaturalName);
113
121
  }
114
122
  async function containsDocument(dir, maxDepth) {
115
123
  if (maxDepth < 0)
@@ -131,6 +139,46 @@ async function containsDocument(dir, maxDepth) {
131
139
  }
132
140
  return false;
133
141
  }
142
+ /**
143
+ * Orders names the way a reader expects, so `9` precedes `10`.
144
+ * Plain string order puts `10` first,
145
+ * which scrambles any source named by an upstream id,
146
+ * once the numbers pass single digits.
147
+ *
148
+ * The locale is pinned, since the default varies by host,
149
+ * and the order a listing comes back in should not.
150
+ */
151
+ function byNaturalName(left, right) {
152
+ return left.localeCompare(right, 'en', { numeric: true });
153
+ }
154
+ // Frontmatter sits at the top, so the rest of a long document is never read.
155
+ // A picker opens over every unit at once, and some mirrors run to thousands.
156
+ const FRONTMATTER_BUDGET = 4096;
157
+ /**
158
+ * The document's own title, when its frontmatter carries one.
159
+ * Anything unreadable or unparseable yields nothing,
160
+ * since a listing that fails over one malformed document,
161
+ * is worse than one missing a label.
162
+ */
163
+ async function readTitle(path) {
164
+ let handle;
165
+ try {
166
+ handle = await open(path, 'r');
167
+ const buffer = Buffer.alloc(FRONTMATTER_BUDGET);
168
+ const { bytesRead } = await handle.read(buffer, 0, FRONTMATTER_BUDGET, 0);
169
+ const head = buffer.subarray(0, bytesRead).toString('utf-8');
170
+ // A truncated read can cut the closing delimiter, so put one back.
171
+ const { frontmatter } = parseMarkdownFrontmatter(bytesRead < FRONTMATTER_BUDGET ? head : `${head}\n---\n`);
172
+ const { title } = frontmatter;
173
+ return typeof title === 'string' && title.length > 0 ? title : undefined;
174
+ }
175
+ catch {
176
+ return undefined;
177
+ }
178
+ finally {
179
+ await handle?.close();
180
+ }
181
+ }
134
182
  function isUnitDocument(filename) {
135
183
  const dot = filename.lastIndexOf('.');
136
184
  if (dot < 0)
@@ -1 +1 @@
1
- {"version":3,"file":"unitScan.js","sourceRoot":"","sources":["../../../src/infrastructure/source/unitScan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAElF,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,QAAwB,EAAE,SAAoB;IAC/E,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;IAC5E,OAAO,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAoB,EAAE,KAA4B;IACpF,MAAM,KAAK,GAAqB,EAAE,CAAA;IAClC,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;YAC9B,SAAQ;QACV,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAC9B,6DAA6D;YAC7D,SAAQ;QACV,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;YAC1C,CAAC,CAAC,MAAM,CAAC,IAAI;YACb,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QACzC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB,EAAE,UAAkB;IAC/E,MAAM,KAAK,GAAqB,EAAE,CAAA;IAClC,IAAI,UAAU,CAAA;IACd,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,CAAC;IACD,MAAM,CAAC;QACL,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC5B,SAAQ;QACV,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACrC,oEAAoE;YACpE,8EAA8E;YAC9E,sDAAsD;YACtD,mDAAmD;YACnD,8DAA8D;YAC9D,uDAAuD;YACvD,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAA;YACrD,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE;wBAC9B,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;wBAC9C,QAAQ;wBACR,UAAU;qBACX,CAAC,CAAA;gBACJ,CAAC;gBACD,SAAQ;YACV,CAAC;YACD,IAAI,MAAM,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG;oBACvB,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,QAAQ;oBACR,UAAU;iBACX,CAAC,CAAA;YACJ,CAAC;YACD,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;gBACjC,QAAQ;gBACR,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED,qEAAqE;AACrE,0BAA0B;AAC1B,iDAAiD;AACjD,uEAAuE;AACvE,kCAAkC;AAClC,oCAAoC;AACpC,wEAAwE;AACxE,KAAK,UAAU,qBAAqB,CAAC,GAAW;IAC9C,IAAI,OAAO,CAAA;IACX,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IACvD,CAAC;IACD,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC5B,SAAQ;QACV,IAAI,KAAK,CAAC,WAAW,EAAE;YACrB,OAAO,SAAS,CAAA;QAClB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,SAAQ;QACV,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7B,OAAO,SAAS,CAAA;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QACnB,OAAO,SAAS,CAAA;IAClB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,QAAgB;IAC3D,IAAI,QAAQ,GAAG,CAAC;QACd,OAAO,KAAK,CAAA;IACd,IAAI,OAAO,CAAA;IACX,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IACvD,CAAC;IACD,MAAM,CAAC;QACL,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAC5B,SAAQ;QACV,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;YAC9C,OAAO,IAAI,CAAA;QACb,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,MAAM,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;YACpF,OAAO,IAAI,CAAA;IACf,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,GAAG,GAAG,CAAC;QACT,OAAO,KAAK,CAAA;IACd,OAAO,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACrC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AACpD,CAAC"}
1
+ {"version":3,"file":"unitScan.js","sourceRoot":"","sources":["../../../src/infrastructure/source/unitScan.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,15 @@
1
1
  import type { ProductManifest, ProductManifestCreate } from '@braidhq/schema';
2
+ import { OntologyId } from '@braidhq/schema';
2
3
  /**
3
4
  * Take a user-provided `ProductManifestCreate` and fill in the structure,
4
5
  * such as the storage block, so the result is a complete `ProductManifest`,
5
6
  * that Zod will accept.
7
+ * `defaultOntologyId` comes from the composition, the sole registered
8
+ * ontology in a single-ontology build, and only a build that registers
9
+ * none at all falls back to the coding preset's `ddd`.
6
10
  * Throws if the user's own input is inconsistent.
7
11
  */
8
- export declare function fillManifestDefaults(draft: ProductManifestCreate): ProductManifest;
12
+ export declare function fillManifestDefaults(draft: ProductManifestCreate, defaultOntologyId?: OntologyId): ProductManifest;
9
13
  /**
10
14
  * Render a `ProductManifest` as YAML-frontmatter markdown,
11
15
  * then write it to `<workspaceRoot>/PRODUCT.md`.
@@ -1 +1 @@
1
- {"version":3,"file":"productManifestWriter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workspace/productManifestWriter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAGtB,MAAM,iBAAiB,CAAA;AAcxB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,GAAG,eAAe,CAWlF;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAShI;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ7G"}
1
+ {"version":3,"file":"productManifestWriter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workspace/productManifestWriter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAGtB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,UAAU,EAA4C,MAAM,iBAAiB,CAAA;AAWtF;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,EAAE,UAAU,GAAG,eAAe,CAWlH;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAShI;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ7G"}
@@ -12,14 +12,17 @@ const DEFAULT_STORAGE = {
12
12
  * Take a user-provided `ProductManifestCreate` and fill in the structure,
13
13
  * such as the storage block, so the result is a complete `ProductManifest`,
14
14
  * that Zod will accept.
15
+ * `defaultOntologyId` comes from the composition, the sole registered
16
+ * ontology in a single-ontology build, and only a build that registers
17
+ * none at all falls back to the coding preset's `ddd`.
15
18
  * Throws if the user's own input is inconsistent.
16
19
  */
17
- export function fillManifestDefaults(draft) {
20
+ export function fillManifestDefaults(draft, defaultOntologyId) {
18
21
  const manifest = {
19
22
  name: draft.name,
20
23
  version: draft.version ?? '0.1.0',
21
24
  ...(draft.description ? { description: draft.description } : {}),
22
- ontologyId: draft.ontologyId ?? OntologyId.parse('ddd'),
25
+ ontologyId: draft.ontologyId ?? defaultOntologyId ?? OntologyId.parse('ddd'),
23
26
  sources: draft.sources,
24
27
  mcpServers: draft.mcpServers,
25
28
  storage: draft.storage ?? DEFAULT_STORAGE,
@@ -1 +1 @@
1
- {"version":3,"file":"productManifestWriter.js","sourceRoot":"","sources":["../../../src/infrastructure/workspace/productManifestWriter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAA;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,MAAM,qBAAqB,GAAG,KAAK,CAAA;AAEnC,MAAM,eAAe,GAAsB;IACzC,IAAI,EAAE,MAAqB;IAC3B,MAAM,EAAE,EAAE;CACX,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAA4B;IAC/D,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO;QACjC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QACvD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe;KAC1C,CAAA;IACD,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,aAAqB,EAAE,QAAyB,EAAE,SAAkB;IAC7G,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;IACzE,MAAM,OAAO,GAAG,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAA;IAC1C,MAAM,IAAI,GAAG,OAAO,OAAO,IAAI,CAAA;IAC/B,MAAM,OAAO,GAAG,GAAG,qBAAqB,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI,EAAE,CAAA;IACtF,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;IAC9C,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACvC,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,aAAqB,EAAE,QAAyB;IAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;IAC9C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,wBAAwB,CAAU,QAAQ,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;IACzE,MAAM,OAAO,GAAG,GAAG,qBAAqB,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI,EAAE,CAAA;IACtF,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACvC,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"productManifestWriter.js","sourceRoot":"","sources":["../../../src/infrastructure/workspace/productManifestWriter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAA;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,MAAM,qBAAqB,GAAG,KAAK,CAAA;AAEnC,MAAM,eAAe,GAAsB;IACzC,IAAI,EAAE,MAAqB;IAC3B,MAAM,EAAE,EAAE;CACX,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAA4B,EAAE,iBAA8B;IAC/F,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO;QACjC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,iBAAiB,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5E,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe;KAC1C,CAAA;IACD,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,aAAqB,EAAE,QAAyB,EAAE,SAAkB;IAC7G,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;IACzE,MAAM,OAAO,GAAG,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAA;IAC1C,MAAM,IAAI,GAAG,OAAO,OAAO,IAAI,CAAA;IAC/B,MAAM,OAAO,GAAG,GAAG,qBAAqB,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI,EAAE,CAAA;IACtF,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;IAC9C,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACvC,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,aAAqB,EAAE,QAAyB;IAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;IAC9C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,wBAAwB,CAAU,QAAQ,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;IACzE,MAAM,OAAO,GAAG,GAAG,qBAAqB,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI,EAAE,CAAA;IACtF,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACvC,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAI1E,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAkB;QAC1B,MAAM,EAAE,UAAU,CAAA;KACnB;CACF;AAoBD,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAA;IAEpC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAE7B,QAAQ,CAAC,gBAAgB,EAAE,UAAU,GAAG,IAAI,CAAA;CAC7C;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE;QAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAMzH;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,CA4ChF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAEtD"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAI1E,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAkB;QAC1B,MAAM,EAAE,UAAU,CAAA;KACnB;CACF;AA4BD,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAA;IAEpC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAE7B,QAAQ,CAAC,gBAAgB,EAAE,UAAU,GAAG,IAAI,CAAA;CAC7C;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE;QAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAMzH;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,CA4ChF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAEtD"}
@@ -12,6 +12,13 @@ const PUBLIC_EXACT_PATHS = new Set(['/openapi.json']);
12
12
  // Listing providers one by one, rather than the broad `/webhooks/`,
13
13
  // keeps a future admin or metrics webhook from inheriting the bypass.
14
14
  const PUBLIC_PATH_PREFIXES = ['/auth/', '/health', '/webhooks/github/'];
15
+ // Any OAuth provider callback is anonymous. It is a browser redirect,
16
+ // so it carries no Bearer,
17
+ // its `state` token validated against the pending-flow store is its auth.
18
+ // The pattern matches the callback of every provider,
19
+ // so a new one inherits the bypass without editing here,
20
+ // while the start route stays gated so its owner check runs.
21
+ const PUBLIC_PATH_PATTERNS = [/^\/oauth\/[^/]+\/callback(?:\/|$)/];
15
22
  // Header naming the caller under local trust, a dev and multi-persona convenience.
16
23
  // Read only when auth is not enforced, never on an authenticated deployment,
17
24
  // so it can never impersonate a caller behind real auth.
@@ -73,7 +80,7 @@ export function authMiddleware(options) {
73
80
  }
74
81
  // Public routes bootstrap the login flow, so pass them through ungated,
75
82
  // and without reading the header, they must never carry a caller.
76
- if (PUBLIC_EXACT_PATHS.has(path) || PUBLIC_PATH_PREFIXES.some(prefix => path.startsWith(prefix))) {
83
+ if (PUBLIC_EXACT_PATHS.has(path) || PUBLIC_PATH_PREFIXES.some(prefix => path.startsWith(prefix)) || PUBLIC_PATH_PATTERNS.some(pattern => pattern.test(path))) {
77
84
  await next();
78
85
  return undefined;
79
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,60 @@
1
+ import type { WorkspaceService } from '@braidhq/core';
2
+ import type { Hono as HonoType } from 'hono';
3
+ import type { GitHubOAuth } from '../infrastructure/oauth/GitHubOAuth.js';
1
4
  import type { GoogleOAuth } from '../infrastructure/oauth/GoogleOAuth.js';
2
5
  import type { SecretStore } from '../infrastructure/secrets/SecretStore.js';
3
- import { Hono } from 'hono';
6
+ import type { UserRegistryFile } from '../infrastructure/users/UserRegistryFile.js';
7
+ import type { WorkspaceRegistryFile } from '../infrastructure/workspace/WorkspaceRegistryFile.js';
8
+ /** The workspace member who authorised a source connection. */
9
+ export interface ConnectedBy {
10
+ readonly userId: string;
11
+ readonly displayName: string;
12
+ }
13
+ interface PendingFlow {
14
+ readonly workspaceId: string;
15
+ readonly sourceId: string;
16
+ readonly connectedBy?: ConnectedBy;
17
+ readonly codeVerifier?: string;
18
+ readonly createdAt: number;
19
+ }
20
+ /**
21
+ * In-process store of pending OAuth flows, keyed by the state token.
22
+ * The start and callback routers mount at different prefixes,
23
+ * so they share one instance,
24
+ * and a flow opened by `start` is resolved by `callback`.
25
+ * A flow is short-lived, one browser round-trip, and a restart cancels it.
26
+ * SaaS deployments should swap this for a shared store.
27
+ */
28
+ export declare class OAuthFlowStore {
29
+ private readonly pending;
30
+ put(state: string, flow: PendingFlow): void;
31
+ take(state: string): PendingFlow | undefined;
32
+ private sweep;
33
+ }
4
34
  export interface OAuthRouterDeps {
5
35
  readonly secretStore: SecretStore;
36
+ readonly flowStore: OAuthFlowStore;
6
37
  readonly google?: GoogleOAuth;
38
+ readonly github?: GitHubOAuth;
39
+ readonly userRegistry?: UserRegistryFile;
40
+ readonly workspaceService?: WorkspaceService;
41
+ readonly workspaceRegistry?: WorkspaceRegistryFile;
7
42
  }
8
43
  /**
9
- * OAuth routes for source-loader providers that need user consent.
10
- * `POST /oauth/google/start` returns an authorizationUrl.
11
- * `GET /oauth/google/callback` returns an HTML page that closes the popup.
12
- *
13
- * Pending state is kept in process memory. The flow is short-lived,
14
- * a single browser round-trip, and a server restart cancels it,
15
- * acceptable for a local desktop or single-user install.
16
- * SaaS deployments should swap `pending` for a shared store.
44
+ * Source-connection start routes. `workspace.write` is owner-only,
45
+ * so only an owner connects or reconnects a source on an existing workspace,
46
+ * and the authorising member is recorded as `connectedBy`.
47
+ * A not-yet-scaffolded workspace is allowed,
48
+ * since the Wizard connects a source before it creates the workspace,
49
+ * and the caller becomes its owner.
50
+ */
51
+ export declare function createOAuthStartRouter(deps: OAuthRouterDeps): HonoType;
52
+ /**
53
+ * OAuth callback routes, mounted at `/oauth`,
54
+ * so the redirect URI stays one fixed path per provider,
55
+ * which is what the OAuth app registers.
56
+ * The state token carries the flow back to its workspace and source.
17
57
  */
18
- export declare function createOAuthRouter(deps: OAuthRouterDeps): Hono;
58
+ export declare function createOAuthCallbackRouter(deps: OAuthRouterDeps): HonoType;
59
+ export {};
19
60
  //# sourceMappingURL=oauth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/routes/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,wCAAwC,CAAA;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAE3E,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAW3B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B;AASD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAqD7D"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/routes/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAO,KAAK,EAAW,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAA;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAA;AAkBjG,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAElC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAmBD;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEzD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IAK3C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAM5C,OAAO,CAAC,KAAK;CAOd;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAG7B,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;CACnD;AAwCD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CAetE;AAmCD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CAuBzE"}