@stigmer/server 3.14.0 → 3.15.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/boot/compose.d.ts +8 -1
- package/dist/boot/compose.d.ts.map +1 -1
- package/dist/boot/compose.js +98 -12
- package/dist/boot/compose.js.map +1 -1
- package/dist/domain/agentexecution/constants.d.ts +16 -0
- package/dist/domain/agentexecution/constants.d.ts.map +1 -1
- package/dist/domain/agentexecution/constants.js +22 -0
- package/dist/domain/agentexecution/constants.js.map +1 -1
- package/dist/domain/agentexecution/controller.d.ts.map +1 -1
- package/dist/domain/agentexecution/controller.js +10 -3
- package/dist/domain/agentexecution/controller.js.map +1 -1
- package/dist/domain/agentexecution/run-target.d.ts +26 -0
- package/dist/domain/agentexecution/run-target.d.ts.map +1 -0
- package/dist/domain/agentexecution/run-target.js +31 -0
- package/dist/domain/agentexecution/run-target.js.map +1 -0
- package/dist/domain/apikey/verifier.d.ts +8 -1
- package/dist/domain/apikey/verifier.d.ts.map +1 -1
- package/dist/domain/apikey/verifier.js +14 -2
- package/dist/domain/apikey/verifier.js.map +1 -1
- package/dist/domain/identityaccount/constants.d.ts +66 -0
- package/dist/domain/identityaccount/constants.d.ts.map +1 -0
- package/dist/domain/identityaccount/constants.js +153 -0
- package/dist/domain/identityaccount/constants.js.map +1 -0
- package/dist/domain/identityaccount/controller.d.ts +34 -0
- package/dist/domain/identityaccount/controller.d.ts.map +1 -0
- package/dist/domain/identityaccount/controller.js +342 -0
- package/dist/domain/identityaccount/controller.js.map +1 -0
- package/dist/domain/identityaccount/operator.d.ts +14 -0
- package/dist/domain/identityaccount/operator.d.ts.map +1 -0
- package/dist/domain/identityaccount/operator.js +67 -0
- package/dist/domain/identityaccount/operator.js.map +1 -0
- package/dist/domain/identityaccount/provisioning.d.ts +52 -0
- package/dist/domain/identityaccount/provisioning.d.ts.map +1 -0
- package/dist/domain/identityaccount/provisioning.js +114 -0
- package/dist/domain/identityaccount/provisioning.js.map +1 -0
- package/dist/domain/identityaccount/resolve.d.ts +36 -0
- package/dist/domain/identityaccount/resolve.d.ts.map +1 -0
- package/dist/domain/identityaccount/resolve.js +12 -0
- package/dist/domain/identityaccount/resolve.js.map +1 -0
- package/dist/domain/identityaccount/resource-store.d.ts +4 -0
- package/dist/domain/identityaccount/resource-store.d.ts.map +1 -0
- package/dist/domain/identityaccount/resource-store.js +131 -0
- package/dist/domain/identityaccount/resource-store.js.map +1 -0
- package/dist/domain/identityaccount/steps.d.ts +79 -0
- package/dist/domain/identityaccount/steps.d.ts.map +1 -0
- package/dist/domain/identityaccount/steps.js +291 -0
- package/dist/domain/identityaccount/steps.js.map +1 -0
- package/dist/domain/identityaccount/store-contract.d.ts +22 -0
- package/dist/domain/identityaccount/store-contract.d.ts.map +1 -0
- package/dist/domain/identityaccount/store-contract.js +307 -0
- package/dist/domain/identityaccount/store-contract.js.map +1 -0
- package/dist/domain/identityaccount/store.d.ts +66 -0
- package/dist/domain/identityaccount/store.d.ts.map +1 -0
- package/dist/domain/identityaccount/store.js +13 -0
- package/dist/domain/identityaccount/store.js.map +1 -0
- package/dist/domain/session/constants.d.ts +15 -0
- package/dist/domain/session/constants.d.ts.map +1 -0
- package/dist/domain/session/constants.js +17 -0
- package/dist/domain/session/constants.js.map +1 -0
- package/dist/domain/session/controller.d.ts.map +1 -1
- package/dist/domain/session/controller.js +10 -0
- package/dist/domain/session/controller.js.map +1 -1
- package/dist/domain/session/run-target.d.ts +15 -0
- package/dist/domain/session/run-target.d.ts.map +1 -0
- package/dist/domain/session/run-target.js +14 -0
- package/dist/domain/session/run-target.js.map +1 -0
- package/dist/domain/workflowexecution/constants.d.ts +9 -0
- package/dist/domain/workflowexecution/constants.d.ts.map +1 -1
- package/dist/domain/workflowexecution/constants.js +13 -0
- package/dist/domain/workflowexecution/constants.js.map +1 -1
- package/dist/domain/workflowexecution/controller.d.ts.map +1 -1
- package/dist/domain/workflowexecution/controller.js +8 -0
- package/dist/domain/workflowexecution/controller.js.map +1 -1
- package/dist/domain/workflowexecution/run-target.d.ts +18 -0
- package/dist/domain/workflowexecution/run-target.d.ts.map +1 -0
- package/dist/domain/workflowexecution/run-target.js +23 -0
- package/dist/domain/workflowexecution/run-target.js.map +1 -0
- package/dist/extensions/drivers.d.ts +26 -0
- package/dist/extensions/drivers.d.ts.map +1 -1
- package/dist/extensions/gate-slots.d.ts +16 -1
- package/dist/extensions/gate-slots.d.ts.map +1 -1
- package/dist/extensions/gate-slots.js +1 -0
- package/dist/extensions/gate-slots.js.map +1 -1
- package/dist/extensions/identity-federation.d.ts +36 -0
- package/dist/extensions/identity-federation.d.ts.map +1 -0
- package/dist/extensions/identity-federation.js +2 -0
- package/dist/extensions/identity-federation.js.map +1 -0
- package/dist/extensions/registry.d.ts +18 -1
- package/dist/extensions/registry.d.ts.map +1 -1
- package/dist/extensions/registry.js +20 -0
- package/dist/extensions/registry.js.map +1 -1
- package/dist/identity/oidc-discovery.d.ts +36 -0
- package/dist/identity/oidc-discovery.d.ts.map +1 -0
- package/dist/identity/oidc-discovery.js +60 -0
- package/dist/identity/oidc-discovery.js.map +1 -0
- package/dist/identity/oidc-userinfo.d.ts +30 -0
- package/dist/identity/oidc-userinfo.d.ts.map +1 -0
- package/dist/identity/oidc-userinfo.js +28 -0
- package/dist/identity/oidc-userinfo.js.map +1 -0
- package/dist/identity/oidc-verifier.d.ts +6 -0
- package/dist/identity/oidc-verifier.d.ts.map +1 -1
- package/dist/identity/oidc-verifier.js +35 -34
- package/dist/identity/oidc-verifier.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/interceptors/auth.d.ts +10 -0
- package/dist/pipeline/interceptors/auth.d.ts.map +1 -1
- package/dist/pipeline/interceptors/auth.js +9 -1
- package/dist/pipeline/interceptors/auth.js.map +1 -1
- package/dist/pipeline/steps/authorize-run-target.d.ts +105 -0
- package/dist/pipeline/steps/authorize-run-target.d.ts.map +1 -0
- package/dist/pipeline/steps/authorize-run-target.js +61 -0
- package/dist/pipeline/steps/authorize-run-target.js.map +1 -0
- package/dist/query/search/criteria.d.ts +10 -3
- package/dist/query/search/criteria.d.ts.map +1 -1
- package/dist/query/search/criteria.js +11 -4
- package/dist/query/search/criteria.js.map +1 -1
- package/package.json +4 -4
- package/src/boot/__tests__/auth-enabled-composition.test.ts +226 -2
- package/src/boot/compose.ts +118 -13
- package/src/domain/agentexecution/__tests__/run-gate.test.ts +245 -0
- package/src/domain/agentexecution/__tests__/run-target.test.ts +117 -0
- package/src/domain/agentexecution/constants.ts +25 -0
- package/src/domain/agentexecution/controller.ts +10 -3
- package/src/domain/agentexecution/run-target.ts +64 -0
- package/src/domain/apikey/__tests__/verifier.test.ts +146 -22
- package/src/domain/apikey/verifier.ts +24 -2
- package/src/domain/identityaccount/__tests__/constants.test.ts +155 -0
- package/src/domain/identityaccount/__tests__/identityaccount.test.ts +484 -0
- package/src/domain/identityaccount/__tests__/operator.test.ts +180 -0
- package/src/domain/identityaccount/__tests__/provisioning.test.ts +281 -0
- package/src/domain/identityaccount/__tests__/resolve.test.ts +114 -0
- package/src/domain/identityaccount/__tests__/resource-store.test.ts +216 -0
- package/src/domain/identityaccount/__tests__/support.ts +58 -0
- package/src/domain/identityaccount/constants.ts +178 -0
- package/src/domain/identityaccount/controller.ts +667 -0
- package/src/domain/identityaccount/operator.ts +94 -0
- package/src/domain/identityaccount/provisioning.ts +182 -0
- package/src/domain/identityaccount/resolve.ts +52 -0
- package/src/domain/identityaccount/resource-store.ts +157 -0
- package/src/domain/identityaccount/steps.ts +377 -0
- package/src/domain/identityaccount/store-contract.ts +471 -0
- package/src/domain/identityaccount/store.ts +70 -0
- package/src/domain/session/__tests__/run-gate.test.ts +219 -0
- package/src/domain/session/__tests__/run-target.test.ts +43 -0
- package/src/domain/session/constants.ts +17 -0
- package/src/domain/session/controller.ts +10 -0
- package/src/domain/session/run-target.ts +30 -0
- package/src/domain/workflowexecution/__tests__/run-gate.test.ts +200 -0
- package/src/domain/workflowexecution/__tests__/run-target.test.ts +80 -0
- package/src/domain/workflowexecution/constants.ts +17 -0
- package/src/domain/workflowexecution/controller.ts +10 -0
- package/src/domain/workflowexecution/run-target.ts +47 -0
- package/src/extensions/__tests__/extension-composition.test.ts +49 -0
- package/src/extensions/__tests__/identity-account-composed.test.ts +803 -0
- package/src/extensions/__tests__/identity-account-points.test.ts +129 -0
- package/src/extensions/__tests__/registry.test.ts +4 -0
- package/src/extensions/__tests__/tier-truthfulness.test.ts +299 -0
- package/src/extensions/drivers.ts +26 -0
- package/src/extensions/gate-slots.ts +16 -0
- package/src/extensions/identity-federation.ts +58 -0
- package/src/extensions/registry.ts +44 -1
- package/src/identity/__tests__/oidc-discovery.test.ts +122 -0
- package/src/identity/__tests__/oidc-userinfo.test.ts +103 -0
- package/src/identity/__tests__/oidc-verifier.test.ts +173 -3
- package/src/identity/oidc-discovery.ts +84 -0
- package/src/identity/oidc-userinfo.ts +64 -0
- package/src/identity/oidc-verifier.ts +42 -45
- package/src/index.ts +26 -0
- package/src/pipeline/__tests__/support.ts +34 -0
- package/src/pipeline/interceptors/auth.ts +13 -1
- package/src/pipeline/steps/__tests__/authorize-annotation-completeness.test.ts +184 -0
- package/src/pipeline/steps/__tests__/authorize-run-target.test.ts +261 -0
- package/src/pipeline/steps/authorize-run-target.ts +148 -0
- package/src/query/search/__tests__/criteria.test.ts +18 -1
- package/src/query/search/criteria.ts +11 -4
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The OIDC userinfo client (20260911.11, T01_1_review.md A8) — the
|
|
3
|
+
* infrastructure behind the identity-account domain's UserInfoClient
|
|
4
|
+
* port (domain/identityaccount/provisioning.ts): the profile of the
|
|
5
|
+
* bearer of an access token, from the `userinfo_endpoint` the token's
|
|
6
|
+
* ISSUER publishes, fetched with that very token.
|
|
7
|
+
*
|
|
8
|
+
* The issuer is a per-call argument, not a construction-time binding,
|
|
9
|
+
* because the composition does not know which issuer will vouch for a
|
|
10
|
+
* caller: open source's own OIDC lane names one in STIGMER_OIDC_ISSUER,
|
|
11
|
+
* the cloud's verifiers name theirs on the CallerIdentity they mint. The
|
|
12
|
+
* one issuer whose userinfo can answer for a token is the one that issued
|
|
13
|
+
* it — and a verifier already trusted it, so the token goes only where it
|
|
14
|
+
* came from.
|
|
15
|
+
*
|
|
16
|
+
* The endpoint is the discovery document's word, never a guessed
|
|
17
|
+
* `<issuer>/userinfo`: a document that names no `userinfo_endpoint` is
|
|
18
|
+
* refused as a fetch failure (the domain maps it UNAVAILABLE with the
|
|
19
|
+
* cloud's copy), so a misconfigured issuer fails loudly at the first
|
|
20
|
+
* sign-in rather than silently against a wrong URL.
|
|
21
|
+
*
|
|
22
|
+
* Claims read as the cloud's client reads them: `email`, `given_name`,
|
|
23
|
+
* `family_name`, `picture`; a missing or non-string claim is the empty
|
|
24
|
+
* string. Any non-2xx or malformed answer throws; the domain's
|
|
25
|
+
* UserInfoFetchError wraps it.
|
|
26
|
+
*/
|
|
27
|
+
import type { UserInfoClient } from "../domain/identityaccount/provisioning.js";
|
|
28
|
+
import type { IssuerDiscovery } from "./oidc-discovery.js";
|
|
29
|
+
export declare function newOidcUserInfoClient(discovery: IssuerDiscovery, fetchImpl?: typeof fetch): UserInfoClient;
|
|
30
|
+
//# sourceMappingURL=oidc-userinfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-userinfo.d.ts","sourceRoot":"","sources":["../../src/identity/oidc-userinfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,eAAe,EAC1B,SAAS,GAAE,OAAO,KAAa,GAC9B,cAAc,CA4BhB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function newOidcUserInfoClient(discovery, fetchImpl = fetch) {
|
|
2
|
+
return {
|
|
3
|
+
async fetchUserProfile(issuer, accessToken) {
|
|
4
|
+
const { userinfoEndpoint } = await discovery.discover(issuer);
|
|
5
|
+
if (userinfoEndpoint === undefined) {
|
|
6
|
+
throw new Error(`issuer '${issuer}' publishes no userinfo_endpoint in its discovery document`);
|
|
7
|
+
}
|
|
8
|
+
const response = await fetchImpl(userinfoEndpoint, {
|
|
9
|
+
headers: { authorization: `Bearer ${accessToken}` },
|
|
10
|
+
});
|
|
11
|
+
if (!response.ok) {
|
|
12
|
+
throw new Error(`userinfo answered ${response.status}`);
|
|
13
|
+
}
|
|
14
|
+
const claims = (await response.json());
|
|
15
|
+
const text = (key) => {
|
|
16
|
+
const value = claims[key];
|
|
17
|
+
return typeof value === "string" ? value : "";
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
email: text("email"),
|
|
21
|
+
firstName: text("given_name"),
|
|
22
|
+
lastName: text("family_name"),
|
|
23
|
+
pictureUrl: text("picture"),
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=oidc-userinfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-userinfo.js","sourceRoot":"","sources":["../../src/identity/oidc-userinfo.ts"],"names":[],"mappings":"AAgCA,MAAM,UAAU,qBAAqB,CACnC,SAA0B,EAC1B,YAA0B,KAAK;IAE/B,OAAO;QACL,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW;YACxC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,WAAW,MAAM,4DAA4D,CAC9E,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,gBAAgB,EAAE;gBACjD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;aACpD,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;YAClE,MAAM,IAAI,GAAG,CAAC,GAAW,EAAU,EAAE;gBACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,CAAC,CAAC;YACF,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;gBACpB,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;gBAC7B,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;gBAC7B,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;aAC5B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { AccountsBySubject } from "../domain/identityaccount/resolve.js";
|
|
1
2
|
import type { IdentityVerifier } from "../extensions/identity.js";
|
|
3
|
+
import type { IssuerDiscovery } from "./oidc-discovery.js";
|
|
2
4
|
/** Java classifyAuthError arms — byte-pinned cross-edition copy. */
|
|
3
5
|
export declare const TOKEN_EXPIRED_MESSAGE = "token has expired";
|
|
4
6
|
export declare const TOKEN_AUDIENCE_MESSAGE = "token audience does not match the expected audience";
|
|
@@ -9,6 +11,10 @@ export interface OidcVerifierConfig {
|
|
|
9
11
|
readonly issuer: string;
|
|
10
12
|
/** The audience access tokens must carry. */
|
|
11
13
|
readonly audience: string;
|
|
14
|
+
/** The identity-account domain's subject lookup — REQUIRED: what identityId means depends on it. */
|
|
15
|
+
readonly accounts: AccountsBySubject;
|
|
16
|
+
/** The composition root's one discovery for every lane (A8). */
|
|
17
|
+
readonly discovery: IssuerDiscovery;
|
|
12
18
|
}
|
|
13
19
|
export declare function newOidcIdentityVerifier(config: OidcVerifierConfig): IdentityVerifier;
|
|
14
20
|
//# sourceMappingURL=oidc-verifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc-verifier.d.ts","sourceRoot":"","sources":["../../src/identity/oidc-verifier.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oidc-verifier.d.ts","sourceRoot":"","sources":["../../src/identity/oidc-verifier.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,sBAAsB,wDACoB,CAAC;AACxD,eAAO,MAAM,uBAAuB,wCAAwC,CAAC;AAC7E,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,gEAAgE;IAChE,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC;AAID,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,kBAAkB,GACzB,gBAAgB,CA+ClB"}
|
|
@@ -18,46 +18,51 @@
|
|
|
18
18
|
* - everything else → "invalid token"
|
|
19
19
|
*
|
|
20
20
|
* Discovery and key handling: the issuer's /.well-known/openid-configuration
|
|
21
|
-
* is
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* is read through the shared oidc-discovery module the composition root
|
|
22
|
+
* builds once for every lane (20260911.11 A8 — the userinfo client reads
|
|
23
|
+
* the same document, so one issuer is discovered once and validated the
|
|
24
|
+
* same way wherever it is consumed: `issuer` must match exactly, RFC 8414
|
|
25
|
+
* §3.3; `jwks_uri` required). The module memoizes on success only, so a
|
|
26
|
+
* flaky IdP at boot never permanently bricks the lane. The JWKS client
|
|
27
|
+
* (jose's createRemoteJWKSet — cached, rotation-aware) is built ONCE per
|
|
28
|
+
* verifier from the discovered location and kept: discovery hands back a
|
|
29
|
+
* URI, and a client rebuilt per request would refetch the keys per
|
|
30
|
+
* request. Discovery/JWKS OUTAGES are infrastructure faults — thrown as
|
|
26
31
|
* plain errors so the chassis maps them to INTERNAL, never a credential
|
|
27
32
|
* rejection (the DD-007 unavailable doctrine).
|
|
28
33
|
*
|
|
29
|
-
* Identity
|
|
30
|
-
* the
|
|
31
|
-
*
|
|
32
|
-
*
|
|
34
|
+
* Identity (20260911.11 Q-IA-2, A1 — the cloud's direct-login posture):
|
|
35
|
+
* after the token verifies, `sub` (rejected as invalid when absent) is
|
|
36
|
+
* resolved through the identity-account domain (identityIdForSubject):
|
|
37
|
+
* a subject with a direct account stamps the ACCOUNT id; a subject
|
|
38
|
+
* without one is admitted idp-shaped (identityId = sub) so whoAmI can
|
|
39
|
+
* answer NOT_FOUND and provisionMyAccount can run. One primary-key read
|
|
40
|
+
* per request, no cache; a store fault is an infrastructure fault. The
|
|
41
|
+
* issuer is the configured issuer; email/displayName come from the
|
|
42
|
+
* standard `email`/`name` claims when present (the DD-007 Q5 addendum
|
|
43
|
+
* added the fields for exactly these claims), whichever way the subject
|
|
44
|
+
* resolved. Claim-or-pass runs before any of this: a non-JWT token
|
|
45
|
+
* passes with no network.
|
|
33
46
|
*/
|
|
34
47
|
import { createRemoteJWKSet, jwtVerify, errors as joseErrors } from "jose";
|
|
35
48
|
import { Code, ConnectError } from "@connectrpc/connect";
|
|
49
|
+
import { identityIdForSubject } from "../domain/identityaccount/resolve.js";
|
|
36
50
|
/** Java classifyAuthError arms — byte-pinned cross-edition copy. */
|
|
37
51
|
export const TOKEN_EXPIRED_MESSAGE = "token has expired";
|
|
38
52
|
export const TOKEN_AUDIENCE_MESSAGE = "token audience does not match the expected audience";
|
|
39
53
|
export const TOKEN_SIGNATURE_MESSAGE = "token signature verification failed";
|
|
40
54
|
export const INVALID_TOKEN_MESSAGE = "invalid token";
|
|
41
55
|
export function newOidcIdentityVerifier(config) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
56
|
+
// Set on the first successful discovery only: a failed discovery leaves
|
|
57
|
+
// it unset so the next request retries (the module caches no failure).
|
|
58
|
+
let jwks;
|
|
59
|
+
async function jwksFor() {
|
|
60
|
+
if (jwks !== undefined) {
|
|
61
|
+
return jwks;
|
|
46
62
|
}
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
throw new Error(`OIDC discovery failed: ${url} answered HTTP ${response.status}`);
|
|
51
|
-
}
|
|
52
|
-
const document = (await response.json());
|
|
53
|
-
if (document.issuer !== config.issuer) {
|
|
54
|
-
throw new Error(`OIDC discovery failed: document issuer '${document.issuer ?? ""}' does not match configured issuer '${config.issuer}'`);
|
|
55
|
-
}
|
|
56
|
-
if (typeof document.jwks_uri !== "string" || document.jwks_uri === "") {
|
|
57
|
-
throw new Error(`OIDC discovery failed: ${url} carries no jwks_uri`);
|
|
58
|
-
}
|
|
59
|
-
discovered = { jwks: createRemoteJWKSet(new URL(document.jwks_uri)) };
|
|
60
|
-
return discovered;
|
|
63
|
+
const { jwksUri } = await config.discovery.discover(config.issuer);
|
|
64
|
+
jwks = createRemoteJWKSet(new URL(jwksUri));
|
|
65
|
+
return jwks;
|
|
61
66
|
}
|
|
62
67
|
return {
|
|
63
68
|
name: "oidc",
|
|
@@ -65,10 +70,10 @@ export function newOidcIdentityVerifier(config) {
|
|
|
65
70
|
if (!isJwtShaped(token)) {
|
|
66
71
|
return null;
|
|
67
72
|
}
|
|
68
|
-
const
|
|
73
|
+
const keys = await jwksFor();
|
|
69
74
|
let payload;
|
|
70
75
|
try {
|
|
71
|
-
({ payload } = await jwtVerify(token,
|
|
76
|
+
({ payload } = await jwtVerify(token, keys, {
|
|
72
77
|
issuer: config.issuer,
|
|
73
78
|
audience: config.audience,
|
|
74
79
|
}));
|
|
@@ -80,7 +85,7 @@ export function newOidcIdentityVerifier(config) {
|
|
|
80
85
|
throw new ConnectError(INVALID_TOKEN_MESSAGE, Code.Unauthenticated);
|
|
81
86
|
}
|
|
82
87
|
return {
|
|
83
|
-
identityId: payload.sub,
|
|
88
|
+
identityId: await identityIdForSubject(config.accounts, payload.sub),
|
|
84
89
|
callerClass: "user",
|
|
85
90
|
issuer: config.issuer,
|
|
86
91
|
rawToken: token,
|
|
@@ -94,10 +99,6 @@ export function newOidcIdentityVerifier(config) {
|
|
|
94
99
|
},
|
|
95
100
|
};
|
|
96
101
|
}
|
|
97
|
-
/** issuer + /.well-known/openid-configuration (trailing-slash tolerant). */
|
|
98
|
-
function discoveryUrl(issuer) {
|
|
99
|
-
return `${issuer.replace(/\/$/, "")}/.well-known/openid-configuration`;
|
|
100
|
-
}
|
|
101
102
|
/** Three non-empty dot-separated segments — the JWS compact shape. */
|
|
102
103
|
function isJwtShaped(token) {
|
|
103
104
|
const segments = token.split(".");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc-verifier.js","sourceRoot":"","sources":["../../src/identity/oidc-verifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oidc-verifier.js","sourceRoot":"","sources":["../../src/identity/oidc-verifier.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -56,6 +56,13 @@ export type { ResolvedExtensionDrivers } from "./extensions/registry.js";
|
|
|
56
56
|
export type { DefaultInstanceLinkedEvent, ResourceAuthorizationLifecycle, ResourceCreatedEvent, ResourceDeletedEvent, VisibilityChangedEvent, VisibilityTupleShape, ResolvedParentLink, } from "./extensions/resource-authorization.js";
|
|
57
57
|
export type { OrganizationDirectory } from "./extensions/organization-directory.js";
|
|
58
58
|
export { ALL_ORGANIZATIONS } from "./extensions/organization-directory.js";
|
|
59
|
+
export type { IdentityAccountStore } from "./domain/identityaccount/store.js";
|
|
60
|
+
export { DuplicateAccountError } from "./domain/identityaccount/store.js";
|
|
61
|
+
export type { IdentityAccountStoreContractCase, IdentityAccountStoreContractFixture, } from "./domain/identityaccount/store-contract.js";
|
|
62
|
+
export { identityAccountStoreContract } from "./domain/identityaccount/store-contract.js";
|
|
63
|
+
export type { IdentityFederation } from "./extensions/identity-federation.js";
|
|
64
|
+
export type { AccountsBySubject } from "./domain/identityaccount/resolve.js";
|
|
65
|
+
export { identityIdForSubject } from "./domain/identityaccount/resolve.js";
|
|
59
66
|
export type { ListReadScope, ListEntryMeta, } from "./extensions/list-read-scope.js";
|
|
60
67
|
export type { ScheduleFireCallerMint } from "./extensions/schedule-fire-caller.js";
|
|
61
68
|
export type { VisitorErrorPolicy } from "./pipeline/interceptors/error-boundary.js";
|
|
@@ -71,6 +78,7 @@ export { createVerifierChainInterceptor } from "./pipeline/interceptors/auth.js"
|
|
|
71
78
|
export { authenticateBearerToken, parseBearerToken, } from "./pipeline/interceptors/auth.js";
|
|
72
79
|
export { newPipeline } from "./pipeline/pipeline.js";
|
|
73
80
|
export { newAuthorizeStep } from "./pipeline/steps/authorize.js";
|
|
81
|
+
export { isRunGateCheck } from "./pipeline/steps/authorize-run-target.js";
|
|
74
82
|
export { newValidateProtoStep } from "./pipeline/steps/validation.js";
|
|
75
83
|
export type { Store } from "./store/interface.js";
|
|
76
84
|
export { AuditNotFoundError, ResourceNotFoundError, } from "./store/interface.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EACV,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAa,EACb,QAAQ,EACR,OAAO,GACR,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,4BAA4B,EAC5B,kBAAkB,EAClB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AASlC,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAOjE,YAAY,EACV,UAAU,EACV,UAAU,EACV,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,YAAY,EACV,+BAA+B,EAC/B,yBAAyB,EACzB,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAIzE,YAAY,EACV,0BAA0B,EAC1B,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,YAAY,EACV,aAAa,EACb,aAAa,GACd,MAAM,iCAAiC,CAAC;AAIzC,YAAY,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AASnF,YAAY,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAGlD,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKxD,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AAgBzC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AAOjF,OAAO,EACL,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -44,6 +44,9 @@ export { composeServer } from "./boot/compose.js";
|
|
|
44
44
|
export { loadConfig } from "./boot/config.js";
|
|
45
45
|
export { createLogger } from "./boot/logger.js";
|
|
46
46
|
export { ALL_ORGANIZATIONS } from "./extensions/organization-directory.js";
|
|
47
|
+
export { DuplicateAccountError } from "./domain/identityaccount/store.js";
|
|
48
|
+
export { identityAccountStoreContract } from "./domain/identityaccount/store-contract.js";
|
|
49
|
+
export { identityIdForSubject } from "./domain/identityaccount/resolve.js";
|
|
47
50
|
export { createErrorBoundaryInterceptor } from "./pipeline/interceptors/error-boundary.js";
|
|
48
51
|
export { diffVisibilityShapes, visibilityShapesFor, } from "./pipeline/steps/authorization-tuples.js";
|
|
49
52
|
export { RequestContext } from "./pipeline/request-context.js";
|
|
@@ -88,6 +91,13 @@ export { createVerifierChainInterceptor } from "./pipeline/interceptors/auth.js"
|
|
|
88
91
|
export { authenticateBearerToken, parseBearerToken, } from "./pipeline/interceptors/auth.js";
|
|
89
92
|
export { newPipeline } from "./pipeline/pipeline.js";
|
|
90
93
|
export { newAuthorizeStep } from "./pipeline/steps/authorize.js";
|
|
94
|
+
// The run gate's check set (P1 sp.run-gate): an edition's Authorizer keys
|
|
95
|
+
// its lane admission on this predicate — the runtime lanes it mints (a
|
|
96
|
+
// guest share, a channel, a schedule fire, a workflow sandbox) were
|
|
97
|
+
// admitted upstream by their own gate steps and are not re-asked here.
|
|
98
|
+
// OSS defines the gate, so OSS defines which checks are the gate; a
|
|
99
|
+
// composition never re-derives the set.
|
|
100
|
+
export { isRunGateCheck } from "./pipeline/steps/authorize-run-target.js";
|
|
91
101
|
export { newValidateProtoStep } from "./pipeline/steps/validation.js";
|
|
92
102
|
export { AuditNotFoundError, ResourceNotFoundError, } from "./store/interface.js";
|
|
93
103
|
// The Postgres driver constructor (stigmer-cloud 20260910.04 ruling 4;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,16 @@ export declare function callerIdentityOf(ctx: HandlerContext): CallerIdentity;
|
|
|
51
51
|
* operator seam remains process-global.
|
|
52
52
|
*/
|
|
53
53
|
export declare function trustedLocalIdentity(): CallerIdentity;
|
|
54
|
+
/**
|
|
55
|
+
* The trusted-local identity for a given operator — the one construction
|
|
56
|
+
* of that principal, shared by the per-request stamp above and by the
|
|
57
|
+
* boot-time operator account (domain/identityaccount/operator.ts), so the
|
|
58
|
+
* row the server ensures and the caller it stamps can never disagree.
|
|
59
|
+
*/
|
|
60
|
+
export declare function trustedLocalIdentityFor(operator: {
|
|
61
|
+
readonly email: string;
|
|
62
|
+
readonly displayName: string;
|
|
63
|
+
}): CallerIdentity;
|
|
54
64
|
/**
|
|
55
65
|
* The serving chain's position-1 identity source: walks the composed
|
|
56
66
|
* verifiers in order (OSS entries first, extension entries after, in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/pipeline/interceptors/auth.ts"],"names":[],"mappings":"AAiFA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EAGZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAItC;;;GAGG;AACH,eAAO,MAAM,oCAAoC,iCACjB,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAE7D,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAKlE;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,sEAG7B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CASpE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/pipeline/interceptors/auth.ts"],"names":[],"mappings":"AAiFA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EAGZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAItC;;;GAGG;AACH,eAAO,MAAM,oCAAoC,iCACjB,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAE7D,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAKlE;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,sEAG7B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CASpE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,GAAG,cAAc,CAiBjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,EAC1C,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,EAClC,MAAM,EAAE,MAAM,EACd,qBAAqB,UAAQ,GAC5B,WAAW,CAwCb;AAyCD;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,+BAA+B,CAAC;AAErE,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEpE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gCAAgC,IAAI,WAAW,CA6B9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,EAC1C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAoBrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAUlE"}
|
|
@@ -142,7 +142,15 @@ export function callerIdentityOf(ctx) {
|
|
|
142
142
|
* operator seam remains process-global.
|
|
143
143
|
*/
|
|
144
144
|
export function trustedLocalIdentity() {
|
|
145
|
-
|
|
145
|
+
return trustedLocalIdentityFor(operatorIdentitySnapshot());
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The trusted-local identity for a given operator — the one construction
|
|
149
|
+
* of that principal, shared by the per-request stamp above and by the
|
|
150
|
+
* boot-time operator account (domain/identityaccount/operator.ts), so the
|
|
151
|
+
* row the server ensures and the caller it stamps can never disagree.
|
|
152
|
+
*/
|
|
153
|
+
export function trustedLocalIdentityFor(operator) {
|
|
146
154
|
if (operator.email === "") {
|
|
147
155
|
return {
|
|
148
156
|
identityId: "system",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/pipeline/interceptors/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO3E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,SAAS,EAAE,MAAM,0DAA0D,CAAC;AAQrF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;GAGG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAC/C,8BAA8B,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAwB,IAAI,GAAG,CAAC;IACzE,uBAAuB;CACxB,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAkB;IACvD,OAAO,CACL,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;QAC5B,8BAA8B,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAC/C,SAAS,EACT,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAChE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,aAAa,CACjB,IAAI,KAAK,CAAC,kDAAkD,CAAC,EAC7D,uBAAuB,CACxB,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/pipeline/interceptors/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuthorizeRunTarget — the run gate (P1 sp.run-gate, 2026-09-11;
|
|
3
|
+
* stigmer-cloud#709): may this caller RUN what this record targets?
|
|
4
|
+
*
|
|
5
|
+
* Every create that starts or continues a run names a target — a blueprint
|
|
6
|
+
* (`agent`, `workflow`), an instance (`agent_instance`, `workflow_instance`)
|
|
7
|
+
* or a conversation (`session`) — and until this step nothing asked whether
|
|
8
|
+
* the caller may use it: session-create authorized only the organization's
|
|
9
|
+
* `can_create_session`, agent- and workflow-execution create are
|
|
10
|
+
* `is_skip_authorization`, and `can_execute` was defined on every blueprint
|
|
11
|
+
* and instance type of the FGA model and checked nowhere. The invariant the
|
|
12
|
+
* model states ("you can run what you can read") is enforced here.
|
|
13
|
+
*
|
|
14
|
+
* One shared step, one domain resolver: the shape of IndexSearch (a shared
|
|
15
|
+
* step over a domain extractor). The resolver is a PURE function of the
|
|
16
|
+
* record being built (`ctx.newState`, where the chain's own resolution
|
|
17
|
+
* steps write) that names the target and the domain's byte-pinned deny
|
|
18
|
+
* copy; this step hands it to authorizeResolvedResource — the ratified
|
|
19
|
+
* mid-chain resolved-id form (DD-007; the ListVersions and listByChannel
|
|
20
|
+
* precedent) for lanes the position-1 annotation cannot express. A
|
|
21
|
+
* resolver that answers no target makes NO check: the chain's own
|
|
22
|
+
* invariant guards (EnsureSessionOrAgentResolved,
|
|
23
|
+
* ValidateWorkflowOrInstance) own the shape-less arm, and this step never
|
|
24
|
+
* second-guesses them.
|
|
25
|
+
*
|
|
26
|
+
* Position, in every chain: immediately after the step that guarantees the
|
|
27
|
+
* target reference exists — before EnsureEngineAvailable (a denied caller
|
|
28
|
+
* learns nothing about engine state), before every gate slot, before every
|
|
29
|
+
* side effect the chain owns. The chains' own convention, Authorize before
|
|
30
|
+
* Validate, is what places it there.
|
|
31
|
+
*
|
|
32
|
+
* Admission has one owner per lane. This step asks for EVERY caller but the
|
|
33
|
+
* `internal` class (authorizeResolvedResource's contract): a direct
|
|
34
|
+
* principal is admitted by the Authorizer; a runtime lane (a guest share, a
|
|
35
|
+
* channel, a schedule fire, a workflow sandbox's child run) is admitted by
|
|
36
|
+
* the gate step that vouches for it, and the edition's Authorizer says so
|
|
37
|
+
* for the lanes it mints — the OSS chain stays policy-free. RUN_GATE_CHECKS
|
|
38
|
+
* is the one definition of "the run-gate checks" that such an Authorizer
|
|
39
|
+
* keys on (isRunGateCheck, exported on the barrel); the resolvers draw their
|
|
40
|
+
* (kind, permission) pairs from the same table, so the predicate cannot
|
|
41
|
+
* drift from what the step actually asks.
|
|
42
|
+
*/
|
|
43
|
+
import type { DescMessage, MessageShape } from "@bufbuild/protobuf";
|
|
44
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
45
|
+
import { IamPermission } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
46
|
+
import type { Authorizer, AuthzCheck } from "../../extensions/authorizer.js";
|
|
47
|
+
import type { PipelineStep } from "../pipeline.js";
|
|
48
|
+
/** One (kind, permission) pair the run gate asks about. */
|
|
49
|
+
export interface RunGateCheck {
|
|
50
|
+
readonly permission: IamPermission;
|
|
51
|
+
readonly resourceKind: ApiResourceKind;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The run-gate check set — exactly the pairs a resolver can produce. Each
|
|
55
|
+
* is the FGA model's own relation for "may run this": `can_execute` on the
|
|
56
|
+
* blueprints and instances (`agent.fga` `can_execute: viewer`;
|
|
57
|
+
* `agent_instance.fga` `can_execute: can_view`; the workflow twins), and
|
|
58
|
+
* `can_create_execution_in` on a session (`session.fga`: adding a turn to a
|
|
59
|
+
* conversation is the session's own permission, not the agent's).
|
|
60
|
+
*/
|
|
61
|
+
export declare const RUN_GATE_CHECKS: {
|
|
62
|
+
readonly agent: {
|
|
63
|
+
readonly permission: IamPermission.can_execute;
|
|
64
|
+
readonly resourceKind: ApiResourceKind.agent;
|
|
65
|
+
};
|
|
66
|
+
readonly agentInstance: {
|
|
67
|
+
readonly permission: IamPermission.can_execute;
|
|
68
|
+
readonly resourceKind: ApiResourceKind.agent_instance;
|
|
69
|
+
};
|
|
70
|
+
readonly session: {
|
|
71
|
+
readonly permission: IamPermission.can_create_execution_in;
|
|
72
|
+
readonly resourceKind: ApiResourceKind.session;
|
|
73
|
+
};
|
|
74
|
+
readonly workflow: {
|
|
75
|
+
readonly permission: IamPermission.can_execute;
|
|
76
|
+
readonly resourceKind: ApiResourceKind.workflow;
|
|
77
|
+
};
|
|
78
|
+
readonly workflowInstance: {
|
|
79
|
+
readonly permission: IamPermission.can_execute;
|
|
80
|
+
readonly resourceKind: ApiResourceKind.workflow_instance;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Whether `check` is one of the run gate's — the predicate an edition's
|
|
85
|
+
* Authorizer keys its lane admission on. Reads only the pair (an AuthzCheck
|
|
86
|
+
* is one); the resource id is the target's identity, not part of the
|
|
87
|
+
* question.
|
|
88
|
+
*/
|
|
89
|
+
export declare function isRunGateCheck(check: RunGateCheck | AuthzCheck): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* A resolved run target: the check plus the domain's byte-pinned deny copy
|
|
92
|
+
* for it (the lane's error_msg, in the position-1 annotation's terms).
|
|
93
|
+
*/
|
|
94
|
+
export interface RunTarget extends RunGateCheck {
|
|
95
|
+
readonly resourceId: string;
|
|
96
|
+
readonly deniedMessage: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Names a record's run target, or `undefined` when the record names none
|
|
100
|
+
* (a state the chain's own guards refuse; never this step's arm). Pure over
|
|
101
|
+
* the record being built — no store, no clock, no caller.
|
|
102
|
+
*/
|
|
103
|
+
export type RunTargetResolver<Desc extends DescMessage> = (record: MessageShape<Desc>) => RunTarget | undefined;
|
|
104
|
+
export declare function newAuthorizeRunTargetStep<Desc extends DescMessage>(authorizer: Authorizer, resolveRunTarget: RunTargetResolver<Desc>): PipelineStep<Desc>;
|
|
105
|
+
//# sourceMappingURL=authorize-run-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorize-run-target.d.ts","sourceRoot":"","sources":["../../../src/pipeline/steps/authorize-run-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AACtH,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAqBqB,CAAC;AAKlD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAMxE;AAED;;;GAGG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,IAAI,SAAS,WAAW,IAAI,CACxD,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,KACvB,SAAS,GAAG,SAAS,CAAC;AAE3B,wBAAgB,yBAAyB,CAAC,IAAI,SAAS,WAAW,EAChE,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,iBAAiB,CAAC,IAAI,CAAC,GACxC,YAAY,CAAC,IAAI,CAAC,CAoBpB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
2
|
+
import { IamPermission } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
3
|
+
import { authorizeResolvedResource } from "./authorize.js";
|
|
4
|
+
/**
|
|
5
|
+
* The run-gate check set — exactly the pairs a resolver can produce. Each
|
|
6
|
+
* is the FGA model's own relation for "may run this": `can_execute` on the
|
|
7
|
+
* blueprints and instances (`agent.fga` `can_execute: viewer`;
|
|
8
|
+
* `agent_instance.fga` `can_execute: can_view`; the workflow twins), and
|
|
9
|
+
* `can_create_execution_in` on a session (`session.fga`: adding a turn to a
|
|
10
|
+
* conversation is the session's own permission, not the agent's).
|
|
11
|
+
*/
|
|
12
|
+
export const RUN_GATE_CHECKS = {
|
|
13
|
+
agent: {
|
|
14
|
+
permission: IamPermission.can_execute,
|
|
15
|
+
resourceKind: ApiResourceKind.agent,
|
|
16
|
+
},
|
|
17
|
+
agentInstance: {
|
|
18
|
+
permission: IamPermission.can_execute,
|
|
19
|
+
resourceKind: ApiResourceKind.agent_instance,
|
|
20
|
+
},
|
|
21
|
+
session: {
|
|
22
|
+
permission: IamPermission.can_create_execution_in,
|
|
23
|
+
resourceKind: ApiResourceKind.session,
|
|
24
|
+
},
|
|
25
|
+
workflow: {
|
|
26
|
+
permission: IamPermission.can_execute,
|
|
27
|
+
resourceKind: ApiResourceKind.workflow,
|
|
28
|
+
},
|
|
29
|
+
workflowInstance: {
|
|
30
|
+
permission: IamPermission.can_execute,
|
|
31
|
+
resourceKind: ApiResourceKind.workflow_instance,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const RUN_GATE_CHECK_LIST = Object.values(RUN_GATE_CHECKS);
|
|
35
|
+
/**
|
|
36
|
+
* Whether `check` is one of the run gate's — the predicate an edition's
|
|
37
|
+
* Authorizer keys its lane admission on. Reads only the pair (an AuthzCheck
|
|
38
|
+
* is one); the resource id is the target's identity, not part of the
|
|
39
|
+
* question.
|
|
40
|
+
*/
|
|
41
|
+
export function isRunGateCheck(check) {
|
|
42
|
+
return RUN_GATE_CHECK_LIST.some((candidate) => candidate.permission === check.permission &&
|
|
43
|
+
candidate.resourceKind === check.resourceKind);
|
|
44
|
+
}
|
|
45
|
+
export function newAuthorizeRunTargetStep(authorizer, resolveRunTarget) {
|
|
46
|
+
return {
|
|
47
|
+
name: "AuthorizeRunTarget",
|
|
48
|
+
async execute(ctx) {
|
|
49
|
+
const target = resolveRunTarget(ctx.newState);
|
|
50
|
+
if (target === undefined) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
await authorizeResolvedResource(authorizer, ctx.callerIdentity, {
|
|
54
|
+
permission: target.permission,
|
|
55
|
+
resourceKind: target.resourceKind,
|
|
56
|
+
resourceId: target.resourceId,
|
|
57
|
+
}, target.deniedMessage);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=authorize-run-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorize-run-target.js","sourceRoot":"","sources":["../../../src/pipeline/steps/authorize-run-target.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AACtH,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAK1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAQ3D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE;QACL,UAAU,EAAE,aAAa,CAAC,WAAW;QACrC,YAAY,EAAE,eAAe,CAAC,KAAK;KACpC;IACD,aAAa,EAAE;QACb,UAAU,EAAE,aAAa,CAAC,WAAW;QACrC,YAAY,EAAE,eAAe,CAAC,cAAc;KAC7C;IACD,OAAO,EAAE;QACP,UAAU,EAAE,aAAa,CAAC,uBAAuB;QACjD,YAAY,EAAE,eAAe,CAAC,OAAO;KACtC;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,aAAa,CAAC,WAAW;QACrC,YAAY,EAAE,eAAe,CAAC,QAAQ;KACvC;IACD,gBAAgB,EAAE;QAChB,UAAU,EAAE,aAAa,CAAC,WAAW;QACrC,YAAY,EAAE,eAAe,CAAC,iBAAiB;KAChD;CAC8C,CAAC;AAElD,MAAM,mBAAmB,GACvB,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,OAAO,mBAAmB,CAAC,IAAI,CAC7B,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;QACzC,SAAS,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAChD,CAAC;AACJ,CAAC;AAoBD,MAAM,UAAU,yBAAyB,CACvC,UAAsB,EACtB,gBAAyC;IAEzC,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,KAAK,CAAC,OAAO,CAAC,GAAyB;YACrC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YACD,MAAM,yBAAyB,CAC7B,UAAU,EACV,GAAG,CAAC,cAAc,EAClB;gBACE,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,EACD,MAAM,CAAC,aAAa,CACrB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* discover).
|
|
6
6
|
*
|
|
7
7
|
* The searchable-kind set is DERIVED from the proto kind_meta extension
|
|
8
|
-
* (not_search_indexed: false, tier
|
|
8
|
+
* (not_search_indexed: false, tier == open_source) — Go's
|
|
9
9
|
* SearchIndexedKinds() posture since stigmer/stigmer#439, where hand-copied
|
|
10
10
|
* kind lists drifted from the proto and from each other. Go still carries a
|
|
11
11
|
* hand map (SearchableKinds) pinned to the derivation by an invariant test;
|
|
@@ -13,6 +13,13 @@
|
|
|
13
13
|
* registry unit test pins the registered extractors against this same
|
|
14
14
|
* derivation (the #439 invariant's TS home).
|
|
15
15
|
*
|
|
16
|
+
* The tier clause admits open_source alone, not "anything but cloud_only":
|
|
17
|
+
* the index is the core's, and a kind tiered enterprise (editions program,
|
|
18
|
+
* DD-001) must not enter it by accident. This derivation is edition-blind
|
|
19
|
+
* by design (the same code runs in every composition); an edition-aware
|
|
20
|
+
* derivation is a design act with a named trigger — the first searchable
|
|
21
|
+
* kind above open_source.
|
|
22
|
+
*
|
|
16
23
|
* kinds are kept VERBATIM from the request; filtering to the searchable set
|
|
17
24
|
* happens in effectiveKinds(). Keeping the raw request is what
|
|
18
25
|
* distinguishes "no kinds requested" (discover mode) from "kinds requested
|
|
@@ -33,8 +40,8 @@ export declare const MAX_PAGE_SIZE = 100;
|
|
|
33
40
|
export declare const MAX_QUERY_LENGTH = 500;
|
|
34
41
|
/**
|
|
35
42
|
* Go SearchIndexedKinds(): every kind this edition's search read side
|
|
36
|
-
* serves — kind_meta declares it search-indexed and
|
|
37
|
-
*
|
|
43
|
+
* serves — kind_meta declares it search-indexed and open_source-tier.
|
|
44
|
+
* Sorted ascending by enum value, exactly Go's sort. Kinds whose
|
|
38
45
|
* kind_meta cannot be read are skipped (Go's contract; the registry unit
|
|
39
46
|
* test separately fails on such a defect).
|
|
40
47
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../../src/query/search/criteria.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../../src/query/search/criteria.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EACL,eAAe,EAGhB,MAAM,qFAAqF,CAAC;AAK7F,0BAA0B;AAC1B,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,sBAAsB;AACtB,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAKpC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,eAAe,EAAE,CAuB/D;AAUD;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAPhC,OAAO;IAUP;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,MAAM,CACX,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,cAAc;IAkBjB,oEAAoE;IACpE,KAAK,IAAI,SAAS,eAAe,EAAE;IAInC,KAAK,IAAI,MAAM;IAIf,SAAS,IAAI,MAAM;IAInB,aAAa,IAAI,OAAO;IAIxB,cAAc,IAAI,OAAO;IAIzB,UAAU,IAAI,MAAM;IAIpB,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAIzB,iEAAiE;IACjE,QAAQ,IAAI,OAAO;IAInB,YAAY,IAAI,OAAO;IAIvB;;;;;;OAMG;IACH,cAAc,IAAI,SAAS,eAAe,EAAE;IAQ5C,wDAAwD;IACxD,MAAM,IAAI,MAAM;CAGjB"}
|