@loopstack/loopstack-module 0.30.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 +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/index.d.ts +2 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +2 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/loopstack-module-options.interface.d.ts +37 -0
- package/dist/interfaces/loopstack-module-options.interface.d.ts.map +1 -0
- package/dist/interfaces/loopstack-module-options.interface.js +2 -0
- package/dist/interfaces/loopstack-module-options.interface.js.map +1 -0
- package/dist/loopstack.module.d.ts +6 -0
- package/dist/loopstack.module.d.ts.map +1 -0
- package/dist/loopstack.module.js +77 -0
- package/dist/loopstack.module.js.map +1 -0
- package/package.json +63 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { CorsOptions } from 'cors';
|
|
2
|
+
import type { AvailableEnvironmentInterface } from '@loopstack/contracts/api';
|
|
3
|
+
export interface LoopstackDatabaseOptions {
|
|
4
|
+
connection?: string;
|
|
5
|
+
host?: string;
|
|
6
|
+
port?: number;
|
|
7
|
+
username?: string;
|
|
8
|
+
password?: string;
|
|
9
|
+
database?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface LoopstackAuthOptions {
|
|
12
|
+
jwt?: {
|
|
13
|
+
secret?: string;
|
|
14
|
+
expiresIn?: string;
|
|
15
|
+
refreshSecret?: string;
|
|
16
|
+
refreshExpiresIn?: string;
|
|
17
|
+
};
|
|
18
|
+
clientId?: string;
|
|
19
|
+
hub?: {
|
|
20
|
+
issuer?: string;
|
|
21
|
+
jwksUri?: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface LoopstackRedisOptions {
|
|
25
|
+
host?: string;
|
|
26
|
+
port?: number;
|
|
27
|
+
password?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface LoopstackModuleOptions {
|
|
30
|
+
database?: LoopstackDatabaseOptions;
|
|
31
|
+
auth?: LoopstackAuthOptions;
|
|
32
|
+
redis?: LoopstackRedisOptions;
|
|
33
|
+
enableAuth?: boolean;
|
|
34
|
+
availableEnvironments?: AvailableEnvironmentInterface[];
|
|
35
|
+
cors?: CorsOptions | false;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=loopstack-module-options.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loopstack-module-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/loopstack-module-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAE9E,MAAM,WAAW,wBAAwB;IAMvC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qBAAqB,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAKxD,IAAI,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loopstack-module-options.interface.js","sourceRoot":"","sources":["../../src/interfaces/loopstack-module-options.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { LoopstackModuleOptions } from './interfaces/index.js';
|
|
3
|
+
export declare class LoopstackModule {
|
|
4
|
+
static forRoot(options?: LoopstackModuleOptions): DynamicModule;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=loopstack.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loopstack.module.d.ts","sourceRoot":"","sources":["../src/loopstack.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAOvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,qBACa,eAAe;IAC1B,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,sBAA2B,GAAG,aAAa;CAmDpE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var LoopstackModule_1;
|
|
8
|
+
import { Module } from '@nestjs/common';
|
|
9
|
+
import { ConfigModule, registerAs } from '@nestjs/config';
|
|
10
|
+
import { EventEmitterModule } from '@nestjs/event-emitter';
|
|
11
|
+
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
12
|
+
import { LoopstackApiModule } from '@loopstack/api';
|
|
13
|
+
import { LoopCoreModule } from '@loopstack/core';
|
|
14
|
+
let LoopstackModule = LoopstackModule_1 = class LoopstackModule {
|
|
15
|
+
static forRoot(options = {}) {
|
|
16
|
+
const imports = [];
|
|
17
|
+
const connection = options.database?.connection;
|
|
18
|
+
imports.push(ConfigModule.forRoot({
|
|
19
|
+
isGlobal: true,
|
|
20
|
+
envFilePath: '.env',
|
|
21
|
+
load: [buildAppConfig(options), buildAuthConfig(options)],
|
|
22
|
+
}));
|
|
23
|
+
if (!connection) {
|
|
24
|
+
const db = options.database ?? {};
|
|
25
|
+
imports.push(TypeOrmModule.forRoot({
|
|
26
|
+
type: 'postgres',
|
|
27
|
+
host: db.host ?? process.env.DATABASE_HOST ?? 'localhost',
|
|
28
|
+
port: db.port ?? (Number(process.env.DATABASE_PORT) || 5432),
|
|
29
|
+
username: db.username ?? process.env.DATABASE_USERNAME ?? 'postgres',
|
|
30
|
+
database: db.database ?? process.env.DATABASE_NAME ?? 'postgres',
|
|
31
|
+
password: db.password ?? process.env.DATABASE_PASSWORD ?? 'admin',
|
|
32
|
+
autoLoadEntities: true,
|
|
33
|
+
synchronize: true,
|
|
34
|
+
migrationsRun: false,
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
imports.push(EventEmitterModule.forRoot());
|
|
38
|
+
imports.push(LoopCoreModule.forRoot({ connection, redis: options.redis }));
|
|
39
|
+
imports.push(LoopstackApiModule.register({
|
|
40
|
+
availableEnvironments: options.availableEnvironments,
|
|
41
|
+
connection,
|
|
42
|
+
cors: options.cors,
|
|
43
|
+
}));
|
|
44
|
+
return {
|
|
45
|
+
module: LoopstackModule_1,
|
|
46
|
+
imports,
|
|
47
|
+
exports: [LoopstackApiModule, LoopCoreModule],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
LoopstackModule = LoopstackModule_1 = __decorate([
|
|
52
|
+
Module({})
|
|
53
|
+
], LoopstackModule);
|
|
54
|
+
export { LoopstackModule };
|
|
55
|
+
function buildAppConfig(options) {
|
|
56
|
+
return registerAs('app', () => ({
|
|
57
|
+
nodeEnv: process.env.NODE_ENV ?? 'development',
|
|
58
|
+
enableAuth: options.enableAuth ?? process.env.LOOPSTACK_AUTH === 'true',
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
function buildAuthConfig(options) {
|
|
62
|
+
const auth = options.auth;
|
|
63
|
+
return registerAs('auth', () => ({
|
|
64
|
+
jwt: {
|
|
65
|
+
secret: auth?.jwt?.secret ?? process.env.JWT_SECRET ?? 'dev-secret-change-me',
|
|
66
|
+
expiresIn: auth?.jwt?.expiresIn ?? process.env.JWT_EXPIRES_IN ?? '1h',
|
|
67
|
+
refreshSecret: auth?.jwt?.refreshSecret ?? process.env.JWT_REFRESH_SECRET ?? process.env.JWT_SECRET ?? 'dev-secret-change-me',
|
|
68
|
+
refreshExpiresIn: auth?.jwt?.refreshExpiresIn ?? process.env.JWT_REFRESH_EXPIRES_IN ?? '7d',
|
|
69
|
+
},
|
|
70
|
+
clientId: auth?.clientId ?? process.env.CLIENT_ID ?? 'local',
|
|
71
|
+
hub: {
|
|
72
|
+
issuer: auth?.hub?.issuer ?? process.env.HUB_ISSUER ?? 'https://hub.loopstack.ai',
|
|
73
|
+
jwksUri: auth?.hub?.jwksUri ?? process.env.HUB_JWKS_URI ?? 'https://hub.loopstack.ai/.well-known/jwks.json',
|
|
74
|
+
},
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=loopstack.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loopstack.module.js","sourceRoot":"","sources":["../src/loopstack.module.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@loopstack/loopstack-module",
|
|
3
|
+
"displayName": "Loopstack Module",
|
|
4
|
+
"description": "All-in-one NestJS module for bootstrapping a Loopstack application",
|
|
5
|
+
"version": "0.30.0",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": {
|
|
8
|
+
"name": "Jakob Klippel",
|
|
9
|
+
"url": "https://www.linkedin.com/in/jakob-klippel/"
|
|
10
|
+
},
|
|
11
|
+
"type": "module",
|
|
12
|
+
"main": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "nest build",
|
|
22
|
+
"compile": "tsc --noEmit",
|
|
23
|
+
"format": "prettier --write .",
|
|
24
|
+
"lint": "eslint .",
|
|
25
|
+
"test": "jest --passWithNoTests",
|
|
26
|
+
"watch": "nest build --watch"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@loopstack/api": "^0.30.0",
|
|
30
|
+
"@loopstack/auth": "^0.30.0",
|
|
31
|
+
"@loopstack/common": "^0.30.0",
|
|
32
|
+
"@loopstack/contracts": "^0.30.0",
|
|
33
|
+
"@loopstack/core": "^0.30.0",
|
|
34
|
+
"@nestjs/common": "^11.1.19",
|
|
35
|
+
"@nestjs/config": "^4.0.4",
|
|
36
|
+
"@nestjs/core": "^11.1.19",
|
|
37
|
+
"@nestjs/event-emitter": "^3.0.1",
|
|
38
|
+
"@nestjs/typeorm": "^11.0.1",
|
|
39
|
+
"pg": "^8.20.0",
|
|
40
|
+
"typeorm": "^0.3.28"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {},
|
|
43
|
+
"files": [
|
|
44
|
+
"dist"
|
|
45
|
+
],
|
|
46
|
+
"jest": {
|
|
47
|
+
"moduleFileExtensions": [
|
|
48
|
+
"js",
|
|
49
|
+
"json",
|
|
50
|
+
"ts"
|
|
51
|
+
],
|
|
52
|
+
"rootDir": "src",
|
|
53
|
+
"testRegex": ".*\\.spec\\.ts$",
|
|
54
|
+
"transform": {
|
|
55
|
+
"^.+\\.(t|j)s$": "ts-jest"
|
|
56
|
+
},
|
|
57
|
+
"collectCoverageFrom": [
|
|
58
|
+
"**/*.(t|j)s"
|
|
59
|
+
],
|
|
60
|
+
"coverageDirectory": "../coverage",
|
|
61
|
+
"testEnvironment": "node"
|
|
62
|
+
}
|
|
63
|
+
}
|