@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.
Files changed (126) hide show
  1. package/dist/bundle/inline.d.ts.map +1 -1
  2. package/dist/bundle/inline.js +2 -2
  3. package/dist/bundle/inline.js.map +1 -1
  4. package/dist/bundle/shell.d.ts +5 -0
  5. package/dist/bundle/shell.d.ts.map +1 -1
  6. package/dist/bundle/shell.js +3 -1
  7. package/dist/bundle/shell.js.map +1 -1
  8. package/dist/cjs/bundle/index.js +57 -0
  9. package/dist/cjs/bundle/index.js.map +1 -0
  10. package/dist/cjs/bundle/inline.js +22 -0
  11. package/dist/cjs/bundle/inline.js.map +1 -0
  12. package/dist/cjs/bundle/shell.js +291 -0
  13. package/dist/cjs/bundle/shell.js.map +1 -0
  14. package/dist/cjs/components/consent-button.js +180 -0
  15. package/dist/cjs/components/consent-button.js.map +1 -0
  16. package/dist/cjs/components/consent-checkbox.js +223 -0
  17. package/dist/cjs/components/consent-checkbox.js.map +1 -0
  18. package/dist/cjs/components/consent-input.js +335 -0
  19. package/dist/cjs/components/consent-input.js.map +1 -0
  20. package/dist/cjs/components/consent-oauth-button.js +392 -0
  21. package/dist/cjs/components/consent-oauth-button.js.map +1 -0
  22. package/dist/cjs/components/consent-otp-input.js +388 -0
  23. package/dist/cjs/components/consent-otp-input.js.map +1 -0
  24. package/dist/cjs/components/consent-permissions.js +433 -0
  25. package/dist/cjs/components/consent-permissions.js.map +1 -0
  26. package/dist/cjs/components/consent-shell.js +234 -0
  27. package/dist/cjs/components/consent-shell.js.map +1 -0
  28. package/dist/cjs/components/consent-terms.js +287 -0
  29. package/dist/cjs/components/consent-terms.js.map +1 -0
  30. package/dist/cjs/components/index.js +37 -0
  31. package/dist/cjs/components/index.js.map +1 -0
  32. package/dist/cjs/components/mcp-consent.js +1034 -0
  33. package/dist/cjs/components/mcp-consent.js.map +1 -0
  34. package/dist/cjs/constants/auth-modes.js +128 -0
  35. package/dist/cjs/constants/auth-modes.js.map +1 -0
  36. package/dist/cjs/constants/colors.js +40 -0
  37. package/dist/cjs/constants/colors.js.map +1 -0
  38. package/dist/cjs/constants/defaults.js +146 -0
  39. package/dist/cjs/constants/defaults.js.map +1 -0
  40. package/dist/cjs/constants/index.js +40 -0
  41. package/dist/cjs/constants/index.js.map +1 -0
  42. package/dist/cjs/index.js +49 -0
  43. package/dist/cjs/index.js.map +1 -0
  44. package/dist/cjs/package.json +1 -0
  45. package/dist/cjs/react/index.js +190 -0
  46. package/dist/cjs/react/index.js.map +1 -0
  47. package/dist/cjs/resolution/index.js +28 -0
  48. package/dist/cjs/resolution/index.js.map +1 -0
  49. package/dist/cjs/resolution/resolve-branding.js +159 -0
  50. package/dist/cjs/resolution/resolve-branding.js.map +1 -0
  51. package/dist/cjs/resolution/resolve-config.js +270 -0
  52. package/dist/cjs/resolution/resolve-config.js.map +1 -0
  53. package/dist/cjs/resolution/resolve-copy.js +136 -0
  54. package/dist/cjs/resolution/resolve-copy.js.map +1 -0
  55. package/dist/cjs/schemas/api.schemas.js +156 -0
  56. package/dist/cjs/schemas/api.schemas.js.map +1 -0
  57. package/dist/cjs/schemas/branding.schemas.js +57 -0
  58. package/dist/cjs/schemas/branding.schemas.js.map +1 -0
  59. package/dist/cjs/schemas/config.schemas.js +147 -0
  60. package/dist/cjs/schemas/config.schemas.js.map +1 -0
  61. package/dist/cjs/schemas/index.js +29 -0
  62. package/dist/cjs/schemas/index.js.map +1 -0
  63. package/dist/cjs/schemas/modes.schemas.js +107 -0
  64. package/dist/cjs/schemas/modes.schemas.js.map +1 -0
  65. package/dist/cjs/security/escape.js +206 -0
  66. package/dist/cjs/security/escape.js.map +1 -0
  67. package/dist/cjs/security/index.js +26 -0
  68. package/dist/cjs/security/index.js.map +1 -0
  69. package/dist/cjs/security/validators.js +210 -0
  70. package/dist/cjs/security/validators.js.map +1 -0
  71. package/dist/cjs/styles/css-variables.js +129 -0
  72. package/dist/cjs/styles/css-variables.js.map +1 -0
  73. package/dist/cjs/styles/index.js +28 -0
  74. package/dist/cjs/styles/index.js.map +1 -0
  75. package/dist/cjs/styles/stylesheet.js +204 -0
  76. package/dist/cjs/styles/stylesheet.js.map +1 -0
  77. package/dist/cjs/styles/tokens.js +183 -0
  78. package/dist/cjs/styles/tokens.js.map +1 -0
  79. package/dist/cjs/templates/base/base-template.js +282 -0
  80. package/dist/cjs/templates/base/base-template.js.map +1 -0
  81. package/dist/cjs/templates/base/components.js +295 -0
  82. package/dist/cjs/templates/base/components.js.map +1 -0
  83. package/dist/cjs/templates/base/index.js +26 -0
  84. package/dist/cjs/templates/base/index.js.map +1 -0
  85. package/dist/cjs/templates/index.js +34 -0
  86. package/dist/cjs/templates/index.js.map +1 -0
  87. package/dist/cjs/templates/modes/consent-only.template.js +74 -0
  88. package/dist/cjs/templates/modes/consent-only.template.js.map +1 -0
  89. package/dist/cjs/templates/modes/credentials.template.js +414 -0
  90. package/dist/cjs/templates/modes/credentials.template.js.map +1 -0
  91. package/dist/cjs/templates/modes/index.js +24 -0
  92. package/dist/cjs/templates/modes/index.js.map +1 -0
  93. package/dist/cjs/templates/modes/magic-link.template.js +196 -0
  94. package/dist/cjs/templates/modes/magic-link.template.js.map +1 -0
  95. package/dist/cjs/templates/modes/oauth.template.js +153 -0
  96. package/dist/cjs/templates/modes/oauth.template.js.map +1 -0
  97. package/dist/cjs/templates/modes/otp.template.js +316 -0
  98. package/dist/cjs/templates/modes/otp.template.js.map +1 -0
  99. package/dist/cjs/templates/modes/success.template.js +140 -0
  100. package/dist/cjs/templates/modes/success.template.js.map +1 -0
  101. package/dist/cjs/templates/registry.js +133 -0
  102. package/dist/cjs/templates/registry.js.map +1 -0
  103. package/dist/cjs/types/api.types.js +10 -0
  104. package/dist/cjs/types/api.types.js.map +1 -0
  105. package/dist/cjs/types/branding.types.js +10 -0
  106. package/dist/cjs/types/branding.types.js.map +1 -0
  107. package/dist/cjs/types/config.types.js +10 -0
  108. package/dist/cjs/types/config.types.js.map +1 -0
  109. package/dist/cjs/types/copy.types.js +10 -0
  110. package/dist/cjs/types/copy.types.js.map +1 -0
  111. package/dist/cjs/types/index.js +31 -0
  112. package/dist/cjs/types/index.js.map +1 -0
  113. package/dist/cjs/types/modes.types.js +140 -0
  114. package/dist/cjs/types/modes.types.js.map +1 -0
  115. package/dist/cjs/types/page.types.js +10 -0
  116. package/dist/cjs/types/page.types.js.map +1 -0
  117. package/dist/components/mcp-consent.d.ts +6 -0
  118. package/dist/components/mcp-consent.d.ts.map +1 -1
  119. package/dist/components/mcp-consent.js +14 -0
  120. package/dist/components/mcp-consent.js.map +1 -1
  121. package/dist/consent.js +7 -0
  122. package/dist/consent.min.js +2 -2
  123. package/dist/schemas/api.schemas.d.ts +116 -116
  124. package/dist/schemas/config.schemas.d.ts +116 -116
  125. package/dist/schemas/modes.schemas.d.ts +28 -28
  126. 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":"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"}
@@ -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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"}