@openhi/types 0.0.49 → 0.0.50
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/lib/auth/jwt-claims.d.ts +32 -0
- package/lib/auth/jwt-claims.js +1 -1
- package/package.json +1 -1
package/lib/auth/jwt-claims.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { PlatformRoleCode } from "../control/constants";
|
|
2
|
+
import type { OrganizationRoleCode } from "../data/organization-role";
|
|
1
3
|
/**
|
|
2
4
|
* Canonical projection of the runtime JWT claim contract defined in ADR-014.
|
|
3
5
|
*
|
|
@@ -6,6 +8,12 @@
|
|
|
6
8
|
* token without them; `ohi_uid` and `ohi_uname` are set at user
|
|
7
9
|
* provisioning and are present in every issued token thereafter.
|
|
8
10
|
*
|
|
11
|
+
* The role claims (`ohi_organization_roles`, `ohi_platform_roles`) are
|
|
12
|
+
* populated by the pre-token-generation Lambda per ADR-019 (organization
|
|
13
|
+
* roles) and ADR 2026-03-13-02 (platform roles). Each is absent when no
|
|
14
|
+
* source data exists, present-and-empty when source data exists but yields
|
|
15
|
+
* no recognized codes, and otherwise a deduplicated code list.
|
|
16
|
+
*
|
|
9
17
|
* @see https://github.com/codedrifters/openhi-planning/blob/main/docs/src/content/docs/requirements/architectural-decisions/ADR-014-cognito-authn-runtime-jwt-claim-model.md
|
|
10
18
|
*/
|
|
11
19
|
export interface OhiJwtClaims {
|
|
@@ -19,4 +27,28 @@ export interface OhiJwtClaims {
|
|
|
19
27
|
ohi_uid: string;
|
|
20
28
|
/** Platform user display name. */
|
|
21
29
|
ohi_uname: string;
|
|
30
|
+
/** Workspace-scoped organization (clinical) role codes for the current
|
|
31
|
+
* workspace. Absent when the user has no linked Membership. */
|
|
32
|
+
ohi_organization_roles?: ReadonlyArray<OrganizationRoleCode>;
|
|
33
|
+
/** Platform role codes that apply to the current tenant/workspace scope.
|
|
34
|
+
* Absent when the user has no RoleAssignment. */
|
|
35
|
+
ohi_platform_roles?: ReadonlyArray<PlatformRoleCode>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Result of previewing the OpenHI claims a given user would receive at their
|
|
39
|
+
* next sign-in (`GET /User/:id/$claims`). Computed by the same resolution
|
|
40
|
+
* logic the pre-token-generation Lambda uses, so the preview never drifts
|
|
41
|
+
* from real token issuance.
|
|
42
|
+
*
|
|
43
|
+
* When `wouldBeRejected` is true the user would receive a token with no
|
|
44
|
+
* `ohi_*` claims, and `openHiContextMiddleware` would reject their API
|
|
45
|
+
* requests with a 403 — `reason` explains why.
|
|
46
|
+
*/
|
|
47
|
+
export interface OhiUserClaimsPreview {
|
|
48
|
+
/** The claims the user would receive, or `null` when they would receive none. */
|
|
49
|
+
claims: OhiJwtClaims | null;
|
|
50
|
+
/** True when the user would receive no usable claims (a 403 on every request). */
|
|
51
|
+
wouldBeRejected: boolean;
|
|
52
|
+
/** Human-readable explanation, present only when `wouldBeRejected` is true. */
|
|
53
|
+
reason?: string;
|
|
22
54
|
}
|
package/lib/auth/jwt-claims.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LWNsYWltcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2p3dC1jbGFpbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGxhdGZvcm1Sb2xlQ29kZSB9IGZyb20gXCIuLi9jb250cm9sL2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBPcmdhbml6YXRpb25Sb2xlQ29kZSB9IGZyb20gXCIuLi9kYXRhL29yZ2FuaXphdGlvbi1yb2xlXCI7XG5cbi8qKlxuICogQ2Fub25pY2FsIHByb2plY3Rpb24gb2YgdGhlIHJ1bnRpbWUgSldUIGNsYWltIGNvbnRyYWN0IGRlZmluZWQgaW4gQURSLTAxNC5cbiAqXG4gKiBgb2hpX3RpZGAgYW5kIGBvaGlfd2lkYCBhcmUgb3B0aW9uYWwgYmVjYXVzZSBhIGZyZXNobHktYXV0aGVudGljYXRlZCB1c2VyXG4gKiB0aGF0IGhhcyBub3QgeWV0IGJlZW4gcHJvdmlzaW9uZWQgaW50byBhbnkgdGVuYW50L3dvcmtzcGFjZSByZWNlaXZlcyBhXG4gKiB0b2tlbiB3aXRob3V0IHRoZW07IGBvaGlfdWlkYCBhbmQgYG9oaV91bmFtZWAgYXJlIHNldCBhdCB1c2VyXG4gKiBwcm92aXNpb25pbmcgYW5kIGFyZSBwcmVzZW50IGluIGV2ZXJ5IGlzc3VlZCB0b2tlbiB0aGVyZWFmdGVyLlxuICpcbiAqIFRoZSByb2xlIGNsYWltcyAoYG9oaV9vcmdhbml6YXRpb25fcm9sZXNgLCBgb2hpX3BsYXRmb3JtX3JvbGVzYCkgYXJlXG4gKiBwb3B1bGF0ZWQgYnkgdGhlIHByZS10b2tlbi1nZW5lcmF0aW9uIExhbWJkYSBwZXIgQURSLTAxOSAob3JnYW5pemF0aW9uXG4gKiByb2xlcykgYW5kIEFEUiAyMDI2LTAzLTEzLTAyIChwbGF0Zm9ybSByb2xlcykuIEVhY2ggaXMgYWJzZW50IHdoZW4gbm9cbiAqIHNvdXJjZSBkYXRhIGV4aXN0cywgcHJlc2VudC1hbmQtZW1wdHkgd2hlbiBzb3VyY2UgZGF0YSBleGlzdHMgYnV0IHlpZWxkc1xuICogbm8gcmVjb2duaXplZCBjb2RlcywgYW5kIG90aGVyd2lzZSBhIGRlZHVwbGljYXRlZCBjb2RlIGxpc3QuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29kZWRyaWZ0ZXJzL29wZW5oaS1wbGFubmluZy9ibG9iL21haW4vZG9jcy9zcmMvY29udGVudC9kb2NzL3JlcXVpcmVtZW50cy9hcmNoaXRlY3R1cmFsLWRlY2lzaW9ucy9BRFItMDE0LWNvZ25pdG8tYXV0aG4tcnVudGltZS1qd3QtY2xhaW0tbW9kZWwubWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPaGlKd3RDbGFpbXMge1xuICAvKiogUGxhdGZvcm0tYXNzaWduZWQgVGVuYW50IElEIGZvciB0aGUgcmVxdWVzdCBjb250ZXh0LiBBYnNlbnQgdW50aWwgdGhlXG4gICAqICB1c2VyIGlzIHByb3Zpc2lvbmVkIGludG8gYXQgbGVhc3Qgb25lIHRlbmFudC4gKi9cbiAgb2hpX3RpZD86IHN0cmluZztcbiAgLyoqIFBsYXRmb3JtLWFzc2lnbmVkIFdvcmtzcGFjZSBJRCBmb3IgdGhlIHJlcXVlc3QgY29udGV4dC4gQWJzZW50IHVudGlsXG4gICAqICB0aGUgdXNlciBpcyBwcm92aXNpb25lZCBpbnRvIGF0IGxlYXN0IG9uZSB3b3Jrc3BhY2Ugd2l0aGluIGBvaGlfdGlkYC4gKi9cbiAgb2hpX3dpZD86IHN0cmluZztcbiAgLyoqIFBsYXRmb3JtIHVzZXIgSUQuIERpc3RpbmN0IGZyb20gdGhlIENvZ25pdG8gYHN1YmAuICovXG4gIG9oaV91aWQ6IHN0cmluZztcbiAgLyoqIFBsYXRmb3JtIHVzZXIgZGlzcGxheSBuYW1lLiAqL1xuICBvaGlfdW5hbWU6IHN0cmluZztcbiAgLyoqIFdvcmtzcGFjZS1zY29wZWQgb3JnYW5pemF0aW9uIChjbGluaWNhbCkgcm9sZSBjb2RlcyBmb3IgdGhlIGN1cnJlbnRcbiAgICogIHdvcmtzcGFjZS4gQWJzZW50IHdoZW4gdGhlIHVzZXIgaGFzIG5vIGxpbmtlZCBNZW1iZXJzaGlwLiAqL1xuICBvaGlfb3JnYW5pemF0aW9uX3JvbGVzPzogUmVhZG9ubHlBcnJheTxPcmdhbml6YXRpb25Sb2xlQ29kZT47XG4gIC8qKiBQbGF0Zm9ybSByb2xlIGNvZGVzIHRoYXQgYXBwbHkgdG8gdGhlIGN1cnJlbnQgdGVuYW50L3dvcmtzcGFjZSBzY29wZS5cbiAgICogIEFic2VudCB3aGVuIHRoZSB1c2VyIGhhcyBubyBSb2xlQXNzaWdubWVudC4gKi9cbiAgb2hpX3BsYXRmb3JtX3JvbGVzPzogUmVhZG9ubHlBcnJheTxQbGF0Zm9ybVJvbGVDb2RlPjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgcHJldmlld2luZyB0aGUgT3BlbkhJIGNsYWltcyBhIGdpdmVuIHVzZXIgd291bGQgcmVjZWl2ZSBhdCB0aGVpclxuICogbmV4dCBzaWduLWluIChgR0VUIC9Vc2VyLzppZC8kY2xhaW1zYCkuIENvbXB1dGVkIGJ5IHRoZSBzYW1lIHJlc29sdXRpb25cbiAqIGxvZ2ljIHRoZSBwcmUtdG9rZW4tZ2VuZXJhdGlvbiBMYW1iZGEgdXNlcywgc28gdGhlIHByZXZpZXcgbmV2ZXIgZHJpZnRzXG4gKiBmcm9tIHJlYWwgdG9rZW4gaXNzdWFuY2UuXG4gKlxuICogV2hlbiBgd291bGRCZVJlamVjdGVkYCBpcyB0cnVlIHRoZSB1c2VyIHdvdWxkIHJlY2VpdmUgYSB0b2tlbiB3aXRoIG5vXG4gKiBgb2hpXypgIGNsYWltcywgYW5kIGBvcGVuSGlDb250ZXh0TWlkZGxld2FyZWAgd291bGQgcmVqZWN0IHRoZWlyIEFQSVxuICogcmVxdWVzdHMgd2l0aCBhIDQwMyDigJQgYHJlYXNvbmAgZXhwbGFpbnMgd2h5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9oaVVzZXJDbGFpbXNQcmV2aWV3IHtcbiAgLyoqIFRoZSBjbGFpbXMgdGhlIHVzZXIgd291bGQgcmVjZWl2ZSwgb3IgYG51bGxgIHdoZW4gdGhleSB3b3VsZCByZWNlaXZlIG5vbmUuICovXG4gIGNsYWltczogT2hpSnd0Q2xhaW1zIHwgbnVsbDtcbiAgLyoqIFRydWUgd2hlbiB0aGUgdXNlciB3b3VsZCByZWNlaXZlIG5vIHVzYWJsZSBjbGFpbXMgKGEgNDAzIG9uIGV2ZXJ5IHJlcXVlc3QpLiAqL1xuICB3b3VsZEJlUmVqZWN0ZWQ6IGJvb2xlYW47XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBleHBsYW5hdGlvbiwgcHJlc2VudCBvbmx5IHdoZW4gYHdvdWxkQmVSZWplY3RlZGAgaXMgdHJ1ZS4gKi9cbiAgcmVhc29uPzogc3RyaW5nO1xufVxuIl19
|
package/package.json
CHANGED