Skip to content

Commit

Permalink
Release 1.4.0 (#16)
Browse files Browse the repository at this point in the history
  • Loading branch information
MagnunAVFAzion authored Jul 25, 2024
1 parent 3af234d commit e0411a1
Show file tree
Hide file tree
Showing 21 changed files with 2,141 additions and 385 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
## [1.4.0-stage.1](https://github.com/aziontech/lib/compare/v1.3.0...v1.4.0-stage.1) (2024-07-25)


### Features

* create jwt package (#11) ([b78f30e](https://github.com/aziontech/lib/commit/b78f30eb8def541f0b829bd9f06afacac72a0ab5))

## [1.3.0](https://github.com/aziontech/lib/compare/v1.2.0...v1.3.0) (2024-07-18)


Expand Down
968 changes: 584 additions & 384 deletions package-lock.json

Large diffs are not rendered by default.

10 changes: 9 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "azion",
"version": "1.3.0",
"version": "1.4.0-stage.1",
"description": "Azion Packages for Edge Computing.",
"scripts": {
"prepare": "husky",
Expand Down Expand Up @@ -95,6 +95,11 @@
"import": "./packages/cookies/dist/index.mjs",
"types": "./packages/cookies/dist/index.d.ts"
},
"./jwt": {
"require": "./packages/jwt/dist/index.js",
"import": "./packages/jwt/dist/index.mjs",
"types": "./packages/jwt/dist/index.d.ts"
},
"./purge": {
"require": "./packages/purge/dist/index.js",
"import": "./packages/purge/dist/index.mjs",
Expand Down Expand Up @@ -128,6 +133,9 @@
"cookies": [
"./packages/cookies/dist/index.d.ts"
],
"jwt": [
"./packages/jwt/dist/index.d.ts"
],
"router": [
"./packages/router/dist/index.d.ts"
],
Expand Down
8 changes: 8 additions & 0 deletions packages/jwt/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# dependencies
node_modules

# builded
dist

# mac files
.DS_Store
218 changes: 218 additions & 0 deletions packages/jwt/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
# Azion JWT Library

The Azion JWT Library provides utility functions for signing, verifying, and decoding JSON Web Tokens (JWTs). This library ensures ease of use and security when handling JWTs in web applications.

## Table of Contents

- [Installation](#installation)
- [Usage](#usage)
- [Sign JWT](#sign-jwt)
- [Verify JWT](#verify-jwt)
- [Decode JWT](#decode-jwt)
- [API Reference](#api-reference)
- [`sign`](#sign)
- [`verify`](#verify)
- [`decode`](#decode)
- [Types](#types)
- [`JWTPayload`](#jwtpayload)
- [`TokenHeader`](#tokenheader)
- [Errors](#errors)
- [`JwtAlgorithmNotImplemented`](#jwtalgorithmnotimplemented)
- [`JwtTokenInvalid`](#jwttokeninvalid)
- [`JwtTokenNotBefore`](#jwttokennotbefore)
- [`JwtTokenExpired`](#jwttokenexpired)
- [`JwtTokenIssuedAt`](#jwttokenissuedat)
- [`JwtHeaderInvalid`](#jwtheaderinvalid)
- [`JwtTokenSignatureMismatched`](#jwttokensignaturemismatched)
- [Contributing](#contributing)

## Installation

Install the package using npm or yarn:

```sh
npm install azion
```

or

```sh
yarn add azion
```

## Usage

### Sign JWT

**JavaScript:**

```javascript
import { sign } from 'azion/jwt';

const privateKey = 'your-private-key';
const payload = { userId: 123, exp: Math.floor(Date.now() / 1000) + 3600 }; // 1 hour expiration
sign(payload, privateKey).then((token) => console.log(token)); // Outputs the signed JWT
```

**TypeScript:**

```typescript
import { sign } from 'azion/jwt';
import type { JWTPayload } from 'azion/jwt/types';

const privateKey: string = 'your-private-key';
const payload: JWTPayload = { userId: 123, exp: Math.floor(Date.now() / 1000) + 3600 }; // 1 hour expiration
sign(payload, privateKey).then((token: string) => console.log(token)); // Outputs the signed JWT
```

### Verify JWT

**JavaScript:**

```javascript
import { verify } from 'azion/jwt';

const publicKey = 'your-public-key';
const token = 'your-jwt-token';
verify(token, publicKey)
.then((payload) => console.log(payload))
.catch((err) => console.error(err)); // Outputs the payload if verification is successful
```

**TypeScript:**

```typescript
import { verify } from 'azion/jwt';
import type { JWTPayload } from 'azion/jwt/types';

const publicKey: string = 'your-public-key';
const token: string = 'your-jwt-token';
verify(token, publicKey)
.then((payload: JWTPayload) => console.log(payload))
.catch((err) => console.error(err)); // Outputs the payload if verification is successful
```

### Decode JWT

**JavaScript:**

```javascript
import { decode } from 'azion/jwt';

const token = 'your-jwt-token';
const { header, payload } = decode(token);
console.log(header, payload); // Outputs the decoded header and payload
```

**TypeScript:**

```typescript
import { decode } from 'azion/jwt';
import type { TokenHeader, JWTPayload } from 'azion/jwt/types';

const token: string = 'your-jwt-token';
const { header, payload }: { header: TokenHeader; payload: JWTPayload } = decode(token);
console.log(header, payload); // Outputs the decoded header and payload
```

## API Reference

### `sign`

Signs a JWT payload with the specified algorithm and private key.

**Parameters:**

- `payload: JWTPayload` - The payload to be signed.
- `privateKey: SignatureKey` - The private key used for signing.
- `alg?: SignatureAlgorithm` - The algorithm to use for signing (default is `'HS256'`).

**Returns:**

- `Promise<string>` - The signed JWT.

### `verify`

Verifies a JWT using the specified public key and algorithm.

**Parameters:**

- `token: string` - The JWT to verify.
- `publicKey: SignatureKey` - The public key used for verification.
- `alg?: SignatureAlgorithm` - The algorithm to use for verification (default is `'HS256'`).

**Returns:**

- `Promise<JWTPayload>` - The decoded payload if the token is valid.

### `decode`

Decodes a JWT without verifying its signature.

**Parameters:**

- `token: string` - The JWT to decode.

**Returns:**

- `{ header: TokenHeader; payload: JWTPayload }` - The decoded header and payload.

## Types

### `JWTPayload`

Defines the structure of the JWT payload.

```typescript
type JWTPayload = {
[key: string]: unknown;
exp?: number;
nbf?: number;
iat?: number;
};
```

### `TokenHeader`

Defines the structure of the JWT header.

```typescript
interface TokenHeader {
alg: SignatureAlgorithm;
typ?: 'JWT';
}
```

## Errors

### `JwtAlgorithmNotImplemented`

Thrown when an algorithm is not implemented.

### `JwtTokenInvalid`

Thrown when a JWT is invalid.

### `JwtTokenNotBefore`

Thrown when a JWT is used before its `nbf` claim.

### `JwtTokenExpired`

Thrown when a JWT has expired.

### `JwtTokenIssuedAt`

Thrown when a JWT `iat` claim is in the future.

### `JwtHeaderInvalid`

Thrown when a JWT header is invalid.

### `JwtTokenSignatureMismatched`

Thrown when a JWT signature does not match.

## Contributing

Feel free to submit issues or pull requests to improve the functionality or documentation.
22 changes: 22 additions & 0 deletions packages/jwt/jest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* For a detailed explanation regarding each configuration property, visit:
* https://jestjs.io/docs/configuration
*/

import type { Config } from 'jest';

const config: Config = {
clearMocks: true,
coverageProvider: 'v8',
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ['**/?(*.)+(spec|test).[tj]s?(x)'],
testPathIgnorePatterns: ['/node_modules/'],
transform: {
'^.+\\.ts$': 'ts-jest',
},
transformIgnorePatterns: ['<rootDir>/node_modules/'],
setupFilesAfterEnv: ['./jest.setup.ts'],
};

export default config;
4 changes: 4 additions & 0 deletions packages/jwt/jest.setup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { Crypto, CryptoKey } from '@peculiar/webcrypto';

globalThis.crypto = new Crypto();
globalThis.CryptoKey = CryptoKey;
38 changes: 38 additions & 0 deletions packages/jwt/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"name": "@lib/jwt",
"version": "1.0.0",
"description": "",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"scripts": {
"compile": "tsup --config ../../tsup.config.json",
"lint": "eslint .",
"lint:fix": "eslint --fix .",
"prettier": "prettier --write .",
"prettier:check": "prettier --check .",
"test": "jest"
},
"types": "./dist/index.d.ts",
"exports": {
".": {
"require": "./dist/index.js",
"import": "./dist/index.mjs",
"types": "./dist/index.d.ts"
}
},
"author": "aziontech",
"license": "MIT",
"files": [
"dist",
"package.json"
],
"devDependencies": {
"@jest/globals": "^29.7.0",
"@peculiar/webcrypto": "^1.5.0",
"@types/jest": "^29.5.12",
"jest": "^29.7.0",
"ts-jest": "^29.2.2",
"ts-node": "^10.9.2",
"typescript": "^5.5.3"
}
}
Loading

0 comments on commit e0411a1

Please sign in to comment.