@contractspec/bundle.library 3.9.9 → 3.10.0

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 (44) hide show
  1. package/.turbo/turbo-build.log +54 -40
  2. package/CHANGELOG.md +48 -0
  3. package/README.md +1 -0
  4. package/dist/components/integrations/atoms/IntegrationCredentialFieldList.d.ts +6 -0
  5. package/dist/components/integrations/atoms/IntegrationCredentialFieldList.js +2 -0
  6. package/dist/components/integrations/atoms/IntegrationCredentialModeTabs.d.ts +7 -0
  7. package/dist/components/integrations/atoms/IntegrationCredentialModeTabs.js +2 -0
  8. package/dist/components/integrations/atoms/IntegrationEnvAliasPreview.d.ts +7 -0
  9. package/dist/components/integrations/atoms/IntegrationEnvAliasPreview.js +2 -0
  10. package/dist/components/integrations/blocks/IntegrationCredentialSetupBlock.d.ts +11 -0
  11. package/dist/components/integrations/blocks/IntegrationCredentialSetupBlock.js +2 -0
  12. package/dist/components/integrations/byok-env-ui-kit.test.d.ts +1 -0
  13. package/dist/components/integrations/helpers/credentialSetupAliases.d.ts +3 -0
  14. package/dist/components/integrations/helpers/credentialSetupAliases.js +2 -0
  15. package/dist/components/integrations/helpers/credentialSetupModel.d.ts +58 -0
  16. package/dist/components/integrations/helpers/credentialSetupModel.js +2 -0
  17. package/dist/components/integrations/index.d.ts +5 -0
  18. package/dist/components/integrations/index.js +2 -2
  19. package/dist/components/integrations/organisms/IntegrationSettings.d.ts +3 -1
  20. package/dist/components/integrations/organisms/IntegrationSettings.js +2 -2
  21. package/dist/components/integrations/organisms/IntegrationSettingsSecretReference.d.ts +8 -0
  22. package/dist/components/integrations/organisms/IntegrationSettingsSecretReference.js +2 -0
  23. package/dist/index.js +302 -302
  24. package/dist/node/components/integrations/atoms/IntegrationCredentialFieldList.js +1 -0
  25. package/dist/node/components/integrations/atoms/IntegrationCredentialModeTabs.js +1 -0
  26. package/dist/node/components/integrations/atoms/IntegrationEnvAliasPreview.js +1 -0
  27. package/dist/node/components/integrations/blocks/IntegrationCredentialSetupBlock.js +1 -0
  28. package/dist/node/components/integrations/helpers/credentialSetupAliases.js +1 -0
  29. package/dist/node/components/integrations/helpers/credentialSetupModel.js +1 -0
  30. package/dist/node/components/integrations/index.js +2 -2
  31. package/dist/node/components/integrations/organisms/IntegrationSettings.js +2 -2
  32. package/dist/node/components/integrations/organisms/IntegrationSettingsSecretReference.js +1 -0
  33. package/dist/node/index.js +302 -302
  34. package/package.json +107 -23
  35. package/src/components/integrations/atoms/IntegrationCredentialFieldList.tsx +51 -0
  36. package/src/components/integrations/atoms/IntegrationCredentialModeTabs.tsx +44 -0
  37. package/src/components/integrations/atoms/IntegrationEnvAliasPreview.tsx +56 -0
  38. package/src/components/integrations/blocks/IntegrationCredentialSetupBlock.tsx +95 -0
  39. package/src/components/integrations/byok-env-ui-kit.test.tsx +194 -0
  40. package/src/components/integrations/helpers/credentialSetupAliases.ts +137 -0
  41. package/src/components/integrations/helpers/credentialSetupModel.ts +218 -0
  42. package/src/components/integrations/index.ts +5 -0
  43. package/src/components/integrations/organisms/IntegrationSettings.tsx +91 -97
  44. package/src/components/integrations/organisms/IntegrationSettingsSecretReference.tsx +84 -0
@@ -0,0 +1 @@
1
+ var F=Object.defineProperty;var G=(q)=>q;function I(q,v){this[q]=G.bind(null,v)}var O=(q,v)=>{for(var h in v)F(q,h,{get:v[h],enumerable:!0,configurable:!0,set:I.bind(v,h)})};var P=(q,v)=>()=>(q&&(v=q(q=0)),v);import{HStack as J,Muted as A,Small as K,Text as E,VStack as C}from"@contractspec/lib.design-system";import{Badge as N}from"@contractspec/lib.ui-kit-web/ui/badge";import{jsx as z,jsxs as D}from"react/jsx-runtime";function W({fields:q,emptyLabel:v="No credential fields declared."}){if(q.length===0)return z(A,{children:v});return z(C,{gap:"sm",align:"stretch",children:q.map((h)=>D(C,{gap:"sm",align:"stretch",className:"rounded-xl border p-3 text-sm",children:[D(J,{justify:"between",align:"start",gap:"md",children:[D(C,{gap:"sm",align:"start",children:[z(K,{children:h.label}),z(A,{className:"text-xs",children:h.kind})]}),z(N,{variant:h.status==="missing"?"destructive":"secondary",children:z(E,{children:h.status})})]}),h.description?z(A,{children:h.description}):null,h.secretRef?z(A,{className:"font-mono text-xs",children:h.secretRef}):null,h.required?z(E,{className:"text-xs",children:"Required"}):null]},`${h.kind}:${h.key}`))})}export{W as IntegrationCredentialFieldList};
@@ -0,0 +1 @@
1
+ var D=Object.defineProperty;var E=(f)=>f;function F(f,q){this[f]=E.bind(null,q)}var L=(f,q)=>{for(var y in q)D(f,y,{get:q[y],enumerable:!0,configurable:!0,set:F.bind(q,y)})};var N=(f,q)=>()=>(f&&(q=f(f=0)),q);import{HStack as G,Text as A}from"@contractspec/lib.design-system";import{Badge as I}from"@contractspec/lib.ui-kit-web/ui/badge";import{Button as J}from"@contractspec/lib.ui-kit-web/ui/button";import{jsx as z,jsxs as K}from"react/jsx-runtime";function U({modes:f,selectedMode:q,onModeChange:y}){return z(G,{wrap:"wrap",gap:"sm",role:"tablist","aria-label":"Credential mode",children:f.map((v)=>K(J,{type:"button",variant:v.mode===q?"default":"outline",disabled:!v.available,onClick:()=>y?.(v.mode),role:"tab","aria-selected":v.mode===q,children:[z(A,{children:v.label}),v.missingRequiredCount>0?z(I,{variant:"destructive",children:z(A,{children:`${v.missingRequiredCount} missing`})}):null]},v.mode))})}export{U as IntegrationCredentialModeTabs};
@@ -0,0 +1 @@
1
+ var G=Object.defineProperty;var I=(h)=>h;function J(h,q){this[h]=I.bind(null,q)}var P=(h,q)=>{for(var z in q)G(h,z,{get:q[z],enumerable:!0,configurable:!0,set:J.bind(q,z)})};var Q=(h,q)=>()=>(h&&(q=h(h=0)),q);import{Code as K,HStack as N,Muted as A,Text as E,VStack as F}from"@contractspec/lib.design-system";import{Badge as O}from"@contractspec/lib.ui-kit-web/ui/badge";import{jsx as v,jsxs as D}from"react/jsx-runtime";function X({aliases:h,warnings:q=[],emptyLabel:z="No env aliases declared."}){return D(F,{gap:"sm",align:"stretch",children:[h.length===0?v(A,{children:z}):null,h.map((f)=>D(F,{gap:"sm",align:"stretch",className:"rounded-xl border p-3 text-sm",children:[D(N,{wrap:"wrap",gap:"sm",align:"center",children:[v(K,{children:f.envName}),v(O,{variant:f.public?"default":"secondary",children:v(E,{children:f.public?"public":"server"})})]}),v(A,{className:"text-xs",children:`${f.logicalKey} → ${f.targetLabel??f.targetId??"workspace root"}${f.framework?` · ${f.framework}`:""}${f.profile?` · ${f.profile}`:""}`}),f.warning?v(E,{className:"text-xs",children:f.warning}):null]},`${f.logicalKey}:${f.envName}:${f.targetId??"root"}`)),q.map((f)=>v(A,{children:`${f.level.toUpperCase()}: ${f.message}`},`${f.level}:${f.fieldKey??f.message}`))]})}export{X as IntegrationEnvAliasPreview};
@@ -0,0 +1 @@
1
+ var u=Object.defineProperty;var w=(r)=>r;function T(r,A){this[r]=w.bind(null,A)}var Br=(r,A)=>{for(var E in A)u(r,E,{get:A[E],enumerable:!0,configurable:!0,set:T.bind(A,E)})};var Xr=(r,A)=>()=>(r&&(A=r(r=0)),A);import{HStack as o,Muted as _,Small as m,Text as J,VStack as X}from"@contractspec/lib.design-system";import{Badge as f}from"@contractspec/lib.ui-kit-web/ui/badge";import{jsx as K,jsxs as $}from"react/jsx-runtime";function Q({fields:r,emptyLabel:A="No credential fields declared."}){if(r.length===0)return K(_,{children:A});return K(X,{gap:"sm",align:"stretch",children:r.map((E)=>$(X,{gap:"sm",align:"stretch",className:"rounded-xl border p-3 text-sm",children:[$(o,{justify:"between",align:"start",gap:"md",children:[$(X,{gap:"sm",align:"start",children:[K(m,{children:E.label}),K(_,{className:"text-xs",children:E.kind})]}),K(f,{variant:E.status==="missing"?"destructive":"secondary",children:K(J,{children:E.status})})]}),E.description?K(_,{children:E.description}):null,E.secretRef?K(_,{className:"font-mono text-xs",children:E.secretRef}):null,E.required?K(J,{className:"text-xs",children:"Required"}):null]},`${E.kind}:${E.key}`))})}import{HStack as j,Text as Y}from"@contractspec/lib.design-system";import{Badge as x}from"@contractspec/lib.ui-kit-web/ui/badge";import{Button as n}from"@contractspec/lib.ui-kit-web/ui/button";import{jsx as h,jsxs as l}from"react/jsx-runtime";function Z({modes:r,selectedMode:A,onModeChange:E}){return h(j,{wrap:"wrap",gap:"sm",role:"tablist","aria-label":"Credential mode",children:r.map((I)=>l(n,{type:"button",variant:I.mode===A?"default":"outline",disabled:!I.available,onClick:()=>E?.(I.mode),role:"tab","aria-selected":I.mode===A,children:[h(Y,{children:I.label}),I.missingRequiredCount>0?h(x,{variant:"destructive",children:h(Y,{children:`${I.missingRequiredCount} missing`})}):null]},I.mode))})}import{Code as e,HStack as a,Muted as g,Text as q,VStack as F}from"@contractspec/lib.design-system";import{Badge as d}from"@contractspec/lib.ui-kit-web/ui/badge";import{jsx as b,jsxs as O}from"react/jsx-runtime";function V({aliases:r,warnings:A=[],emptyLabel:E="No env aliases declared."}){return O(F,{gap:"sm",align:"stretch",children:[r.length===0?b(g,{children:E}):null,r.map((I)=>O(F,{gap:"sm",align:"stretch",className:"rounded-xl border p-3 text-sm",children:[O(a,{wrap:"wrap",gap:"sm",align:"center",children:[b(e,{children:I.envName}),b(d,{variant:I.public?"default":"secondary",children:b(q,{children:I.public?"public":"server"})})]}),b(g,{className:"text-xs",children:`${I.logicalKey} → ${I.targetLabel??I.targetId??"workspace root"}${I.framework?` · ${I.framework}`:""}${I.profile?` · ${I.profile}`:""}`}),I.warning?b(q,{className:"text-xs",children:I.warning}):null]},`${I.logicalKey}:${I.envName}:${I.targetId??"root"}`)),A.map((I)=>b(g,{children:`${I.level.toUpperCase()}: ${I.message}`},`${I.level}:${I.fieldKey??I.message}`))]})}function t(r,A,E,I){return[...s(r?.envAliases??[],E,I),...i(A.environment,A,E,I)]}function s(r,A,E){return r.flatMap((I)=>{if(A.has(I.logicalKey)&&z(I.envVar,I.public))return E.push({level:"error",fieldKey:I.logicalKey,message:`Unsafe public alias was omitted for secret field ${I.logicalKey}.`}),[];return[{logicalKey:I.logicalKey,envName:I.envVar,targetId:I.targetId,public:z(I.envVar,I.public),warning:I.public?"Public client alias":void 0}]})}function i(r,A,E,I){if(!r)return[];return Object.values(r?.variables??{}).flatMap((c)=>(c.aliases??[]).filter((C)=>rr(C,r,A)).flatMap((C)=>{let P=z(C.name)||Ar(C.exposure);if(E.has(c.key)&&P)return I.push({level:"error",fieldKey:c.key,message:`Unsafe public alias was omitted for secret field ${c.key}.`}),[];return[{logicalKey:c.key,envName:C.name,targetId:C.targetId,targetLabel:Ir(r,C.targetId),profile:C.profile,framework:C.framework,public:P,warning:P?"Public client alias":void 0}]}))}function rr(r,A,E){if(E.targetIds?.length&&r.targetId&&!E.targetIds.includes(r.targetId))return!1;if(E.profile&&r.profile&&r.profile!==E.profile)return!1;if(!E.targetIds?.length&&(r.targetId||r.profile||r.framework))return!1;if(r.framework&&r.targetId){let I=A.targets?.[r.targetId]?.framework;if(I&&I!==r.framework)return!1}return!0}function Ir(r,A){if(!A)return;let E=r.targets?.[A];return E?.packageName??E?.appId??E?.id??A}function Ar(r){return r==="public-client"||r==="native-client"}function z(r,A){return A===!0||r.startsWith("NEXT_PUBLIC_")||r.startsWith("EXPO_PUBLIC_")}import{getIntegrationCredentialManifest as Er}from"@contractspec/lib.contracts-integrations";function H(r){let A=r.credentialManifest??Cr(r),E=cr(r,A),I=r.selectedMode??E[0]??"managed",c=A.modes?.[I],C=new Set((c?.secretFields??[]).map((U)=>U.key)),P=[],B=Pr(c,r,P),W=t(c,r,C,P),M=E.map((U)=>yr(U,A.modes?.[U],r));return{selectedMode:I,modes:M,fields:B,aliases:W,warnings:P}}function Cr(r){return r.integration?Er(r.integration):{}}function cr(r,A){return r.supportedModes??r.integration?.supportedModes??Object.keys(A.modes??{})}function yr(r,A,E){let I=[...A?.configFields??[],...A?.secretFields??[]],c=I.filter((C)=>C.required&&!L(C,E)).length;return{mode:r,label:r==="byok"?"BYOK":"Managed",available:Boolean(A),fieldCount:I.length,missingRequiredCount:c,docsUrl:A?.docsUrl,setupSteps:A?.setupSteps}}function Pr(r,A,E){let I=(r?.configFields??[]).map((C)=>R("config",C,A,E)),c=(r?.secretFields??[]).map((C)=>R("secret",C,A,E));return[...I,...c]}function R(r,A,E,I){let c=L(A,E),C=r==="secret"?Kr(A,E,I):void 0;if(r==="secret"&&A.required===!0&&!c)I.push({level:"warning",fieldKey:A.key,message:`${D(A.key)} is required for BYOK secret reference setup.`});return{kind:r,key:A.key,label:D(A.key),description:A.description,required:A.required===!0,status:c?"configured":A.required?"missing":"optional",secretRef:C,envVar:A.envVar}}function L(r,A){let E=A.configValues?.[r.key],I=A.secretRefs?.[r.key]??A.secretRefs?.[r.envVar??""];return v(E)||v(I)}function Kr(r,A,E){let I=A.secretRefs?.[r.key]??A.secretRefs?.[r.envVar??""];if(!I)return;if(/^[a-z][a-z0-9+.-]*:\/\//i.test(I)||/^[A-Z][A-Z0-9_]*$/.test(I))return I;E.push({level:"warning",fieldKey:r.key,message:`${D(r.key)} has a value, but it is hidden because it is not a secret reference.`});return}function v(r){return r!==void 0&&r!==null&&r!==""}function D(r){return r.replace(/[_-]+/g," ").replace(/\b\w/g,(A)=>A.toUpperCase())}import{Small as S,Text as k,VStack as G}from"@contractspec/lib.design-system";import{Button as p}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as Wr,CardContent as br,CardDescription as Nr,CardFooter as Ur,CardHeader as _r,CardTitle as hr}from"@contractspec/lib.ui-kit-web/ui/card";import{jsx as y,jsxs as N}from"react/jsx-runtime";function or({title:r="Credential setup",description:A="Configure managed credentials or BYOK secret references without exposing raw secrets.",onModeChange:E,onTestConnection:I,onSave:c,isTesting:C,isSaving:P,...B}){let W=H(B);return N(Wr,{children:[N(_r,{children:[y(hr,{children:r}),y(Nr,{children:A})]}),y(br,{children:N(G,{gap:"lg",align:"stretch",children:[y(Z,{modes:W.modes,selectedMode:W.selectedMode,onModeChange:E}),N(G,{gap:"sm",align:"stretch",children:[y(S,{children:"Required fields"}),y(Q,{fields:W.fields})]}),N(G,{gap:"sm",align:"stretch",children:[y(S,{children:"Environment aliases"}),y(V,{aliases:W.aliases,warnings:W.warnings})]})]})}),I||c?N(Ur,{className:"flex flex-wrap justify-end gap-2",children:[I?y(p,{type:"button",variant:"outline",disabled:C,onClick:()=>void I(),children:y(k,{children:C?"Testing...":"Test connection"})}):null,c?y(p,{type:"button",disabled:P,onClick:()=>void c(),children:y(k,{children:P?"Saving...":"Save settings"})}):null]}):null]})}export{or as IntegrationCredentialSetupBlock};
@@ -0,0 +1 @@
1
+ var u=Object.defineProperty;var f=(e)=>e;function d(e,t){this[e]=f.bind(null,t)}var I=(e,t)=>{for(var r in t)u(e,r,{get:t[r],enumerable:!0,configurable:!0,set:d.bind(t,r)})};var b=(e,t)=>()=>(e&&(t=e(e=0)),t);function v(e,t,r,n){return[...c(e?.envAliases??[],r,n),...g(t.environment,t,r,n)]}function c(e,t,r){return e.flatMap((n)=>{if(t.has(n.logicalKey)&&o(n.envVar,n.public))return r.push({level:"error",fieldKey:n.logicalKey,message:`Unsafe public alias was omitted for secret field ${n.logicalKey}.`}),[];return[{logicalKey:n.logicalKey,envName:n.envVar,targetId:n.targetId,public:o(n.envVar,n.public),warning:n.public?"Public client alias":void 0}]})}function g(e,t,r,n){if(!e)return[];return Object.values(e?.variables??{}).flatMap((l)=>(l.aliases??[]).filter((i)=>p(i,e,t)).flatMap((i)=>{let a=o(i.name)||m(i.exposure);if(r.has(l.key)&&a)return n.push({level:"error",fieldKey:l.key,message:`Unsafe public alias was omitted for secret field ${l.key}.`}),[];return[{logicalKey:l.key,envName:i.name,targetId:i.targetId,targetLabel:s(e,i.targetId),profile:i.profile,framework:i.framework,public:a,warning:a?"Public client alias":void 0}]}))}function p(e,t,r){if(r.targetIds?.length&&e.targetId&&!r.targetIds.includes(e.targetId))return!1;if(r.profile&&e.profile&&e.profile!==r.profile)return!1;if(!r.targetIds?.length&&(e.targetId||e.profile||e.framework))return!1;if(e.framework&&e.targetId){let n=t.targets?.[e.targetId]?.framework;if(n&&n!==e.framework)return!1}return!0}function s(e,t){if(!t)return;let r=e.targets?.[t];return r?.packageName??r?.appId??r?.id??t}function m(e){return e==="public-client"||e==="native-client"}function o(e,t){return t===!0||e.startsWith("NEXT_PUBLIC_")||e.startsWith("EXPO_PUBLIC_")}export{v as buildAliases};
@@ -0,0 +1 @@
1
+ var h=Object.defineProperty;var v=(r)=>r;function P(r,t){this[r]=v.bind(null,t)}var X=(r,t)=>{for(var o in t)h(r,o,{get:t[o],enumerable:!0,configurable:!0,set:P.bind(t,o)})};var $=(r,t)=>()=>(r&&(t=r(r=0)),t);function b(r,t,o,e){return[...B(r?.envAliases??[],o,e),...K(t.environment,t,o,e)]}function B(r,t,o){return r.flatMap((e)=>{if(t.has(e.logicalKey)&&I(e.envVar,e.public))return o.push({level:"error",fieldKey:e.logicalKey,message:`Unsafe public alias was omitted for secret field ${e.logicalKey}.`}),[];return[{logicalKey:e.logicalKey,envName:e.envVar,targetId:e.targetId,public:I(e.envVar,e.public),warning:e.public?"Public client alias":void 0}]})}function K(r,t,o,e){if(!r)return[];return Object.values(r?.variables??{}).flatMap((g)=>(g.aliases??[]).filter((c)=>W(c,r,t)).flatMap((c)=>{let a=I(c.name)||M(c.exposure);if(o.has(g.key)&&a)return e.push({level:"error",fieldKey:g.key,message:`Unsafe public alias was omitted for secret field ${g.key}.`}),[];return[{logicalKey:g.key,envName:c.name,targetId:c.targetId,targetLabel:k(r,c.targetId),profile:c.profile,framework:c.framework,public:a,warning:a?"Public client alias":void 0}]}))}function W(r,t,o){if(o.targetIds?.length&&r.targetId&&!o.targetIds.includes(r.targetId))return!1;if(o.profile&&r.profile&&r.profile!==o.profile)return!1;if(!o.targetIds?.length&&(r.targetId||r.profile||r.framework))return!1;if(r.framework&&r.targetId){let e=t.targets?.[r.targetId]?.framework;if(e&&e!==r.framework)return!1}return!0}function k(r,t){if(!t)return;let o=r.targets?.[t];return o?.packageName??o?.appId??o?.id??t}function M(r){return r==="public-client"||r==="native-client"}function I(r,t){return t===!0||r.startsWith("NEXT_PUBLIC_")||r.startsWith("EXPO_PUBLIC_")}import{getIntegrationCredentialManifest as N}from"@contractspec/lib.contracts-integrations";function w(r){let t=r.credentialManifest??U(r),o=V(r,t),e=r.selectedMode??o[0]??"managed",g=t.modes?.[e],c=new Set((g?.secretFields??[]).map((n)=>n.key)),a=[],y=p(g,r,a),E=b(g,r,c,a),u=o.map((n)=>_(n,t.modes?.[n],r));return{selectedMode:e,modes:u,fields:y,aliases:E,warnings:a}}function U(r){return r.integration?N(r.integration):{}}function V(r,t){return r.supportedModes??r.integration?.supportedModes??Object.keys(t.modes??{})}function _(r,t,o){let e=[...t?.configFields??[],...t?.secretFields??[]],g=e.filter((c)=>c.required&&!A(c,o)).length;return{mode:r,label:r==="byok"?"BYOK":"Managed",available:Boolean(t),fieldCount:e.length,missingRequiredCount:g,docsUrl:t?.docsUrl,setupSteps:t?.setupSteps}}function p(r,t,o){let e=(r?.configFields??[]).map((c)=>l("config",c,t,o)),g=(r?.secretFields??[]).map((c)=>l("secret",c,t,o));return[...e,...g]}function l(r,t,o,e){let g=A(t,o),c=r==="secret"?x(t,o,e):void 0;if(r==="secret"&&t.required===!0&&!g)e.push({level:"warning",fieldKey:t.key,message:`${C(t.key)} is required for BYOK secret reference setup.`});return{kind:r,key:t.key,label:C(t.key),description:t.description,required:t.required===!0,status:g?"configured":t.required?"missing":"optional",secretRef:c,envVar:t.envVar}}function A(r,t){let o=t.configValues?.[r.key],e=t.secretRefs?.[r.key]??t.secretRefs?.[r.envVar??""];return S(o)||S(e)}function x(r,t,o){let e=t.secretRefs?.[r.key]??t.secretRefs?.[r.envVar??""];if(!e)return;if(/^[a-z][a-z0-9+.-]*:\/\//i.test(e)||/^[A-Z][A-Z0-9_]*$/.test(e))return e;o.push({level:"warning",fieldKey:r.key,message:`${C(r.key)} has a value, but it is hidden because it is not a secret reference.`});return}function S(r){return r!==void 0&&r!==null&&r!==""}function C(r){return r.replace(/[_-]+/g," ").replace(/\b\w/g,(t)=>t.toUpperCase())}export{w as buildIntegrationCredentialSetupModel};
@@ -1,3 +1,3 @@
1
- var T=Object.defineProperty;var h=(m)=>m;function v(m,N){this[m]=h.bind(null,N)}var fd=(m,N)=>{for(var y in N)T(m,y,{get:N[y],enumerable:!0,configurable:!0,set:v.bind(N,y)})};var md=(m,N)=>()=>(m&&(N=m(m=0)),N);import{Button as M}from"@contractspec/lib.design-system";import{PlugZap as V,ToggleRight as S}from"lucide-react";import{jsx as Y,jsxs as q}from"react/jsx-runtime";function A({id:m,provider:N,name:y,category:Z,enabled:b=!0,lastSyncAt:J,status:P="connected",onToggle:Q,onConfigure:$}){return q("div",{className:"flex flex-col gap-4 rounded-2xl border border-border bg-card p-4 shadow-sm",children:[q("header",{className:"flex items-center justify-between",children:[q("div",{children:[Y("p",{className:"font-semibold text-xl",children:y}),Y("p",{className:"text-muted-foreground text-sm",children:N})]}),q(M,{variant:"outline",size:"sm",className:`inline-flex items-center gap-2 rounded-full border px-3 py-1 font-semibold text-xs uppercase tracking-wide ${P==="connected"?"text-emerald-500 bg-emerald-500/10 border-emerald-500/30":P==="error"?"text-red-500 bg-red-500/10 border-red-500/30":"text-gray-500 bg-gray-500/10 border-gray-500/30"}`,onPress:()=>Q?.(m,!b),children:[Y(S,{className:"h-3.5 w-3.5"}),b?"Enabled":"Disabled"]})]}),q("div",{className:"text-muted-foreground text-sm",children:[Z&&Y("span",{className:"font-medium",children:Z}),q("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-xs uppercase tracking-wide",children:[q("span",{className:"inline-flex items-center gap-1",children:[Y(V,{className:"h-3 w-3"}),P]}),q("span",{children:["Last sync:"," ",J?new Date(J).toLocaleString():"Not synced yet"]})]})]}),q("footer",{className:"flex items-center gap-2",children:[Y(M,{className:"flex-1",onPress:()=>$?.(m),children:"Configure"}),Y(M,{variant:"ghost",className:"flex-1",onPress:()=>Q?.(m,!b),children:b?"Disconnect":"Connect"})]})]})}import{Input as r}from"@contractspec/lib.design-system";import{Select as g,SelectContent as o,SelectItem as O,SelectTrigger as c,SelectValue as l}from"@contractspec/lib.ui-kit-web/ui/select";import{Boxes as u,Search as a}from"lucide-react";import*as E from"react";import{jsx as w,jsxs as B}from"react/jsx-runtime";function qd({integrations:m,onToggle:N,onConfigure:y}){let[Z,b]=E.useState(""),[J,P]=E.useState("all"),Q=E.useMemo(()=>Array.from(new Set(m.map((f)=>f.category))),[m]),$=m.filter((f)=>{let X=f.name.toLowerCase().includes(Z.toLowerCase())||f.provider.toLowerCase().includes(Z.toLowerCase()),H=J==="all"?!0:f.category===J;return X&&H});return B("div",{className:"space-y-4 rounded-2xl border border-border bg-card p-4",children:[B("header",{className:"flex flex-wrap items-center justify-between gap-3",children:[B("div",{children:[w("p",{className:"font-semibold text-sm uppercase tracking-wide",children:"Integration marketplace"}),w("p",{className:"text-muted-foreground text-sm",children:"Connect AI providers, payments, analytics, and internal tools with BYOK controls."})]}),w(u,{className:"h-5 w-5 text-muted-foreground"})]}),B("div",{className:"flex flex-wrap gap-3",children:[B("div",{className:"relative min-w-[200px] flex-1",children:[w(a,{className:"pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),w(r,{type:"search","aria-label":"Search providers",className:"w-full py-2 pr-3 pl-9 text-sm",value:Z,onChange:(f)=>b(f.target.value),placeholder:"Search providers"})]}),B(g,{value:J,onValueChange:P,children:[w(c,{className:"w-[200px]",children:w(l,{placeholder:"All categories"})}),B(o,{children:[w(O,{value:"all",children:"All categories"}),Q.map((f)=>w(O,{value:f,children:f},f))]})]})]}),w("div",{className:"grid gap-4 md:grid-cols-2",children:$.length?$.map((f)=>w(A,{id:f.id,provider:f.provider,name:f.name,category:f.category,enabled:f.enabled,status:f.status,lastSyncAt:f.lastSyncAt,onToggle:N,onConfigure:y},f.id)):w("div",{className:"rounded-xl border border-border border-dashed p-6 text-center text-muted-foreground text-sm md:col-span-2",children:"No integrations match your filters."})})]})}import{Button as R,Input as W,Textarea as n}from"@contractspec/lib.design-system";import{Checkbox as x}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{Label as D}from"@contractspec/lib.ui-kit-web/ui/label";import{Select as U,SelectContent as _,SelectItem as G,SelectTrigger as K,SelectValue as k}from"@contractspec/lib.ui-kit-web/ui/select";import{Key as i,ShieldCheck as t,TestTube2 as j}from"lucide-react";import*as L from"react";import{jsx as d,jsxs as p}from"react/jsx-runtime";function Ed({provider:m,initialValues:N,onTestConnection:y,onSave:Z,isSaving:b,isTesting:J}){let[P,Q]=L.useState({apiKey:N?.apiKey??"",secret:N?.secret??"",ownershipMode:N?.ownershipMode??"managed",secretProvider:N?.secretProvider??"env",secretRef:N?.secretRef??"",config:N?.config??`{
1
+ var qr=Object.defineProperty;var Dr=(r)=>r;function Fr(r,A){this[r]=Dr.bind(null,A)}var O0=(r,A)=>{for(var I in A)qr(r,I,{get:A[I],enumerable:!0,configurable:!0,set:Fr.bind(A,I)})};var B0=(r,A)=>()=>(r&&(A=r(r=0)),A);import{HStack as Gr,Muted as C,Small as Or,Text as d,VStack as k}from"@contractspec/lib.design-system";import{Badge as Br}from"@contractspec/lib.ui-kit-web/ui/badge";import{jsx as Y,jsxs as m}from"react/jsx-runtime";function l({fields:r,emptyLabel:A="No credential fields declared."}){if(r.length===0)return Y(C,{children:A});return Y(k,{gap:"sm",align:"stretch",children:r.map((I)=>m(k,{gap:"sm",align:"stretch",className:"rounded-xl border p-3 text-sm",children:[m(Gr,{justify:"between",align:"start",gap:"md",children:[m(k,{gap:"sm",align:"start",children:[Y(Or,{children:I.label}),Y(C,{className:"text-xs",children:I.kind})]}),Y(Br,{variant:I.status==="missing"?"destructive":"secondary",children:Y(d,{children:I.status})})]}),I.description?Y(C,{children:I.description}):null,I.secretRef?Y(C,{className:"font-mono text-xs",children:I.secretRef}):null,I.required?Y(d,{className:"text-xs",children:"Required"}):null]},`${I.kind}:${I.key}`))})}import{HStack as pr,Text as t}from"@contractspec/lib.design-system";import{Badge as Rr}from"@contractspec/lib.ui-kit-web/ui/badge";import{Button as Hr}from"@contractspec/lib.ui-kit-web/ui/button";import{jsx as w,jsxs as Lr}from"react/jsx-runtime";function n({modes:r,selectedMode:A,onModeChange:I}){return w(pr,{wrap:"wrap",gap:"sm",role:"tablist","aria-label":"Credential mode",children:r.map((N)=>Lr(Hr,{type:"button",variant:N.mode===A?"default":"outline",disabled:!N.available,onClick:()=>I?.(N.mode),role:"tab","aria-selected":N.mode===A,children:[w(t,{children:N.label}),N.missingRequiredCount>0?w(Rr,{variant:"destructive",children:w(t,{children:`${N.missingRequiredCount} missing`})}):null]},N.mode))})}import{Code as Cr,HStack as wr,Muted as f,Text as x,VStack as j}from"@contractspec/lib.design-system";import{Badge as Mr}from"@contractspec/lib.ui-kit-web/ui/badge";import{jsx as G,jsxs as V}from"react/jsx-runtime";function a({aliases:r,warnings:A=[],emptyLabel:I="No env aliases declared."}){return V(j,{gap:"sm",align:"stretch",children:[r.length===0?G(f,{children:I}):null,r.map((N)=>V(j,{gap:"sm",align:"stretch",className:"rounded-xl border p-3 text-sm",children:[V(wr,{wrap:"wrap",gap:"sm",align:"center",children:[G(Cr,{children:N.envName}),G(Mr,{variant:N.public?"default":"secondary",children:G(x,{children:N.public?"public":"server"})})]}),G(f,{className:"text-xs",children:`${N.logicalKey} → ${N.targetLabel??N.targetId??"workspace root"}${N.framework?` · ${N.framework}`:""}${N.profile?` · ${N.profile}`:""}`}),N.warning?G(x,{className:"text-xs",children:N.warning}):null]},`${N.logicalKey}:${N.envName}:${N.targetId??"root"}`)),A.map((N)=>G(f,{children:`${N.level.toUpperCase()}: ${N.message}`},`${N.level}:${N.fieldKey??N.message}`))]})}function e(r,A,I,N){return[...hr(r?.envAliases??[],I,N),...kr(A.environment,A,I,N)]}function hr(r,A,I){return r.flatMap((N)=>{if(A.has(N.logicalKey)&&T(N.envVar,N.public))return I.push({level:"error",fieldKey:N.logicalKey,message:`Unsafe public alias was omitted for secret field ${N.logicalKey}.`}),[];return[{logicalKey:N.logicalKey,envName:N.envVar,targetId:N.targetId,public:T(N.envVar,N.public),warning:N.public?"Public client alias":void 0}]})}function kr(r,A,I,N){if(!r)return[];return Object.values(r?.variables??{}).flatMap((b)=>(b.aliases??[]).filter((E)=>mr(E,r,A)).flatMap((E)=>{let W=T(E.name)||Vr(E.exposure);if(I.has(b.key)&&W)return N.push({level:"error",fieldKey:b.key,message:`Unsafe public alias was omitted for secret field ${b.key}.`}),[];return[{logicalKey:b.key,envName:E.name,targetId:E.targetId,targetLabel:fr(r,E.targetId),profile:E.profile,framework:E.framework,public:W,warning:W?"Public client alias":void 0}]}))}function mr(r,A,I){if(I.targetIds?.length&&r.targetId&&!I.targetIds.includes(r.targetId))return!1;if(I.profile&&r.profile&&r.profile!==I.profile)return!1;if(!I.targetIds?.length&&(r.targetId||r.profile||r.framework))return!1;if(r.framework&&r.targetId){let N=A.targets?.[r.targetId]?.framework;if(N&&N!==r.framework)return!1}return!0}function fr(r,A){if(!A)return;let I=r.targets?.[A];return I?.packageName??I?.appId??I?.id??A}function Vr(r){return r==="public-client"||r==="native-client"}function T(r,A){return A===!0||r.startsWith("NEXT_PUBLIC_")||r.startsWith("EXPO_PUBLIC_")}import{getIntegrationCredentialManifest as Tr}from"@contractspec/lib.contracts-integrations";function rr(r){let A=r.credentialManifest??vr(r),I=gr(r,A),N=r.selectedMode??I[0]??"managed",b=A.modes?.[N],E=new Set((b?.secretFields??[]).map((X)=>X.key)),W=[],K=Sr(b,r,W),$=e(b,r,E,W),P=I.map((X)=>cr(X,A.modes?.[X],r));return{selectedMode:N,modes:P,fields:K,aliases:$,warnings:W}}function vr(r){return r.integration?Tr(r.integration):{}}function gr(r,A){return r.supportedModes??r.integration?.supportedModes??Object.keys(A.modes??{})}function cr(r,A,I){let N=[...A?.configFields??[],...A?.secretFields??[]],b=N.filter((E)=>E.required&&!Nr(E,I)).length;return{mode:r,label:r==="byok"?"BYOK":"Managed",available:Boolean(A),fieldCount:N.length,missingRequiredCount:b,docsUrl:A?.docsUrl,setupSteps:A?.setupSteps}}function Sr(r,A,I){let N=(r?.configFields??[]).map((E)=>i("config",E,A,I)),b=(r?.secretFields??[]).map((E)=>i("secret",E,A,I));return[...N,...b]}function i(r,A,I,N){let b=Nr(A,I),E=r==="secret"?ur(A,I,N):void 0;if(r==="secret"&&A.required===!0&&!b)N.push({level:"warning",fieldKey:A.key,message:`${v(A.key)} is required for BYOK secret reference setup.`});return{kind:r,key:A.key,label:v(A.key),description:A.description,required:A.required===!0,status:b?"configured":A.required?"missing":"optional",secretRef:E,envVar:A.envVar}}function Nr(r,A){let I=A.configValues?.[r.key],N=A.secretRefs?.[r.key]??A.secretRefs?.[r.envVar??""];return s(I)||s(N)}function ur(r,A,I){let N=A.secretRefs?.[r.key]??A.secretRefs?.[r.envVar??""];if(!N)return;if(/^[a-z][a-z0-9+.-]*:\/\//i.test(N)||/^[A-Z][A-Z0-9_]*$/.test(N))return N;I.push({level:"warning",fieldKey:r.key,message:`${v(r.key)} has a value, but it is hidden because it is not a secret reference.`});return}function s(r){return r!==void 0&&r!==null&&r!==""}function v(r){return r.replace(/[_-]+/g," ").replace(/\b\w/g,(A)=>A.toUpperCase())}import{Small as Ar,Text as Ir,VStack as g}from"@contractspec/lib.design-system";import{Button as br}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as or,CardContent as dr,CardDescription as lr,CardFooter as tr,CardHeader as nr,CardTitle as xr}from"@contractspec/lib.ui-kit-web/ui/card";import{jsx as _,jsxs as R}from"react/jsx-runtime";function Er({title:r="Credential setup",description:A="Configure managed credentials or BYOK secret references without exposing raw secrets.",onModeChange:I,onTestConnection:N,onSave:b,isTesting:E,isSaving:W,...K}){let $=rr(K);return R(or,{children:[R(nr,{children:[_(xr,{children:r}),_(lr,{children:A})]}),_(dr,{children:R(g,{gap:"lg",align:"stretch",children:[_(n,{modes:$.modes,selectedMode:$.selectedMode,onModeChange:I}),R(g,{gap:"sm",align:"stretch",children:[_(Ar,{children:"Required fields"}),_(l,{fields:$.fields})]}),R(g,{gap:"sm",align:"stretch",children:[_(Ar,{children:"Environment aliases"}),_(a,{aliases:$.aliases,warnings:$.warnings})]})]})}),N||b?R(tr,{className:"flex flex-wrap justify-end gap-2",children:[N?_(br,{type:"button",variant:"outline",disabled:E,onClick:()=>void N(),children:_(Ir,{children:E?"Testing...":"Test connection"})}):null,b?_(br,{type:"button",disabled:W,onClick:()=>void b(),children:_(Ir,{children:W?"Saving...":"Save settings"})}):null]}):null]})}import{Button as c}from"@contractspec/lib.design-system";import{PlugZap as jr,ToggleRight as ar}from"lucide-react";import{jsx as O,jsxs as q}from"react/jsx-runtime";function yr({id:r,provider:A,name:I,category:N,enabled:b=!0,lastSyncAt:E,status:W="connected",onToggle:K,onConfigure:$}){return q("div",{className:"flex flex-col gap-4 rounded-2xl border border-border bg-card p-4 shadow-sm",children:[q("header",{className:"flex items-center justify-between",children:[q("div",{children:[O("p",{className:"font-semibold text-xl",children:I}),O("p",{className:"text-muted-foreground text-sm",children:A})]}),q(c,{variant:"outline",size:"sm",className:`inline-flex items-center gap-2 rounded-full border px-3 py-1 font-semibold text-xs uppercase tracking-wide ${W==="connected"?"text-emerald-500 bg-emerald-500/10 border-emerald-500/30":W==="error"?"text-red-500 bg-red-500/10 border-red-500/30":"text-gray-500 bg-gray-500/10 border-gray-500/30"}`,onPress:()=>K?.(r,!b),children:[O(ar,{className:"h-3.5 w-3.5"}),b?"Enabled":"Disabled"]})]}),q("div",{className:"text-muted-foreground text-sm",children:[N&&O("span",{className:"font-medium",children:N}),q("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-xs uppercase tracking-wide",children:[q("span",{className:"inline-flex items-center gap-1",children:[O(jr,{className:"h-3 w-3"}),W]}),q("span",{children:["Last sync:"," ",E?new Date(E).toLocaleString():"Not synced yet"]})]})]}),q("footer",{className:"flex items-center gap-2",children:[O(c,{className:"flex-1",onPress:()=>$?.(r),children:"Configure"}),O(c,{variant:"ghost",className:"flex-1",onPress:()=>K?.(r,!b),children:b?"Disconnect":"Connect"})]})]})}import{Input as er}from"@contractspec/lib.design-system";import{Select as ir,SelectContent as sr,SelectItem as Pr,SelectTrigger as r0,SelectValue as N0}from"@contractspec/lib.ui-kit-web/ui/select";import{Boxes as A0,Search as I0}from"lucide-react";import*as L from"react";import{jsx as z,jsxs as B}from"react/jsx-runtime";function yN({integrations:r,onToggle:A,onConfigure:I}){let[N,b]=L.useState(""),[E,W]=L.useState("all"),K=L.useMemo(()=>Array.from(new Set(r.map((P)=>P.category))),[r]),$=r.filter((P)=>{let X=P.name.toLowerCase().includes(N.toLowerCase())||P.provider.toLowerCase().includes(N.toLowerCase()),Q=E==="all"?!0:P.category===E;return X&&Q});return B("div",{className:"space-y-4 rounded-2xl border border-border bg-card p-4",children:[B("header",{className:"flex flex-wrap items-center justify-between gap-3",children:[B("div",{children:[z("p",{className:"font-semibold text-sm uppercase tracking-wide",children:"Integration marketplace"}),z("p",{className:"text-muted-foreground text-sm",children:"Connect AI providers, payments, analytics, and internal tools with BYOK controls."})]}),z(A0,{className:"h-5 w-5 text-muted-foreground"})]}),B("div",{className:"flex flex-wrap gap-3",children:[B("div",{className:"relative min-w-[200px] flex-1",children:[z(I0,{className:"pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),z(er,{type:"search","aria-label":"Search providers",className:"w-full py-2 pr-3 pl-9 text-sm",value:N,onChange:(P)=>b(P.target.value),placeholder:"Search providers"})]}),B(ir,{value:E,onValueChange:W,children:[z(r0,{className:"w-[200px]",children:z(N0,{placeholder:"All categories"})}),B(sr,{children:[z(Pr,{value:"all",children:"All categories"}),K.map((P)=>z(Pr,{value:P,children:P},P))]})]})]}),z("div",{className:"grid gap-4 md:grid-cols-2",children:$.length?$.map((P)=>z(yr,{id:P.id,provider:P.provider,name:P.name,category:P.category,enabled:P.enabled,status:P.status,lastSyncAt:P.lastSyncAt,onToggle:A,onConfigure:I},P.id)):z("div",{className:"rounded-xl border border-border border-dashed p-6 text-center text-muted-foreground text-sm md:col-span-2",children:"No integrations match your filters."})})]})}import{Box as b0,Input as E0,Small as y0,Text as M,VStack as S}from"@contractspec/lib.design-system";import{Label as Wr}from"@contractspec/lib.ui-kit-web/ui/label";import{Select as P0,SelectContent as W0,SelectItem as Kr,SelectTrigger as K0,SelectValue as $0}from"@contractspec/lib.ui-kit-web/ui/select";import{jsx as Z,jsxs as H}from"react/jsx-runtime";function $r({values:r,onSecretProviderChange:A,onChange:I}){return H(S,{gap:"md",align:"stretch",className:"rounded-xl border border-blue-500/20 bg-blue-500/5 p-4",children:[Z(y0,{children:"BYOK secret reference"}),H(b0,{className:"grid gap-4 md:grid-cols-2",children:[H(S,{gap:"sm",align:"stretch",children:[Z(Wr,{htmlFor:"secretProvider",children:Z(M,{children:"Secret provider"})}),H(P0,{value:r.secretProvider??"env",onValueChange:(N)=>A(N),children:[Z(K0,{id:"secretProvider",className:"w-full",children:Z($0,{})}),H(W0,{children:[Z(Kr,{value:"env",children:Z(M,{children:"Environment"})}),Z(Kr,{value:"gcp",children:Z(M,{children:"GCP Secret Manager"})})]})]})]}),H(S,{gap:"sm",align:"stretch",children:[Z(Wr,{htmlFor:"secretRef",children:Z(M,{children:"Secret reference"})}),Z(E0,{id:"secretRef",name:"secretRef",placeholder:r.secretProvider==="gcp"?"gcp://projects/.../secrets/...":"env://MY_TOKEN_ENV_VAR",value:r.secretRef??"",onChange:I})]})]})]})}import{Box as u,Button as Ur,HStack as o,Input as Xr,Muted as _r,Small as zr,Text as F,Textarea as U0,VStack as p}from"@contractspec/lib.design-system";import{Checkbox as X0}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{Label as h}from"@contractspec/lib.ui-kit-web/ui/label";import{Select as _0,SelectContent as z0,SelectItem as Zr,SelectTrigger as Z0,SelectValue as J0}from"@contractspec/lib.ui-kit-web/ui/select";import{Key as Q0,ShieldCheck as Y0,TestTube2 as q0}from"lucide-react";import*as Jr from"react";import{jsx as y,jsxs as U}from"react/jsx-runtime";function FN({provider:r,initialValues:A,onTestConnection:I,onSave:N,isSaving:b,isTesting:E,credentialSetup:W}){let[K,$]=Jr.useState({apiKey:A?.apiKey??"",secret:A?.secret??"",ownershipMode:A?.ownershipMode??"managed",secretProvider:A?.secretProvider??"env",secretRef:A?.secretRef??"",config:A?.config??`{
2
2
  "region": "eu-west-1"
3
- }`}),$=(f)=>{let X=f.target,{name:H,value:I}=X;Q((C)=>({...C,[H]:I}))};return p("div",{className:"space-y-4 rounded-2xl border border-border bg-card p-4",children:[p("header",{className:"flex flex-wrap items-center justify-between gap-3",children:[p("div",{children:[p("p",{className:"font-semibold text-sm uppercase tracking-wide",children:[m," credentials"]}),d("p",{className:"text-muted-foreground text-sm",children:"Store encrypted keys with BYOK and run safe connection tests."})]}),d(t,{className:"h-5 w-5 text-muted-foreground"})]}),d("div",{className:"grid gap-4 md:grid-cols-2",children:p("div",{className:"space-y-2",children:[d(D,{htmlFor:"ownershipMode",children:"Ownership"}),p(U,{value:P.ownershipMode??"managed",onValueChange:(f)=>Q((X)=>({...X,ownershipMode:f})),children:[d(K,{id:"ownershipMode",className:"w-full",children:d(k,{})}),p(_,{children:[d(G,{value:"managed",children:"Managed (store encrypted)"}),d(G,{value:"byok",children:"BYOK (store secret reference)"})]})]})]})}),p("div",{className:"grid gap-4 md:grid-cols-2",children:[p("div",{className:"space-y-1 text-sm",children:[d(D,{htmlFor:"apiKey",className:"font-semibold",children:"API key"}),p("div",{className:"relative",children:[d(i,{className:"pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),d(W,{type:"text",name:"apiKey",id:"apiKey",className:"w-full py-2 pr-3 pl-9",value:P.apiKey,onChange:$,required:!0})]})]}),p("div",{className:"space-y-1 text-sm",children:[d(D,{htmlFor:"secret",className:"font-semibold",children:"Secret"}),d(W,{type:"password",id:"secret",name:"secret",className:"w-full px-3 py-2",value:P.secret,onChange:$})]})]}),P.ownershipMode==="byok"?p("div",{className:"space-y-4 rounded-xl border border-blue-500/20 bg-blue-500/5 p-4",children:[d("p",{className:"font-semibold text-sm",children:"BYOK secret reference"}),p("div",{className:"grid gap-4 md:grid-cols-2",children:[p("div",{className:"space-y-2",children:[d(D,{htmlFor:"secretProvider",children:"Secret provider"}),p(U,{value:P.secretProvider??"env",onValueChange:(f)=>Q((X)=>({...X,secretProvider:f})),children:[d(K,{id:"secretProvider",className:"w-full",children:d(k,{})}),p(_,{children:[d(G,{value:"env",children:"Environment"}),d(G,{value:"gcp",children:"GCP Secret Manager"})]})]})]}),p("div",{className:"space-y-2",children:[d(D,{htmlFor:"secretRef",children:"Secret reference"}),d(W,{id:"secretRef",name:"secretRef",placeholder:P.secretProvider==="gcp"?"gcp://projects/.../secrets/...":"env://MY_TOKEN_ENV_VAR",value:P.secretRef??"",onChange:$})]})]})]}):p("div",{className:"flex items-center gap-3 rounded-xl border border-emerald-500/20 bg-emerald-500/5 p-4 text-sm",children:[d(x,{checked:!0,onCheckedChange:()=>{},"aria-label":"Managed"}),p("div",{children:[d("p",{className:"font-semibold",children:"Managed encryption enabled"}),d("p",{className:"text-muted-foreground",children:"Secrets are encrypted server-side for this tenant."})]})]}),p("div",{className:"space-y-1 text-sm",children:[d(D,{htmlFor:"config",className:"font-semibold",children:"Configuration (JSON)"}),d(n,{id:"config",name:"config",className:"min-h-[140px] w-full font-mono text-sm",value:P.config,onChange:$})]}),p("div",{className:"flex flex-wrap items-center gap-3",children:[p(R,{variant:"ghost",onPress:()=>y?.(P),disabled:J,children:[d(j,{className:"h-4 w-4"}),"Test connection"]}),d(R,{variant:"default",onPress:()=>Z?.(P),disabled:b,children:"Save settings"})]})]})}import{BookCopy as e,Plus as s,RefreshCcw as dd}from"lucide-react";import{jsx as z,jsxs as F}from"react/jsx-runtime";function Wd({sources:m,onRefresh:N,onDelete:y,onAdd:Z}){return F("div",{className:"space-y-4 rounded-2xl border border-border bg-card p-4",children:[F("header",{className:"flex flex-wrap items-center justify-between gap-3",children:[F("div",{children:[z("p",{className:"font-semibold text-sm uppercase tracking-wide",children:"Knowledge sources"}),z("p",{className:"text-muted-foreground text-sm",children:"Manage documentation, specs, and repos powering Studio RAG flows."})]}),F("button",{type:"button",className:"btn-primary inline-flex items-center gap-2",onClick:Z,children:[z(s,{className:"h-4 w-4"}),"Add source"]})]}),z("div",{className:"space-y-3",children:m.length?m.map((b)=>F("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-xl border border-border bg-background p-4",children:[F("div",{className:"flex items-center gap-3",children:[z(e,{className:"h-8 w-8 text-muted-foreground"}),F("div",{children:[z("p",{className:"font-semibold text-base",children:b.name}),z("p",{className:"text-muted-foreground text-sm",children:b.type}),z("p",{className:"text-muted-foreground text-xs",children:b.indexed?`Indexed ${b.lastIndexed?new Date(b.lastIndexed).toLocaleString():""}`:"Pending indexing"})]})]}),F("div",{className:"flex items-center gap-2",children:[F("button",{type:"button",className:"btn-ghost inline-flex items-center gap-1 text-sm",onClick:()=>N?.(b.id),children:[z(dd,{className:"h-3.5 w-3.5"}),"Reindex"]}),z("button",{type:"button",className:"btn-ghost text-destructive text-sm",onClick:()=>y?.(b.id),children:"Remove"})]})]},b.id)):z("div",{className:"rounded-xl border border-border border-dashed p-6 text-center text-muted-foreground text-sm",children:"No knowledge sources added yet."})})]})}export{Wd as KnowledgeSourceList,Ed as IntegrationSettings,qd as IntegrationMarketplace,A as IntegrationCard};
3
+ }`}),P=(X)=>{let{name:Q,value:Qr}=X.target;$((Yr)=>({...Yr,[Q]:Qr}))};return U(p,{align:"stretch",gap:"md",className:"rounded-2xl border border-border bg-card p-4",children:[U(o,{wrap:"wrap",justify:"between",gap:"md",children:[U(p,{gap:"sm",align:"start",children:[y(zr,{className:"uppercase tracking-wide",children:`${r} credentials`}),y(_r,{children:"Store encrypted keys with BYOK and run safe connection tests."})]}),y(Y0,{className:"h-5 w-5 text-muted-foreground"})]}),y(u,{className:"grid gap-4 md:grid-cols-2",children:U(p,{gap:"sm",align:"stretch",children:[y(h,{htmlFor:"ownershipMode",children:y(F,{children:"Ownership"})}),U(_0,{value:K.ownershipMode??"managed",onValueChange:(X)=>$((Q)=>({...Q,ownershipMode:X})),children:[y(Z0,{id:"ownershipMode",className:"w-full",children:y(J0,{})}),U(z0,{children:[y(Zr,{value:"managed",children:y(F,{children:"Managed (store encrypted)"})}),y(Zr,{value:"byok",children:y(F,{children:"BYOK (store secret reference)"})})]})]})]})}),W?y(Er,{...W,selectedMode:K.ownershipMode,title:`${r} setup`,onModeChange:(X)=>$((Q)=>({...Q,ownershipMode:X}))}):null,U(u,{className:"grid gap-4 md:grid-cols-2",children:[U(p,{gap:"sm",align:"stretch",children:[y(h,{htmlFor:"apiKey",className:"font-semibold",children:y(F,{children:"API key"})}),U(u,{className:"relative",children:[y(Q0,{className:"pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),y(Xr,{type:"text",name:"apiKey",id:"apiKey",className:"w-full py-2 pr-3 pl-9",value:K.apiKey,onChange:P,required:!0})]})]}),U(p,{gap:"sm",align:"stretch",children:[y(h,{htmlFor:"secret",className:"font-semibold",children:y(F,{children:"Secret"})}),y(Xr,{type:"password",id:"secret",name:"secret",className:"w-full px-3 py-2",value:K.secret,onChange:P})]})]}),K.ownershipMode==="byok"?y($r,{values:K,onChange:P,onSecretProviderChange:(X)=>$((Q)=>({...Q,secretProvider:X}))}):U(o,{align:"center",gap:"md",className:"rounded-xl border border-emerald-500/20 bg-emerald-500/5 p-4 text-sm",children:[y(X0,{checked:!0,onCheckedChange:()=>{},"aria-label":"Managed"}),U(p,{gap:"sm",align:"start",children:[y(zr,{children:"Managed encryption enabled"}),y(_r,{children:"Secrets are encrypted server-side for this tenant."})]})]}),U(p,{gap:"sm",align:"stretch",children:[y(h,{htmlFor:"config",className:"font-semibold",children:y(F,{children:"Configuration (JSON)"})}),y(U0,{id:"config",name:"config",className:"min-h-[140px] w-full font-mono text-sm",value:K.config,onChange:P})]}),U(o,{wrap:"wrap",gap:"md",align:"center",children:[U(Ur,{variant:"ghost",onPress:()=>I?.(K),disabled:E,children:[y(q0,{className:"h-4 w-4"}),y(F,{children:"Test connection"})]}),y(Ur,{variant:"default",onPress:()=>N?.(K),disabled:b,children:y(F,{children:"Save settings"})})]})]})}import{BookCopy as D0,Plus as F0,RefreshCcw as G0}from"lucide-react";import{jsx as J,jsxs as D}from"react/jsx-runtime";function pN({sources:r,onRefresh:A,onDelete:I,onAdd:N}){return D("div",{className:"space-y-4 rounded-2xl border border-border bg-card p-4",children:[D("header",{className:"flex flex-wrap items-center justify-between gap-3",children:[D("div",{children:[J("p",{className:"font-semibold text-sm uppercase tracking-wide",children:"Knowledge sources"}),J("p",{className:"text-muted-foreground text-sm",children:"Manage documentation, specs, and repos powering Studio RAG flows."})]}),D("button",{type:"button",className:"btn-primary inline-flex items-center gap-2",onClick:N,children:[J(F0,{className:"h-4 w-4"}),"Add source"]})]}),J("div",{className:"space-y-3",children:r.length?r.map((b)=>D("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-xl border border-border bg-background p-4",children:[D("div",{className:"flex items-center gap-3",children:[J(D0,{className:"h-8 w-8 text-muted-foreground"}),D("div",{children:[J("p",{className:"font-semibold text-base",children:b.name}),J("p",{className:"text-muted-foreground text-sm",children:b.type}),J("p",{className:"text-muted-foreground text-xs",children:b.indexed?`Indexed ${b.lastIndexed?new Date(b.lastIndexed).toLocaleString():""}`:"Pending indexing"})]})]}),D("div",{className:"flex items-center gap-2",children:[D("button",{type:"button",className:"btn-ghost inline-flex items-center gap-1 text-sm",onClick:()=>A?.(b.id),children:[J(G0,{className:"h-3.5 w-3.5"}),"Reindex"]}),J("button",{type:"button",className:"btn-ghost text-destructive text-sm",onClick:()=>I?.(b.id),children:"Remove"})]})]},b.id)):J("div",{className:"rounded-xl border border-border border-dashed p-6 text-center text-muted-foreground text-sm",children:"No knowledge sources added yet."})})]})}export{rr as buildIntegrationCredentialSetupModel,pN as KnowledgeSourceList,FN as IntegrationSettings,yN as IntegrationMarketplace,a as IntegrationEnvAliasPreview,Er as IntegrationCredentialSetupBlock,n as IntegrationCredentialModeTabs,l as IntegrationCredentialFieldList,yr as IntegrationCard};
@@ -1,3 +1,3 @@
1
- var K=Object.defineProperty;var B=(A)=>A;function k(A,z){this[A]=B.bind(null,z)}var b=(A,z)=>{for(var F in z)K(A,F,{get:z[F],enumerable:!0,configurable:!0,set:k.bind(z,F)})};var C=(A,z)=>()=>(A&&(z=A(A=0)),z);import{Button as P,Input as O,Textarea as m}from"@contractspec/lib.design-system";import{Checkbox as L}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{Label as E}from"@contractspec/lib.ui-kit-web/ui/label";import{Select as Q,SelectContent as R,SelectItem as M,SelectTrigger as U,SelectValue as W}from"@contractspec/lib.ui-kit-web/ui/select";import{Key as I,ShieldCheck as d,TestTube2 as T}from"lucide-react";import*as X from"react";import{jsx as f,jsxs as q}from"react/jsx-runtime";function r({provider:A,initialValues:z,onTestConnection:F,onSave:Y,isSaving:Z,isTesting:_}){let[D,N]=X.useState({apiKey:z?.apiKey??"",secret:z?.secret??"",ownershipMode:z?.ownershipMode??"managed",secretProvider:z?.secretProvider??"env",secretRef:z?.secretRef??"",config:z?.config??`{
1
+ var _r=Object.defineProperty;var Pr=(r)=>r;function Xr(r,I){this[r]=Pr.bind(null,I)}var II=(r,I)=>{for(var E in I)_r(r,E,{get:I[E],enumerable:!0,configurable:!0,set:Xr.bind(I,E)})};var AI=(r,I)=>()=>(r&&(I=r(r=0)),I);import{HStack as $r,Muted as F,Small as Or,Text as p,VStack as H}from"@contractspec/lib.design-system";import{Badge as zr}from"@contractspec/lib.ui-kit-web/ui/badge";import{jsx as z,jsxs as C}from"react/jsx-runtime";function c({fields:r,emptyLabel:I="No credential fields declared."}){if(r.length===0)return z(F,{children:I});return z(H,{gap:"sm",align:"stretch",children:r.map((E)=>C(H,{gap:"sm",align:"stretch",className:"rounded-xl border p-3 text-sm",children:[C($r,{justify:"between",align:"start",gap:"md",children:[C(H,{gap:"sm",align:"start",children:[z(Or,{children:E.label}),z(F,{className:"text-xs",children:E.kind})]}),z(zr,{variant:E.status==="missing"?"destructive":"secondary",children:z(p,{children:E.status})})]}),E.description?z(F,{children:E.description}):null,E.secretRef?z(F,{className:"font-mono text-xs",children:E.secretRef}):null,E.required?z(p,{className:"text-xs",children:"Required"}):null]},`${E.kind}:${E.key}`))})}import{HStack as Dr,Text as v}from"@contractspec/lib.design-system";import{Badge as Gr}from"@contractspec/lib.ui-kit-web/ui/badge";import{Button as Jr}from"@contractspec/lib.ui-kit-web/ui/button";import{jsx as B,jsxs as Qr}from"react/jsx-runtime";function S({modes:r,selectedMode:I,onModeChange:E}){return B(Dr,{wrap:"wrap",gap:"sm",role:"tablist","aria-label":"Credential mode",children:r.map((A)=>Qr(Jr,{type:"button",variant:A.mode===I?"default":"outline",disabled:!A.available,onClick:()=>E?.(A.mode),role:"tab","aria-selected":A.mode===I,children:[B(v,{children:A.label}),A.missingRequiredCount>0?B(Gr,{variant:"destructive",children:B(v,{children:`${A.missingRequiredCount} missing`})}):null]},A.mode))})}import{Code as Yr,HStack as Zr,Muted as L,Text as f,VStack as m}from"@contractspec/lib.design-system";import{Badge as qr}from"@contractspec/lib.ui-kit-web/ui/badge";import{jsx as J,jsxs as M}from"react/jsx-runtime";function u({aliases:r,warnings:I=[],emptyLabel:E="No env aliases declared."}){return M(m,{gap:"sm",align:"stretch",children:[r.length===0?J(L,{children:E}):null,r.map((A)=>M(m,{gap:"sm",align:"stretch",className:"rounded-xl border p-3 text-sm",children:[M(Zr,{wrap:"wrap",gap:"sm",align:"center",children:[J(Yr,{children:A.envName}),J(qr,{variant:A.public?"default":"secondary",children:J(f,{children:A.public?"public":"server"})})]}),J(L,{className:"text-xs",children:`${A.logicalKey} → ${A.targetLabel??A.targetId??"workspace root"}${A.framework?` · ${A.framework}`:""}${A.profile?` · ${A.profile}`:""}`}),A.warning?J(f,{className:"text-xs",children:A.warning}):null]},`${A.logicalKey}:${A.envName}:${A.targetId??"root"}`)),I.map((A)=>J(L,{children:`${A.level.toUpperCase()}: ${A.message}`},`${A.level}:${A.fieldKey??A.message}`))]})}function o(r,I,E,A){return[...Fr(r?.envAliases??[],E,A),...Br(I.environment,I,E,A)]}function Fr(r,I,E){return r.flatMap((A)=>{if(I.has(A.logicalKey)&&h(A.envVar,A.public))return E.push({level:"error",fieldKey:A.logicalKey,message:`Unsafe public alias was omitted for secret field ${A.logicalKey}.`}),[];return[{logicalKey:A.logicalKey,envName:A.envVar,targetId:A.targetId,public:h(A.envVar,A.public),warning:A.public?"Public client alias":void 0}]})}function Br(r,I,E,A){if(!r)return[];return Object.values(r?.variables??{}).flatMap((K)=>(K.aliases??[]).filter((W)=>Rr(W,r,I)).flatMap((W)=>{let U=h(W.name)||Hr(W.exposure);if(E.has(K.key)&&U)return A.push({level:"error",fieldKey:K.key,message:`Unsafe public alias was omitted for secret field ${K.key}.`}),[];return[{logicalKey:K.key,envName:W.name,targetId:W.targetId,targetLabel:br(r,W.targetId),profile:W.profile,framework:W.framework,public:U,warning:U?"Public client alias":void 0}]}))}function Rr(r,I,E){if(E.targetIds?.length&&r.targetId&&!E.targetIds.includes(r.targetId))return!1;if(E.profile&&r.profile&&r.profile!==E.profile)return!1;if(!E.targetIds?.length&&(r.targetId||r.profile||r.framework))return!1;if(r.framework&&r.targetId){let A=I.targets?.[r.targetId]?.framework;if(A&&A!==r.framework)return!1}return!0}function br(r,I){if(!I)return;let E=r.targets?.[I];return E?.packageName??E?.appId??E?.id??I}function Hr(r){return r==="public-client"||r==="native-client"}function h(r,I){return I===!0||r.startsWith("NEXT_PUBLIC_")||r.startsWith("EXPO_PUBLIC_")}import{getIntegrationCredentialManifest as Cr}from"@contractspec/lib.contracts-integrations";function d(r){let I=r.credentialManifest??Lr(r),E=Mr(r,I),A=r.selectedMode??E[0]??"managed",K=I.modes?.[A],W=new Set((K?.secretFields??[]).map((X)=>X.key)),U=[],_=wr(K,r,U),P=o(K,r,W,U),Y=E.map((X)=>hr(X,I.modes?.[X],r));return{selectedMode:A,modes:Y,fields:_,aliases:P,warnings:U}}function Lr(r){return r.integration?Cr(r.integration):{}}function Mr(r,I){return r.supportedModes??r.integration?.supportedModes??Object.keys(I.modes??{})}function hr(r,I,E){let A=[...I?.configFields??[],...I?.secretFields??[]],K=A.filter((W)=>W.required&&!n(W,E)).length;return{mode:r,label:r==="byok"?"BYOK":"Managed",available:Boolean(I),fieldCount:A.length,missingRequiredCount:K,docsUrl:I?.docsUrl,setupSteps:I?.setupSteps}}function wr(r,I,E){let A=(r?.configFields??[]).map((W)=>t("config",W,I,E)),K=(r?.secretFields??[]).map((W)=>t("secret",W,I,E));return[...A,...K]}function t(r,I,E,A){let K=n(I,E),W=r==="secret"?gr(I,E,A):void 0;if(r==="secret"&&I.required===!0&&!K)A.push({level:"warning",fieldKey:I.key,message:`${w(I.key)} is required for BYOK secret reference setup.`});return{kind:r,key:I.key,label:w(I.key),description:I.description,required:I.required===!0,status:K?"configured":I.required?"missing":"optional",secretRef:W,envVar:I.envVar}}function n(r,I){let E=I.configValues?.[r.key],A=I.secretRefs?.[r.key]??I.secretRefs?.[r.envVar??""];return j(E)||j(A)}function gr(r,I,E){let A=I.secretRefs?.[r.key]??I.secretRefs?.[r.envVar??""];if(!A)return;if(/^[a-z][a-z0-9+.-]*:\/\//i.test(A)||/^[A-Z][A-Z0-9_]*$/.test(A))return A;E.push({level:"warning",fieldKey:r.key,message:`${w(r.key)} has a value, but it is hidden because it is not a secret reference.`});return}function j(r){return r!==void 0&&r!==null&&r!==""}function w(r){return r.replace(/[_-]+/g," ").replace(/\b\w/g,(I)=>I.toUpperCase())}import{Small as x,Text as l,VStack as g}from"@contractspec/lib.design-system";import{Button as a}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as kr,CardContent as Tr,CardDescription as Vr,CardFooter as pr,CardHeader as cr,CardTitle as vr}from"@contractspec/lib.ui-kit-web/ui/card";import{jsx as $,jsxs as Z}from"react/jsx-runtime";function i({title:r="Credential setup",description:I="Configure managed credentials or BYOK secret references without exposing raw secrets.",onModeChange:E,onTestConnection:A,onSave:K,isTesting:W,isSaving:U,..._}){let P=d(_);return Z(kr,{children:[Z(cr,{children:[$(vr,{children:r}),$(Vr,{children:I})]}),$(Tr,{children:Z(g,{gap:"lg",align:"stretch",children:[$(S,{modes:P.modes,selectedMode:P.selectedMode,onModeChange:E}),Z(g,{gap:"sm",align:"stretch",children:[$(x,{children:"Required fields"}),$(c,{fields:P.fields})]}),Z(g,{gap:"sm",align:"stretch",children:[$(x,{children:"Environment aliases"}),$(u,{aliases:P.aliases,warnings:P.warnings})]})]})}),A||K?Z(pr,{className:"flex flex-wrap justify-end gap-2",children:[A?$(a,{type:"button",variant:"outline",disabled:W,onClick:()=>void A(),children:$(l,{children:W?"Testing...":"Test connection"})}):null,K?$(a,{type:"button",disabled:U,onClick:()=>void K(),children:$(l,{children:U?"Saving...":"Save settings"})}):null]}):null]})}import{Box as Sr,Input as fr,Small as mr,Text as R,VStack as k}from"@contractspec/lib.design-system";import{Label as e}from"@contractspec/lib.ui-kit-web/ui/label";import{Select as ur,SelectContent as or,SelectItem as s,SelectTrigger as tr,SelectValue as jr}from"@contractspec/lib.ui-kit-web/ui/select";import{jsx as O,jsxs as q}from"react/jsx-runtime";function rr({values:r,onSecretProviderChange:I,onChange:E}){return q(k,{gap:"md",align:"stretch",className:"rounded-xl border border-blue-500/20 bg-blue-500/5 p-4",children:[O(mr,{children:"BYOK secret reference"}),q(Sr,{className:"grid gap-4 md:grid-cols-2",children:[q(k,{gap:"sm",align:"stretch",children:[O(e,{htmlFor:"secretProvider",children:O(R,{children:"Secret provider"})}),q(ur,{value:r.secretProvider??"env",onValueChange:(A)=>I(A),children:[O(tr,{id:"secretProvider",className:"w-full",children:O(jr,{})}),q(or,{children:[O(s,{value:"env",children:O(R,{children:"Environment"})}),O(s,{value:"gcp",children:O(R,{children:"GCP Secret Manager"})})]})]})]}),q(k,{gap:"sm",align:"stretch",children:[O(e,{htmlFor:"secretRef",children:O(R,{children:"Secret reference"})}),O(fr,{id:"secretRef",name:"secretRef",placeholder:r.secretProvider==="gcp"?"gcp://projects/.../secrets/...":"env://MY_TOKEN_ENV_VAR",value:r.secretRef??"",onChange:E})]})]})]})}import{Box as T,Button as Ir,HStack as V,Input as Ar,Muted as Er,Small as yr,Text as D,Textarea as dr,VStack as Q}from"@contractspec/lib.design-system";import{Checkbox as nr}from"@contractspec/lib.ui-kit-web/ui/checkbox";import{Label as b}from"@contractspec/lib.ui-kit-web/ui/label";import{Select as xr,SelectContent as lr,SelectItem as Wr,SelectTrigger as ar,SelectValue as ir}from"@contractspec/lib.ui-kit-web/ui/select";import{Key as er,ShieldCheck as sr,TestTube2 as rI}from"lucide-react";import*as Kr from"react";import{jsx as y,jsxs as N}from"react/jsx-runtime";function uI({provider:r,initialValues:I,onTestConnection:E,onSave:A,isSaving:K,isTesting:W,credentialSetup:U}){let[_,P]=Kr.useState({apiKey:I?.apiKey??"",secret:I?.secret??"",ownershipMode:I?.ownershipMode??"managed",secretProvider:I?.secretProvider??"env",secretRef:I?.secretRef??"",config:I?.config??`{
2
2
  "region": "eu-west-1"
3
- }`}),J=(G)=>{let H=G.target,{name:$,value:w}=H;N((y)=>({...y,[$]:w}))};return q("div",{className:"space-y-4 rounded-2xl border border-border bg-card p-4",children:[q("header",{className:"flex flex-wrap items-center justify-between gap-3",children:[q("div",{children:[q("p",{className:"font-semibold text-sm uppercase tracking-wide",children:[A," credentials"]}),f("p",{className:"text-muted-foreground text-sm",children:"Store encrypted keys with BYOK and run safe connection tests."})]}),f(d,{className:"h-5 w-5 text-muted-foreground"})]}),f("div",{className:"grid gap-4 md:grid-cols-2",children:q("div",{className:"space-y-2",children:[f(E,{htmlFor:"ownershipMode",children:"Ownership"}),q(Q,{value:D.ownershipMode??"managed",onValueChange:(G)=>N((H)=>({...H,ownershipMode:G})),children:[f(U,{id:"ownershipMode",className:"w-full",children:f(W,{})}),q(R,{children:[f(M,{value:"managed",children:"Managed (store encrypted)"}),f(M,{value:"byok",children:"BYOK (store secret reference)"})]})]})]})}),q("div",{className:"grid gap-4 md:grid-cols-2",children:[q("div",{className:"space-y-1 text-sm",children:[f(E,{htmlFor:"apiKey",className:"font-semibold",children:"API key"}),q("div",{className:"relative",children:[f(I,{className:"pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),f(O,{type:"text",name:"apiKey",id:"apiKey",className:"w-full py-2 pr-3 pl-9",value:D.apiKey,onChange:J,required:!0})]})]}),q("div",{className:"space-y-1 text-sm",children:[f(E,{htmlFor:"secret",className:"font-semibold",children:"Secret"}),f(O,{type:"password",id:"secret",name:"secret",className:"w-full px-3 py-2",value:D.secret,onChange:J})]})]}),D.ownershipMode==="byok"?q("div",{className:"space-y-4 rounded-xl border border-blue-500/20 bg-blue-500/5 p-4",children:[f("p",{className:"font-semibold text-sm",children:"BYOK secret reference"}),q("div",{className:"grid gap-4 md:grid-cols-2",children:[q("div",{className:"space-y-2",children:[f(E,{htmlFor:"secretProvider",children:"Secret provider"}),q(Q,{value:D.secretProvider??"env",onValueChange:(G)=>N((H)=>({...H,secretProvider:G})),children:[f(U,{id:"secretProvider",className:"w-full",children:f(W,{})}),q(R,{children:[f(M,{value:"env",children:"Environment"}),f(M,{value:"gcp",children:"GCP Secret Manager"})]})]})]}),q("div",{className:"space-y-2",children:[f(E,{htmlFor:"secretRef",children:"Secret reference"}),f(O,{id:"secretRef",name:"secretRef",placeholder:D.secretProvider==="gcp"?"gcp://projects/.../secrets/...":"env://MY_TOKEN_ENV_VAR",value:D.secretRef??"",onChange:J})]})]})]}):q("div",{className:"flex items-center gap-3 rounded-xl border border-emerald-500/20 bg-emerald-500/5 p-4 text-sm",children:[f(L,{checked:!0,onCheckedChange:()=>{},"aria-label":"Managed"}),q("div",{children:[f("p",{className:"font-semibold",children:"Managed encryption enabled"}),f("p",{className:"text-muted-foreground",children:"Secrets are encrypted server-side for this tenant."})]})]}),q("div",{className:"space-y-1 text-sm",children:[f(E,{htmlFor:"config",className:"font-semibold",children:"Configuration (JSON)"}),f(m,{id:"config",name:"config",className:"min-h-[140px] w-full font-mono text-sm",value:D.config,onChange:J})]}),q("div",{className:"flex flex-wrap items-center gap-3",children:[q(P,{variant:"ghost",onPress:()=>F?.(D),disabled:_,children:[f(T,{className:"h-4 w-4"}),"Test connection"]}),f(P,{variant:"default",onPress:()=>Y?.(D),disabled:Z,children:"Save settings"})]})]})}export{r as IntegrationSettings};
3
+ }`}),Y=(X)=>{let{name:G,value:Nr}=X.target;P((Ur)=>({...Ur,[G]:Nr}))};return N(Q,{align:"stretch",gap:"md",className:"rounded-2xl border border-border bg-card p-4",children:[N(V,{wrap:"wrap",justify:"between",gap:"md",children:[N(Q,{gap:"sm",align:"start",children:[y(yr,{className:"uppercase tracking-wide",children:`${r} credentials`}),y(Er,{children:"Store encrypted keys with BYOK and run safe connection tests."})]}),y(sr,{className:"h-5 w-5 text-muted-foreground"})]}),y(T,{className:"grid gap-4 md:grid-cols-2",children:N(Q,{gap:"sm",align:"stretch",children:[y(b,{htmlFor:"ownershipMode",children:y(D,{children:"Ownership"})}),N(xr,{value:_.ownershipMode??"managed",onValueChange:(X)=>P((G)=>({...G,ownershipMode:X})),children:[y(ar,{id:"ownershipMode",className:"w-full",children:y(ir,{})}),N(lr,{children:[y(Wr,{value:"managed",children:y(D,{children:"Managed (store encrypted)"})}),y(Wr,{value:"byok",children:y(D,{children:"BYOK (store secret reference)"})})]})]})]})}),U?y(i,{...U,selectedMode:_.ownershipMode,title:`${r} setup`,onModeChange:(X)=>P((G)=>({...G,ownershipMode:X}))}):null,N(T,{className:"grid gap-4 md:grid-cols-2",children:[N(Q,{gap:"sm",align:"stretch",children:[y(b,{htmlFor:"apiKey",className:"font-semibold",children:y(D,{children:"API key"})}),N(T,{className:"relative",children:[y(er,{className:"pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),y(Ar,{type:"text",name:"apiKey",id:"apiKey",className:"w-full py-2 pr-3 pl-9",value:_.apiKey,onChange:Y,required:!0})]})]}),N(Q,{gap:"sm",align:"stretch",children:[y(b,{htmlFor:"secret",className:"font-semibold",children:y(D,{children:"Secret"})}),y(Ar,{type:"password",id:"secret",name:"secret",className:"w-full px-3 py-2",value:_.secret,onChange:Y})]})]}),_.ownershipMode==="byok"?y(rr,{values:_,onChange:Y,onSecretProviderChange:(X)=>P((G)=>({...G,secretProvider:X}))}):N(V,{align:"center",gap:"md",className:"rounded-xl border border-emerald-500/20 bg-emerald-500/5 p-4 text-sm",children:[y(nr,{checked:!0,onCheckedChange:()=>{},"aria-label":"Managed"}),N(Q,{gap:"sm",align:"start",children:[y(yr,{children:"Managed encryption enabled"}),y(Er,{children:"Secrets are encrypted server-side for this tenant."})]})]}),N(Q,{gap:"sm",align:"stretch",children:[y(b,{htmlFor:"config",className:"font-semibold",children:y(D,{children:"Configuration (JSON)"})}),y(dr,{id:"config",name:"config",className:"min-h-[140px] w-full font-mono text-sm",value:_.config,onChange:Y})]}),N(V,{wrap:"wrap",gap:"md",align:"center",children:[N(Ir,{variant:"ghost",onPress:()=>E?.(_),disabled:W,children:[y(rI,{className:"h-4 w-4"}),y(D,{children:"Test connection"})]}),y(Ir,{variant:"default",onPress:()=>A?.(_),disabled:K,children:y(D,{children:"Save settings"})})]})]})}export{uI as IntegrationSettings};
@@ -0,0 +1 @@
1
+ var J=Object.defineProperty;var K=(f)=>f;function M(f,y){this[f]=K.bind(null,y)}var Y=(f,y)=>{for(var A in y)J(f,A,{get:y[A],enumerable:!0,configurable:!0,set:M.bind(y,A)})};var Z=(f,y)=>()=>(f&&(y=f(f=0)),y);import{Box as N,Input as O,Small as Q,Text as D,VStack as E}from"@contractspec/lib.design-system";import{Label as F}from"@contractspec/lib.ui-kit-web/ui/label";import{Select as R,SelectContent as U,SelectItem as G,SelectTrigger as W,SelectValue as X}from"@contractspec/lib.ui-kit-web/ui/select";import{jsx as q,jsxs as z}from"react/jsx-runtime";function d({values:f,onSecretProviderChange:y,onChange:A}){return z(E,{gap:"md",align:"stretch",className:"rounded-xl border border-blue-500/20 bg-blue-500/5 p-4",children:[q(Q,{children:"BYOK secret reference"}),z(N,{className:"grid gap-4 md:grid-cols-2",children:[z(E,{gap:"sm",align:"stretch",children:[q(F,{htmlFor:"secretProvider",children:q(D,{children:"Secret provider"})}),z(R,{value:f.secretProvider??"env",onValueChange:(H)=>y(H),children:[q(W,{id:"secretProvider",className:"w-full",children:q(X,{})}),z(U,{children:[q(G,{value:"env",children:q(D,{children:"Environment"})}),q(G,{value:"gcp",children:q(D,{children:"GCP Secret Manager"})})]})]})]}),z(E,{gap:"sm",align:"stretch",children:[q(F,{htmlFor:"secretRef",children:q(D,{children:"Secret reference"})}),q(O,{id:"secretRef",name:"secretRef",placeholder:f.secretProvider==="gcp"?"gcp://projects/.../secrets/...":"env://MY_TOKEN_ENV_VAR",value:f.secretRef??"",onChange:A})]})]})]})}export{d as IntegrationSettingsSecretReference};