@kya-os/consent 0.1.13 → 0.1.14
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/bundle/inline.d.ts.map +1 -1
- package/dist/bundle/inline.js +2 -2
- package/dist/bundle/inline.js.map +1 -1
- package/dist/bundle/shell.d.ts +5 -0
- package/dist/bundle/shell.d.ts.map +1 -1
- package/dist/bundle/shell.js +3 -1
- package/dist/bundle/shell.js.map +1 -1
- package/dist/cjs/bundle/index.js +57 -0
- package/dist/cjs/bundle/index.js.map +1 -0
- package/dist/cjs/bundle/inline.js +22 -0
- package/dist/cjs/bundle/inline.js.map +1 -0
- package/dist/cjs/bundle/shell.js +291 -0
- package/dist/cjs/bundle/shell.js.map +1 -0
- package/dist/cjs/components/consent-button.js +180 -0
- package/dist/cjs/components/consent-button.js.map +1 -0
- package/dist/cjs/components/consent-checkbox.js +223 -0
- package/dist/cjs/components/consent-checkbox.js.map +1 -0
- package/dist/cjs/components/consent-input.js +335 -0
- package/dist/cjs/components/consent-input.js.map +1 -0
- package/dist/cjs/components/consent-oauth-button.js +392 -0
- package/dist/cjs/components/consent-oauth-button.js.map +1 -0
- package/dist/cjs/components/consent-otp-input.js +388 -0
- package/dist/cjs/components/consent-otp-input.js.map +1 -0
- package/dist/cjs/components/consent-permissions.js +433 -0
- package/dist/cjs/components/consent-permissions.js.map +1 -0
- package/dist/cjs/components/consent-shell.js +234 -0
- package/dist/cjs/components/consent-shell.js.map +1 -0
- package/dist/cjs/components/consent-terms.js +287 -0
- package/dist/cjs/components/consent-terms.js.map +1 -0
- package/dist/cjs/components/index.js +37 -0
- package/dist/cjs/components/index.js.map +1 -0
- package/dist/cjs/components/mcp-consent.js +1034 -0
- package/dist/cjs/components/mcp-consent.js.map +1 -0
- package/dist/cjs/constants/auth-modes.js +128 -0
- package/dist/cjs/constants/auth-modes.js.map +1 -0
- package/dist/cjs/constants/colors.js +40 -0
- package/dist/cjs/constants/colors.js.map +1 -0
- package/dist/cjs/constants/defaults.js +146 -0
- package/dist/cjs/constants/defaults.js.map +1 -0
- package/dist/cjs/constants/index.js +40 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/index.js +49 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/react/index.js +190 -0
- package/dist/cjs/react/index.js.map +1 -0
- package/dist/cjs/resolution/index.js +28 -0
- package/dist/cjs/resolution/index.js.map +1 -0
- package/dist/cjs/resolution/resolve-branding.js +159 -0
- package/dist/cjs/resolution/resolve-branding.js.map +1 -0
- package/dist/cjs/resolution/resolve-config.js +270 -0
- package/dist/cjs/resolution/resolve-config.js.map +1 -0
- package/dist/cjs/resolution/resolve-copy.js +136 -0
- package/dist/cjs/resolution/resolve-copy.js.map +1 -0
- package/dist/cjs/schemas/api.schemas.js +156 -0
- package/dist/cjs/schemas/api.schemas.js.map +1 -0
- package/dist/cjs/schemas/branding.schemas.js +57 -0
- package/dist/cjs/schemas/branding.schemas.js.map +1 -0
- package/dist/cjs/schemas/config.schemas.js +147 -0
- package/dist/cjs/schemas/config.schemas.js.map +1 -0
- package/dist/cjs/schemas/index.js +29 -0
- package/dist/cjs/schemas/index.js.map +1 -0
- package/dist/cjs/schemas/modes.schemas.js +107 -0
- package/dist/cjs/schemas/modes.schemas.js.map +1 -0
- package/dist/cjs/security/escape.js +206 -0
- package/dist/cjs/security/escape.js.map +1 -0
- package/dist/cjs/security/index.js +26 -0
- package/dist/cjs/security/index.js.map +1 -0
- package/dist/cjs/security/validators.js +210 -0
- package/dist/cjs/security/validators.js.map +1 -0
- package/dist/cjs/styles/css-variables.js +129 -0
- package/dist/cjs/styles/css-variables.js.map +1 -0
- package/dist/cjs/styles/index.js +28 -0
- package/dist/cjs/styles/index.js.map +1 -0
- package/dist/cjs/styles/stylesheet.js +204 -0
- package/dist/cjs/styles/stylesheet.js.map +1 -0
- package/dist/cjs/styles/tokens.js +183 -0
- package/dist/cjs/styles/tokens.js.map +1 -0
- package/dist/cjs/templates/base/base-template.js +282 -0
- package/dist/cjs/templates/base/base-template.js.map +1 -0
- package/dist/cjs/templates/base/components.js +295 -0
- package/dist/cjs/templates/base/components.js.map +1 -0
- package/dist/cjs/templates/base/index.js +26 -0
- package/dist/cjs/templates/base/index.js.map +1 -0
- package/dist/cjs/templates/index.js +34 -0
- package/dist/cjs/templates/index.js.map +1 -0
- package/dist/cjs/templates/modes/consent-only.template.js +74 -0
- package/dist/cjs/templates/modes/consent-only.template.js.map +1 -0
- package/dist/cjs/templates/modes/credentials.template.js +414 -0
- package/dist/cjs/templates/modes/credentials.template.js.map +1 -0
- package/dist/cjs/templates/modes/index.js +24 -0
- package/dist/cjs/templates/modes/index.js.map +1 -0
- package/dist/cjs/templates/modes/magic-link.template.js +196 -0
- package/dist/cjs/templates/modes/magic-link.template.js.map +1 -0
- package/dist/cjs/templates/modes/oauth.template.js +153 -0
- package/dist/cjs/templates/modes/oauth.template.js.map +1 -0
- package/dist/cjs/templates/modes/otp.template.js +316 -0
- package/dist/cjs/templates/modes/otp.template.js.map +1 -0
- package/dist/cjs/templates/modes/success.template.js +140 -0
- package/dist/cjs/templates/modes/success.template.js.map +1 -0
- package/dist/cjs/templates/registry.js +133 -0
- package/dist/cjs/templates/registry.js.map +1 -0
- package/dist/cjs/types/api.types.js +10 -0
- package/dist/cjs/types/api.types.js.map +1 -0
- package/dist/cjs/types/branding.types.js +10 -0
- package/dist/cjs/types/branding.types.js.map +1 -0
- package/dist/cjs/types/config.types.js +10 -0
- package/dist/cjs/types/config.types.js.map +1 -0
- package/dist/cjs/types/copy.types.js +10 -0
- package/dist/cjs/types/copy.types.js.map +1 -0
- package/dist/cjs/types/index.js +31 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/modes.types.js +140 -0
- package/dist/cjs/types/modes.types.js.map +1 -0
- package/dist/cjs/types/page.types.js +10 -0
- package/dist/cjs/types/page.types.js.map +1 -0
- package/dist/components/mcp-consent.d.ts +6 -0
- package/dist/components/mcp-consent.d.ts.map +1 -1
- package/dist/components/mcp-consent.js +14 -0
- package/dist/components/mcp-consent.js.map +1 -1
- package/dist/consent.js +7 -0
- package/dist/consent.min.js +2 -2
- package/dist/schemas/api.schemas.d.ts +116 -116
- package/dist/schemas/config.schemas.d.ts +116 -116
- package/dist/schemas/modes.schemas.d.ts +28 -28
- package/package.json +29 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sCAA6D;AAC7D,6CAA+B;AAE/B,kBAAkB;AAClB,uEAAgE;AAChE,2EAAoE;AACpE,qEAA8D;AAC9D,qEAA8D;AAE9D,sBAAsB;AACtB,iFAA0E;AAC1E,qEAA8D;AAC9D,mFAA2E;AAC3E,6EAAqE;AAErE,sBAAsB;AACtB,iEAA0D;AAE1D,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;GAEG;AACU,QAAA,kBAAkB,GAAG,IAAA,uBAAe,EAAC;IAChD,OAAO,EAAE,gBAAgB;IACzB,YAAY,EAAE,iCAAa;IAC3B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,OAAO,EAAE,OAAgC;KAC1C;CACF,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,oBAAoB,GAAG,IAAA,uBAAe,EAAC;IAClD,OAAO,EAAE,kBAAkB;IAC3B,YAAY,EAAE,qCAAe;IAC7B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,QAAQ,EAAE,QAAuE;KAClF;CACF,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,iBAAiB,GAAG,IAAA,uBAAe,EAAC;IAC/C,OAAO,EAAE,eAAe;IACxB,YAAY,EAAE,+BAAY;IAC1B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,OAAO,EAAE,OAA2B;QACpC,QAAQ,EAAE,QAA4B;KACvC;CACF,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,iBAAiB,GAAG,IAAA,uBAAe,EAAC;IAC/C,OAAO,EAAE,eAAe;IACxB,YAAY,EAAE,+BAAY;IAC1B,KAAK,EAAE,KAAK;CACb,CAAC,CAAC;AAEH,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;GAEG;AACU,QAAA,uBAAuB,GAAG,IAAA,uBAAe,EAAC;IACrD,OAAO,EAAE,qBAAqB;IAC9B,YAAY,EAAE,2CAAkB;IAChC,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,QAAQ,EAAE,QAA0D;KACrE;CACF,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,iBAAiB,GAAG,IAAA,uBAAe,EAAC;IAC/C,OAAO,EAAE,eAAe;IACxB,YAAY,EAAE,+BAAY;IAC1B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,QAAQ,EAAE,QAAuE;KAClF;CACF,CAAC,CAAC;AAUH;;GAEG;AACU,QAAA,uBAAuB,GAAG,IAAA,uBAAe,EAAC;IACrD,OAAO,EAAE,sBAAsB;IAC/B,YAAY,EAAE,4CAAkB;IAChC,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,YAAY,EAAE,aAAyD;KACxE;CACF,CAAC,CAAC;AAEH;;;;;;GAMG;AACU,QAAA,oBAAoB,GAAG,IAAA,uBAAe,EAAC;IAClD,OAAO,EAAE,mBAAmB;IAC5B,YAAY,EAAE,sCAAe;IAC7B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,UAAU,EAAE,UAAuD;QACnE,QAAQ,EAAE,QAAqD;KAChE;CACF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;GAoBG;AACU,QAAA,eAAe,GAAG,IAAA,uBAAe,EAAC;IAC7C,OAAO,EAAE,aAAa;IACtB,YAAY,EAAE,2BAAU;IACxB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,SAAS,EAAE,qBAA+C;QAC1D,MAAM,EAAE,kBAA4C;QACpD,OAAO,EAAE,mBAAgE;KAC1E;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Consent Resolution Utilities
|
|
4
|
+
*
|
|
5
|
+
* Functions to resolve partial config into complete render-ready config.
|
|
6
|
+
* Applies defaults and placeholder substitution.
|
|
7
|
+
*
|
|
8
|
+
* @module @kya-os/consent/resolution
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
22
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
__exportStar(require("./resolve-copy.js"), exports);
|
|
26
|
+
__exportStar(require("./resolve-branding.js"), exports);
|
|
27
|
+
__exportStar(require("./resolve-config.js"), exports);
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/resolution/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;AAEH,oDAAkC;AAClC,wDAAsC;AACtC,sDAAoC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Branding Resolution
|
|
4
|
+
*
|
|
5
|
+
* Resolves branding config with defaults and generates CSS variables.
|
|
6
|
+
*
|
|
7
|
+
* @module @kya-os/consent/resolution/resolve-branding
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.isValidHexColor = isValidHexColor;
|
|
11
|
+
exports.sanitizeColor = sanitizeColor;
|
|
12
|
+
exports.isValidUrl = isValidUrl;
|
|
13
|
+
exports.sanitizeUrl = sanitizeUrl;
|
|
14
|
+
exports.generateBrandingCSSVars = generateBrandingCSSVars;
|
|
15
|
+
exports.resolveConsentBranding = resolveConsentBranding;
|
|
16
|
+
exports.hasCustomBranding = hasCustomBranding;
|
|
17
|
+
exports.mergeBranding = mergeBranding;
|
|
18
|
+
const defaults_js_1 = require("../constants/defaults.js");
|
|
19
|
+
const colors_js_1 = require("../constants/colors.js");
|
|
20
|
+
/**
|
|
21
|
+
* Validate hex color format
|
|
22
|
+
*
|
|
23
|
+
* @param color - Color string to validate
|
|
24
|
+
* @returns True if valid hex color
|
|
25
|
+
*/
|
|
26
|
+
function isValidHexColor(color) {
|
|
27
|
+
if (!color)
|
|
28
|
+
return false;
|
|
29
|
+
return /^#[0-9A-Fa-f]{6}$/.test(color);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sanitize a color value, returning default if invalid
|
|
33
|
+
*
|
|
34
|
+
* @param color - Color to sanitize
|
|
35
|
+
* @param defaultColor - Default if invalid
|
|
36
|
+
* @returns Valid hex color
|
|
37
|
+
*/
|
|
38
|
+
function sanitizeColor(color, defaultColor) {
|
|
39
|
+
if (isValidHexColor(color)) {
|
|
40
|
+
return color;
|
|
41
|
+
}
|
|
42
|
+
return defaultColor;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validate URL format
|
|
46
|
+
*
|
|
47
|
+
* @param url - URL string to validate
|
|
48
|
+
* @returns True if valid http/https URL
|
|
49
|
+
*/
|
|
50
|
+
function isValidUrl(url) {
|
|
51
|
+
if (!url)
|
|
52
|
+
return false;
|
|
53
|
+
try {
|
|
54
|
+
const parsed = new URL(url);
|
|
55
|
+
return parsed.protocol === "http:" || parsed.protocol === "https:";
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Sanitize a URL value, returning undefined if invalid
|
|
63
|
+
*
|
|
64
|
+
* @param url - URL to sanitize
|
|
65
|
+
* @returns Valid URL or undefined
|
|
66
|
+
*/
|
|
67
|
+
function sanitizeUrl(url) {
|
|
68
|
+
if (isValidUrl(url)) {
|
|
69
|
+
return url;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Convert hex color to RGB string
|
|
75
|
+
*
|
|
76
|
+
* @param hex - Hex color string (e.g., '#2563EB')
|
|
77
|
+
* @returns RGB string (e.g., '37, 99, 235')
|
|
78
|
+
*/
|
|
79
|
+
function hexToRgb(hex) {
|
|
80
|
+
// Remove # if present
|
|
81
|
+
const cleanHex = hex.replace(/^#/, '');
|
|
82
|
+
// Parse hex to RGB
|
|
83
|
+
const r = parseInt(cleanHex.slice(0, 2), 16);
|
|
84
|
+
const g = parseInt(cleanHex.slice(2, 4), 16);
|
|
85
|
+
const b = parseInt(cleanHex.slice(4, 6), 16);
|
|
86
|
+
return `${r}, ${g}, ${b}`;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Generate CSS variables from branding
|
|
90
|
+
*
|
|
91
|
+
* @param branding - Resolved branding config
|
|
92
|
+
* @returns CSS variable object
|
|
93
|
+
*/
|
|
94
|
+
function generateBrandingCSSVars(branding) {
|
|
95
|
+
return {
|
|
96
|
+
"--consent-primary": branding.primaryColor,
|
|
97
|
+
"--consent-secondary": branding.secondaryColor,
|
|
98
|
+
"--consent-primary-rgb": hexToRgb(branding.primaryColor),
|
|
99
|
+
"--consent-secondary-rgb": hexToRgb(branding.secondaryColor),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Resolve branding config with defaults and validation
|
|
104
|
+
*
|
|
105
|
+
* @param branding - Partial branding config
|
|
106
|
+
* @returns Fully resolved branding with CSS variables
|
|
107
|
+
*/
|
|
108
|
+
function resolveConsentBranding(branding) {
|
|
109
|
+
// Sanitize and resolve colors
|
|
110
|
+
const primaryColor = sanitizeColor(branding?.primaryColor, colors_js_1.DEFAULT_COLORS.PRIMARY);
|
|
111
|
+
const secondaryColor = sanitizeColor(branding?.secondaryColor, colors_js_1.DEFAULT_COLORS.SECONDARY);
|
|
112
|
+
// Sanitize URL (only allow valid http/https)
|
|
113
|
+
const logoUrl = sanitizeUrl(branding?.logoUrl);
|
|
114
|
+
// Company name - basic sanitization (just trim, escaping happens at render)
|
|
115
|
+
const companyName = branding?.companyName?.trim() || undefined;
|
|
116
|
+
// Generate CSS variables
|
|
117
|
+
const cssVars = generateBrandingCSSVars({ primaryColor, secondaryColor });
|
|
118
|
+
return {
|
|
119
|
+
primaryColor,
|
|
120
|
+
secondaryColor,
|
|
121
|
+
logoUrl,
|
|
122
|
+
companyName,
|
|
123
|
+
cssVars,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if branding has custom values (non-default)
|
|
128
|
+
*
|
|
129
|
+
* @param branding - Branding config
|
|
130
|
+
* @returns True if any custom values are set
|
|
131
|
+
*/
|
|
132
|
+
function hasCustomBranding(branding) {
|
|
133
|
+
if (!branding)
|
|
134
|
+
return false;
|
|
135
|
+
return ((branding.primaryColor !== undefined &&
|
|
136
|
+
branding.primaryColor !== defaults_js_1.DEFAULT_BRANDING.primaryColor) ||
|
|
137
|
+
(branding.secondaryColor !== undefined &&
|
|
138
|
+
branding.secondaryColor !== defaults_js_1.DEFAULT_BRANDING.secondaryColor) ||
|
|
139
|
+
branding.logoUrl !== undefined ||
|
|
140
|
+
branding.companyName !== undefined);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Merge branding configs (later values override earlier)
|
|
144
|
+
*
|
|
145
|
+
* @param base - Base branding config
|
|
146
|
+
* @param override - Override values
|
|
147
|
+
* @returns Merged branding
|
|
148
|
+
*/
|
|
149
|
+
function mergeBranding(base, override) {
|
|
150
|
+
if (!override)
|
|
151
|
+
return base;
|
|
152
|
+
return {
|
|
153
|
+
primaryColor: override.primaryColor ?? base.primaryColor,
|
|
154
|
+
secondaryColor: override.secondaryColor ?? base.secondaryColor,
|
|
155
|
+
logoUrl: override.logoUrl ?? base.logoUrl,
|
|
156
|
+
companyName: override.companyName ?? base.companyName,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=resolve-branding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-branding.js","sourceRoot":"","sources":["../../../src/resolution/resolve-branding.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAYH,0CAGC;AASD,sCAKC;AAQD,gCAQC;AAQD,kCAKC;AA0BD,0DAUC;AAQD,wDA6BC;AAQD,8CAWC;AASD,sCAYC;AAxKD,0DAA4D;AAC5D,sDAAwD;AAExD;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,KAAyB;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,KAAyB,EAAE,YAAoB;IAC3E,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,GAAuB;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,GAAuB;IACjD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,GAAW;IAC3B,sBAAsB;IACtB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEvC,mBAAmB;IACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE7C,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,QAGvC;IACC,OAAO;QACL,mBAAmB,EAAE,QAAQ,CAAC,YAAY;QAC1C,qBAAqB,EAAE,QAAQ,CAAC,cAAc;QAC9C,uBAAuB,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxD,yBAAyB,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CACpC,QAA0B;IAE1B,8BAA8B;IAC9B,MAAM,YAAY,GAAG,aAAa,CAChC,QAAQ,EAAE,YAAY,EACtB,0BAAc,CAAC,OAAO,CACvB,CAAC;IACF,MAAM,cAAc,GAAG,aAAa,CAClC,QAAQ,EAAE,cAAc,EACxB,0BAAc,CAAC,SAAS,CACzB,CAAC;IAEF,6CAA6C;IAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE/C,4EAA4E;IAC5E,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAE/D,yBAAyB;IACzB,MAAM,OAAO,GAAG,uBAAuB,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;IAE1E,OAAO;QACL,YAAY;QACZ,cAAc;QACd,OAAO;QACP,WAAW;QACX,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,QAA0B;IAC1D,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,OAAO,CACL,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS;QAClC,QAAQ,CAAC,YAAY,KAAK,8BAAgB,CAAC,YAAY,CAAC;QAC1D,CAAC,QAAQ,CAAC,cAAc,KAAK,SAAS;YACpC,QAAQ,CAAC,cAAc,KAAK,8BAAgB,CAAC,cAAc,CAAC;QAC9D,QAAQ,CAAC,OAAO,KAAK,SAAS;QAC9B,QAAQ,CAAC,WAAW,KAAK,SAAS,CACnC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAC3B,IAAqB,EACrB,QAA0B;IAE1B,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;QACxD,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;QAC9D,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;QACzC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW;KACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config Resolution
|
|
4
|
+
*
|
|
5
|
+
* Resolves complete consent config with all defaults applied.
|
|
6
|
+
*
|
|
7
|
+
* @module @kya-os/consent/resolution/resolve-config
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.resolveCustomFields = resolveCustomFields;
|
|
11
|
+
exports.resolveExpirationDays = resolveExpirationDays;
|
|
12
|
+
exports.determineAuthMode = determineAuthMode;
|
|
13
|
+
exports.getDefaultConsentConfig = getDefaultConsentConfig;
|
|
14
|
+
exports.resolveUISettings = resolveUISettings;
|
|
15
|
+
exports.resolveTermsSettings = resolveTermsSettings;
|
|
16
|
+
exports.resolveSuccessSettings = resolveSuccessSettings;
|
|
17
|
+
exports.resolveConsentConfig = resolveConsentConfig;
|
|
18
|
+
exports.mergeConsentConfigs = mergeConsentConfigs;
|
|
19
|
+
exports.hasCustomConfig = hasCustomConfig;
|
|
20
|
+
const modes_types_js_1 = require("../types/modes.types.js");
|
|
21
|
+
const defaults_js_1 = require("../constants/defaults.js");
|
|
22
|
+
const resolve_branding_js_1 = require("./resolve-branding.js");
|
|
23
|
+
const resolve_copy_js_1 = require("./resolve-copy.js");
|
|
24
|
+
/**
|
|
25
|
+
* Resolve custom fields with validation
|
|
26
|
+
*
|
|
27
|
+
* @param fields - Custom fields array
|
|
28
|
+
* @returns Validated custom fields (max 10)
|
|
29
|
+
*/
|
|
30
|
+
function resolveCustomFields(fields) {
|
|
31
|
+
if (!fields || fields.length === 0) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
// Limit to 10 fields
|
|
35
|
+
const limitedFields = fields.slice(0, 10);
|
|
36
|
+
// Filter valid fields
|
|
37
|
+
return limitedFields.filter((field) => {
|
|
38
|
+
// Must have name and label
|
|
39
|
+
if (!field.name || !field.label)
|
|
40
|
+
return false;
|
|
41
|
+
// Name must be alphanumeric with underscores
|
|
42
|
+
if (!/^[a-zA-Z0-9_]+$/.test(field.name))
|
|
43
|
+
return false;
|
|
44
|
+
// Select fields must have options
|
|
45
|
+
if (field.type === "select" && (!field.options || field.options.length === 0)) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve expiration days with bounds checking
|
|
53
|
+
*
|
|
54
|
+
* @param days - Expiration days from config
|
|
55
|
+
* @returns Valid expiration days (1-365)
|
|
56
|
+
*/
|
|
57
|
+
function resolveExpirationDays(days) {
|
|
58
|
+
if (days === undefined || days === null) {
|
|
59
|
+
return defaults_js_1.DEFAULT_EXPIRATION_DAYS;
|
|
60
|
+
}
|
|
61
|
+
// Clamp to valid range
|
|
62
|
+
if (days < 1)
|
|
63
|
+
return 1;
|
|
64
|
+
if (days > 365)
|
|
65
|
+
return 365;
|
|
66
|
+
return Math.floor(days);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Determine the effective auth mode from config
|
|
70
|
+
*
|
|
71
|
+
* @param config - Consent config
|
|
72
|
+
* @returns Effective auth mode
|
|
73
|
+
*/
|
|
74
|
+
function determineAuthMode(config) {
|
|
75
|
+
// Check which auth mode is configured
|
|
76
|
+
if (config?.oauth?.providerId) {
|
|
77
|
+
return modes_types_js_1.AUTH_MODES.OAUTH;
|
|
78
|
+
}
|
|
79
|
+
if (config?.credentials?.usernameLabel || config?.credentials?.passwordLabel) {
|
|
80
|
+
return modes_types_js_1.AUTH_MODES.CREDENTIALS;
|
|
81
|
+
}
|
|
82
|
+
if (config?.magicLink?.enabled) {
|
|
83
|
+
return modes_types_js_1.AUTH_MODES.MAGIC_LINK;
|
|
84
|
+
}
|
|
85
|
+
if (config?.otp?.enabled) {
|
|
86
|
+
return modes_types_js_1.AUTH_MODES.OTP;
|
|
87
|
+
}
|
|
88
|
+
// Default to consent-only
|
|
89
|
+
return modes_types_js_1.AUTH_MODES.CONSENT_ONLY;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get default consent config
|
|
93
|
+
*
|
|
94
|
+
* @returns Default consent config with all fields undefined
|
|
95
|
+
*/
|
|
96
|
+
function getDefaultConsentConfig() {
|
|
97
|
+
return {
|
|
98
|
+
branding: undefined,
|
|
99
|
+
ui: undefined,
|
|
100
|
+
terms: undefined,
|
|
101
|
+
success: undefined,
|
|
102
|
+
customFields: undefined,
|
|
103
|
+
credentials: undefined,
|
|
104
|
+
oauth: undefined,
|
|
105
|
+
magicLink: undefined,
|
|
106
|
+
otp: undefined,
|
|
107
|
+
qrCode: undefined,
|
|
108
|
+
passkey: undefined,
|
|
109
|
+
idv: undefined,
|
|
110
|
+
expirationDays: defaults_js_1.DEFAULT_EXPIRATION_DAYS,
|
|
111
|
+
metadata: undefined,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Resolve UI settings with all defaults
|
|
116
|
+
*
|
|
117
|
+
* @param ui - Partial UI config
|
|
118
|
+
* @returns Fully resolved UI settings
|
|
119
|
+
*/
|
|
120
|
+
function resolveUISettings(ui) {
|
|
121
|
+
return {
|
|
122
|
+
title: ui?.title ?? defaults_js_1.DEFAULT_UI.title,
|
|
123
|
+
description: ui?.description ?? defaults_js_1.DEFAULT_UI.description,
|
|
124
|
+
expirationText: ui?.expirationText ?? defaults_js_1.DEFAULT_UI.expirationText,
|
|
125
|
+
cancelButtonText: ui?.cancelButtonText ?? defaults_js_1.DEFAULT_UI.cancelButtonText,
|
|
126
|
+
submitButtonText: ui?.submitButtonText ?? defaults_js_1.DEFAULT_UI.submitButtonText,
|
|
127
|
+
permissionsHeader: ui?.permissionsHeader ?? defaults_js_1.DEFAULT_UI.permissionsHeader,
|
|
128
|
+
autoClose: ui?.autoClose ?? defaults_js_1.DEFAULT_UI.autoClose,
|
|
129
|
+
popupEnabled: ui?.popupEnabled ?? defaults_js_1.DEFAULT_UI.popupEnabled,
|
|
130
|
+
theme: ui?.theme ?? defaults_js_1.DEFAULT_UI.theme,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Resolve terms settings with all defaults
|
|
135
|
+
*
|
|
136
|
+
* @param terms - Partial terms config
|
|
137
|
+
* @returns Fully resolved terms settings
|
|
138
|
+
*/
|
|
139
|
+
function resolveTermsSettings(terms) {
|
|
140
|
+
return {
|
|
141
|
+
text: terms?.text ?? defaults_js_1.DEFAULT_TERMS.text,
|
|
142
|
+
url: terms?.url,
|
|
143
|
+
version: terms?.version,
|
|
144
|
+
required: terms?.required ?? defaults_js_1.DEFAULT_TERMS.required,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Resolve success settings with all defaults
|
|
149
|
+
*
|
|
150
|
+
* @param success - Partial success config
|
|
151
|
+
* @returns Fully resolved success settings
|
|
152
|
+
*/
|
|
153
|
+
function resolveSuccessSettings(success) {
|
|
154
|
+
return {
|
|
155
|
+
title: success?.title ?? defaults_js_1.DEFAULT_SUCCESS.title,
|
|
156
|
+
description: success?.description ?? defaults_js_1.DEFAULT_SUCCESS.description,
|
|
157
|
+
showCredential: success?.showCredential ?? defaults_js_1.DEFAULT_SUCCESS.showCredential,
|
|
158
|
+
redirectUrl: success?.redirectUrl,
|
|
159
|
+
redirectDelay: success?.redirectDelay,
|
|
160
|
+
continueButtonText: success?.continueButtonText ?? defaults_js_1.DEFAULT_SUCCESS.continueButtonText,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Resolve complete consent config with all defaults
|
|
165
|
+
*
|
|
166
|
+
* @param config - Partial consent config
|
|
167
|
+
* @param agentName - Optional agent name for placeholder substitution
|
|
168
|
+
* @returns Fully resolved config ready for rendering
|
|
169
|
+
*/
|
|
170
|
+
function resolveConsentConfig(config, agentName) {
|
|
171
|
+
// Resolve branding
|
|
172
|
+
const branding = (0, resolve_branding_js_1.resolveConsentBranding)(config?.branding);
|
|
173
|
+
// Resolve copy/text
|
|
174
|
+
const copy = (0, resolve_copy_js_1.resolveConsentCopy)(config, agentName);
|
|
175
|
+
// Resolve UI, terms, success
|
|
176
|
+
const ui = resolveUISettings(config?.ui);
|
|
177
|
+
const terms = resolveTermsSettings(config?.terms);
|
|
178
|
+
const success = resolveSuccessSettings(config?.success);
|
|
179
|
+
// Resolve custom fields
|
|
180
|
+
const customFields = resolveCustomFields(config?.customFields);
|
|
181
|
+
// Resolve expiration
|
|
182
|
+
const expirationDays = resolveExpirationDays(config?.expirationDays);
|
|
183
|
+
// Determine auth mode
|
|
184
|
+
const authMode = determineAuthMode(config);
|
|
185
|
+
return {
|
|
186
|
+
branding,
|
|
187
|
+
copy,
|
|
188
|
+
ui,
|
|
189
|
+
terms,
|
|
190
|
+
success,
|
|
191
|
+
customFields,
|
|
192
|
+
expirationDays,
|
|
193
|
+
authMode,
|
|
194
|
+
// Passthrough mode configs
|
|
195
|
+
credentials: config?.credentials,
|
|
196
|
+
oauth: config?.oauth,
|
|
197
|
+
magicLink: config?.magicLink,
|
|
198
|
+
otp: config?.otp,
|
|
199
|
+
qrCode: config?.qrCode,
|
|
200
|
+
passkey: config?.passkey,
|
|
201
|
+
idv: config?.idv,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Merge two optional objects, returning undefined if both are undefined
|
|
206
|
+
* This prevents spreading undefined values into empty objects
|
|
207
|
+
*
|
|
208
|
+
* @param base - Base object
|
|
209
|
+
* @param override - Override object
|
|
210
|
+
* @returns Merged object or undefined if both inputs are undefined
|
|
211
|
+
*/
|
|
212
|
+
function mergeObjects(base, override) {
|
|
213
|
+
// If both are undefined, return undefined (not an empty object)
|
|
214
|
+
if (base === undefined && override === undefined) {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
// Otherwise merge with spread (at least one has a value)
|
|
218
|
+
return { ...base, ...override };
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Merge two config objects, with override taking precedence
|
|
222
|
+
*
|
|
223
|
+
* @param base - Base config
|
|
224
|
+
* @param override - Override config
|
|
225
|
+
* @returns Merged config
|
|
226
|
+
*/
|
|
227
|
+
function mergeConsentConfigs(base, override) {
|
|
228
|
+
if (!override)
|
|
229
|
+
return base;
|
|
230
|
+
return {
|
|
231
|
+
branding: override.branding ?? base.branding,
|
|
232
|
+
ui: mergeObjects(base.ui, override.ui),
|
|
233
|
+
terms: mergeObjects(base.terms, override.terms),
|
|
234
|
+
success: mergeObjects(base.success, override.success),
|
|
235
|
+
customFields: override.customFields ?? base.customFields,
|
|
236
|
+
credentials: override.credentials ?? base.credentials,
|
|
237
|
+
oauth: override.oauth ?? base.oauth,
|
|
238
|
+
magicLink: override.magicLink ?? base.magicLink,
|
|
239
|
+
otp: override.otp ?? base.otp,
|
|
240
|
+
qrCode: override.qrCode ?? base.qrCode,
|
|
241
|
+
passkey: override.passkey ?? base.passkey,
|
|
242
|
+
idv: override.idv ?? base.idv,
|
|
243
|
+
expirationDays: override.expirationDays ?? base.expirationDays,
|
|
244
|
+
metadata: override.metadata ?? base.metadata,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Check if config has any customization
|
|
249
|
+
*
|
|
250
|
+
* @param config - Config to check
|
|
251
|
+
* @returns True if any non-default values are set
|
|
252
|
+
*/
|
|
253
|
+
function hasCustomConfig(config) {
|
|
254
|
+
if (!config)
|
|
255
|
+
return false;
|
|
256
|
+
return (config.branding !== undefined ||
|
|
257
|
+
config.ui !== undefined ||
|
|
258
|
+
config.terms !== undefined ||
|
|
259
|
+
config.success !== undefined ||
|
|
260
|
+
(config.customFields !== undefined && config.customFields.length > 0) ||
|
|
261
|
+
config.credentials !== undefined ||
|
|
262
|
+
config.oauth !== undefined ||
|
|
263
|
+
config.magicLink !== undefined ||
|
|
264
|
+
config.otp !== undefined ||
|
|
265
|
+
config.qrCode !== undefined ||
|
|
266
|
+
config.passkey !== undefined ||
|
|
267
|
+
config.idv !== undefined ||
|
|
268
|
+
config.expirationDays !== undefined);
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=resolve-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../../../src/resolution/resolve-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copy Resolution
|
|
4
|
+
*
|
|
5
|
+
* Resolves UI text and copy with defaults and placeholder substitution.
|
|
6
|
+
*
|
|
7
|
+
* @module @kya-os/consent/resolution/resolve-copy
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.AGENT_NAME_PLACEHOLDER = void 0;
|
|
11
|
+
exports.resolveUI = resolveUI;
|
|
12
|
+
exports.resolveTerms = resolveTerms;
|
|
13
|
+
exports.resolveSuccess = resolveSuccess;
|
|
14
|
+
exports.substituteAgentName = substituteAgentName;
|
|
15
|
+
exports.resolveConsentCopy = resolveConsentCopy;
|
|
16
|
+
const defaults_js_1 = require("../constants/defaults.js");
|
|
17
|
+
/**
|
|
18
|
+
* Placeholder for agent name in description text
|
|
19
|
+
*/
|
|
20
|
+
exports.AGENT_NAME_PLACEHOLDER = "[AI Agent]";
|
|
21
|
+
/**
|
|
22
|
+
* Resolve UI text with defaults
|
|
23
|
+
*
|
|
24
|
+
* @param ui - Partial UI config
|
|
25
|
+
* @returns Resolved UI with all defaults applied
|
|
26
|
+
*/
|
|
27
|
+
function resolveUI(ui) {
|
|
28
|
+
return {
|
|
29
|
+
title: ui?.title ?? defaults_js_1.DEFAULT_UI.title,
|
|
30
|
+
description: ui?.description ?? defaults_js_1.DEFAULT_UI.description,
|
|
31
|
+
expirationText: ui?.expirationText ?? defaults_js_1.DEFAULT_UI.expirationText,
|
|
32
|
+
cancelButtonText: ui?.cancelButtonText ?? defaults_js_1.DEFAULT_UI.cancelButtonText,
|
|
33
|
+
submitButtonText: ui?.submitButtonText ?? defaults_js_1.DEFAULT_UI.submitButtonText,
|
|
34
|
+
permissionsHeader: ui?.permissionsHeader ?? defaults_js_1.DEFAULT_UI.permissionsHeader,
|
|
35
|
+
autoClose: ui?.autoClose ?? defaults_js_1.DEFAULT_UI.autoClose,
|
|
36
|
+
popupEnabled: ui?.popupEnabled ?? defaults_js_1.DEFAULT_UI.popupEnabled,
|
|
37
|
+
theme: ui?.theme ?? defaults_js_1.DEFAULT_UI.theme,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve terms config with defaults
|
|
42
|
+
*
|
|
43
|
+
* @param terms - Partial terms config
|
|
44
|
+
* @returns Resolved terms with all defaults applied
|
|
45
|
+
*/
|
|
46
|
+
function resolveTerms(terms) {
|
|
47
|
+
return {
|
|
48
|
+
text: terms?.text ?? defaults_js_1.DEFAULT_TERMS.text,
|
|
49
|
+
url: terms?.url ?? undefined,
|
|
50
|
+
version: terms?.version ?? undefined,
|
|
51
|
+
required: terms?.required ?? defaults_js_1.DEFAULT_TERMS.required,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve success page config with defaults
|
|
56
|
+
*
|
|
57
|
+
* @param success - Partial success config
|
|
58
|
+
* @returns Resolved success with all defaults applied
|
|
59
|
+
*/
|
|
60
|
+
function resolveSuccess(success) {
|
|
61
|
+
return {
|
|
62
|
+
title: success?.title ?? defaults_js_1.DEFAULT_SUCCESS.title,
|
|
63
|
+
description: success?.description ?? defaults_js_1.DEFAULT_SUCCESS.description,
|
|
64
|
+
showCredential: success?.showCredential ?? defaults_js_1.DEFAULT_SUCCESS.showCredential,
|
|
65
|
+
redirectUrl: success?.redirectUrl ?? undefined,
|
|
66
|
+
redirectDelay: success?.redirectDelay ?? undefined,
|
|
67
|
+
continueButtonText: success?.continueButtonText ?? defaults_js_1.DEFAULT_SUCCESS.continueButtonText,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Substitute agent name placeholder in text
|
|
72
|
+
*
|
|
73
|
+
* @param text - Text potentially containing [AI Agent] placeholder
|
|
74
|
+
* @param agentName - Agent name to substitute
|
|
75
|
+
* @returns Text with placeholder replaced
|
|
76
|
+
*/
|
|
77
|
+
function substituteAgentName(text, agentName) {
|
|
78
|
+
if (!agentName) {
|
|
79
|
+
return text;
|
|
80
|
+
}
|
|
81
|
+
return text.replace(new RegExp(escapeRegExp(exports.AGENT_NAME_PLACEHOLDER), "g"), agentName);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Escape special regex characters in a string
|
|
85
|
+
*/
|
|
86
|
+
function escapeRegExp(string) {
|
|
87
|
+
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Resolve consent copy from config
|
|
91
|
+
*
|
|
92
|
+
* Applies all defaults and performs placeholder substitution.
|
|
93
|
+
*
|
|
94
|
+
* @param config - Partial consent config
|
|
95
|
+
* @param agentName - Optional agent name for placeholder substitution
|
|
96
|
+
* @returns Fully resolved copy ready for rendering
|
|
97
|
+
*/
|
|
98
|
+
function resolveConsentCopy(config, agentName) {
|
|
99
|
+
const ui = config?.ui ?? {};
|
|
100
|
+
const terms = config?.terms ?? {};
|
|
101
|
+
const success = config?.success ?? {};
|
|
102
|
+
// Get raw values with defaults
|
|
103
|
+
const rawTitle = ui.title ?? defaults_js_1.DEFAULT_UI.title;
|
|
104
|
+
const rawDescription = ui.description ?? defaults_js_1.DEFAULT_UI.description;
|
|
105
|
+
const rawExpirationText = ui.expirationText ?? defaults_js_1.DEFAULT_UI.expirationText;
|
|
106
|
+
const rawCancelButtonText = ui.cancelButtonText ?? defaults_js_1.DEFAULT_UI.cancelButtonText;
|
|
107
|
+
const rawSubmitButtonText = ui.submitButtonText ?? defaults_js_1.DEFAULT_UI.submitButtonText;
|
|
108
|
+
const rawPermissionsHeader = ui.permissionsHeader ?? defaults_js_1.DEFAULT_UI.permissionsHeader;
|
|
109
|
+
const rawTermsText = terms.text ?? defaults_js_1.DEFAULT_TERMS.text;
|
|
110
|
+
const rawSuccessTitle = success.title ?? defaults_js_1.DEFAULT_SUCCESS.title;
|
|
111
|
+
const rawSuccessDescription = success.description ?? defaults_js_1.DEFAULT_SUCCESS.description;
|
|
112
|
+
// Substitute agent name in description
|
|
113
|
+
const resolvedDescription = substituteAgentName(rawDescription, agentName);
|
|
114
|
+
const resolvedSuccessDescription = substituteAgentName(rawSuccessDescription, agentName);
|
|
115
|
+
return {
|
|
116
|
+
// Raw values (without substitution)
|
|
117
|
+
title: rawTitle,
|
|
118
|
+
description: rawDescription,
|
|
119
|
+
expirationText: rawExpirationText,
|
|
120
|
+
cancelButtonText: rawCancelButtonText,
|
|
121
|
+
submitButtonText: rawSubmitButtonText,
|
|
122
|
+
permissionsHeader: rawPermissionsHeader,
|
|
123
|
+
termsText: rawTermsText,
|
|
124
|
+
termsUrl: terms.url,
|
|
125
|
+
termsRequired: terms.required ?? defaults_js_1.DEFAULT_TERMS.required,
|
|
126
|
+
// Resolved values (with substitution)
|
|
127
|
+
resolvedDescription,
|
|
128
|
+
// Success page
|
|
129
|
+
successTitle: rawSuccessTitle,
|
|
130
|
+
successDescription: rawSuccessDescription,
|
|
131
|
+
resolvedSuccessDescription,
|
|
132
|
+
showCredential: success.showCredential ?? defaults_js_1.DEFAULT_SUCCESS.showCredential,
|
|
133
|
+
continueButtonText: success.continueButtonText ?? defaults_js_1.DEFAULT_SUCCESS.continueButtonText,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=resolve-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-copy.js","sourceRoot":"","sources":["../../../src/resolution/resolve-copy.ts"],"names":[],"mappings":"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"}
|