@qelos/integrator-nest 4.0.0 → 4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"request-utils.js","sourceRoot":"","sources":["../src/request-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-utils.js","sourceRoot":"","sources":["../src/request-utils.ts"],"names":[],"mappings":";;AAEA,0CAgBC;AAED,gCASC;AA3BD,SAAgB,eAAe,CAAC,QAAqB,EAAE,KAAa;IAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC;IACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACrC,MAAM,QAAQ,GACZ,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,IAAI,IAAc,CAAC;IACnB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CACxB,OAAmB,EACnB,MAAuB;IAEvB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC"}
@@ -1,15 +1,7 @@
1
1
  import QelosSDK from '@qelos/sdk';
2
- import type { AnyRequest, AnyResponse, QelosNestConfig, QelosTokenPair, TokenRefreshHook } from './types';
2
+ import type { AnyRequest, QelosNestConfig } from './types';
3
3
  export interface CreateSdkParams {
4
4
  config: QelosNestConfig;
5
- /**
6
- * Tokens for the current request. The factory mutates this object in place
7
- * when a token refresh occurs, so callers can read the latest pair after
8
- * the SDK has been used.
9
- */
10
- tokens: QelosTokenPair;
11
5
  request: AnyRequest;
12
- response: AnyResponse;
13
- onTokenRefresh?: TokenRefreshHook;
14
6
  }
15
- export declare function createRequestSdk({ config, tokens, request, response, onTokenRefresh, }: CreateSdkParams): QelosSDK;
7
+ export declare function createRequestSdk({ config, request, }: CreateSdkParams): QelosSDK;
@@ -5,93 +5,35 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createRequestSdk = createRequestSdk;
7
7
  const sdk_1 = __importDefault(require("@qelos/sdk"));
8
- const NO_AUTH_URLS = new Set([
9
- '/api/token/refresh',
10
- '/api/cookie/refresh',
11
- '/api/signin',
12
- '/api/signup',
13
- ]);
14
- function createRequestSdk({ config, tokens, request, response, onTokenRefresh, }) {
15
- let sdk;
16
- let refreshInFlight = null;
8
+ function createRequestSdk({ config, request, }) {
17
9
  const baseOptions = config.sdkOptions || {};
18
- async function performRefresh() {
19
- if (!tokens.refreshToken && !tokens.accessToken) {
20
- throw new Error('no refresh token available');
21
- }
22
- const previous = {
23
- accessToken: tokens.accessToken,
24
- refreshToken: tokens.refreshToken,
25
- };
26
- let refreshed;
27
- if (tokens.refreshToken) {
28
- const result = await sdk.authentication.refreshToken(tokens.refreshToken);
29
- refreshed = {
30
- accessToken: result.payload.token,
31
- refreshToken: result.payload.refreshToken,
32
- };
33
- }
34
- else {
35
- const result = await sdk.authentication.refreshCookieToken(tokens.accessToken);
36
- refreshed = {
37
- accessToken: result.payload.cookieToken,
38
- };
39
- }
40
- tokens.accessToken = refreshed.accessToken;
41
- tokens.refreshToken = refreshed.refreshToken;
42
- if (onTokenRefresh) {
43
- await onTokenRefresh({
44
- request,
45
- response,
46
- oldTokens: previous,
47
- newTokens: refreshed,
48
- sdk,
49
- });
50
- }
51
- }
52
- function ensureRefresh() {
53
- if (!refreshInFlight) {
54
- refreshInFlight = performRefresh().finally(() => {
55
- refreshInFlight = null;
56
- });
57
- }
58
- return refreshInFlight;
59
- }
60
10
  const options = {
61
11
  appUrl: config.appUrl,
62
12
  fetch: globalThis.fetch,
63
- forceRefresh: !config.apiToken,
64
13
  ...baseOptions,
65
14
  };
66
15
  if (config.apiToken) {
67
16
  options.apiToken = config.apiToken;
17
+ return new sdk_1.default(options);
68
18
  }
69
- else {
70
- if (tokens.accessToken) {
71
- options.accessToken = tokens.accessToken;
19
+ options.extraHeaders = async () => {
20
+ const headers = {};
21
+ const cookieHeader = request.headers.cookie;
22
+ const cookie = typeof cookieHeader === 'string'
23
+ ? cookieHeader
24
+ : Array.isArray(cookieHeader)
25
+ ? cookieHeader.join('; ')
26
+ : undefined;
27
+ if (cookie) {
28
+ headers.cookie = cookie;
72
29
  }
73
- if (tokens.refreshToken) {
74
- options.refreshToken = tokens.refreshToken;
30
+ const rawAuth = request.headers.authorization;
31
+ const authHeader = Array.isArray(rawAuth) ? rawAuth[0] : rawAuth;
32
+ if (authHeader) {
33
+ headers.authorization = authHeader;
75
34
  }
76
- options.extraHeaders = async (relativeUrl, forceRefresh) => {
77
- const headers = {};
78
- if (NO_AUTH_URLS.has(relativeUrl)) {
79
- return headers;
80
- }
81
- if (forceRefresh && tokens.refreshToken) {
82
- await ensureRefresh();
83
- }
84
- const token = sdk?.authentication?.accessToken || tokens.accessToken;
85
- if (token) {
86
- headers.authorization = 'Bearer ' + token;
87
- }
88
- return headers;
89
- };
90
- options.onFailedRefreshToken = async () => {
91
- await ensureRefresh();
92
- };
93
- }
94
- sdk = new sdk_1.default(options);
95
- return sdk;
35
+ return headers;
36
+ };
37
+ return new sdk_1.default(options);
96
38
  }
97
39
  //# sourceMappingURL=sdk-factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-factory.js","sourceRoot":"","sources":["../src/sdk-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk-factory.js","sourceRoot":"","sources":["../src/sdk-factory.ts"],"names":[],"mappings":";;;;;AASA,4CAsCC;AA/CD,qDAAkC;AASlC,SAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,OAAO,GACS;IAChB,MAAM,WAAW,GAA6B,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAEtE,MAAM,OAAO,GAAoB;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,UAAU,CAAC,KAA6B;QAC/C,GAAG,WAAW;KACf,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACnC,OAAO,IAAI,aAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,YAAY,GAAG,KAAK,IAAI,EAAE;QAChC,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5C,MAAM,MAAM,GACV,OAAO,YAAY,KAAK,QAAQ;YAC9B,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC3B,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,CAAC,CAAC,SAAS,CAAC;QAClB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAC1B,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC;QACrC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,IAAI,aAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
package/dist/types.d.ts CHANGED
@@ -2,14 +2,6 @@ import type QelosSDK from '@qelos/sdk';
2
2
  import type { IUser } from '@qelos/sdk/dist/authentication';
3
3
  import type { IWorkspace } from '@qelos/sdk/workspaces';
4
4
  import type { QelosSDKOptions } from '@qelos/sdk/types';
5
- export interface QelosTokenPair {
6
- accessToken?: string;
7
- refreshToken?: string;
8
- }
9
- export interface ResolvedTokens {
10
- accessToken: string;
11
- refreshToken?: string;
12
- }
13
5
  /**
14
6
  * A request-like object. NestJS can run on either Express or Fastify, so we
15
7
  * type the bits we touch generically and feature-detect at runtime.
@@ -17,8 +9,8 @@ export interface ResolvedTokens {
17
9
  export interface AnyRequest {
18
10
  url?: string;
19
11
  path?: string;
12
+ method?: string;
20
13
  headers: Record<string, string | string[] | undefined>;
21
- cookies?: Record<string, string | undefined>;
22
14
  qelos?: QelosRequestContext;
23
15
  [key: string]: unknown;
24
16
  }
@@ -26,8 +18,6 @@ export interface AnyRequest {
26
18
  * A response-like object (Express `Response` or Fastify `FastifyReply`).
27
19
  */
28
20
  export interface AnyResponse {
29
- cookie?: (name: string, value: string, options?: Record<string, unknown>) => unknown;
30
- setCookie?: (name: string, value: string, options?: Record<string, unknown>) => unknown;
31
21
  setHeader?: (name: string, value: string | string[]) => unknown;
32
22
  header?: (name: string, value: string | string[]) => unknown;
33
23
  getHeader?: (name: string) => string | string[] | number | undefined;
@@ -40,17 +30,9 @@ export interface QelosNestConfig {
40
30
  appUrl: string;
41
31
  /**
42
32
  * Static API token used for service-to-service calls. When provided, no
43
- * cookie/refresh-token handling is performed.
33
+ * cookie-based authentication is performed.
44
34
  */
45
35
  apiToken?: string;
46
- /**
47
- * Cookie name carrying the Qelos access token. Defaults to `q_access_token`.
48
- */
49
- accessTokenCookie?: string;
50
- /**
51
- * Cookie name carrying the Qelos refresh token. Defaults to `q_refresh_token`.
52
- */
53
- refreshTokenCookie?: string;
54
36
  /**
55
37
  * If true, the middleware short-circuits with 401 when the user cannot be
56
38
  * resolved. Defaults to `false` — anonymous requests pass through with
@@ -65,6 +47,11 @@ export interface QelosNestConfig {
65
47
  * these prefixes. Useful for `/health`, `/api/_auth`, etc.
66
48
  */
67
49
  skipPaths?: string[];
50
+ /**
51
+ * If true, the catch-all `/api/**` proxy middleware is not registered.
52
+ * Defaults to `false`.
53
+ */
54
+ disableProxy?: boolean;
68
55
  /**
69
56
  * Optional extra options merged into the per-request SDK instance.
70
57
  */
@@ -75,14 +62,6 @@ export type WorkspaceResolver = (params: {
75
62
  user: IUser;
76
63
  workspaces: IWorkspace[];
77
64
  }) => IWorkspace | null | Promise<IWorkspace | null>;
78
- export interface TokenRefreshContext {
79
- request: AnyRequest;
80
- response: AnyResponse;
81
- oldTokens: QelosTokenPair;
82
- newTokens: ResolvedTokens;
83
- sdk: QelosSDK;
84
- }
85
- export type TokenRefreshHook = (ctx: TokenRefreshContext) => void | Promise<void>;
86
65
  export interface QelosRequestContext {
87
66
  /**
88
67
  * The authenticated user, or `null` when anonymous.
@@ -98,25 +77,18 @@ export interface QelosRequestContext {
98
77
  */
99
78
  workspaces: IWorkspace[];
100
79
  /**
101
- * SDK instance bound to the current request's tokens.
80
+ * SDK instance bound to the current request's cookies. `extraHeaders`
81
+ * re-reads cookies live on each call, so cookie rotations applied by the
82
+ * middleware are picked up automatically.
102
83
  */
103
84
  sdk: QelosSDK;
104
- /**
105
- * Tokens read from the request. Mutated in place when a refresh occurs so
106
- * later code can read the current pair.
107
- */
108
- tokens: QelosTokenPair;
109
85
  }
110
86
  export interface QelosModuleOptions {
111
87
  config: QelosNestConfig;
112
88
  /**
113
- * Hook invoked after a successful token refresh. The default implementation
114
- * writes the new tokens back to the response cookies.
115
- */
116
- onTokenRefresh?: TokenRefreshHook;
117
- /**
118
- * Resolve the active workspace for a request. Defaults to picking the first
119
- * workspace returned from `sdk.workspaces.getList()`.
89
+ * Resolve the active workspace for a request. Defaults to whatever
90
+ * `/api/me` reports on `user.workspace` (the user's currently activated
91
+ * workspace, or `null` when none is active).
120
92
  */
121
93
  resolveWorkspace?: WorkspaceResolver;
122
94
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qelos/integrator-nest",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "description": "NestJS module that identifies the Qelos user and active workspace before your route handlers run",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -61,7 +61,7 @@
61
61
  }
62
62
  },
63
63
  "dependencies": {
64
- "@qelos/sdk": "^4.0.0"
64
+ "@qelos/sdk": "4.1.0"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@nestjs/common": "^10.4.5",
@@ -75,6 +75,6 @@
75
75
  "type-check": "tsc --noEmit",
76
76
  "build": "tsc",
77
77
  "pre-build": "tsc",
78
- "test": "node --import tsx --test test/**/*.test.ts"
78
+ "test": "node --import tsx --test test/**/*.test.ts src/**/*.test.ts"
79
79
  }
80
80
  }