@stigmer/server 3.22.1-dev.20260922095755 → 3.22.1
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/authorization/authorizer.d.ts +8 -4
- package/dist/authorization/authorizer.d.ts.map +1 -1
- package/dist/authorization/authorizer.js +9 -5
- package/dist/authorization/authorizer.js.map +1 -1
- package/dist/authorization/derived-tuples.d.ts.map +1 -1
- package/dist/authorization/derived-tuples.js +25 -10
- package/dist/authorization/derived-tuples.js.map +1 -1
- package/dist/authorization/evaluator.d.ts +8 -7
- package/dist/authorization/evaluator.d.ts.map +1 -1
- package/dist/authorization/evaluator.js +20 -4
- package/dist/authorization/evaluator.js.map +1 -1
- package/dist/authorization/list-read-scope.d.ts.map +1 -1
- package/dist/authorization/list-read-scope.js +9 -5
- package/dist/authorization/list-read-scope.js.map +1 -1
- package/dist/authorization/model/agent.d.ts.map +1 -1
- package/dist/authorization/model/agent.js +5 -4
- package/dist/authorization/model/agent.js.map +1 -1
- package/dist/authorization/model/agent_instance.d.ts.map +1 -1
- package/dist/authorization/model/agent_instance.js +2 -2
- package/dist/authorization/model/agent_instance.js.map +1 -1
- package/dist/authorization/model/mcp_server.d.ts.map +1 -1
- package/dist/authorization/model/mcp_server.js +2 -2
- package/dist/authorization/model/mcp_server.js.map +1 -1
- package/dist/authorization/model/plugin.d.ts.map +1 -1
- package/dist/authorization/model/plugin.js +4 -3
- package/dist/authorization/model/plugin.js.map +1 -1
- package/dist/authorization/model/rewrite.d.ts +10 -8
- package/dist/authorization/model/rewrite.d.ts.map +1 -1
- package/dist/authorization/model/rewrite.js +3 -0
- package/dist/authorization/model/rewrite.js.map +1 -1
- package/dist/authorization/model/skill.d.ts.map +1 -1
- package/dist/authorization/model/skill.js +2 -2
- package/dist/authorization/model/skill.js.map +1 -1
- package/dist/authorization/model/workflow.d.ts.map +1 -1
- package/dist/authorization/model/workflow.js +2 -2
- package/dist/authorization/model/workflow.js.map +1 -1
- package/dist/authorization/model/workflow_instance.d.ts.map +1 -1
- package/dist/authorization/model/workflow_instance.js +2 -2
- package/dist/authorization/model/workflow_instance.js.map +1 -1
- package/dist/authorization/organization-directory.d.ts.map +1 -1
- package/dist/authorization/organization-directory.js +3 -2
- package/dist/authorization/organization-directory.js.map +1 -1
- package/dist/authorization/store-test-kit.d.ts +6 -0
- package/dist/authorization/store-test-kit.d.ts.map +1 -1
- package/dist/authorization/store-test-kit.js +62 -16
- package/dist/authorization/store-test-kit.js.map +1 -1
- package/dist/authorization/tuples.d.ts +32 -13
- package/dist/authorization/tuples.d.ts.map +1 -1
- package/dist/authorization/tuples.js +11 -3
- package/dist/authorization/tuples.js.map +1 -1
- package/dist/domain/agent/controller.d.ts.map +1 -1
- package/dist/domain/agent/controller.js +4 -4
- package/dist/domain/agent/controller.js.map +1 -1
- package/dist/domain/agentchannel/controller.d.ts.map +1 -1
- package/dist/domain/agentchannel/controller.js +1 -3
- package/dist/domain/agentchannel/controller.js.map +1 -1
- package/dist/domain/agentexecution/controller.d.ts.map +1 -1
- package/dist/domain/agentexecution/controller.js +1 -3
- package/dist/domain/agentexecution/controller.js.map +1 -1
- package/dist/domain/agentinstance/controller.d.ts.map +1 -1
- package/dist/domain/agentinstance/controller.js +4 -3
- package/dist/domain/agentinstance/controller.js.map +1 -1
- package/dist/domain/agentshare/constants.d.ts +11 -6
- package/dist/domain/agentshare/constants.d.ts.map +1 -1
- package/dist/domain/agentshare/constants.js +16 -8
- package/dist/domain/agentshare/constants.js.map +1 -1
- package/dist/domain/agentshare/controller.d.ts.map +1 -1
- package/dist/domain/agentshare/controller.js +1 -3
- package/dist/domain/agentshare/controller.js.map +1 -1
- package/dist/domain/agentshare/steps.d.ts +25 -18
- package/dist/domain/agentshare/steps.d.ts.map +1 -1
- package/dist/domain/agentshare/steps.js +142 -41
- package/dist/domain/agentshare/steps.js.map +1 -1
- package/dist/domain/environment/controller.d.ts.map +1 -1
- package/dist/domain/environment/controller.js +3 -2
- package/dist/domain/environment/controller.js.map +1 -1
- package/dist/domain/executioncontext/controller.d.ts.map +1 -1
- package/dist/domain/executioncontext/controller.js +1 -2
- package/dist/domain/executioncontext/controller.js.map +1 -1
- package/dist/domain/mcpserver/controller.d.ts.map +1 -1
- package/dist/domain/mcpserver/controller.js +4 -3
- package/dist/domain/mcpserver/controller.js.map +1 -1
- package/dist/domain/plugin/controller.d.ts.map +1 -1
- package/dist/domain/plugin/controller.js +3 -1
- package/dist/domain/plugin/controller.js.map +1 -1
- package/dist/domain/plugin/push.d.ts +5 -7
- package/dist/domain/plugin/push.d.ts.map +1 -1
- package/dist/domain/plugin/push.js +14 -8
- package/dist/domain/plugin/push.js.map +1 -1
- package/dist/domain/schedule/controller.d.ts.map +1 -1
- package/dist/domain/schedule/controller.js +1 -3
- package/dist/domain/schedule/controller.js.map +1 -1
- package/dist/domain/session/controller.d.ts.map +1 -1
- package/dist/domain/session/controller.js +2 -3
- package/dist/domain/session/controller.js.map +1 -1
- package/dist/domain/skill/controller.d.ts.map +1 -1
- package/dist/domain/skill/controller.js +2 -0
- package/dist/domain/skill/controller.js.map +1 -1
- package/dist/domain/workflow/controller.d.ts.map +1 -1
- package/dist/domain/workflow/controller.js +6 -14
- package/dist/domain/workflow/controller.js.map +1 -1
- package/dist/domain/workflow/registry/data/task-kind-registry.json +1 -1
- package/dist/domain/workflow/validation/task-config-constraints.d.ts +1 -10
- package/dist/domain/workflow/validation/task-config-constraints.d.ts.map +1 -1
- package/dist/domain/workflow/validation/task-config-constraints.js +2 -3
- package/dist/domain/workflow/validation/task-config-constraints.js.map +1 -1
- package/dist/domain/workflowexecution/controller.d.ts.map +1 -1
- package/dist/domain/workflowexecution/controller.js +2 -4
- package/dist/domain/workflowexecution/controller.js.map +1 -1
- package/dist/domain/workflowinstance/controller.d.ts.map +1 -1
- package/dist/domain/workflowinstance/controller.js +4 -3
- package/dist/domain/workflowinstance/controller.js.map +1 -1
- package/dist/extensions/authorization-queries.d.ts +5 -6
- package/dist/extensions/authorization-queries.d.ts.map +1 -1
- package/dist/extensions/list-read-scope.d.ts +1 -1
- package/dist/extensions/resource-authorization.d.ts +2 -3
- package/dist/extensions/resource-authorization.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/apiresource-meta.d.ts +3 -12
- package/dist/pipeline/apiresource-meta.d.ts.map +1 -1
- package/dist/pipeline/apiresource-meta.js +10 -21
- package/dist/pipeline/apiresource-meta.js.map +1 -1
- package/dist/pipeline/steps/authorization-tuples.d.ts +3 -9
- package/dist/pipeline/steps/authorization-tuples.d.ts.map +1 -1
- package/dist/pipeline/steps/authorization-tuples.js +11 -9
- package/dist/pipeline/steps/authorization-tuples.js.map +1 -1
- package/dist/pipeline/steps/references.d.ts +20 -178
- package/dist/pipeline/steps/references.d.ts.map +1 -1
- package/dist/pipeline/steps/references.js +43 -344
- package/dist/pipeline/steps/references.js.map +1 -1
- package/dist/pipeline/steps/visibility-gates.d.ts +27 -0
- package/dist/pipeline/steps/visibility-gates.d.ts.map +1 -0
- package/dist/pipeline/steps/visibility-gates.js +139 -0
- package/dist/pipeline/steps/visibility-gates.js.map +1 -0
- package/dist/query/search/controller.js +1 -0
- package/dist/query/search/controller.js.map +1 -1
- package/dist/query/search/criteria.d.ts +5 -1
- package/dist/query/search/criteria.d.ts.map +1 -1
- package/dist/query/search/criteria.js +13 -3
- package/dist/query/search/criteria.js.map +1 -1
- package/dist/query/search/handler.d.ts +4 -5
- package/dist/query/search/handler.d.ts.map +1 -1
- package/dist/query/search/handler.js +6 -7
- package/dist/query/search/handler.js.map +1 -1
- package/dist/query/search/query-store.d.ts.map +1 -1
- package/dist/query/search/query-store.js +2 -0
- package/dist/query/search/query-store.js.map +1 -1
- package/dist/store/interface.d.ts +6 -3
- package/dist/store/interface.d.ts.map +1 -1
- package/dist/store/interface.js.map +1 -1
- package/dist/store/postgres/migrations.d.ts +1 -3
- package/dist/store/postgres/migrations.d.ts.map +1 -1
- package/dist/store/postgres/migrations.js +1 -35
- package/dist/store/postgres/migrations.js.map +1 -1
- package/dist/store/postgres/store.d.ts.map +1 -1
- package/dist/store/postgres/store.js +9 -4
- package/dist/store/postgres/store.js.map +1 -1
- package/dist/store/sqlite/migrations.d.ts +1 -3
- package/dist/store/sqlite/migrations.d.ts.map +1 -1
- package/dist/store/sqlite/migrations.js +1 -36
- package/dist/store/sqlite/migrations.js.map +1 -1
- package/dist/store/sqlite/store.d.ts.map +1 -1
- package/dist/store/sqlite/store.js +8 -4
- package/dist/store/sqlite/store.js.map +1 -1
- package/package.json +6 -6
- package/src/authorization/README.md +26 -24
- package/src/authorization/__tests__/authorizer.test.ts +9 -10
- package/src/authorization/__tests__/derived-tuples.test.ts +11 -4
- package/src/authorization/__tests__/evaluator.test.ts +73 -14
- package/src/authorization/__tests__/facts.test.ts +2 -2
- package/src/authorization/__tests__/fixtures/fga/agent-instance-creation.fga.yaml +185 -0
- package/src/authorization/__tests__/fixtures/fga/blueprint-private-visibility.fga.yaml +98 -6
- package/src/authorization/__tests__/fixtures/fga/cross-org-share-creation.fga.yaml +98 -0
- package/src/authorization/__tests__/fixtures/fga/default-instance-inheritance.fga.yaml +61 -4
- package/src/authorization/__tests__/fixtures/fga/mcp-server-authoring.fga.yaml +143 -0
- package/src/authorization/__tests__/fixtures/fga/org-admin-owner-inheritance.fga.yaml +21 -1
- package/src/authorization/__tests__/fixtures/fga/platform-visibility.fga.yaml +25 -1
- package/src/authorization/__tests__/fixtures/fga/public-visibility-setter.fga.yaml +52 -0
- package/src/authorization/__tests__/fixtures/fga/workflow-execution-sharing.fga.yaml +3 -1
- package/src/authorization/__tests__/list-read-scope.test.ts +17 -18
- package/src/authorization/__tests__/store-tests.test.ts +8 -1
- package/src/authorization/__tests__/tuples.test.ts +11 -12
- package/src/authorization/authorizer.ts +9 -4
- package/src/authorization/derived-tuples.ts +31 -14
- package/src/authorization/evaluator.ts +44 -8
- package/src/authorization/list-read-scope.ts +11 -5
- package/src/authorization/model/agent.ts +5 -2
- package/src/authorization/model/agent_instance.ts +2 -0
- package/src/authorization/model/mcp_server.ts +2 -0
- package/src/authorization/model/plugin.ts +4 -1
- package/src/authorization/model/rewrite.ts +13 -8
- package/src/authorization/model/skill.ts +2 -0
- package/src/authorization/model/workflow.ts +2 -0
- package/src/authorization/model/workflow_instance.ts +2 -0
- package/src/authorization/organization-directory.ts +3 -1
- package/src/authorization/store-test-kit.ts +75 -16
- package/src/authorization/tuples.ts +39 -16
- package/src/domain/agent/__tests__/agent.test.ts +4 -11
- package/src/domain/agent/controller.ts +7 -7
- package/src/domain/agentchannel/__tests__/agentchannel.test.ts +48 -223
- package/src/domain/agentchannel/controller.ts +1 -6
- package/src/domain/agentexecution/controller.ts +1 -6
- package/src/domain/agentinstance/controller.ts +12 -6
- package/src/domain/agentshare/__tests__/agentshare.test.ts +172 -196
- package/src/domain/agentshare/__tests__/create-authorization.test.ts +31 -16
- package/src/domain/agentshare/constants.ts +26 -14
- package/src/domain/agentshare/controller.ts +1 -6
- package/src/domain/agentshare/steps.ts +194 -41
- package/src/domain/environment/controller.ts +8 -5
- package/src/domain/executioncontext/controller.ts +1 -5
- package/src/domain/mcpserver/__tests__/mcpserver.test.ts +28 -115
- package/src/domain/mcpserver/__tests__/oauth-handshake.test.ts +18 -53
- package/src/domain/mcpserver/controller.ts +12 -6
- package/src/domain/plugin/controller.ts +8 -1
- package/src/domain/plugin/push.ts +16 -8
- package/src/domain/schedule/controller.ts +1 -6
- package/src/domain/session/controller.ts +4 -12
- package/src/domain/skill/controller.ts +7 -0
- package/src/domain/workflow/controller.ts +10 -28
- package/src/domain/workflow/registry/data/task-kind-registry.json +1 -1
- package/src/domain/workflow/validation/task-config-constraints.ts +3 -7
- package/src/domain/workflowexecution/controller.ts +2 -7
- package/src/domain/workflowinstance/controller.ts +12 -6
- package/src/extensions/__tests__/built-in-authorization-composed.test.ts +19 -32
- package/src/extensions/__tests__/extension-composition.test.ts +4 -4
- package/src/extensions/__tests__/list-read-scope-composed.test.ts +6 -9
- package/src/extensions/authorization-queries.ts +5 -6
- package/src/extensions/list-read-scope.ts +1 -1
- package/src/extensions/resource-authorization.ts +5 -3
- package/src/index.ts +14 -0
- package/src/pipeline/apiresource-meta.ts +10 -21
- package/src/pipeline/steps/__tests__/authorization-tuples.test.ts +31 -18
- package/src/pipeline/steps/__tests__/visibility-gates.test.ts +187 -0
- package/src/pipeline/steps/authorization-tuples.ts +11 -9
- package/src/pipeline/steps/references.ts +70 -578
- package/src/pipeline/steps/visibility-gates.ts +174 -0
- package/src/query/search/__tests__/criteria.test.ts +4 -0
- package/src/query/search/__tests__/query-store.test.ts +40 -11
- package/src/query/search/controller.ts +1 -0
- package/src/query/search/criteria.ts +14 -0
- package/src/query/search/handler.ts +7 -6
- package/src/query/search/query-store.ts +2 -0
- package/src/store/__tests__/store-contract.ts +51 -6
- package/src/store/interface.ts +6 -3
- package/src/store/postgres/__tests__/migrations.test.ts +6 -187
- package/src/store/postgres/__tests__/store-contract.test.ts +2 -0
- package/src/store/postgres/migrations.ts +1 -48
- package/src/store/postgres/store.ts +11 -4
- package/src/store/sqlite/__tests__/migrations.test.ts +5 -191
- package/src/store/sqlite/migrations.ts +1 -45
- package/src/store/sqlite/store.ts +10 -4
- package/dist/domain/workflow/agent-call-references.d.ts +0 -54
- package/dist/domain/workflow/agent-call-references.d.ts.map +0 -1
- package/dist/domain/workflow/agent-call-references.js +0 -97
- package/dist/domain/workflow/agent-call-references.js.map +0 -1
- package/dist/store/public-visibility-retired.d.ts +0 -67
- package/dist/store/public-visibility-retired.d.ts.map +0 -1
- package/dist/store/public-visibility-retired.js +0 -55
- package/dist/store/public-visibility-retired.js.map +0 -1
- package/src/domain/workflow/__tests__/agent-call-references.test.ts +0 -222
- package/src/domain/workflow/agent-call-references.ts +0 -157
- package/src/pipeline/__tests__/supports-visibility.test.ts +0 -112
- package/src/pipeline/steps/__tests__/references.test.ts +0 -703
- package/src/store/__tests__/public-visibility-retired.test.ts +0 -127
- package/src/store/public-visibility-retired.ts +0 -119
|
@@ -1,254 +1,10 @@
|
|
|
1
|
-
import { fromBinary, getOption, hasOption } from "@bufbuild/protobuf";
|
|
2
1
|
import { reflect } from "@bufbuild/protobuf/reflect";
|
|
3
|
-
import { AgentSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
4
|
-
import { ChannelAppSchema } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
|
|
5
|
-
import { EnvironmentSchema } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
|
|
6
2
|
import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
7
|
-
import { SkillSchema } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
|
|
8
3
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { OAuthAppSchema } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/api_pb";
|
|
12
|
-
import { failedPreconditionError, internalError, invalidArgumentError, } from "../errors.js";
|
|
4
|
+
import { failedPreconditionError, internalError } from "../errors.js";
|
|
5
|
+
import { findResourceBySlug } from "./helpers.js";
|
|
13
6
|
import { messageFieldByName, metadataOf } from "./shapes.js";
|
|
14
7
|
const API_RESOURCE_REFERENCE_TYPE = "ai.stigmer.commons.apiresource.ApiResourceReference";
|
|
15
|
-
export const REFERENCE_TARGET_KINDS = [
|
|
16
|
-
{
|
|
17
|
-
kind: ApiResourceKind.skill,
|
|
18
|
-
schema: SkillSchema,
|
|
19
|
-
readByRun: true,
|
|
20
|
-
label: "skill(s)",
|
|
21
|
-
listHint: "stigmer list skills",
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
kind: ApiResourceKind.mcp_server,
|
|
25
|
-
schema: McpServerSchema,
|
|
26
|
-
readByRun: true,
|
|
27
|
-
label: "MCP server(s)",
|
|
28
|
-
listHint: "stigmer get mcp-servers",
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
kind: ApiResourceKind.agent,
|
|
32
|
-
schema: AgentSchema,
|
|
33
|
-
readByRun: true,
|
|
34
|
-
label: "agent(s)",
|
|
35
|
-
listHint: "stigmer list agents",
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
kind: ApiResourceKind.environment,
|
|
39
|
-
schema: EnvironmentSchema,
|
|
40
|
-
readByRun: false,
|
|
41
|
-
label: "environment(s)",
|
|
42
|
-
listHint: "stigmer list environments",
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
kind: ApiResourceKind.channel_app,
|
|
46
|
-
schema: ChannelAppSchema,
|
|
47
|
-
readByRun: false,
|
|
48
|
-
label: "channel app(s)",
|
|
49
|
-
listHint: "stigmer list channel-app",
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
kind: ApiResourceKind.oauth_app,
|
|
53
|
-
schema: OAuthAppSchema,
|
|
54
|
-
readByRun: false,
|
|
55
|
-
label: "OAuth app(s)",
|
|
56
|
-
listHint: undefined,
|
|
57
|
-
},
|
|
58
|
-
];
|
|
59
|
-
export function referenceTargetKind(kind) {
|
|
60
|
-
return REFERENCE_TARGET_KINDS.find((entry) => entry.kind === kind);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Loads the rows the given references could name: one `listResources` per
|
|
64
|
-
* distinct kind, decoded once, indexed by (org, slug). A row that does not
|
|
65
|
-
* decode is skipped as the slug helpers skip it — it is not a row a
|
|
66
|
-
* reference can reach. A reference whose kind is not in the table is a
|
|
67
|
-
* contract the pin test has not admitted yet and is an internal fault.
|
|
68
|
-
*/
|
|
69
|
-
export async function loadReferenceTargets(store, refs) {
|
|
70
|
-
const byKind = new Map();
|
|
71
|
-
for (const kind of new Set(refs.map((ref) => ref.kind))) {
|
|
72
|
-
const entry = referenceTargetKind(kind);
|
|
73
|
-
if (entry === undefined) {
|
|
74
|
-
throw internalError(new Error(`kind ${ApiResourceKind[kind] ?? kind} is not a reference target`), "reference rule table has no entry for the referenced kind");
|
|
75
|
-
}
|
|
76
|
-
const index = new Map();
|
|
77
|
-
for (const data of await store.listResources(kind)) {
|
|
78
|
-
let metadata;
|
|
79
|
-
try {
|
|
80
|
-
metadata = metadataOf(fromBinary(entry.schema, data));
|
|
81
|
-
}
|
|
82
|
-
catch {
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if (metadata === undefined || metadata.slug === "") {
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
|
-
index.set(targetKey(metadata.org, metadata.slug), metadata.visibility);
|
|
89
|
-
}
|
|
90
|
-
byKind.set(kind, index);
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
visibilityOf(ref) {
|
|
94
|
-
return byKind.get(ref.kind)?.get(targetKey(ref.org, ref.slug));
|
|
95
|
-
},
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
function targetKey(org, slug) {
|
|
99
|
-
return `${org}/${slug}`;
|
|
100
|
-
}
|
|
101
|
-
/** The three clauses of the module header, for one reference. */
|
|
102
|
-
export function checkReference(targets, parent, ref) {
|
|
103
|
-
if (ref.org === "") {
|
|
104
|
-
return { kind: "no-org" };
|
|
105
|
-
}
|
|
106
|
-
const target = targets.visibilityOf(ref);
|
|
107
|
-
if (ref.org !== parent.org) {
|
|
108
|
-
return target === ApiResourceVisibility.visibility_platform
|
|
109
|
-
? { kind: "ok" }
|
|
110
|
-
: { kind: "not-available" };
|
|
111
|
-
}
|
|
112
|
-
if (target === undefined) {
|
|
113
|
-
return { kind: "missing" };
|
|
114
|
-
}
|
|
115
|
-
const entry = referenceTargetKind(ref.kind);
|
|
116
|
-
if (entry?.readByRun === true &&
|
|
117
|
-
visibilityRank(target) < visibilityRank(parent.visibility)) {
|
|
118
|
-
return { kind: "below-floor", targetVisibility: target };
|
|
119
|
-
}
|
|
120
|
-
return { kind: "ok" };
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* The order the floor compares on: private < org < platform, an unset
|
|
124
|
-
* level reading as private (the level a row with no config holds). The
|
|
125
|
-
* retired public level is unreachable here — refused at every door and
|
|
126
|
-
* moved off every stored row by the store migration — so meeting it is a
|
|
127
|
-
* fault, not a rank.
|
|
128
|
-
*/
|
|
129
|
-
function visibilityRank(level) {
|
|
130
|
-
switch (level) {
|
|
131
|
-
case ApiResourceVisibility.api_resource_visibility_unspecified:
|
|
132
|
-
case ApiResourceVisibility.visibility_private:
|
|
133
|
-
return 0;
|
|
134
|
-
case ApiResourceVisibility.visibility_org:
|
|
135
|
-
return 1;
|
|
136
|
-
case ApiResourceVisibility.visibility_platform:
|
|
137
|
-
return 2;
|
|
138
|
-
case ApiResourceVisibility.visibility_public:
|
|
139
|
-
throw new Error("the retired public level has no rank");
|
|
140
|
-
default: {
|
|
141
|
-
const exhaustive = level;
|
|
142
|
-
throw new Error(`unknown visibility level: ${String(exhaustive)}`);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
// ---------------------------------------------------------------------------
|
|
147
|
-
// The copy.
|
|
148
|
-
// ---------------------------------------------------------------------------
|
|
149
|
-
/** Clause (i)'s sentence. */
|
|
150
|
-
export function noOrgReferenceMessage(entry, slug) {
|
|
151
|
-
return `referenced ${entry.label} '${slug}' names no organization; a reference is 'org/slug', or 'slug' for a resource of this organization.`;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Clause (ii)'s sentence for the targets not found, one per kind. The MCP
|
|
155
|
-
* server form is the wire contract that predates the rule; the others are
|
|
156
|
-
* its siblings.
|
|
157
|
-
*/
|
|
158
|
-
export function missingReferencesMessage(entry, handles) {
|
|
159
|
-
const list = handles.map((h) => `'${h.slug}' (org: ${h.org})`).join(", ");
|
|
160
|
-
const hint = entry.listHint === undefined
|
|
161
|
-
? ""
|
|
162
|
-
: ` Use '${entry.listHint}' to list available ${plural(entry)}.`;
|
|
163
|
-
return `referenced ${entry.label} not found: ${list}. Verify the slug and org are correct.${hint}`;
|
|
164
|
-
}
|
|
165
|
-
/** Clause (ii)'s floor sentence: the dependency and its level, against the resource's. */
|
|
166
|
-
export function belowFloorMessage(entry, ref, targetVisibility, parentVisibility) {
|
|
167
|
-
return `referenced ${singular(entry)} '${ref.org}/${ref.slug}' is ${levelWord(targetVisibility)} while this resource is ${levelWord(parentVisibility)}; a resource may not be more visible than the ${plural(entry)} it runs with. Widen the referenced resource's visibility or narrow this one.`;
|
|
168
|
-
}
|
|
169
|
-
/** The level as the copy names it: an unset level reads as private, which is how every reader treats it. */
|
|
170
|
-
function levelWord(level) {
|
|
171
|
-
return level === ApiResourceVisibility.api_resource_visibility_unspecified
|
|
172
|
-
? ApiResourceVisibility[ApiResourceVisibility.visibility_private]
|
|
173
|
-
: ApiResourceVisibility[level];
|
|
174
|
-
}
|
|
175
|
-
/** Clause (iii)'s one sentence — the same whether the target is missing or not platform-visible. */
|
|
176
|
-
export function notAvailableReferenceMessage(entry, ref) {
|
|
177
|
-
return `referenced ${singular(entry)} '${ref.org}/${ref.slug}' is not available to this organization; another organization's resource can be referenced only when that organization shares it at platform visibility.`;
|
|
178
|
-
}
|
|
179
|
-
/** "MCP server(s)" → "MCP server" and "MCP servers": the label's two readings. */
|
|
180
|
-
function singular(entry) {
|
|
181
|
-
return entry.label.replace("(s)", "");
|
|
182
|
-
}
|
|
183
|
-
function plural(entry) {
|
|
184
|
-
return entry.label.replace("(s)", "s");
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* The refusal for a set of verdicts, or undefined when every one is ok.
|
|
188
|
-
* Missing same-organization targets are grouped per kind into one sentence
|
|
189
|
-
* (the contract's shape); every other refusal is its own sentence; the
|
|
190
|
-
* sentences are joined in the order the references were read. A no-org
|
|
191
|
-
* reference is malformed input (INVALID_ARGUMENT); everything else is a
|
|
192
|
-
* precondition the store does not meet (FAILED_PRECONDITION), the code the
|
|
193
|
-
* MCP-server contract already answers.
|
|
194
|
-
*/
|
|
195
|
-
export function referenceRefusal(parent, verdicts) {
|
|
196
|
-
// Missing same-organization targets, grouped per kind in the order the
|
|
197
|
-
// first of each kind was read.
|
|
198
|
-
const missingByKind = new Map();
|
|
199
|
-
for (const { ref, verdict } of verdicts) {
|
|
200
|
-
if (verdict.kind === "missing") {
|
|
201
|
-
const held = missingByKind.get(ref.kind);
|
|
202
|
-
if (held === undefined) {
|
|
203
|
-
missingByKind.set(ref.kind, [ref]);
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
held.push(ref);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
const sentences = [];
|
|
211
|
-
const groupedKindsSaid = new Set();
|
|
212
|
-
let malformed = false;
|
|
213
|
-
for (const { ref, verdict } of verdicts) {
|
|
214
|
-
const entry = referenceTargetKind(ref.kind);
|
|
215
|
-
if (entry === undefined) {
|
|
216
|
-
continue;
|
|
217
|
-
}
|
|
218
|
-
switch (verdict.kind) {
|
|
219
|
-
case "ok":
|
|
220
|
-
break;
|
|
221
|
-
case "no-org":
|
|
222
|
-
malformed = true;
|
|
223
|
-
sentences.push(noOrgReferenceMessage(entry, ref.slug));
|
|
224
|
-
break;
|
|
225
|
-
case "missing":
|
|
226
|
-
if (!groupedKindsSaid.has(ref.kind)) {
|
|
227
|
-
groupedKindsSaid.add(ref.kind);
|
|
228
|
-
sentences.push(missingReferencesMessage(entry, missingByKind.get(ref.kind) ?? []));
|
|
229
|
-
}
|
|
230
|
-
break;
|
|
231
|
-
case "below-floor":
|
|
232
|
-
sentences.push(belowFloorMessage(entry, ref, verdict.targetVisibility, parent.visibility));
|
|
233
|
-
break;
|
|
234
|
-
case "not-available":
|
|
235
|
-
sentences.push(notAvailableReferenceMessage(entry, ref));
|
|
236
|
-
break;
|
|
237
|
-
default: {
|
|
238
|
-
const exhaustive = verdict;
|
|
239
|
-
throw new Error(`unknown verdict: ${JSON.stringify(exhaustive)}`);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
if (sentences.length === 0) {
|
|
244
|
-
return undefined;
|
|
245
|
-
}
|
|
246
|
-
const text = sentences.join(" ");
|
|
247
|
-
return malformed ? invalidArgumentError(text) : failedPreconditionError(text);
|
|
248
|
-
}
|
|
249
|
-
// ---------------------------------------------------------------------------
|
|
250
|
-
// The steps.
|
|
251
|
-
// ---------------------------------------------------------------------------
|
|
252
8
|
export function newNormalizeReferencesStep() {
|
|
253
9
|
return {
|
|
254
10
|
name: "NormalizeReferences",
|
|
@@ -257,8 +13,8 @@ export function newNormalizeReferencesStep() {
|
|
|
257
13
|
if (metadata === undefined) {
|
|
258
14
|
throw internalError(new Error("resource metadata is nil"), "normalize references");
|
|
259
15
|
}
|
|
260
|
-
// No org to resolve from — skip silently;
|
|
261
|
-
//
|
|
16
|
+
// No org to resolve from — skip silently; required-org validation is
|
|
17
|
+
// the validation step's responsibility, not this one's.
|
|
262
18
|
if (metadata.org === "") {
|
|
263
19
|
return;
|
|
264
20
|
}
|
|
@@ -275,115 +31,58 @@ export function newValidateReferencesStep(store) {
|
|
|
275
31
|
return {
|
|
276
32
|
name: "ValidateReferences",
|
|
277
33
|
async execute(ctx) {
|
|
278
|
-
const
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
}
|
|
286
|
-
const
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
export async function checkReferences(store, parent, refs) {
|
|
299
|
-
const targets = await loadReferenceTargets(store, refs);
|
|
300
|
-
return referenceRefusal(parent, refs.map((ref) => ({ ref, verdict: checkReference(targets, parent, ref) })));
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* The floor's second door (the module header): on an updateVisibility chain,
|
|
304
|
-
* after the loaded row is on the context under `targetKey` and after
|
|
305
|
-
* ValidateVisibilityUpdate, refuses raising the level while a run-read
|
|
306
|
-
* reference the row carries would end below it.
|
|
307
|
-
*/
|
|
308
|
-
export function newGuardReferenceFloorOnEscalationStep(store, targetKey, collectors) {
|
|
309
|
-
return {
|
|
310
|
-
name: "GuardReferenceFloorOnEscalation",
|
|
311
|
-
async execute(ctx) {
|
|
312
|
-
const row = ctx.get(targetKey);
|
|
313
|
-
if (row === undefined) {
|
|
314
|
-
// Wiring error, not a user error: a guard that silently passes
|
|
315
|
-
// un-guards the boundary it exists to protect.
|
|
316
|
-
throw internalError(new Error("GuardReferenceFloorOnEscalation ran without a loaded target — the step must follow the load step"), "reference floor requires the loaded resource");
|
|
317
|
-
}
|
|
318
|
-
const metadata = metadataOf(row);
|
|
319
|
-
if (metadata === undefined) {
|
|
320
|
-
throw internalError(new Error("resource metadata is nil"), "reference floor requires the loaded resource");
|
|
321
|
-
}
|
|
322
|
-
const requested = ctx.input.visibility;
|
|
323
|
-
if (visibilityRank(requested) <= visibilityRank(metadata.visibility)) {
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
const refs = collectors
|
|
327
|
-
.flatMap((collect) => collect(row))
|
|
328
|
-
.filter((ref) => ref.slug !== "");
|
|
329
|
-
if (refs.length === 0) {
|
|
330
|
-
return;
|
|
34
|
+
const refs = [];
|
|
35
|
+
forEachSpecReference(ctx.schema, ctx.newState, (ref) => {
|
|
36
|
+
refs.push({
|
|
37
|
+
kind: numberField(ref, "kind"),
|
|
38
|
+
slug: stringField(ref, "slug"),
|
|
39
|
+
org: stringField(ref, "org"),
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
const missingMcpServers = [];
|
|
43
|
+
for (const ref of refs) {
|
|
44
|
+
if (ref.slug === "") {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
// Per-kind validation, exactly Go's switch: only mcp_server today.
|
|
48
|
+
if (ref.kind === ApiResourceKind.mcp_server) {
|
|
49
|
+
const found = await findResourceBySlug(store, ApiResourceKind.mcp_server, McpServerSchema, ref.slug, ref.org);
|
|
50
|
+
if (found === undefined) {
|
|
51
|
+
missingMcpServers.push(`'${ref.slug}' (org: ${ref.org})`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
331
54
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
const targets = await loadReferenceTargets(store, refs);
|
|
337
|
-
const refusal = referenceRefusal(parent, refs
|
|
338
|
-
.map((ref) => ({
|
|
339
|
-
ref,
|
|
340
|
-
verdict: checkReference(targets, parent, ref),
|
|
341
|
-
}))
|
|
342
|
-
.filter(({ verdict }) => verdict.kind === "below-floor"));
|
|
343
|
-
if (refusal !== undefined) {
|
|
344
|
-
throw refusal;
|
|
55
|
+
if (missingMcpServers.length > 0) {
|
|
56
|
+
throw failedPreconditionError(`referenced MCP server(s) not found: ${missingMcpServers.join(", ")}. ` +
|
|
57
|
+
"Verify the slug and org are correct. " +
|
|
58
|
+
"Use 'stigmer get mcp-servers' to list available MCP servers.");
|
|
345
59
|
}
|
|
346
60
|
},
|
|
347
61
|
};
|
|
348
62
|
}
|
|
349
|
-
// ---------------------------------------------------------------------------
|
|
350
|
-
// The walk.
|
|
351
|
-
// ---------------------------------------------------------------------------
|
|
352
63
|
/**
|
|
353
|
-
* Every ApiResourceReference in a resource's spec
|
|
354
|
-
*
|
|
355
|
-
*
|
|
356
|
-
*
|
|
357
|
-
*
|
|
64
|
+
* Every ApiResourceReference in a resource's spec — the same walk
|
|
65
|
+
* ValidateReferences runs, exported for the readers that ask the reverse
|
|
66
|
+
* question ("who references this?"): the plugin delete guard scans an
|
|
67
|
+
* organization's agents and workflows for references to a member it is
|
|
68
|
+
* about to remove.
|
|
358
69
|
*/
|
|
359
70
|
export function collectSpecReferences(schema, msg) {
|
|
360
71
|
const refs = [];
|
|
361
|
-
forEachSpecReference(schema, msg, (ref
|
|
72
|
+
forEachSpecReference(schema, msg, (ref) => {
|
|
362
73
|
refs.push({
|
|
363
|
-
kind:
|
|
74
|
+
kind: numberField(ref, "kind"),
|
|
364
75
|
slug: stringField(ref, "slug"),
|
|
365
76
|
org: stringField(ref, "org"),
|
|
366
77
|
});
|
|
367
78
|
});
|
|
368
79
|
return refs;
|
|
369
80
|
}
|
|
370
|
-
/**
|
|
371
|
-
* The kind a reference names: the field's `reference_kind` option when the
|
|
372
|
-
* contract declares one (every reference field does), else the kind the
|
|
373
|
-
* message carries (the walk's only fallback, for a field the contract has
|
|
374
|
-
* not annotated).
|
|
375
|
-
*/
|
|
376
|
-
function declaredKind(field, ref) {
|
|
377
|
-
if (hasOption(field, reference_kind)) {
|
|
378
|
-
return getOption(field, reference_kind);
|
|
379
|
-
}
|
|
380
|
-
return numberField(ref, "kind");
|
|
381
|
-
}
|
|
382
81
|
/**
|
|
383
82
|
* Walks the resource's spec and invokes fn on every ApiResourceReference
|
|
384
|
-
* (singular, repeated, and map-valued message fields, recursively)
|
|
385
|
-
* the
|
|
386
|
-
* through.
|
|
83
|
+
* (singular, repeated, and map-valued message fields, recursively) —
|
|
84
|
+
* the shared traversal behind both steps (Go walkAndResolveOrg /
|
|
85
|
+
* walkAndCollectRefs). Mutations through the ReflectMessage write through.
|
|
387
86
|
*/
|
|
388
87
|
function forEachSpecReference(schema, msg, fn) {
|
|
389
88
|
const root = reflect(schema, msg);
|
|
@@ -400,7 +99,7 @@ function walk(msg, fn) {
|
|
|
400
99
|
continue;
|
|
401
100
|
}
|
|
402
101
|
for (const item of msg.get(field)) {
|
|
403
|
-
visit(item,
|
|
102
|
+
visit(item, fn);
|
|
404
103
|
}
|
|
405
104
|
}
|
|
406
105
|
else if (field.fieldKind === "map") {
|
|
@@ -409,20 +108,20 @@ function walk(msg, fn) {
|
|
|
409
108
|
}
|
|
410
109
|
const map = msg.get(field);
|
|
411
110
|
for (const [, value] of map) {
|
|
412
|
-
visit(value,
|
|
111
|
+
visit(value, fn);
|
|
413
112
|
}
|
|
414
113
|
}
|
|
415
114
|
else if (field.fieldKind === "message") {
|
|
416
115
|
if (!msg.isSet(field)) {
|
|
417
116
|
continue;
|
|
418
117
|
}
|
|
419
|
-
visit(msg.get(field),
|
|
118
|
+
visit(msg.get(field), fn);
|
|
420
119
|
}
|
|
421
120
|
}
|
|
422
121
|
}
|
|
423
|
-
function visit(sub,
|
|
122
|
+
function visit(sub, fn) {
|
|
424
123
|
if (sub.desc.typeName === API_RESOURCE_REFERENCE_TYPE) {
|
|
425
|
-
fn(sub
|
|
124
|
+
fn(sub);
|
|
426
125
|
}
|
|
427
126
|
else {
|
|
428
127
|
walk(sub, fn);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../../src/pipeline/steps/references.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../../src/pipeline/steps/references.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DescMessage } from "@bufbuild/protobuf";
|
|
2
|
+
import type { Authorizer } from "../../extensions/authorizer.js";
|
|
3
|
+
import type { CallerIdentity } from "../../extensions/identity.js";
|
|
4
|
+
import type { PipelineStep } from "../pipeline.js";
|
|
5
|
+
/**
|
|
6
|
+
* The denial callers see at both doors (the Java policy copy verbatim).
|
|
7
|
+
* Deliberately not byte-pinned by the OSS conformance suite; the cloud
|
|
8
|
+
* gate itself is recorded via the clientPublicVisibilityWrites flag.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PUBLIC_VISIBILITY_DENY_MESSAGE: string;
|
|
11
|
+
/** The CREATE door: a new state declaring PUBLIC needs the operator grant. */
|
|
12
|
+
export declare function newGuardPublicVisibilityStep<Desc extends DescMessage>(authorizer: Authorizer): PipelineStep<Desc>;
|
|
13
|
+
/**
|
|
14
|
+
* The UPDATE door: escalation to PUBLIC (the stored level is anything
|
|
15
|
+
* else) needs the operator grant. Reads the loaded target from the
|
|
16
|
+
* chain's own context key (every updateVisibility chain stores it —
|
|
17
|
+
* the RecordVisibilityBeforeUpdate pattern).
|
|
18
|
+
*/
|
|
19
|
+
export declare function newAuthorizeVisibilityTransitionStep<Desc extends DescMessage>(targetKey: string, authorizer: Authorizer): PipelineStep<Desc>;
|
|
20
|
+
/**
|
|
21
|
+
* The single owner of "may this caller set public?" — both doors call it,
|
|
22
|
+
* and so does the plugin push chain, whose requested level rides the
|
|
23
|
+
* request (the level then flows to every member through the members' own
|
|
24
|
+
* create and updateVisibility doors, which run this check again).
|
|
25
|
+
*/
|
|
26
|
+
export declare function requireOperatorMaySetPublic(authorizer: Authorizer, caller: CallerIdentity): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=visibility-gates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility-gates.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/visibility-gates.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOtD,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,QAEU,CAAC;AAEtD,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAAC,IAAI,SAAS,WAAW,EACnE,UAAU,EAAE,UAAU,GACrB,YAAY,CAAC,IAAI,CAAC,CAgBpB;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAAC,IAAI,SAAS,WAAW,EAC3E,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GACrB,YAAY,CAAC,IAAI,CAAC,CA+BpB;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The PUBLIC-visibility operator gates — the two write doors a resource
|
|
3
|
+
* can become public through, both consulting the ONE composed Authorizer
|
|
4
|
+
* with the same platform-scoped check (the Java
|
|
5
|
+
* PublicVisibilityEscalationPolicy port; C2 Stage 3, 20260827.10).
|
|
6
|
+
*
|
|
7
|
+
* PUBLIC is the only level that crosses every org boundary (one flip
|
|
8
|
+
* lists a resource in every tenant's cross-org catalog), so entering it
|
|
9
|
+
* is a curation decision: the owner requests, the platform team grants.
|
|
10
|
+
* The answer is `can_set_public_visibility` on `platform:stigmer` — a
|
|
11
|
+
* named operator capability, never a bare operator lookup.
|
|
12
|
+
*
|
|
13
|
+
* - GuardPublicVisibility: the CREATE door, in the create chains of
|
|
14
|
+
* the kinds whose VisibilityConfig supports PUBLIC (agent, workflow,
|
|
15
|
+
* mcp_server, agent_instance, workflow_instance). After
|
|
16
|
+
* BuildNewState — it inspects the state that will persist — which
|
|
17
|
+
* keeps the pinned INVALID_ARGUMENT level-support rejections (the
|
|
18
|
+
* earlier ValidateVisibility) their precedence over this
|
|
19
|
+
* PERMISSION_DENIED.
|
|
20
|
+
* - AuthorizeVisibilityTransition: the UPDATE door, in every
|
|
21
|
+
* updateVisibility chain after ValidateVisibilityUpdate (the pinned
|
|
22
|
+
* FAILED_PRECONDITION default-instance rejection keeps precedence,
|
|
23
|
+
* the Java ordering the conformance suite depends on). Gates only
|
|
24
|
+
* the ESCALATION to public (stored level is anything else).
|
|
25
|
+
*
|
|
26
|
+
* Both run LAZILY — only requests that actually involve the PUBLIC level
|
|
27
|
+
* reach the Authorizer — and both pass for internal callers (server-side
|
|
28
|
+
* flows publish platform resources by design). The OSS permissive
|
|
29
|
+
* default allows, so the local posture keeps today's behavior
|
|
30
|
+
* byte-identically; the cloud's FGA Authorizer supplies the gate.
|
|
31
|
+
*
|
|
32
|
+
* DELIBERATE partial port, recorded owner-visibly (Stage-3 execution
|
|
33
|
+
* record): Java's transition step additionally lets operators WITHOUT
|
|
34
|
+
* resource can_edit publish and take down (its updateVisibility chains
|
|
35
|
+
* authorize post-load, transition-aware); this edition's position-1
|
|
36
|
+
* Authorize enforces can_edit on updateVisibility before any step here
|
|
37
|
+
* runs, so those operator-without-edit lanes require can_edit until the
|
|
38
|
+
* Stage-4 chain disposition addresses them. No conformance lane pins
|
|
39
|
+
* them.
|
|
40
|
+
*/
|
|
41
|
+
import { Code, ConnectError } from "@connectrpc/connect";
|
|
42
|
+
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
43
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
44
|
+
import { IamPermission } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
45
|
+
import { internalError } from "../errors.js";
|
|
46
|
+
import { metadataOf } from "./shapes.js";
|
|
47
|
+
/**
|
|
48
|
+
* The denial callers see at both doors (the Java policy copy verbatim).
|
|
49
|
+
* Deliberately not byte-pinned by the OSS conformance suite; the cloud
|
|
50
|
+
* gate itself is recorded via the clientPublicVisibilityWrites flag.
|
|
51
|
+
*/
|
|
52
|
+
export const PUBLIC_VISIBILITY_DENY_MESSAGE = "Public visibility is granted by the platform team. " +
|
|
53
|
+
"Ask a platform operator to publish this resource.";
|
|
54
|
+
/** The CREATE door: a new state declaring PUBLIC needs the operator grant. */
|
|
55
|
+
export function newGuardPublicVisibilityStep(authorizer) {
|
|
56
|
+
return {
|
|
57
|
+
name: "GuardPublicVisibility",
|
|
58
|
+
async execute(ctx) {
|
|
59
|
+
if (ctx.callerIdentity.callerClass === "internal") {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (metadataOf(ctx.newState)?.visibility !==
|
|
63
|
+
ApiResourceVisibility.visibility_public) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
await requireOperatorMaySetPublic(authorizer, ctx.callerIdentity);
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The UPDATE door: escalation to PUBLIC (the stored level is anything
|
|
72
|
+
* else) needs the operator grant. Reads the loaded target from the
|
|
73
|
+
* chain's own context key (every updateVisibility chain stores it —
|
|
74
|
+
* the RecordVisibilityBeforeUpdate pattern).
|
|
75
|
+
*/
|
|
76
|
+
export function newAuthorizeVisibilityTransitionStep(targetKey, authorizer) {
|
|
77
|
+
return {
|
|
78
|
+
name: "AuthorizeVisibilityTransition",
|
|
79
|
+
async execute(ctx) {
|
|
80
|
+
if (ctx.callerIdentity.callerClass === "internal") {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const requested = ctx.input
|
|
84
|
+
.visibility;
|
|
85
|
+
if (requested !== ApiResourceVisibility.visibility_public) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const target = ctx.get(targetKey);
|
|
89
|
+
if (target === undefined) {
|
|
90
|
+
// Wiring error, not a user error: without the loaded target there
|
|
91
|
+
// is no stored level, and a gate that silently passes un-guards
|
|
92
|
+
// the boundary it exists to protect.
|
|
93
|
+
throw internalError(new Error("AuthorizeVisibilityTransition ran without a loaded target — step must be placed after the load step"), "visibility authorization requires the loaded resource");
|
|
94
|
+
}
|
|
95
|
+
const stored = metadataOf(target)?.visibility;
|
|
96
|
+
if (stored === ApiResourceVisibility.visibility_public) {
|
|
97
|
+
return; // Re-asserting a stored PUBLIC is not an escalation.
|
|
98
|
+
}
|
|
99
|
+
await requireOperatorMaySetPublic(authorizer, ctx.callerIdentity);
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The single owner of "may this caller set public?" — both doors call it,
|
|
105
|
+
* and so does the plugin push chain, whose requested level rides the
|
|
106
|
+
* request (the level then flows to every member through the members' own
|
|
107
|
+
* create and updateVisibility doors, which run this check again).
|
|
108
|
+
*/
|
|
109
|
+
export async function requireOperatorMaySetPublic(authorizer, caller) {
|
|
110
|
+
let decision;
|
|
111
|
+
try {
|
|
112
|
+
decision = await authorizer.authorize(caller, {
|
|
113
|
+
permission: IamPermission.can_set_public_visibility,
|
|
114
|
+
resourceKind: ApiResourceKind.platform,
|
|
115
|
+
resourceId: "stigmer",
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
throw publicVisibilityCheckFailure(error);
|
|
120
|
+
}
|
|
121
|
+
switch (decision.kind) {
|
|
122
|
+
case "allow":
|
|
123
|
+
return;
|
|
124
|
+
case "deny":
|
|
125
|
+
case "not-found":
|
|
126
|
+
throw new ConnectError(PUBLIC_VISIBILITY_DENY_MESSAGE, Code.PermissionDenied);
|
|
127
|
+
case "unavailable":
|
|
128
|
+
throw publicVisibilityCheckFailure(decision.cause);
|
|
129
|
+
default: {
|
|
130
|
+
const exhaustive = decision;
|
|
131
|
+
throw publicVisibilityCheckFailure(new Error(`unknown decision ${JSON.stringify(exhaustive)}`));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** Authorization infrastructure failure: fail closed, sanitized (#478). */
|
|
136
|
+
function publicVisibilityCheckFailure(error) {
|
|
137
|
+
return internalError(error instanceof Error ? error : new Error(String(error)), "public-visibility authorization could not be completed");
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=visibility-gates.js.map
|