@makerx/graphql-core 2.0.0 → 2.2.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/README.md +3 -18
- package/{User.js → User.cjs} +6 -6
- package/User.d.ts +1 -2
- package/User.mjs +47 -0
- package/{context.js → context.cjs} +12 -15
- package/context.d.ts +1 -2
- package/context.mjs +74 -0
- package/index.cjs +29 -0
- package/index.d.ts +0 -1
- package/index.mjs +9 -0
- package/logging.cjs +46 -0
- package/logging.d.ts +69 -11
- package/logging.mjs +43 -0
- package/models.d.ts +0 -1
- package/package.json +17 -10
- package/{schema-util.js → schema-util.cjs} +6 -6
- package/schema-util.d.ts +1 -2
- package/schema-util.mjs +28 -0
- package/{shield.js → shield.cjs} +10 -10
- package/shield.d.ts +3 -4
- package/shield.mjs +48 -0
- package/subscriptions/{context.js → context.cjs} +14 -14
- package/subscriptions/context.d.ts +1 -2
- package/subscriptions/context.mjs +61 -0
- package/subscriptions/index.d.ts +0 -1
- package/subscriptions/{server.js → server.cjs} +25 -28
- package/subscriptions/server.d.ts +7 -7
- package/subscriptions/server.mjs +86 -0
- package/subscriptions/{utils.js → utils.cjs} +4 -5
- package/subscriptions/utils.d.ts +0 -1
- package/subscriptions/utils.mjs +20 -0
- package/testing.d.ts +6 -6
- package/utils.cjs +9 -0
- package/utils.d.ts +0 -1
- package/utils.mjs +5 -0
- package/User.d.ts.map +0 -1
- package/User.js.map +0 -1
- package/context.d.ts.map +0 -1
- package/context.js.map +0 -1
- package/index.d.ts.map +0 -1
- package/index.js +0 -25
- package/index.js.map +0 -1
- package/logging.d.ts.map +0 -1
- package/logging.js +0 -38
- package/logging.js.map +0 -1
- package/models.d.ts.map +0 -1
- package/models.js +0 -3
- package/models.js.map +0 -1
- package/schema-util.d.ts.map +0 -1
- package/schema-util.js.map +0 -1
- package/shield.d.ts.map +0 -1
- package/shield.js.map +0 -1
- package/subscriptions/context.d.ts.map +0 -1
- package/subscriptions/context.js.map +0 -1
- package/subscriptions/index.d.ts.map +0 -1
- package/subscriptions/index.js +0 -22
- package/subscriptions/index.js.map +0 -1
- package/subscriptions/server.d.ts.map +0 -1
- package/subscriptions/server.js.map +0 -1
- package/subscriptions/utils.d.ts.map +0 -1
- package/subscriptions/utils.js.map +0 -1
- package/testing.d.ts.map +0 -1
- package/testing.js +0 -77
- package/testing.js.map +0 -1
- package/utils.d.ts.map +0 -1
- package/utils.js +0 -10
- package/utils.js.map +0 -1
package/{shield.js → shield.cjs}
RENAMED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const createRule = (logic, cache = 'strict') =>
|
|
6
|
-
exports.createRule = createRule;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var graphqlShield = require('graphql-shield');
|
|
4
|
+
|
|
5
|
+
const createRule = (logic, cache = 'strict') => graphqlShield.rule({ cache })(async (parent, args, ctx) => logic(parent, args, ctx));
|
|
7
6
|
/**
|
|
8
7
|
* Combines a given rule with all existing defined rules using the provided combinator
|
|
9
8
|
* @param schema The existing shield schema with rules
|
|
@@ -22,7 +21,6 @@ function combineRuleWithAll(schema, rule, combinator) {
|
|
|
22
21
|
return [key, combineRuleWithAll(value, rule, combinator)];
|
|
23
22
|
}));
|
|
24
23
|
}
|
|
25
|
-
exports.combineRuleWithAll = combineRuleWithAll;
|
|
26
24
|
/**
|
|
27
25
|
* Creates graphql shield middleware making use of generics to type the definition of the rules.
|
|
28
26
|
* @param schema A mapping of schema objects to the shield rules that define the access to that object
|
|
@@ -42,11 +40,13 @@ exports.combineRuleWithAll = combineRuleWithAll;
|
|
|
42
40
|
*
|
|
43
41
|
* schema = applyMiddleware(schema, shieldSchema)
|
|
44
42
|
*/
|
|
45
|
-
function createShieldSchema(schema, fallbackRule =
|
|
46
|
-
return
|
|
43
|
+
function createShieldSchema(schema, fallbackRule = graphqlShield.allow) {
|
|
44
|
+
return graphqlShield.shield(schema, {
|
|
47
45
|
allowExternalErrors: true,
|
|
48
46
|
fallbackRule: fallbackRule,
|
|
49
47
|
});
|
|
50
48
|
}
|
|
49
|
+
|
|
50
|
+
exports.combineRuleWithAll = combineRuleWithAll;
|
|
51
|
+
exports.createRule = createRule;
|
|
51
52
|
exports.createShieldSchema = createShieldSchema;
|
|
52
|
-
//# sourceMappingURL=shield.js.map
|
package/shield.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import type { and, chain, or, race } from 'graphql-shield';
|
|
2
|
+
import type { ShieldRule } from 'graphql-shield/typings/types';
|
|
3
|
+
import type { Primitive } from './models';
|
|
4
4
|
type RuleCombinator = typeof chain | typeof race | typeof or | typeof and;
|
|
5
5
|
export declare const createRule: <TContext, TParent = unknown, TArgs = unknown>(logic: (parent: TParent, args: TArgs, ctx: TContext) => boolean | Promise<boolean> | Error, cache?: 'contextual' | 'strict') => import("graphql-shield/typings/rules").Rule;
|
|
6
6
|
/**
|
|
@@ -40,4 +40,3 @@ export type ShieldSchema<TResolver> = TResolver extends Primitive ? ShieldRule :
|
|
|
40
40
|
'*'?: ShieldRule;
|
|
41
41
|
};
|
|
42
42
|
export {};
|
|
43
|
-
//# sourceMappingURL=shield.d.ts.map
|
package/shield.mjs
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { rule, shield, allow } from 'graphql-shield';
|
|
2
|
+
|
|
3
|
+
const createRule = (logic, cache = 'strict') => rule({ cache })(async (parent, args, ctx) => logic(parent, args, ctx));
|
|
4
|
+
/**
|
|
5
|
+
* Combines a given rule with all existing defined rules using the provided combinator
|
|
6
|
+
* @param schema The existing shield schema with rules
|
|
7
|
+
* @param rule The rule to be combined with existing rules
|
|
8
|
+
* @param combinator The combinator to use. Eg. and | or | chain | race
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
*
|
|
12
|
+
* const updatedSchema = combineRuleWithAll(shieldSchema, rules.accountNotBlocked, chain)
|
|
13
|
+
*/
|
|
14
|
+
function combineRuleWithAll(schema, rule, combinator) {
|
|
15
|
+
return Object.fromEntries(Object.entries(schema).map(([key, value]) => {
|
|
16
|
+
if (value.constructor.name !== 'Object') {
|
|
17
|
+
return [key, combinator(rule, value)];
|
|
18
|
+
}
|
|
19
|
+
return [key, combineRuleWithAll(value, rule, combinator)];
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates graphql shield middleware making use of generics to type the definition of the rules.
|
|
24
|
+
* @param schema A mapping of schema objects to the shield rules that define the access to that object
|
|
25
|
+
* @param fallbackRule A fallback rule to apply to any object or property which doesn't have a defined rule.
|
|
26
|
+
*
|
|
27
|
+
* Usage:
|
|
28
|
+
* import { Resolvers } from '../generated/types'
|
|
29
|
+
*
|
|
30
|
+
* const shieldSchema = createShieldSchema<Resolvers>({
|
|
31
|
+
* Query: {
|
|
32
|
+
* getThings: allow,
|
|
33
|
+
* dontGetThings: deny,
|
|
34
|
+
* }
|
|
35
|
+
* })
|
|
36
|
+
*
|
|
37
|
+
* let schema = makeExecutableSchema({...})
|
|
38
|
+
*
|
|
39
|
+
* schema = applyMiddleware(schema, shieldSchema)
|
|
40
|
+
*/
|
|
41
|
+
function createShieldSchema(schema, fallbackRule = allow) {
|
|
42
|
+
return shield(schema, {
|
|
43
|
+
allowExternalErrors: true,
|
|
44
|
+
fallbackRule: fallbackRule,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { combineRuleWithAll, createRule, createShieldSchema };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var crypto = require('crypto');
|
|
4
|
+
var lodash = require('lodash');
|
|
5
|
+
var User = require('../User.cjs');
|
|
6
|
+
var utils = require('./utils.cjs');
|
|
7
|
+
|
|
8
8
|
const createSubscriptionContextFactory = ({ requestLogger, augmentRequestInfo, claimsToLog, createUser = defaultCreateUser, requestInfoToLog, augmentContext, }) => {
|
|
9
9
|
// the function that creates the GraphQL context
|
|
10
10
|
return async (input) => {
|
|
@@ -13,7 +13,7 @@ const createSubscriptionContextFactory = ({ requestLogger, augmentRequestInfo, c
|
|
|
13
13
|
const host = Array.isArray(xForwardedFor) ? xForwardedFor[0] : xForwardedFor ?? req.headers.host;
|
|
14
14
|
// build request info from the connect request and socket
|
|
15
15
|
const requestInfo = {
|
|
16
|
-
requestId: req.headers['x-request-id']?.toString() ??
|
|
16
|
+
requestId: req.headers['x-request-id']?.toString() ?? crypto.randomUUID(),
|
|
17
17
|
protocol: 'ws',
|
|
18
18
|
host: host ?? '',
|
|
19
19
|
method: req.method ?? '',
|
|
@@ -32,10 +32,10 @@ const createSubscriptionContextFactory = ({ requestLogger, augmentRequestInfo, c
|
|
|
32
32
|
const requestLoggerMetadata = {};
|
|
33
33
|
// add request info to log
|
|
34
34
|
if (requestInfoToLog?.length)
|
|
35
|
-
requestLoggerMetadata.request =
|
|
35
|
+
requestLoggerMetadata.request = lodash.pick(requestInfo, requestInfoToLog);
|
|
36
36
|
// add user claims to log
|
|
37
37
|
if (claims && claimsToLog?.length)
|
|
38
|
-
requestLoggerMetadata.user =
|
|
38
|
+
requestLoggerMetadata.user = lodash.pick(claims, claimsToLog);
|
|
39
39
|
// build the request logger
|
|
40
40
|
logger = requestLogger(requestLoggerMetadata);
|
|
41
41
|
}
|
|
@@ -53,11 +53,11 @@ const createSubscriptionContextFactory = ({ requestLogger, augmentRequestInfo, c
|
|
|
53
53
|
return augmentedGraphQLContext;
|
|
54
54
|
};
|
|
55
55
|
};
|
|
56
|
-
exports.createSubscriptionContextFactory = createSubscriptionContextFactory;
|
|
57
56
|
const defaultCreateUser = ({ claims, connectionParams }) => {
|
|
58
57
|
if (!claims)
|
|
59
58
|
return Promise.resolve(undefined);
|
|
60
|
-
const accessToken =
|
|
61
|
-
return Promise.resolve(new
|
|
59
|
+
const accessToken = utils.extractTokenFromConnectionParams(connectionParams);
|
|
60
|
+
return Promise.resolve(new User.User(claims, accessToken ?? ''));
|
|
62
61
|
};
|
|
63
|
-
|
|
62
|
+
|
|
63
|
+
exports.createSubscriptionContextFactory = createSubscriptionContextFactory;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import type { Logger } from '@makerx/node-common';
|
|
3
3
|
import type { IncomingMessage } from 'http';
|
|
4
4
|
import { User } from '../User';
|
|
5
|
-
import { CreateRequestLogger, GraphQLContext, JwtPayload, RequestInfo } from '../context';
|
|
5
|
+
import type { CreateRequestLogger, GraphQLContext, JwtPayload, RequestInfo } from '../context';
|
|
6
6
|
export interface SubscriptionContextInput {
|
|
7
7
|
connectRequest: IncomingMessage;
|
|
8
8
|
connectionParams?: Readonly<Record<string, unknown>>;
|
|
@@ -20,4 +20,3 @@ export interface CreateSubscriptionContextConfig<TContext = GraphQLContext> {
|
|
|
20
20
|
augmentContext?: (context: TContext) => Record<string, unknown> | Promise<Record<string, unknown>>;
|
|
21
21
|
}
|
|
22
22
|
export declare const createSubscriptionContextFactory: <TContext extends GraphQLContext<Logger, RequestInfo, User | undefined> = GraphQLContext<Logger, RequestInfo, User | undefined>>({ requestLogger, augmentRequestInfo, claimsToLog, createUser, requestInfoToLog, augmentContext, }: CreateSubscriptionContextConfig<TContext>) => CreateSubscriptionContext<TContext>;
|
|
23
|
-
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { pick } from 'lodash';
|
|
3
|
+
import { User } from '../User.mjs';
|
|
4
|
+
import { extractTokenFromConnectionParams } from './utils.mjs';
|
|
5
|
+
|
|
6
|
+
const createSubscriptionContextFactory = ({ requestLogger, augmentRequestInfo, claimsToLog, createUser = defaultCreateUser, requestInfoToLog, augmentContext, }) => {
|
|
7
|
+
// the function that creates the GraphQL context
|
|
8
|
+
return async (input) => {
|
|
9
|
+
const { connectRequest: req, claims } = input;
|
|
10
|
+
const xForwardedFor = req.headers['x-forwarded-for'];
|
|
11
|
+
const host = Array.isArray(xForwardedFor) ? xForwardedFor[0] : xForwardedFor ?? req.headers.host;
|
|
12
|
+
// build request info from the connect request and socket
|
|
13
|
+
const requestInfo = {
|
|
14
|
+
requestId: req.headers['x-request-id']?.toString() ?? randomUUID(),
|
|
15
|
+
protocol: 'ws',
|
|
16
|
+
host: host ?? '',
|
|
17
|
+
method: req.method ?? '',
|
|
18
|
+
url: req.url ?? '',
|
|
19
|
+
origin: req.headers['origin'] ?? '',
|
|
20
|
+
referer: req.headers.referer?.toString() ?? '',
|
|
21
|
+
arrLogId: req.headers['x-arr-log-id']?.toString() ?? undefined,
|
|
22
|
+
clientIp: req.headers['x-forwarded-for']?.toString() ?? req.socket.remoteAddress,
|
|
23
|
+
correlationId: req.headers['x-correlation-id']?.toString() ?? undefined,
|
|
24
|
+
...augmentRequestInfo?.(input),
|
|
25
|
+
};
|
|
26
|
+
// create request logger
|
|
27
|
+
let logger;
|
|
28
|
+
if (typeof requestLogger === 'function') {
|
|
29
|
+
// build request logger metadata
|
|
30
|
+
const requestLoggerMetadata = {};
|
|
31
|
+
// add request info to log
|
|
32
|
+
if (requestInfoToLog?.length)
|
|
33
|
+
requestLoggerMetadata.request = pick(requestInfo, requestInfoToLog);
|
|
34
|
+
// add user claims to log
|
|
35
|
+
if (claims && claimsToLog?.length)
|
|
36
|
+
requestLoggerMetadata.user = pick(claims, claimsToLog);
|
|
37
|
+
// build the request logger
|
|
38
|
+
logger = requestLogger(requestLoggerMetadata);
|
|
39
|
+
}
|
|
40
|
+
else
|
|
41
|
+
logger = requestLogger;
|
|
42
|
+
const graphqlContext = {
|
|
43
|
+
requestInfo,
|
|
44
|
+
logger,
|
|
45
|
+
user: await createUser(input),
|
|
46
|
+
started: Date.now(),
|
|
47
|
+
};
|
|
48
|
+
const augmentedGraphQLContext = augmentContext
|
|
49
|
+
? { ...graphqlContext, ...(await augmentContext(graphqlContext)) }
|
|
50
|
+
: graphqlContext;
|
|
51
|
+
return augmentedGraphQLContext;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const defaultCreateUser = ({ claims, connectionParams }) => {
|
|
55
|
+
if (!claims)
|
|
56
|
+
return Promise.resolve(undefined);
|
|
57
|
+
const accessToken = extractTokenFromConnectionParams(connectionParams);
|
|
58
|
+
return Promise.resolve(new User(claims, accessToken ?? ''));
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export { createSubscriptionContextFactory };
|
package/subscriptions/index.d.ts
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const utils_1 = require("./utils");
|
|
12
|
-
const graphql_ws_1 = require("graphql-ws");
|
|
13
|
-
function useSubscriptionsServer({ schema, httpServer, createSubscriptionContext, logger, path = '/graphql', verifyToken, requireAuth, jwtClaimsToLog = ['oid', 'iss'], }) {
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var graphqlWs = require('graphql-ws');
|
|
4
|
+
var ws$1 = require('graphql-ws/lib/use/ws');
|
|
5
|
+
var lodash = require('lodash');
|
|
6
|
+
var ws = require('ws');
|
|
7
|
+
var logging = require('../logging.cjs');
|
|
8
|
+
var utils = require('./utils.cjs');
|
|
9
|
+
|
|
10
|
+
function useSubscriptionsServer({ schema, httpServer, createSubscriptionContext, logger, operationLogLevel = 'info', path = '/graphql', verifyToken, requireAuth, jwtClaimsToLog = ['oid', 'iss'], }) {
|
|
14
11
|
if (requireAuth && !verifyToken)
|
|
15
12
|
throw new Error('verifyToken must be supplied when requireAuth is true');
|
|
16
|
-
const wsServer = new
|
|
13
|
+
const wsServer = new ws.WebSocketServer({
|
|
17
14
|
server: httpServer,
|
|
18
15
|
path,
|
|
19
16
|
});
|
|
20
|
-
return
|
|
17
|
+
return ws$1.useServer({
|
|
21
18
|
schema,
|
|
22
19
|
onError(_ctx, message, errors) {
|
|
23
20
|
logger.error('GraphQL subscriptions server error', { message, errors });
|
|
@@ -28,7 +25,7 @@ function useSubscriptionsServer({ schema, httpServer, createSubscriptionContext,
|
|
|
28
25
|
logger.info(connectionEstablished);
|
|
29
26
|
return true;
|
|
30
27
|
}
|
|
31
|
-
const token =
|
|
28
|
+
const token = utils.extractTokenFromConnectionParams(ctx.connectionParams);
|
|
32
29
|
if (!token) {
|
|
33
30
|
if (requireAuth) {
|
|
34
31
|
logger.error('No authorization parameter was supplied via websocket connection params');
|
|
@@ -38,10 +35,10 @@ function useSubscriptionsServer({ schema, httpServer, createSubscriptionContext,
|
|
|
38
35
|
return true;
|
|
39
36
|
}
|
|
40
37
|
try {
|
|
41
|
-
const claims = await verifyToken(
|
|
38
|
+
const claims = await verifyToken(utils.getHost(ctx.extra.request), token);
|
|
42
39
|
ctx.extra.claims = claims;
|
|
43
40
|
logger.info(connectionEstablished, {
|
|
44
|
-
claims:
|
|
41
|
+
claims: lodash.pick(claims, jwtClaimsToLog),
|
|
45
42
|
});
|
|
46
43
|
return true;
|
|
47
44
|
}
|
|
@@ -53,24 +50,24 @@ function useSubscriptionsServer({ schema, httpServer, createSubscriptionContext,
|
|
|
53
50
|
onSubscribe: async (ctx) => {
|
|
54
51
|
if (!verifyToken)
|
|
55
52
|
return;
|
|
56
|
-
const token =
|
|
53
|
+
const token = utils.extractTokenFromConnectionParams(ctx.connectionParams);
|
|
57
54
|
if (!token) {
|
|
58
55
|
if (requireAuth) {
|
|
59
56
|
logger.error('No authorization parameter was supplied via websocket connection params');
|
|
60
|
-
ctx.extra.socket.close(
|
|
57
|
+
ctx.extra.socket.close(graphqlWs.CloseCode.Forbidden, 'Forbidden');
|
|
61
58
|
}
|
|
62
59
|
return;
|
|
63
60
|
}
|
|
64
61
|
try {
|
|
65
|
-
await verifyToken(
|
|
62
|
+
await verifyToken(utils.getHost(ctx.extra.request), token);
|
|
66
63
|
}
|
|
67
64
|
catch (error) {
|
|
68
|
-
logger.warn('Subscription connection auth token is no longer valid', { claims:
|
|
69
|
-
ctx.extra.socket.close(
|
|
65
|
+
logger.warn('Subscription connection auth token is no longer valid', { claims: lodash.pick(ctx.extra.claims, jwtClaimsToLog), error });
|
|
66
|
+
ctx.extra.socket.close(graphqlWs.CloseCode.Forbidden, 'Forbidden');
|
|
70
67
|
}
|
|
71
68
|
},
|
|
72
69
|
onDisconnect({ extra: { claims } }) {
|
|
73
|
-
logger.info('Subscription connection disconnected', { claims:
|
|
70
|
+
logger.info('Subscription connection disconnected', { claims: lodash.pick(claims, jwtClaimsToLog) });
|
|
74
71
|
},
|
|
75
72
|
context: async (ctx) => {
|
|
76
73
|
return createSubscriptionContext({
|
|
@@ -80,12 +77,12 @@ function useSubscriptionsServer({ schema, httpServer, createSubscriptionContext,
|
|
|
80
77
|
});
|
|
81
78
|
},
|
|
82
79
|
onOperation(_ctx, _message, args) {
|
|
83
|
-
(
|
|
80
|
+
logging.logSubscriptionOperation({ args, logLevel: operationLogLevel });
|
|
84
81
|
},
|
|
85
|
-
onNext(_ctx, _message, args,
|
|
86
|
-
(
|
|
82
|
+
onNext(_ctx, _message, args, { data, ...result }) {
|
|
83
|
+
logging.logSubscriptionOperation({ args, logLevel: operationLogLevel, result });
|
|
87
84
|
},
|
|
88
85
|
}, wsServer);
|
|
89
86
|
}
|
|
87
|
+
|
|
90
88
|
exports.useSubscriptionsServer = useSubscriptionsServer;
|
|
91
|
-
//# sourceMappingURL=server.js.map
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { Logger } from '@makerx/node-common';
|
|
3
|
-
import { GraphQLSchema } from 'graphql';
|
|
2
|
+
import type { Logger } from '@makerx/node-common';
|
|
3
|
+
import type { GraphQLSchema } from 'graphql';
|
|
4
4
|
import type { Server } from 'http';
|
|
5
|
-
import { JwtPayload } from '../context';
|
|
6
|
-
import { CreateSubscriptionContext } from './context';
|
|
7
|
-
export declare function useSubscriptionsServer({ schema, httpServer, createSubscriptionContext, logger, path, verifyToken, requireAuth, jwtClaimsToLog, }: {
|
|
5
|
+
import type { JwtPayload } from '../context';
|
|
6
|
+
import type { CreateSubscriptionContext } from './context';
|
|
7
|
+
export declare function useSubscriptionsServer<TLogger extends Logger = Logger>({ schema, httpServer, createSubscriptionContext, logger, operationLogLevel, path, verifyToken, requireAuth, jwtClaimsToLog, }: {
|
|
8
8
|
schema: GraphQLSchema;
|
|
9
9
|
httpServer: Server;
|
|
10
10
|
createSubscriptionContext: CreateSubscriptionContext;
|
|
11
|
-
logger:
|
|
11
|
+
logger: TLogger;
|
|
12
|
+
operationLogLevel?: keyof TLogger;
|
|
12
13
|
path?: string;
|
|
13
14
|
verifyToken?: (host: string, token: string) => Promise<JwtPayload>;
|
|
14
15
|
requireAuth?: boolean;
|
|
15
16
|
jwtClaimsToLog?: string[];
|
|
16
17
|
}): import("graphql-ws").Disposable;
|
|
17
|
-
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { CloseCode } from 'graphql-ws';
|
|
2
|
+
import { useServer } from 'graphql-ws/lib/use/ws';
|
|
3
|
+
import { pick } from 'lodash';
|
|
4
|
+
import { WebSocketServer } from 'ws';
|
|
5
|
+
import { logSubscriptionOperation } from '../logging.mjs';
|
|
6
|
+
import { extractTokenFromConnectionParams, getHost } from './utils.mjs';
|
|
7
|
+
|
|
8
|
+
function useSubscriptionsServer({ schema, httpServer, createSubscriptionContext, logger, operationLogLevel = 'info', path = '/graphql', verifyToken, requireAuth, jwtClaimsToLog = ['oid', 'iss'], }) {
|
|
9
|
+
if (requireAuth && !verifyToken)
|
|
10
|
+
throw new Error('verifyToken must be supplied when requireAuth is true');
|
|
11
|
+
const wsServer = new WebSocketServer({
|
|
12
|
+
server: httpServer,
|
|
13
|
+
path,
|
|
14
|
+
});
|
|
15
|
+
return useServer({
|
|
16
|
+
schema,
|
|
17
|
+
onError(_ctx, message, errors) {
|
|
18
|
+
logger.error('GraphQL subscriptions server error', { message, errors });
|
|
19
|
+
},
|
|
20
|
+
onConnect: async (ctx) => {
|
|
21
|
+
const connectionEstablished = 'Subscription connection established';
|
|
22
|
+
if (!verifyToken) {
|
|
23
|
+
logger.info(connectionEstablished);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
const token = extractTokenFromConnectionParams(ctx.connectionParams);
|
|
27
|
+
if (!token) {
|
|
28
|
+
if (requireAuth) {
|
|
29
|
+
logger.error('No authorization parameter was supplied via websocket connection params');
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
logger.info(connectionEstablished);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const claims = await verifyToken(getHost(ctx.extra.request), token);
|
|
37
|
+
ctx.extra.claims = claims;
|
|
38
|
+
logger.info(connectionEstablished, {
|
|
39
|
+
claims: pick(claims, jwtClaimsToLog),
|
|
40
|
+
});
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
logger.error('Failed to verify subscription connection auth token', { error });
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
onSubscribe: async (ctx) => {
|
|
49
|
+
if (!verifyToken)
|
|
50
|
+
return;
|
|
51
|
+
const token = extractTokenFromConnectionParams(ctx.connectionParams);
|
|
52
|
+
if (!token) {
|
|
53
|
+
if (requireAuth) {
|
|
54
|
+
logger.error('No authorization parameter was supplied via websocket connection params');
|
|
55
|
+
ctx.extra.socket.close(CloseCode.Forbidden, 'Forbidden');
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
await verifyToken(getHost(ctx.extra.request), token);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
logger.warn('Subscription connection auth token is no longer valid', { claims: pick(ctx.extra.claims, jwtClaimsToLog), error });
|
|
64
|
+
ctx.extra.socket.close(CloseCode.Forbidden, 'Forbidden');
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
onDisconnect({ extra: { claims } }) {
|
|
68
|
+
logger.info('Subscription connection disconnected', { claims: pick(claims, jwtClaimsToLog) });
|
|
69
|
+
},
|
|
70
|
+
context: async (ctx) => {
|
|
71
|
+
return createSubscriptionContext({
|
|
72
|
+
connectRequest: ctx.extra.request,
|
|
73
|
+
connectionParams: ctx.connectionParams,
|
|
74
|
+
claims: ctx.extra.claims,
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
onOperation(_ctx, _message, args) {
|
|
78
|
+
logSubscriptionOperation({ args, logLevel: operationLogLevel });
|
|
79
|
+
},
|
|
80
|
+
onNext(_ctx, _message, args, { data, ...result }) {
|
|
81
|
+
logSubscriptionOperation({ args, logLevel: operationLogLevel, result });
|
|
82
|
+
},
|
|
83
|
+
}, wsServer);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export { useSubscriptionsServer };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.getHost = exports.extractTokenFromConnectionParams = void 0;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
4
3
|
/**
|
|
5
4
|
* Extracts a token from a connection parameter named `authorization` or `Authorization`.
|
|
6
5
|
* The expected format of the parameter value is: Bearer <token>, consistent with an HTTP Authorization header.
|
|
@@ -14,11 +13,11 @@ function extractTokenFromConnectionParams(connectionParams) {
|
|
|
14
13
|
return undefined;
|
|
15
14
|
return bearerTokenValue.substring(7);
|
|
16
15
|
}
|
|
17
|
-
exports.extractTokenFromConnectionParams = extractTokenFromConnectionParams;
|
|
18
16
|
function getHost(request) {
|
|
19
17
|
const proxyHostHeader = request.headers['x-forwarded-host'];
|
|
20
18
|
const host = Array.isArray(proxyHostHeader) ? proxyHostHeader[0] ?? undefined : proxyHostHeader ?? request.headers.host ?? undefined;
|
|
21
19
|
return host ?? 'subscriptions';
|
|
22
20
|
}
|
|
21
|
+
|
|
22
|
+
exports.extractTokenFromConnectionParams = extractTokenFromConnectionParams;
|
|
23
23
|
exports.getHost = getHost;
|
|
24
|
-
//# sourceMappingURL=utils.js.map
|
package/subscriptions/utils.d.ts
CHANGED
|
@@ -9,4 +9,3 @@ import type { IncomingMessage } from 'http';
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function extractTokenFromConnectionParams(connectionParams?: Readonly<Record<string, unknown>>): string | undefined;
|
|
11
11
|
export declare function getHost(request: IncomingMessage): string;
|
|
12
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts a token from a connection parameter named `authorization` or `Authorization`.
|
|
3
|
+
* The expected format of the parameter value is: Bearer <token>, consistent with an HTTP Authorization header.
|
|
4
|
+
* Apollo Sandbox sets an `Authorization` connection parameter when you specify an HTTP Authorization header via the UI.
|
|
5
|
+
* @param connectionParams
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
function extractTokenFromConnectionParams(connectionParams) {
|
|
9
|
+
const bearerTokenValue = (connectionParams?.authorization ?? connectionParams?.Authorization);
|
|
10
|
+
if (!bearerTokenValue?.startsWith('Bearer '))
|
|
11
|
+
return undefined;
|
|
12
|
+
return bearerTokenValue.substring(7);
|
|
13
|
+
}
|
|
14
|
+
function getHost(request) {
|
|
15
|
+
const proxyHostHeader = request.headers['x-forwarded-host'];
|
|
16
|
+
const host = Array.isArray(proxyHostHeader) ? proxyHostHeader[0] ?? undefined : proxyHostHeader ?? request.headers.host ?? undefined;
|
|
17
|
+
return host ?? 'subscriptions';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { extractTokenFromConnectionParams, getHost };
|
package/testing.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { ApolloClientOptions } from '@apollo/client/core/ApolloClient';
|
|
1
|
+
import type { NormalizedCacheObject } from '@apollo/client/core';
|
|
2
|
+
import { ApolloClient } from '@apollo/client/core';
|
|
3
|
+
import type { ApolloClientOptions } from '@apollo/client/core/ApolloClient';
|
|
4
|
+
import type { ClientCredentialsConfig } from '@makerx/node-common';
|
|
4
5
|
export * from '@apollo/client/core';
|
|
5
|
-
export declare const createTestClient: (
|
|
6
|
-
export declare const createTestClientWithClientCredentials: (
|
|
7
|
-
//# sourceMappingURL=testing.d.ts.map
|
|
6
|
+
export declare const createTestClient: (url: string, accessToken?: string, options?: Partial<ApolloClientOptions<NormalizedCacheObject>>) => ApolloClient<NormalizedCacheObject>;
|
|
7
|
+
export declare const createTestClientWithClientCredentials: (url: string, clientCredentialsConfig: ClientCredentialsConfig, options?: Partial<ApolloClientOptions<NormalizedCacheObject>>) => ApolloClient<NormalizedCacheObject>;
|
package/utils.cjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const isIntrospectionQuery = (query) => query?.includes('__schema');
|
|
4
|
+
const isNil = (value) => value === null || value === undefined;
|
|
5
|
+
const isNotNil = (value) => !isNil(value);
|
|
6
|
+
|
|
7
|
+
exports.isIntrospectionQuery = isIntrospectionQuery;
|
|
8
|
+
exports.isNil = isNil;
|
|
9
|
+
exports.isNotNil = isNotNil;
|
package/utils.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export declare const isIntrospectionQuery: (query?: string) => boolean | undefined;
|
|
2
2
|
export declare const isNil: (value: unknown) => value is null | undefined;
|
|
3
3
|
export declare const isNotNil: <T>(value: T) => value is Exclude<T, null | undefined>;
|
|
4
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/utils.mjs
ADDED
package/User.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../src/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAGtC,qBAAa,IAAI;IACf,SAAgB,KAAK,EAAE,MAAM,CAAA;IAC7B,SAAgB,MAAM,EAAE,UAAU,CAAA;gBAEtB,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM;IAKnD,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAQ9B;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAK7B;IAED,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IAED,IAAI,KAAK,IAAI,MAAM,EAAE,CAEpB;IAED,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,YAAY;CAKrB"}
|
package/User.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"User.js","sourceRoot":"","sources":["../src/User.ts"],"names":[],"mappings":";;;AACA,mCAAkC;AAElC,MAAa,IAAI;IAIf,YAAY,MAAkB,EAAE,WAAmB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAA;IAC1B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,CACL,IAAI,CAAC,MAAM,CAAC,KAAK;YAChB,IAAI,CAAC,MAAM,CAAC,MAA+B,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,kBAAkB;YAC9B,IAAI,CAAC,MAAM,CAAC,WAAW;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAChB,CAAA;IACH,CAAC;IAED,IAAI,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;QAC7C,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,gBAAQ,CAAC,CAAA;QACrF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1D,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;IAChC,CAAC;IAEO,KAAK,CAAC,GAAG,MAA+B;QAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAW,CAAA;SACxD;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,YAAY,CAAC,GAAG,MAA+B;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjF,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAlDD,oBAkDC"}
|
package/context.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA"}
|
package/index.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./context"), exports);
|
|
18
|
-
__exportStar(require("./User"), exports);
|
|
19
|
-
__exportStar(require("./utils"), exports);
|
|
20
|
-
__exportStar(require("./logging"), exports);
|
|
21
|
-
__exportStar(require("./subscriptions"), exports);
|
|
22
|
-
__exportStar(require("./schema-util"), exports);
|
|
23
|
-
__exportStar(require("./shield"), exports);
|
|
24
|
-
__exportStar(require("./models"), exports);
|
|
25
|
-
//# sourceMappingURL=index.js.map
|
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,yCAAsB;AACtB,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,gDAA6B;AAC7B,2CAAwB;AACxB,2CAAwB"}
|
package/logging.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAS,MAAM,SAAS,CAAA;AAKrE,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC1C,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;QACrC,MAAM,CAAC,EAAE,SAAS,qBAAqB,EAAE,GAAG,IAAI,CAAA;KACjD,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,mBAAmB,6EAA8E,uBAAuB,SAgBpI,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,SAAU,aAAa,WAAW,MAAM,WAAW,MAAM,SAc5F,CAAA"}
|