@boxyhq/saml-jackson 1.3.12 → 1.5.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.
Files changed (56) hide show
  1. package/dist/controller/analytics.d.ts +12 -0
  2. package/dist/controller/analytics.js +66 -0
  3. package/dist/controller/analytics.js.map +1 -0
  4. package/dist/controller/api.d.ts +2 -1
  5. package/dist/controller/api.js +21 -0
  6. package/dist/controller/api.js.map +1 -1
  7. package/dist/controller/connection/oidc.js +1 -1
  8. package/dist/controller/connection/oidc.js.map +1 -1
  9. package/dist/controller/connection/saml.js +24 -3
  10. package/dist/controller/connection/saml.js.map +1 -1
  11. package/dist/controller/oauth.d.ts +3 -2
  12. package/dist/controller/oauth.js +133 -281
  13. package/dist/controller/oauth.js.map +1 -1
  14. package/dist/controller/saml-handler.d.ts +38 -0
  15. package/dist/controller/saml-handler.js +166 -0
  16. package/dist/controller/saml-handler.js.map +1 -0
  17. package/dist/controller/setup-link.d.ts +12 -0
  18. package/dist/controller/setup-link.js +134 -0
  19. package/dist/controller/setup-link.js.map +1 -0
  20. package/dist/controller/utils.d.ts +16 -1
  21. package/dist/controller/utils.js +48 -3
  22. package/dist/controller/utils.js.map +1 -1
  23. package/dist/db/mem.js +6 -2
  24. package/dist/db/mem.js.map +1 -1
  25. package/dist/db/utils.js +0 -1
  26. package/dist/db/utils.js.map +1 -1
  27. package/dist/directory-sync/Base.js +2 -2
  28. package/dist/directory-sync/Base.js.map +1 -1
  29. package/dist/directory-sync/WebhookEventsLogger.d.ts +4 -1
  30. package/dist/directory-sync/WebhookEventsLogger.js +3 -3
  31. package/dist/directory-sync/WebhookEventsLogger.js.map +1 -1
  32. package/dist/ee/common/checkLicense.d.ts +2 -0
  33. package/dist/ee/common/checkLicense.js +19 -0
  34. package/dist/ee/common/checkLicense.js.map +1 -0
  35. package/dist/ee/federated-saml/app.d.ts +19 -0
  36. package/dist/ee/federated-saml/app.js +126 -0
  37. package/dist/ee/federated-saml/app.js.map +1 -0
  38. package/dist/ee/federated-saml/index.d.ts +12 -0
  39. package/dist/ee/federated-saml/index.js +56 -0
  40. package/dist/ee/federated-saml/index.js.map +1 -0
  41. package/dist/ee/federated-saml/sso.d.ts +17 -0
  42. package/dist/ee/federated-saml/sso.js +76 -0
  43. package/dist/ee/federated-saml/sso.js.map +1 -0
  44. package/dist/ee/federated-saml/types.d.ts +18 -0
  45. package/dist/ee/federated-saml/types.js +3 -0
  46. package/dist/ee/federated-saml/types.js.map +1 -0
  47. package/dist/index.d.ts +9 -0
  48. package/dist/index.js +21 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/saml/lib.d.ts +31 -0
  51. package/dist/saml/lib.js +217 -0
  52. package/dist/saml/lib.js.map +1 -0
  53. package/dist/typings.d.ts +37 -4
  54. package/dist/typings.js +15 -0
  55. package/dist/typings.js.map +1 -1
  56. package/package.json +15 -14
@@ -0,0 +1,31 @@
1
+ import type { SAMLProfile } from '@boxyhq/saml20/dist/typings';
2
+ export declare const extractSAMLResponseAttributes: (decodedResponse: string, validateOpts: ValidateOption) => Promise<SAMLProfile>;
3
+ export declare const extractSAMLRequestAttributes: (samlRequest: string) => Promise<{
4
+ id: string;
5
+ acsUrl: string;
6
+ entityId: string;
7
+ publicKey: string;
8
+ providerName: string;
9
+ }>;
10
+ export declare const createMetadataXML: ({ ssoUrl, entityId, x509cert, }: {
11
+ ssoUrl: string;
12
+ entityId: string;
13
+ x509cert: string;
14
+ }) => Promise<string>;
15
+ export declare const decodeBase64: (string: string, isDeflated: boolean) => Promise<string>;
16
+ export declare const createSAMLResponse: ({ audience, issuer, acsUrl, profile, requestId, privateKey, publicKey, }: {
17
+ audience: string;
18
+ issuer: string;
19
+ acsUrl: string;
20
+ profile: SAMLProfile;
21
+ requestId: string;
22
+ privateKey: string;
23
+ publicKey: string;
24
+ }) => Promise<string>;
25
+ type ValidateOption = {
26
+ thumbprint: string;
27
+ audience: string;
28
+ privateKey: string;
29
+ inResponseTo?: string;
30
+ };
31
+ export {};
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.createSAMLResponse = exports.decodeBase64 = exports.createMetadataXML = exports.extractSAMLRequestAttributes = exports.extractSAMLResponseAttributes = void 0;
16
+ const crypto_1 = __importDefault(require("crypto"));
17
+ const xml2js_1 = __importDefault(require("xml2js"));
18
+ const zlib_1 = require("zlib");
19
+ const util_1 = require("util");
20
+ const saml20_1 = __importDefault(require("@boxyhq/saml20"));
21
+ const xmlbuilder_1 = __importDefault(require("xmlbuilder"));
22
+ const claims_1 = __importDefault(require("../saml/claims"));
23
+ // Validate the SAMLResponse and extract the user profile
24
+ const extractSAMLResponseAttributes = (decodedResponse, validateOpts) => __awaiter(void 0, void 0, void 0, function* () {
25
+ const attributes = yield saml20_1.default.validate(decodedResponse, validateOpts);
26
+ if (attributes && attributes.claims) {
27
+ // We map claims to our attributes id, email, firstName, lastName where possible. We also map original claims to raw
28
+ attributes.claims = claims_1.default.map(attributes.claims);
29
+ // Some providers don't return the id in the assertion, we set it to a sha256 hash of the email
30
+ if (!attributes.claims.id && attributes.claims.email) {
31
+ attributes.claims.id = crypto_1.default.createHash('sha256').update(attributes.claims.email).digest('hex');
32
+ }
33
+ }
34
+ return attributes;
35
+ });
36
+ exports.extractSAMLResponseAttributes = extractSAMLResponseAttributes;
37
+ const extractSAMLRequestAttributes = (samlRequest) => __awaiter(void 0, void 0, void 0, function* () {
38
+ const decodeRequest = yield (0, exports.decodeBase64)(samlRequest, true);
39
+ const result = yield parseXML(decodeRequest);
40
+ const publicKey = result['samlp:AuthnRequest']['Signature']
41
+ ? result['samlp:AuthnRequest']['Signature'][0]['KeyInfo'][0]['X509Data'][0]['X509Certificate'][0]
42
+ : null;
43
+ const attributes = result['samlp:AuthnRequest']['$'];
44
+ const id = attributes.ID;
45
+ const providerName = attributes.ProviderName;
46
+ const acsUrl = attributes.AssertionConsumerServiceURL;
47
+ const entityId = result['samlp:AuthnRequest']['saml:Issuer'][0];
48
+ if (!entityId) {
49
+ throw new Error("Missing 'Entity ID' in SAML Request.");
50
+ }
51
+ if (!acsUrl) {
52
+ throw new Error("Missing 'ACS URL' in SAML Request.");
53
+ }
54
+ return {
55
+ id,
56
+ acsUrl,
57
+ entityId,
58
+ publicKey,
59
+ providerName,
60
+ };
61
+ });
62
+ exports.extractSAMLRequestAttributes = extractSAMLRequestAttributes;
63
+ // Create Metadata XML
64
+ const createMetadataXML = ({ ssoUrl, entityId, x509cert, }) => __awaiter(void 0, void 0, void 0, function* () {
65
+ x509cert = saml20_1.default.stripCertHeaderAndFooter(x509cert);
66
+ const today = new Date();
67
+ const nodes = {
68
+ 'md:EntityDescriptor': {
69
+ '@xmlns:md': 'urn:oasis:names:tc:SAML:2.0:metadata',
70
+ '@entityID': entityId,
71
+ '@validUntil': new Date(today.setFullYear(today.getFullYear() + 10)).toISOString(),
72
+ 'md:IDPSSODescriptor': {
73
+ '@WantAuthnRequestsSigned': false,
74
+ '@protocolSupportEnumeration': 'urn:oasis:names:tc:SAML:2.0:protocol',
75
+ 'md:KeyDescriptor': {
76
+ '@use': 'signing',
77
+ 'ds:KeyInfo': {
78
+ '@xmlns:ds': 'http://www.w3.org/2000/09/xmldsig#',
79
+ 'ds:X509Data': {
80
+ 'ds:X509Certificate': {
81
+ '#text': x509cert,
82
+ },
83
+ },
84
+ },
85
+ },
86
+ 'md:NameIDFormat': {
87
+ '#text': 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
88
+ },
89
+ 'md:SingleSignOnService': [
90
+ {
91
+ '@Binding': 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
92
+ '@Location': ssoUrl,
93
+ },
94
+ {
95
+ '@Binding': 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
96
+ '@Location': ssoUrl,
97
+ },
98
+ ],
99
+ },
100
+ },
101
+ };
102
+ return xmlbuilder_1.default.create(nodes, { encoding: 'UTF-8', standalone: false }).end({ pretty: true });
103
+ });
104
+ exports.createMetadataXML = createMetadataXML;
105
+ // Decode the base64 string
106
+ const decodeBase64 = (string, isDeflated) => __awaiter(void 0, void 0, void 0, function* () {
107
+ const inflateRawAsync = (0, util_1.promisify)(zlib_1.inflateRaw);
108
+ return isDeflated
109
+ ? (yield inflateRawAsync(Buffer.from(string, 'base64'))).toString()
110
+ : Buffer.from(string, 'base64').toString();
111
+ });
112
+ exports.decodeBase64 = decodeBase64;
113
+ // Parse XML
114
+ const parseXML = (xml) => __awaiter(void 0, void 0, void 0, function* () {
115
+ return new Promise((resolve, reject) => {
116
+ xml2js_1.default.parseString(xml, (err, result) => {
117
+ if (err) {
118
+ reject(err);
119
+ }
120
+ resolve(result);
121
+ });
122
+ });
123
+ });
124
+ const randomId = () => {
125
+ return '_' + crypto_1.default.randomBytes(10).toString('hex');
126
+ };
127
+ // Create SAML Response and sign it
128
+ const createSAMLResponse = ({ audience, issuer, acsUrl, profile, requestId, privateKey, publicKey, }) => __awaiter(void 0, void 0, void 0, function* () {
129
+ const authDate = new Date();
130
+ const authTimestamp = authDate.toISOString();
131
+ authDate.setMinutes(authDate.getMinutes() - 5);
132
+ const notBefore = authDate.toISOString();
133
+ authDate.setMinutes(authDate.getMinutes() + 10);
134
+ const notAfter = authDate.toISOString();
135
+ const nodes = {
136
+ 'samlp:Response': {
137
+ '@xmlns:samlp': 'urn:oasis:names:tc:SAML:2.0:protocol',
138
+ '@Version': '2.0',
139
+ '@ID': randomId(),
140
+ '@Destination': acsUrl,
141
+ '@InResponseTo': requestId,
142
+ '@IssueInstant': authTimestamp,
143
+ 'saml:Issuer': {
144
+ '@xmlns:saml': 'urn:oasis:names:tc:SAML:2.0:assertion',
145
+ '@Format': 'urn:oasis:names:tc:SAML:2.0:assertion',
146
+ '#text': issuer,
147
+ },
148
+ 'samlp:Status': {
149
+ 'samlp:StatusCode': {
150
+ '@Value': 'urn:oasis:names:tc:SAML:2.0:status:Success',
151
+ },
152
+ },
153
+ 'saml:Assertion': {
154
+ '@xmlns:saml': 'urn:oasis:names:tc:SAML:2.0:assertion',
155
+ '@Version': '2.0',
156
+ '@ID': randomId(),
157
+ '@IssueInstant': authTimestamp,
158
+ 'saml:Issuer': {
159
+ '#text': issuer,
160
+ },
161
+ 'saml:Subject': {
162
+ '@xmlns:saml': 'urn:oasis:names:tc:SAML:2.0:assertion',
163
+ 'saml:NameID': {
164
+ '@Format': 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
165
+ '#text': profile.claims.email,
166
+ },
167
+ 'saml:SubjectConfirmation': {
168
+ '@Method': 'urn:oasis:names:tc:SAML:2.0:cm:bearer',
169
+ 'saml:SubjectConfirmationData': {
170
+ '@Recipient': acsUrl,
171
+ '@NotOnOrAfter': notAfter,
172
+ '@InResponseTo': requestId,
173
+ },
174
+ },
175
+ },
176
+ 'saml:Conditions': {
177
+ '@NotBefore': notBefore,
178
+ '@NotOnOrAfter': notAfter,
179
+ 'saml:AudienceRestriction': {
180
+ 'saml:Audience': {
181
+ '#text': audience,
182
+ },
183
+ },
184
+ },
185
+ 'saml:AuthnStatement': {
186
+ '@AuthnInstant': authTimestamp,
187
+ '@SessionIndex': '_YIlFoNFzLMDYxdwf-T_BuimfkGa5qhKg',
188
+ 'saml:AuthnContext': {
189
+ 'saml:AuthnContextClassRef': {
190
+ '#text': 'urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified',
191
+ },
192
+ },
193
+ },
194
+ 'saml:AttributeStatement': {
195
+ '@xmlns:xs': 'http://www.w3.org/2001/XMLSchema',
196
+ '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
197
+ 'saml:Attribute': Object.keys(profile.claims.raw).map((attributeName) => {
198
+ return {
199
+ '@Name': attributeName,
200
+ '@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic',
201
+ 'saml:AttributeValue': {
202
+ '@xmlns:xs': 'http://www.w3.org/2001/XMLSchema',
203
+ '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
204
+ '@xsi:type': 'xs:string',
205
+ '#text': profile.claims.raw[attributeName],
206
+ },
207
+ };
208
+ }),
209
+ },
210
+ },
211
+ },
212
+ };
213
+ const xml = xmlbuilder_1.default.create(nodes, { encoding: 'UTF-8' }).end();
214
+ return yield saml20_1.default.sign(xml, privateKey, publicKey, '/*[local-name(.)="Response" and namespace-uri(.)="urn:oasis:names:tc:SAML:2.0:protocol"]');
215
+ });
216
+ exports.createSAMLResponse = createSAMLResponse;
217
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/saml/lib.ts"],"names":[],"mappings":"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"}
package/dist/typings.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type JWK } from 'jose';
2
+ export * from '../src/ee/federated-saml/types';
2
3
  interface SSOConnection {
3
4
  defaultRedirectUrl: string;
4
5
  redirectUrl: string[] | string;
@@ -64,7 +65,14 @@ type TenantQuery = {
64
65
  product: string;
65
66
  strategy?: ConnectionType;
66
67
  };
67
- export type GetConnectionsQuery = ClientIDQuery | TenantQuery;
68
+ type TenantProduct = {
69
+ tenant: string;
70
+ product: string;
71
+ };
72
+ export type GetConnectionsQuery = ClientIDQuery | TenantQuery | {
73
+ entityId: string;
74
+ };
75
+ export type GetIDPEntityIDBody = TenantProduct;
68
76
  export type DelConnectionsQuery = (ClientIDQuery & {
69
77
  clientSecret: string;
70
78
  }) | TenantQuery;
@@ -95,6 +103,7 @@ export interface IConnectionAPIController {
95
103
  clientSecret: string;
96
104
  }): Promise<void>;
97
105
  getConnections(body: GetConnectionsQuery): Promise<Array<SAMLSSORecord | OIDCSSORecord>>;
106
+ getIDPEntityID(body: GetIDPEntityIDBody): string;
98
107
  /**
99
108
  * @deprecated Use `getConnections` instead.
100
109
  */
@@ -113,6 +122,7 @@ export interface IOAuthController {
113
122
  samlResponse(body: SAMLResponsePayload): Promise<{
114
123
  redirect_url?: string;
115
124
  app_select_form?: string;
125
+ responseForm?: string;
116
126
  }>;
117
127
  oidcAuthzResponse(body: OIDCAuthzResponsePayload): Promise<{
118
128
  redirect_url?: string;
@@ -245,7 +255,7 @@ export interface DatabaseDriver {
245
255
  getByIndex(namespace: string, idx: Index): Promise<any>;
246
256
  }
247
257
  export interface Storable {
248
- getAll(pageOffset?: number, pageLimit?: number): Promise<unknown[]>;
258
+ getAll(pageOffset?: number, pageLimit?: number): Promise<any[]>;
249
259
  get(key: string): Promise<any>;
250
260
  put(key: string, val: any, ...indexes: Index[]): Promise<any>;
251
261
  delete(key: string): Promise<any>;
@@ -295,6 +305,12 @@ export interface JacksonOption {
295
305
  publicKey: string;
296
306
  privateKey: string;
297
307
  };
308
+ boxyhqLicenseKey?: string;
309
+ retraced?: {
310
+ host?: string;
311
+ adminToken?: string;
312
+ };
313
+ noAnalytics?: boolean;
298
314
  }
299
315
  export interface SLORequestParams {
300
316
  nameId: string;
@@ -540,7 +556,10 @@ export interface IDirectoryGroups {
540
556
  }
541
557
  export interface IWebhookEventsLogger extends Base {
542
558
  log(directory: Directory, event: DirectorySyncEvent): Promise<WebhookEventLog>;
543
- getAll(): Promise<WebhookEventLog[]>;
559
+ getAll({ pageOffset, pageLimit }: {
560
+ pageOffset?: number;
561
+ pageLimit?: number;
562
+ }): Promise<WebhookEventLog[]>;
544
563
  get(id: string): Promise<WebhookEventLog>;
545
564
  clear(): Promise<void>;
546
565
  delete(id: string): Promise<void>;
@@ -605,4 +624,18 @@ export interface WebhookEventLog extends DirectorySyncEvent {
605
624
  status_code?: number;
606
625
  delivered?: boolean;
607
626
  }
608
- export {};
627
+ export type SetupLinkCreatePayload = {
628
+ tenant: string;
629
+ product: string;
630
+ service: SetupLinkService;
631
+ regenerate?: boolean;
632
+ };
633
+ export type SetupLink = {
634
+ setupID: string;
635
+ tenant: string;
636
+ product: string;
637
+ url: string;
638
+ service: SetupLinkService;
639
+ validTill: number;
640
+ };
641
+ export type SetupLinkService = 'sso' | 'dsync';
package/dist/typings.js CHANGED
@@ -1,6 +1,21 @@
1
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
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.DirectorySyncProviders = void 0;
18
+ __exportStar(require("../src/ee/federated-saml/types"), exports);
4
19
  var DirectorySyncProviders;
5
20
  (function (DirectorySyncProviders) {
6
21
  DirectorySyncProviders["azure-scim-v2"] = "Azure SCIM v2.0";
@@ -1 +1 @@
1
- {"version":3,"file":"typings.js","sourceRoot":"","sources":["../src/typings.ts"],"names":[],"mappings":";;;AA2eA,IAAY,sBAMX;AAND,WAAY,sBAAsB;IAChC,2DAAmC,CAAA;IACnC,iEAAyC,CAAA;IACzC,yDAAiC,CAAA;IACjC,8DAAsC,CAAA;IACtC,+DAAuC,CAAA;AACzC,CAAC,EANW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAMjC"}
1
+ {"version":3,"file":"typings.js","sourceRoot":"","sources":["../src/typings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,iEAA+C;AA0f/C,IAAY,sBAMX;AAND,WAAY,sBAAsB;IAChC,2DAAmC,CAAA;IACnC,iEAAyC,CAAA;IACzC,yDAAiC,CAAA;IACjC,8DAAsC,CAAA;IACtC,+DAAuC,CAAA;AACzC,CAAC,EANW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAMjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boxyhq/saml-jackson",
3
- "version": "1.3.12",
3
+ "version": "1.5.0",
4
4
  "description": "SAML Jackson library",
5
5
  "keywords": [
6
6
  "SAML 2.0"
@@ -42,14 +42,15 @@
42
42
  "dependencies": {
43
43
  "@boxyhq/saml20": "1.1.0",
44
44
  "@opentelemetry/api": "1.3.0",
45
- "axios": "1.1.3",
46
- "jose": "4.11.1",
47
- "marked": "4.2.3",
48
- "mongodb": "4.12.1",
45
+ "axios": "1.2.2",
46
+ "jose": "4.11.2",
47
+ "marked": "4.2.5",
48
+ "mixpanel": "0.17.0",
49
+ "mongodb": "4.13.0",
49
50
  "mssql": "9.0.1",
50
51
  "mysql2": "2.3.3",
51
52
  "node-forge": "1.3.1",
52
- "openid-client": "5.3.0",
53
+ "openid-client": "5.3.1",
53
54
  "pg": "8.8.0",
54
55
  "redis": "4.5.1",
55
56
  "reflect-metadata": "0.1.13",
@@ -60,20 +61,20 @@
60
61
  },
61
62
  "devDependencies": {
62
63
  "@faker-js/faker": "7.6.0",
63
- "@types/node": "18.11.10",
64
+ "@types/node": "18.11.18",
64
65
  "@types/sinon": "10.0.13",
65
66
  "@types/tap": "15.0.7",
66
- "@typescript-eslint/eslint-plugin": "5.44.0",
67
- "@typescript-eslint/parser": "5.45.1",
67
+ "@typescript-eslint/eslint-plugin": "5.47.1",
68
+ "@typescript-eslint/parser": "5.47.1",
68
69
  "cross-env": "7.0.3",
69
- "eslint": "8.28.0",
70
+ "eslint": "8.31.0",
70
71
  "eslint-config-prettier": "8.5.0",
71
- "prettier": "2.8.0",
72
- "sinon": "14.0.2",
72
+ "prettier": "2.8.1",
73
+ "sinon": "15.0.1",
73
74
  "tap": "16.3.2",
74
75
  "ts-node": "10.9.1",
75
- "tsconfig-paths": "4.1.0",
76
- "typescript": "4.9.3"
76
+ "tsconfig-paths": "4.1.2",
77
+ "typescript": "4.9.4"
77
78
  },
78
79
  "engines": {
79
80
  "node": ">=14.18.1 <=18.x"