@kya-os/mcp-i-cloudflare 1.15.0 → 1.16.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/README.md +37 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +81 -51
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +9 -12
- package/dist/app.js.map +1 -1
- package/dist/audit/deployment-binding.d.ts +12 -12
- package/dist/config.d.ts +28 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -1
- package/dist/config.js.map +1 -1
- package/dist/constants/storage-keys.d.ts +9 -0
- package/dist/constants/storage-keys.d.ts.map +1 -1
- package/dist/constants/storage-keys.js +9 -0
- package/dist/constants/storage-keys.js.map +1 -1
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -1
- package/dist/delegation-http/bearer-retry.d.ts +20 -4
- package/dist/delegation-http/bearer-retry.d.ts.map +1 -1
- package/dist/delegation-http/bearer-retry.js +56 -10
- package/dist/delegation-http/bearer-retry.js.map +1 -1
- package/dist/delegation-http/consent-anchor-bridge.d.ts.map +1 -1
- package/dist/delegation-http/consent-anchor-bridge.js +72 -13
- package/dist/delegation-http/consent-anchor-bridge.js.map +1 -1
- package/dist/delegation-http/native-oauth-state.d.ts +16 -0
- package/dist/delegation-http/native-oauth-state.d.ts.map +1 -1
- package/dist/delegation-http/native-oauth-state.js +24 -9
- package/dist/delegation-http/native-oauth-state.js.map +1 -1
- package/dist/delegation-http/native-oauth.d.ts.map +1 -1
- package/dist/delegation-http/native-oauth.js +26 -7
- package/dist/delegation-http/native-oauth.js.map +1 -1
- package/dist/delegation-http/oauth-recovery.d.ts +3 -0
- package/dist/delegation-http/oauth-recovery.d.ts.map +1 -0
- package/dist/delegation-http/oauth-recovery.js +39 -0
- package/dist/delegation-http/oauth-recovery.js.map +1 -0
- package/dist/delegation-http/remote-issuer.d.ts +15 -0
- package/dist/delegation-http/remote-issuer.d.ts.map +1 -1
- package/dist/delegation-http/remote-issuer.js +27 -8
- package/dist/delegation-http/remote-issuer.js.map +1 -1
- package/dist/helpers/env-mapper.d.ts.map +1 -1
- package/dist/helpers/env-mapper.js +28 -6
- package/dist/helpers/env-mapper.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/proof-generator.d.ts +8 -7
- package/dist/proof-generator.d.ts.map +1 -1
- package/dist/proof-generator.js +32 -34
- package/dist/proof-generator.js.map +1 -1
- package/dist/runtime/oauth-handler.d.ts.map +1 -1
- package/dist/runtime/oauth-handler.js +43 -31
- package/dist/runtime/oauth-handler.js.map +1 -1
- package/dist/runtime/tool-activity.d.ts +31 -4
- package/dist/runtime/tool-activity.d.ts.map +1 -1
- package/dist/runtime/tool-activity.js +48 -0
- package/dist/runtime/tool-activity.js.map +1 -1
- package/dist/runtime.d.ts +31 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +65 -0
- package/dist/runtime.js.map +1 -1
- package/dist/security/admission-refusal.d.ts +32 -0
- package/dist/security/admission-refusal.d.ts.map +1 -0
- package/dist/security/admission-refusal.js +97 -0
- package/dist/security/admission-refusal.js.map +1 -0
- package/dist/security/card-proof-support.d.ts +66 -0
- package/dist/security/card-proof-support.d.ts.map +1 -0
- package/dist/security/card-proof-support.js +121 -0
- package/dist/security/card-proof-support.js.map +1 -0
- package/dist/security/mcp-admission.d.ts +28 -2
- package/dist/security/mcp-admission.d.ts.map +1 -1
- package/dist/security/mcp-admission.js +129 -29
- package/dist/security/mcp-admission.js.map +1 -1
- package/dist/security/mcp-holder-admission.d.ts +12 -1
- package/dist/security/mcp-holder-admission.d.ts.map +1 -1
- package/dist/security/mcp-holder-admission.js +46 -8
- package/dist/security/mcp-holder-admission.js.map +1 -1
- package/dist/security/presented-delegation.d.ts +10 -0
- package/dist/security/presented-delegation.d.ts.map +1 -1
- package/dist/security/presented-delegation.js +23 -3
- package/dist/security/presented-delegation.js.map +1 -1
- package/dist/services/admin.service.d.ts.map +1 -1
- package/dist/services/admin.service.js +24 -9
- package/dist/services/admin.service.js.map +1 -1
- package/dist/services/approval-route.d.ts +48 -0
- package/dist/services/approval-route.d.ts.map +1 -0
- package/dist/services/approval-route.js +87 -0
- package/dist/services/approval-route.js.map +1 -0
- package/dist/services/consent-config.service.d.ts.map +1 -1
- package/dist/services/consent-config.service.js +20 -5
- package/dist/services/consent-config.service.js.map +1 -1
- package/dist/services/consent.service.d.ts +113 -5
- package/dist/services/consent.service.d.ts.map +1 -1
- package/dist/services/consent.service.js +746 -904
- package/dist/services/consent.service.js.map +1 -1
- package/dist/services/credential-auth.handler.d.ts +2 -0
- package/dist/services/credential-auth.handler.d.ts.map +1 -1
- package/dist/services/credential-auth.handler.js +19 -3
- package/dist/services/credential-auth.handler.js.map +1 -1
- package/dist/services/delegation-trust.d.ts +97 -0
- package/dist/services/delegation-trust.d.ts.map +1 -0
- package/dist/services/delegation-trust.js +378 -0
- package/dist/services/delegation-trust.js.map +1 -0
- package/dist/services/delegation.service.d.ts +56 -14
- package/dist/services/delegation.service.d.ts.map +1 -1
- package/dist/services/delegation.service.js +160 -68
- package/dist/services/delegation.service.js.map +1 -1
- package/dist/services/multipart-parser.d.ts +73 -0
- package/dist/services/multipart-parser.d.ts.map +1 -0
- package/dist/services/multipart-parser.js +116 -0
- package/dist/services/multipart-parser.js.map +1 -0
- package/dist/services/proof.service.d.ts +38 -0
- package/dist/services/proof.service.d.ts.map +1 -1
- package/dist/services/proof.service.js +41 -2
- package/dist/services/proof.service.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/checkpoint-project-id.d.ts +31 -0
- package/dist/utils/checkpoint-project-id.d.ts.map +1 -0
- package/dist/utils/checkpoint-project-id.js +35 -0
- package/dist/utils/checkpoint-project-id.js.map +1 -0
- package/dist/utils/oauth-profile.d.ts +7 -0
- package/dist/utils/oauth-profile.d.ts.map +1 -0
- package/dist/utils/oauth-profile.js +24 -0
- package/dist/utils/oauth-profile.js.map +1 -0
- package/package.json +7 -6
|
@@ -26,6 +26,8 @@ export interface CredentialAuthResult {
|
|
|
26
26
|
expiresIn?: number;
|
|
27
27
|
/** Error message on failure */
|
|
28
28
|
error?: string;
|
|
29
|
+
/** Provider explicitly rejected credentials, before any identity or mint. */
|
|
30
|
+
authenticationRejected?: true;
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
31
33
|
* Credential authentication handler interface
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-auth.handler.d.ts","sourceRoot":"","sources":["../../src/services/credential-auth.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"credential-auth.handler.d.ts","sourceRoot":"","sources":["../../src/services/credential-auth.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,sBAAsB,CAAC,EAAE,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,YAAY,CACV,QAAQ,EAAE,wBAAwB,EAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,8CAA8C;IAC9C,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,2BAA2B,GAClC,sBAAsB,CA0SxB;AAED;;;;;;;;;;GAUG;AACH,iBAAS,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiBtE;AAGD,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -139,7 +139,15 @@ export function createCredentialAuthHandler(config) {
|
|
|
139
139
|
actual: checkValue,
|
|
140
140
|
error: errorMsg,
|
|
141
141
|
});
|
|
142
|
-
return {
|
|
142
|
+
return {
|
|
143
|
+
success: false,
|
|
144
|
+
error: String(errorMsg),
|
|
145
|
+
...((response.ok && checkValue !== undefined) ||
|
|
146
|
+
response.status === 401 ||
|
|
147
|
+
response.status === 403
|
|
148
|
+
? { authenticationRejected: true }
|
|
149
|
+
: {}),
|
|
150
|
+
};
|
|
143
151
|
}
|
|
144
152
|
}
|
|
145
153
|
else if (!response.ok) {
|
|
@@ -147,7 +155,13 @@ export function createCredentialAuthHandler(config) {
|
|
|
147
155
|
logger("[CredentialAuthHandler] HTTP error", {
|
|
148
156
|
status: response.status,
|
|
149
157
|
});
|
|
150
|
-
return {
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
error: `HTTP ${response.status}`,
|
|
161
|
+
...(response.status === 401 || response.status === 403
|
|
162
|
+
? { authenticationRejected: true }
|
|
163
|
+
: {}),
|
|
164
|
+
};
|
|
151
165
|
}
|
|
152
166
|
// 5. Extract session token - handle "cookie" special case
|
|
153
167
|
let sessionToken;
|
|
@@ -167,7 +181,9 @@ export function createCredentialAuthHandler(config) {
|
|
|
167
181
|
const firstCookie = setCookie.split(";")[0];
|
|
168
182
|
const valueIndex = firstCookie.indexOf("=");
|
|
169
183
|
sessionToken =
|
|
170
|
-
valueIndex > 0
|
|
184
|
+
valueIndex > 0
|
|
185
|
+
? firstCookie.substring(valueIndex + 1)
|
|
186
|
+
: undefined;
|
|
171
187
|
}
|
|
172
188
|
logger("[CredentialAuthHandler] Extracted token from Set-Cookie", {
|
|
173
189
|
hasMatch: !!cookieMatch,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-auth.handler.js","sourceRoot":"","sources":["../../src/services/credential-auth.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"credential-auth.handler.js","sourceRoot":"","sources":["../../src/services/credential-auth.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delegation credential trust policy.
|
|
3
|
+
*
|
|
4
|
+
* Decides which issuers this worker accepts delegation VC-JWTs from, which
|
|
5
|
+
* audience they must name, which key verifies them, and whether their status
|
|
6
|
+
* entry is clear. `DelegationService` applies it before any verdict is reached
|
|
7
|
+
* or cached, with or without a Checkpoint API key.
|
|
8
|
+
*
|
|
9
|
+
* Pinned issuers:
|
|
10
|
+
* - the worker's own identity (`MCP_IDENTITY_AGENT_DID`), which signs the
|
|
11
|
+
* anchor flow's self-issued delegations;
|
|
12
|
+
* - the native issuer binding's org DID (`MCPI_NATIVE_HTTP_ISSUER_CONFIG`), and
|
|
13
|
+
* any native issuer the caller configured in code;
|
|
14
|
+
* - `KYA_OS_TRUSTED_DELEGATION_ISSUERS`;
|
|
15
|
+
* - the Checkpoint platform signer, found through the configured Checkpoint
|
|
16
|
+
* origin's own DID document (`CHECKPOINT_API_URL`, default kya.vouched.id),
|
|
17
|
+
* which names that did:key in `alsoKnownAs` under the same key.
|
|
18
|
+
*
|
|
19
|
+
* Nothing is hard-coded, and nothing named only by a token is fetched: an
|
|
20
|
+
* issuer is pinned before its DID document is resolved, and a status list is
|
|
21
|
+
* fetched only from a credential a pinned issuer signed.
|
|
22
|
+
*
|
|
23
|
+
* Accepted audiences: the worker's DID, `CHECKPOINT_PROJECT_ID`, the binding's
|
|
24
|
+
* org DID and project, any native issuer the caller configured in code, and
|
|
25
|
+
* `KYA_OS_DELEGATION_AUDIENCES`.
|
|
26
|
+
*/
|
|
27
|
+
import { type DIDDocument, type DIDResolver } from "@kya-os/mcp";
|
|
28
|
+
import type { CloudflareEnv } from "../types";
|
|
29
|
+
/** Trust inputs a caller holds beyond the environment (e.g. a native issuer). */
|
|
30
|
+
export interface DelegationTrustOptions {
|
|
31
|
+
/** Issuer DIDs to pin in addition to the environment-derived set. */
|
|
32
|
+
trustedIssuers?: readonly (string | undefined)[];
|
|
33
|
+
/** Audiences to accept in addition to the environment-derived set. */
|
|
34
|
+
audiences?: readonly (string | undefined)[];
|
|
35
|
+
}
|
|
36
|
+
export interface DelegationTrust {
|
|
37
|
+
readonly issuers: ReadonlySet<string>;
|
|
38
|
+
readonly audiences: ReadonlySet<string>;
|
|
39
|
+
/** The worker's own DID: the only issuer allowed to omit `aud`. */
|
|
40
|
+
readonly ownDid?: string;
|
|
41
|
+
/** Origin whose `/.well-known/did.json` names the Checkpoint platform signer. */
|
|
42
|
+
readonly checkpointOrigin?: string;
|
|
43
|
+
}
|
|
44
|
+
/** DID resolution plus the configured Checkpoint origin's own DID document. */
|
|
45
|
+
export interface DelegationDidResolver extends DIDResolver {
|
|
46
|
+
checkpointIdentity(origin: string): Promise<DIDDocument | null>;
|
|
47
|
+
}
|
|
48
|
+
export type AudienceVerdict = "accepted" | "unmatched" | "missing";
|
|
49
|
+
export type StatusVerdict = "clear" | "revoked" | "unresolvable";
|
|
50
|
+
/** Build the trust policy from deployment configuration. */
|
|
51
|
+
export declare function resolveDelegationTrust(env: CloudflareEnv, options?: DelegationTrustOptions): DelegationTrust;
|
|
52
|
+
/**
|
|
53
|
+
* A credential's handle: `vc.id`, else the `jti` claim. The same rule as
|
|
54
|
+
* Checkpoint's reporter, so both name a credential alike. Org-issued
|
|
55
|
+
* delegations carry their per-delegation credential id as `vc.id` and no `jti`.
|
|
56
|
+
*/
|
|
57
|
+
export declare function credentialHandle(payload: Record<string, unknown>): string | undefined;
|
|
58
|
+
/** RFC 7519 §4.1.3: `aud` is a string or an array; one accepted value is enough. */
|
|
59
|
+
export declare function audienceVerdict(aud: unknown, trust: DelegationTrust): AudienceVerdict;
|
|
60
|
+
/**
|
|
61
|
+
* did:key resolves locally and did:web through `@kya-os/mcp`'s resolver; every
|
|
62
|
+
* fetch refuses redirects, times out and is size-capped. Successful documents
|
|
63
|
+
* are cached for five minutes per resolver; a failed Checkpoint discovery for
|
|
64
|
+
* thirty seconds, so a degraded origin is not refetched for every token.
|
|
65
|
+
*/
|
|
66
|
+
export declare function createDelegationDidResolver(fetchUpstream?: (url: string) => Promise<Response>): DelegationDidResolver;
|
|
67
|
+
/** One resolver per isolate, so DID documents stay cached across requests. */
|
|
68
|
+
export declare function sharedDelegationDidResolver(): DelegationDidResolver;
|
|
69
|
+
/**
|
|
70
|
+
* Ed25519 keys the document authorizes for assertions (`assertionMethod`),
|
|
71
|
+
* narrowed to `kid` when the token names one. A did:key has exactly one key,
|
|
72
|
+
* so only its DID part has to match.
|
|
73
|
+
*/
|
|
74
|
+
export declare function assertionKeys(doc: DIDDocument, kid?: string): Uint8Array[];
|
|
75
|
+
/** Ed25519 signature check against any of `keys`. */
|
|
76
|
+
export declare function verifiesWithAnyKey(signingInput: string, signature: string, keys: readonly Uint8Array[]): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Whether `issuerDid` is the Checkpoint platform signer: the did:key the
|
|
79
|
+
* configured Checkpoint origin's DID document lists in `alsoKnownAs` AND
|
|
80
|
+
* publishes as one of its own assertion keys.
|
|
81
|
+
*/
|
|
82
|
+
export declare function isCheckpointPlatformIssuer(issuerDid: string, trust: DelegationTrust, resolver: DelegationDidResolver): Promise<boolean>;
|
|
83
|
+
/**
|
|
84
|
+
* The status entries a VC-JWT carries: the W3C `vc.credentialStatus` and the
|
|
85
|
+
* draft-kya-http-02 top-level `credentialStatus`. Returns null when either is
|
|
86
|
+
* malformed or the two disagree.
|
|
87
|
+
*/
|
|
88
|
+
export declare function credentialStatusEntries(payload: Record<string, unknown>): unknown[] | null;
|
|
89
|
+
/**
|
|
90
|
+
* Read one revocation entry, fail closed: an entry the native profile would not
|
|
91
|
+
* issue (`validNativeStatus`), an unreachable or malformed list, a purpose
|
|
92
|
+
* mismatch, or an out-of-range index is "unresolvable", never "clear".
|
|
93
|
+
*/
|
|
94
|
+
export declare function checkCredentialStatusEntry(entry: unknown, fetchUpstream?: (url: string) => Promise<Response>): Promise<StatusVerdict>;
|
|
95
|
+
/** "1"/"true" opts a development worker into unchecked legacy tokens. */
|
|
96
|
+
export declare function insecureDevTokensEnabled(env: CloudflareEnv): boolean;
|
|
97
|
+
//# sourceMappingURL=delegation-trust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-trust.d.ts","sourceRoot":"","sources":["../../src/services/delegation-trust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EASL,KAAK,WAAW,EAChB,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAC;AAUrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACjD,sEAAsE;IACtE,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACjE;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AACnE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;AAqBjE,4DAA4D;AAC5D,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,sBAA2B,GACnC,eAAe,CAuCjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,GAAG,SAAS,CASpB;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,eAAe,GACrB,eAAe,CAMjB;AAiED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAiB,GAChE,qBAAqB,CAmEvB;AAID,8EAA8E;AAC9E,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAsBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CA2B1E;AAED,qDAAqD;AACrD,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,UAAU,EAAE,GAC1B,OAAO,CAAC,OAAO,CAAC,CAalB;AAMD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,OAAO,CAAC,CASlB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,EAAE,GAAG,IAAI,CAclB;AAWD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,OAAO,EACd,aAAa,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAiB,GAChE,OAAO,CAAC,aAAa,CAAC,CA6BxB;AAED,yEAAyE;AACzE,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAKpE"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delegation credential trust policy.
|
|
3
|
+
*
|
|
4
|
+
* Decides which issuers this worker accepts delegation VC-JWTs from, which
|
|
5
|
+
* audience they must name, which key verifies them, and whether their status
|
|
6
|
+
* entry is clear. `DelegationService` applies it before any verdict is reached
|
|
7
|
+
* or cached, with or without a Checkpoint API key.
|
|
8
|
+
*
|
|
9
|
+
* Pinned issuers:
|
|
10
|
+
* - the worker's own identity (`MCP_IDENTITY_AGENT_DID`), which signs the
|
|
11
|
+
* anchor flow's self-issued delegations;
|
|
12
|
+
* - the native issuer binding's org DID (`MCPI_NATIVE_HTTP_ISSUER_CONFIG`), and
|
|
13
|
+
* any native issuer the caller configured in code;
|
|
14
|
+
* - `KYA_OS_TRUSTED_DELEGATION_ISSUERS`;
|
|
15
|
+
* - the Checkpoint platform signer, found through the configured Checkpoint
|
|
16
|
+
* origin's own DID document (`CHECKPOINT_API_URL`, default kya.vouched.id),
|
|
17
|
+
* which names that did:key in `alsoKnownAs` under the same key.
|
|
18
|
+
*
|
|
19
|
+
* Nothing is hard-coded, and nothing named only by a token is fetched: an
|
|
20
|
+
* issuer is pinned before its DID document is resolved, and a status list is
|
|
21
|
+
* fetched only from a credential a pinned issuer signed.
|
|
22
|
+
*
|
|
23
|
+
* Accepted audiences: the worker's DID, `CHECKPOINT_PROJECT_ID`, the binding's
|
|
24
|
+
* org DID and project, any native issuer the caller configured in code, and
|
|
25
|
+
* `KYA_OS_DELEGATION_AUDIENCES`.
|
|
26
|
+
*/
|
|
27
|
+
import { canonicalize } from "json-canonicalize";
|
|
28
|
+
import { base58Decode, base64urlDecodeToBytes, buildDidResolverRegistry, bytesToBase64, createDidKeyResolver, createDidWebResolver, extractPublicKeyFromDidKey, isIndexSet, } from "@kya-os/mcp";
|
|
29
|
+
import { DEFAULT_CHECKPOINT_URL } from "../constants";
|
|
30
|
+
import { fetchNativeNoRedirect } from "../delegation-http/native-fetch";
|
|
31
|
+
import { secureHttpUrl, validNativeStatus, } from "../delegation-http/native-http";
|
|
32
|
+
import { parseNativeIssuerBinding } from "../delegation-http/remote-issuer";
|
|
33
|
+
import { WebCryptoProvider } from "../providers/crypto";
|
|
34
|
+
const DID_PATTERN = /^did:[a-z0-9]+:[^\s#?]+$/;
|
|
35
|
+
const UPSTREAM_TIMEOUT_MS = 3_000;
|
|
36
|
+
const DID_DOCUMENT_TTL_MS = 5 * 60_000;
|
|
37
|
+
/** A failed Checkpoint discovery is retried at most this often per isolate. */
|
|
38
|
+
const DISCOVERY_RETRY_MS = 30_000;
|
|
39
|
+
const DID_DOCUMENT_MAX_BYTES = 64 * 1024;
|
|
40
|
+
const STATUS_RESPONSE_MAX_BYTES = 1024 * 1024;
|
|
41
|
+
/** Same ceiling as `@kya-os/mcp`'s MAX_STATUS_LIST_BYTES (16 MiB inflated). */
|
|
42
|
+
const STATUS_LIST_MAX_BYTES = 16 * 1024 * 1024;
|
|
43
|
+
function listFrom(value) {
|
|
44
|
+
return typeof value === "string" ? value.split(/[\s,]+/).filter(Boolean) : [];
|
|
45
|
+
}
|
|
46
|
+
function checkpointOriginFor(url) {
|
|
47
|
+
if (!secureHttpUrl(url, true))
|
|
48
|
+
return undefined;
|
|
49
|
+
return new URL(url).origin;
|
|
50
|
+
}
|
|
51
|
+
/** Build the trust policy from deployment configuration. */
|
|
52
|
+
export function resolveDelegationTrust(env, options = {}) {
|
|
53
|
+
const issuers = new Set();
|
|
54
|
+
const audiences = new Set();
|
|
55
|
+
const ownDid = typeof env.MCP_IDENTITY_AGENT_DID === "string" &&
|
|
56
|
+
DID_PATTERN.test(env.MCP_IDENTITY_AGENT_DID)
|
|
57
|
+
? env.MCP_IDENTITY_AGENT_DID
|
|
58
|
+
: undefined;
|
|
59
|
+
if (ownDid) {
|
|
60
|
+
issuers.add(ownDid);
|
|
61
|
+
audiences.add(ownDid);
|
|
62
|
+
}
|
|
63
|
+
const binding = parseNativeIssuerBinding(env.MCPI_NATIVE_HTTP_ISSUER_CONFIG);
|
|
64
|
+
if (binding) {
|
|
65
|
+
issuers.add(binding.issuerDid);
|
|
66
|
+
audiences.add(binding.issuerDid);
|
|
67
|
+
audiences.add(binding.projectId);
|
|
68
|
+
}
|
|
69
|
+
for (const did of [
|
|
70
|
+
...listFrom(env.KYA_OS_TRUSTED_DELEGATION_ISSUERS),
|
|
71
|
+
...(options.trustedIssuers ?? []),
|
|
72
|
+
])
|
|
73
|
+
if (did && DID_PATTERN.test(did))
|
|
74
|
+
issuers.add(did);
|
|
75
|
+
for (const aud of [
|
|
76
|
+
...listFrom(env.CHECKPOINT_PROJECT_ID),
|
|
77
|
+
...listFrom(env.KYA_OS_DELEGATION_AUDIENCES),
|
|
78
|
+
...(options.audiences ?? []),
|
|
79
|
+
])
|
|
80
|
+
if (aud)
|
|
81
|
+
audiences.add(aud);
|
|
82
|
+
const checkpointUrl = env.CHECKPOINT_API_URL || DEFAULT_CHECKPOINT_URL;
|
|
83
|
+
return {
|
|
84
|
+
issuers,
|
|
85
|
+
audiences,
|
|
86
|
+
ownDid,
|
|
87
|
+
checkpointOrigin: typeof checkpointUrl === "string"
|
|
88
|
+
? checkpointOriginFor(checkpointUrl)
|
|
89
|
+
: undefined,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A credential's handle: `vc.id`, else the `jti` claim. The same rule as
|
|
94
|
+
* Checkpoint's reporter, so both name a credential alike. Org-issued
|
|
95
|
+
* delegations carry their per-delegation credential id as `vc.id` and no `jti`.
|
|
96
|
+
*/
|
|
97
|
+
export function credentialHandle(payload) {
|
|
98
|
+
const vc = payload.vc;
|
|
99
|
+
const vcId = typeof vc === "object" && vc !== null
|
|
100
|
+
? vc.id
|
|
101
|
+
: undefined;
|
|
102
|
+
if (typeof vcId === "string" && vcId.length > 0)
|
|
103
|
+
return vcId;
|
|
104
|
+
const jti = payload.jti;
|
|
105
|
+
return typeof jti === "string" && jti.length > 0 ? jti : undefined;
|
|
106
|
+
}
|
|
107
|
+
/** RFC 7519 §4.1.3: `aud` is a string or an array; one accepted value is enough. */
|
|
108
|
+
export function audienceVerdict(aud, trust) {
|
|
109
|
+
if (aud === undefined)
|
|
110
|
+
return "missing";
|
|
111
|
+
const values = Array.isArray(aud) ? aud : [aud];
|
|
112
|
+
return values.some((v) => typeof v === "string" && trust.audiences.has(v))
|
|
113
|
+
? "accepted"
|
|
114
|
+
: "unmatched";
|
|
115
|
+
}
|
|
116
|
+
async function readBounded(stream, maxBytes) {
|
|
117
|
+
if (!stream)
|
|
118
|
+
throw new Error("Empty body");
|
|
119
|
+
const reader = stream.getReader();
|
|
120
|
+
const chunks = [];
|
|
121
|
+
let length = 0;
|
|
122
|
+
try {
|
|
123
|
+
for (;;) {
|
|
124
|
+
const { done, value } = await reader.read();
|
|
125
|
+
if (done)
|
|
126
|
+
break;
|
|
127
|
+
length += value.length;
|
|
128
|
+
if (length > maxBytes) {
|
|
129
|
+
void reader.cancel().catch(() => { });
|
|
130
|
+
throw new Error("Body exceeds limit");
|
|
131
|
+
}
|
|
132
|
+
chunks.push(value);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
reader.releaseLock();
|
|
137
|
+
}
|
|
138
|
+
const bytes = new Uint8Array(length);
|
|
139
|
+
let offset = 0;
|
|
140
|
+
for (const chunk of chunks) {
|
|
141
|
+
bytes.set(chunk, offset);
|
|
142
|
+
offset += chunk.length;
|
|
143
|
+
}
|
|
144
|
+
return bytes;
|
|
145
|
+
}
|
|
146
|
+
async function readBoundedJson(response, maxBytes) {
|
|
147
|
+
if (response.status !== 200) {
|
|
148
|
+
void response.body?.cancel().catch(() => { });
|
|
149
|
+
throw new Error(`Unexpected status ${response.status}`);
|
|
150
|
+
}
|
|
151
|
+
return JSON.parse(new TextDecoder().decode(await readBounded(response.body, maxBytes)));
|
|
152
|
+
}
|
|
153
|
+
function upstreamFetch(url) {
|
|
154
|
+
return fetchNativeNoRedirect(url, {
|
|
155
|
+
signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS),
|
|
156
|
+
headers: { Accept: "application/did+ld+json, application/json" },
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
function isDidDocument(value) {
|
|
160
|
+
if (!value || typeof value !== "object")
|
|
161
|
+
return false;
|
|
162
|
+
const doc = value;
|
|
163
|
+
return (typeof doc.id === "string" &&
|
|
164
|
+
(doc.verificationMethod === undefined ||
|
|
165
|
+
Array.isArray(doc.verificationMethod)) &&
|
|
166
|
+
(doc.assertionMethod === undefined || Array.isArray(doc.assertionMethod)) &&
|
|
167
|
+
(doc.alsoKnownAs === undefined || Array.isArray(doc.alsoKnownAs)));
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* did:key resolves locally and did:web through `@kya-os/mcp`'s resolver; every
|
|
171
|
+
* fetch refuses redirects, times out and is size-capped. Successful documents
|
|
172
|
+
* are cached for five minutes per resolver; a failed Checkpoint discovery for
|
|
173
|
+
* thirty seconds, so a degraded origin is not refetched for every token.
|
|
174
|
+
*/
|
|
175
|
+
export function createDelegationDidResolver(fetchUpstream = upstreamFetch) {
|
|
176
|
+
const provider = {
|
|
177
|
+
// DidWebResolver reads the body unbounded, so hand it a capped copy.
|
|
178
|
+
async fetch(url) {
|
|
179
|
+
const response = await fetchUpstream(url);
|
|
180
|
+
if (!response.ok) {
|
|
181
|
+
void response.body?.cancel().catch(() => { });
|
|
182
|
+
return new Response(null, { status: response.status });
|
|
183
|
+
}
|
|
184
|
+
return new Response((await readBounded(response.body, DID_DOCUMENT_MAX_BYTES)), { status: response.status });
|
|
185
|
+
},
|
|
186
|
+
resolveDID: async () => null,
|
|
187
|
+
fetchStatusList: async () => null,
|
|
188
|
+
fetchDelegationChain: async () => [],
|
|
189
|
+
};
|
|
190
|
+
const resolvers = buildDidResolverRegistry({
|
|
191
|
+
key: createDidKeyResolver(),
|
|
192
|
+
web: (fp) => createDidWebResolver(fp, { cacheTtl: DID_DOCUMENT_TTL_MS }),
|
|
193
|
+
}, provider);
|
|
194
|
+
const checkpointDocs = new Map();
|
|
195
|
+
const remember = (origin, doc) => {
|
|
196
|
+
checkpointDocs.set(origin, {
|
|
197
|
+
doc,
|
|
198
|
+
expiresAt: Date.now() + (doc ? DID_DOCUMENT_TTL_MS : DISCOVERY_RETRY_MS),
|
|
199
|
+
});
|
|
200
|
+
return doc;
|
|
201
|
+
};
|
|
202
|
+
return {
|
|
203
|
+
async resolve(did) {
|
|
204
|
+
const method = /^did:([a-z0-9]+):/.exec(did)?.[1];
|
|
205
|
+
const resolver = method ? resolvers[method] : undefined;
|
|
206
|
+
if (!resolver)
|
|
207
|
+
return null;
|
|
208
|
+
try {
|
|
209
|
+
return await resolver.resolve(did);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
// Checkpoint serves its server identity at /.well-known/did.json with the
|
|
216
|
+
// production did:web id on every host, so this is fetched by origin rather
|
|
217
|
+
// than resolved as did:web (a staging host would fail the id check).
|
|
218
|
+
async checkpointIdentity(origin) {
|
|
219
|
+
const cached = checkpointDocs.get(origin);
|
|
220
|
+
if (cached && cached.expiresAt > Date.now())
|
|
221
|
+
return cached.doc;
|
|
222
|
+
try {
|
|
223
|
+
const doc = await readBoundedJson(await fetchUpstream(origin + "/.well-known/did.json"), DID_DOCUMENT_MAX_BYTES);
|
|
224
|
+
return remember(origin, isDidDocument(doc) ? doc : null);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return remember(origin, null);
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
let sharedResolver;
|
|
233
|
+
/** One resolver per isolate, so DID documents stay cached across requests. */
|
|
234
|
+
export function sharedDelegationDidResolver() {
|
|
235
|
+
return (sharedResolver ??= createDelegationDidResolver());
|
|
236
|
+
}
|
|
237
|
+
function methodKey(vm) {
|
|
238
|
+
try {
|
|
239
|
+
const jwk = vm.publicKeyJwk;
|
|
240
|
+
if (jwk && jwk.kty === "OKP" && jwk.crv === "Ed25519") {
|
|
241
|
+
const key = typeof jwk.x === "string" ? base64urlDecodeToBytes(jwk.x) : null;
|
|
242
|
+
return key?.length === 32 ? key : null;
|
|
243
|
+
}
|
|
244
|
+
if (vm.publicKeyMultibase?.startsWith("z")) {
|
|
245
|
+
const decoded = base58Decode(vm.publicKeyMultibase.slice(1));
|
|
246
|
+
return decoded.length === 34 && decoded[0] === 0xed && decoded[1] === 1
|
|
247
|
+
? decoded.slice(2)
|
|
248
|
+
: null;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// Malformed key material is simply not a usable key.
|
|
253
|
+
}
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Ed25519 keys the document authorizes for assertions (`assertionMethod`),
|
|
258
|
+
* narrowed to `kid` when the token names one. A did:key has exactly one key,
|
|
259
|
+
* so only its DID part has to match.
|
|
260
|
+
*/
|
|
261
|
+
export function assertionKeys(doc, kid) {
|
|
262
|
+
const absolute = (id) => (id.startsWith("#") ? doc.id + id : id);
|
|
263
|
+
const byId = new Map();
|
|
264
|
+
for (const vm of doc.verificationMethod ?? [])
|
|
265
|
+
if (typeof vm?.id === "string")
|
|
266
|
+
byId.set(absolute(vm.id), vm);
|
|
267
|
+
const methods = [];
|
|
268
|
+
for (const entry of doc.assertionMethod ?? []) {
|
|
269
|
+
const vm = typeof entry === "string"
|
|
270
|
+
? byId.get(absolute(entry))
|
|
271
|
+
: (entry ?? undefined);
|
|
272
|
+
if (typeof vm?.id === "string")
|
|
273
|
+
methods.push(vm);
|
|
274
|
+
}
|
|
275
|
+
let selected = methods;
|
|
276
|
+
if (kid !== undefined) {
|
|
277
|
+
const wanted = absolute(kid);
|
|
278
|
+
selected = methods.filter((vm) => absolute(vm.id) === wanted);
|
|
279
|
+
if (!selected.length &&
|
|
280
|
+
doc.id.startsWith("did:key:") &&
|
|
281
|
+
wanted.split("#")[0] === doc.id)
|
|
282
|
+
selected = methods;
|
|
283
|
+
}
|
|
284
|
+
return selected
|
|
285
|
+
.map(methodKey)
|
|
286
|
+
.filter((key) => key !== null);
|
|
287
|
+
}
|
|
288
|
+
/** Ed25519 signature check against any of `keys`. */
|
|
289
|
+
export async function verifiesWithAnyKey(signingInput, signature, keys) {
|
|
290
|
+
let signatureBytes;
|
|
291
|
+
try {
|
|
292
|
+
signatureBytes = base64urlDecodeToBytes(signature);
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
const data = new TextEncoder().encode(signingInput);
|
|
298
|
+
const crypto = new WebCryptoProvider();
|
|
299
|
+
for (const key of keys)
|
|
300
|
+
if (await crypto.verify(data, signatureBytes, bytesToBase64(key)))
|
|
301
|
+
return true;
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
function sameBytes(a, b) {
|
|
305
|
+
return a.length === b.length && a.every((byte, i) => byte === b[i]);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Whether `issuerDid` is the Checkpoint platform signer: the did:key the
|
|
309
|
+
* configured Checkpoint origin's DID document lists in `alsoKnownAs` AND
|
|
310
|
+
* publishes as one of its own assertion keys.
|
|
311
|
+
*/
|
|
312
|
+
export async function isCheckpointPlatformIssuer(issuerDid, trust, resolver) {
|
|
313
|
+
if (!trust.checkpointOrigin || !issuerDid.startsWith("did:key:"))
|
|
314
|
+
return false;
|
|
315
|
+
const doc = await resolver.checkpointIdentity(trust.checkpointOrigin);
|
|
316
|
+
if (!doc?.alsoKnownAs?.includes(issuerDid))
|
|
317
|
+
return false;
|
|
318
|
+
const aliasKey = extractPublicKeyFromDidKey(issuerDid);
|
|
319
|
+
return (!!aliasKey && assertionKeys(doc).some((key) => sameBytes(key, aliasKey)));
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* The status entries a VC-JWT carries: the W3C `vc.credentialStatus` and the
|
|
323
|
+
* draft-kya-http-02 top-level `credentialStatus`. Returns null when either is
|
|
324
|
+
* malformed or the two disagree.
|
|
325
|
+
*/
|
|
326
|
+
export function credentialStatusEntries(payload) {
|
|
327
|
+
const vc = payload.vc;
|
|
328
|
+
const inner = vc?.credentialStatus;
|
|
329
|
+
const outer = payload.credentialStatus;
|
|
330
|
+
if (inner !== undefined &&
|
|
331
|
+
outer !== undefined &&
|
|
332
|
+
canonicalize(inner) !== canonicalize(outer))
|
|
333
|
+
return null;
|
|
334
|
+
const status = inner ?? outer;
|
|
335
|
+
if (status === undefined)
|
|
336
|
+
return [];
|
|
337
|
+
const entries = Array.isArray(status) ? status : [status];
|
|
338
|
+
return entries.length ? entries : null;
|
|
339
|
+
}
|
|
340
|
+
function gunzipBounded(bytes) {
|
|
341
|
+
const body = new Response(bytes).body;
|
|
342
|
+
if (!body)
|
|
343
|
+
throw new Error("Empty status list");
|
|
344
|
+
return readBounded(body.pipeThrough(new DecompressionStream("gzip")), STATUS_LIST_MAX_BYTES);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Read one revocation entry, fail closed: an entry the native profile would not
|
|
348
|
+
* issue (`validNativeStatus`), an unreachable or malformed list, a purpose
|
|
349
|
+
* mismatch, or an out-of-range index is "unresolvable", never "clear".
|
|
350
|
+
*/
|
|
351
|
+
export async function checkCredentialStatusEntry(entry, fetchUpstream = upstreamFetch) {
|
|
352
|
+
if (!entry ||
|
|
353
|
+
typeof entry !== "object" ||
|
|
354
|
+
!validNativeStatus(entry))
|
|
355
|
+
return "unresolvable";
|
|
356
|
+
const status = entry;
|
|
357
|
+
try {
|
|
358
|
+
const list = (await readBoundedJson(await fetchUpstream(status.statusListCredential), STATUS_RESPONSE_MAX_BYTES));
|
|
359
|
+
const subject = list?.credentialSubject;
|
|
360
|
+
if (!subject ||
|
|
361
|
+
subject.statusPurpose !== status.statusPurpose ||
|
|
362
|
+
typeof subject.encodedList !== "string")
|
|
363
|
+
return "unresolvable";
|
|
364
|
+
const revoked = await isIndexSet(subject.encodedList, Number(status.statusListIndex), { decompress: gunzipBounded });
|
|
365
|
+
return revoked ? "revoked" : "clear";
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
return "unresolvable";
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
/** "1"/"true" opts a development worker into unchecked legacy tokens. */
|
|
372
|
+
export function insecureDevTokensEnabled(env) {
|
|
373
|
+
const flag = String(env.KYA_OS_INSECURE_DEV_TOKENS ?? "")
|
|
374
|
+
.trim()
|
|
375
|
+
.toLowerCase();
|
|
376
|
+
return flag === "1" || flag === "true";
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=delegation-trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-trust.js","sourceRoot":"","sources":["../../src/services/delegation-trust.ts"],"names":[],"mappings":"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"}
|