@kya-os/consent 0.1.38 → 0.1.39

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 (179) hide show
  1. package/dist/bundle/index.d.ts +12 -0
  2. package/dist/bundle/index.d.ts.map +1 -1
  3. package/dist/bundle/index.js +12 -0
  4. package/dist/bundle/index.js.map +1 -1
  5. package/dist/bundle/inline.d.ts.map +1 -1
  6. package/dist/bundle/inline.js +2 -2
  7. package/dist/bundle/inline.js.map +1 -1
  8. package/dist/bundle/shell.d.ts +23 -0
  9. package/dist/bundle/shell.d.ts.map +1 -1
  10. package/dist/bundle/shell.js +25 -1
  11. package/dist/bundle/shell.js.map +1 -1
  12. package/dist/capabilities/index.d.ts +7 -0
  13. package/dist/capabilities/index.d.ts.map +1 -0
  14. package/dist/capabilities/index.js +7 -0
  15. package/dist/capabilities/index.js.map +1 -0
  16. package/dist/capabilities/registry.d.ts +29 -0
  17. package/dist/capabilities/registry.d.ts.map +1 -0
  18. package/dist/capabilities/registry.js +178 -0
  19. package/dist/capabilities/registry.js.map +1 -0
  20. package/dist/cedar/compile.d.ts +30 -0
  21. package/dist/cedar/compile.d.ts.map +1 -0
  22. package/dist/cedar/compile.js +55 -0
  23. package/dist/cedar/compile.js.map +1 -0
  24. package/dist/cedar/explain.d.ts +22 -0
  25. package/dist/cedar/explain.d.ts.map +1 -0
  26. package/dist/cedar/explain.js +72 -0
  27. package/dist/cedar/explain.js.map +1 -0
  28. package/dist/cedar/index.d.ts +8 -0
  29. package/dist/cedar/index.d.ts.map +1 -0
  30. package/dist/cedar/index.js +8 -0
  31. package/dist/cedar/index.js.map +1 -0
  32. package/dist/cjs/bundle/index.js +19 -1
  33. package/dist/cjs/bundle/index.js.map +1 -1
  34. package/dist/cjs/bundle/inline.js +2 -2
  35. package/dist/cjs/bundle/inline.js.map +1 -1
  36. package/dist/cjs/bundle/shell.js +25 -1
  37. package/dist/cjs/bundle/shell.js.map +1 -1
  38. package/dist/cjs/capabilities/index.js +12 -0
  39. package/dist/cjs/capabilities/index.js.map +1 -0
  40. package/dist/cjs/capabilities/registry.js +182 -0
  41. package/dist/cjs/capabilities/registry.js.map +1 -0
  42. package/dist/cjs/cedar/compile.js +59 -0
  43. package/dist/cjs/cedar/compile.js.map +1 -0
  44. package/dist/cjs/cedar/explain.js +75 -0
  45. package/dist/cjs/cedar/explain.js.map +1 -0
  46. package/dist/cjs/cedar/index.js +14 -0
  47. package/dist/cjs/cedar/index.js.map +1 -0
  48. package/dist/cjs/components/consent-action-bar.js +138 -0
  49. package/dist/cjs/components/consent-action-bar.js.map +1 -0
  50. package/dist/cjs/components/consent-agent-header.js +205 -0
  51. package/dist/cjs/components/consent-agent-header.js.map +1 -0
  52. package/dist/cjs/components/consent-capabilities-screen.js +309 -0
  53. package/dist/cjs/components/consent-capabilities-screen.js.map +1 -0
  54. package/dist/cjs/components/consent-capability-card.js +340 -0
  55. package/dist/cjs/components/consent-capability-card.js.map +1 -0
  56. package/dist/cjs/components/consent-footer.js +99 -0
  57. package/dist/cjs/components/consent-footer.js.map +1 -0
  58. package/dist/cjs/components/consent-revocation-notice.js +101 -0
  59. package/dist/cjs/components/consent-revocation-notice.js.map +1 -0
  60. package/dist/cjs/components/index.js +14 -1
  61. package/dist/cjs/components/index.js.map +1 -1
  62. package/dist/cjs/components/mcp-consent.js +176 -7
  63. package/dist/cjs/components/mcp-consent.js.map +1 -1
  64. package/dist/cjs/copy/index.js +12 -0
  65. package/dist/cjs/copy/index.js.map +1 -0
  66. package/dist/cjs/copy/tokens.js +101 -0
  67. package/dist/cjs/copy/tokens.js.map +1 -0
  68. package/dist/cjs/index.js +8 -0
  69. package/dist/cjs/index.js.map +1 -1
  70. package/dist/cjs/mcp-app/inline.js +2 -2
  71. package/dist/cjs/mcp-app/inline.js.map +1 -1
  72. package/dist/cjs/popup/index.js +15 -0
  73. package/dist/cjs/popup/index.js.map +1 -0
  74. package/dist/cjs/popup/launcher.js +77 -0
  75. package/dist/cjs/popup/launcher.js.map +1 -0
  76. package/dist/cjs/schemas/capabilities.schemas.js +129 -0
  77. package/dist/cjs/schemas/capabilities.schemas.js.map +1 -0
  78. package/dist/cjs/schemas/config.schemas.js +18 -0
  79. package/dist/cjs/schemas/config.schemas.js.map +1 -1
  80. package/dist/cjs/schemas/index.js +1 -0
  81. package/dist/cjs/schemas/index.js.map +1 -1
  82. package/dist/cjs/styles/index.js +1 -0
  83. package/dist/cjs/styles/index.js.map +1 -1
  84. package/dist/cjs/styles/theme.js +86 -0
  85. package/dist/cjs/styles/theme.js.map +1 -0
  86. package/dist/cjs/types/capabilities.types.js +12 -0
  87. package/dist/cjs/types/capabilities.types.js.map +1 -0
  88. package/dist/cjs/types/index.js +1 -0
  89. package/dist/cjs/types/index.js.map +1 -1
  90. package/dist/components/consent-action-bar.d.ts +30 -0
  91. package/dist/components/consent-action-bar.d.ts.map +1 -0
  92. package/dist/components/consent-action-bar.js +135 -0
  93. package/dist/components/consent-action-bar.js.map +1 -0
  94. package/dist/components/consent-agent-header.d.ts +31 -0
  95. package/dist/components/consent-agent-header.d.ts.map +1 -0
  96. package/dist/components/consent-agent-header.js +202 -0
  97. package/dist/components/consent-agent-header.js.map +1 -0
  98. package/dist/components/consent-capabilities-screen.d.ts +62 -0
  99. package/dist/components/consent-capabilities-screen.d.ts.map +1 -0
  100. package/dist/components/consent-capabilities-screen.js +306 -0
  101. package/dist/components/consent-capabilities-screen.js.map +1 -0
  102. package/dist/components/consent-capability-card.d.ts +44 -0
  103. package/dist/components/consent-capability-card.d.ts.map +1 -0
  104. package/dist/components/consent-capability-card.js +337 -0
  105. package/dist/components/consent-capability-card.js.map +1 -0
  106. package/dist/components/consent-footer.d.ts +22 -0
  107. package/dist/components/consent-footer.d.ts.map +1 -0
  108. package/dist/components/consent-footer.js +96 -0
  109. package/dist/components/consent-footer.js.map +1 -0
  110. package/dist/components/consent-revocation-notice.d.ts +22 -0
  111. package/dist/components/consent-revocation-notice.d.ts.map +1 -0
  112. package/dist/components/consent-revocation-notice.js +98 -0
  113. package/dist/components/consent-revocation-notice.js.map +1 -0
  114. package/dist/components/index.d.ts +6 -0
  115. package/dist/components/index.d.ts.map +1 -1
  116. package/dist/components/index.js +7 -0
  117. package/dist/components/index.js.map +1 -1
  118. package/dist/components/mcp-consent.d.ts +41 -0
  119. package/dist/components/mcp-consent.d.ts.map +1 -1
  120. package/dist/components/mcp-consent.js +176 -7
  121. package/dist/components/mcp-consent.js.map +1 -1
  122. package/dist/consent.js +1374 -7
  123. package/dist/consent.min.js +727 -96
  124. package/dist/copy/index.d.ts +8 -0
  125. package/dist/copy/index.d.ts.map +1 -0
  126. package/dist/copy/index.js +7 -0
  127. package/dist/copy/index.js.map +1 -0
  128. package/dist/copy/tokens.d.ts +93 -0
  129. package/dist/copy/tokens.d.ts.map +1 -0
  130. package/dist/copy/tokens.js +97 -0
  131. package/dist/copy/tokens.js.map +1 -0
  132. package/dist/index.d.ts +4 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +8 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/mcp-app/inline.d.ts.map +1 -1
  137. package/dist/mcp-app/inline.js +2 -2
  138. package/dist/mcp-app/inline.js.map +1 -1
  139. package/dist/popup/index.d.ts +8 -0
  140. package/dist/popup/index.d.ts.map +1 -0
  141. package/dist/popup/index.js +7 -0
  142. package/dist/popup/index.js.map +1 -0
  143. package/dist/popup/launcher.d.ts +81 -0
  144. package/dist/popup/launcher.d.ts.map +1 -0
  145. package/dist/popup/launcher.js +71 -0
  146. package/dist/popup/launcher.js.map +1 -0
  147. package/dist/schemas/api.schemas.d.ts +354 -150
  148. package/dist/schemas/api.schemas.d.ts.map +1 -1
  149. package/dist/schemas/capabilities.schemas.d.ts +186 -0
  150. package/dist/schemas/capabilities.schemas.d.ts.map +1 -0
  151. package/dist/schemas/capabilities.schemas.js +123 -0
  152. package/dist/schemas/capabilities.schemas.js.map +1 -0
  153. package/dist/schemas/config.schemas.d.ts +452 -156
  154. package/dist/schemas/config.schemas.d.ts.map +1 -1
  155. package/dist/schemas/config.schemas.js +18 -0
  156. package/dist/schemas/config.schemas.js.map +1 -1
  157. package/dist/schemas/index.d.ts +1 -0
  158. package/dist/schemas/index.d.ts.map +1 -1
  159. package/dist/schemas/index.js +1 -0
  160. package/dist/schemas/index.js.map +1 -1
  161. package/dist/styles/index.d.ts +1 -0
  162. package/dist/styles/index.d.ts.map +1 -1
  163. package/dist/styles/index.js +1 -0
  164. package/dist/styles/index.js.map +1 -1
  165. package/dist/styles/theme.d.ts +72 -0
  166. package/dist/styles/theme.d.ts.map +1 -0
  167. package/dist/styles/theme.js +81 -0
  168. package/dist/styles/theme.js.map +1 -0
  169. package/dist/types/capabilities.types.d.ts +126 -0
  170. package/dist/types/capabilities.types.d.ts.map +1 -0
  171. package/dist/types/capabilities.types.js +11 -0
  172. package/dist/types/capabilities.types.js.map +1 -0
  173. package/dist/types/config.types.d.ts +33 -0
  174. package/dist/types/config.types.d.ts.map +1 -1
  175. package/dist/types/index.d.ts +1 -0
  176. package/dist/types/index.d.ts.map +1 -1
  177. package/dist/types/index.js +1 -0
  178. package/dist/types/index.js.map +1 -1
  179. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"inline.js","sourceRoot":"","sources":["../../src/bundle/inline.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAW,q08NAAq08N,CAAC;AAE528N;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAW,MAAM,CAAC"}
1
+ {"version":3,"file":"inline.js","sourceRoot":"","sources":["../../src/bundle/inline.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAW,u68PAAu68P,CAAC;AAE988P;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAW,MAAM,CAAC"}
@@ -43,6 +43,8 @@ export interface ConsentShellOptions {
43
43
  nonce?: string;
44
44
  /** Authentication mode (consent-only, credentials, oauth, magic-link, otp) */
45
45
  authMode?: string;
46
+ /** Human-readable agent name for display */
47
+ agentName?: string;
46
48
  /** Provider name for credentials/oauth flows */
47
49
  provider?: string;
48
50
  /** CSRF token for form security (required for credential auth) */
@@ -91,6 +93,27 @@ export interface ConsentShellOptions {
91
93
  * Used for display and delegation metadata
92
94
  */
93
95
  oauthProviderName?: string;
96
+ /**
97
+ * Operator-authored capability groups. When present, the new humanized
98
+ * consent layout renders instead of the legacy raw scope list.
99
+ */
100
+ capabilities?: import('../types/capabilities.types.js').CapabilityGroup[];
101
+ /** Resolved agent identity tile (logo, vendor, surface, verified). */
102
+ agentMetadata?: import('../types/capabilities.types.js').AgentMetadata;
103
+ /** Theme override (`light` / `dark`). Defaults to `light`. */
104
+ consentTheme?: import('../types/capabilities.types.js').ConsentTheme;
105
+ /** Org name shown in the headline + revocation footer. */
106
+ orgName?: string;
107
+ /** Operator-set headline verb (e.g., 'use', 'shop'). */
108
+ headlineVerb?: string;
109
+ /** Path the user can visit to revoke (footer notice). */
110
+ revocationPath?: string;
111
+ /** Days of inactivity before auto-revocation (footer notice). */
112
+ inactivityDays?: number;
113
+ /** Optional URL backing the "How does this work?" link. */
114
+ howItWorksUrl?: string;
115
+ /** Cedar template context bound at render time for "View policy" disclosures. */
116
+ cedarContext?: import('../types/capabilities.types.js').CedarTemplateContext;
94
117
  }
95
118
  /**
96
119
  * Generate the consent page HTML shell
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/bundle/shell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,MAAM,EAAE,aAAa,CAAC;IACtB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA2NzE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,EAChD,YAAY,EAAE,MAAM,GACnB,MAAM,CAsDR"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/bundle/shell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,MAAM,EAAE,aAAa,CAAC;IACtB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,gCAAgC,EAAE,eAAe,EAAE,CAAC;IAE1E,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,gCAAgC,EAAE,aAAa,CAAC;IAEvE,8DAA8D;IAC9D,YAAY,CAAC,EAAE,OAAO,gCAAgC,EAAE,YAAY,CAAC;IAErE,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,gCAAgC,EAAE,oBAAoB,CAAC;CAC9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAqPzE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,EAChD,YAAY,EAAE,MAAM,GACnB,MAAM,CAsDR"}
@@ -41,18 +41,32 @@ import { escapeHtml, escapeAttr } from '../security/escape.js';
41
41
  * ```
42
42
  */
43
43
  export function generateConsentShell(options) {
44
- const { config, tool, scopes, agentDid, sessionId, projectId, serverUrl, oauthIdentity, bundlePath = '/consent.js', pageTitle = 'Permission Request', nonce, authMode, provider, csrfToken, credentialProviderType, credentialProvider, userDid, // CRITICAL: Bypasses KV consistency issues
44
+ const { config, tool, scopes, agentDid, sessionId, projectId, serverUrl, oauthIdentity, bundlePath = '/consent.js', pageTitle = 'Permission Request', nonce, authMode, agentName, provider, csrfToken, credentialProviderType, credentialProvider, userDid, // CRITICAL: Bypasses KV consistency issues
45
45
  credentialUserEmail, // User email from credential provider
46
46
  credentialProviderUserId, // Provider's user ID (e.g., customer ID)
47
47
  oauthUrl, // Pre-built OAuth authorization URL
48
48
  authorizationType, // Dynamic authorization type from tool protection
49
49
  oauthProviderType, // OAuth provider type from prior OAuth auth step
50
50
  oauthProviderName, // OAuth provider name (e.g., 'custom', 'github')
51
+ capabilities, // Operator-authored capability groups (humanized layout)
52
+ agentMetadata, // Resolved agent identity tile
53
+ consentTheme, // Theme override (`light`/`dark`)
54
+ orgName, // Org name for headline + footer
55
+ headlineVerb, // Operator-set headline verb
56
+ revocationPath, // Path the user can visit to revoke
57
+ inactivityDays, // Days of inactivity before auto-revocation
58
+ howItWorksUrl, // URL backing "How does this work?"
59
+ cedarContext, // Cedar template context for "View policy" disclosures
51
60
  } = options;
52
61
  // Safely serialize config as JSON for attribute
53
62
  const configJson = JSON.stringify(config);
54
63
  const scopesJson = JSON.stringify(scopes);
55
64
  const oauthJson = oauthIdentity ? JSON.stringify(oauthIdentity) : null;
65
+ const capabilitiesJson = capabilities && capabilities.length > 0 ? JSON.stringify(capabilities) : null;
66
+ const agentMetadataJson = agentMetadata
67
+ ? JSON.stringify(agentMetadata)
68
+ : null;
69
+ const cedarContextJson = cedarContext ? JSON.stringify(cedarContext) : null;
56
70
  // Build nonce attribute if provided
57
71
  const nonceAttr = nonce ? ` nonce="${escapeAttr(nonce)}"` : '';
58
72
  return `<!DOCTYPE html>
@@ -192,6 +206,7 @@ export function generateConsentShell(options) {
192
206
  server-url="${escapeAttr(serverUrl)}"
193
207
  ${oauthJson ? `oauth-identity='${escapeAttr(oauthJson)}'` : ''}
194
208
  ${authMode ? `auth-mode="${escapeAttr(authMode)}"` : ''}
209
+ ${agentName ? `agent-name="${escapeAttr(agentName)}"` : ''}
195
210
  ${provider ? `provider="${escapeAttr(provider)}"` : ''}
196
211
  ${csrfToken ? `csrf-token="${escapeAttr(csrfToken)}"` : ''}
197
212
  ${credentialProviderType ? `credential-provider-type="${escapeAttr(credentialProviderType)}"` : ''}
@@ -203,6 +218,15 @@ export function generateConsentShell(options) {
203
218
  ${authorizationType ? `authorization-type="${escapeAttr(authorizationType)}"` : ''}
204
219
  ${oauthProviderType ? `oauth-provider-type="${escapeAttr(oauthProviderType)}"` : ''}
205
220
  ${oauthProviderName ? `oauth-provider="${escapeAttr(oauthProviderName)}"` : ''}
221
+ ${capabilitiesJson ? `capabilities='${escapeAttr(capabilitiesJson)}'` : ''}
222
+ ${agentMetadataJson ? `agent-metadata='${escapeAttr(agentMetadataJson)}'` : ''}
223
+ ${cedarContextJson ? `cedar-context='${escapeAttr(cedarContextJson)}'` : ''}
224
+ ${consentTheme ? `consent-theme="${escapeAttr(consentTheme)}"` : ''}
225
+ ${orgName ? `org-name="${escapeAttr(orgName)}"` : ''}
226
+ ${headlineVerb ? `headline-verb="${escapeAttr(headlineVerb)}"` : ''}
227
+ ${revocationPath ? `revocation-path="${escapeAttr(revocationPath)}"` : ''}
228
+ ${typeof inactivityDays === 'number' ? `inactivity-days="${escapeAttr(String(inactivityDays))}"` : ''}
229
+ ${howItWorksUrl ? `how-it-works-url="${escapeAttr(howItWorksUrl)}"` : ''}
206
230
  ></mcp-consent>
207
231
 
208
232
  <!-- Loading skeleton (hidden once component is defined) -->
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/bundle/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/bundle/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Capability registry exports.
3
+ *
4
+ * @module @kya-os/consent/capabilities
5
+ */
6
+ export { DEFAULT_CAPABILITIES, resolveCapabilitiesForScopes } from "./registry.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Capability registry exports.
3
+ *
4
+ * @module @kya-os/consent/capabilities
5
+ */
6
+ export { DEFAULT_CAPABILITIES, resolveCapabilitiesForScopes } from "./registry.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Default Capability Registry
3
+ *
4
+ * Built-in capability definitions for common scopes. Operators override these
5
+ * via the WYSIWYG editor; the registry is the seed and the fallback when no
6
+ * override is present.
7
+ *
8
+ * Each default capability ships with an operator-authored Cedar fragment that
9
+ * uses templated placeholders ({{agent_did}}, {{user_did}}, {{org}},
10
+ * {{deployment}}). Placeholders are bound at compile time via
11
+ * `compileSingleCapability` / `compileCapabilitiesToCedar`.
12
+ *
13
+ * @module @kya-os/consent/capabilities/registry
14
+ */
15
+ import type { Capability } from "../types/capabilities.types.js";
16
+ /**
17
+ * Default capabilities keyed by capability id. Each entry is a complete
18
+ * `Capability` record, ready to render or to use as a template the operator
19
+ * customizes in the WYSIWYG.
20
+ */
21
+ export declare const DEFAULT_CAPABILITIES: Record<string, Capability>;
22
+ /**
23
+ * Resolve a list of scopes to capability records. Operator overrides win over
24
+ * the default registry; scopes that match no capability fall through as
25
+ * "unknown" capabilities so the consent screen can still render them as raw
26
+ * permission rows.
27
+ */
28
+ export declare function resolveCapabilitiesForScopes(scopes: string[], overrides?: Capability[]): Capability[];
29
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/capabilities/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAqG3D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,GAAE,UAAU,EAAO,GAC3B,UAAU,EAAE,CAsCd"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Default Capability Registry
3
+ *
4
+ * Built-in capability definitions for common scopes. Operators override these
5
+ * via the WYSIWYG editor; the registry is the seed and the fallback when no
6
+ * override is present.
7
+ *
8
+ * Each default capability ships with an operator-authored Cedar fragment that
9
+ * uses templated placeholders ({{agent_did}}, {{user_did}}, {{org}},
10
+ * {{deployment}}). Placeholders are bound at compile time via
11
+ * `compileSingleCapability` / `compileCapabilitiesToCedar`.
12
+ *
13
+ * @module @kya-os/consent/capabilities/registry
14
+ */
15
+ /**
16
+ * Default capabilities keyed by capability id. Each entry is a complete
17
+ * `Capability` record, ready to render or to use as a template the operator
18
+ * customizes in the WYSIWYG.
19
+ */
20
+ export const DEFAULT_CAPABILITIES = {
21
+ "cart.browse": {
22
+ id: "cart.browse",
23
+ label: "Browse products and check prices",
24
+ description: "Look at what's for sale, see what's in stock, and compare options.",
25
+ icon: "search",
26
+ riskLevel: "low",
27
+ defaultOn: true,
28
+ cedar: [
29
+ "permit (",
30
+ ' principal == Agent::"{{agent_did}}",',
31
+ " action in [",
32
+ ' Action::"get-products:execute",',
33
+ ' Action::"get-cart:execute",',
34
+ ' Action::"get-brands:execute",',
35
+ ' Action::"get-brand:execute"',
36
+ " ],",
37
+ ' resource in Org::"{{org}}"::Catalog::"*"',
38
+ ");",
39
+ ].join("\n"),
40
+ scopes: [
41
+ "get-products:execute",
42
+ "get-cart:execute",
43
+ "get-brands:execute",
44
+ "get-brand:execute",
45
+ ],
46
+ category: "Browse",
47
+ },
48
+ "cart.add": {
49
+ id: "cart.add",
50
+ label: "Add items to your cart",
51
+ description: "Put things in your shopping cart so you can review before buying.",
52
+ icon: "cart",
53
+ riskLevel: "medium",
54
+ defaultOn: true,
55
+ cedar: [
56
+ "permit (",
57
+ ' principal == Agent::"{{agent_did}}",',
58
+ ' action == Action::"add-to-cart:execute",',
59
+ ' resource in Org::"{{org}}"::Cart::"*"',
60
+ ");",
61
+ ].join("\n"),
62
+ scopes: ["add-to-cart:execute"],
63
+ category: "Cart",
64
+ },
65
+ "payment.use-saved": {
66
+ id: "payment.use-saved",
67
+ label: "Use your saved payment methods",
68
+ description: "Pay with cards already on your account. The agent never sees the card numbers.",
69
+ icon: "card",
70
+ riskLevel: "high",
71
+ defaultOn: true,
72
+ cedar: [
73
+ "permit (",
74
+ ' principal == Agent::"{{agent_did}}",',
75
+ ' action == Action::"payment:use-saved",',
76
+ ' resource in User::"{{user_did}}"::PaymentMethod::"saved"',
77
+ ");",
78
+ ].join("\n"),
79
+ scopes: ["payment:use-saved"],
80
+ category: "Checkout",
81
+ },
82
+ "shipping.use-saved": {
83
+ id: "shipping.use-saved",
84
+ label: "Ship to your saved addresses",
85
+ description: "Send orders only to addresses already on file — your home, your office, etc.",
86
+ icon: "pin",
87
+ riskLevel: "medium",
88
+ defaultOn: true,
89
+ cedar: [
90
+ "permit (",
91
+ ' principal == Agent::"{{agent_did}}",',
92
+ ' action == Action::"shipping:use-saved",',
93
+ ' resource in User::"{{user_did}}"::Address::"saved"',
94
+ ");",
95
+ ].join("\n"),
96
+ scopes: ["shipping:use-saved"],
97
+ category: "Checkout",
98
+ },
99
+ "shipping.new": {
100
+ id: "shipping.new",
101
+ label: "Ship to new addresses",
102
+ description: "Send orders to places you've never shipped to before. Off by default — turn on only if you want the agent to ship gifts or deliver to new locations.",
103
+ icon: "pin-new",
104
+ riskLevel: "high",
105
+ defaultOn: false,
106
+ cedar: [
107
+ "permit (",
108
+ ' principal == Agent::"{{agent_did}}",',
109
+ ' action == Action::"shipping:ship-new",',
110
+ ' resource in User::"{{user_did}}"::Address::"new"',
111
+ ");",
112
+ ].join("\n"),
113
+ scopes: ["shipping:ship-new"],
114
+ category: "Checkout",
115
+ },
116
+ };
117
+ /**
118
+ * Resolve a list of scopes to capability records. Operator overrides win over
119
+ * the default registry; scopes that match no capability fall through as
120
+ * "unknown" capabilities so the consent screen can still render them as raw
121
+ * permission rows.
122
+ */
123
+ export function resolveCapabilitiesForScopes(scopes, overrides = []) {
124
+ const indexedOverrides = new Map();
125
+ for (const override of overrides) {
126
+ indexedOverrides.set(override.id, override);
127
+ for (const scope of override.scopes) {
128
+ indexedOverrides.set(`scope:${scope}`, override);
129
+ }
130
+ }
131
+ const matched = new Map();
132
+ const unmatchedScopes = [];
133
+ for (const scope of scopes) {
134
+ const overrideMatch = indexedOverrides.get(`scope:${scope}`);
135
+ if (overrideMatch) {
136
+ matched.set(overrideMatch.id, overrideMatch);
137
+ continue;
138
+ }
139
+ const defaultMatch = Object.values(DEFAULT_CAPABILITIES).find((c) => c.scopes.includes(scope));
140
+ if (defaultMatch) {
141
+ const override = indexedOverrides.get(defaultMatch.id);
142
+ matched.set(defaultMatch.id, override ?? defaultMatch);
143
+ continue;
144
+ }
145
+ unmatchedScopes.push(scope);
146
+ }
147
+ const resolved = Array.from(matched.values());
148
+ for (const scope of unmatchedScopes) {
149
+ resolved.push(buildUnknownCapability(scope));
150
+ }
151
+ return resolved;
152
+ }
153
+ /**
154
+ * Build a placeholder capability for a scope we don't recognize. Keeps the
155
+ * consent screen renderable for never-before-seen scopes without crashing.
156
+ */
157
+ function buildUnknownCapability(scope) {
158
+ const label = scope
159
+ .replace(/[_:.-]/g, " ")
160
+ .replace(/\b\w/g, (c) => c.toUpperCase());
161
+ return {
162
+ id: `unknown.${scope.replace(/[^a-z0-9]/gi, "-").toLowerCase()}`,
163
+ label,
164
+ description: `Permission required by the ${scope} scope.`,
165
+ icon: "neutral",
166
+ riskLevel: "medium",
167
+ defaultOn: false,
168
+ cedar: [
169
+ "permit (",
170
+ ' principal == Agent::"{{agent_did}}",',
171
+ ` action == Action::"${scope}",`,
172
+ ' resource in Org::"{{org}}"::Resource::"*"',
173
+ ");",
174
+ ].join("\n"),
175
+ scopes: [scope],
176
+ };
177
+ }
178
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/capabilities/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Cedar Policy Compilation
3
+ *
4
+ * Pure-string composition of Cedar policy fragments. We compile the granted
5
+ * `Capability[]` into one Cedar policy (a) attached as `cedarPolicy` claim on
6
+ * the delegation VC, (b) shown in the success-screen "View policy" disclosure.
7
+ *
8
+ * No `@cedar-policy/cedar-wasm` dependency — this module only emits Cedar
9
+ * source text. Runtime evaluation, if ever added, lives elsewhere.
10
+ *
11
+ * @module @kya-os/consent/cedar/compile
12
+ */
13
+ import type { Capability, CedarTemplateContext } from "../types/capabilities.types.js";
14
+ /**
15
+ * Compile a single capability's Cedar fragment by binding placeholders to the
16
+ * given template context. Used by the per-row "View policy" disclosure so the
17
+ * end user sees the same exact Cedar source that lands on the VC.
18
+ *
19
+ * Throws when the fragment references an unknown placeholder or when the
20
+ * compiled output is empty.
21
+ */
22
+ export declare function compileSingleCapability(capability: Capability, context: CedarTemplateContext): string;
23
+ /**
24
+ * Compile the granted capability set into one Cedar policy ready to attach to
25
+ * a delegation VC. Each capability's fragment is bound and concatenated with
26
+ * a comment header that records the capability id and label, so reviewers can
27
+ * map a `permit (...)` block back to the row the user clicked.
28
+ */
29
+ export declare function compileCapabilitiesToCedar(grants: Capability[], context: CedarTemplateContext): string;
30
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/cedar/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAIxC;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAkBR;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAeR"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Cedar Policy Compilation
3
+ *
4
+ * Pure-string composition of Cedar policy fragments. We compile the granted
5
+ * `Capability[]` into one Cedar policy (a) attached as `cedarPolicy` claim on
6
+ * the delegation VC, (b) shown in the success-screen "View policy" disclosure.
7
+ *
8
+ * No `@cedar-policy/cedar-wasm` dependency — this module only emits Cedar
9
+ * source text. Runtime evaluation, if ever added, lives elsewhere.
10
+ *
11
+ * @module @kya-os/consent/cedar/compile
12
+ */
13
+ const PLACEHOLDER_PATTERN = /\{\{\s*(agent_did|user_did|org|deployment)\s*\}\}/g;
14
+ /**
15
+ * Compile a single capability's Cedar fragment by binding placeholders to the
16
+ * given template context. Used by the per-row "View policy" disclosure so the
17
+ * end user sees the same exact Cedar source that lands on the VC.
18
+ *
19
+ * Throws when the fragment references an unknown placeholder or when the
20
+ * compiled output is empty.
21
+ */
22
+ export function compileSingleCapability(capability, context) {
23
+ const compiled = capability.cedar.replace(PLACEHOLDER_PATTERN, (_, key) => {
24
+ const value = context[key];
25
+ if (typeof value !== "string" || value.length === 0) {
26
+ throw new Error(`Cedar template context missing required value for placeholder \`${key}\``);
27
+ }
28
+ return value;
29
+ });
30
+ if (compiled.trim().length === 0) {
31
+ throw new Error(`Cedar fragment for capability \`${capability.id}\` is empty after compilation`);
32
+ }
33
+ return compiled;
34
+ }
35
+ /**
36
+ * Compile the granted capability set into one Cedar policy ready to attach to
37
+ * a delegation VC. Each capability's fragment is bound and concatenated with
38
+ * a comment header that records the capability id and label, so reviewers can
39
+ * map a `permit (...)` block back to the row the user clicked.
40
+ */
41
+ export function compileCapabilitiesToCedar(grants, context) {
42
+ if (grants.length === 0) {
43
+ return "";
44
+ }
45
+ const blocks = grants.map((grant) => {
46
+ const compiled = compileSingleCapability(grant, context);
47
+ return [
48
+ `// capability: ${grant.id} — ${grant.label}`,
49
+ `// risk: ${grant.riskLevel}; default-on: ${String(grant.defaultOn)}`,
50
+ compiled.trim(),
51
+ ].join("\n");
52
+ });
53
+ return blocks.join("\n\n");
54
+ }
55
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/cedar/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,MAAM,mBAAmB,GAAG,oDAAoD,CAAC;AAEjF;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAsB,EACtB,OAA6B;IAE7B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE;QAChF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAiC,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,mEAAmE,GAAG,IAAI,CAC3E,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,mCAAmC,UAAU,CAAC,EAAE,+BAA+B,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAoB,EACpB,OAA6B;IAE7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO;YACL,kBAAkB,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE;YAC7C,YAAY,KAAK,CAAC,SAAS,iBAAiB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACrE,QAAQ,CAAC,IAAI,EAAE;SAChB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Cedar Policy Plain-Language Gloss
3
+ *
4
+ * Extracts a human-readable summary from a Cedar fragment so the per-row
5
+ * "View policy" disclosure can display both the raw Cedar and a sentence the
6
+ * end user can parse without knowing Cedar.
7
+ *
8
+ * The implementation is intentionally regex-based and tolerant. We never
9
+ * promise to gloss every Cedar feature — we promise the gloss is *useful*
10
+ * for the fragments we ship and authors typically write, and that the
11
+ * function never throws on novel input (it returns best-effort fields).
12
+ *
13
+ * @module @kya-os/consent/cedar/explain
14
+ */
15
+ import type { CedarExplanation } from "../types/capabilities.types.js";
16
+ /**
17
+ * Extract actions, resource expression, and condition clauses from a Cedar
18
+ * fragment. Returns best-effort fields; missing elements come back empty
19
+ * rather than throwing.
20
+ */
21
+ export declare function explainCedarFragment(cedar: string): CedarExplanation;
22
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/cedar/explain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AASvE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAMpE"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Cedar Policy Plain-Language Gloss
3
+ *
4
+ * Extracts a human-readable summary from a Cedar fragment so the per-row
5
+ * "View policy" disclosure can display both the raw Cedar and a sentence the
6
+ * end user can parse without knowing Cedar.
7
+ *
8
+ * The implementation is intentionally regex-based and tolerant. We never
9
+ * promise to gloss every Cedar feature — we promise the gloss is *useful*
10
+ * for the fragments we ship and authors typically write, and that the
11
+ * function never throws on novel input (it returns best-effort fields).
12
+ *
13
+ * @module @kya-os/consent/cedar/explain
14
+ */
15
+ const ACTION_SINGLE = /action\s*==\s*Action::"([^"]+)"/g;
16
+ const ACTION_LIST = /action\s+in\s*\[([^\]]+)\]/g;
17
+ const ACTION_STRING_IN_LIST = /Action::"([^"]+)"/g;
18
+ const RESOURCE_IN = /resource\s+in\s+([^,)\n]+)/i;
19
+ const RESOURCE_EQ = /resource\s*==\s*([^,)\n]+)/i;
20
+ const CONDITION_BLOCK = /(when|unless)\s*\{([^}]+)\}/g;
21
+ /**
22
+ * Extract actions, resource expression, and condition clauses from a Cedar
23
+ * fragment. Returns best-effort fields; missing elements come back empty
24
+ * rather than throwing.
25
+ */
26
+ export function explainCedarFragment(cedar) {
27
+ return {
28
+ actions: extractActions(cedar),
29
+ resource: extractResource(cedar),
30
+ conditions: extractConditions(cedar),
31
+ };
32
+ }
33
+ function extractActions(cedar) {
34
+ const actions = new Set();
35
+ for (const match of cedar.matchAll(ACTION_SINGLE)) {
36
+ if (match[1])
37
+ actions.add(match[1]);
38
+ }
39
+ for (const listMatch of cedar.matchAll(ACTION_LIST)) {
40
+ const inner = listMatch[1];
41
+ if (!inner)
42
+ continue;
43
+ for (const stringMatch of inner.matchAll(ACTION_STRING_IN_LIST)) {
44
+ if (stringMatch[1])
45
+ actions.add(stringMatch[1]);
46
+ }
47
+ }
48
+ return Array.from(actions);
49
+ }
50
+ function extractResource(cedar) {
51
+ const inMatch = RESOURCE_IN.exec(cedar);
52
+ if (inMatch && inMatch[1]) {
53
+ return inMatch[1].trim();
54
+ }
55
+ const eqMatch = RESOURCE_EQ.exec(cedar);
56
+ if (eqMatch && eqMatch[1]) {
57
+ return eqMatch[1].trim();
58
+ }
59
+ return "";
60
+ }
61
+ function extractConditions(cedar) {
62
+ const conditions = [];
63
+ for (const match of cedar.matchAll(CONDITION_BLOCK)) {
64
+ const keyword = match[1];
65
+ const body = match[2];
66
+ if (!keyword || !body)
67
+ continue;
68
+ conditions.push(`${keyword} ${body.trim().replace(/\s+/g, " ")}`);
69
+ }
70
+ return conditions;
71
+ }
72
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/cedar/explain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,aAAa,GAAG,kCAAkC,CAAC;AACzD,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAClD,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AACnD,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAClD,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAClD,MAAM,eAAe,GAAG,8BAA8B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC;QAChC,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAChE,IAAI,WAAW,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI;YAAE,SAAS;QAChC,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Cedar policy compilation + plain-language gloss exports.
3
+ *
4
+ * @module @kya-os/consent/cedar
5
+ */
6
+ export { compileSingleCapability, compileCapabilitiesToCedar, } from "./compile.js";
7
+ export { explainCedarFragment } from "./explain.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cedar/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Cedar policy compilation + plain-language gloss exports.
3
+ *
4
+ * @module @kya-os/consent/cedar
5
+ */
6
+ export { compileSingleCapability, compileCapabilitiesToCedar, } from "./compile.js";
7
+ export { explainCedarFragment } from "./explain.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cedar/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}