noodleseed-cli 0.1.11 → 0.1.12

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 (68) hide show
  1. package/dist/agents.d.ts +3 -0
  2. package/dist/agents.d.ts.map +1 -0
  3. package/dist/agents.js +231 -0
  4. package/dist/agents.js.map +1 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +1102 -107
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.d.ts +2 -4
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +1 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/control-plane.d.ts +15 -1
  13. package/dist/control-plane.d.ts.map +1 -1
  14. package/dist/control-plane.js +90 -15
  15. package/dist/control-plane.js.map +1 -1
  16. package/dist/deploy.d.ts +3 -5
  17. package/dist/deploy.d.ts.map +1 -1
  18. package/dist/deploy.js +20 -7
  19. package/dist/deploy.js.map +1 -1
  20. package/dist/dev.d.ts +11 -5
  21. package/dist/dev.d.ts.map +1 -1
  22. package/dist/dev.js +7 -17
  23. package/dist/dev.js.map +1 -1
  24. package/dist/diagnostics.d.ts +9 -0
  25. package/dist/diagnostics.d.ts.map +1 -0
  26. package/dist/diagnostics.js +10 -0
  27. package/dist/diagnostics.js.map +1 -0
  28. package/dist/doctor.d.ts +7 -0
  29. package/dist/doctor.d.ts.map +1 -0
  30. package/dist/doctor.js +396 -0
  31. package/dist/doctor.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/openapi-import.d.ts +12 -0
  37. package/dist/openapi-import.d.ts.map +1 -0
  38. package/dist/openapi-import.js +95 -0
  39. package/dist/openapi-import.js.map +1 -0
  40. package/dist/project.d.ts +45 -0
  41. package/dist/project.d.ts.map +1 -0
  42. package/dist/project.js +252 -0
  43. package/dist/project.js.map +1 -0
  44. package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.d.ts +2 -2
  45. package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.js +2 -2
  46. package/node_modules/@noodle-borg/service/dist/service.d.ts +6 -25
  47. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  48. package/node_modules/@noodle-borg/service/dist/service.js +219 -175
  49. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  50. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +2 -1
  51. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
  52. package/node_modules/@noodle-borg/service/dist/store/postgres.js +19 -78
  53. package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
  54. package/node_modules/@noodle-borg/service/dist/store.d.ts +24 -12
  55. package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
  56. package/node_modules/@noodle-borg/service/dist/store.js +18 -18
  57. package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
  58. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +2 -21
  59. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -1
  60. package/node_modules/@noodle-borg/transport-http/dist/handler.js +14 -25
  61. package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -1
  62. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +1 -2
  63. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -1
  64. package/node_modules/@noodle-borg/transport-http/dist/index.js +0 -1
  65. package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -1
  66. package/node_modules/@noodle-borg/transport-http/dist/logging.d.ts +1 -1
  67. package/node_modules/@noodle-borg/transport-http/dist/logging.js +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,252 @@
1
+ import { chmodSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, } from 'node:fs';
2
+ import { basename, dirname, join, relative, resolve } from 'node:path';
3
+ import { DEFAULT_SERVICE_URL } from './deploy.js';
4
+ export function projectConfigPath(cwd = process.cwd()) {
5
+ return join(cwd, '.noodle', 'project.json');
6
+ }
7
+ export function projectDeploymentPath(cwd = process.cwd()) {
8
+ return join(cwd, '.noodle', 'deployment.json');
9
+ }
10
+ export function readProjectLink(cwd = process.cwd()) {
11
+ try {
12
+ const parsed = JSON.parse(readFileSync(projectConfigPath(cwd), 'utf8'));
13
+ if (typeof parsed.entrypoint !== 'string' ||
14
+ typeof parsed.org !== 'string' ||
15
+ typeof parsed.app !== 'string' ||
16
+ typeof parsed.env !== 'string' ||
17
+ typeof parsed.serviceUrl !== 'string' ||
18
+ !isAccessMode(parsed.accessMode)) {
19
+ return undefined;
20
+ }
21
+ return {
22
+ entrypoint: parsed.entrypoint,
23
+ org: parsed.org,
24
+ app: parsed.app,
25
+ env: parsed.env,
26
+ serviceUrl: parsed.serviceUrl,
27
+ accessMode: parsed.accessMode,
28
+ };
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ }
34
+ export function writeProjectLink(options) {
35
+ const cwd = options.cwd ?? process.cwd();
36
+ const link = {
37
+ entrypoint: options.entrypoint ?? 'server.ts',
38
+ org: slug(options.org),
39
+ app: slug(options.app),
40
+ env: slug(options.env ?? 'prod'),
41
+ serviceUrl: options.serviceUrl ?? DEFAULT_SERVICE_URL,
42
+ accessMode: options.accessMode ?? 'owner-only',
43
+ };
44
+ const dir = join(cwd, '.noodle');
45
+ mkdirSync(dir, { recursive: true });
46
+ writeFileSync(projectConfigPath(cwd), `${JSON.stringify(link, null, 2)}\n`, { mode: 0o600 });
47
+ return link;
48
+ }
49
+ export function readProjectDeployment(cwd = process.cwd()) {
50
+ try {
51
+ const parsed = JSON.parse(readFileSync(projectDeploymentPath(cwd), 'utf8'));
52
+ if (typeof parsed.deploymentId !== 'string' ||
53
+ typeof parsed.url !== 'string' ||
54
+ typeof parsed.org !== 'string' ||
55
+ typeof parsed.app !== 'string' ||
56
+ typeof parsed.env !== 'string' ||
57
+ typeof parsed.serviceUrl !== 'string' ||
58
+ typeof parsed.createdAt !== 'string' ||
59
+ !isAccessMode(parsed.accessMode)) {
60
+ return undefined;
61
+ }
62
+ return {
63
+ deploymentId: parsed.deploymentId,
64
+ url: parsed.url,
65
+ org: parsed.org,
66
+ app: parsed.app,
67
+ env: parsed.env,
68
+ accessMode: parsed.accessMode,
69
+ serviceUrl: parsed.serviceUrl,
70
+ createdAt: parsed.createdAt,
71
+ };
72
+ }
73
+ catch {
74
+ return undefined;
75
+ }
76
+ }
77
+ export function writeProjectDeployment(deployment, cwd = process.cwd()) {
78
+ const dir = join(cwd, '.noodle');
79
+ mkdirSync(dir, { recursive: true });
80
+ const path = projectDeploymentPath(cwd);
81
+ writeFileSync(path, `${JSON.stringify(deployment, null, 2)}\n`, { mode: 0o600 });
82
+ chmodSync(path, 0o600);
83
+ return deployment;
84
+ }
85
+ export function initProject(options = {}) {
86
+ const dir = resolve(options.dir ?? '.');
87
+ const template = options.template ?? 'hello';
88
+ const name = slug(options.name ?? basename(dir) ?? 'noodle-app');
89
+ if (!isTemplate(template))
90
+ throw new Error('init: --template must be hello or http-api');
91
+ if (existsSync(dir)) {
92
+ const entries = readdirSync(dir).filter((entry) => entry !== '.DS_Store');
93
+ if (entries.length > 0 && options.force !== true) {
94
+ throw new Error('init: target directory is not empty; pass --force to add Noodle files anyway');
95
+ }
96
+ if (!statSync(dir).isDirectory())
97
+ throw new Error('init: target path is not a directory');
98
+ }
99
+ mkdirSync(join(dir, 'test'), { recursive: true });
100
+ const files = template === 'hello' ? helloFiles(name) : httpApiFiles(name);
101
+ for (const [path, content] of Object.entries(files)) {
102
+ const full = join(dir, path);
103
+ mkdirSync(dirname(full), { recursive: true });
104
+ writeFileSync(full, content);
105
+ }
106
+ return dir;
107
+ }
108
+ export function resolveLinkedEntrypoint(cwd = process.cwd()) {
109
+ const link = readProjectLink(cwd);
110
+ if (link === undefined)
111
+ return undefined;
112
+ const path = resolve(cwd, link.entrypoint);
113
+ return existsSync(path) ? path : undefined;
114
+ }
115
+ export function relativeEntrypoint(path, cwd = process.cwd()) {
116
+ const rel = relative(cwd, resolve(cwd, path));
117
+ return rel === '' ? basename(path) : rel;
118
+ }
119
+ function helloFiles(name) {
120
+ const serverName = manifestName(name);
121
+ return commonFiles(name, `import { server, z } from 'noodleseed-cli';
122
+
123
+ export default server('${serverName}', { title: '${title(name)}', version: '1.0.0' }).tool('greet', {
124
+ description: 'Greet a person by name.',
125
+ input: z.object({
126
+ name: z.string().default('world'),
127
+ }),
128
+ output: z.object({
129
+ message: z.string(),
130
+ }),
131
+ fulfil({ input }) {
132
+ return { message: \`Hello, \${input.name}!\` };
133
+ },
134
+ });
135
+ `);
136
+ }
137
+ function httpApiFiles(name) {
138
+ const serverName = manifestName(name);
139
+ return commonFiles(name, `import { connector, server, z } from 'noodleseed-cli';
140
+
141
+ const jsonplaceholder = connector('jsonplaceholder')
142
+ .version('1.0.0')
143
+ .http({
144
+ baseUrl: 'https://jsonplaceholder.typicode.com',
145
+ allowedOrigins: ['https://jsonplaceholder.typicode.com'],
146
+ operations: {
147
+ get_post: {
148
+ type: 'read',
149
+ method: 'GET',
150
+ path: '/posts/\${args.post_id}',
151
+ input: { post_id: { type: 'string', required: true } },
152
+ response: {
153
+ title: '\${response.json.title}',
154
+ body: '\${response.json.body}',
155
+ },
156
+ output: {
157
+ title: { type: 'string' },
158
+ body: { type: 'string' },
159
+ },
160
+ },
161
+ },
162
+ });
163
+
164
+ export default server('${serverName}', { title: '${title(name)}', version: '1.0.0' })
165
+ .use({ posts: jsonplaceholder })
166
+ .tool('get_post', {
167
+ description: 'Fetch a post from JSONPlaceholder.',
168
+ input: z.object({
169
+ post_id: z.string().default('1'),
170
+ }),
171
+ output: z.object({
172
+ title: z.string(),
173
+ body: z.string(),
174
+ }),
175
+ fulfil({ input, connectors }) {
176
+ const post = connectors.posts.getPost({ post_id: input.post_id });
177
+ return { title: post.title, body: post.body };
178
+ },
179
+ });
180
+ `);
181
+ }
182
+ function commonFiles(name, serverTs) {
183
+ return {
184
+ 'server.ts': serverTs,
185
+ 'package.json': `${JSON.stringify({
186
+ name,
187
+ version: '0.1.0',
188
+ private: true,
189
+ type: 'module',
190
+ scripts: {
191
+ validate: 'noodle validate',
192
+ dev: 'noodle dev',
193
+ deploy: 'noodle deploy',
194
+ },
195
+ devDependencies: {
196
+ 'noodleseed-cli': 'latest',
197
+ },
198
+ }, null, 2)}\n`,
199
+ 'test/server.test.ts': `import { describe, expect, it } from 'vitest';
200
+ import app from '../server.js';
201
+
202
+ describe('${name}', () => {
203
+ it('exports a Noodle server definition', () => {
204
+ expect(typeof app.toManifest).toBe('function');
205
+ });
206
+ });
207
+ `,
208
+ '.gitignore': ['node_modules', 'dist', '.env.noodle', '.env.*', '.noodle/', ''].join('\n'),
209
+ 'README.md': `# ${title(name)}
210
+
211
+ ## Run locally
212
+
213
+ \`\`\`sh
214
+ noodle link --org <org> --app ${name}
215
+ noodle validate
216
+ noodle dev
217
+ \`\`\`
218
+
219
+ ## Deploy
220
+
221
+ \`\`\`sh
222
+ noodle deploy
223
+ \`\`\`
224
+
225
+ Put local managed secrets and variables in \`.env.noodle\` with \`noodle secrets set\` and
226
+ \`noodle vars set\`. The file is ignored by git and must not contain values you intend to share.
227
+ `,
228
+ };
229
+ }
230
+ function isTemplate(value) {
231
+ return value === 'hello' || value === 'http-api';
232
+ }
233
+ function isAccessMode(value) {
234
+ return value === 'owner-only' || value === 'org-members';
235
+ }
236
+ function slug(value) {
237
+ return (value
238
+ .toLowerCase()
239
+ .replace(/[^a-z0-9]+/g, '-')
240
+ .replace(/^-+|-+$/g, '') || 'app');
241
+ }
242
+ function title(value) {
243
+ return value
244
+ .split('-')
245
+ .filter(Boolean)
246
+ .map((part) => `${part[0]?.toUpperCase() ?? ''}${part.slice(1)}`)
247
+ .join(' ');
248
+ }
249
+ function manifestName(value) {
250
+ return value.replace(/-/g, '_');
251
+ }
252
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
@@ -74,8 +74,8 @@ export interface WrappingMasterKey {
74
74
  export declare function staticMasterKeyProvider(base64Key: string, keyId?: string): StaticMasterKey;
75
75
  /**
76
76
  * Reversible envelope encryption for secret values at rest (Slice 26, ADR 0028; KEK custody ADR 0037).
77
- * Unlike the caller-key which is hash-at-rest because it is only ever *verified* a connector secret
78
- * must be reproduced verbatim to send downstream, so it is **encrypted, not hashed**. AES-256-GCM via
77
+ * Connector secrets must be reproduced verbatim to send downstream, so they are **encrypted, not hashed**.
78
+ * AES-256-GCM via
79
79
  * `node:crypto`, a fresh random IV per seal, and the GCM tag authenticates the ciphertext.
80
80
  *
81
81
  * `seal`/`open` are **async** because a wrapping (KMS) provider round-trips to the custodian; a static
@@ -23,8 +23,8 @@ export function staticMasterKeyProvider(base64Key, keyId = 'static') {
23
23
  }
24
24
  /**
25
25
  * Reversible envelope encryption for secret values at rest (Slice 26, ADR 0028; KEK custody ADR 0037).
26
- * Unlike the caller-key which is hash-at-rest because it is only ever *verified* a connector secret
27
- * must be reproduced verbatim to send downstream, so it is **encrypted, not hashed**. AES-256-GCM via
26
+ * Connector secrets must be reproduced verbatim to send downstream, so they are **encrypted, not hashed**.
27
+ * AES-256-GCM via
28
28
  * `node:crypto`, a fresh random IV per seal, and the GCM tag authenticates the ciphertext.
29
29
  *
30
30
  * `seal`/`open` are **async** because a wrapping (KMS) provider round-trips to the custodian; a static
@@ -5,7 +5,7 @@ import { type AccessMode, type Logger, type OwnerTokenVerifier, type ServedTarge
5
5
  import { type ControlPlaneIdentity, type DeployAuthGate, type GoogleIdTokenVerifier } from './auth/deploy-gate.js';
6
6
  import type { GoogleAuthenticator } from './oauth/google.js';
7
7
  import type { CloudSqlConfig } from './store/cloudsql-pool.js';
8
- import { type ArtifactStore, type ConfigStore, type ControlPlaneStore, type DeploymentSummary, type TenantRef } from './store.js';
8
+ import { type ArtifactStore, type ConfigStore, type ControlPlaneStore, type DeploymentStatus, type DeploymentSummary, type DeployRecord, type TenantRef } from './store.js';
9
9
  /** A deploy error from compiling either the connector catalog or the manifest. */
10
10
  export interface DeployError {
11
11
  readonly code: string;
@@ -15,16 +15,7 @@ export interface DeployError {
15
15
  export type DeployResult = {
16
16
  readonly ok: true;
17
17
  readonly deploymentId: string;
18
- readonly accessMode: AccessMode;
19
- /** The once-shown caller key, present only for `caller-key` deployments (identity modes mint none). */
20
- readonly callerKey?: string;
21
- /**
22
- * True when this deploy **reused** the prior active deployment's caller key instead of minting a new
23
- * one (so `callerKey` is absent — the hash-only key was kept). Set only via the in-process
24
- * `reuseCallerKey` path used by `noodle dev`; the HTTP deploy route never reuses, so production
25
- * keeps rotating the caller key on every redeploy.
26
- */
27
- readonly callerKeyReused?: boolean;
18
+ readonly accessMode?: AccessMode;
28
19
  } | {
29
20
  readonly ok: false;
30
21
  readonly errors: readonly DeployError[];
@@ -61,17 +52,10 @@ export declare class ServerRegistry {
61
52
  * constructs this directly is responsible for the same pairing.
62
53
  */
63
54
  constructor(store?: ArtifactStore, _secretBox?: SecretBox, configStore?: ConfigStore);
64
- deploy(tenant: TenantRef, manifest: string, connectors?: string, actor?: ControlPlaneIdentity, accessMode?: AccessMode,
65
- /**
66
- * When true and a prior active deployment exists for this tenant, reuse its caller-key **hash** instead
67
- * of minting a new key (the plaintext is unrecoverable, so none is returned). Used by `noodle dev`
68
- * to keep the local key stable across hot-reloads; the HTTP deploy route never sets it, so production
69
- * redeploys keep rotating the key.
70
- */
71
- reuseCallerKey?: boolean): Promise<DeployResult>;
55
+ deploy(tenant: TenantRef, manifest: string, connectors?: string, actor?: ControlPlaneIdentity, accessMode?: AccessMode): Promise<DeployResult>;
72
56
  /**
73
57
  * Rebuild every persisted server into memory on startup. Each record is replayed through the same
74
- * compile path as a fresh deploy, reusing its stored id and caller-key hash. A record that no longer
58
+ * compile path as a fresh deploy, reusing its stored id and access metadata. A record that no longer
75
59
  * compiles (e.g. source/catalog drift) is skipped and reported — the remaining servers still recover.
76
60
  */
77
61
  recover(): Promise<RecoverResult>;
@@ -91,11 +75,8 @@ export declare class ServerRegistry {
91
75
  app?: string;
92
76
  env?: string;
93
77
  }): Promise<readonly DeploymentSummary[]>;
94
- rotateCallerKey(tenant: TenantRef): Promise<{
95
- key: string;
96
- deployment: DeploymentSummary;
97
- } | undefined>;
98
- verifyActiveCallerKey(tenant: TenantRef, token: string | null): Promise<boolean>;
78
+ getStatus(ref: TenantRef, baseUrl: string): Promise<DeploymentStatus | undefined>;
79
+ updateAccess(ref: TenantRef, accessMode: AccessMode): Promise<DeployRecord | undefined>;
99
80
  get configStore(): ConfigStore;
100
81
  get size(): number;
101
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}