@boxyhq/saml-jackson 1.4.0 → 1.5.1
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/controller/analytics.d.ts +12 -0
- package/dist/controller/analytics.js +66 -0
- package/dist/controller/analytics.js.map +1 -0
- package/dist/controller/api.js +12 -1
- package/dist/controller/api.js.map +1 -1
- package/dist/controller/oauth.d.ts +3 -2
- package/dist/controller/oauth.js +132 -280
- package/dist/controller/oauth.js.map +1 -1
- package/dist/controller/saml-handler.d.ts +38 -0
- package/dist/controller/saml-handler.js +166 -0
- package/dist/controller/saml-handler.js.map +1 -0
- package/dist/controller/setup-link.d.ts +7 -7
- package/dist/controller/setup-link.js +56 -67
- package/dist/controller/setup-link.js.map +1 -1
- package/dist/controller/utils.d.ts +13 -1
- package/dist/controller/utils.js +45 -3
- package/dist/controller/utils.js.map +1 -1
- package/dist/db/db.d.ts +1 -1
- package/dist/db/db.js +2 -2
- package/dist/db/db.js.map +1 -1
- package/dist/db/mem.d.ts +2 -2
- package/dist/db/mem.js +27 -6
- package/dist/db/mem.js.map +1 -1
- package/dist/db/mongo.d.ts +2 -2
- package/dist/db/mongo.js +14 -8
- package/dist/db/mongo.js.map +1 -1
- package/dist/db/redis.d.ts +2 -2
- package/dist/db/redis.js +57 -5
- package/dist/db/redis.js.map +1 -1
- package/dist/db/sql/sql.d.ts +2 -2
- package/dist/db/sql/sql.js +19 -9
- package/dist/db/sql/sql.js.map +1 -1
- package/dist/db/store.js +2 -2
- package/dist/db/store.js.map +1 -1
- package/dist/db/utils.js +0 -1
- package/dist/db/utils.js.map +1 -1
- package/dist/directory-sync/Base.js +2 -2
- package/dist/directory-sync/Base.js.map +1 -1
- package/dist/directory-sync/WebhookEventsLogger.d.ts +4 -1
- package/dist/directory-sync/WebhookEventsLogger.js +3 -3
- package/dist/directory-sync/WebhookEventsLogger.js.map +1 -1
- package/dist/ee/common/checkLicense.d.ts +2 -0
- package/dist/ee/common/checkLicense.js +19 -0
- package/dist/ee/common/checkLicense.js.map +1 -0
- package/dist/ee/federated-saml/app.d.ts +19 -0
- package/dist/ee/federated-saml/app.js +126 -0
- package/dist/ee/federated-saml/app.js.map +1 -0
- package/dist/ee/federated-saml/index.d.ts +12 -0
- package/dist/ee/federated-saml/index.js +56 -0
- package/dist/ee/federated-saml/index.js.map +1 -0
- package/dist/ee/federated-saml/sso.d.ts +17 -0
- package/dist/ee/federated-saml/sso.js +76 -0
- package/dist/ee/federated-saml/sso.js.map +1 -0
- package/dist/ee/federated-saml/types.d.ts +18 -0
- package/dist/ee/federated-saml/types.js +3 -0
- package/dist/ee/federated-saml/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/saml/lib.d.ts +31 -0
- package/dist/saml/lib.js +217 -0
- package/dist/saml/lib.js.map +1 -0
- package/dist/typings.d.ts +28 -21
- package/dist/typings.js +15 -0
- package/dist/typings.js.map +1 -1
- package/package.json +12 -16
package/dist/saml/lib.js
ADDED
@@ -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;
|
@@ -68,7 +69,9 @@ type TenantProduct = {
|
|
68
69
|
tenant: string;
|
69
70
|
product: string;
|
70
71
|
};
|
71
|
-
export type GetConnectionsQuery = ClientIDQuery | TenantQuery
|
72
|
+
export type GetConnectionsQuery = ClientIDQuery | TenantQuery | {
|
73
|
+
entityId: string;
|
74
|
+
};
|
72
75
|
export type GetIDPEntityIDBody = TenantProduct;
|
73
76
|
export type DelConnectionsQuery = (ClientIDQuery & {
|
74
77
|
clientSecret: string;
|
@@ -119,6 +122,7 @@ export interface IOAuthController {
|
|
119
122
|
samlResponse(body: SAMLResponsePayload): Promise<{
|
120
123
|
redirect_url?: string;
|
121
124
|
app_select_form?: string;
|
125
|
+
responseForm?: string;
|
122
126
|
}>;
|
123
127
|
oidcAuthzResponse(body: OIDCAuthzResponsePayload): Promise<{
|
124
128
|
redirect_url?: string;
|
@@ -248,14 +252,14 @@ export interface DatabaseDriver {
|
|
248
252
|
get(namespace: string, key: string): Promise<any>;
|
249
253
|
put(namespace: string, key: string, val: any, ttl: number, ...indexes: Index[]): Promise<any>;
|
250
254
|
delete(namespace: string, key: string): Promise<any>;
|
251
|
-
getByIndex(namespace: string, idx: Index): Promise<any>;
|
255
|
+
getByIndex(namespace: string, idx: Index, pageOffset?: number, pageLimit?: number): Promise<any>;
|
252
256
|
}
|
253
257
|
export interface Storable {
|
254
258
|
getAll(pageOffset?: number, pageLimit?: number): Promise<any[]>;
|
255
259
|
get(key: string): Promise<any>;
|
256
260
|
put(key: string, val: any, ...indexes: Index[]): Promise<any>;
|
257
261
|
delete(key: string): Promise<any>;
|
258
|
-
getByIndex(idx: Index): Promise<any>;
|
262
|
+
getByIndex(idx: Index, pageOffset?: number, pageLimit?: number): Promise<any>;
|
259
263
|
}
|
260
264
|
export interface DatabaseStore {
|
261
265
|
store(namespace: string): Storable;
|
@@ -301,6 +305,12 @@ export interface JacksonOption {
|
|
301
305
|
publicKey: string;
|
302
306
|
privateKey: string;
|
303
307
|
};
|
308
|
+
boxyhqLicenseKey?: string;
|
309
|
+
retraced?: {
|
310
|
+
host?: string;
|
311
|
+
adminToken?: string;
|
312
|
+
};
|
313
|
+
noAnalytics?: boolean;
|
304
314
|
}
|
305
315
|
export interface SLORequestParams {
|
306
316
|
nameId: string;
|
@@ -546,7 +556,10 @@ export interface IDirectoryGroups {
|
|
546
556
|
}
|
547
557
|
export interface IWebhookEventsLogger extends Base {
|
548
558
|
log(directory: Directory, event: DirectorySyncEvent): Promise<WebhookEventLog>;
|
549
|
-
getAll(
|
559
|
+
getAll({ pageOffset, pageLimit }: {
|
560
|
+
pageOffset?: number;
|
561
|
+
pageLimit?: number;
|
562
|
+
}): Promise<WebhookEventLog[]>;
|
550
563
|
get(id: string): Promise<WebhookEventLog>;
|
551
564
|
clear(): Promise<void>;
|
552
565
|
delete(id: string): Promise<void>;
|
@@ -614,29 +627,23 @@ export interface WebhookEventLog extends DirectorySyncEvent {
|
|
614
627
|
export type SetupLinkCreatePayload = {
|
615
628
|
tenant: string;
|
616
629
|
product: string;
|
617
|
-
|
630
|
+
name?: string;
|
631
|
+
description?: string;
|
632
|
+
defaultRedirectUrl?: string;
|
633
|
+
redirectUrl?: string;
|
634
|
+
service: SetupLinkService;
|
618
635
|
regenerate?: boolean;
|
619
636
|
};
|
620
|
-
export type SetupLinkRegeneratePayload = {
|
621
|
-
reference: string;
|
622
|
-
};
|
623
637
|
export type SetupLink = {
|
624
638
|
setupID: string;
|
625
639
|
tenant: string;
|
640
|
+
name?: string;
|
641
|
+
description?: string;
|
642
|
+
defaultRedirectUrl?: string;
|
643
|
+
redirectUrl?: string;
|
626
644
|
product: string;
|
627
645
|
url: string;
|
628
|
-
service:
|
646
|
+
service: SetupLinkService;
|
629
647
|
validTill: number;
|
630
648
|
};
|
631
|
-
export type
|
632
|
-
data: T | null;
|
633
|
-
error: ApiError | null;
|
634
|
-
};
|
635
|
-
export interface ISetupLinkController {
|
636
|
-
create(body: SetupLinkCreatePayload): Promise<ApiResponse<SetupLink>>;
|
637
|
-
getAll(): Promise<ApiResponse<SetupLink[]>>;
|
638
|
-
getByService(service: any): Promise<ApiResponse<SetupLink[]>>;
|
639
|
-
getByToken(token: any): Promise<ApiResponse<SetupLink>>;
|
640
|
-
remove(key: string): Promise<ApiResponse<boolean>>;
|
641
|
-
}
|
642
|
-
export {};
|
649
|
+
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";
|
package/dist/typings.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"typings.js","sourceRoot":"","sources":["../src/typings.ts"],"names":[],"mappings":"
|
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
|
+
"version": "1.5.1",
|
4
4
|
"description": "SAML Jackson library",
|
5
5
|
"keywords": [
|
6
6
|
"SAML 2.0"
|
@@ -29,7 +29,7 @@
|
|
29
29
|
"db:migration:run:mariadb": "cross-env DB_TYPE=mariadb DB_URL=mariadb://root@localhost:3306/mysql ts-node --transpile-only ./node_modules/typeorm/cli.js migration:run -d typeorm.ts",
|
30
30
|
"db:migration:run:mssql": "cross-env DB_TYPE=mssql DB_URL='sqlserver://localhost:1433;database=master;username=sa;password=123ABabc!' ts-node --transpile-only ./node_modules/typeorm/cli.js migration:run -d typeorm.ts",
|
31
31
|
"prepublishOnly": "npm run build",
|
32
|
-
"test": "tap --ts --timeout=100 --coverage-map=map.js test/**/*.test.ts",
|
32
|
+
"test": "cross-env BOXYHQ_NO_ANALYTICS=1 tap --ts --timeout=100 --coverage-map=map.js test/**/*.test.ts",
|
33
33
|
"sort": "npx sort-package-json"
|
34
34
|
},
|
35
35
|
"tap": {
|
@@ -42,10 +42,11 @@
|
|
42
42
|
"dependencies": {
|
43
43
|
"@boxyhq/saml20": "1.1.0",
|
44
44
|
"@opentelemetry/api": "1.3.0",
|
45
|
-
"axios": "1.
|
46
|
-
"jose": "4.11.
|
47
|
-
"marked": "4.2.
|
48
|
-
"
|
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",
|
@@ -60,20 +61,15 @@
|
|
60
61
|
},
|
61
62
|
"devDependencies": {
|
62
63
|
"@faker-js/faker": "7.6.0",
|
63
|
-
"@types/node": "18.11.
|
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",
|
68
67
|
"cross-env": "7.0.3",
|
69
|
-
"
|
70
|
-
"
|
71
|
-
"prettier": "2.8.0",
|
72
|
-
"sinon": "14.0.2",
|
73
|
-
"tap": "16.3.2",
|
68
|
+
"sinon": "15.0.1",
|
69
|
+
"tap": "16.3.3",
|
74
70
|
"ts-node": "10.9.1",
|
75
|
-
"tsconfig-paths": "4.1.
|
76
|
-
"typescript": "4.9.
|
71
|
+
"tsconfig-paths": "4.1.2",
|
72
|
+
"typescript": "4.9.4"
|
77
73
|
},
|
78
74
|
"engines": {
|
79
75
|
"node": ">=14.18.1 <=18.x"
|