@neuroncloud/ido-express 0.1.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/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Request, RequestHandler, Response } from "express";
|
|
2
|
+
import type { IdoClient, SignInWithRedirectOptions, Tokens } from "@neuroncloud/ido-node";
|
|
3
|
+
export type ExpressClientFactory = (request: Request, response: Response) => IdoClient | Promise<IdoClient>;
|
|
4
|
+
export interface SignInHandlerOptions {
|
|
5
|
+
createClient: ExpressClientFactory;
|
|
6
|
+
request?: (request: Request) => SignInWithRedirectOptions;
|
|
7
|
+
}
|
|
8
|
+
export interface CallbackHandlerOptions {
|
|
9
|
+
createClient: ExpressClientFactory;
|
|
10
|
+
onTokens: (tokens: Tokens, request: Request, response: Response) => void | Promise<void>;
|
|
11
|
+
redirectTo?: string | ((request: Request) => string);
|
|
12
|
+
}
|
|
13
|
+
export interface RequireAuthenticationOptions {
|
|
14
|
+
createClient: ExpressClientFactory;
|
|
15
|
+
onUnauthorized?: (request: Request, response: Response) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function createSignInHandler(options: SignInHandlerOptions): RequestHandler;
|
|
18
|
+
export declare function createCallbackHandler(options: CallbackHandlerOptions): RequestHandler;
|
|
19
|
+
export declare function requireAuthentication(options: RequireAuthenticationOptions): RequestHandler;
|
|
20
|
+
export declare function requestUrl(request: Request): string;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE1F,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,KACf,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAEpC,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,oBAAoB,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,yBAAyB,CAAC;CAC3D;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,oBAAoB,CAAC;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,oBAAoB,CAAC;IACnC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;CACjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc,CAMjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,cAAc,CAYrF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,cAAc,CAiB3F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAInD"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function createSignInHandler(options) {
|
|
2
|
+
return asyncHandler(async (request, response) => {
|
|
3
|
+
const client = await options.createClient(request, response);
|
|
4
|
+
await client.start();
|
|
5
|
+
await client.signInWithRedirect(options.request?.(request));
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
export function createCallbackHandler(options) {
|
|
9
|
+
return asyncHandler(async (request, response) => {
|
|
10
|
+
const client = await options.createClient(request, response);
|
|
11
|
+
await client.start();
|
|
12
|
+
const tokens = await client.handleRedirect({ url: requestUrl(request) });
|
|
13
|
+
await options.onTokens(tokens, request, response);
|
|
14
|
+
if (!response.headersSent) {
|
|
15
|
+
const location = typeof options.redirectTo === "function" ? options.redirectTo(request) : options.redirectTo;
|
|
16
|
+
response.redirect(location ?? "/");
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export function requireAuthentication(options) {
|
|
21
|
+
return asyncHandler(async (request, response, next) => {
|
|
22
|
+
const client = await options.createClient(request, response);
|
|
23
|
+
await client.start();
|
|
24
|
+
if (await client.isAuthenticated()) {
|
|
25
|
+
next();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (options.onUnauthorized) {
|
|
29
|
+
options.onUnauthorized(request, response);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
response.sendStatus(401);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export function requestUrl(request) {
|
|
36
|
+
const forwardedProtocol = request.get("x-forwarded-proto")?.split(",")[0]?.trim();
|
|
37
|
+
const protocol = forwardedProtocol || request.protocol;
|
|
38
|
+
return `${protocol}://${request.get("host") ?? "localhost"}${request.originalUrl}`;
|
|
39
|
+
}
|
|
40
|
+
function asyncHandler(handler) {
|
|
41
|
+
return (request, response, next) => {
|
|
42
|
+
void handler(request, response, next).catch(next);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzE,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;YAC7G,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAqC;IACzE,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,IAAI,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;YACnC,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAClF,MAAM,QAAQ,GAAG,iBAAiB,IAAI,OAAO,CAAC,QAAQ,CAAC;IACvD,OAAO,GAAG,QAAQ,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AACrF,CAAC;AAED,SAAS,YAAY,CACnB,OAAoF;IAEpF,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QACjC,KAAK,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@neuroncloud/ido-express",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": ["dist"],
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc -p tsconfig.json",
|
|
17
|
+
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@neuroncloud/ido-node": "0.1.0"
|
|
21
|
+
},
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"express": ">=4.18"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/express": "^5.0.3",
|
|
27
|
+
"express": "^5.1.0"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
}
|
|
32
|
+
}
|