effect 4.1.0 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/THIRD_PARTY_NOTICES.md +62 -0
- package/dist/BigDecimal.d.ts +139 -7
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +83 -14
- package/dist/BigDecimal.js.map +1 -1
- package/dist/Equal.d.ts +2 -2
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +3 -3
- package/dist/Equal.js.map +1 -1
- package/dist/Hash.d.ts +3 -2
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +5 -4
- package/dist/Hash.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +11 -8
- package/dist/Iterable.js.map +1 -1
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +5 -1
- package/dist/Path.js.map +1 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +2 -1
- package/dist/Pool.js.map +1 -1
- package/dist/Schema.d.ts +2 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2 -1
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +4 -2
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +4 -2
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +2 -2
- package/dist/SchemaTransformation.js +2 -2
- package/dist/ai/McpClient.d.ts +171 -19
- package/dist/ai/McpClient.d.ts.map +1 -1
- package/dist/ai/McpClient.js +277 -66
- package/dist/ai/McpClient.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +108 -0
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +99 -0
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts +120 -6
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +215 -34
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +20 -11
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -7
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/internal/mcpCore.js +72 -3
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +3 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +3 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +3 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +3 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +42 -7
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +12 -0
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +3 -3
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSkills.d.ts +2 -0
- package/dist/ai/internal/mcpSkills.d.ts.map +1 -0
- package/dist/ai/internal/mcpSkills.js +428 -0
- package/dist/ai/internal/mcpSkills.js.map +1 -0
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +15 -5
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Reply.d.ts +1 -1
- package/dist/cluster/Reply.d.ts.map +1 -1
- package/dist/cluster/Reply.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +4 -1
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +15 -7
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/crypto/Aead.d.ts +2 -1
- package/dist/crypto/Aead.d.ts.map +1 -1
- package/dist/crypto/Aead.js +2 -2
- package/dist/crypto/Aead.js.map +1 -1
- package/dist/crypto/Cipher.d.ts +2 -1
- package/dist/crypto/Cipher.d.ts.map +1 -1
- package/dist/crypto/Cipher.js +2 -2
- package/dist/crypto/Cipher.js.map +1 -1
- package/dist/crypto/KeyAgreement.d.ts +3 -2
- package/dist/crypto/KeyAgreement.d.ts.map +1 -1
- package/dist/crypto/KeyAgreement.js +2 -2
- package/dist/crypto/KeyAgreement.js.map +1 -1
- package/dist/crypto/KeyFormat.d.ts +33 -1
- package/dist/crypto/KeyFormat.d.ts.map +1 -1
- package/dist/crypto/KeyFormat.js.map +1 -1
- package/dist/crypto/KeyWrap.d.ts +4 -3
- package/dist/crypto/KeyWrap.d.ts.map +1 -1
- package/dist/crypto/KeyWrap.js +2 -2
- package/dist/crypto/KeyWrap.js.map +1 -1
- package/dist/crypto/Mac.d.ts +2 -1
- package/dist/crypto/Mac.d.ts.map +1 -1
- package/dist/crypto/Mac.js +2 -2
- package/dist/crypto/Mac.js.map +1 -1
- package/dist/crypto/Signature.d.ts +3 -2
- package/dist/crypto/Signature.d.ts.map +1 -1
- package/dist/crypto/Signature.js +2 -2
- package/dist/crypto/Signature.js.map +1 -1
- package/dist/crypto/WebCrypto.d.ts +19 -0
- package/dist/crypto/WebCrypto.d.ts.map +1 -1
- package/dist/crypto/WebCrypto.js.map +1 -1
- package/dist/crypto/internal/asymmetric.js.map +1 -1
- package/dist/crypto/internal/key.js +3 -2
- package/dist/crypto/internal/key.js.map +1 -1
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +26 -3
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Ndjson.d.ts +5 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +6 -5
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/Sse.d.ts +3 -1
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +5 -3
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +7 -0
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +7 -0
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +7 -1
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +27 -12
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +10 -0
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +17 -0
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +14 -2
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.d.ts +21 -0
- package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
- package/dist/eventlog/EventLogSessionAuth.js +22 -0
- package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/graphql/GraphQLClient.d.ts +3 -1
- package/dist/graphql/GraphQLClient.d.ts.map +1 -1
- package/dist/graphql/GraphQLClient.js.map +1 -1
- package/dist/graphql/GraphQLClientError.d.ts +14 -9
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +14 -21
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +12 -3
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -1
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/http/HttpClient.d.ts +189 -7
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +75 -2
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +38 -22
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/internal/mimeTypes.d.ts +4 -1
- package/dist/http/internal/mimeTypes.d.ts.map +1 -1
- package/dist/http/internal/mimeTypes.js +4 -1
- package/dist/http/internal/mimeTypes.js.map +1 -1
- package/dist/http-api/HttpApiSchema.js +1 -1
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/internal/dateTime.js +49 -24
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +10 -0
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/glob.js +234 -56
- package/dist/internal/glob.js.map +1 -1
- package/dist/internal/graphql.js +21 -7
- package/dist/internal/graphql.js.map +1 -1
- package/dist/internal/graphqlHeaders.d.ts +7 -0
- package/dist/internal/graphqlHeaders.d.ts.map +1 -1
- package/dist/internal/graphqlHeaders.js +11 -0
- package/dist/internal/graphqlHeaders.js.map +1 -1
- package/dist/internal/request.js +29 -42
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +7 -8
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/jose/JoseError.d.ts +285 -0
- package/dist/jose/JoseError.d.ts.map +1 -0
- package/dist/jose/JoseError.js +269 -0
- package/dist/jose/JoseError.js.map +1 -0
- package/dist/jose/Jwe.d.ts +128 -0
- package/dist/jose/Jwe.d.ts.map +1 -0
- package/dist/jose/Jwe.js +134 -0
- package/dist/jose/Jwe.js.map +1 -0
- package/dist/jose/Jwk.d.ts +597 -0
- package/dist/jose/Jwk.d.ts.map +1 -0
- package/dist/jose/Jwk.js +503 -0
- package/dist/jose/Jwk.js.map +1 -0
- package/dist/jose/Jwks.d.ts +236 -0
- package/dist/jose/Jwks.d.ts.map +1 -0
- package/dist/jose/Jwks.js +306 -0
- package/dist/jose/Jwks.js.map +1 -0
- package/dist/jose/Jws.d.ts +177 -0
- package/dist/jose/Jws.d.ts.map +1 -0
- package/dist/jose/Jws.js +183 -0
- package/dist/jose/Jws.js.map +1 -0
- package/dist/jose/Jwt.d.ts +270 -0
- package/dist/jose/Jwt.d.ts.map +1 -0
- package/dist/jose/Jwt.js +293 -0
- package/dist/jose/Jwt.js.map +1 -0
- package/dist/jose/index.d.ts +51 -0
- package/dist/jose/index.d.ts.map +1 -0
- package/dist/jose/index.js +52 -0
- package/dist/jose/index.js.map +1 -0
- package/dist/jose/internal/compact.d.ts +2 -0
- package/dist/jose/internal/compact.d.ts.map +1 -0
- package/dist/jose/internal/compact.js +179 -0
- package/dist/jose/internal/compact.js.map +1 -0
- package/dist/net/Host.d.ts.map +1 -1
- package/dist/net/Host.js +5 -10
- package/dist/net/Host.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +1 -1
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +10 -4
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/internal/otlpProtobuf.js +3 -3
- package/dist/observability/internal/otlpProtobuf.js.map +1 -1
- package/dist/observability/internal/protobuf.js +6 -0
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +98 -38
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -1
- package/dist/persistence/CircuitBreaker.js +67 -29
- package/dist/persistence/CircuitBreaker.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts +8 -0
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +63 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/index.d.ts +1 -1
- package/dist/persistence/index.js +1 -1
- package/dist/reactivity/AtomRegistry.js +17 -7
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +1 -1
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +14 -2
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +38 -21
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +3 -2
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/rpc/RpcMessage.js.map +1 -1
- package/dist/sql/Migrator.d.ts +9 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +18 -6
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +38 -3
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +4 -3
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/Statement.d.ts +41 -3
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -20
- package/dist/sql/Statement.js.map +1 -1
- package/dist/workflow/Workflow.d.ts +4 -0
- package/dist/workflow/Workflow.d.ts.map +1 -1
- package/dist/workflow/Workflow.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +5 -0
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +5 -1
- package/src/BigDecimal.ts +170 -16
- package/src/Equal.ts +3 -3
- package/src/Hash.ts +5 -4
- package/src/Iterable.ts +8 -5
- package/src/Path.ts +6 -1
- package/src/Pool.ts +2 -1
- package/src/Schema.ts +3 -2
- package/src/SchemaRepresentation.ts +4 -2
- package/src/SchemaTransformation.ts +2 -2
- package/src/ai/McpClient.ts +488 -91
- package/src/ai/McpSchema.ts +119 -0
- package/src/ai/McpServer.ts +261 -38
- package/src/ai/Prompt.ts +16 -11
- package/src/ai/Tool.ts +5 -10
- package/src/ai/internal/mcpCore.ts +165 -12
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +3 -1
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +3 -1
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -1
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -1
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +41 -7
- package/src/ai/internal/mcpProtocol.ts +15 -0
- package/src/ai/internal/mcpRuntime.ts +6 -3
- package/src/ai/internal/mcpSkills.ts +480 -0
- package/src/cluster/ClusterWorkflowEngine.ts +22 -8
- package/src/cluster/Reply.ts +1 -1
- package/src/cluster/Sharding.ts +4 -1
- package/src/cluster/internal/entityManager.ts +24 -10
- package/src/crypto/Aead.ts +3 -3
- package/src/crypto/Cipher.ts +3 -3
- package/src/crypto/KeyAgreement.ts +4 -4
- package/src/crypto/KeyFormat.ts +30 -1
- package/src/crypto/KeyWrap.ts +6 -6
- package/src/crypto/Mac.ts +3 -3
- package/src/crypto/Signature.ts +4 -4
- package/src/crypto/WebCrypto.ts +20 -0
- package/src/crypto/internal/asymmetric.ts +2 -1
- package/src/crypto/internal/key.ts +12 -5
- package/src/encoding/Base64Url.ts +27 -3
- package/src/encoding/Ndjson.ts +6 -5
- package/src/encoding/Sse.ts +5 -3
- package/src/eventlog/EventLog.ts +7 -0
- package/src/eventlog/EventLogServer.ts +31 -12
- package/src/eventlog/EventLogServerEncrypted.ts +5 -0
- package/src/eventlog/EventLogServerUnencrypted.ts +19 -2
- package/src/eventlog/EventLogSessionAuth.ts +26 -0
- package/src/graphql/GraphQLClient.ts +3 -1
- package/src/graphql/GraphQLClientError.ts +15 -22
- package/src/graphql/GraphQLProtocol.ts +12 -3
- package/src/http/HttpClient.ts +210 -11
- package/src/http/HttpServerRequest.ts +61 -23
- package/src/http/internal/mimeTypes.ts +4 -1
- package/src/http-api/HttpApiSchema.ts +1 -1
- package/src/internal/dateTime.ts +54 -24
- package/src/internal/effect.ts +6 -0
- package/src/internal/glob.ts +279 -63
- package/src/internal/graphql.ts +27 -9
- package/src/internal/graphqlHeaders.ts +13 -0
- package/src/internal/request.ts +51 -58
- package/src/internal/schema/fromJsonSchemaDocument.ts +11 -10
- package/src/internal/version.ts +1 -1
- package/src/jose/JoseError.ts +329 -0
- package/src/jose/Jwe.ts +196 -0
- package/src/jose/Jwk.ts +777 -0
- package/src/jose/Jwks.ts +418 -0
- package/src/jose/Jws.ts +312 -0
- package/src/jose/Jwt.ts +493 -0
- package/src/jose/index.ts +58 -0
- package/src/jose/internal/compact.ts +195 -0
- package/src/net/Host.ts +5 -10
- package/src/observability/OtlpSerialization.ts +13 -5
- package/src/observability/internal/otlpProtobuf.ts +6 -6
- package/src/observability/internal/protobuf.ts +10 -0
- package/src/persistence/CircuitBreaker.ts +113 -48
- package/src/persistence/RateLimiter.ts +84 -15
- package/src/persistence/index.ts +1 -1
- package/src/reactivity/AtomRegistry.ts +19 -8
- package/src/rpc/Rpc.ts +3 -1
- package/src/rpc/RpcClient.ts +44 -24
- package/src/rpc/RpcMessage.ts +3 -2
- package/src/sql/Migrator.ts +35 -18
- package/src/sql/SqlClient.ts +43 -8
- package/src/sql/Statement.ts +52 -22
- package/src/workflow/Workflow.ts +4 -0
- package/src/workflow/WorkflowEngine.ts +5 -0
package/dist/jose/Jwt.js
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signed or encrypted compact JSON Web Tokens whose claims are encoded and
|
|
3
|
+
* decoded with a `Schema`.
|
|
4
|
+
*
|
|
5
|
+
* Verification and decryption authenticate the token first, then check the
|
|
6
|
+
* registered claims and the validation policy, and only then decode the
|
|
7
|
+
* application claims. `exp` and `nbf` are checked whenever they are present;
|
|
8
|
+
* require them with `requiredClaims`.
|
|
9
|
+
*
|
|
10
|
+
* Bound untrusted token length before verification, decryption, or unverified
|
|
11
|
+
* decoding; this module does not impose a token-size limit.
|
|
12
|
+
*
|
|
13
|
+
* @stability unstable
|
|
14
|
+
* @since 4.1.1
|
|
15
|
+
*/
|
|
16
|
+
import * as Clock from "../Clock.js";
|
|
17
|
+
import * as Effect from "../Effect.js";
|
|
18
|
+
import * as Schema from "../Schema.js";
|
|
19
|
+
import { fail, invalidToken, millis, parseJsonObject, utf8 } from "./internal/compact.js";
|
|
20
|
+
import * as JoseError from "./JoseError.js";
|
|
21
|
+
import * as Jwe from "./Jwe.js";
|
|
22
|
+
import * as Jws from "./Jws.js";
|
|
23
|
+
/**
|
|
24
|
+
* Schema for the registered claims: string `iss`, `sub`, and `jti`, a string
|
|
25
|
+
* or string array `aud`, and finite NumericDate `exp`, `nbf`, and `iat`.
|
|
26
|
+
*
|
|
27
|
+
* @stability unstable
|
|
28
|
+
* @category schemas
|
|
29
|
+
* @since 4.1.1
|
|
30
|
+
*/
|
|
31
|
+
export const RegisteredClaims = /*#__PURE__*/Schema.Struct({
|
|
32
|
+
iss: /*#__PURE__*/Schema.optionalKey(Schema.String),
|
|
33
|
+
sub: /*#__PURE__*/Schema.optionalKey(Schema.String),
|
|
34
|
+
aud: /*#__PURE__*/Schema.optionalKey(/*#__PURE__*/Schema.Union([Schema.String, /*#__PURE__*/Schema.Array(Schema.String)])),
|
|
35
|
+
exp: /*#__PURE__*/Schema.optionalKey(Schema.Finite),
|
|
36
|
+
nbf: /*#__PURE__*/Schema.optionalKey(Schema.Finite),
|
|
37
|
+
iat: /*#__PURE__*/Schema.optionalKey(Schema.Finite),
|
|
38
|
+
jti: /*#__PURE__*/Schema.optionalKey(Schema.String)
|
|
39
|
+
});
|
|
40
|
+
const claimValidationFailed = (claim, reason) => fail(new JoseError.ClaimValidationFailed({
|
|
41
|
+
claim,
|
|
42
|
+
reason
|
|
43
|
+
}));
|
|
44
|
+
// Each claim is checked on its own so the failure can name it.
|
|
45
|
+
const registeredClaimGuards = /*#__PURE__*/Object.entries(RegisteredClaims.fields).map(([name, field]) => [name, Schema.is(field.schema)]);
|
|
46
|
+
// Durations are read before any cryptography, in seconds.
|
|
47
|
+
const readPolicy = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
48
|
+
const clockTolerance = options?.clockTolerance === undefined ? 0 : yield* millis("clockTolerance", options.clockTolerance);
|
|
49
|
+
const maxTokenAge = options?.maxTokenAge === undefined ? undefined : yield* millis("maxTokenAge", options.maxTokenAge);
|
|
50
|
+
return {
|
|
51
|
+
...options,
|
|
52
|
+
clockTolerance: clockTolerance / 1000,
|
|
53
|
+
maxTokenAge: maxTokenAge === undefined ? undefined : maxTokenAge / 1000
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
const toArray = value => typeof value === "string" ? [value] : value;
|
|
57
|
+
const mediaType = value => {
|
|
58
|
+
const type = value.toLowerCase();
|
|
59
|
+
return type.includes("/") ? type : `application/${type}`;
|
|
60
|
+
};
|
|
61
|
+
const checkClaims = /*#__PURE__*/Effect.fnUntraced(function* (claims, header, policy) {
|
|
62
|
+
const registered = {};
|
|
63
|
+
for (const [name, isValid] of registeredClaimGuards) {
|
|
64
|
+
if (!Object.hasOwn(claims, name)) continue;
|
|
65
|
+
if (!isValid(claims[name])) return yield* claimValidationFailed(name, "invalid");
|
|
66
|
+
registered[name] = claims[name];
|
|
67
|
+
}
|
|
68
|
+
const {
|
|
69
|
+
iss,
|
|
70
|
+
sub,
|
|
71
|
+
aud,
|
|
72
|
+
exp,
|
|
73
|
+
nbf,
|
|
74
|
+
iat
|
|
75
|
+
} = registered;
|
|
76
|
+
for (const name of policy.requiredClaims ?? []) {
|
|
77
|
+
if (registered[name] === undefined) return yield* claimValidationFailed(name, "missing");
|
|
78
|
+
}
|
|
79
|
+
if (policy.issuer !== undefined) {
|
|
80
|
+
if (iss === undefined) return yield* claimValidationFailed("iss", "missing");
|
|
81
|
+
if (!toArray(policy.issuer).includes(iss)) return yield* claimValidationFailed("iss", "mismatch");
|
|
82
|
+
}
|
|
83
|
+
if (policy.subject !== undefined) {
|
|
84
|
+
if (sub === undefined) return yield* claimValidationFailed("sub", "missing");
|
|
85
|
+
if (sub !== policy.subject) return yield* claimValidationFailed("sub", "mismatch");
|
|
86
|
+
}
|
|
87
|
+
if (policy.audience !== undefined) {
|
|
88
|
+
if (aud === undefined) return yield* claimValidationFailed("aud", "missing");
|
|
89
|
+
const audiences = toArray(aud);
|
|
90
|
+
if (!toArray(policy.audience).some(audience => audiences.includes(audience))) {
|
|
91
|
+
return yield* claimValidationFailed("aud", "mismatch");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (policy.typ !== undefined && (header.typ === undefined || mediaType(header.typ) !== mediaType(policy.typ))) {
|
|
95
|
+
return yield* claimValidationFailed("typ", "mismatch");
|
|
96
|
+
}
|
|
97
|
+
const now = Math.floor((yield* Clock.currentTimeMillis) / 1000);
|
|
98
|
+
const tolerance = policy.clockTolerance;
|
|
99
|
+
if (exp !== undefined && exp <= now - tolerance) return yield* claimValidationFailed("exp", "expired");
|
|
100
|
+
if (nbf !== undefined && nbf > now + tolerance) return yield* claimValidationFailed("nbf", "notYetValid");
|
|
101
|
+
if (policy.maxTokenAge !== undefined) {
|
|
102
|
+
if (iat === undefined) return yield* claimValidationFailed("iat", "missing");
|
|
103
|
+
if (iat > now + tolerance) return yield* claimValidationFailed("iat", "future");
|
|
104
|
+
if (now - iat - tolerance > policy.maxTokenAge) return yield* claimValidationFailed("iat", "tooOld");
|
|
105
|
+
}
|
|
106
|
+
return registered;
|
|
107
|
+
});
|
|
108
|
+
const decodeClaims = /*#__PURE__*/Effect.fnUntraced(function* (schema, payload, protectedHeader, policy) {
|
|
109
|
+
const claims = parseJsonObject(payload);
|
|
110
|
+
if (claims === undefined) return yield* invalidToken("The JWT payload is not a JSON object");
|
|
111
|
+
const registeredClaims = yield* checkClaims(claims, protectedHeader, policy);
|
|
112
|
+
return {
|
|
113
|
+
claims: yield* Schema.decodeUnknownEffect(schema)(claims),
|
|
114
|
+
registeredClaims,
|
|
115
|
+
protectedHeader
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
const decodeClaimsJson = /*#__PURE__*/Schema.decodeUnknownEffect(/*#__PURE__*/Schema.JsonObject.check(/*#__PURE__*/Schema.makeFilter(claims => Schema.is(RegisteredClaims)(claims))));
|
|
119
|
+
const encodeClaims = /*#__PURE__*/Effect.fnUntraced(function* (schema, claims) {
|
|
120
|
+
const encoded = yield* Schema.encodeEffect(schema)(claims);
|
|
121
|
+
const json = yield* decodeClaimsJson(encoded);
|
|
122
|
+
return utf8(JSON.stringify(json));
|
|
123
|
+
});
|
|
124
|
+
/**
|
|
125
|
+
* Encodes claims with a schema and signs them as a compact JWT.
|
|
126
|
+
*
|
|
127
|
+
* **Details**
|
|
128
|
+
*
|
|
129
|
+
* The encoded claims must be a JSON object whose registered claims match
|
|
130
|
+
* {@link RegisteredClaims}.
|
|
131
|
+
*
|
|
132
|
+
* @see {@link verify}
|
|
133
|
+
* @see {@link encrypt} for encrypted JWTs
|
|
134
|
+
*
|
|
135
|
+
* @stability unstable
|
|
136
|
+
* @category cryptography
|
|
137
|
+
* @since 4.1.1
|
|
138
|
+
*/
|
|
139
|
+
export const sign = (schema, claims, key, header) => Effect.flatMap(encodeClaims(schema, claims), payload => Jws.sign(payload, key, header));
|
|
140
|
+
/**
|
|
141
|
+
* Verifies a compact JWT with a key, checks its claims against the policy, and
|
|
142
|
+
* decodes the claims with a schema.
|
|
143
|
+
*
|
|
144
|
+
* **Example** (Verifying a token)
|
|
145
|
+
*
|
|
146
|
+
* ```ts import.meta.vitest
|
|
147
|
+
* import { Effect, Layer, Redacted, Schema } from "effect"
|
|
148
|
+
* import { Mac, SecureRandom, Signature } from "effect/crypto"
|
|
149
|
+
* import { Jwk, Jwt } from "effect/jose"
|
|
150
|
+
*
|
|
151
|
+
* const layer = Layer.mergeAll(Mac.layerWebCrypto, Signature.layerWebCrypto).pipe(
|
|
152
|
+
* Layer.provide(SecureRandom.layerWebCrypto)
|
|
153
|
+
* )
|
|
154
|
+
*
|
|
155
|
+
* const Claims = Schema.Struct({ sub: Schema.String, iss: Schema.String })
|
|
156
|
+
*
|
|
157
|
+
* const claims = await Effect.runPromise(Effect.gen(function*() {
|
|
158
|
+
* // Fixed public example material; generate application secrets securely.
|
|
159
|
+
* const key = yield* Jwk.importSecret(
|
|
160
|
+
* Redacted.make({ kty: "oct", k: "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwc" } as const),
|
|
161
|
+
* "HS256"
|
|
162
|
+
* )
|
|
163
|
+
* const token = yield* Jwt.sign(Claims, { sub: "user-123", iss: "example" }, key)
|
|
164
|
+
* const verified = yield* Jwt.verify(Claims, token, key, { issuer: "example", requiredClaims: ["sub"] })
|
|
165
|
+
* return verified.claims
|
|
166
|
+
* }).pipe(Effect.provide(layer)))
|
|
167
|
+
* claims // => ({ sub: "user-123", iss: "example" })
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* @see {@link verifyWithKeySet} for resolving the key from the `Jwks` service
|
|
171
|
+
* @see {@link decrypt} for encrypted JWTs
|
|
172
|
+
*
|
|
173
|
+
* @stability unstable
|
|
174
|
+
* @category cryptography
|
|
175
|
+
* @since 4.1.1
|
|
176
|
+
*/
|
|
177
|
+
export const verify = /*#__PURE__*/Effect.fnUntraced(function* (schema, token, key, options) {
|
|
178
|
+
const policy = yield* readPolicy(options);
|
|
179
|
+
const verified = yield* Jws.verify(token, key);
|
|
180
|
+
return yield* decodeClaims(schema, verified.payload, verified.protectedHeader, policy);
|
|
181
|
+
});
|
|
182
|
+
/**
|
|
183
|
+
* Verifies a compact JWT with a public key resolved from the `Jwks` service,
|
|
184
|
+
* checks its claims against the policy, and decodes the claims with a schema.
|
|
185
|
+
*
|
|
186
|
+
* @see {@link verify} for verifying with a known key
|
|
187
|
+
*
|
|
188
|
+
* @stability unstable
|
|
189
|
+
* @category cryptography
|
|
190
|
+
* @since 4.1.1
|
|
191
|
+
*/
|
|
192
|
+
export const verifyWithKeySet = /*#__PURE__*/Effect.fnUntraced(function* (schema, token, options) {
|
|
193
|
+
const policy = yield* readPolicy(options);
|
|
194
|
+
const verified = yield* Jws.verifyWithKeySet(token, options);
|
|
195
|
+
return {
|
|
196
|
+
...(yield* decodeClaims(schema, verified.payload, verified.protectedHeader, policy)),
|
|
197
|
+
key: verified.key
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
/**
|
|
201
|
+
* Encodes claims with a schema and encrypts them as a compact `dir`/A256GCM
|
|
202
|
+
* JWT.
|
|
203
|
+
*
|
|
204
|
+
* **Details**
|
|
205
|
+
*
|
|
206
|
+
* The encoded claims must be a JSON object whose registered claims match
|
|
207
|
+
* {@link RegisteredClaims}.
|
|
208
|
+
*
|
|
209
|
+
* **Example** (Encrypting and validating application claims)
|
|
210
|
+
*
|
|
211
|
+
* ```ts import.meta.vitest
|
|
212
|
+
* import { Effect, Layer, Redacted, Schema } from "effect"
|
|
213
|
+
* import { Aead, SecureRandom } from "effect/crypto"
|
|
214
|
+
* import { Jwk, Jwt } from "effect/jose"
|
|
215
|
+
*
|
|
216
|
+
* const layer = Aead.layerWebCrypto.pipe(Layer.provideMerge(SecureRandom.layerWebCrypto))
|
|
217
|
+
* const Claims = Schema.Struct({ sub: Schema.String })
|
|
218
|
+
*
|
|
219
|
+
* const claims = await Effect.runPromise(Effect.gen(function*() {
|
|
220
|
+
* // Fixed public example material; generate application secrets securely.
|
|
221
|
+
* const key = yield* Jwk.importSecret(
|
|
222
|
+
* Redacted.make({ kty: "oct", k: "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwc" } as const),
|
|
223
|
+
* "dir"
|
|
224
|
+
* )
|
|
225
|
+
* const token = yield* Jwt.encrypt(Claims, { sub: "user-123" }, key, { typ: "session+jwt" })
|
|
226
|
+
* const decrypted = yield* Jwt.decrypt(Claims, token, key, { typ: "session+jwt" })
|
|
227
|
+
* return decrypted.claims
|
|
228
|
+
* }).pipe(Effect.provide(layer)))
|
|
229
|
+
* claims // => ({ sub: "user-123" })
|
|
230
|
+
* ```
|
|
231
|
+
*
|
|
232
|
+
* @see {@link decrypt}
|
|
233
|
+
* @see {@link sign} for signed JWTs
|
|
234
|
+
*
|
|
235
|
+
* @stability unstable
|
|
236
|
+
* @category cryptography
|
|
237
|
+
* @since 4.1.1
|
|
238
|
+
*/
|
|
239
|
+
export const encrypt = (schema, claims, key, header) => Effect.flatMap(encodeClaims(schema, claims), payload => Jwe.encrypt(payload, key, header));
|
|
240
|
+
/**
|
|
241
|
+
* Decrypts a compact `dir`/A256GCM JWT, checks its claims against the policy,
|
|
242
|
+
* and decodes the claims with a schema.
|
|
243
|
+
*
|
|
244
|
+
* **Details**
|
|
245
|
+
*
|
|
246
|
+
* Accepts a key or an effectful resolver for key rotation. The same claim
|
|
247
|
+
* policy as {@link verify} is applied after authenticated decryption and
|
|
248
|
+
* before the application schema is decoded.
|
|
249
|
+
*
|
|
250
|
+
* **Gotchas**
|
|
251
|
+
*
|
|
252
|
+
* The resolver receives an unauthenticated header and must use it only for
|
|
253
|
+
* key selection.
|
|
254
|
+
*
|
|
255
|
+
* @see {@link encrypt}
|
|
256
|
+
* @see {@link verify} for signed JWTs
|
|
257
|
+
*
|
|
258
|
+
* @stability unstable
|
|
259
|
+
* @category cryptography
|
|
260
|
+
* @since 4.1.1
|
|
261
|
+
*/
|
|
262
|
+
export const decrypt = /*#__PURE__*/Effect.fnUntraced(function* (schema, token, key, options) {
|
|
263
|
+
const policy = yield* readPolicy(options);
|
|
264
|
+
const decrypted = yield* Jwe.decrypt(token, key);
|
|
265
|
+
return {
|
|
266
|
+
...(yield* decodeClaims(schema, decrypted.plaintext, decrypted.protectedHeader, policy)),
|
|
267
|
+
key: decrypted.key
|
|
268
|
+
};
|
|
269
|
+
});
|
|
270
|
+
/**
|
|
271
|
+
* Reads the protected header and claims of a signed JWT without verifying it.
|
|
272
|
+
*
|
|
273
|
+
* **Gotchas**
|
|
274
|
+
*
|
|
275
|
+
* Nothing returned here is authenticated. Use it only to choose how to
|
|
276
|
+
* verify, never to authorize.
|
|
277
|
+
*
|
|
278
|
+
* @see {@link verify}
|
|
279
|
+
*
|
|
280
|
+
* @stability unstable
|
|
281
|
+
* @category decoding
|
|
282
|
+
* @since 4.1.1
|
|
283
|
+
*/
|
|
284
|
+
export const decodeUnverified = /*#__PURE__*/Effect.fnUntraced(function* (token) {
|
|
285
|
+
const parsed = yield* Jws.parse(token);
|
|
286
|
+
const claims = parseJsonObject(parsed.payload);
|
|
287
|
+
if (claims === undefined) return yield* invalidToken("The JWT payload is not a JSON object");
|
|
288
|
+
return {
|
|
289
|
+
protectedHeader: parsed.protectedHeader,
|
|
290
|
+
claims
|
|
291
|
+
};
|
|
292
|
+
});
|
|
293
|
+
//# sourceMappingURL=Jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Jwt.js","names":[],"sources":["../../src/jose/Jwt.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JOSE keys, key sets, signatures, encryption, and schema-typed JSON Web Tokens.
|
|
3
|
+
*
|
|
4
|
+
* `Jwk` imports and exports JSON Web Keys; `Jwks` resolves keys from JSON Web
|
|
5
|
+
* Key Sets. `Jws`, `Jwe`, and `Jwt` handle JSON Web Signatures, JSON Web
|
|
6
|
+
* Encryption, and JSON Web Tokens respectively.
|
|
7
|
+
*
|
|
8
|
+
* The supported profile is compact serialization with HS256/384/512,
|
|
9
|
+
* RS256/384/512, PS256/384/512, ES256/384/512 (P-256/P-384/P-521), and EdDSA
|
|
10
|
+
* (Ed25519) signatures, and `dir`/A256GCM encryption.
|
|
11
|
+
* Other algorithms and JSON serializations are outside this profile.
|
|
12
|
+
* `Jwk` also generates symmetric keys, computes JWK thumbprints, and imports
|
|
13
|
+
* and exports SPKI and PKCS#8 keys in DER or PEM form.
|
|
14
|
+
*
|
|
15
|
+
* Apply an application-specific token-length limit before verification,
|
|
16
|
+
* decryption, or unverified decoding.
|
|
17
|
+
*
|
|
18
|
+
* @stability unstable
|
|
19
|
+
* @since 4.1.1
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* @stability unstable
|
|
23
|
+
* @since 4.1.1
|
|
24
|
+
*/
|
|
25
|
+
export * as JoseError from "./JoseError.ts";
|
|
26
|
+
/**
|
|
27
|
+
* @stability unstable
|
|
28
|
+
* @since 4.1.1
|
|
29
|
+
*/
|
|
30
|
+
export * as Jwe from "./Jwe.ts";
|
|
31
|
+
/**
|
|
32
|
+
* @stability unstable
|
|
33
|
+
* @since 4.1.1
|
|
34
|
+
*/
|
|
35
|
+
export * as Jwk from "./Jwk.ts";
|
|
36
|
+
/**
|
|
37
|
+
* @stability unstable
|
|
38
|
+
* @since 4.1.1
|
|
39
|
+
*/
|
|
40
|
+
export * as Jwks from "./Jwks.ts";
|
|
41
|
+
/**
|
|
42
|
+
* @stability unstable
|
|
43
|
+
* @since 4.1.1
|
|
44
|
+
*/
|
|
45
|
+
export * as Jws from "./Jws.ts";
|
|
46
|
+
/**
|
|
47
|
+
* @stability unstable
|
|
48
|
+
* @since 4.1.1
|
|
49
|
+
*/
|
|
50
|
+
export * as Jwt from "./Jwt.ts";
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jose/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH;;;GAGG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;GAGG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;GAGG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;GAGG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;GAGG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JOSE keys, key sets, signatures, encryption, and schema-typed JSON Web Tokens.
|
|
3
|
+
*
|
|
4
|
+
* `Jwk` imports and exports JSON Web Keys; `Jwks` resolves keys from JSON Web
|
|
5
|
+
* Key Sets. `Jws`, `Jwe`, and `Jwt` handle JSON Web Signatures, JSON Web
|
|
6
|
+
* Encryption, and JSON Web Tokens respectively.
|
|
7
|
+
*
|
|
8
|
+
* The supported profile is compact serialization with HS256/384/512,
|
|
9
|
+
* RS256/384/512, PS256/384/512, ES256/384/512 (P-256/P-384/P-521), and EdDSA
|
|
10
|
+
* (Ed25519) signatures, and `dir`/A256GCM encryption.
|
|
11
|
+
* Other algorithms and JSON serializations are outside this profile.
|
|
12
|
+
* `Jwk` also generates symmetric keys, computes JWK thumbprints, and imports
|
|
13
|
+
* and exports SPKI and PKCS#8 keys in DER or PEM form.
|
|
14
|
+
*
|
|
15
|
+
* Apply an application-specific token-length limit before verification,
|
|
16
|
+
* decryption, or unverified decoding.
|
|
17
|
+
*
|
|
18
|
+
* @stability unstable
|
|
19
|
+
* @since 4.1.1
|
|
20
|
+
*/
|
|
21
|
+
// @barrel
|
|
22
|
+
/**
|
|
23
|
+
* @stability unstable
|
|
24
|
+
* @since 4.1.1
|
|
25
|
+
*/
|
|
26
|
+
export * as JoseError from "./JoseError.js";
|
|
27
|
+
/**
|
|
28
|
+
* @stability unstable
|
|
29
|
+
* @since 4.1.1
|
|
30
|
+
*/
|
|
31
|
+
export * as Jwe from "./Jwe.js";
|
|
32
|
+
/**
|
|
33
|
+
* @stability unstable
|
|
34
|
+
* @since 4.1.1
|
|
35
|
+
*/
|
|
36
|
+
export * as Jwk from "./Jwk.js";
|
|
37
|
+
/**
|
|
38
|
+
* @stability unstable
|
|
39
|
+
* @since 4.1.1
|
|
40
|
+
*/
|
|
41
|
+
export * as Jwks from "./Jwks.js";
|
|
42
|
+
/**
|
|
43
|
+
* @stability unstable
|
|
44
|
+
* @since 4.1.1
|
|
45
|
+
*/
|
|
46
|
+
export * as Jws from "./Jws.js";
|
|
47
|
+
/**
|
|
48
|
+
* @stability unstable
|
|
49
|
+
* @since 4.1.1
|
|
50
|
+
*/
|
|
51
|
+
export * as Jwt from "./Jwt.js";
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/jose/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;AAqBA;AAEA;;;;AAIA,OAAO,KAAK,SAAS,MAAM,gBAAgB;AAE3C;;;;AAIA,OAAO,KAAK,GAAG,MAAM,UAAU;AAE/B;;;;AAIA,OAAO,KAAK,GAAG,MAAM,UAAU;AAE/B;;;;AAIA,OAAO,KAAK,IAAI,MAAM,WAAW;AAEjC;;;;AAIA,OAAO,KAAK,GAAG,MAAM,UAAU;AAE/B;;;;AAIA,OAAO,KAAK,GAAG,MAAM,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../../src/jose/internal/compact.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import * as Duration from "../../Duration.js";
|
|
2
|
+
import * as Effect from "../../Effect.js";
|
|
3
|
+
import * as Base64Url from "../../encoding/Base64Url.js";
|
|
4
|
+
import * as Option from "../../Option.js";
|
|
5
|
+
import * as Redacted from "../../Redacted.js";
|
|
6
|
+
import * as Result from "../../Result.js";
|
|
7
|
+
import * as Schema from "../../Schema.js";
|
|
8
|
+
import * as JoseError from "../JoseError.js";
|
|
9
|
+
/** @internal */
|
|
10
|
+
export const fail = reason => Effect.fail(new JoseError.JoseError({
|
|
11
|
+
reason
|
|
12
|
+
}));
|
|
13
|
+
/** @internal */
|
|
14
|
+
export const invalidToken = description => fail(new JoseError.InvalidToken({
|
|
15
|
+
description
|
|
16
|
+
}));
|
|
17
|
+
/** @internal */
|
|
18
|
+
export const invalidKey = (description, cause) => fail(new JoseError.InvalidKey({
|
|
19
|
+
description,
|
|
20
|
+
cause
|
|
21
|
+
}));
|
|
22
|
+
/** @internal */
|
|
23
|
+
export const invalidArgument = (description, cause) => fail(new JoseError.InvalidArgument({
|
|
24
|
+
description,
|
|
25
|
+
cause
|
|
26
|
+
}));
|
|
27
|
+
/**
|
|
28
|
+
* Maps a failure of an operation on secret material, such as signing or
|
|
29
|
+
* private-key import, to a fixed description. Backend messages and causes may
|
|
30
|
+
* describe the secret, so they are dropped.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export const cryptoFailure = description => _ => new JoseError.JoseError({
|
|
35
|
+
reason: new JoseError.InvalidKey({
|
|
36
|
+
description
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Maps a public-key import failure, keeping the backend diagnostic.
|
|
41
|
+
*
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
export const publicKeyFailure = error => new JoseError.JoseError({
|
|
45
|
+
reason: new JoseError.InvalidKey({
|
|
46
|
+
description: error.message,
|
|
47
|
+
cause: error
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Schema fields that keep private and symmetric key members out of a public
|
|
52
|
+
* JWK.
|
|
53
|
+
*
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export const noPrivateMembers = {
|
|
57
|
+
d: /*#__PURE__*/Schema.optionalKey(Schema.Never),
|
|
58
|
+
p: /*#__PURE__*/Schema.optionalKey(Schema.Never),
|
|
59
|
+
q: /*#__PURE__*/Schema.optionalKey(Schema.Never),
|
|
60
|
+
dp: /*#__PURE__*/Schema.optionalKey(Schema.Never),
|
|
61
|
+
dq: /*#__PURE__*/Schema.optionalKey(Schema.Never),
|
|
62
|
+
qi: /*#__PURE__*/Schema.optionalKey(Schema.Never),
|
|
63
|
+
oth: /*#__PURE__*/Schema.optionalKey(Schema.Never),
|
|
64
|
+
k: /*#__PURE__*/Schema.optionalKey(Schema.Never)
|
|
65
|
+
};
|
|
66
|
+
/** @internal */
|
|
67
|
+
export const hasPrivateMembers = jwk => Object.keys(noPrivateMembers).some(name => Object.hasOwn(jwk, name));
|
|
68
|
+
/** @internal */
|
|
69
|
+
export const utf8 = text => new TextEncoder().encode(text);
|
|
70
|
+
/** @internal */
|
|
71
|
+
export const reveal = token => Redacted.isRedacted(token) ? Redacted.value(token) : token;
|
|
72
|
+
/**
|
|
73
|
+
* Checks unpadded base64url, including the unused bits in the final character.
|
|
74
|
+
*
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
export const isCanonicalSegment = segment => {
|
|
78
|
+
if (/[^A-Za-z0-9_-]/.test(segment)) return false;
|
|
79
|
+
const remainder = segment.length % 4;
|
|
80
|
+
const last = segment.charAt(segment.length - 1);
|
|
81
|
+
return remainder === 0 || (remainder === 2 ? "AQgw".includes(last) : remainder === 3 && "AEIMQUYcgkosw048".includes(last));
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Decodes canonical unpadded base64url.
|
|
85
|
+
*
|
|
86
|
+
* @internal
|
|
87
|
+
*/
|
|
88
|
+
export const decodeSegment = segment => {
|
|
89
|
+
if (!isCanonicalSegment(segment)) return undefined;
|
|
90
|
+
const decoded = Base64Url.decode(segment);
|
|
91
|
+
return Result.isSuccess(decoded) ? decoded.success : undefined;
|
|
92
|
+
};
|
|
93
|
+
/** @internal */
|
|
94
|
+
export const parseJsonObject = bytes => {
|
|
95
|
+
try {
|
|
96
|
+
const value = JSON.parse(new TextDecoder("utf-8", {
|
|
97
|
+
fatal: true
|
|
98
|
+
}).decode(bytes));
|
|
99
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : undefined;
|
|
100
|
+
} catch {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Splits a compact serialization into exactly `count` segments.
|
|
106
|
+
*
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
109
|
+
export const split = (token, count) => {
|
|
110
|
+
const parts = reveal(token).split(".");
|
|
111
|
+
return parts.length === count ? Effect.succeed(parts) : invalidToken(`A compact serialization must have ${count} segments`);
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Decodes a protected header. Parameters in `unsupported` change how the
|
|
115
|
+
* token is processed, so they are rejected rather than ignored.
|
|
116
|
+
*
|
|
117
|
+
* @internal
|
|
118
|
+
*/
|
|
119
|
+
export const decodeHeader = (segment, decode, unsupported) => {
|
|
120
|
+
const bytes = decodeSegment(segment);
|
|
121
|
+
const json = bytes === undefined ? undefined : parseJsonObject(bytes);
|
|
122
|
+
if (json === undefined) return invalidToken("The protected header is not a base64url JSON object");
|
|
123
|
+
for (const name of unsupported) {
|
|
124
|
+
if (Object.hasOwn(json, name)) return invalidToken(`The ${name} header parameter is not supported`);
|
|
125
|
+
}
|
|
126
|
+
return Option.match(decode(json), {
|
|
127
|
+
onNone: () => invalidToken("The protected header has unsupported or malformed parameters"),
|
|
128
|
+
onSome: Effect.succeed
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Base64url-encodes a protected header. Fixed parameters come first and
|
|
133
|
+
* cannot be overridden by additional parameters.
|
|
134
|
+
*
|
|
135
|
+
* @internal
|
|
136
|
+
*/
|
|
137
|
+
export const encodeHeader = (fixed, kid, header, unsupported) => {
|
|
138
|
+
for (const name of unsupported) {
|
|
139
|
+
if (header !== undefined && Object.hasOwn(header, name)) {
|
|
140
|
+
return invalidArgument(`The ${name} header parameter is not supported`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const {
|
|
144
|
+
kid: headerKid,
|
|
145
|
+
...rest
|
|
146
|
+
} = header ?? {};
|
|
147
|
+
const value = {
|
|
148
|
+
...fixed,
|
|
149
|
+
kid: headerKid ?? kid,
|
|
150
|
+
...rest,
|
|
151
|
+
...fixed
|
|
152
|
+
};
|
|
153
|
+
try {
|
|
154
|
+
return Effect.succeed(Base64Url.encode(JSON.stringify(value)));
|
|
155
|
+
} catch {
|
|
156
|
+
return invalidArgument("The protected header is not JSON serializable");
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Reads a finite, non-negative duration in milliseconds.
|
|
161
|
+
*
|
|
162
|
+
* @internal
|
|
163
|
+
*/
|
|
164
|
+
export const millis = (name, input) => {
|
|
165
|
+
const value = hasInvalidComponent(input) ? Option.none() : Option.map(Duration.fromInput(input), Duration.toMillis);
|
|
166
|
+
return Option.isSome(value) && Number.isFinite(value.value) && value.value >= 0 ? Effect.succeed(value.value) : invalidArgument(`${name} must be a finite, non-negative duration`);
|
|
167
|
+
};
|
|
168
|
+
// `Duration` reads NaN as zero in every input form, and components that are
|
|
169
|
+
// not finite or overflow on conversion add up to NaN. Either would silently
|
|
170
|
+
// disable a bound.
|
|
171
|
+
const hasInvalidComponent = input => {
|
|
172
|
+
if (typeof input === "number") return Number.isNaN(input);
|
|
173
|
+
if (typeof input !== "object" || Duration.isDuration(input)) return false;
|
|
174
|
+
if (Array.isArray(input)) return input.some(component => !Number.isFinite(component));
|
|
175
|
+
return Object.entries(input).some(([unit, component]) => typeof component === "number" && (!Number.isFinite(component) || !Number.isFinite(Duration.toMillis({
|
|
176
|
+
[unit]: component
|
|
177
|
+
}))));
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=compact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact.js","names":[],"sources":["../../../src/jose/internal/compact.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/net/Host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Host.d.ts","sourceRoot":"","sources":["../../src/net/Host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,GAAG,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,KAAK,KAAK,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,IAAI,MAAM,YAAY,CAAA;AAClC,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAEhD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,QAAA,MAAM,MAAM,EAAG,kBAA2B,CAAA;AAE1C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;AAE7E;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,CAAA;AAEjD;;;;;;;;GAQG;AACH,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,iBAAiB,GAAG,UAAU,CAAA;AAEnF;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,UAAU,CAAC,cAAc,CAAA;AAExD;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAS,SAAQ,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW;IAC/E,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,MAAM,CAAA;CACjC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"Host.d.ts","sourceRoot":"","sources":["../../src/net/Host.ts"],"names":[],"mappings":"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"}
|
package/dist/net/Host.js
CHANGED
|
@@ -9,7 +9,8 @@ const hostError = (input, message) => Result.fail(new NetAddress.NetAddressError
|
|
|
9
9
|
input,
|
|
10
10
|
message
|
|
11
11
|
}));
|
|
12
|
-
const
|
|
12
|
+
const asciiName = /^[a-z0-9_.-]*$/i;
|
|
13
|
+
const nonAscii = /[\u0080-\uffff]/g;
|
|
13
14
|
const labelPattern = /^[a-z0-9_](?:[a-z0-9_-]{0,61}[a-z0-9_])?$/;
|
|
14
15
|
const numericLabel = /^(?:\d+|0x[0-9a-f]*)$/;
|
|
15
16
|
const validateDomainName = name => {
|
|
@@ -31,15 +32,9 @@ const validateDomainName = name => {
|
|
|
31
32
|
return undefined;
|
|
32
33
|
};
|
|
33
34
|
const toAsciiDomainName = input => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (!asciiNameCharacter.test(character)) return undefined;
|
|
38
|
-
} else {
|
|
39
|
-
ascii = false;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (ascii) return input.toLowerCase();
|
|
35
|
+
if (asciiName.test(input)) return input.toLowerCase();
|
|
36
|
+
// Check the composed form, so that `=\u0338` is read as `≠`
|
|
37
|
+
if (!asciiName.test(input.normalize("NFC").replace(nonAscii, ""))) return undefined;
|
|
43
38
|
try {
|
|
44
39
|
return new URL(`http://${input}`).hostname;
|
|
45
40
|
} catch {
|