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
16 changes: 9 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"exports": {
".": {
"import": "./build/index.js",
"types": "./types/index.d.ts"
"types": "./types/index.d.ts",
"require": "./build/index.js"
}
},
"private": false,
Expand All @@ -26,22 +27,26 @@
"@nestjs/common": ">=9.0.5",
"@nestjs/core": ">=9.0.5",
"adminjs": "^7.4.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.1.0"
},
"devDependencies": {
"@adminjs/express": "^6.1.0",
"@adminjs/fastify": "^4.2.0",
"@commitlint/cli": "^17.4.4",
"@commitlint/config-conventional": "^17.4.4",
"@fastify/session": "^11.1.1",
"@nestjs/common": ">=9.3.10",
"@nestjs/core": ">=9.3.10",
"@semantic-release/git": "^10.0.1",
"@types/express-session": "^1.17.7",
"@typescript-eslint/eslint-plugin": "^5.56.0",
"@typescript-eslint/parser": "^5.56.0",
"adminjs": "^7.4.0",
"eslint": "^8.36.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsdoc": "^40.1.0",
"eslint-plugin-jsdoc": "^62.2.0",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-prefer-arrow": "^1.2.3",
"eslint-plugin-react": "^7.32.2",
Expand All @@ -50,10 +55,7 @@
"rxjs": "^7.8.0",
"semantic-release": "^20.1.3",
"semantic-release-slack-bot": "^4.0.0",
"typescript": "^4.9.5"
"typescript": "^5.9.3"
},
"dependencies": {
"@types/express-session": "^1.17.7",
"reflect-metadata": "^0.1.13"
}
"dependencies": {}
}
3 changes: 2 additions & 1 deletion src/interfaces/admin-module-options.interface.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { AdminJSOptions, BaseAuthProvider, CurrentAdmin } from 'adminjs';
import { SessionOptions } from 'express-session';
import FastifySessionPlugin from '@fastify/session';

import { ExpressFormidableOptions } from './express-formidable-options.interface.js';

Expand Down Expand Up @@ -35,7 +36,7 @@ export type AdminModuleOptions = {
* Here you might want to change the store from the default memory store to
* something more reliable (i.e. database).
*/
sessionOptions?: SessionOptions,
sessionOptions?: SessionOptions | FastifySessionPlugin.FastifySessionOptions,
/**
* Flag indicating if adminjs should be initialized. Helpful in cases like turning off admin for tests.
* Default is true.
Expand Down
54 changes: 54 additions & 0 deletions src/loaders/fastify.loader.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/* eslint-disable no-underscore-dangle */
import { Injectable } from '@nestjs/common';
import { loadPackage } from '@nestjs/common/utils/load-package.util.js';
import { AbstractHttpAdapter } from '@nestjs/core';
import type AdminJS from 'adminjs';
import FastifySessionPlugin from '@fastify/session';

import { AdminModuleOptions } from '../interfaces/admin-module-options.interface.js';

import { AbstractLoader } from './abstract.loader.js';

@Injectable()
export class FastifyLoader extends AbstractLoader {
public async register(
admin: AdminJS,
httpAdapter: AbstractHttpAdapter,
options: AdminModuleOptions,
) {
const app = httpAdapter.getInstance();

loadPackage('fastify', '@adminjs/nestjs');
const adminJsFastify = await import('@adminjs/fastify');

await app.register(async (adminApp) => {
if (adminApp.hasContentTypeParser('application/x-www-form-urlencoded')) {
adminApp.removeContentTypeParser('application/x-www-form-urlencoded');
}

if (options.auth) {
const FastifySession = loadPackage('@fastify/session', '@adminjs/nestjs');
const Connect = loadPackage('connect-pg-simple', '@adminjs/nestjs');

const ConnectSession = Connect(FastifySession as any);
const sessionStore = new ConnectSession(options.sessionOptions);

// Pass 'adminApp' (the child), not 'app' (the global instance)
await adminJsFastify.default.buildAuthenticatedRouter(
admin,
options.auth,
adminApp,
{
store: sessionStore,
...options.sessionOptions,
} as FastifySessionPlugin.FastifySessionOptions,
);
} else {
await adminJsFastify.default.buildRouter(
admin,
adminApp,
);
}
});
}
}
3 changes: 2 additions & 1 deletion src/serve-static.provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { HttpAdapterHost } from '@nestjs/core';
import { AbstractLoader } from './loaders/abstract.loader.js';
import { ExpressLoader } from './loaders/express.loader.js';
import { NoopLoader } from './loaders/noop.loader.js';
import { FastifyLoader } from './loaders/fastify.loader.js';

export const serveStaticProvider: Provider = {
provide: AbstractLoader,
Expand All @@ -18,7 +19,7 @@ export const serveStaticProvider: Provider = {
httpAdapter.constructor.name === 'FastifyAdapter'
) {
// Not handled right now
return new NoopLoader();
return new FastifyLoader();
}

return new ExpressLoader();
Expand Down
Loading