Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 75 additions & 24 deletions bower.json
Original file line number Diff line number Diff line change
@@ -1,26 +1,77 @@
{
"name": "purescript-node-jwt",
"license": [
"MIT"
],
"repository": {
"type": "git",
"url": "https://github.com/gaku-sei/purescript-node-jwt"
},
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"output"
],
"dependencies": {
"purescript-aff": "^v5.1.2",
"purescript-aff-promise": "^v2.1.0",
"purescript-console": "^v4.4.0",
"purescript-effect": "^v2.0.1",
"purescript-foreign-generic": "^v10.0.0",
"purescript-generics-rep": "^v6.1.1",
"purescript-newtype": "^v3.0.0",
"purescript-psci-support": "^v4.0.0"
}
"name": "purescript-node-jwt",
"license": [
"MIT"
],
"repository": {
"type": "git",
"url": "https://github.com/gaku-sei/purescript-node-jwt"
},
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"output"
],
"dependencies": {
"purescript-aff": "^v7.0.0",
"purescript-aff-promise": "^v4.0.0",
"purescript-effect": "^v4.0.0",
"purescript-bifunctors": "^6.0.0",
"purescript-contravariant": "^6.0.0",
"purescript-control": "^6.0.0",
"purescript-datetime": "^6.0.0",
"purescript-either": "^6.0.0",
"purescript-foldable-traversable": "^6.0.0",
"purescript-foreign": "^7.0.0",
"purescript-foreign-generic": "https://github.com/working-group-purescript-es/purescript-foreign-generic.git#v0.15.0-updates",
"purescript-options": "^7.0.0",
"purescript-record": "^4.0.0",
"purescript-math": "https://github.com/purescript/purescript-math.git#c052d221193d25255f6b9024df8df174e54dc550"
},
"resolutions": {
"purescript-tuples": "^7.0.0",
"purescript-invariant": "^6.0.0",
"purescript-unfoldable": "^6.0.0",
"purescript-bifunctors": "^6.0.0",
"purescript-const": "^6.0.0",
"purescript-control": "^6.0.0",
"purescript-enums": "^6.0.0",
"purescript-gen": "^4.0.0",
"purescript-identity": "^6.0.0",
"purescript-integers": "^6.0.0",
"purescript-lists": "^7.0.0",
"purescript-lazy": "^6.0.0",
"purescript-numbers": "^9.0.0",
"purescript-ordered-collections": "^3.0.0",
"purescript-either": "^6.0.0",
"purescript-exceptions": "^6.0.0",
"purescript-foldable-traversable": "^6.0.0",
"purescript-functors": "^5.0.0",
"purescript-contravariant": "^6.0.0",
"purescript-distributive": "^6.0.0",
"purescript-profunctor": "^6.0.0",
"purescript-exists": "^6.0.0",
"purescript-orders": "^6.0.0",
"purescript-functions": "^6.0.0",
"purescript-maybe": "^6.0.0",
"purescript-newtype": "^5.0.0",
"purescript-safe-coerce": "^2.0.0",
"purescript-prelude": "^6.0.0",
"purescript-refs": "^6.0.0",
"purescript-tailrec": "^6.0.0",
"purescript-transformers": "^6.0.0",
"purescript-unsafe-coerce": "^6.0.0",
"purescript-foreign": "^7.0.0",
"purescript-strings": "^6.0.0",
"purescript-effect": "^4.0.0",
"purescript-arrays": "^7.0.0",
"purescript-nonempty": "^7.0.0",
"purescript-partial": "^4.0.0",
"purescript-st": "^6.0.0",
"purescript-foreign-object": "^4.0.0",
"purescript-typelevel-prelude": "^7.0.0",
"purescript-record": "^4.0.0",
"purescript-math": "c052d221193d25255f6b9024df8df174e54dc550"
}
}
28 changes: 14 additions & 14 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
{
"name": "purescript-node-jwt",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"build": "spago -x spago.dhall build",
"test": "spago -x test.dhall test",
"docs": "spago -x test.dhall docs"
},
"dependencies": {
"jsonwebtoken": "^8.5.1"
},
"devDependencies": {
"spago": "^0.20.3"
}
"name": "purescript-node-jwt",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"build": "spago build",
"test": "spago test",
"docs": "spago docs"
},
"dependencies": {
"jsonwebtoken": "^8.5.1"
},
"devDependencies": {
"spago": "^0.20.9"
}
}
15 changes: 12 additions & 3 deletions packages.dhall
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,19 @@ let additions =
-------------------------------
-}
let upstream =
https://github.com/purescript/package-sets/releases/download/psc-0.14.5-20211116/packages.dhall sha256:7ba810597a275e43c83411d2ab0d4b3c54d0b551436f4b1632e9ff3eb62e327a
https://github.com/purescript/package-sets/releases/download/psc-0.15.0-20220525/packages.dhall sha256:5facfdf9c35801a0e6a41b08b4293f947743007a9224a2a3d7694d87a44a7f28

let overrides = {=}

let additions = {=}
let additions =
{ foreign-generic =
{ repo =
"https://github.com/working-group-purescript-es/purescript-foreign-generic.git"
, version =
"v0.15.0-updates"
, dependencies =
[ "effect", "foreign", "foreign-object" ]
}
}

in upstream // overrides // additions
in upstream overrides additions
6 changes: 4 additions & 2 deletions spago.dhall
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@
, "lists"
, "maybe"
, "newtype"
, "now"
, "options"
, "prelude"
, "psci-support"
, "record"
, "spec"
, "transformers"
]
, packages = ./packages.dhall
, sources = [ "src/**/*.purs" ]
, sources = [ "src/**/*.purs", "test/**/*.purs" ]
}
102 changes: 51 additions & 51 deletions src/Node/Jwt.js
Original file line number Diff line number Diff line change
@@ -1,70 +1,70 @@
const jwt = require("jsonwebtoken");
import jwt from "jsonwebtoken";

const registeredClaimsKeys = ["iss", "sub", "aud", "exp", "nbf", "iat", "jti"];

// TODO: Remove this when https://github.com/erikd/language-javascript/pull/118 is merged
const partitionClaims = (claims) =>
Object.entries(claims).reduce(
([registered, unregistered], [key, value]) => {
const claim = { [key]: value };
Object.entries(claims).reduce(
([registered, unregistered], [key, value]) => {
const claim = { [key]: value };

return registeredClaimsKeys.includes(key)
? [Object.assign({}, registered, claim), unregistered]
: [registered, Object.assign({}, unregistered || {}, claim)];
},
[{}, undefined]
);
return registeredClaimsKeys.includes(key)
? [Object.assign({}, registered, claim), unregistered]
: [registered, Object.assign({}, unregistered || {}, claim)];
},
[{}, undefined]
);

const normalizeClaims = ({ header, payload, signature }, just, nothing) => {
try {
const [registeredClaims, unregisteredClaims] = partitionClaims(payload);
try {
const [registeredClaims, unregisteredClaims] = partitionClaims(payload);

return just({
header,
payload: Object.assign({}, registeredClaims, { unregisteredClaims }),
signature,
});
} catch (_) {
return nothing;
}
return just({
header,
payload: Object.assign({}, registeredClaims, { unregisteredClaims }),
signature,
});
} catch (_) {
return nothing;
}
};

exports._decode = (just, nothing, token) => {
try {
return normalizeClaims(
jwt.decode(token, { complete: true, json: false }),
just,
nothing
);
} catch (_) {
return nothing;
}
export function _decode(just, nothing, token) {
try {
return normalizeClaims(
jwt.decode(token, { complete: true, json: false }),
just,
nothing
);
} catch (_) {
return nothing;
}
};

exports._verify = (just, nothing, token, secret) => {
try {
return normalizeClaims(
jwt.verify(token, secret, { complete: true, json: false }),
just,
nothing
);
} catch (_) {
return nothing;
}
export function _verify(just, nothing, token, secret) {
try {
return normalizeClaims(
jwt.verify(token, secret, { complete: true, json: false }),
just,
nothing
);
} catch (_) {
return nothing;
}
};

exports._sign = (payload, unregisteredClaims, secret, options) => {
const fullPayload = unregisteredClaims
? Object.assign({}, payload, unregisteredClaims)
: payload;
export function _sign(payload, unregisteredClaims, secret, options) {
const fullPayload = unregisteredClaims
? Object.assign({}, payload, unregisteredClaims)
: payload;

return new Promise(function (resolve, reject) {
jwt.sign(fullPayload, secret, options, function (error, token) {
if (error) {
return reject(error);
}
return new Promise(function (resolve, reject) {
jwt.sign(fullPayload, secret, options, function (error, token) {
if (error) {
return reject(error);
}

resolve(token);
resolve(token);
});
});
});
};
8 changes: 0 additions & 8 deletions test.dhall

This file was deleted.

4 changes: 2 additions & 2 deletions test/Main.purs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import Data.DateTime.Instant (instant, toDateTime)
import Data.Either (Either(..), hush)
import Data.Maybe (Maybe(..), fromMaybe, isJust, maybe)
import Data.Newtype (wrap)
import Data.Symbol (SProxy(..))
import Type.Proxy (Proxy(..))
import Data.Time.Duration (Seconds(..))
import Effect (Effect)
import Effect.Aff (Milliseconds(..), launchAff_)
Expand All @@ -21,7 +21,7 @@ import Test.Spec.Reporter (consoleReporter)
import Test.Spec.Runner (runSpec)

cleanClaims :: forall r a. Lacks "unregisteredClaims" r => { unregisteredClaims :: a | r } -> { | r }
cleanClaims = delete (SProxy :: SProxy "unregisteredClaims")
cleanClaims = delete (Proxy :: Proxy "unregisteredClaims")

getTimestamp :: forall m. MonadEffect m => m DateTime
getTimestamp = liftEffect $ modifyTime (setMillisecond bottom) <<< toDateTime <$> now
Expand Down
Loading