@noodleseed/one 0.121.0 → 0.122.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.
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +5 -2
- package/dist/commands/session.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +4 -4
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js +8 -8
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts +30 -9
- package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js +21 -6
- package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts +2 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/port.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js +3 -3
- package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/resources.js +10 -9
- package/node_modules/@noodle-borg/developer-mcp/dist/resources.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts +4 -3
- package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/results.js +5 -19
- package/node_modules/@noodle-borg/developer-mcp/dist/results.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/server.js +3 -3
- package/node_modules/@noodle-borg/developer-mcp/dist/server.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js +6 -25
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts +16 -3
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js +22 -19
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js +3 -9
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js +15 -16
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js +9 -17
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.d.ts.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js +7 -10
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/budget.d.ts +41 -17
- package/node_modules/@noodle-borg/knowledge/dist/budget.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/budget.js +0 -0
- package/node_modules/@noodle-borg/knowledge/dist/budget.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/index.js +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.d.ts +22 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.js +102 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts +5 -3
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js +61 -1
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts +28 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js +39 -0
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts +6 -4
- package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js +13 -16
- package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts +3 -2
- package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js +66 -47
- package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +15 -16
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +2 -2
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts +0 -2
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js +0 -16
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts +3 -28
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js +8 -67
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts +0 -4
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js +1 -14
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js +45 -36
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts +2 -2
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js +20 -229
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts +3 -2
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js +70 -36
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts +17 -6
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js +98 -26
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +0 -2
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/analytics.js +3 -3
- package/node_modules/@noodle-borg/service/dist/routes/analytics.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/apps.js +6 -27
- package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/config-values.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/config-values.js +5 -8
- package/node_modules/@noodle-borg/service/dist/routes/config-values.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +7 -6
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +7 -6
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployment-package.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployment-package.js +2 -7
- package/node_modules/@noodle-borg/service/dist/routes/deployment-package.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js +7 -20
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/envs.js +4 -8
- package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/logs.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/logs.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +21 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +1 -1
- package/node_modules/@noodleseed/assistant/package.json +41 -16
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent-claims.js","sourceRoot":"","sources":["../../src/oauth/consent-claims.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"consent-claims.js","sourceRoot":"","sources":["../../src/oauth/consent-claims.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oCAAoC,EAAE,MAAM,2BAA2B,CAAC;AAuBjF,MAAM,UAAU,eAAe,CAAC,OAAmB;IACjD,OAAO,CACJ,OAA8B,CAAC,IAAI,KAAK,SAAS;QAClD,OAAQ,OAAkC,CAAC,QAAQ,KAAK,QAAQ;QAChE,OAAQ,OAAqC,CAAC,WAAW,KAAK,QAAQ;QACtE,OAAQ,OAAuC,CAAC,aAAa,KAAK,QAAQ;QAC1E,OAAQ,OAAkC,CAAC,QAAQ,KAAK,QAAQ;QAChE,OAAQ,OAAsC,CAAC,YAAY,KAAK,QAAQ;QACxE,qBAAqB,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC/C,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzC,oCAAoC,CAAC;YACnC,MAAM,EAAE,OAAO,CAAC,WAAW;YAC3B,QAAQ,EAAE,OAAO,CAAC,aAAa;SAChC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAmB;IAEnB,OAAO,CACJ,OAA8B,CAAC,IAAI,KAAK,iBAAiB;QAC1D,OAAQ,OAAkC,CAAC,QAAQ,KAAK,QAAQ;QAChE,OAAQ,OAAqC,CAAC,WAAW,KAAK,QAAQ;QACtE,OAAQ,OAAuC,CAAC,aAAa,KAAK,QAAQ;QAC1E,OAAQ,OAAkC,CAAC,QAAQ,KAAK,QAAQ;QAChE,OAAQ,OAAsC,CAAC,YAAY,KAAK,QAAQ;QACxE,qBAAqB,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC/C,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzC,oCAAoC,CAAC;YACnC,MAAM,EAAE,OAAO,CAAC,WAAW;YAC3B,QAAQ,EAAE,OAAO,CAAC,aAAa;SAChC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,CAAC;AACzE,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,CAAC,OAAO,KAAK,KAAK,QAAQ;YACxB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YACtB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YACvB,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -1,42 +1,17 @@
|
|
|
1
|
-
import { type DeveloperCapability } from '@noodle-borg/developer-mcp';
|
|
2
|
-
import type { AppSummary, ControlPlaneStore, EnvSummary } from '../store.js';
|
|
3
1
|
import type { DeveloperAccessGrant, DeveloperGrantStore } from './developer-grant.js';
|
|
4
|
-
export interface
|
|
5
|
-
readonly org: string;
|
|
6
|
-
readonly displayName?: string;
|
|
7
|
-
readonly environments: readonly string[];
|
|
8
|
-
readonly capabilities: readonly DeveloperCapability[];
|
|
9
|
-
}
|
|
10
|
-
export interface DeveloperGrantInventory {
|
|
11
|
-
listApps(org: string, opts?: {
|
|
12
|
-
readonly includeArchived?: boolean;
|
|
13
|
-
readonly limit?: number;
|
|
14
|
-
}): Promise<{
|
|
15
|
-
readonly apps: readonly AppSummary[];
|
|
16
|
-
readonly truncated: boolean;
|
|
17
|
-
}>;
|
|
18
|
-
listEnvironments(org: string, app: string, opts?: {
|
|
19
|
-
readonly includeArchived?: boolean;
|
|
20
|
-
}): Promise<readonly EnvSummary[]>;
|
|
21
|
-
}
|
|
22
|
-
export interface DeveloperGrantSelectionInput {
|
|
2
|
+
export interface DeveloperGrantIdentityInput {
|
|
23
3
|
readonly clientId: string;
|
|
24
4
|
readonly subject: string;
|
|
25
5
|
readonly resource: string;
|
|
26
|
-
readonly choices: readonly DeveloperGrantChoice[];
|
|
27
|
-
readonly org: string;
|
|
28
|
-
readonly environments: readonly string[];
|
|
29
6
|
}
|
|
30
7
|
export interface DeveloperGrantAuthorizerOptions {
|
|
31
|
-
readonly controlPlane: ControlPlaneStore;
|
|
32
|
-
readonly inventory: DeveloperGrantInventory;
|
|
33
8
|
readonly grants: DeveloperGrantStore;
|
|
34
9
|
}
|
|
35
10
|
export declare class DeveloperGrantAuthorizer {
|
|
36
11
|
#private;
|
|
37
12
|
constructor(options: DeveloperGrantAuthorizerOptions);
|
|
38
|
-
|
|
39
|
-
|
|
13
|
+
findActive(input: DeveloperGrantIdentityInput): Promise<DeveloperAccessGrant | undefined>;
|
|
14
|
+
authorize(input: DeveloperGrantIdentityInput): Promise<DeveloperAccessGrant>;
|
|
40
15
|
/** Revoke only the exact grant carried by a verified subject/client token. */
|
|
41
16
|
revoke(input: {
|
|
42
17
|
readonly id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"developer-grant-authorizer.d.ts","sourceRoot":"","sources":["../../src/oauth/developer-grant-authorizer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"developer-grant-authorizer.d.ts","sourceRoot":"","sources":["../../src/oauth/developer-grant-authorizer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEtF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAED,qBAAa,wBAAwB;;gBAGvB,OAAO,EAAE,+BAA+B;IAI9C,UAAU,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAKzF,SAAS,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAQlF,8EAA8E;IACxE,MAAM,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CAW9C"}
|
|
@@ -1,74 +1,21 @@
|
|
|
1
|
-
import { capabilitiesForDeveloperResource, isDeveloperResource
|
|
2
|
-
const STANDARD_ENVIRONMENTS = ['dev', 'staging', 'prod'];
|
|
1
|
+
import { capabilitiesForDeveloperResource, isDeveloperResource } from '@noodle-borg/developer-mcp';
|
|
3
2
|
export class DeveloperGrantAuthorizer {
|
|
4
|
-
#controlPlane;
|
|
5
|
-
#inventory;
|
|
6
3
|
#grants;
|
|
7
4
|
constructor(options) {
|
|
8
|
-
this.#controlPlane = options.controlPlane;
|
|
9
|
-
this.#inventory = options.inventory;
|
|
10
5
|
this.#grants = options.grants;
|
|
11
6
|
}
|
|
12
|
-
async
|
|
13
|
-
if (!isDeveloperResource(resource))
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
return Promise.all(organizations.map(async (organization) => {
|
|
17
|
-
const member = await this.#controlPlane.getOrgMember({
|
|
18
|
-
org: organization.slug,
|
|
19
|
-
subject,
|
|
20
|
-
});
|
|
21
|
-
const inventory = await this.#inventory.listApps(organization.slug, {
|
|
22
|
-
includeArchived: false,
|
|
23
|
-
limit: Number.MAX_SAFE_INTEGER,
|
|
24
|
-
});
|
|
25
|
-
const environments = new Set(STANDARD_ENVIRONMENTS);
|
|
26
|
-
await Promise.all(inventory.apps.map(async (app) => {
|
|
27
|
-
for (const environment of app.environments)
|
|
28
|
-
environments.add(environment);
|
|
29
|
-
const appEnvironments = await this.#inventory.listEnvironments(organization.slug, app.appSlug);
|
|
30
|
-
for (const environment of appEnvironments)
|
|
31
|
-
environments.add(environment.envName);
|
|
32
|
-
}));
|
|
33
|
-
return {
|
|
34
|
-
org: organization.slug,
|
|
35
|
-
...(organization.displayName === undefined
|
|
36
|
-
? {}
|
|
37
|
-
: { displayName: organization.displayName }),
|
|
38
|
-
environments: [...environments].sort(),
|
|
39
|
-
capabilities: capabilitiesForMember(resource, member?.role),
|
|
40
|
-
};
|
|
41
|
-
}));
|
|
7
|
+
async findActive(input) {
|
|
8
|
+
if (!isDeveloperResource(input.resource))
|
|
9
|
+
return undefined;
|
|
10
|
+
return this.#grants.getActive(input);
|
|
42
11
|
}
|
|
43
|
-
async
|
|
12
|
+
async authorize(input) {
|
|
44
13
|
if (!isDeveloperResource(input.resource))
|
|
45
14
|
throw new Error('invalid developer resource');
|
|
46
|
-
const
|
|
47
|
-
if (choice === undefined)
|
|
48
|
-
throw new Error('organization is not available');
|
|
49
|
-
const environments = [...new Set(input.environments)];
|
|
50
|
-
if (environments.length === 0)
|
|
51
|
-
throw new Error('select at least one environment');
|
|
52
|
-
const availableEnvironments = new Set(choice.environments);
|
|
53
|
-
if (environments.some((environment) => !availableEnvironments.has(environment))) {
|
|
54
|
-
throw new Error('environment is not available');
|
|
55
|
-
}
|
|
56
|
-
const member = await this.#controlPlane.getOrgMember({
|
|
57
|
-
org: input.org,
|
|
58
|
-
subject: input.subject,
|
|
59
|
-
});
|
|
60
|
-
if (member === undefined)
|
|
61
|
-
throw new Error('organization membership is no longer active');
|
|
62
|
-
const capabilities = capabilitiesForMember(input.resource, member.role);
|
|
15
|
+
const capabilities = capabilitiesForDeveloperResource(input.resource);
|
|
63
16
|
if (capabilities.length === 0)
|
|
64
17
|
throw new Error('developer resource has no available capabilities');
|
|
65
|
-
return this.#grants.
|
|
66
|
-
clientId: input.clientId,
|
|
67
|
-
subject: input.subject,
|
|
68
|
-
org: input.org,
|
|
69
|
-
environments,
|
|
70
|
-
capabilities,
|
|
71
|
-
});
|
|
18
|
+
return this.#grants.getOrCreateActive({ ...input, capabilities });
|
|
72
19
|
}
|
|
73
20
|
/** Revoke only the exact grant carried by a verified subject/client token. */
|
|
74
21
|
async revoke(input) {
|
|
@@ -81,10 +28,4 @@ export class DeveloperGrantAuthorizer {
|
|
|
81
28
|
return this.#grants.revoke(input.id, input.at);
|
|
82
29
|
}
|
|
83
30
|
}
|
|
84
|
-
function capabilitiesForMember(resource, role) {
|
|
85
|
-
const capabilities = capabilitiesForDeveloperResource(resource);
|
|
86
|
-
return role === 'owner'
|
|
87
|
-
? capabilities
|
|
88
|
-
: capabilities.filter((capability) => capability !== 'deployments:rollback');
|
|
89
|
-
}
|
|
90
31
|
//# sourceMappingURL=developer-grant-authorizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"developer-grant-authorizer.js","sourceRoot":"","sources":["../../src/oauth/developer-grant-authorizer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"developer-grant-authorizer.js","sourceRoot":"","sources":["../../src/oauth/developer-grant-authorizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAcnG,MAAM,OAAO,wBAAwB;IAC1B,OAAO,CAAsB;IAEtC,YAAY,OAAwC;QAClD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAkC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAkC;QAChD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACxF,MAAM,YAAY,GAAG,gCAAgC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,MAAM,CAAC,KAKZ;QACC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,IACE,KAAK,KAAK,SAAS;YACnB,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YACjC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAC/B,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import type { Pool } from 'pg';
|
|
2
|
-
import type { ServerRegistry } from '../registry.js';
|
|
3
|
-
import type { ControlPlaneStore } from '../store.js';
|
|
4
2
|
import type { DeveloperGrantStore } from './developer-grant.js';
|
|
5
3
|
import { DeveloperGrantAuthorizer } from './developer-grant-authorizer.js';
|
|
6
4
|
export interface DeveloperGrantStoreBootstrapOptions {
|
|
@@ -8,9 +6,7 @@ export interface DeveloperGrantStoreBootstrapOptions {
|
|
|
8
6
|
readonly store?: DeveloperGrantStore;
|
|
9
7
|
}
|
|
10
8
|
export interface DeveloperGrantAuthorizerBootstrapOptions {
|
|
11
|
-
readonly controlPlane: ControlPlaneStore;
|
|
12
9
|
readonly grants: DeveloperGrantStore;
|
|
13
|
-
readonly registry: () => ServerRegistry | undefined;
|
|
14
10
|
}
|
|
15
11
|
export declare function createDeveloperGrantAuthorizer(options: DeveloperGrantAuthorizerBootstrapOptions): DeveloperGrantAuthorizer;
|
|
16
12
|
/** Resolve the OAuth grant store while preserving PostgreSQL schema initialization for injected stores. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"developer-grant-bootstrap.d.ts","sourceRoot":"","sources":["../../src/oauth/developer-grant-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"developer-grant-bootstrap.d.ts","sourceRoot":"","sources":["../../src/oauth/developer-grant-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,wCAAwC,GAChD,wBAAwB,CAE1B;AAED,2GAA2G;AAC3G,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,mCAAmC,GAC3C,OAAO,CAAC,mBAAmB,CAAC,CAS9B"}
|
|
@@ -1,19 +1,6 @@
|
|
|
1
1
|
import { DeveloperGrantAuthorizer } from './developer-grant-authorizer.js';
|
|
2
2
|
export function createDeveloperGrantAuthorizer(options) {
|
|
3
|
-
|
|
4
|
-
const value = options.registry();
|
|
5
|
-
if (value === undefined)
|
|
6
|
-
throw new Error('developer inventory is not ready');
|
|
7
|
-
return value;
|
|
8
|
-
};
|
|
9
|
-
return new DeveloperGrantAuthorizer({
|
|
10
|
-
controlPlane: options.controlPlane,
|
|
11
|
-
grants: options.grants,
|
|
12
|
-
inventory: {
|
|
13
|
-
listApps: (org, request) => registry().listApps(org, request),
|
|
14
|
-
listEnvironments: (org, app, request) => registry().listEnvironments(org, app, request),
|
|
15
|
-
},
|
|
16
|
-
});
|
|
3
|
+
return new DeveloperGrantAuthorizer({ grants: options.grants });
|
|
17
4
|
}
|
|
18
5
|
/** Resolve the OAuth grant store while preserving PostgreSQL schema initialization for injected stores. */
|
|
19
6
|
export async function resolveDeveloperGrantStore(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"developer-grant-bootstrap.js","sourceRoot":"","sources":["../../src/oauth/developer-grant-bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"developer-grant-bootstrap.js","sourceRoot":"","sources":["../../src/oauth/developer-grant-bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAW3E,MAAM,UAAU,8BAA8B,CAC5C,OAAiD;IAEjD,OAAO,IAAI,wBAAwB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,2GAA2G;AAC3G,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA4C;IAE5C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,IAAI,2BAA2B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;IACnC,CAAC;IACD,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC,KAAK,IAAI,IAAI,2BAA2B,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -15,7 +15,7 @@ export interface DeveloperGrantOAuthFlowOptions {
|
|
|
15
15
|
export declare class DeveloperGrantOAuthFlow {
|
|
16
16
|
#private;
|
|
17
17
|
constructor(options: DeveloperGrantOAuthFlowOptions);
|
|
18
|
-
|
|
18
|
+
renderConsent(pending: PendingAuthorizationRecord, identity: GoogleIdentity & {
|
|
19
19
|
readonly authTime?: number;
|
|
20
20
|
}, res: Response): Promise<void>;
|
|
21
21
|
handleDecision(req: Request, res: Response): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"developer-grant-flow.d.ts","sourceRoot":"","sources":["../../src/oauth/developer-grant-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,qBAAa,uBAAuB;;gBAGtB,OAAO,EAAE,8BAA8B;IAI7C,
|
|
1
|
+
{"version":3,"file":"developer-grant-flow.d.ts","sourceRoot":"","sources":["../../src/oauth/developer-grant-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,qBAAa,uBAAuB;;gBAGtB,OAAO,EAAE,8BAA8B;IAI7C,aAAa,CACjB,OAAO,EAAE,0BAA0B,EACnC,QAAQ,EAAE,cAAc,GAAG;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EACzD,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC,IAAI,CAAC;IAkDV,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAuGjE;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAgBtF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isDeveloperResource } from '@noodle-borg/developer-mcp';
|
|
1
|
+
import { capabilitiesForDeveloperResource, isDeveloperResource } from '@noodle-borg/developer-mcp';
|
|
2
2
|
import { jwtVerify, SignJWT } from 'jose';
|
|
3
3
|
import { redirectAuthorizationResponse } from './authorization-response.js';
|
|
4
4
|
import { isDeveloperGrantClaims } from './consent-claims.js';
|
|
@@ -6,14 +6,24 @@ import { renderDeveloperGrantPage } from './developer-grant-page.js';
|
|
|
6
6
|
import { storedOAuthOwnerPreferences } from './identity-preferences.js';
|
|
7
7
|
import { hostOf } from './provider-util.js';
|
|
8
8
|
const DEVELOPER_GRANT_PATH = '/oauth/developer-grant';
|
|
9
|
-
const DEVELOPER_GRANT_FORM_FIELDS = new Set(['grant_token', '
|
|
9
|
+
const DEVELOPER_GRANT_FORM_FIELDS = new Set(['grant_token', 'decision']);
|
|
10
10
|
export class DeveloperGrantOAuthFlow {
|
|
11
11
|
#options;
|
|
12
12
|
constructor(options) {
|
|
13
13
|
this.#options = options;
|
|
14
14
|
}
|
|
15
|
-
async
|
|
16
|
-
|
|
15
|
+
async renderConsent(pending, identity, res) {
|
|
16
|
+
if (await this.#options.store.hasConsentGrant(pending.clientId, identity.subject, pending.resource, 'platform')) {
|
|
17
|
+
const active = await this.#options.authorizer.findActive({
|
|
18
|
+
clientId: pending.clientId,
|
|
19
|
+
subject: identity.subject,
|
|
20
|
+
resource: pending.resource,
|
|
21
|
+
});
|
|
22
|
+
if (active !== undefined) {
|
|
23
|
+
await this.#issueAuthorizationCode(res, pending, identity, active);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
17
27
|
const grantToken = await this.#sign({
|
|
18
28
|
kind: 'developer-grant',
|
|
19
29
|
clientId: pending.clientId,
|
|
@@ -26,7 +36,6 @@ export class DeveloperGrantOAuthFlow {
|
|
|
26
36
|
...(identity.authTime !== undefined ? { authTime: identity.authTime } : {}),
|
|
27
37
|
...(pending.clientState !== undefined ? { clientState: pending.clientState } : {}),
|
|
28
38
|
...(pending.scope !== undefined ? { scope: pending.scope } : {}),
|
|
29
|
-
choices,
|
|
30
39
|
});
|
|
31
40
|
const client = await this.#options.store.getClient(pending.clientId);
|
|
32
41
|
res
|
|
@@ -40,13 +49,13 @@ export class DeveloperGrantOAuthFlow {
|
|
|
40
49
|
userEmail: identity.email,
|
|
41
50
|
grantToken,
|
|
42
51
|
grantAction: DEVELOPER_GRANT_PATH,
|
|
43
|
-
|
|
52
|
+
capabilities: capabilitiesForDeveloperResource(pending.resource),
|
|
44
53
|
}));
|
|
45
54
|
}
|
|
46
55
|
async handleDecision(req, res) {
|
|
47
56
|
const body = (req.body ?? {});
|
|
48
57
|
if (Object.keys(body).some((key) => !DEVELOPER_GRANT_FORM_FIELDS.has(key))) {
|
|
49
|
-
res.status(400).type('text/plain').send('invalid developer access
|
|
58
|
+
res.status(400).type('text/plain').send('invalid developer access consent');
|
|
50
59
|
return;
|
|
51
60
|
}
|
|
52
61
|
const grantToken = typeof body.grant_token === 'string' ? body.grant_token : undefined;
|
|
@@ -60,7 +69,7 @@ export class DeveloperGrantOAuthFlow {
|
|
|
60
69
|
claims = await this.#verify(grantToken);
|
|
61
70
|
}
|
|
62
71
|
catch {
|
|
63
|
-
res.status(400).type('text/plain').send('invalid or expired developer access
|
|
72
|
+
res.status(400).type('text/plain').send('invalid or expired developer access consent');
|
|
64
73
|
return;
|
|
65
74
|
}
|
|
66
75
|
const redirect = new URL(claims.redirectUri);
|
|
@@ -71,25 +80,16 @@ export class DeveloperGrantOAuthFlow {
|
|
|
71
80
|
redirectAuthorizationResponse(res, redirect, this.#options.issuer);
|
|
72
81
|
return;
|
|
73
82
|
}
|
|
74
|
-
const org = typeof body.org === 'string' ? body.org : undefined;
|
|
75
|
-
const environments = formStrings(body.environment);
|
|
76
|
-
if (org === undefined || environments.length === 0) {
|
|
77
|
-
res.status(400).type('text/plain').send('invalid developer access selection');
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
83
|
let grant;
|
|
81
84
|
try {
|
|
82
|
-
grant = await this.#options.authorizer.
|
|
85
|
+
grant = await this.#options.authorizer.authorize({
|
|
83
86
|
clientId: claims.clientId,
|
|
84
87
|
subject: claims.ownerSubject,
|
|
85
88
|
resource: claims.resource,
|
|
86
|
-
choices: claims.choices,
|
|
87
|
-
org,
|
|
88
|
-
environments,
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
catch {
|
|
92
|
-
res.status(400).type('text/plain').send('invalid developer access
|
|
92
|
+
res.status(400).type('text/plain').send('invalid developer access consent');
|
|
93
93
|
return;
|
|
94
94
|
}
|
|
95
95
|
await this.#options.store.createConsentGrant({
|
|
@@ -98,18 +98,26 @@ export class DeveloperGrantOAuthFlow {
|
|
|
98
98
|
resource: claims.resource,
|
|
99
99
|
identityKind: 'platform',
|
|
100
100
|
});
|
|
101
|
+
await this.#issueAuthorizationCode(res, claims, {
|
|
102
|
+
subject: claims.ownerSubject,
|
|
103
|
+
...(claims.ownerEmail === undefined ? {} : { email: claims.ownerEmail }),
|
|
104
|
+
...(claims.ownerLocale === undefined ? {} : { locale: claims.ownerLocale }),
|
|
105
|
+
...(claims.ownerTimeZone === undefined ? {} : { timeZone: claims.ownerTimeZone }),
|
|
106
|
+
...(claims.authTime === undefined ? {} : { authTime: claims.authTime }),
|
|
107
|
+
}, grant);
|
|
108
|
+
}
|
|
109
|
+
async #issueAuthorizationCode(res, pending, identity, grant) {
|
|
101
110
|
await this.#options.tokenIssuer.issueAuthorizationCode(res, {
|
|
102
|
-
clientId:
|
|
103
|
-
codeChallenge:
|
|
104
|
-
redirectUri:
|
|
105
|
-
resource:
|
|
106
|
-
ownerSubject:
|
|
107
|
-
...(
|
|
108
|
-
...(
|
|
109
|
-
...(
|
|
110
|
-
...(
|
|
111
|
-
...(
|
|
112
|
-
...(claims.scope !== undefined ? { scope: claims.scope } : {}),
|
|
111
|
+
clientId: pending.clientId,
|
|
112
|
+
codeChallenge: pending.codeChallenge,
|
|
113
|
+
redirectUri: pending.redirectUri,
|
|
114
|
+
resource: pending.resource,
|
|
115
|
+
ownerSubject: identity.subject,
|
|
116
|
+
...(identity.email === undefined ? {} : { ownerEmail: identity.email }),
|
|
117
|
+
...storedOAuthOwnerPreferences(identity),
|
|
118
|
+
...(identity.authTime === undefined ? {} : { authTime: identity.authTime }),
|
|
119
|
+
...(pending.clientState === undefined ? {} : { clientState: pending.clientState }),
|
|
120
|
+
...(pending.scope === undefined ? {} : { scope: pending.scope }),
|
|
113
121
|
developerGrantId: grant.id,
|
|
114
122
|
});
|
|
115
123
|
}
|
|
@@ -134,15 +142,16 @@ export function isDeveloperResourceForIssuer(resource, issuer) {
|
|
|
134
142
|
try {
|
|
135
143
|
const resourceUrl = new URL(resource);
|
|
136
144
|
const issuerUrl = new URL(issuer);
|
|
137
|
-
return resourceUrl.origin === issuerUrl.origin &&
|
|
145
|
+
return (resourceUrl.origin === issuerUrl.origin &&
|
|
146
|
+
isDeveloperResource(resourceUrl.pathname) &&
|
|
147
|
+
!resourceUrl.pathname.endsWith('/') &&
|
|
148
|
+
resourceUrl.search === '' &&
|
|
149
|
+
resourceUrl.hash === '' &&
|
|
150
|
+
resourceUrl.username === '' &&
|
|
151
|
+
resourceUrl.password === '');
|
|
138
152
|
}
|
|
139
153
|
catch {
|
|
140
154
|
return false;
|
|
141
155
|
}
|
|
142
156
|
}
|
|
143
|
-
function formStrings(value) {
|
|
144
|
-
if (typeof value === 'string')
|
|
145
|
-
return [value];
|
|
146
|
-
return Array.isArray(value) && value.every((item) => typeof item === 'string') ? value : [];
|
|
147
|
-
}
|
|
148
157
|
//# sourceMappingURL=developer-grant-flow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"developer-grant-flow.js","sourceRoot":"","sources":["../../src/oauth/developer-grant-flow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"developer-grant-flow.js","sourceRoot":"","sources":["../../src/oauth/developer-grant-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DeveloperCapability } from '@noodle-borg/developer-mcp';
|
|
2
2
|
export interface DeveloperGrantPageInput {
|
|
3
3
|
readonly clientName: string;
|
|
4
4
|
readonly resourceHost: string;
|
|
@@ -6,7 +6,7 @@ export interface DeveloperGrantPageInput {
|
|
|
6
6
|
readonly userEmail: string;
|
|
7
7
|
readonly grantToken: string;
|
|
8
8
|
readonly grantAction: string;
|
|
9
|
-
readonly
|
|
9
|
+
readonly capabilities: readonly DeveloperCapability[];
|
|
10
10
|
}
|
|
11
11
|
export declare function renderDeveloperGrantPage(input: DeveloperGrantPageInput): string;
|
|
12
12
|
//# sourceMappingURL=developer-grant-page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"developer-grant-page.d.ts","sourceRoot":"","sources":["../../src/oauth/developer-grant-page.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"developer-grant-page.d.ts","sourceRoot":"","sources":["../../src/oauth/developer-grant-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAItE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACvD;AASD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CA0B/E"}
|