@mdxui/auth 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +128 -1
- package/dist/hooks/index.d.ts +91 -1
- package/dist/hooks/index.js +84 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/{index-Bl4BwORF.d.ts → index-DGthQxCM.d.ts} +104 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +859 -34
- package/dist/index.js.map +1 -1
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/index.js +69 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/types-8tixck1H.d.ts +123 -0
- package/dist/vault/index.d.ts +192 -0
- package/dist/vault/index.js +692 -0
- package/dist/vault/index.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/vault/secrets-manager/secrets-manager.tsx","../../src/vault/secrets-manager/secret-form.tsx","../../src/vault/vault-delete-dialog.tsx","../../src/vault/vault-empty-state.tsx","../../src/vault/vault-input-modal.tsx","../../src/vault/vault-item-card.tsx","../../src/vault/vault-list.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n\tBadge,\n\tButton,\n\tCard,\n\tCardContent,\n\tCardDescription,\n\tCardHeader,\n\tCardTitle,\n\tDialog,\n\tDialogContent,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n\tInput,\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from \"@mdxui/primitives\";\nimport { cn } from \"@mdxui/primitives/lib/utils\";\nimport {\n\tCopy,\n\tEdit,\n\tEye,\n\tEyeOff,\n\tFilter,\n\tPlus,\n\tSearch,\n\tTrash2,\n} from \"lucide-react\";\nimport * as React from \"react\";\nimport { toast } from \"sonner\";\nimport { SecretForm } from \"./secret-form\";\nimport type { Secret, SecretsManagerProps } from \"./types\";\n\n/**\n * SecretsManager Component\n *\n * A comprehensive UI for managing application secrets and environment variables.\n * Provides features for creating, editing, deleting, and viewing secrets with\n * support for multiple environments.\n *\n * @example\n * ```tsx\n * import { SecretsManager } from '@mdxui/auth'\n *\n * function VaultPage() {\n * return (\n * <SecretsManager\n * secrets={secrets}\n * environments={['development', 'staging', 'production']}\n * onCreate={handleCreate}\n * onUpdate={handleUpdate}\n * onDelete={handleDelete}\n * />\n * )\n * }\n * ```\n */\nexport function SecretsManager({\n\tsecrets: externalSecrets = [],\n\tenvironments = [\"development\", \"staging\", \"production\"],\n\tcurrentEnvironment = \"development\",\n\tonEnvironmentChange,\n\tonCreate,\n\tonUpdate,\n\tonDelete,\n\thideValues: initialHideValues = true,\n\teditable = true,\n\tclassName,\n}: SecretsManagerProps) {\n\tconst [localSecrets, setLocalSecrets] = React.useState<Secret[]>([]);\n\tconst [hideValues, setHideValues] = React.useState(initialHideValues);\n\tconst [searchQuery, setSearchQuery] = React.useState(\"\");\n\tconst [environment, setEnvironment] = React.useState(currentEnvironment);\n\tconst [visibleSecrets, setVisibleSecrets] = React.useState<Set<string>>(\n\t\tnew Set(),\n\t);\n\tconst [editingSecret, setEditingSecret] = React.useState<Secret | null>(null);\n\tconst [isCreateDialogOpen, setIsCreateDialogOpen] = React.useState(false);\n\tconst [isEditDialogOpen, setIsEditDialogOpen] = React.useState(false);\n\n\tconst secrets = externalSecrets.length > 0 ? externalSecrets : localSecrets;\n\n\tReact.useEffect(() => {\n\t\tsetEnvironment(currentEnvironment);\n\t}, [currentEnvironment]);\n\n\tconst filteredSecrets = React.useMemo(() => {\n\t\treturn secrets.filter((secret) => {\n\t\t\tconst matchesSearch = searchQuery\n\t\t\t\t? secret.key.toLowerCase().includes(searchQuery.toLowerCase()) ||\n\t\t\t\t\tsecret.description?.toLowerCase().includes(searchQuery.toLowerCase())\n\t\t\t\t: true;\n\n\t\t\tconst matchesEnvironment =\n\t\t\t\tenvironment === \"all\" || secret.environment === environment;\n\n\t\t\treturn matchesSearch && matchesEnvironment;\n\t\t});\n\t}, [secrets, searchQuery, environment]);\n\n\tconst handleEnvironmentChange = (newEnvironment: string) => {\n\t\tsetEnvironment(newEnvironment);\n\t\tonEnvironmentChange?.(newEnvironment);\n\t};\n\n\tconst handleCreate = async (\n\t\tsecretData: Omit<Secret, \"id\" | \"createdAt\" | \"updatedAt\">,\n\t) => {\n\t\tconst newSecret: Secret = {\n\t\t\t...secretData,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tcreatedAt: new Date(),\n\t\t\tupdatedAt: new Date(),\n\t\t};\n\n\t\ttry {\n\t\t\tawait onCreate?.(secretData);\n\n\t\t\tif (externalSecrets.length === 0) {\n\t\t\t\tsetLocalSecrets((prev) => [...prev, newSecret]);\n\t\t\t}\n\n\t\t\tsetIsCreateDialogOpen(false);\n\t\t\ttoast.success(\"Secret created successfully\");\n\t\t} catch (error) {\n\t\t\ttoast.error(\"Failed to create secret\");\n\t\t}\n\t};\n\n\tconst handleUpdate = async (id: string, updates: Partial<Secret>) => {\n\t\ttry {\n\t\t\tawait onUpdate?.(id, { ...updates, updatedAt: new Date() });\n\n\t\t\tif (externalSecrets.length === 0) {\n\t\t\t\tsetLocalSecrets((prev) =>\n\t\t\t\t\tprev.map((secret) =>\n\t\t\t\t\t\tsecret.id === id\n\t\t\t\t\t\t\t? { ...secret, ...updates, updatedAt: new Date() }\n\t\t\t\t\t\t\t: secret,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetIsEditDialogOpen(false);\n\t\t\tsetEditingSecret(null);\n\t\t\ttoast.success(\"Secret updated successfully\");\n\t\t} catch (error) {\n\t\t\ttoast.error(\"Failed to update secret\");\n\t\t}\n\t};\n\n\tconst handleDelete = async (id: string) => {\n\t\tif (!confirm(\"Are you sure you want to delete this secret?\")) return;\n\n\t\ttry {\n\t\t\tawait onDelete?.(id);\n\n\t\t\tif (externalSecrets.length === 0) {\n\t\t\t\tsetLocalSecrets((prev) => prev.filter((secret) => secret.id !== id));\n\t\t\t}\n\n\t\t\ttoast.success(\"Secret deleted\");\n\t\t} catch (error) {\n\t\t\ttoast.error(\"Failed to delete secret\");\n\t\t}\n\t};\n\n\tconst handleCopy = (value: string) => {\n\t\tnavigator.clipboard.writeText(value);\n\t\ttoast.success(\"Value copied to clipboard\");\n\t};\n\n\tconst toggleSecretVisibility = (id: string) => {\n\t\tsetVisibleSecrets((prev) => {\n\t\t\tconst next = new Set(prev);\n\t\t\tif (next.has(id)) {\n\t\t\t\tnext.delete(id);\n\t\t\t} else {\n\t\t\t\tnext.add(id);\n\t\t\t}\n\t\t\treturn next;\n\t\t});\n\t};\n\n\tconst toggleAllVisibility = () => {\n\t\tsetHideValues(!hideValues);\n\t\tif (!hideValues) {\n\t\t\tsetVisibleSecrets(new Set());\n\t\t}\n\t};\n\n\tconst isSecretVisible = (id: string) => {\n\t\treturn hideValues ? visibleSecrets.has(id) : true;\n\t};\n\n\treturn (\n\t\t<div className={cn(\"space-y-4\", className)}>\n\t\t\t<Card>\n\t\t\t\t<CardHeader>\n\t\t\t\t\t<div className=\"flex items-start justify-between\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<CardTitle>Environment Variables</CardTitle>\n\t\t\t\t\t\t\t<CardDescription>\n\t\t\t\t\t\t\t\tManage your application secrets and configuration\n\t\t\t\t\t\t\t</CardDescription>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{editable && (\n\t\t\t\t\t\t\t<Dialog\n\t\t\t\t\t\t\t\topen={isCreateDialogOpen}\n\t\t\t\t\t\t\t\tonOpenChange={setIsCreateDialogOpen}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DialogTrigger asChild>\n\t\t\t\t\t\t\t\t\t<Button>\n\t\t\t\t\t\t\t\t\t\t<Plus className=\"mr-2 size-4\" />\n\t\t\t\t\t\t\t\t\t\tAdd Secret\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</DialogTrigger>\n\t\t\t\t\t\t\t\t<DialogContent>\n\t\t\t\t\t\t\t\t\t<DialogHeader>\n\t\t\t\t\t\t\t\t\t\t<DialogTitle>Create New Secret</DialogTitle>\n\t\t\t\t\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t\t\t\t\t<SecretForm\n\t\t\t\t\t\t\t\t\t\tenvironment={environment}\n\t\t\t\t\t\t\t\t\t\tenvironments={environments}\n\t\t\t\t\t\t\t\t\t\tonSubmit={handleCreate}\n\t\t\t\t\t\t\t\t\t\tonCancel={() => setIsCreateDialogOpen(false)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</DialogContent>\n\t\t\t\t\t\t\t</Dialog>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</CardHeader>\n\t\t\t\t<CardContent className=\"space-y-4\">\n\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-2\">\n\t\t\t\t\t\t<div className=\"relative flex-1\">\n\t\t\t\t\t\t\t<Search className=\"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tplaceholder=\"Search secrets...\"\n\t\t\t\t\t\t\t\tvalue={searchQuery}\n\t\t\t\t\t\t\t\tonChange={(e) => setSearchQuery(e.target.value)}\n\t\t\t\t\t\t\t\tclassName=\"pl-9\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Select value={environment} onValueChange={handleEnvironmentChange}>\n\t\t\t\t\t\t\t<SelectTrigger className=\"w-[180px]\">\n\t\t\t\t\t\t\t\t<Filter className=\"mr-2 size-4\" />\n\t\t\t\t\t\t\t\t<SelectValue />\n\t\t\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t\t\t<SelectItem value=\"all\">All Environments</SelectItem>\n\t\t\t\t\t\t\t\t{environments.map((env) => (\n\t\t\t\t\t\t\t\t\t<SelectItem key={env} value={env}>\n\t\t\t\t\t\t\t\t\t\t{env.charAt(0).toUpperCase() + env.slice(1)}\n\t\t\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</SelectContent>\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" onClick={toggleAllVisibility}>\n\t\t\t\t\t\t\t{hideValues ? (\n\t\t\t\t\t\t\t\t<Eye className=\"size-4\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<EyeOff className=\"size-4\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{filteredSecrets.length > 0 ? (\n\t\t\t\t\t\t<div className=\"rounded-md border\">\n\t\t\t\t\t\t\t<Table>\n\t\t\t\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t\t<TableHead>Key</TableHead>\n\t\t\t\t\t\t\t\t\t\t<TableHead>Value</TableHead>\n\t\t\t\t\t\t\t\t\t\t<TableHead>Environment</TableHead>\n\t\t\t\t\t\t\t\t\t\t<TableHead>Description</TableHead>\n\t\t\t\t\t\t\t\t\t\t<TableHead className=\"w-[100px]\">Actions</TableHead>\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t</TableHeader>\n\t\t\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t\t\t{filteredSecrets.map((secret) => (\n\t\t\t\t\t\t\t\t\t\t<TableRow key={secret.id}>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<code className=\"rounded bg-muted px-2 py-1 font-mono text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{secret.key}\n\t\t\t\t\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<code className=\"flex-1 rounded bg-muted px-2 py-1 font-mono text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isSecretVisible(secret.id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? secret.value\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"\\u2022\".repeat(Math.min(secret.value.length, 20))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => toggleSecretVisibility(secret.id)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isSecretVisible(secret.id) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<EyeOff className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Eye className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleCopy(secret.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Copy className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<Badge variant=\"secondary\">{secret.environment}</Badge>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{secret.description || \"-\"}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t{editable && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetEditingSecret(secret);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetIsEditDialogOpen(true);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Edit className=\"size-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleDelete(secret.id)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Trash2 className=\"size-4 text-destructive\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</TableBody>\n\t\t\t\t\t\t\t</Table>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"flex h-32 items-center justify-center rounded-md border-2 border-dashed\">\n\t\t\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t\t\t{searchQuery\n\t\t\t\t\t\t\t\t\t? \"No secrets found matching your search\"\n\t\t\t\t\t\t\t\t\t: \"No secrets yet. Add your first secret to get started.\"}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\n\t\t\t{editingSecret && (\n\t\t\t\t<Dialog open={isEditDialogOpen} onOpenChange={setIsEditDialogOpen}>\n\t\t\t\t\t<DialogContent>\n\t\t\t\t\t\t<DialogHeader>\n\t\t\t\t\t\t\t<DialogTitle>Edit Secret</DialogTitle>\n\t\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t\t<SecretForm\n\t\t\t\t\t\t\tsecret={editingSecret}\n\t\t\t\t\t\t\tenvironment={environment}\n\t\t\t\t\t\t\tenvironments={environments}\n\t\t\t\t\t\t\tonSubmit={(data) => handleUpdate(editingSecret.id, data)}\n\t\t\t\t\t\t\tonCancel={() => {\n\t\t\t\t\t\t\t\tsetIsEditDialogOpen(false);\n\t\t\t\t\t\t\t\tsetEditingSecret(null);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</DialogContent>\n\t\t\t\t</Dialog>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport {\n\tButton,\n\tInput,\n\tLabel,\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n\tTextarea,\n} from \"@mdxui/primitives\";\nimport * as React from \"react\";\nimport type { Secret } from \"./types\";\n\ninterface SecretFormProps {\n\tsecret?: Secret;\n\tenvironment: string;\n\tenvironments: string[];\n\tonSubmit: (secret: Omit<Secret, \"id\" | \"createdAt\" | \"updatedAt\">) => void;\n\tonCancel: () => void;\n}\n\nexport function SecretForm({\n\tsecret,\n\tenvironment: defaultEnvironment,\n\tenvironments,\n\tonSubmit,\n\tonCancel,\n}: SecretFormProps) {\n\tconst [key, setKey] = React.useState(secret?.key || \"\");\n\tconst [value, setValue] = React.useState(secret?.value || \"\");\n\tconst [description, setDescription] = React.useState(\n\t\tsecret?.description || \"\",\n\t);\n\tconst [environment, setEnvironment] = React.useState(\n\t\tsecret?.environment || defaultEnvironment,\n\t);\n\n\tconst handleSubmit = (e: React.FormEvent) => {\n\t\te.preventDefault();\n\n\t\tif (!key.trim() || !value.trim()) return;\n\n\t\tonSubmit({\n\t\t\tkey: key.trim(),\n\t\t\tvalue: value.trim(),\n\t\t\tdescription: description.trim() || undefined,\n\t\t\tenvironment,\n\t\t});\n\t};\n\n\treturn (\n\t\t<form onSubmit={handleSubmit} className=\"space-y-4\">\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t<Label htmlFor=\"key\">Key *</Label>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"key\"\n\t\t\t\t\tplaceholder=\"DATABASE_URL\"\n\t\t\t\t\tvalue={key}\n\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\tsetKey(e.target.value.toUpperCase().replace(/[^A-Z0-9_]/g, \"_\"))\n\t\t\t\t\t}\n\t\t\t\t\trequired\n\t\t\t\t\tautoFocus\n\t\t\t\t/>\n\t\t\t\t<p className=\"text-xs text-muted-foreground\">\n\t\t\t\t\tUse UPPER_CASE with underscores (e.g., API_KEY, DATABASE_URL)\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t<Label htmlFor=\"value\">Value *</Label>\n\t\t\t\t<Textarea\n\t\t\t\t\tid=\"value\"\n\t\t\t\t\tplaceholder=\"Enter secret value\"\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => setValue(e.target.value)}\n\t\t\t\t\trows={3}\n\t\t\t\t\trequired\n\t\t\t\t\tclassName=\"font-mono\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t<Label htmlFor=\"environment\">Environment *</Label>\n\t\t\t\t<Select value={environment} onValueChange={setEnvironment}>\n\t\t\t\t\t<SelectTrigger id=\"environment\">\n\t\t\t\t\t\t<SelectValue />\n\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t{environments.map((env) => (\n\t\t\t\t\t\t\t<SelectItem key={env} value={env}>\n\t\t\t\t\t\t\t\t{env.charAt(0).toUpperCase() + env.slice(1)}\n\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SelectContent>\n\t\t\t\t</Select>\n\t\t\t</div>\n\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t<Label htmlFor=\"description\">Description</Label>\n\t\t\t\t<Textarea\n\t\t\t\t\tid=\"description\"\n\t\t\t\t\tplaceholder=\"Optional description of this secret\"\n\t\t\t\t\tvalue={description}\n\t\t\t\t\tonChange={(e) => setDescription(e.target.value)}\n\t\t\t\t\trows={2}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div className=\"flex justify-end gap-2\">\n\t\t\t\t<Button type=\"button\" variant=\"outline\" onClick={onCancel}>\n\t\t\t\t\tCancel\n\t\t\t\t</Button>\n\t\t\t\t<Button type=\"submit\" disabled={!key.trim() || !value.trim()}>\n\t\t\t\t\t{secret ? \"Update\" : \"Create\"} Secret\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</form>\n\t);\n}\n","'use client'\n\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@mdxui/primitives'\nimport type { VaultDeleteDialogProps } from './types'\n\n/**\n * Confirmation dialog for deleting vault credentials\n *\n * @example\n * ```tsx\n * <VaultDeleteDialog\n * isOpen={deleteDialogOpen}\n * onClose={() => setDeleteDialogOpen(false)}\n * itemName=\"OpenAI\"\n * onConfirm={handleDelete}\n * />\n * ```\n */\nexport function VaultDeleteDialog({ isOpen, onClose, itemName, onConfirm }: VaultDeleteDialogProps) {\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete Credentials</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete credentials for {itemName}? This action cannot be undone.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"destructive\" onClick={onConfirm}>\n Delete\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n","'use client'\n\nimport { Button } from '@mdxui/primitives'\nimport { Lock } from 'lucide-react'\nimport type { VaultEmptyStateProps } from './types'\n\n/**\n * Empty state component shown when the vault has no credentials\n *\n * @example\n * ```tsx\n * <VaultEmptyState onAddCredential={() => setAddModalOpen(true)} />\n * ```\n */\nexport function VaultEmptyState({ onAddCredential }: VaultEmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center rounded-md border border-dashed py-24 px-4 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted mb-4\">\n <Lock className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <h3 className=\"text-lg font-semibold mb-2\">No saved credentials</h3>\n <p className=\"text-sm text-muted-foreground mb-6 max-w-md\">\n Add API keys and account credentials for your agents to use securely.\n </p>\n <Button onClick={onAddCredential}>Add Credential</Button>\n </div>\n )\n}\n","'use client'\n\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n} from '@mdxui/primitives'\nimport { Key } from 'lucide-react'\nimport { useState } from 'react'\nimport type { VaultInputModalProps } from './types'\n\n/**\n * Modal for entering or rotating vault credentials\n *\n * Renders input fields based on the integration's field configuration.\n * Supports both creating new credentials and rotating existing ones.\n *\n * @example\n * ```tsx\n * <VaultInputModal\n * isOpen={modalOpen}\n * onClose={() => setModalOpen(false)}\n * mode=\"create\"\n * integration={{\n * id: 'openai',\n * name: 'OpenAI',\n * logoUrl: '...',\n * fields: [{ key: 'api_key', label: 'API Key', type: 'password', required: true }]\n * }}\n * onSave={(credentials) => saveCredentials(credentials)}\n * />\n * ```\n */\nexport function VaultInputModal({\n isOpen,\n onClose,\n mode,\n integration,\n onSave,\n}: VaultInputModalProps) {\n const [values, setValues] = useState<Record<string, string>>({})\n const [loading, setLoading] = useState(false)\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true)\n try {\n await onSave(values)\n setValues({})\n onClose()\n } catch (error) {\n console.error('Failed to save credentials:', error)\n } finally {\n setLoading(false)\n }\n }\n\n const handleClose = () => {\n setValues({})\n onClose()\n }\n\n if (!integration) return null\n\n const isValid = integration.fields.filter((f) => f.required).every((f) => values[f.key]?.trim())\n\n return (\n <Dialog open={isOpen} onOpenChange={handleClose}>\n <DialogContent>\n <DialogHeader>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-md bg-white overflow-hidden p-1 border border-border\">\n {integration.logoUrl ? (\n <img\n src={integration.logoUrl}\n alt={integration.name}\n width={32}\n height={32}\n className=\"h-full w-full object-contain rounded-sm\"\n />\n ) : (\n <Key className=\"h-5 w-5 text-muted-foreground\" />\n )}\n </div>\n <DialogTitle>\n {mode === 'create' ? 'Add' : 'Rotate'} {integration.name} Credentials\n </DialogTitle>\n </div>\n </DialogHeader>\n <form onSubmit={handleSubmit}>\n <div className=\"grid gap-4 py-4\">\n {integration.fields.map((field) => (\n <div key={field.key} className=\"grid gap-2\">\n <Label htmlFor={field.key}>\n {field.label}\n {field.required && <span className=\"text-destructive\">*</span>}\n </Label>\n <Input\n id={field.key}\n type={field.type}\n placeholder={field.placeholder}\n value={values[field.key] || ''}\n onChange={(e) =>\n setValues((prev) => ({\n ...prev,\n [field.key]: e.target.value,\n }))\n }\n required={field.required}\n />\n </div>\n ))}\n </div>\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={handleClose}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={loading || !isValid}>\n {loading ? 'Saving...' : 'Save'}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","'use client'\n\nimport {\n Button,\n Card,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@mdxui/primitives'\nimport { Key, MoreVertical } from 'lucide-react'\nimport type { VaultItemCardProps } from './types'\n\nfunction formatDate(date: Date): string {\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n}\n\n/**\n * Card component displaying a single vault credential item\n *\n * Shows the integration logo/icon, name, and creation/rotation date.\n * Provides a dropdown menu with rotate and delete actions.\n *\n * @example\n * ```tsx\n * <VaultItemCard\n * id=\"1\"\n * name=\"OpenAI\"\n * logoUrl=\"https://...\"\n * createdAt={new Date('2024-01-01')}\n * updatedAt={new Date('2024-06-01')}\n * onRotate={(id) => console.log('Rotate', id)}\n * onDelete={(id) => console.log('Delete', id)}\n * />\n * ```\n */\nexport function VaultItemCard({\n id,\n name,\n logoUrl,\n createdAt,\n updatedAt,\n onRotate,\n onDelete,\n}: VaultItemCardProps) {\n const wasRotated = updatedAt.getTime() !== createdAt.getTime()\n\n return (\n <Card noPadding className=\"p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-md bg-white overflow-hidden p-1 border border-border\">\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={name}\n width={32}\n height={32}\n className=\"h-full w-full object-contain rounded-sm\"\n />\n ) : (\n <Key className=\"h-5 w-5 text-muted-foreground\" />\n )}\n </div>\n <div>\n <h4 className=\"text-sm font-medium\">{name}</h4>\n <p className=\"text-xs text-muted-foreground\">\n {wasRotated ? `Rotated: ${formatDate(updatedAt)}` : `Created: ${formatDate(createdAt)}`}\n </p>\n </div>\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\">\n <MoreVertical className=\"h-4 w-4\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => onRotate(id)}>Rotate</DropdownMenuItem>\n <DropdownMenuItem\n className=\"text-destructive focus:text-destructive\"\n onClick={() => onDelete(id)}\n >\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </Card>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport type { VaultItem, VaultListProps, VaultField } from './types'\nimport { VaultDeleteDialog } from './vault-delete-dialog'\nimport { VaultEmptyState } from './vault-empty-state'\nimport { VaultInputModal } from './vault-input-modal'\nimport { VaultItemCard } from './vault-item-card'\n\n/**\n * Default fields for unknown integrations\n */\nconst defaultFields: VaultField[] = [\n { key: 'api_key', label: 'API Key', type: 'password', required: true }\n]\n\n/**\n * Main vault list component that displays stored credentials\n *\n * Includes the list view, delete confirmation dialog, and credential\n * input modal for rotating credentials. Shows an empty state when\n * no credentials are stored.\n *\n * @example\n * ```tsx\n * <VaultList\n * items={vaultItems}\n * onRotate={async (id, creds) => await rotateCredentials(id, creds)}\n * onDelete={async (id) => await deleteCredentials(id)}\n * onOpenAddModal={() => setAddModalOpen(true)}\n * getIntegrationFields={(id) => integrationFields[id]}\n * />\n * ```\n */\nexport function VaultList({\n items,\n onRotate,\n onDelete,\n onOpenAddModal,\n getIntegrationFields,\n}: VaultListProps) {\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n const [inputModalOpen, setInputModalOpen] = useState(false)\n const [selectedItem, setSelectedItem] = useState<VaultItem | null>(null)\n const [modalMode, setModalMode] = useState<'create' | 'rotate'>('create')\n\n const handleRotate = (id: string) => {\n const item = items.find((i) => i.id === id)\n if (!item) return\n\n setSelectedItem(item)\n setModalMode('rotate')\n setInputModalOpen(true)\n }\n\n const handleDeleteClick = (id: string) => {\n const item = items.find((i) => i.id === id)\n if (!item) return\n\n setSelectedItem(item)\n setDeleteDialogOpen(true)\n }\n\n const handleConfirmDelete = async () => {\n if (!selectedItem) return\n\n await onDelete(selectedItem.id)\n setDeleteDialogOpen(false)\n setSelectedItem(null)\n }\n\n const handleSave = async (credentials: Record<string, string>) => {\n if (modalMode === 'rotate' && selectedItem) {\n await onRotate(selectedItem.id, credentials)\n }\n setInputModalOpen(false)\n setSelectedItem(null)\n }\n\n const getIntegrationForModal = () => {\n if (!selectedItem) return undefined\n\n const fields = getIntegrationFields\n ? getIntegrationFields(selectedItem.integrationId)\n : defaultFields\n\n return {\n id: selectedItem.integrationId,\n name: selectedItem.name,\n logoUrl: selectedItem.logoUrl,\n fields,\n }\n }\n\n if (items.length === 0) {\n return <VaultEmptyState onAddCredential={onOpenAddModal} />\n }\n\n return (\n <>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {items.map((item) => (\n <VaultItemCard\n key={item.id}\n id={item.id}\n name={item.name}\n logoUrl={item.logoUrl}\n createdAt={item.createdAt}\n updatedAt={item.updatedAt}\n onRotate={handleRotate}\n onDelete={handleDeleteClick}\n />\n ))}\n </div>\n\n <VaultDeleteDialog\n isOpen={deleteDialogOpen}\n onClose={() => {\n setDeleteDialogOpen(false)\n setSelectedItem(null)\n }}\n itemName={selectedItem?.name || ''}\n onConfirm={handleConfirmDelete}\n />\n\n <VaultInputModal\n isOpen={inputModalOpen}\n onClose={() => {\n setInputModalOpen(false)\n setSelectedItem(null)\n }}\n mode={modalMode}\n integration={getIntegrationForModal()}\n onSave={handleSave}\n />\n </>\n )\n}\n"],"mappings":"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","names":["Button","Input","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","React","jsx","jsxs","Button","Input","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","Dialog","DialogContent","DialogHeader","DialogTitle","jsx","jsxs","Button","jsx","jsxs","Button","Dialog","DialogContent","DialogFooter","DialogHeader","DialogTitle","Input","Label","useState","jsx","jsxs","Button","Card","Key","jsx","jsxs","useState","jsx","jsxs","useState"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mdxui/auth",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Authentication components and WorkOS AuthKit wrappers for mdxui",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -55,6 +55,10 @@
|
|
|
55
55
|
"./schemas": {
|
|
56
56
|
"types": "./dist/schemas/index.d.ts",
|
|
57
57
|
"import": "./dist/schemas/index.js"
|
|
58
|
+
},
|
|
59
|
+
"./vault": {
|
|
60
|
+
"types": "./dist/vault/index.d.ts",
|
|
61
|
+
"import": "./dist/vault/index.js"
|
|
58
62
|
}
|
|
59
63
|
},
|
|
60
64
|
"files": [
|
|
@@ -76,8 +80,11 @@
|
|
|
76
80
|
"dependencies": {
|
|
77
81
|
"@workos-inc/authkit-react": "^0.16.0",
|
|
78
82
|
"@workos-inc/widgets": "^1.7.2",
|
|
83
|
+
"lucide-react": "^0.511.0",
|
|
84
|
+
"sonner": "^1.5.0",
|
|
79
85
|
"zod": "^4.3.5",
|
|
80
|
-
"mdxui": "6.0.0"
|
|
86
|
+
"mdxui": "6.0.0",
|
|
87
|
+
"@mdxui/primitives": "6.0.0"
|
|
81
88
|
},
|
|
82
89
|
"peerDependencies": {
|
|
83
90
|
"react": "^18.0.0 || ^19.0.0",
|