samlesa 3.3.2 → 3.3.4
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/build/src/binding-post.js +2 -2
- package/build/src/libsaml.js +1 -1
- package/build/src/metadata-sp.js +159 -14
- package/build/src/urn.js +33 -1
- package/package.json +1 -1
- package/types/src/metadata-sp.d.ts +1 -1
- package/types/src/metadata-sp.d.ts.map +1 -1
- package/types/src/urn.d.ts +24 -1
- package/types/src/urn.d.ts.map +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @author tngan
|
|
4
4
|
* @desc Binding-level API, declare the functions using POST binding
|
|
5
5
|
*/
|
|
6
|
-
import { wording, StatusCode } from './urn.js';
|
|
6
|
+
import { wording, namespace, StatusCode } from './urn.js';
|
|
7
7
|
import { randomUUID } from 'node:crypto';
|
|
8
8
|
import libsaml from './libsaml.js';
|
|
9
9
|
import utility, { get } from './utility.js';
|
|
@@ -94,7 +94,7 @@ async function base64LoginResponse({ requestInfo = {}, entity, user = {}, custom
|
|
|
94
94
|
sp: entity.sp.entityMeta,
|
|
95
95
|
};
|
|
96
96
|
const nameIDFormat = idpSetting.nameIDFormat;
|
|
97
|
-
const selectedNameIDFormat = Array.isArray(nameIDFormat) ? nameIDFormat[0] :
|
|
97
|
+
const selectedNameIDFormat = Array.isArray(nameIDFormat) ? nameIDFormat[0] : namespace.format.unspecified;
|
|
98
98
|
if (metadata && metadata.idp && metadata.sp) {
|
|
99
99
|
const base = metadata.sp.getAssertionConsumerService(binding.post);
|
|
100
100
|
let rawSamlResponse;
|
package/build/src/libsaml.js
CHANGED
|
@@ -140,7 +140,7 @@ xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="{ID}"
|
|
|
140
140
|
* @type {LoginResponseTemplate}
|
|
141
141
|
*/
|
|
142
142
|
const defaultLoginResponseWithoutTResponseTemplate = {
|
|
143
|
-
context: '<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="{ID}" Version="2.0" IssueInstant="{IssueInstant}" Destination="{Destination}" ><saml:Issuer>{Issuer}</saml:Issuer><samlp:Status><samlp:StatusCode Value="{StatusCode}"/></samlp:Status><saml:Assertion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="{AssertionID}" Version="2.0" IssueInstant="{IssueInstant}"><saml:Issuer>{Issuer}</saml:Issuer><saml:Subject><saml:NameID Format="{NameIDFormat}">{NameID}</saml:NameID><saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><saml:SubjectConfirmationData NotOnOrAfter="{SubjectConfirmationDataNotOnOrAfter}" Recipient="{SubjectRecipient}"
|
|
143
|
+
context: '<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="{ID}" Version="2.0" IssueInstant="{IssueInstant}" Destination="{Destination}" ><saml:Issuer>{Issuer}</saml:Issuer><samlp:Status><samlp:StatusCode Value="{StatusCode}"/></samlp:Status><saml:Assertion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="{AssertionID}" Version="2.0" IssueInstant="{IssueInstant}"><saml:Issuer>{Issuer}</saml:Issuer><saml:Subject><saml:NameID Format="{NameIDFormat}">{NameID}</saml:NameID><saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><saml:SubjectConfirmationData NotOnOrAfter="{SubjectConfirmationDataNotOnOrAfter}" Recipient="{SubjectRecipient}" /></saml:SubjectConfirmation></saml:Subject><saml:Conditions NotBefore="{ConditionsNotBefore}" NotOnOrAfter="{ConditionsNotOnOrAfter}"><saml:AudienceRestriction><saml:Audience>{Audience}</saml:Audience></saml:AudienceRestriction></saml:Conditions>{AuthnStatement}{AttributeStatement}</saml:Assertion></samlp:Response>',
|
|
144
144
|
attributes: [],
|
|
145
145
|
additionalTemplates: {
|
|
146
146
|
'attributeStatementTemplate': defaultAttributeStatementTemplate,
|
package/build/src/metadata-sp.js
CHANGED
|
@@ -220,24 +220,169 @@ export class SpMetadata extends Metadata {
|
|
|
220
220
|
* @return {string/[string]} URL of endpoint(s)
|
|
221
221
|
*/
|
|
222
222
|
getAssertionConsumerService(binding) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
223
|
+
// 1. 预处理 binding 参数
|
|
224
|
+
// 如果 binding 不是字符串,视为“未指定 Binding 偏好”,直接进入全局兜底逻辑 (Fallback Mode)
|
|
225
|
+
let targetBindingName = null;
|
|
226
|
+
let useFallbackMode = false;
|
|
227
|
+
if (typeof binding === 'string') {
|
|
228
|
+
const resolved = namespace.binding[binding];
|
|
229
|
+
if (resolved) {
|
|
230
|
+
targetBindingName = resolved;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// 字符串传入了但 namespace 里没找到,也视为无效,进入兜底
|
|
234
|
+
console.warn(`[ACS Selection] 未知的 binding 键值: ${binding}, 将启用全局兜底策略.`);
|
|
235
|
+
useFallbackMode = true;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// 非字符串类型 (null, undefined, object 等),直接启用兜底
|
|
240
|
+
console.warn(`[ACS Selection] binding 参数类型错误 (${typeof binding}), 将启用全局兜底策略.`);
|
|
241
|
+
useFallbackMode = true;
|
|
242
|
+
}
|
|
243
|
+
const acsData = this.meta.assertionConsumerService;
|
|
244
|
+
// 2. 标准化数据为数组
|
|
245
|
+
let allCandidates = [];
|
|
246
|
+
if (Array.isArray(acsData)) {
|
|
247
|
+
allCandidates = acsData;
|
|
248
|
+
}
|
|
249
|
+
else if (acsData && typeof acsData === 'object') {
|
|
250
|
+
allCandidates = [acsData];
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
// 数据源本身为空,直接报错
|
|
254
|
+
throw new Error("SAML Metadata Error: No AssertionConsumerService definitions found in metadata.");
|
|
255
|
+
}
|
|
256
|
+
if (allCandidates.length === 0) {
|
|
257
|
+
throw new Error("SAML Metadata Error: AssertionConsumerService list is empty.");
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* 核心排序与选择函数
|
|
261
|
+
* 输入一个候选数组,返回最佳的一个对象
|
|
262
|
+
*/
|
|
263
|
+
const selectBestFromList = (list) => {
|
|
264
|
+
if (list.length === 0)
|
|
265
|
+
return undefined;
|
|
266
|
+
if (list.length === 1)
|
|
267
|
+
return list[0];
|
|
268
|
+
const tier1 = []; // isDefault === 'true'
|
|
269
|
+
const tier2 = []; // isDefault 不存在 或 不为 'false'
|
|
270
|
+
const tier3 = []; // 明确 isDefault === 'false'
|
|
271
|
+
list.forEach((item, originalIndex) => {
|
|
272
|
+
const isDef = item.isDefault;
|
|
273
|
+
const isTrue = (typeof isDef === 'string' && isDef.toLowerCase() === 'true');
|
|
274
|
+
const isFalse = (typeof isDef === 'string' && isDef.toLowerCase() === 'false');
|
|
275
|
+
if (isTrue) {
|
|
276
|
+
tier1.push(item);
|
|
277
|
+
}
|
|
278
|
+
else if (!isFalse) {
|
|
279
|
+
tier2.push(item);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
tier3.push(item);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
let selectedTier = [];
|
|
286
|
+
if (tier1.length > 0) {
|
|
287
|
+
selectedTier = tier1;
|
|
288
|
+
}
|
|
289
|
+
else if (tier2.length > 0) {
|
|
290
|
+
selectedTier = tier2;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
selectedTier = tier3;
|
|
294
|
+
}
|
|
295
|
+
// 二级排序:Index 升序 -> 原始顺序
|
|
296
|
+
const indexedTier = selectedTier.map((item, idx) => ({ item, originalIdx: idx }));
|
|
297
|
+
indexedTier.sort((a, b) => {
|
|
298
|
+
// 安全解析 index
|
|
299
|
+
let idxA = Infinity;
|
|
300
|
+
let idxB = Infinity;
|
|
301
|
+
if (a.item.index !== undefined && a.item.index !== null) {
|
|
302
|
+
const parsed = parseInt(a.item.index, 10);
|
|
303
|
+
if (!isNaN(parsed))
|
|
304
|
+
idxA = parsed;
|
|
305
|
+
}
|
|
306
|
+
if (b.item.index !== undefined && b.item.index !== null) {
|
|
307
|
+
const parsed = parseInt(b.item.index, 10);
|
|
308
|
+
if (!isNaN(parsed))
|
|
309
|
+
idxB = parsed;
|
|
310
|
+
}
|
|
311
|
+
if (idxA !== idxB) {
|
|
312
|
+
return idxA - idxB;
|
|
313
|
+
}
|
|
314
|
+
return a.originalIdx - b.originalIdx;
|
|
315
|
+
});
|
|
316
|
+
return indexedTier[0].item;
|
|
317
|
+
};
|
|
318
|
+
let resultLocation = undefined;
|
|
319
|
+
// ==========================================
|
|
320
|
+
// 第一阶段:尝试在指定的 binding 中查找 (仅在非兜底模式下执行)
|
|
321
|
+
// ==========================================
|
|
322
|
+
if (!useFallbackMode && targetBindingName) {
|
|
323
|
+
const matchedByBinding = allCandidates.filter(obj => obj.binding === targetBindingName);
|
|
324
|
+
console.log(`[ACS Selection] 目标 Binding: ${targetBindingName}`);
|
|
325
|
+
console.log(`[ACS Selection] 匹配该 Binding 的数量: ${matchedByBinding.length}`);
|
|
326
|
+
if (matchedByBinding.length > 0) {
|
|
327
|
+
const bestInBinding = selectBestFromList(matchedByBinding);
|
|
328
|
+
if (bestInBinding) {
|
|
329
|
+
console.log(`[ACS Selection] ✅ (阶段1) 在指定 Binding 中找到最佳项: ${bestInBinding.location}`);
|
|
330
|
+
resultLocation = bestInBinding.location;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// ==========================================
|
|
335
|
+
// 第二阶段:降级/兜底策略
|
|
336
|
+
// 如果第一阶段没找到,或者一开始就进入了兜底模式 (useFallbackMode)
|
|
337
|
+
// ==========================================
|
|
338
|
+
if (!resultLocation) {
|
|
339
|
+
if (useFallbackMode) {
|
|
340
|
+
console.log(`[ACS Selection] ⚠️ 启用全局兜底策略 (未指定有效 Binding)...`);
|
|
233
341
|
}
|
|
234
342
|
else {
|
|
235
|
-
|
|
236
|
-
|
|
343
|
+
console.log(`[ACS Selection] ⚠️ 指定 Binding 未找到可用项,进入降级策略...`);
|
|
344
|
+
}
|
|
345
|
+
// 2.1 全局寻找 isDefault='true'
|
|
346
|
+
const globalDefaults = allCandidates.filter(obj => obj.isDefault && String(obj.isDefault).toLowerCase() === 'true');
|
|
347
|
+
if (globalDefaults.length > 0) {
|
|
348
|
+
const best = selectBestFromList(globalDefaults);
|
|
349
|
+
if (best) {
|
|
350
|
+
console.log(`[ACS Selection] ✅ (阶段2) 跨 Binding 找到 isDefault=true: ${best.location} (${best.binding})`);
|
|
351
|
+
resultLocation = best.location;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// 2.2 全局寻找 isDefault 不为 'false' (隐式默认)
|
|
355
|
+
if (!resultLocation) {
|
|
356
|
+
const globalNonFalse = allCandidates.filter(obj => {
|
|
357
|
+
const isDef = obj.isDefault;
|
|
358
|
+
const isFalse = (typeof isDef === 'string' && isDef.toLowerCase() === 'false');
|
|
359
|
+
return !isFalse;
|
|
360
|
+
});
|
|
361
|
+
if (globalNonFalse.length > 0) {
|
|
362
|
+
const best = selectBestFromList(globalNonFalse);
|
|
363
|
+
if (best) {
|
|
364
|
+
console.log(`[ACS Selection] ✅ (阶段3) 跨 Binding 找到隐式默认: ${best.location} (${best.binding})`);
|
|
365
|
+
resultLocation = best.location;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// 2.3 终极兜底:所有数据中 index 最小
|
|
370
|
+
if (!resultLocation) {
|
|
371
|
+
const best = selectBestFromList(allCandidates);
|
|
372
|
+
if (best) {
|
|
373
|
+
console.log(`[ACS Selection] ✅ (阶段4) 终极兜底,选择 index 最小: ${best.location} (${best.binding})`);
|
|
374
|
+
resultLocation = best.location;
|
|
237
375
|
}
|
|
238
376
|
}
|
|
239
|
-
return location;
|
|
240
377
|
}
|
|
241
|
-
|
|
378
|
+
// ==========================================
|
|
379
|
+
// 最终检查:如果还是没找到,抛出错误
|
|
380
|
+
// ==========================================
|
|
381
|
+
if (!resultLocation) {
|
|
382
|
+
const errorMsg = "SAML Configuration Error: Unable to select any valid AssertionConsumerService URL. Metadata might be empty or malformed.";
|
|
383
|
+
console.error(`[ACS Selection] ❌ ${errorMsg}`);
|
|
384
|
+
throw new Error(errorMsg);
|
|
385
|
+
}
|
|
386
|
+
return resultLocation;
|
|
242
387
|
}
|
|
243
388
|
}
|
package/build/src/urn.js
CHANGED
|
@@ -61,17 +61,49 @@ const namespace = {
|
|
|
61
61
|
authnContextClassRef: {
|
|
62
62
|
password: 'urn:oasis:names:tc:SAML:2.0:ac:classes:Password',
|
|
63
63
|
passwordProtectedTransport: 'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport',
|
|
64
|
+
tlsClient: 'urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient',
|
|
65
|
+
previousSession: 'urn:oasis:names:tc:SAML:2.0:ac:classes:PreviousSession',
|
|
66
|
+
},
|
|
67
|
+
// 【新增】认证上下文比较方式 (用于 <RequestedAuthnContext Comparison="...">)
|
|
68
|
+
authnContextComparison: {
|
|
69
|
+
exact: 'exact',
|
|
70
|
+
minimum: 'minimum',
|
|
71
|
+
maximum: 'maximum',
|
|
72
|
+
better: 'better',
|
|
64
73
|
},
|
|
65
74
|
format: {
|
|
75
|
+
// NameID Formats (用于 <saml:NameID Format="...">)
|
|
66
76
|
emailAddress: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
|
|
67
77
|
persistent: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
|
|
68
78
|
transient: 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',
|
|
69
|
-
entity: 'urn:oasis:names:tc:SAML:2.0:nameid-format:entity',
|
|
70
79
|
unspecified: 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',
|
|
80
|
+
entity: 'urn:oasis:names:tc:SAML:2.0:nameid-format:entity',
|
|
71
81
|
kerberos: 'urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos',
|
|
72
82
|
windowsDomainQualifiedName: 'urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName',
|
|
73
83
|
x509SubjectName: 'urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName',
|
|
74
84
|
},
|
|
85
|
+
attributeNameFormat: {
|
|
86
|
+
// 最常用:简单的字符串名称 (如 "uid", "email")
|
|
87
|
+
basic: 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic',
|
|
88
|
+
// 常用:URI 风格 (如 "http://schemas.xmlsoap.org/claims/uid")
|
|
89
|
+
uri: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
90
|
+
// 常用:OID 风格 (如 "0.9.2342.19200300.100.1.1"),通常也归类为 uri 或单独定义
|
|
91
|
+
// 注意:SAML 标准中 OID 通常使用 'uri' 格式,或者有些特定实现有专门的 oid 标识,
|
|
92
|
+
// 但标准定义的只有 basic, uri, 和 unspecified。
|
|
93
|
+
// 如果一定要显式区分 OID,有些库会自定义,但标准 URI 如下:
|
|
94
|
+
unspecified: 'urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified',
|
|
95
|
+
// 较少用:基于 X.509 属性证书的定义
|
|
96
|
+
x500dn: 'urn:oasis:names:tc:SAML:2.0:attrname-format:X500DN',
|
|
97
|
+
},
|
|
98
|
+
consent: {
|
|
99
|
+
unspecified: 'urn:oasis:names:tc:SAML:2.0:consent:unspecified', // 默认
|
|
100
|
+
obtained: 'urn:oasis:names:tc:SAML:2.0:consent:obtained', // 已获得同意
|
|
101
|
+
prior: 'urn:oasis:names:tc:SAML:2.0:consent:prior', // 之前已获得
|
|
102
|
+
explicit: 'urn:oasis:names:tc:SAML:2.0:consent:explicit', // 明确同意
|
|
103
|
+
implicit: 'urn:oasis:names:tc:SAML:2.0:consent:implicit', // 隐式同意
|
|
104
|
+
denied: 'urn:oasis:names:tc:SAML:2.0:consent:denied', // 拒绝
|
|
105
|
+
unavailable: 'urn:oasis:names:tc:SAML:2.0:consent:unavailable', // 无法获取同意状态
|
|
106
|
+
},
|
|
75
107
|
statusCode: {
|
|
76
108
|
// permissible top-level status codes
|
|
77
109
|
success: 'urn:oasis:names:tc:SAML:2.0:status:Success',
|
package/package.json
CHANGED
|
@@ -32,6 +32,6 @@ export declare class SpMetadata extends Metadata {
|
|
|
32
32
|
* @param {string} binding protocol binding (e.g. redirect, post)
|
|
33
33
|
* @return {string/[string]} URL of endpoint(s)
|
|
34
34
|
*/
|
|
35
|
-
getAssertionConsumerService(binding: string): string
|
|
35
|
+
getAssertionConsumerService(binding: string): string;
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=metadata-sp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-sp.d.ts","sourceRoot":"","sources":["../../src/metadata-sp.ts"],"names":[],"mappings":"AAAA;;;;EAIE;AACF,OAAO,QAAQ,EAAE,EAAC,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxD,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;CAE7D;AAeD,MAAM,CAAC,OAAO,WAAU,IAAI,EAAE,qBAAqB,cAElD;AAED;;EAEE;AACF,qBAAa,UAAW,SAAQ,QAAQ;IAEtC;;;MAGE;gBACU,IAAI,EAAE,qBAAqB;IAiNvC;;;MAGE;IACK,sBAAsB,IAAI,OAAO;IAGxC;;;MAGE;IACK,oBAAoB,IAAI,OAAO;IAGtC;;;;MAIE;IACK,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM
|
|
1
|
+
{"version":3,"file":"metadata-sp.d.ts","sourceRoot":"","sources":["../../src/metadata-sp.ts"],"names":[],"mappings":"AAAA;;;;EAIE;AACF,OAAO,QAAQ,EAAE,EAAC,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMxD,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;CAE7D;AAeD,MAAM,CAAC,OAAO,WAAU,IAAI,EAAE,qBAAqB,cAElD;AAED;;EAEE;AACF,qBAAa,UAAW,SAAQ,QAAQ;IAEtC;;;MAGE;gBACU,IAAI,EAAE,qBAAqB;IAiNvC;;;MAGE;IACK,sBAAsB,IAAI,OAAO;IAGxC;;;MAGE;IACK,oBAAoB,IAAI,OAAO;IAGtC;;;;MAIE;IACK,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAsL5D"}
|
package/types/src/urn.d.ts
CHANGED
|
@@ -56,17 +56,40 @@ declare const namespace: {
|
|
|
56
56
|
authnContextClassRef: {
|
|
57
57
|
password: string;
|
|
58
58
|
passwordProtectedTransport: string;
|
|
59
|
+
tlsClient: string;
|
|
60
|
+
previousSession: string;
|
|
61
|
+
};
|
|
62
|
+
authnContextComparison: {
|
|
63
|
+
exact: string;
|
|
64
|
+
minimum: string;
|
|
65
|
+
maximum: string;
|
|
66
|
+
better: string;
|
|
59
67
|
};
|
|
60
68
|
format: {
|
|
61
69
|
emailAddress: string;
|
|
62
70
|
persistent: string;
|
|
63
71
|
transient: string;
|
|
64
|
-
entity: string;
|
|
65
72
|
unspecified: string;
|
|
73
|
+
entity: string;
|
|
66
74
|
kerberos: string;
|
|
67
75
|
windowsDomainQualifiedName: string;
|
|
68
76
|
x509SubjectName: string;
|
|
69
77
|
};
|
|
78
|
+
attributeNameFormat: {
|
|
79
|
+
basic: string;
|
|
80
|
+
uri: string;
|
|
81
|
+
unspecified: string;
|
|
82
|
+
x500dn: string;
|
|
83
|
+
};
|
|
84
|
+
consent: {
|
|
85
|
+
unspecified: string;
|
|
86
|
+
obtained: string;
|
|
87
|
+
prior: string;
|
|
88
|
+
explicit: string;
|
|
89
|
+
implicit: string;
|
|
90
|
+
denied: string;
|
|
91
|
+
unavailable: string;
|
|
92
|
+
};
|
|
70
93
|
statusCode: {
|
|
71
94
|
success: string;
|
|
72
95
|
requester: string;
|
package/types/src/urn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urn.d.ts","sourceRoot":"","sources":["../../src/urn.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oBAAY,gBAAgB;IAC1B,QAAQ,uDAAuD;IAC/D,IAAI,mDAAmD;IACvD,UAAU,8DAA8D;IACxE,QAAQ,uDAAuD;CAChE;AAED,oBAAY,qBAAqB;IAC/B,GAAG,sBAAsB;IACzB,GAAG,sBAAsB;CAC1B;AAED,oBAAY,UAAU;IAEpB,OAAO,+CAA+C;IACtD,SAAS,iDAAiD;IAC1D,SAAS,iDAAiD;IAC1D,eAAe,uDAAuD;IAEtE,UAAU,mDAAmD;IAC7D,sBAAsB,8DAA8D;IACpF,mBAAmB,2DAA2D;IAC9E,cAAc,sDAAsD;IACpE,cAAc,sDAAsD;IACpE,SAAS,iDAAiD;IAC1D,cAAc,sDAAsD;IACpE,aAAa,qDAAqD;IAClE,kBAAkB,0DAA0D;IAC5E,aAAa,qDAAqD;IAClE,kBAAkB,0DAA0D;IAC5E,wBAAwB,gEAAgE;IACxF,qBAAqB,6DAA6D;IAClF,oBAAoB,4DAA4D;IAChF,qBAAqB,6DAA6D;IAClF,gBAAgB,wDAAwD;IACxE,kBAAkB,0DAA0D;IAC5E,gBAAgB,wDAAwD;IACxE,kBAAkB,0DAA0D;CAC7E;AAED,QAAA,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"urn.d.ts","sourceRoot":"","sources":["../../src/urn.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oBAAY,gBAAgB;IAC1B,QAAQ,uDAAuD;IAC/D,IAAI,mDAAmD;IACvD,UAAU,8DAA8D;IACxE,QAAQ,uDAAuD;CAChE;AAED,oBAAY,qBAAqB;IAC/B,GAAG,sBAAsB;IACzB,GAAG,sBAAsB;CAC1B;AAED,oBAAY,UAAU;IAEpB,OAAO,+CAA+C;IACtD,SAAS,iDAAiD;IAC1D,SAAS,iDAAiD;IAC1D,eAAe,uDAAuD;IAEtE,UAAU,mDAAmD;IAC7D,sBAAsB,8DAA8D;IACpF,mBAAmB,2DAA2D;IAC9E,cAAc,sDAAsD;IACpE,cAAc,sDAAsD;IACpE,SAAS,iDAAiD;IAC1D,cAAc,sDAAsD;IACpE,aAAa,qDAAqD;IAClE,kBAAkB,0DAA0D;IAC5E,aAAa,qDAAqD;IAClE,kBAAkB,0DAA0D;IAC5E,wBAAwB,gEAAgE;IACxF,qBAAqB,6DAA6D;IAClF,oBAAoB,4DAA4D;IAChF,qBAAqB,6DAA6D;IAClF,gBAAgB,wDAAwD;IACxE,kBAAkB,0DAA0D;IAC5E,gBAAgB,wDAAwD;IACxE,kBAAkB,0DAA0D;CAC7E;AAED,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Fd,CAAC;AAEF,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BT,CAAC;AAEF,QAAA,MAAM,qBAAqB;;;;;CAK1B,CAAC;AAEF,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2EZ;;;WAGG;;;;;;;;;;;;;CAwBN,CAAC;AAcF,oBAAY,UAAU;IACpB,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;CAClC;AAED,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CAyBZ,CAAC;AAIF,QAAA,MAAM,aAAa;;;;CAIlB,CAAC;AAEF,OAAO,EAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAC,CAAC"}
|