Skip to content

Commit

Permalink
revert: Revert "fix(types): headers and payloads may only be JSON val…
Browse files Browse the repository at this point in the history
…ues and primitives"

This reverts commit 24f306e.

Closes #534
  • Loading branch information
panva committed Apr 27, 2023
1 parent ec4762d commit 06d8101
Show file tree
Hide file tree
Showing 12 changed files with 14 additions and 108 deletions.
4 changes: 0 additions & 4 deletions docs/modules/types.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ Support from the community to continue maintaining and improving this module is

### Type Aliases

- [JsonArray](../types/types.JsonArray.md)
- [JsonObject](../types/types.JsonObject.md)
- [JsonPrimitive](../types/types.JsonPrimitive.md)
- [JsonValue](../types/types.JsonValue.md)
- [KeyLike](../types/types.KeyLike.md)

### Interfaces
Expand Down
9 changes: 0 additions & 9 deletions docs/types/types.JsonArray.md

This file was deleted.

9 changes: 0 additions & 9 deletions docs/types/types.JsonObject.md

This file was deleted.

9 changes: 0 additions & 9 deletions docs/types/types.JsonPrimitive.md

This file was deleted.

9 changes: 0 additions & 9 deletions docs/types/types.JsonValue.md

This file was deleted.

3 changes: 1 addition & 2 deletions src/jwe/flattened/encrypt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import encrypt from '../../runtime/encrypt.js'
import { deflate } from '../../runtime/zlib.js'

import type {
JsonValue,
KeyLike,
FlattenedJWE,
JWEHeaderParameters,
Expand Down Expand Up @@ -226,7 +225,7 @@ export class FlattenedEncrypt {

let cek: KeyLike | Uint8Array
{
let parameters: { [parameter: string]: JsonValue | undefined } | undefined
let parameters: { [propName: string]: unknown } | undefined
;({ cek, encryptedKey, parameters } = await encryptKeyManagement(
alg,
enc,
Expand Down
3 changes: 1 addition & 2 deletions src/lib/jwt_claims_set.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type {
JsonValue,
JWTPayload,
JWTClaimVerificationOptions,
JWEHeaderParameters,
Expand Down Expand Up @@ -41,7 +40,7 @@ export default (
throw new JWTClaimValidationFailed('unexpected "typ" JWT header value', 'typ', 'check_failed')
}

let payload!: { [propName: string]: JsonValue | undefined }
let payload!: { [propName: string]: unknown }
try {
payload = JSON.parse(decoder.decode(encodedPayload))
} catch {
Expand Down
3 changes: 1 addition & 2 deletions src/lib/validate_crit.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import type { JsonValue } from '../types.d'
import { JOSENotSupported, JWEInvalid, JWSInvalid } from '../util/errors.js'

interface CritCheckHeader {
b64?: boolean
crit?: string[]
[propName: string]: JsonValue | undefined
[propName: string]: unknown
}

function validateCrit(
Expand Down
6 changes: 2 additions & 4 deletions src/runtime/interfaces.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { JWK, KeyLike, JsonValue } from '../types.d'
import type { JWK, KeyLike } from '../types.d'
import type { PEMImportOptions } from '../key/import.js'

type AsyncOrSync<T> = Promise<T> | T
Expand Down Expand Up @@ -57,9 +57,7 @@ export interface DecryptFunction {
): AsyncOrSync<Uint8Array>
}
export interface FetchFunction {
(url: URL, timeout: number, options?: any): Promise<{
[parameter: string]: JsonValue | undefined
}>
(url: URL, timeout: number, options?: any): Promise<{ [propName: string]: unknown }>
}
export interface DigestFunction {
(digest: 'sha256' | 'sha384' | 'sha512', data: Uint8Array): AsyncOrSync<Uint8Array>
Expand Down
8 changes: 4 additions & 4 deletions src/runtime/node/key_to_jwk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ const keyToJWK: JWKExportFunction = (key: unknown): JWK => {
) {
throw new JOSENotSupported('Unsupported key asymmetricKeyType')
}
return <JWK>keyObject.export({ format: 'jwk' })
return keyObject.export({ format: 'jwk' })
}

switch (keyObject.type) {
Expand Down Expand Up @@ -112,7 +112,7 @@ const keyToJWK: JWKExportFunction = (key: unknown): JWK => {
if (der.length < 100) {
offset += correction
}
return <JWK>{
return {
...keyToJWK(createPublicKey(keyObject)),
d: base64url(der.subarray(offset, offset + len / 2)),
}
Expand All @@ -130,7 +130,7 @@ const keyToJWK: JWKExportFunction = (key: unknown): JWK => {
}

const der = keyObject.export({ type: 'pkcs8', format: 'der' })
return <JWK>{
return {
...keyToJWK(createPublicKey(keyObject)),
d: base64url(der.subarray(-32)),
}
Expand All @@ -148,7 +148,7 @@ const keyToJWK: JWKExportFunction = (key: unknown): JWK => {
}

const der = keyObject.export({ type: 'pkcs8', format: 'der' })
return <JWK>{
return {
...keyToJWK(createPublicKey(keyObject)),
d: base64url(der.subarray(crv === 'Ed448' ? -57 : -56)),
}
Expand Down
13 changes: 4 additions & 9 deletions src/types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,6 @@
*/
export type KeyLike = { type: string }

type JsonObject = { [Key in string]?: JsonValue }
type JsonArray = JsonValue[]
type JsonPrimitive = string | number | boolean | null
type JsonValue = JsonPrimitive | JsonObject | JsonArray

/**
* JSON Web Key ({@link https://www.rfc-editor.org/rfc/rfc7517 JWK}). "RSA", "EC", "OKP", and "oct"
* key types are supported.
Expand Down Expand Up @@ -139,7 +134,7 @@ export interface JWK {
/** JWK "x5u" (X.509 URL) Parameter. */
x5u?: string

[propName: string]: JsonValue | undefined
[propName: string]: unknown
}

/**
Expand Down Expand Up @@ -263,7 +258,7 @@ export interface JWSHeaderParameters extends JoseHeaderParameters {
crit?: string[]

/** Any other JWS Header member. */
[propName: string]: JsonValue | undefined
[propName: string]: unknown
}

/** Recognized JWE Key Management-related Header Parameters. */
Expand Down Expand Up @@ -371,7 +366,7 @@ export interface JWEHeaderParameters extends JoseHeaderParameters {
zip?: string

/** Any other JWE Header member. */
[propName: string]: JsonValue | undefined
[propName: string]: unknown
}

/** Shared Interface with a "crit" property for all sign, verify, encrypt and decrypt operations. */
Expand Down Expand Up @@ -545,7 +540,7 @@ export interface JWTPayload {
iat?: number

/** Any other JWT Claim Set member. */
[propName: string]: JsonValue | undefined
[propName: string]: unknown
}

/**
Expand Down
46 changes: 1 addition & 45 deletions test/types/index.test-d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { KeyObject } from 'crypto'
import { expectError, expectType } from 'tsd'
import { expectType } from 'tsd'

import * as lib from '../../dist/types'

Expand Down Expand Up @@ -208,47 +208,3 @@ expectType<KeyObject>(await lib.createRemoteJWKSet<KeyObject>(new URL(''))())
expectType<lib.KeyLike>(await lib.EmbeddedJWK())
expectType<CryptoKey>(await lib.EmbeddedJWK())
expectType<KeyObject>(await lib.EmbeddedJWK())

{
const result = await lib.jwtVerify('', new Uint8Array())
switch (typeof result.payload.unknown) {
case 'bigint':
case 'function':
case 'symbol':
expectType<never>(result.payload.unknown)
}

switch (typeof result.protectedHeader.unknown) {
case 'bigint':
case 'function':
case 'symbol':
expectType<never>(result.protectedHeader.unknown)
}
}

{
const result = await lib.decodeJwt('')
switch (typeof result.unknown) {
case 'bigint':
case 'function':
case 'symbol':
expectType<never>(result.unknown)
}
}

{
const result = await lib.decodeProtectedHeader('')
switch (typeof result.unknown) {
case 'bigint':
case 'function':
case 'symbol':
expectType<never>(result.unknown)
}
}

expectError(new lib.SignJWT({ foo() {} }))
expectError(new lib.SignJWT({}).setProtectedHeader({ foo() {} }))
expectError(new lib.SignJWT({ foo: Symbol() }))
expectError(new lib.SignJWT({}).setProtectedHeader({ foo: Symbol() }))
expectError(new lib.SignJWT({ foo: 0n }))
expectError(new lib.SignJWT({}).setProtectedHeader({ foo: 0n }))

0 comments on commit 06d8101

Please sign in to comment.