@domainkit/react 0.7.0 → 0.8.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.
- package/README.md +1 -1
- package/dist/index.mjs +23 -43
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ export function DomainSetup() {
|
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
`Domain.Flow` handles connection, plan review, apply, verification, cleanup, and removal of the
|
|
33
|
-
domain
|
|
33
|
+
domain attachment. Your app still owns authentication, authorization, saved attempts, provider
|
|
34
34
|
credentials, and the server-side `Transport` implementation.
|
|
35
35
|
|
|
36
36
|
## Choose the parts you need
|
package/dist/index.mjs
CHANGED
|
@@ -628,7 +628,7 @@ function useModel$2(domain) {
|
|
|
628
628
|
attachmentId: snapshot.attachment.id,
|
|
629
629
|
preserveDns: true
|
|
630
630
|
}), (result) => {
|
|
631
|
-
const detached = Transport.Disconnected
|
|
631
|
+
const detached = Transport.Disconnected({
|
|
632
632
|
domain: snapshot.attachment.domain,
|
|
633
633
|
provider: snapshot.provider,
|
|
634
634
|
reusableConnections: []
|
|
@@ -1894,14 +1894,10 @@ var testing_exports = /* @__PURE__ */ __exportAll({
|
|
|
1894
1894
|
target: () => target
|
|
1895
1895
|
});
|
|
1896
1896
|
const provider = (overrides = {}) => ({
|
|
1897
|
-
authentication: [{
|
|
1898
|
-
_tag: "OAuth",
|
|
1899
|
-
label: "Continue with OAuth"
|
|
1900
|
-
}, {
|
|
1901
|
-
_tag: "Token",
|
|
1897
|
+
authentication: [Transport.AuthenticationMethod.OAuth({ label: "Continue with OAuth" }), Transport.AuthenticationMethod.Token({
|
|
1902
1898
|
label: "Connect with token",
|
|
1903
1899
|
placeholder: "Paste API token"
|
|
1904
|
-
}],
|
|
1900
|
+
})],
|
|
1905
1901
|
id: "cloudflare",
|
|
1906
1902
|
name: "Cloudflare",
|
|
1907
1903
|
...overrides
|
|
@@ -1930,8 +1926,7 @@ const attachment = (overrides = {}) => ({
|
|
|
1930
1926
|
target: target(),
|
|
1931
1927
|
...overrides
|
|
1932
1928
|
});
|
|
1933
|
-
const connected = (overrides = {}) => ({
|
|
1934
|
-
_tag: "Connected",
|
|
1929
|
+
const connected = (overrides = {}) => Transport.Connected({
|
|
1935
1930
|
attachment: attachment(),
|
|
1936
1931
|
connection: connection(),
|
|
1937
1932
|
provider: provider(),
|
|
@@ -1954,31 +1949,28 @@ function makeFakeTransport(options) {
|
|
|
1954
1949
|
cleanup: {
|
|
1955
1950
|
apply: async (input) => {
|
|
1956
1951
|
calls.cleanupApply.push(input);
|
|
1957
|
-
return options.cleanupApply ?? {
|
|
1958
|
-
_tag: "Cleaned",
|
|
1952
|
+
return options.cleanupApply ?? Transport.CleanupResult.Cleaned({
|
|
1959
1953
|
operationId: "cleanup-operation-1",
|
|
1960
1954
|
results: []
|
|
1961
|
-
};
|
|
1955
|
+
});
|
|
1962
1956
|
},
|
|
1963
1957
|
plan: async (input) => {
|
|
1964
1958
|
calls.cleanupPlan.push(input);
|
|
1965
|
-
return options.cleanupPlan ?? {
|
|
1966
|
-
_tag: "CleanupPlan",
|
|
1959
|
+
return options.cleanupPlan ?? Transport.CleanupPlan({
|
|
1967
1960
|
digest: "cleanup-digest-1",
|
|
1968
1961
|
expiresAt: "2099-01-01T00:00:00.000Z",
|
|
1969
1962
|
operations: []
|
|
1970
|
-
};
|
|
1963
|
+
});
|
|
1971
1964
|
}
|
|
1972
1965
|
},
|
|
1973
1966
|
connection: {
|
|
1974
1967
|
connect: async (input) => {
|
|
1975
1968
|
calls.connect.push(input);
|
|
1976
|
-
return options.connect ?? {
|
|
1977
|
-
_tag: "Connected",
|
|
1969
|
+
return options.connect ?? Transport.Connected({
|
|
1978
1970
|
attachment: attachment({ domain: DomainName.parse(input.domain) }),
|
|
1979
1971
|
connection: connection(),
|
|
1980
1972
|
provider: provider()
|
|
1981
|
-
};
|
|
1973
|
+
});
|
|
1982
1974
|
},
|
|
1983
1975
|
inspect: async (input) => {
|
|
1984
1976
|
calls.inspect.push(input);
|
|
@@ -1993,8 +1985,7 @@ function makeFakeTransport(options) {
|
|
|
1993
1985
|
},
|
|
1994
1986
|
attach: async (input) => {
|
|
1995
1987
|
calls.attach.push(input);
|
|
1996
|
-
return options.attach ?? {
|
|
1997
|
-
_tag: "Connected",
|
|
1988
|
+
return options.attach ?? Transport.Connected({
|
|
1998
1989
|
attachment: attachment({
|
|
1999
1990
|
connectionId: input.connectionId,
|
|
2000
1991
|
domain: DomainName.parse(input.domain),
|
|
@@ -2002,55 +1993,44 @@ function makeFakeTransport(options) {
|
|
|
2002
1993
|
}),
|
|
2003
1994
|
connection: connection({ id: input.connectionId }),
|
|
2004
1995
|
provider: provider()
|
|
2005
|
-
};
|
|
1996
|
+
});
|
|
2006
1997
|
},
|
|
2007
1998
|
detach: async (input) => {
|
|
2008
1999
|
calls.detach.push(input);
|
|
2009
|
-
return options.detach ?? {
|
|
2010
|
-
_tag: "Detached",
|
|
2000
|
+
return options.detach ?? Transport.DetachResult({
|
|
2011
2001
|
attachment: attachment(),
|
|
2012
2002
|
connection: connection(),
|
|
2013
2003
|
remainingAttachments: 0
|
|
2014
|
-
};
|
|
2004
|
+
});
|
|
2015
2005
|
}
|
|
2016
2006
|
},
|
|
2017
2007
|
provisioning: {
|
|
2018
2008
|
apply: async (input) => {
|
|
2019
2009
|
calls.apply.push(input);
|
|
2020
|
-
return options.apply ?? {
|
|
2021
|
-
_tag: "Applied",
|
|
2010
|
+
return options.apply ?? Transport.ApplyResult.Applied({
|
|
2022
2011
|
operationId: "apply-operation-1",
|
|
2023
2012
|
receiptId: "receipt-1",
|
|
2024
2013
|
results: []
|
|
2025
|
-
};
|
|
2014
|
+
});
|
|
2026
2015
|
},
|
|
2027
2016
|
plan: async (input) => {
|
|
2028
2017
|
calls.plan.push(input);
|
|
2029
|
-
return options.plan ?? {
|
|
2030
|
-
_tag: "Plan",
|
|
2018
|
+
return options.plan ?? Transport.ProvisioningPlan({
|
|
2031
2019
|
digest: "plan-digest-1",
|
|
2032
2020
|
expiresAt: "2099-01-01T00:00:00.000Z",
|
|
2033
|
-
operations: input.records.map((record) => ({
|
|
2034
|
-
_tag: "Create",
|
|
2021
|
+
operations: input.records.map((record) => Transport.PlanOperation.Create({
|
|
2035
2022
|
id: `create-${record.id}`,
|
|
2036
2023
|
record
|
|
2037
2024
|
}))
|
|
2038
|
-
};
|
|
2025
|
+
});
|
|
2039
2026
|
}
|
|
2040
2027
|
},
|
|
2041
2028
|
verification: { observe: async (input) => {
|
|
2042
2029
|
calls.observe.push(input);
|
|
2043
|
-
return options.observe ?? {
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
recordId: record.id
|
|
2048
|
-
})) : [],
|
|
2049
|
-
publicDns: input.sources.publicDns ? input.records.map((record) => ({
|
|
2050
|
-
_tag: "Found",
|
|
2051
|
-
recordId: record.id
|
|
2052
|
-
})) : []
|
|
2053
|
-
};
|
|
2030
|
+
return options.observe ?? Transport.Observation({
|
|
2031
|
+
provider: input.sources.provider ? input.records.map((record) => Transport.ObservationEvidence.Found({ recordId: record.id })) : [],
|
|
2032
|
+
publicDns: input.sources.publicDns ? input.records.map((record) => Transport.ObservationEvidence.Found({ recordId: record.id })) : []
|
|
2033
|
+
});
|
|
2054
2034
|
} }
|
|
2055
2035
|
};
|
|
2056
2036
|
return Object.assign(Transport.layerFromAsync(transport), transport, { calls });
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["Root","mergeMessages","leafPart","Value","Priority","Root","State","Command","useModel","LifecycleEvent","useController","Root","Outcome","Dialog","BaseAlertDialog","Operations.List","Flow","State","Command","useModel","LifecycleEvent","useController","Root","Status","BaseDialog","Provider.Mark","Dialog","Flow","RetryAction","Card","BaseAlertDialog","Status","Root","State","Command","useModel","LifecycleEvent","useController","Root","Outcome","Dialog","BaseDialog","Operations.List","Flow","Records.Table","_exhaustive","RecordStatus","BasePopover","Connection.useController","Connection.Root","Records.Table","Verification.Status","Connection.Card","Connection.CardIdentity","Provider.Mark","Connection.Status","Connection.CardActions","Connection.RetryAction","BaseDialog","Connection.ConnectTrigger","Connection.Dialog","Provisioning.Flow","Cleanup.useController","BaseMenu","Cleanup.Dialog","Connection.DisconnectDialog"],"sources":["../src/atom.ts","../src/composition.tsx","../src/icons.tsx","../src/messages.ts","../src/theme.ts","../src/domain-kit.tsx","../src/lifecycle.ts","../src/operations.tsx","../src/cleanup.tsx","../src/provider.tsx","../src/connection.tsx","../src/records.tsx","../src/provisioning.tsx","../src/verification.tsx","../src/domain.tsx","../src/testing.ts"],"sourcesContent":["import * as Data from \"effect/Data\";\nimport type * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { Transport } from \"domainkit\";\n\nexport type Runtime = Atom.AtomRuntime<Transport.Service>;\n\nexport type Failure = Data.TaggedEnum<{\n Failure: {\n readonly message: string;\n readonly operation: string;\n readonly retry: Transport.Failure[\"retry\"];\n };\n}>;\nexport const Failure = Data.taggedEnum<Failure>();\n\nexport const failureFromError = (error: Transport.Failure): Failure =>\n Failure.Failure({\n message: error.message,\n operation: error.operation,\n retry: error.retry,\n });\n\nexport const failureFromDefect = (operation: string, message: string): Failure =>\n Failure.Failure({ message, operation, retry: \"safe\" });\n\nexport const recordsIdentity = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n JSON.stringify(\n records.map(({ id, name, priority, type, value }) => ({ id, name, priority, type, value })),\n );\n","import { useRender } from \"@base-ui/react/use-render\";\nimport type { CSSProperties, ElementType, ReactElement } from \"react\";\n\nexport type ClassName<State> = string | ((state: State) => string | undefined);\nexport type Style<State> = CSSProperties | ((state: State) => CSSProperties | undefined);\n\nexport type PartProps<Tag extends ElementType, State extends Record<string, unknown>> = Omit<\n useRender.ElementProps<Tag>,\n \"className\" | \"style\"\n> & {\n readonly className?: ClassName<State>;\n readonly render?: useRender.RenderProp<State>;\n readonly style?: Style<State>;\n};\n\nexport function usePart<\n Tag extends keyof React.JSX.IntrinsicElements,\n State extends Record<string, unknown>,\n>(\n defaultTagName: Tag,\n componentProps: PartProps<Tag, State>,\n state: State,\n internalProps: Record<string, unknown>,\n): ReactElement {\n const { className, render, style, ...externalProps } = componentProps;\n const parameters: useRender.Parameters<State, Element, undefined> & {\n readonly className?: ClassName<State>;\n readonly style?: Style<State>;\n } = {\n ...(className === undefined ? {} : { className }),\n defaultTagName,\n props: [internalProps, externalProps] as unknown as Record<string, unknown>,\n ...(render === undefined ? {} : { render }),\n state,\n ...(style === undefined ? {} : { style }),\n };\n return useRender(parameters);\n}\n","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\nexport type Icons = {\n readonly copied: ReactNode;\n readonly copy: ReactNode;\n readonly download: ReactNode;\n};\n\nfunction Glyph({ children }: { readonly children: ReactNode }) {\n return (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 24 24\"\n >\n {children}\n </svg>\n );\n}\n\nexport const defaultIcons = {\n copied: (\n <Glyph>\n <path d=\"M20 6 9 17l-5-5\" />\n </Glyph>\n ),\n copy: (\n <Glyph>\n <rect height=\"14\" rx=\"2\" width=\"14\" x=\"8\" y=\"8\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </Glyph>\n ),\n download: (\n <Glyph>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n <path d=\"M12 15V3\" />\n </Glyph>\n ),\n} as const satisfies Icons;\n\nconst IconsContext = createContext<Icons>(defaultIcons);\n\nexport function IconsProvider({\n children,\n icons,\n}: {\n readonly children: ReactNode;\n readonly icons?: Partial<Icons>;\n}) {\n const value = useMemo<Icons>(\n () => ({\n copied: icons?.copied ?? defaultIcons.copied,\n copy: icons?.copy ?? defaultIcons.copy,\n download: icons?.download ?? defaultIcons.download,\n }),\n [icons],\n );\n return <IconsContext.Provider value={value}>{children}</IconsContext.Provider>;\n}\n\nexport function useIcons(): Icons {\n return useContext(IconsContext);\n}\n","export interface Catalog {\n readonly applyCleanup: string;\n readonly applyDns: string;\n readonly applyingDns: string;\n readonly authenticationAlternative: string;\n readonly automaticUnavailable: string;\n readonly cancel: string;\n readonly checkAgain: string;\n readonly checkingDns: string;\n readonly checkDns: string;\n readonly cleanupConsent: string;\n readonly cleanupPartial: string;\n readonly cleaningDns: string;\n readonly connectProvider: (provider: string) => string;\n readonly connected: (provider: string) => string;\n readonly providerAvailable: (provider: string) => string;\n readonly connecting: string;\n readonly close: string;\n readonly detectingProvider: string;\n readonly disconnectDomain: string;\n readonly disconnectConsent: string;\n readonly disconnecting: string;\n readonly detaching: string;\n readonly disconnectTitle: (provider: string) => string;\n readonly domainDisconnected: string;\n readonly dialogDescription: (domain: string) => string;\n readonly dialogTitle: (provider: string) => string;\n readonly openingAuthorization: string;\n readonly moreActions: string;\n readonly noChanges: string;\n readonly planConsent: string;\n readonly planningCleanup: string;\n readonly planningDns: string;\n readonly recordsPartiallyApplied: string;\n readonly reviewCleanup: string;\n readonly reviewDns: string;\n readonly retry: string;\n readonly existingConnection: string;\n readonly targetUnavailable: string;\n readonly attachTarget: (target: string) => string;\n readonly tokenLabel: string;\n}\n\nexport const english: Catalog = {\n applyCleanup: \"Remove records\",\n applyDns: \"Add records\",\n applyingDns: \"Adding records…\",\n authenticationAlternative: \"or\",\n automaticUnavailable: \"Automatic connection is not available for this domain\",\n cancel: \"Cancel\",\n checkAgain: \"Check again\",\n checkingDns: \"Checking DNS…\",\n checkDns: \"Check DNS\",\n cleanupConsent: \"Only records proven by the apply receipt will be deleted.\",\n cleanupPartial: \"Some DNS records could not be deleted. Review and retry safely.\",\n cleaningDns: \"Removing records…\",\n connectProvider: () => \"Connect\",\n connected: (provider) => `${provider} connected`,\n providerAvailable: (provider) => `${provider} manages DNS for this domain`,\n connecting: \"Connecting…\",\n close: \"Close\",\n detectingProvider: \"Detecting DNS provider…\",\n disconnectDomain: \"Disconnect\",\n disconnectConsent:\n \"This domain will be detached from the provider. Existing DNS records will be preserved.\",\n disconnecting: \"Disconnecting…\",\n detaching: \"Detaching domain…\",\n disconnectTitle: (provider) => `Detach ${provider}?`,\n domainDisconnected: \"Domain detached. DNS records were preserved.\",\n dialogDescription: (domain) => `Authorize DNS changes for ${domain}.`,\n dialogTitle: (provider) => `Connect ${provider}`,\n openingAuthorization: \"Opening provider authorization…\",\n moreActions: \"More connection actions\",\n noChanges: \"No changes needed\",\n planConsent: \"Review the exact DNS operations before approving this plan.\",\n planningCleanup: \"Preparing cleanup…\",\n planningDns: \"Preparing DNS changes…\",\n recordsPartiallyApplied: \"Some DNS changes failed. Review and retry safely.\",\n reviewCleanup: \"Remove records\",\n reviewDns: \"Review changes\",\n retry: \"Try again\",\n existingConnection: \"Existing provider connection\",\n targetUnavailable: \"No provider targets are available for this connection.\",\n attachTarget: (target) => `Use ${target}`,\n tokenLabel: \"API token\",\n};\n\nexport const merge = (overrides: Partial<Catalog> = {}): Catalog => ({\n ...english,\n ...overrides,\n});\n","import type { CSSProperties } from \"react\";\n\nexport interface Theme {\n readonly accent?: string;\n readonly accentContrast?: string;\n readonly backdrop?: string;\n readonly background?: string;\n readonly border?: string;\n readonly danger?: string;\n readonly dangerContrast?: string;\n readonly fill?: string;\n readonly fontFamily?: string;\n readonly muted?: string;\n readonly radius?: string;\n readonly shadow?: string;\n readonly success?: string;\n readonly text?: string;\n}\n\nconst variables = {\n accent: \"--domainkit-accent\",\n accentContrast: \"--domainkit-accent-contrast\",\n backdrop: \"--domainkit-backdrop\",\n background: \"--domainkit-background\",\n border: \"--domainkit-border\",\n danger: \"--domainkit-danger\",\n dangerContrast: \"--domainkit-danger-contrast\",\n fill: \"--domainkit-fill\",\n fontFamily: \"--domainkit-font-family\",\n muted: \"--domainkit-muted\",\n radius: \"--domainkit-radius\",\n shadow: \"--domainkit-shadow\",\n success: \"--domainkit-success\",\n text: \"--domainkit-text\",\n} as const satisfies Record<keyof Theme, string>;\n\nexport function toStyle(theme: Theme = {}): CSSProperties {\n return Object.fromEntries(\n Object.entries(theme).flatMap(([key, value]) =>\n value === undefined ? [] : [[variables[key as keyof Theme], value]],\n ),\n ) as CSSProperties;\n}\n","import { RegistryProvider } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n type RefObject,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport type { Icons } from \"./icons.tsx\";\nimport { IconsProvider } from \"./icons.tsx\";\nimport type * as Lifecycle from \"./lifecycle.ts\";\nimport type { Catalog } from \"./messages.ts\";\nimport { merge as mergeMessages } from \"./messages.ts\";\nimport type { Marks } from \"./provider.tsx\";\nimport type { Theme } from \"./theme.ts\";\nimport { toStyle } from \"./theme.ts\";\nimport type { Runtime } from \"./atom.ts\";\n\nexport interface RootState extends Record<string, unknown> {\n readonly colorScheme: \"dark\" | \"inherit\" | \"light\";\n}\n\nexport interface RootProps extends Omit<PartProps<\"div\", RootState>, \"children\"> {\n readonly children: ReactNode;\n readonly colorScheme?: RootState[\"colorScheme\"];\n readonly icons?: Partial<Icons>;\n readonly messages?: Partial<Catalog>;\n readonly marks?: Marks;\n readonly navigate?: (url: string) => void;\n readonly onEvent?: Lifecycle.Listener;\n readonly portalContainer?: HTMLElement | null;\n readonly theme?: Theme;\n readonly transport: Layer.Layer<Transport.Service>;\n}\n\ninterface ContextValue {\n readonly colorScheme: RootState[\"colorScheme\"];\n readonly navigate: (url: string) => void;\n readonly marks: Marks;\n readonly messages: Catalog;\n readonly emit: Lifecycle.Listener;\n readonly portalContainer: RefObject<HTMLElement | null>;\n readonly themeStyle: ReturnType<typeof toStyle>;\n readonly runtime: Runtime;\n}\n\nconst Context = createContext<ContextValue | null>(null);\n\nconst navigateInBrowser = (url: string): void => {\n if (typeof window === \"undefined\") {\n throw new Error(\"DomainKit OAuth navigation requires a browser or a custom navigate function\");\n }\n window.location.assign(url);\n};\n\nconst resolvePortalContainer = (\n container: HTMLElement | null,\n ownerDocument: Document | null,\n): HTMLElement | null => {\n if (container === null || ownerDocument === null) return null;\n return container.ownerDocument === ownerDocument && container.getRootNode() === ownerDocument\n ? container\n : null;\n};\n\nconst usePortalContainer = (container: HTMLElement | null): HTMLElement | null => {\n const ownerDocument = useMemo(() => container?.ownerDocument ?? null, [container]);\n const subscribe = useCallback(\n (notify: () => void) => {\n if (ownerDocument === null || typeof MutationObserver === \"undefined\") return () => {};\n const observer = new MutationObserver(notify);\n observer.observe(ownerDocument, { childList: true, subtree: true });\n return () => observer.disconnect();\n },\n [ownerDocument],\n );\n const getSnapshot = useCallback(\n () => resolvePortalContainer(container, ownerDocument),\n [container, ownerDocument],\n );\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport function Root({\n children,\n colorScheme = \"inherit\",\n icons,\n marks = {},\n messages,\n navigate = navigateInBrowser,\n onEvent,\n portalContainer = null,\n theme,\n transport,\n ...props\n}: RootProps) {\n const runtime = useMemo(() => Atom.runtime(transport), [transport]);\n const onEventRef = useRef(onEvent);\n useLayoutEffect(() => {\n onEventRef.current = onEvent;\n }, [onEvent]);\n const emit = useCallback<Lifecycle.Listener>((event) => {\n try {\n onEventRef.current?.(event);\n } catch {\n // Host observers are best-effort and cannot change a completed mutation's outcome.\n }\n }, []);\n const themeStyle = toStyle(theme);\n const resolvedPortalContainer = usePortalContainer(portalContainer);\n const portalContainerRef = useMemo<RefObject<HTMLElement | null>>(\n () => ({ current: resolvedPortalContainer }),\n [resolvedPortalContainer],\n );\n const content = usePart(\n \"div\",\n props,\n { colorScheme },\n {\n children,\n \"data-color-scheme\": colorScheme,\n \"data-domainkit-root\": \"\",\n style: themeStyle,\n },\n );\n return (\n <RegistryProvider>\n <Context.Provider\n value={{\n colorScheme,\n emit,\n marks,\n messages: mergeMessages(messages),\n navigate,\n portalContainer: portalContainerRef,\n runtime,\n themeStyle,\n }}\n >\n <IconsProvider {...(icons === undefined ? {} : { icons })}>{content}</IconsProvider>\n </Context.Provider>\n </RegistryProvider>\n );\n}\n\nexport function useDomainKit(): ContextValue {\n const value = useContext(Context);\n if (value === null)\n throw new Error(\"DomainKit components must be rendered inside DomainKit.Root\");\n return value;\n}\n","import type { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\n\n/** User-action lifecycle events suitable for host notifications and telemetry. */\nexport type Event = Data.TaggedEnum<{\n ConnectionEstablished: {\n readonly connection: Transport.Connected;\n readonly source: \"attach\" | \"connect\";\n };\n DomainDetached: {\n readonly connection: Transport.Connected;\n readonly result: Transport.DetachResult;\n };\n RecordsApplied: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }>;\n };\n RecordsCleaned: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" }>;\n };\n RecordsPartiallyApplied: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }>;\n };\n RecordsPartiallyCleaned: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Partial\" }>;\n };\n}>;\n\nexport const Event = Data.taggedEnum<Event>();\n\nexport type Listener = (event: Event) => void;\n","import type { Transport } from \"domainkit\";\nimport type { ReactElement } from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\n\nexport type Operation =\n | Transport.ProvisioningPlan[\"operations\"][number]\n | Transport.CleanupPlan[\"operations\"][number];\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport const Kind = leafPart(\"span\", \"operation-kind\");\nexport const Type = leafPart(\"strong\", \"operation-type\");\nexport const Record = leafPart(\"span\", \"operation-record\");\nexport const Name = leafPart(\"span\", \"operation-name\");\nexport const Value = leafPart(\"code\", \"operation-value\");\nexport const Priority = leafPart(\"span\", \"operation-priority\");\nexport const Reason = leafPart(\"span\", \"operation-reason\");\n\nexport interface ItemProps extends PartProps<\"li\", { readonly operation: Operation[\"_tag\"] }> {\n readonly operation: Operation;\n}\n\nexport function Item({ operation, ...props }: ItemProps) {\n return usePart(\n \"li\",\n props,\n { operation: operation._tag },\n {\n children: (\n <>\n <Kind>{operation._tag}</Kind> <Type>{operation.record.type}</Type>{\" \"}\n <Record>\n <Name>{operation.record.name}</Name>\n <Value>{operation.record.value}</Value>\n {operation.record.priority === undefined ? null : (\n <Priority>Priority {operation.record.priority}</Priority>\n )}\n {\"reason\" in operation ? <Reason>{operation.reason}</Reason> : null}\n </Record>\n </>\n ),\n \"data-domainkit-part\": \"operation-item\",\n \"data-operation\": operation._tag,\n },\n );\n}\n\nexport interface RootProps extends PartProps<\n \"ul\",\n { readonly count: number; readonly lifecycle: Lifecycle }\n> {\n readonly count?: number;\n readonly lifecycle: Lifecycle;\n}\n\nexport type Lifecycle = \"cleanup\" | \"provisioning\";\n\nexport function Root({ count = 0, lifecycle, ...props }: RootProps) {\n return usePart(\n \"ul\",\n props,\n { count, lifecycle },\n {\n \"data-domainkit-part\":\n lifecycle === \"provisioning\" ? \"plan-operations\" : \"cleanup-operations\",\n \"data-lifecycle\": lifecycle,\n },\n );\n}\n\nexport interface ListProps extends Omit<RootProps, \"children\" | \"count\"> {\n readonly operations: ReadonlyArray<Operation>;\n}\n\nexport function List({ lifecycle, operations, ...props }: ListProps) {\n return (\n <Root count={operations.length} lifecycle={lifecycle} {...props}>\n {operations.map((operation) => (\n <Item key={operation.id} operation={operation} />\n ))}\n </Root>\n );\n}\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Cleaned: { readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" }> };\n Cleaning: { readonly plan: Transport.CleanupPlan };\n Idle: {};\n Partial: { readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.CleanupPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.CleanupResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Completion = Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" | \"Partial\" }>;\n\nexport function useModel(\n connection: Transport.Connected,\n receiptId: string,\n onCleaned?: (result: Completion) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const onCleanedRef = useRef(onCleaned);\n onCleanedRef.current = onCleaned;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Cleaning\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Cleaning\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.cleanup.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n receiptId,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Blocked\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Cleaning({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.cleanup.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n receiptId,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Cleaned\") {\n get.set(state, State.Cleaned({ result }));\n onCleanedRef.current?.(result);\n emit(LifecycleEvent.RecordsCleaned({ connection, result }));\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n onCleanedRef.current?.(result);\n emit(LifecycleEvent.RecordsPartiallyCleaned({ connection, result }));\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, receiptId, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n receiptId: string,\n onCleaned?: (result: Completion) => void,\n): Controller {\n const model = useModel(connection, receiptId, onCleaned);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n } as const;\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"cleanup-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.cleanupPartial : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly onOpenChangeComplete?: (open: boolean) => void;\n readonly trigger?: ReactElement | null;\n}\n\nexport function Dialog({ controller, onOpenChange, onOpenChangeComplete, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.CleanupPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Cleaning\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Cleaning\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Cleaned\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) {\n controller.dismiss();\n }\n onOpenChange?.(nextOpen);\n }}\n onOpenChangeComplete={onOpenChangeComplete}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"cleanup-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewCleanup}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"cleanup-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewCleanup}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.cleanupConsent}\n </BaseAlertDialog.Description>\n </div>\n {busy ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningCleanup}\n </p>\n ) : (\n <Operations.List lifecycle=\"cleanup\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"cleanup-apply\" disabled type=\"button\">\n {state._tag === \"Cleaning\" ? messages.cleaningDns : messages.planningCleanup}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n <button\n data-domainkit-part=\"cleanup-apply\"\n disabled={plan.operations.some((operation) => operation._tag === \"Blocked\")}\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {messages.applyCleanup}\n </button>\n </>\n ) : (\n <>\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseAlertDialog.Close>\n <button\n data-domainkit-part=\"cleanup-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onCleaned?: (result: Completion) => void;\n readonly receiptId: string;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({ connection, onCleaned, receiptId, trigger, ...props }: FlowProps) {\n const controller = useController(connection, receiptId, onCleaned);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import { useState, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\n\ntype ProviderDescriptor = Transport.Provider;\n\nexport type Marks = Readonly<\n Record<string, ReactNode | ((provider: ProviderDescriptor) => ReactNode)>\n>;\n\nexport interface MarkState extends Record<string, unknown> {\n readonly providerId: string;\n}\n\nexport interface MarkProps extends PartProps<\"span\", MarkState> {\n readonly provider: ProviderDescriptor;\n}\n\nconst logoHosts: Readonly<Record<string, string>> = {\n amazonroute53: \"route53.com\",\n aws: \"amazonaws.com\",\n bluehost: \"bluehost.com\",\n cloudflare: \"cloudflare.com\",\n digitalocean: \"digitalocean.com\",\n dnsimple: \"dnsimple.com\",\n dreamhost: \"dreamhost.com\",\n dynadot: \"dynadot.com\",\n gandi: \"gandi.net\",\n godaddy: \"godaddy.com\",\n google: \"cloud.google.com\",\n googlecloud: \"cloud.google.com\",\n googleclouddns: \"cloud.google.com\",\n hostgator: \"hostgator.com\",\n hostinger: \"hostinger.com\",\n hover: \"hover.com\",\n ionos: \"ionos.com\",\n namecheap: \"namecheap.com\",\n namecom: \"name.com\",\n netlify: \"netlify.com\",\n ns1: \"ns1.com\",\n ovh: \"ovh.com\",\n porkbun: \"porkbun.com\",\n route53: \"route53.com\",\n spaceship: \"spaceship.com\",\n squarespace: \"squarespace.com\",\n vercel: \"vercel.com\",\n};\n\nconst logoKey = (providerId: string): string =>\n providerId\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"\");\n\nconst logoHost = (providerId: string): string | undefined => logoHosts[logoKey(providerId)];\n\nconst letterMark = (provider: ProviderDescriptor): string =>\n provider.name.trim().charAt(0).toUpperCase() || \"?\";\n\nfunction DefaultMark({ provider }: { readonly provider: ProviderDescriptor }) {\n const host = logoHost(provider.id);\n const [failed, setFailed] = useState(false);\n if (host === undefined || failed) return letterMark(provider);\n return (\n <img\n alt=\"\"\n height={32}\n onError={() => setFailed(true)}\n referrerPolicy=\"no-referrer\"\n src={`https://integrations.sh/logo/${host}?sz=64`}\n width={32}\n />\n );\n}\n\nexport function Mark({ provider, ...props }: MarkProps) {\n const { marks } = useDomainKit();\n const replacement = marks[provider.id];\n const content =\n typeof replacement === \"function\"\n ? replacement(provider)\n : (replacement ?? <DefaultMark key={provider.id} provider={provider} />);\n return usePart(\n \"span\",\n props,\n { providerId: provider.id },\n {\n \"aria-label\": provider.name,\n children: content,\n \"data-domainkit-part\": \"provider-mark\",\n \"data-domainkit-provider\": logoKey(provider.id),\n role: \"img\",\n },\n );\n}\n\nexport type { ProviderDescriptor as Provider };\nexport type MarkElementProps = ComponentPropsWithoutRef<\"span\">;\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport * as AsyncResult from \"effect/unstable/reactivity/AsyncResult\";\nimport {\n useMemo,\n useState,\n type ComponentPropsWithoutRef,\n type FormEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport { failureFromDefect, failureFromError, type Failure } from \"./atom.ts\";\n\ntype LocalState = Data.TaggedEnum<{\n Detaching: { readonly snapshot: Transport.Connected };\n Loading: {};\n Redirecting: { readonly snapshot: Disconnected };\n Submitting: { readonly snapshot: Disconnected };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.ConnectionSnapshot | Failure;\n\ntype Disconnected = Extract<Transport.ConnectionSnapshot, { readonly _tag: \"Disconnected\" }>;\n\nconst sameTarget = (left: Transport.ProviderTarget, right: Transport.ProviderTarget): boolean =>\n left.accountId === right.accountId &&\n left.accountKind === right.accountKind &&\n left.zoneId === right.zoneId &&\n left.zoneName === right.zoneName;\n\nexport interface Controller {\n readonly attach: (\n connection: Transport.ReusableConnection,\n target: Transport.ProviderTarget,\n ) => void;\n readonly connect: (method: Transport.Method) => void;\n readonly detach: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Attach: { readonly connectionId: string; readonly target: Transport.ProviderTarget };\n Connect: { readonly method: Transport.Method };\n Detach: {};\n Retry: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(domain: string): Model {\n const { emit, navigate, runtime } = useDomainKit();\n return useMemo(() => {\n const actionState = Atom.make<State | undefined>(undefined);\n const inspect = runtime.atom(\n Effect.flatMap(Transport.Service, (transport) => transport.connection.inspect({ domain })),\n );\n const state = Atom.make((get): State => {\n const action = get(actionState);\n if (action !== undefined) return action;\n const inspection = get(inspect);\n return AsyncResult.matchWithError(inspection, {\n onDefect: () => failureFromDefect(\"connection.inspect\", \"Provider detection failed\"),\n onError: failureFromError,\n onInitial: () => State.Loading(),\n onSuccess: ({ value }) => value,\n });\n });\n const command = runtime.fn<Command>()((input, get) => {\n if (input._tag === \"Retry\") {\n get.set(actionState, undefined);\n get.refresh(inspect);\n return Effect.void;\n }\n const snapshot = get(state);\n if (input._tag === \"Detach\") {\n if (snapshot._tag !== \"Connected\") return Effect.void;\n get.set(actionState, State.Detaching({ snapshot }));\n return Effect.flatMap(Transport.Service, (transport) =>\n Effect.flatMap(\n transport.connection.detach({\n attachmentId: snapshot.attachment.id,\n preserveDns: true,\n }),\n (result) => {\n const detached: Disconnected = Transport.Disconnected.make({\n domain: snapshot.attachment.domain,\n provider: snapshot.provider,\n reusableConnections: [],\n });\n return Effect.flatMap(\n Effect.sync(() => {\n get.set(actionState, detached);\n emit(\n LifecycleEvent.DomainDetached({\n connection: snapshot,\n result,\n }),\n );\n }),\n () =>\n transport.connection.inspect({ domain }).pipe(\n Effect.catch(() => Effect.succeed(detached)),\n Effect.tap((refreshed) => Effect.sync(() => get.set(actionState, refreshed))),\n ),\n );\n },\n ),\n ).pipe(\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (snapshot._tag !== \"Disconnected\") return Effect.void;\n const complete = (\n request: Effect.Effect<Transport.ConnectionResult, Transport.Failure, Transport.Service>,\n source: \"connect\" | \"attach\",\n ) =>\n request.pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Redirect\") {\n get.set(actionState, State.Redirecting({ snapshot }));\n navigate(result.authorizationUrl);\n } else {\n get.set(actionState, result);\n emit(\n LifecycleEvent.ConnectionEstablished({\n connection: result,\n source,\n }),\n );\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n if (input._tag === \"Attach\") {\n const reusableConnection = snapshot.reusableConnections.find(\n ({ connection }) => connection.id === input.connectionId,\n );\n if (reusableConnection === undefined) return Effect.void;\n const target = reusableConnection.targets.find((candidate) =>\n sameTarget(candidate, input.target),\n );\n if (target === undefined) return Effect.void;\n get.set(actionState, State.Submitting({ snapshot }));\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.attach({\n connectionId: input.connectionId,\n domain,\n target,\n }),\n ),\n \"attach\",\n );\n }\n get.set(actionState, State.Submitting({ snapshot }));\n if (input._tag === \"Connect\") {\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.connect({\n domain,\n method: input.method,\n providerId: snapshot.provider.id,\n }),\n ),\n \"connect\",\n );\n }\n return Effect.void;\n });\n return { command, state };\n }, [domain, emit, navigate, runtime]);\n}\n\nexport function useController(domain: string): Controller {\n const model = useModel(domain);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n attach: (connection, target) =>\n execute(Command.Attach({ connectionId: connection.connection.id, target })),\n connect: (method) => execute(Command.Connect({ method })),\n detach: () => execute(Command.Detach()),\n retry: () => execute(Command.Retry()),\n state,\n };\n}\n\nexport interface RootState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface RootProps extends PartProps<\"div\", RootState> {\n readonly status?: State[\"_tag\"];\n}\n\nexport function Root({ children, status = \"Loading\", ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n {\n children,\n \"data-domainkit-part\": \"connection-root\",\n },\n );\n}\n\nexport interface StatusState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface StatusProps extends PartProps<\"div\", StatusState> {\n readonly state: State;\n}\n\nexport function Status({ children, state, ...props }: StatusProps) {\n const { messages } = useDomainKit();\n const text =\n state._tag === \"Loading\"\n ? messages.detectingProvider\n : state._tag === \"Connected\"\n ? messages.connected(state.provider.name)\n : state._tag === \"Detaching\"\n ? messages.detaching\n : state._tag === \"Unsupported\"\n ? messages.automaticUnavailable\n : state._tag === \"Failure\"\n ? state.message\n : state._tag === \"Redirecting\"\n ? messages.openingAuthorization\n : state._tag === \"Submitting\"\n ? messages.connecting\n : messages.providerAvailable(state.provider.name);\n return usePart(\n \"div\",\n props,\n { status: state._tag },\n {\n children: children ?? text,\n \"data-domainkit-part\": \"connection-status\",\n \"data-state\": state._tag,\n },\n );\n}\n\nexport interface TriggerProps extends Omit<\n ComponentPropsWithoutRef<typeof BaseDialog.Trigger>,\n \"children\"\n> {\n readonly children: ReactNode;\n}\n\nexport interface ConnectTriggerProps extends Omit<TriggerProps, \"children\"> {\n readonly children?: ReactNode;\n readonly provider: Provider.Provider;\n}\n\nexport function Trigger({ children, ...props }: TriggerProps) {\n return (\n <BaseDialog.Trigger data-domainkit-part=\"connection-trigger\" {...props}>\n {children}\n </BaseDialog.Trigger>\n );\n}\n\nexport function ConnectTrigger({ children, provider, ...props }: ConnectTriggerProps) {\n const { messages } = useDomainKit();\n return (\n <Trigger {...props} data-domainkit-recipe=\"connect\">\n {children ?? (\n <>\n <Provider.Mark aria-hidden=\"true\" provider={provider} />\n {messages.connectProvider(provider.name)}\n </>\n )}\n </Trigger>\n );\n}\n\nexport interface ActionState extends Record<string, unknown> {\n readonly authentication: \"attach\" | \"integration\" | \"oauth\" | \"token\";\n}\n\nexport interface OAuthActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function OAuthAction({ controller, label, ...props }: OAuthActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"oauth\" },\n {\n children: label,\n \"data-domainkit-part\": \"oauth-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.OAuth()),\n type: \"button\",\n },\n );\n}\n\nexport interface IntegrationActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function IntegrationAction({ controller, label, ...props }: IntegrationActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"integration\" },\n {\n children: label,\n \"data-domainkit-part\": \"integration-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.Integration()),\n type: \"button\",\n },\n );\n}\n\nexport interface AttachActionProps extends PartProps<\"button\", ActionState> {\n readonly connection: Transport.ReusableConnection;\n readonly controller: Controller;\n readonly label: string;\n readonly target: Transport.ProviderTarget;\n}\n\nexport function AttachAction({\n connection,\n controller,\n label,\n target,\n ...props\n}: AttachActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"attach\" },\n {\n children: label,\n \"data-domainkit-part\": \"attach-target\",\n disabled: pending,\n onClick: () => controller.attach(connection, target),\n type: \"button\",\n },\n );\n}\n\nexport interface TokenActionProps extends Omit<PartProps<\"form\", ActionState>, \"method\"> {\n readonly controller: Controller;\n readonly method: Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }>;\n}\n\nexport function TokenAction({ controller, method, ...props }: TokenActionProps) {\n const { messages } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const [token, setToken] = useState(\"\");\n const [parameters, setParameters] = useState<Readonly<Record<string, string>>>({});\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (token.length > 0) {\n const populated = Object.fromEntries(\n Object.entries(parameters).filter(([, value]) => value.length > 0),\n );\n controller.connect(\n Transport.Method.Token({\n token,\n ...(Object.keys(populated).length === 0 ? {} : { parameters: populated }),\n }),\n );\n }\n };\n const missingRequiredParameter = method.parameters?.some(\n (parameter) => parameter.required === true && !parameters[parameter.key],\n );\n return usePart(\n \"form\",\n props,\n { authentication: \"token\" },\n {\n children: (\n <>\n {method.parameters?.map((parameter) => (\n <label key={parameter.key}>\n {parameter.label}\n <input\n name={parameter.key}\n disabled={pending}\n onChange={(event) => {\n const value = event.currentTarget.value;\n setParameters((current) => ({\n ...current,\n [parameter.key]: value,\n }));\n }}\n placeholder={parameter.placeholder}\n required={parameter.required}\n type=\"text\"\n value={parameters[parameter.key] ?? \"\"}\n />\n {parameter.description === undefined ? null : <small>{parameter.description}</small>}\n </label>\n ))}\n <label>\n {messages.tokenLabel}\n <input\n autoComplete=\"off\"\n disabled={pending}\n name=\"token\"\n onChange={(event) => setToken(event.currentTarget.value)}\n placeholder={method.placeholder}\n type=\"password\"\n value={token}\n />\n </label>\n <button\n disabled={pending || token.length === 0 || missingRequiredParameter === true}\n type=\"submit\"\n >\n {method.label}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"token-connect\",\n onSubmit: submit,\n },\n );\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly snapshot: Disconnected;\n}\n\nexport const targetLabel = (target: Transport.ProviderTarget): string =>\n `${target.evidence?.accountName ?? target.accountId} · ${target.zoneName}`;\n\nexport function Dialog({ controller, snapshot }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const integrationMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Integration\" }> =>\n method._tag === \"Integration\",\n );\n const oauthMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"OAuth\" }> =>\n method._tag === \"OAuth\",\n );\n const tokenMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }> =>\n method._tag === \"Token\",\n );\n const hasProviderAccountPath =\n integrationMethods.length > 0 ||\n oauthMethods.length > 0 ||\n snapshot.reusableConnections.length > 0;\n return (\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-domainkit-part=\"connection-dialog\"\n data-domainkit-root=\"\"\n data-color-scheme={colorScheme}\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <Provider.Mark provider={snapshot.provider} />\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.dialogTitle(snapshot.provider.name)}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.dialogDescription(snapshot.domain)}\n </BaseDialog.Description>\n </div>\n {pending ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {hasProviderAccountPath ? (\n <div data-domainkit-part=\"provider-authentication\">\n {integrationMethods.map((method) => (\n <IntegrationAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {oauthMethods.map((method) => (\n <OAuthAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {snapshot.reusableConnections.map((connection) => (\n <section\n data-connection-id={connection.connection.id}\n data-domainkit-part=\"reusable-connection\"\n key={connection.connection.id}\n >\n <div data-domainkit-part=\"reusable-connection-heading\">\n <strong>{messages.existingConnection}</strong>\n <span>{connection.connection.providerId}</span>\n </div>\n <div\n data-domainkit-part=\"target-list\"\n data-state={\n connection.targets.length === 0\n ? \"unavailable\"\n : connection.targets.length === 1\n ? \"unique\"\n : \"ambiguous\"\n }\n >\n {connection.targets.length === 0 ? (\n <p data-domainkit-part=\"target-unavailable\">{messages.targetUnavailable}</p>\n ) : (\n connection.targets.map((target) => (\n <AttachAction\n connection={connection}\n controller={controller}\n key={`${target.accountId}:${target.zoneId}`}\n label={messages.attachTarget(targetLabel(target))}\n target={target}\n />\n ))\n )}\n </div>\n </section>\n ))}\n </div>\n ) : null}\n {hasProviderAccountPath && tokenMethods.length > 0 ? (\n <div\n aria-label={messages.authenticationAlternative}\n data-domainkit-part=\"authentication-separator\"\n role=\"separator\"\n >\n <span aria-hidden=\"true\">{messages.authenticationAlternative}</span>\n </div>\n ) : null}\n {tokenMethods.map((method) => (\n <TokenAction controller={controller} key={method._tag} method={method} />\n ))}\n </div>\n {pending ? null : (\n <div data-domainkit-part=\"dialog-footer\">\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n </div>\n )}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"children\"> {\n readonly domain: string;\n}\n\nexport function Flow({ domain, ...props }: FlowProps) {\n const controller = useController(domain);\n const state = controller.state;\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Root {...props} status={state._tag}>\n <Status state={state} />\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <ConnectTrigger provider={snapshot.provider} />\n <Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Root>\n );\n}\n\nexport interface RetryActionProps extends PartProps<\"button\", { readonly status: \"Failure\" }> {\n readonly controller: Controller;\n readonly kind?: \"after-user-action\" | \"retry\";\n}\n\nexport function RetryAction({ controller, kind = \"retry\", ...props }: RetryActionProps) {\n const { messages } = useDomainKit();\n return usePart(\n \"button\",\n props,\n { status: \"Failure\" },\n {\n children: kind === \"after-user-action\" ? messages.checkAgain : messages.retry,\n \"data-domainkit-part\": \"connection-retry\",\n onClick: controller.retry,\n type: \"button\",\n },\n );\n}\n\nexport interface CardProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Card({ status, ...props }: CardProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-card\", \"data-state\": status },\n );\n}\n\nexport interface CardIdentityProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardIdentity({ status, ...props }: CardIdentityProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-identity\", \"data-state\": status },\n );\n}\n\nexport interface CardActionsProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardActions({ status, ...props }: CardActionsProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-actions\", \"data-state\": status },\n );\n}\n\nexport interface DisconnectDialogProps {\n readonly connection: Transport.Connected;\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly open?: boolean;\n readonly trigger?: ReactElement | null;\n}\n\nexport function DisconnectDialog({\n connection,\n controller,\n onOpenChange,\n open: openProp,\n trigger,\n}: DisconnectDialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const [internalOpen, setInternalOpen] = useState(false);\n const open = openProp ?? internalOpen;\n const setOpen = (nextOpen: boolean) => {\n if (openProp === undefined) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n };\n const detaching = controller.state._tag === \"Detaching\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && detaching) {\n eventDetails.cancel();\n return;\n }\n setOpen(nextOpen);\n }}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"disconnect-trigger\"\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.disconnectDomain}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"disconnect-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.disconnectTitle(connection.provider.name)}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.disconnectConsent}\n </BaseAlertDialog.Description>\n </div>\n {detaching ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {detaching ? null : (\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n )}\n <button\n data-domainkit-part=\"disconnect-action\"\n disabled={detaching}\n onClick={() => controller.detach()}\n type=\"button\"\n >\n {detaching ? messages.detaching : messages.disconnectDomain}\n </button>\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport type Connected = Transport.Connected;\n","import { useEffect, useRef, useState, type ReactElement, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useIcons } from \"./icons.tsx\";\n\nexport const copyText = (value: string): Promise<boolean> => {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return Promise.resolve(false);\n }\n return navigator.clipboard.writeText(value).then(\n () => true,\n () => false,\n );\n};\n\nconst downloadText = (filename: string, contents: string): void => {\n if (typeof document === \"undefined\") return;\n const blob = new Blob([contents], { type: \"text/plain;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.download = filename;\n anchor.href = url;\n document.body.append(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n};\n\nconst absoluteDomainName = (value: string): string => (value.endsWith(\".\") ? value : `${value}.`);\n\nconst textEncoder = new TextEncoder();\n\nconst escapeTxtCharacter = (character: string): string => {\n if (character === '\"' || character === \"\\\\\") return `\\\\${character}`;\n const codePoint = character.codePointAt(0);\n if (codePoint !== undefined && (codePoint < 32 || codePoint === 127)) {\n return `\\\\${codePoint.toString().padStart(3, \"0\")}`;\n }\n return character;\n};\n\nconst txtValue = (value: string): string => {\n const chunks: Array<string> = [];\n let chunk = \"\";\n let byteLength = 0;\n for (const character of value) {\n const characterByteLength = textEncoder.encode(character).byteLength;\n if (byteLength + characterByteLength > 255) {\n chunks.push(chunk);\n chunk = \"\";\n byteLength = 0;\n }\n chunk += escapeTxtCharacter(character);\n byteLength += characterByteLength;\n }\n chunks.push(chunk);\n return chunks.map((part) => `\"${part}\"`).join(\" \");\n};\n\nconst srvValue = (value: string): string => {\n const fields = value.trim().split(/\\s+/);\n if (fields.length !== 3) throw new Error(`Invalid SRV value: ${value}`);\n const [weight, port, target] = fields;\n if (weight === undefined || port === undefined || target === undefined) {\n throw new Error(`Invalid SRV value: ${value}`);\n }\n return `${weight} ${port} ${absoluteDomainName(target)}`;\n};\n\nconst zoneValue = (record: Transport.DnsRecord): string => {\n switch (record.type.toUpperCase()) {\n case \"CNAME\":\n case \"MX\":\n case \"NS\":\n case \"PTR\":\n return absoluteDomainName(record.value);\n case \"SRV\":\n return srvValue(record.value);\n case \"TXT\":\n return txtValue(record.value);\n default:\n return record.value;\n }\n};\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport interface CopyController {\n readonly copied: boolean;\n readonly copy: () => void;\n}\n\nexport function useCopy(value: string, resetAfter = 2000): CopyController {\n const [copied, setCopied] = useState(false);\n const reset = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => () => clearTimeout(reset.current), []);\n return {\n copied,\n copy: () => {\n void copyText(value).then((ok) => {\n if (!ok) return;\n setCopied(true);\n clearTimeout(reset.current);\n reset.current = setTimeout(() => setCopied(false), resetAfter);\n });\n },\n };\n}\n\nexport interface CopyValueProps extends PartProps<\"span\", { readonly copied: boolean }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly value: string;\n}\n\nexport function CopyValue({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy\",\n value,\n ...props\n}: CopyValueProps) {\n const icons = useIcons();\n const controller = useCopy(value);\n const copied = controller.copied;\n return usePart(\n \"span\",\n props,\n { copied },\n {\n children: (\n <>\n <code>{value}</code>\n <button\n aria-label={`${copied ? copiedLabel : copyLabel} ${value}`}\n data-domainkit-part=\"copy-action\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"idle\"\n >\n {copyIcon ?? icons.copy}\n </span>\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"done\"\n >\n {copiedIcon ?? icons.copied}\n </span>\n </button>\n </>\n ),\n \"data-copied\": copied ? \"\" : undefined,\n \"data-domainkit-part\": \"copy-value\",\n },\n );\n}\n\nexport interface ZoneFileProps extends PartProps<\"div\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly domain: string;\n readonly downloadIcon?: ReactNode;\n readonly downloadLabel?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function ZoneFile({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy zone\",\n domain,\n downloadIcon,\n downloadLabel = \"Download\",\n records,\n ...props\n}: ZoneFileProps) {\n const icons = useIcons();\n const zone = toZoneFile(records);\n const controller = useCopy(zone);\n const copied = controller.copied;\n return usePart(\n \"div\",\n props,\n { count: records.length },\n {\n children: (\n <>\n <button\n aria-label={copied ? copiedLabel : copyLabel}\n data-domainkit-part=\"zone-copy\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {copied ? (copiedIcon ?? icons.copied) : (copyIcon ?? icons.copy)}\n </span>\n {copied ? copiedLabel : copyLabel}\n </button>\n <button\n aria-label={downloadLabel}\n data-domainkit-part=\"zone-download\"\n onClick={() => downloadZoneFile(domain, records)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {downloadIcon ?? icons.download}\n </span>\n {downloadLabel}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"zone-file\",\n },\n );\n}\n\nexport interface StatusProps extends PartProps<\n \"span\",\n { readonly status: Transport.ObservationEvidence[\"_tag\"] }\n> {\n readonly evidence: Transport.ObservationEvidence;\n}\n\nexport function Status({ evidence, ...props }: StatusProps) {\n return usePart(\n \"span\",\n props,\n { status: evidence._tag },\n {\n children: evidence._tag,\n \"data-domainkit-part\": \"record-status\",\n \"data-status\": evidence._tag,\n },\n );\n}\n\nexport interface PriorityProps extends PartProps<\"span\", { readonly priority: number }> {\n readonly priority?: number;\n}\n\nexport function Priority({ children, priority = 0, ...props }: PriorityProps) {\n return usePart(\n \"span\",\n props,\n { priority },\n {\n children: children ?? `Priority ${priority}`,\n \"data-domainkit-part\": \"record-priority\",\n },\n );\n}\n\nexport const Header = leafPart(\"thead\", \"records-header\");\nexport const Body = leafPart(\"tbody\", \"records-body\");\nexport const Footer = leafPart(\"tfoot\", \"records-footer\");\nexport const Row = leafPart(\"tr\", \"records-row\");\nexport const Head = leafPart(\"th\", \"records-head\");\nexport const Cell = leafPart(\"td\", \"records-cell\");\nexport const Caption = leafPart(\"caption\", \"records-caption\");\nexport const Value = leafPart(\"span\", \"record-value\");\nexport const CardHeader = leafPart(\"div\", \"record-card-head\");\nexport const CardTitle = leafPart(\"strong\", \"record-card-title\");\nexport const CardContent = leafPart(\"dl\", \"record-card-content\");\n\nexport interface RootProps extends PartProps<\"table\", { readonly count: number }> {\n readonly count?: number;\n}\n\nexport function Root({ count = 0, ...props }: RootProps) {\n return (\n <div data-domainkit-part=\"records-panel\">\n {usePart(\"table\", props, { count }, { \"data-domainkit-part\": \"records-table\" })}\n </div>\n );\n}\n\nexport interface CardProps extends PartProps<\"section\", { readonly recordId: string }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly record: Transport.DnsRecord;\n}\n\nexport function Card({ copiedIcon, copyIcon, evidence, record, ...props }: CardProps) {\n const matching =\n evidence === undefined ? [] : evidence.filter((item) => item.recordId === record.id);\n return usePart(\n \"section\",\n props,\n { recordId: record.id },\n {\n children: (\n <>\n <CardHeader>\n <CardTitle>{record.type}</CardTitle>\n {matching.map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </CardHeader>\n <CardContent>\n <div>\n <dt>Name</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </dd>\n </div>\n <div>\n <dt>Value</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </dd>\n </div>\n </CardContent>\n </>\n ),\n \"data-domainkit-part\": \"record-card\",\n },\n );\n}\n\nexport interface TableProps extends PartProps<\"table\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Table({ copiedIcon, copyIcon, evidence, records, ...props }: TableProps) {\n const status = evidence !== undefined;\n return (\n <Root count={records.length} {...props}>\n <Header>\n <Row>\n <Head scope=\"col\">Type</Head>\n <Head scope=\"col\">Name</Head>\n <Head scope=\"col\">Value</Head>\n {status ? (\n <Head data-column=\"status\" scope=\"col\">\n Status\n </Head>\n ) : null}\n </Row>\n </Header>\n <Body>\n {records.map((record) => (\n <Row key={record.id}>\n <Cell>{record.type}</Cell>\n <Cell>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </Cell>\n <Cell>\n <Value>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </Value>\n </Cell>\n {status ? (\n <Cell data-column=\"status\">\n {evidence\n .filter((item) => item.recordId === record.id)\n .map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </Cell>\n ) : null}\n </Row>\n ))}\n </Body>\n </Root>\n );\n}\n\nexport const toZoneFile = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n `${records\n .map(\n (record) =>\n `${absoluteDomainName(record.name)} IN ${record.type} ${record.priority === undefined ? \"\" : `${record.priority} `}${zoneValue(record)}`,\n )\n .join(\"\\n\")}\\n`;\n\nexport const downloadZoneFile = (\n domain: string,\n records: ReadonlyArray<Transport.DnsRecord>,\n): void => downloadText(`${domain}.txt`, toZoneFile(records));\n\nexport type DnsRecord = Transport.DnsRecord;\nexport type ObservationEvidence = Transport.ObservationEvidence;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\nimport * as Records from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Applying: { readonly plan: Transport.ProvisioningPlan };\n Complete: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }> };\n Idle: {};\n Partial: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.ProvisioningPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.ApplyResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const recordKey = recordsIdentity(records);\n const onAppliedRef = useRef(onApplied);\n onAppliedRef.current = onApplied;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n records,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Conflict\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Applying({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Applied\") {\n get.set(state, State.Complete({ result }));\n emit(LifecycleEvent.RecordsApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n emit(LifecycleEvent.RecordsPartiallyApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, recordKey, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Controller {\n const model = useModel(connection, records, onApplied);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n };\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"provisioning-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.recordsPartiallyApplied : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly trigger?: ReactElement;\n}\n\nexport function Dialog({ controller, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.ProvisioningPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Applying\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Applying\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Complete\";\n const isNoopOnly =\n plan !== undefined && plan.operations.every((operation) => operation._tag === \"Noop\");\n return (\n <BaseDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) controller.dismiss();\n }}\n open={open}\n >\n <BaseDialog.Trigger\n data-domainkit-part=\"plan-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewDns}\n </BaseDialog.Trigger>\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"plan-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewDns}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.planConsent}\n </BaseDialog.Description>\n </div>\n {busy ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningDns}\n </p>\n ) : (\n <Operations.List lifecycle=\"provisioning\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"plan-apply\" disabled type=\"button\">\n {state._tag === \"Applying\" ? messages.applyingDns : messages.planningDns}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"plan-apply\"\n disabled={\n isNoopOnly || plan.operations.some((operation) => operation._tag === \"Conflict\")\n }\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {isNoopOnly ? messages.noChanges : messages.applyDns}\n </button>\n </>\n ) : (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n\nexport function RetryAction({ controller }: { readonly controller: Controller }) {\n const { messages } = useDomainKit();\n const state = controller.state;\n if (state._tag !== \"Failure\" && state._tag !== \"Stale\" && state._tag !== \"Partial\") return null;\n return (\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly showRecords?: boolean;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({\n connection,\n onApplied,\n records,\n showRecords = true,\n trigger,\n ...props\n}: FlowProps) {\n const controller = useController(connection, records, onApplied);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n {showRecords ? <Records.Table records={records} /> : null}\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Status as RecordStatus } from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Failed: { readonly failure: Failure; readonly previous?: Transport.Observation };\n Idle: {};\n Observing: { readonly previous?: Transport.Observation };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.Observation;\n\nexport interface ObserveConfig {\n readonly connection?: Transport.Connected;\n readonly domain: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly sources?: {\n readonly provider?: boolean;\n readonly publicDns?: boolean;\n };\n}\n\nexport type Command = Data.TaggedEnum<{\n Observe: {};\n Reset: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly observe: () => void;\n readonly reset: () => void;\n readonly state: State;\n}\n\nexport function useModel(config: ObserveConfig): Model {\n const { runtime } = useDomainKit();\n const provider = config.sources?.provider ?? config.connection !== undefined;\n const publicDns = config.sources?.publicDns ?? true;\n const recordKey = recordsIdentity(config.records);\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const observe = runtime.fn<Command>()((command, get) => {\n if (command._tag === \"Reset\") {\n get.set(state, State.Idle());\n return Effect.void;\n }\n const current = get(state);\n if (current._tag === \"Observing\") return Effect.void;\n const previous =\n current._tag === \"Observation\"\n ? current\n : current._tag === \"Failed\"\n ? current.previous\n : undefined;\n get.set(state, State.Observing({ ...(previous === undefined ? {} : { previous }) }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.verification.observe({\n ...(config.connection === undefined\n ? {}\n : { attachmentId: config.connection.attachment.id }),\n domain: config.domain,\n records: config.records,\n sources: { provider, publicDns },\n }),\n ).pipe(\n Effect.tap((observation) => Effect.sync(() => get.set(state, observation))),\n Effect.catch((error) =>\n Effect.sync(() =>\n get.set(\n state,\n State.Failed({\n failure: failureFromError(error),\n ...(previous === undefined ? {} : { previous }),\n }),\n ),\n ),\n ),\n Effect.asVoid,\n );\n });\n return { command: observe, state };\n }, [config.connection?.attachment.id, config.domain, provider, publicDns, recordKey, runtime]);\n}\n\nexport function useController(config: ObserveConfig): Controller {\n const model = useModel(config);\n const state = useAtomValue(model.state);\n const dispatch = useAtomSet(model.command);\n const observe = () => dispatch(Command.Observe());\n const reset = () => dispatch(Command.Reset());\n return { observe, reset, state };\n}\n\nconst evidenceNote = (evidence: Transport.ObservationEvidence): string | undefined => {\n switch (evidence._tag) {\n case \"Mismatch\":\n case \"Unavailable\":\n return evidence.message;\n case \"Found\":\n case \"Missing\":\n return undefined;\n default: {\n const _exhaustive: never = evidence;\n return _exhaustive;\n }\n }\n};\n\nconst observationGroups = (\n observation: Transport.Observation,\n): ReadonlyArray<{\n readonly evidence: ReadonlyArray<Transport.ObservationEvidence>;\n readonly label: string;\n}> =>\n [\n { evidence: observation.provider, label: \"Provider\" },\n { evidence: observation.publicDns, label: \"Public DNS\" },\n ].filter((group) => group.evidence.length > 0);\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"verification-status\", \"data-state\": status },\n );\n}\n\nexport function Evidence({ observation }: { readonly observation: Transport.Observation }) {\n return (\n <div data-domainkit-part=\"observation-list\">\n {observationGroups(observation).map((group) => (\n <section data-domainkit-part=\"observation-group\" key={group.label}>\n <h3 data-domainkit-part=\"observation-source\">{group.label}</h3>\n <ul>\n {group.evidence.map((evidence, index) => {\n const note = evidenceNote(evidence);\n return (\n <li key={`${evidence._tag}-${evidence.recordId}-${index}`}>\n <div data-domainkit-part=\"observation-row\">\n <span data-domainkit-part=\"observation-record\">{evidence.recordId}</span>\n <RecordStatus evidence={evidence} />\n </div>\n {note === undefined ? null : <p data-domainkit-part=\"observation-note\">{note}</p>}\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n if (state._tag !== \"Failed\") return null;\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state.failure.message}\n </p>\n );\n}\n\nexport interface ObserveActionProps extends PartProps<\n \"button\",\n { readonly status: State[\"_tag\"] }\n> {\n readonly controller: Controller;\n}\n\nexport function ObserveAction({ controller, ...props }: ObserveActionProps) {\n const { messages } = useDomainKit();\n const observing = controller.state._tag === \"Observing\";\n return usePart(\n \"button\",\n props,\n { status: controller.state._tag },\n {\n \"aria-busy\": observing,\n children: messages.checkDns,\n \"data-domainkit-part\": \"observe-action\",\n \"data-loading\": observing ? \"\" : undefined,\n disabled: observing,\n onClick: () => controller.observe(),\n type: \"button\",\n },\n );\n}\n\nexport interface StatusProps extends Omit<RootProps, \"status\"> {\n readonly config: ObserveConfig;\n}\n\nexport function Status({ config, ...props }: StatusProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const controller = useController(config);\n const state = controller.state;\n const observation =\n state._tag === \"Observation\"\n ? state\n : state._tag === \"Observing\" || state._tag === \"Failed\"\n ? state.previous\n : undefined;\n return (\n <Root status={state._tag} {...props}>\n <BasePopover.Root>\n <BasePopover.Trigger render={<ObserveAction controller={controller} />} />\n <BasePopover.Portal container={portalContainer}>\n <BasePopover.Positioner\n align=\"end\"\n data-domainkit-part=\"verification-positioner\"\n sideOffset={6}\n >\n <BasePopover.Popup\n aria-label={messages.checkDns}\n aria-busy={state._tag === \"Observing\"}\n data-color-scheme={colorScheme}\n data-domainkit-part=\"verification-popover\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <BasePopover.Arrow data-domainkit-part=\"verification-arrow\" />\n {state._tag === \"Observing\" ? (\n <p data-domainkit-part=\"verification-progress\" role=\"status\">\n {messages.checkingDns}\n </p>\n ) : null}\n {observation === undefined ? null : <Evidence observation={observation} />}\n <Outcome state={state} />\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n </Root>\n );\n}\n\nexport type Observation = Transport.Observation;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport type { Transport } from \"domainkit\";\nimport { useRef, useState, type RefObject } from \"react\";\n\nimport * as Cleanup from \"./cleanup.tsx\";\nimport * as Connection from \"./connection.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport * as Provisioning from \"./provisioning.tsx\";\nimport * as Records from \"./records.tsx\";\nimport * as Verification from \"./verification.tsx\";\n\nexport interface FlowProps {\n readonly domain: string;\n readonly receiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Flow({ domain, receiptId, records }: FlowProps) {\n const controller = Connection.useController(domain);\n const state = controller.state;\n const connected =\n state._tag === \"Connected\" ? state : state._tag === \"Detaching\" ? state.snapshot : undefined;\n return (\n <Connection.Root status={state._tag}>\n {state._tag === \"Connected\" || state._tag === \"Detaching\" ? (\n <ConnectedCard\n connection={state._tag === \"Connected\" ? state : state.snapshot}\n controller={controller}\n {...(receiptId === undefined ? {} : { initialReceiptId: receiptId })}\n records={records}\n status={state._tag}\n />\n ) : (\n <AvailableCard controller={controller} state={state} />\n )}\n <Records.Table records={records} />\n <Verification.Status\n config={{\n ...(connected === undefined ? {} : { connection: connected }),\n domain,\n records,\n }}\n />\n </Connection.Root>\n );\n}\n\nfunction AvailableCard({\n controller,\n state,\n}: {\n readonly controller: Connection.Controller;\n readonly state: Exclude<Connection.State, Transport.Connected>;\n}) {\n const { messages } = useDomainKit();\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Connection.Card status={state._tag}>\n <Connection.CardIdentity status={state._tag}>\n {snapshot === undefined ? null : <Provider.Mark provider={snapshot.provider} />}\n <Connection.Status state={state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={state._tag}>\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <Connection.RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <Connection.ConnectTrigger\n disabled={state._tag === \"Submitting\" || state._tag === \"Redirecting\"}\n provider={snapshot.provider}\n >\n {messages.connectProvider(snapshot.provider.name)}\n </Connection.ConnectTrigger>\n <Connection.Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ConnectedCard({\n connection,\n controller,\n initialReceiptId,\n records,\n status,\n}: {\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly initialReceiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly status: \"Connected\" | \"Detaching\";\n}) {\n const [receipt, setReceipt] = useState({\n host: initialReceiptId,\n value: initialReceiptId,\n });\n if (receipt.host !== initialReceiptId) {\n setReceipt({ host: initialReceiptId, value: initialReceiptId });\n }\n const receiptId = receipt.host === initialReceiptId ? receipt.value : initialReceiptId;\n const disabled = status === \"Detaching\";\n const actionsTriggerRef = useRef<HTMLButtonElement>(null);\n return (\n <Connection.Card status={status}>\n <Connection.CardIdentity status={status}>\n <Provider.Mark provider={connection.provider} />\n <Connection.Status state={status === \"Connected\" ? connection : controller.state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={status}>\n <Provisioning.Flow\n connection={connection}\n onApplied={(result) => setReceipt({ host: initialReceiptId, value: result.receiptId })}\n records={records}\n showRecords={false}\n />\n {receiptId === undefined ? (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n />\n ) : (\n <ProviderActionsWithCleanup\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n key={receiptId}\n onCleaned={() => setReceipt({ host: initialReceiptId, value: undefined })}\n receiptId={receiptId}\n />\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ProviderActionsWithCleanup({\n actionsTriggerRef,\n connection,\n controller,\n disabled,\n onCleaned,\n receiptId,\n}: {\n readonly actionsTriggerRef: RefObject<HTMLButtonElement | null>;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleaned: () => void;\n readonly receiptId: string;\n}) {\n const [cleaned, setCleaned] = useState(false);\n const cleanup = Cleanup.useController(connection, receiptId, (result) => {\n if (result._tag === \"Cleaned\") setCleaned(true);\n });\n return (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n cleanup={cleanup}\n connection={connection}\n controller={controller}\n disabled={disabled}\n onCleanupCloseComplete={() => {\n if (cleaned) onCleaned();\n }}\n />\n );\n}\n\nfunction ProviderActions({\n actionsTriggerRef: actionsTriggerRefProp,\n cleanup,\n connection,\n controller,\n disabled,\n onCleanupCloseComplete,\n}: {\n readonly actionsTriggerRef?: RefObject<HTMLButtonElement | null>;\n readonly cleanup?: Cleanup.Controller;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleanupCloseComplete?: () => void;\n}) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const fallbackActionsTriggerRef = useRef<HTMLButtonElement>(null);\n const actionsTriggerRef = actionsTriggerRefProp ?? fallbackActionsTriggerRef;\n const [menuOpen, setMenuOpen] = useState(false);\n const [disconnectOpen, setDisconnectOpen] = useState(false);\n return (\n <>\n <BaseMenu.Root disabled={disabled} modal={false} onOpenChange={setMenuOpen} open={menuOpen}>\n <BaseMenu.Trigger\n aria-label={messages.moreActions}\n data-domainkit-part=\"actions-trigger\"\n ref={actionsTriggerRef}\n >\n <span aria-hidden=\"true\">⋯</span>\n </BaseMenu.Trigger>\n <BaseMenu.Portal container={portalContainer} keepMounted>\n <BaseMenu.Positioner align=\"end\" sideOffset={6}>\n <BaseMenu.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"actions-menu\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n {cleanup === undefined ? null : (\n <>\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => cleanup.plan());\n }}\n render={<button type=\"button\" />}\n >\n {messages.reviewCleanup}\n </BaseMenu.Item>\n <BaseMenu.Separator data-domainkit-part=\"actions-separator\" />\n </>\n )}\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n data-tone=\"danger\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => setDisconnectOpen(true));\n }}\n render={<button type=\"button\" />}\n >\n {messages.disconnectDomain}\n </BaseMenu.Item>\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n {cleanup === undefined ? null : (\n <Cleanup.Dialog\n controller={cleanup}\n onOpenChangeComplete={(open) => {\n if (!open) {\n onCleanupCloseComplete?.();\n queueMicrotask(() => actionsTriggerRef.current?.focus());\n }\n }}\n trigger={null}\n />\n )}\n <Connection.DisconnectDialog\n connection={connection}\n controller={controller}\n onOpenChange={(open) => {\n setDisconnectOpen(open);\n if (!open) queueMicrotask(() => actionsTriggerRef.current?.focus());\n }}\n open={disconnectOpen}\n trigger={null}\n />\n </>\n );\n}\n","import { DomainName, Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\n\nexport interface FakeOptions {\n readonly connect?: Transport.ConnectionResult;\n readonly inspect:\n | Transport.ConnectionSnapshot\n | FakeFailure\n | ReadonlyArray<Transport.ConnectionSnapshot | FakeFailure>;\n readonly attach?: Transport.Connected;\n readonly detach?: Transport.DetachResult;\n readonly plan?: Transport.ProvisioningPlan;\n readonly apply?: Transport.ApplyResult;\n readonly observe?: Transport.Observation;\n readonly cleanupPlan?: Transport.CleanupPlan;\n readonly cleanupApply?: Transport.CleanupResult;\n}\n\ninterface FakeFailure {\n readonly _tag: \"Failure\";\n readonly message: string;\n readonly operation?: string;\n readonly retry: Transport.Failure[\"retry\"];\n}\n\nexport interface FakeTransport extends Transport.AsyncInterface, Layer.Layer<Transport.Service> {\n readonly calls: {\n readonly attach: Array<Transport.AttachInput>;\n readonly connect: Array<Transport.ConnectInput>;\n readonly detach: Array<Transport.DetachInput>;\n readonly inspect: Array<Transport.InspectInput>;\n readonly plan: Array<Transport.ProvisioningPlanInput>;\n readonly apply: Array<Transport.ProvisioningApplyInput>;\n readonly observe: Array<Transport.ObserveInput>;\n readonly cleanupPlan: Array<Transport.CleanupPlanInput>;\n readonly cleanupApply: Array<Transport.CleanupApplyInput>;\n };\n}\n\nexport const provider = (overrides: Partial<Transport.Provider> = {}): Transport.Provider => ({\n authentication: [\n { _tag: \"OAuth\", label: \"Continue with OAuth\" },\n { _tag: \"Token\", label: \"Connect with token\", placeholder: \"Paste API token\" },\n ],\n id: \"cloudflare\",\n name: \"Cloudflare\",\n ...overrides,\n});\n\nexport const target = (\n overrides: Partial<Transport.ProviderTarget> = {},\n): Transport.ProviderTarget => ({\n accountId: \"account-1\",\n accountKind: \"account\",\n zoneId: \"zone-1\",\n zoneName: DomainName.parse(\"example.com\"),\n ...overrides,\n});\n\nexport const connection = (\n overrides: Partial<Transport.ProviderConnection> = {},\n): Transport.ProviderConnection => ({\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n id: \"connection-1\",\n method: \"oauth2\",\n ownerId: \"organization-1\",\n providerId: \"cloudflare\",\n status: \"active\",\n ...overrides,\n});\n\nexport const attachment = (\n overrides: Partial<Transport.DomainAttachment> = {},\n): Transport.DomainAttachment => ({\n connectionId: \"connection-1\",\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n domain: DomainName.parse(\"mail.example.com\"),\n id: \"attachment-1\",\n target: target(),\n ...overrides,\n});\n\nexport const connected = (overrides: Partial<Transport.Connected> = {}): Transport.Connected => ({\n _tag: \"Connected\",\n attachment: attachment(),\n connection: connection(),\n provider: provider(),\n ...overrides,\n});\n\nexport function makeFakeTransport(options: FakeOptions): FakeTransport {\n const calls: FakeTransport[\"calls\"] = {\n apply: [],\n attach: [],\n cleanupApply: [],\n cleanupPlan: [],\n connect: [],\n detach: [],\n inspect: [],\n observe: [],\n plan: [],\n };\n const inspections = Array.isArray(options.inspect) ? [...options.inspect] : [options.inspect];\n const transport: Transport.AsyncInterface = {\n cleanup: {\n apply: async (input) => {\n calls.cleanupApply.push(input);\n return (\n options.cleanupApply ?? {\n _tag: \"Cleaned\",\n operationId: \"cleanup-operation-1\",\n results: [],\n }\n );\n },\n plan: async (input) => {\n calls.cleanupPlan.push(input);\n return (\n options.cleanupPlan ?? {\n _tag: \"CleanupPlan\",\n digest: \"cleanup-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: [],\n }\n );\n },\n },\n connection: {\n connect: async (input) => {\n calls.connect.push(input);\n return (\n options.connect ?? {\n _tag: \"Connected\",\n attachment: attachment({ domain: DomainName.parse(input.domain) }),\n connection: connection(),\n provider: provider(),\n }\n );\n },\n inspect: async (input) => {\n calls.inspect.push(input);\n const snapshot = inspections.shift() ?? inspections.at(-1) ?? options.inspect;\n if (Array.isArray(snapshot)) throw new Error(\"Fake inspection sequence is empty\");\n if (snapshot._tag === \"Failure\")\n throw new Transport.Failure({\n message: snapshot.message,\n operation: snapshot.operation ?? \"connection.inspect\",\n retry: snapshot.retry,\n });\n return snapshot;\n },\n attach: async (input) => {\n calls.attach.push(input);\n return (\n options.attach ?? {\n _tag: \"Connected\",\n attachment: attachment({\n connectionId: input.connectionId,\n domain: DomainName.parse(input.domain),\n target: input.target,\n }),\n connection: connection({ id: input.connectionId }),\n provider: provider(),\n }\n );\n },\n detach: async (input) => {\n calls.detach.push(input);\n return (\n options.detach ?? {\n _tag: \"Detached\",\n attachment: attachment(),\n connection: connection(),\n remainingAttachments: 0,\n }\n );\n },\n },\n provisioning: {\n apply: async (input) => {\n calls.apply.push(input);\n return (\n options.apply ?? {\n _tag: \"Applied\",\n operationId: \"apply-operation-1\",\n receiptId: \"receipt-1\",\n results: [],\n }\n );\n },\n plan: async (input) => {\n calls.plan.push(input);\n return (\n options.plan ?? {\n _tag: \"Plan\",\n digest: \"plan-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: input.records.map((record) => ({\n _tag: \"Create\" as const,\n id: `create-${record.id}`,\n record,\n })),\n }\n );\n },\n },\n verification: {\n observe: async (input) => {\n calls.observe.push(input);\n return (\n options.observe ?? {\n _tag: \"Observation\",\n provider: input.sources.provider\n ? input.records.map((record) => ({ _tag: \"Found\" as const, recordId: record.id }))\n : [],\n publicDns: input.sources.publicDns\n ? input.records.map((record) => ({ _tag: \"Found\" as const, recordId: record.id }))\n : [],\n }\n );\n },\n },\n };\n return Object.assign(Transport.layerFromAsync(transport), transport, { calls });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["Root","mergeMessages","leafPart","Value","Priority","Root","State","Command","useModel","LifecycleEvent","useController","Root","Outcome","Dialog","BaseAlertDialog","Operations.List","Flow","State","Command","useModel","LifecycleEvent","useController","Root","Status","BaseDialog","Provider.Mark","Dialog","Flow","RetryAction","Card","BaseAlertDialog","Status","Root","State","Command","useModel","LifecycleEvent","useController","Root","Outcome","Dialog","BaseDialog","Operations.List","Flow","Records.Table","_exhaustive","RecordStatus","BasePopover","Connection.useController","Connection.Root","Records.Table","Verification.Status","Connection.Card","Connection.CardIdentity","Provider.Mark","Connection.Status","Connection.CardActions","Connection.RetryAction","BaseDialog","Connection.ConnectTrigger","Connection.Dialog","Provisioning.Flow","Cleanup.useController","BaseMenu","Cleanup.Dialog","Connection.DisconnectDialog"],"sources":["../src/atom.ts","../src/composition.tsx","../src/icons.tsx","../src/messages.ts","../src/theme.ts","../src/domain-kit.tsx","../src/lifecycle.ts","../src/operations.tsx","../src/cleanup.tsx","../src/provider.tsx","../src/connection.tsx","../src/records.tsx","../src/provisioning.tsx","../src/verification.tsx","../src/domain.tsx","../src/testing.ts"],"sourcesContent":["import * as Data from \"effect/Data\";\nimport type * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { Transport } from \"domainkit\";\n\nexport type Runtime = Atom.AtomRuntime<Transport.Service>;\n\nexport type Failure = Data.TaggedEnum<{\n Failure: {\n readonly message: string;\n readonly operation: string;\n readonly retry: Transport.Failure[\"retry\"];\n };\n}>;\nexport const Failure = Data.taggedEnum<Failure>();\n\nexport const failureFromError = (error: Transport.Failure): Failure =>\n Failure.Failure({\n message: error.message,\n operation: error.operation,\n retry: error.retry,\n });\n\nexport const failureFromDefect = (operation: string, message: string): Failure =>\n Failure.Failure({ message, operation, retry: \"safe\" });\n\nexport const recordsIdentity = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n JSON.stringify(\n records.map(({ id, name, priority, type, value }) => ({ id, name, priority, type, value })),\n );\n","import { useRender } from \"@base-ui/react/use-render\";\nimport type { CSSProperties, ElementType, ReactElement } from \"react\";\n\nexport type ClassName<State> = string | ((state: State) => string | undefined);\nexport type Style<State> = CSSProperties | ((state: State) => CSSProperties | undefined);\n\nexport type PartProps<Tag extends ElementType, State extends Record<string, unknown>> = Omit<\n useRender.ElementProps<Tag>,\n \"className\" | \"style\"\n> & {\n readonly className?: ClassName<State>;\n readonly render?: useRender.RenderProp<State>;\n readonly style?: Style<State>;\n};\n\nexport function usePart<\n Tag extends keyof React.JSX.IntrinsicElements,\n State extends Record<string, unknown>,\n>(\n defaultTagName: Tag,\n componentProps: PartProps<Tag, State>,\n state: State,\n internalProps: Record<string, unknown>,\n): ReactElement {\n const { className, render, style, ...externalProps } = componentProps;\n const parameters: useRender.Parameters<State, Element, undefined> & {\n readonly className?: ClassName<State>;\n readonly style?: Style<State>;\n } = {\n ...(className === undefined ? {} : { className }),\n defaultTagName,\n props: [internalProps, externalProps] as unknown as Record<string, unknown>,\n ...(render === undefined ? {} : { render }),\n state,\n ...(style === undefined ? {} : { style }),\n };\n return useRender(parameters);\n}\n","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\nexport type Icons = {\n readonly copied: ReactNode;\n readonly copy: ReactNode;\n readonly download: ReactNode;\n};\n\nfunction Glyph({ children }: { readonly children: ReactNode }) {\n return (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 24 24\"\n >\n {children}\n </svg>\n );\n}\n\nexport const defaultIcons = {\n copied: (\n <Glyph>\n <path d=\"M20 6 9 17l-5-5\" />\n </Glyph>\n ),\n copy: (\n <Glyph>\n <rect height=\"14\" rx=\"2\" width=\"14\" x=\"8\" y=\"8\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </Glyph>\n ),\n download: (\n <Glyph>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n <path d=\"M12 15V3\" />\n </Glyph>\n ),\n} as const satisfies Icons;\n\nconst IconsContext = createContext<Icons>(defaultIcons);\n\nexport function IconsProvider({\n children,\n icons,\n}: {\n readonly children: ReactNode;\n readonly icons?: Partial<Icons>;\n}) {\n const value = useMemo<Icons>(\n () => ({\n copied: icons?.copied ?? defaultIcons.copied,\n copy: icons?.copy ?? defaultIcons.copy,\n download: icons?.download ?? defaultIcons.download,\n }),\n [icons],\n );\n return <IconsContext.Provider value={value}>{children}</IconsContext.Provider>;\n}\n\nexport function useIcons(): Icons {\n return useContext(IconsContext);\n}\n","export interface Catalog {\n readonly applyCleanup: string;\n readonly applyDns: string;\n readonly applyingDns: string;\n readonly authenticationAlternative: string;\n readonly automaticUnavailable: string;\n readonly cancel: string;\n readonly checkAgain: string;\n readonly checkingDns: string;\n readonly checkDns: string;\n readonly cleanupConsent: string;\n readonly cleanupPartial: string;\n readonly cleaningDns: string;\n readonly connectProvider: (provider: string) => string;\n readonly connected: (provider: string) => string;\n readonly providerAvailable: (provider: string) => string;\n readonly connecting: string;\n readonly close: string;\n readonly detectingProvider: string;\n readonly disconnectDomain: string;\n readonly disconnectConsent: string;\n readonly disconnecting: string;\n readonly detaching: string;\n readonly disconnectTitle: (provider: string) => string;\n readonly domainDisconnected: string;\n readonly dialogDescription: (domain: string) => string;\n readonly dialogTitle: (provider: string) => string;\n readonly openingAuthorization: string;\n readonly moreActions: string;\n readonly noChanges: string;\n readonly planConsent: string;\n readonly planningCleanup: string;\n readonly planningDns: string;\n readonly recordsPartiallyApplied: string;\n readonly reviewCleanup: string;\n readonly reviewDns: string;\n readonly retry: string;\n readonly existingConnection: string;\n readonly targetUnavailable: string;\n readonly attachTarget: (target: string) => string;\n readonly tokenLabel: string;\n}\n\nexport const english: Catalog = {\n applyCleanup: \"Remove records\",\n applyDns: \"Add records\",\n applyingDns: \"Adding records…\",\n authenticationAlternative: \"or\",\n automaticUnavailable: \"Automatic connection is not available for this domain\",\n cancel: \"Cancel\",\n checkAgain: \"Check again\",\n checkingDns: \"Checking DNS…\",\n checkDns: \"Check DNS\",\n cleanupConsent: \"Only records proven by the apply receipt will be deleted.\",\n cleanupPartial: \"Some DNS records could not be deleted. Review and retry safely.\",\n cleaningDns: \"Removing records…\",\n connectProvider: () => \"Connect\",\n connected: (provider) => `${provider} connected`,\n providerAvailable: (provider) => `${provider} manages DNS for this domain`,\n connecting: \"Connecting…\",\n close: \"Close\",\n detectingProvider: \"Detecting DNS provider…\",\n disconnectDomain: \"Disconnect\",\n disconnectConsent:\n \"This domain will be detached from the provider. Existing DNS records will be preserved.\",\n disconnecting: \"Disconnecting…\",\n detaching: \"Detaching domain…\",\n disconnectTitle: (provider) => `Detach ${provider}?`,\n domainDisconnected: \"Domain detached. DNS records were preserved.\",\n dialogDescription: (domain) => `Authorize DNS changes for ${domain}.`,\n dialogTitle: (provider) => `Connect ${provider}`,\n openingAuthorization: \"Opening provider authorization…\",\n moreActions: \"More connection actions\",\n noChanges: \"No changes needed\",\n planConsent: \"Review the exact DNS operations before approving this plan.\",\n planningCleanup: \"Preparing cleanup…\",\n planningDns: \"Preparing DNS changes…\",\n recordsPartiallyApplied: \"Some DNS changes failed. Review and retry safely.\",\n reviewCleanup: \"Remove records\",\n reviewDns: \"Review changes\",\n retry: \"Try again\",\n existingConnection: \"Existing provider connection\",\n targetUnavailable: \"No provider targets are available for this connection.\",\n attachTarget: (target) => `Use ${target}`,\n tokenLabel: \"API token\",\n};\n\nexport const merge = (overrides: Partial<Catalog> = {}): Catalog => ({\n ...english,\n ...overrides,\n});\n","import type { CSSProperties } from \"react\";\n\nexport interface Theme {\n readonly accent?: string;\n readonly accentContrast?: string;\n readonly backdrop?: string;\n readonly background?: string;\n readonly border?: string;\n readonly danger?: string;\n readonly dangerContrast?: string;\n readonly fill?: string;\n readonly fontFamily?: string;\n readonly muted?: string;\n readonly radius?: string;\n readonly shadow?: string;\n readonly success?: string;\n readonly text?: string;\n}\n\nconst variables = {\n accent: \"--domainkit-accent\",\n accentContrast: \"--domainkit-accent-contrast\",\n backdrop: \"--domainkit-backdrop\",\n background: \"--domainkit-background\",\n border: \"--domainkit-border\",\n danger: \"--domainkit-danger\",\n dangerContrast: \"--domainkit-danger-contrast\",\n fill: \"--domainkit-fill\",\n fontFamily: \"--domainkit-font-family\",\n muted: \"--domainkit-muted\",\n radius: \"--domainkit-radius\",\n shadow: \"--domainkit-shadow\",\n success: \"--domainkit-success\",\n text: \"--domainkit-text\",\n} as const satisfies Record<keyof Theme, string>;\n\nexport function toStyle(theme: Theme = {}): CSSProperties {\n return Object.fromEntries(\n Object.entries(theme).flatMap(([key, value]) =>\n value === undefined ? [] : [[variables[key as keyof Theme], value]],\n ),\n ) as CSSProperties;\n}\n","import { RegistryProvider } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport {\n createContext,\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n type RefObject,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport type { Icons } from \"./icons.tsx\";\nimport { IconsProvider } from \"./icons.tsx\";\nimport type * as Lifecycle from \"./lifecycle.ts\";\nimport type { Catalog } from \"./messages.ts\";\nimport { merge as mergeMessages } from \"./messages.ts\";\nimport type { Marks } from \"./provider.tsx\";\nimport type { Theme } from \"./theme.ts\";\nimport { toStyle } from \"./theme.ts\";\nimport type { Runtime } from \"./atom.ts\";\n\nexport interface RootState extends Record<string, unknown> {\n readonly colorScheme: \"dark\" | \"inherit\" | \"light\";\n}\n\nexport interface RootProps extends Omit<PartProps<\"div\", RootState>, \"children\"> {\n readonly children: ReactNode;\n readonly colorScheme?: RootState[\"colorScheme\"];\n readonly icons?: Partial<Icons>;\n readonly messages?: Partial<Catalog>;\n readonly marks?: Marks;\n readonly navigate?: (url: string) => void;\n readonly onEvent?: Lifecycle.Listener;\n readonly portalContainer?: HTMLElement | null;\n readonly theme?: Theme;\n readonly transport: Layer.Layer<Transport.Service>;\n}\n\ninterface ContextValue {\n readonly colorScheme: RootState[\"colorScheme\"];\n readonly navigate: (url: string) => void;\n readonly marks: Marks;\n readonly messages: Catalog;\n readonly emit: Lifecycle.Listener;\n readonly portalContainer: RefObject<HTMLElement | null>;\n readonly themeStyle: ReturnType<typeof toStyle>;\n readonly runtime: Runtime;\n}\n\nconst Context = createContext<ContextValue | null>(null);\n\nconst navigateInBrowser = (url: string): void => {\n if (typeof window === \"undefined\") {\n throw new Error(\"DomainKit OAuth navigation requires a browser or a custom navigate function\");\n }\n window.location.assign(url);\n};\n\nconst resolvePortalContainer = (\n container: HTMLElement | null,\n ownerDocument: Document | null,\n): HTMLElement | null => {\n if (container === null || ownerDocument === null) return null;\n return container.ownerDocument === ownerDocument && container.getRootNode() === ownerDocument\n ? container\n : null;\n};\n\nconst usePortalContainer = (container: HTMLElement | null): HTMLElement | null => {\n const ownerDocument = useMemo(() => container?.ownerDocument ?? null, [container]);\n const subscribe = useCallback(\n (notify: () => void) => {\n if (ownerDocument === null || typeof MutationObserver === \"undefined\") return () => {};\n const observer = new MutationObserver(notify);\n observer.observe(ownerDocument, { childList: true, subtree: true });\n return () => observer.disconnect();\n },\n [ownerDocument],\n );\n const getSnapshot = useCallback(\n () => resolvePortalContainer(container, ownerDocument),\n [container, ownerDocument],\n );\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport function Root({\n children,\n colorScheme = \"inherit\",\n icons,\n marks = {},\n messages,\n navigate = navigateInBrowser,\n onEvent,\n portalContainer = null,\n theme,\n transport,\n ...props\n}: RootProps) {\n const runtime = useMemo(() => Atom.runtime(transport), [transport]);\n const onEventRef = useRef(onEvent);\n useLayoutEffect(() => {\n onEventRef.current = onEvent;\n }, [onEvent]);\n const emit = useCallback<Lifecycle.Listener>((event) => {\n try {\n onEventRef.current?.(event);\n } catch {\n // Host observers are best-effort and cannot change a completed mutation's outcome.\n }\n }, []);\n const themeStyle = toStyle(theme);\n const resolvedPortalContainer = usePortalContainer(portalContainer);\n const portalContainerRef = useMemo<RefObject<HTMLElement | null>>(\n () => ({ current: resolvedPortalContainer }),\n [resolvedPortalContainer],\n );\n const content = usePart(\n \"div\",\n props,\n { colorScheme },\n {\n children,\n \"data-color-scheme\": colorScheme,\n \"data-domainkit-root\": \"\",\n style: themeStyle,\n },\n );\n return (\n <RegistryProvider>\n <Context.Provider\n value={{\n colorScheme,\n emit,\n marks,\n messages: mergeMessages(messages),\n navigate,\n portalContainer: portalContainerRef,\n runtime,\n themeStyle,\n }}\n >\n <IconsProvider {...(icons === undefined ? {} : { icons })}>{content}</IconsProvider>\n </Context.Provider>\n </RegistryProvider>\n );\n}\n\nexport function useDomainKit(): ContextValue {\n const value = useContext(Context);\n if (value === null)\n throw new Error(\"DomainKit components must be rendered inside DomainKit.Root\");\n return value;\n}\n","import type { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\n\n/** User-action lifecycle events suitable for host notifications and telemetry. */\nexport type Event = Data.TaggedEnum<{\n ConnectionEstablished: {\n readonly connection: Transport.Connected;\n readonly source: \"attach\" | \"connect\";\n };\n DomainDetached: {\n readonly connection: Transport.Connected;\n readonly result: Transport.DetachResult;\n };\n RecordsApplied: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }>;\n };\n RecordsCleaned: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" }>;\n };\n RecordsPartiallyApplied: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }>;\n };\n RecordsPartiallyCleaned: {\n readonly connection: Transport.Connected;\n readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Partial\" }>;\n };\n}>;\n\nexport const Event = Data.taggedEnum<Event>();\n\nexport type Listener = (event: Event) => void;\n","import type { Transport } from \"domainkit\";\nimport type { ReactElement } from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\n\nexport type Operation =\n | Transport.ProvisioningPlan[\"operations\"][number]\n | Transport.CleanupPlan[\"operations\"][number];\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport const Kind = leafPart(\"span\", \"operation-kind\");\nexport const Type = leafPart(\"strong\", \"operation-type\");\nexport const Record = leafPart(\"span\", \"operation-record\");\nexport const Name = leafPart(\"span\", \"operation-name\");\nexport const Value = leafPart(\"code\", \"operation-value\");\nexport const Priority = leafPart(\"span\", \"operation-priority\");\nexport const Reason = leafPart(\"span\", \"operation-reason\");\n\nexport interface ItemProps extends PartProps<\"li\", { readonly operation: Operation[\"_tag\"] }> {\n readonly operation: Operation;\n}\n\nexport function Item({ operation, ...props }: ItemProps) {\n return usePart(\n \"li\",\n props,\n { operation: operation._tag },\n {\n children: (\n <>\n <Kind>{operation._tag}</Kind> <Type>{operation.record.type}</Type>{\" \"}\n <Record>\n <Name>{operation.record.name}</Name>\n <Value>{operation.record.value}</Value>\n {operation.record.priority === undefined ? null : (\n <Priority>Priority {operation.record.priority}</Priority>\n )}\n {\"reason\" in operation ? <Reason>{operation.reason}</Reason> : null}\n </Record>\n </>\n ),\n \"data-domainkit-part\": \"operation-item\",\n \"data-operation\": operation._tag,\n },\n );\n}\n\nexport interface RootProps extends PartProps<\n \"ul\",\n { readonly count: number; readonly lifecycle: Lifecycle }\n> {\n readonly count?: number;\n readonly lifecycle: Lifecycle;\n}\n\nexport type Lifecycle = \"cleanup\" | \"provisioning\";\n\nexport function Root({ count = 0, lifecycle, ...props }: RootProps) {\n return usePart(\n \"ul\",\n props,\n { count, lifecycle },\n {\n \"data-domainkit-part\":\n lifecycle === \"provisioning\" ? \"plan-operations\" : \"cleanup-operations\",\n \"data-lifecycle\": lifecycle,\n },\n );\n}\n\nexport interface ListProps extends Omit<RootProps, \"children\" | \"count\"> {\n readonly operations: ReadonlyArray<Operation>;\n}\n\nexport function List({ lifecycle, operations, ...props }: ListProps) {\n return (\n <Root count={operations.length} lifecycle={lifecycle} {...props}>\n {operations.map((operation) => (\n <Item key={operation.id} operation={operation} />\n ))}\n </Root>\n );\n}\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Cleaned: { readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" }> };\n Cleaning: { readonly plan: Transport.CleanupPlan };\n Idle: {};\n Partial: { readonly result: Extract<Transport.CleanupResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.CleanupPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.CleanupResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Completion = Extract<Transport.CleanupResult, { readonly _tag: \"Cleaned\" | \"Partial\" }>;\n\nexport function useModel(\n connection: Transport.Connected,\n receiptId: string,\n onCleaned?: (result: Completion) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const onCleanedRef = useRef(onCleaned);\n onCleanedRef.current = onCleaned;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Cleaning\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Cleaning\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.cleanup.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n receiptId,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Blocked\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Cleaning({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.cleanup.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n receiptId,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Cleaned\") {\n get.set(state, State.Cleaned({ result }));\n onCleanedRef.current?.(result);\n emit(LifecycleEvent.RecordsCleaned({ connection, result }));\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n onCleanedRef.current?.(result);\n emit(LifecycleEvent.RecordsPartiallyCleaned({ connection, result }));\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, receiptId, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n receiptId: string,\n onCleaned?: (result: Completion) => void,\n): Controller {\n const model = useModel(connection, receiptId, onCleaned);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n } as const;\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"cleanup-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.cleanupPartial : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly onOpenChangeComplete?: (open: boolean) => void;\n readonly trigger?: ReactElement | null;\n}\n\nexport function Dialog({ controller, onOpenChange, onOpenChangeComplete, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.CleanupPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Cleaning\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Cleaning\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Cleaned\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) {\n controller.dismiss();\n }\n onOpenChange?.(nextOpen);\n }}\n onOpenChangeComplete={onOpenChangeComplete}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"cleanup-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewCleanup}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"cleanup-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewCleanup}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.cleanupConsent}\n </BaseAlertDialog.Description>\n </div>\n {busy ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningCleanup}\n </p>\n ) : (\n <Operations.List lifecycle=\"cleanup\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"cleanup-apply\" disabled type=\"button\">\n {state._tag === \"Cleaning\" ? messages.cleaningDns : messages.planningCleanup}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n <button\n data-domainkit-part=\"cleanup-apply\"\n disabled={plan.operations.some((operation) => operation._tag === \"Blocked\")}\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {messages.applyCleanup}\n </button>\n </>\n ) : (\n <>\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseAlertDialog.Close>\n <button\n data-domainkit-part=\"cleanup-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onCleaned?: (result: Completion) => void;\n readonly receiptId: string;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({ connection, onCleaned, receiptId, trigger, ...props }: FlowProps) {\n const controller = useController(connection, receiptId, onCleaned);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import { useState, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\n\ntype ProviderDescriptor = Transport.Provider;\n\nexport type Marks = Readonly<\n Record<string, ReactNode | ((provider: ProviderDescriptor) => ReactNode)>\n>;\n\nexport interface MarkState extends Record<string, unknown> {\n readonly providerId: string;\n}\n\nexport interface MarkProps extends PartProps<\"span\", MarkState> {\n readonly provider: ProviderDescriptor;\n}\n\nconst logoHosts: Readonly<Record<string, string>> = {\n amazonroute53: \"route53.com\",\n aws: \"amazonaws.com\",\n bluehost: \"bluehost.com\",\n cloudflare: \"cloudflare.com\",\n digitalocean: \"digitalocean.com\",\n dnsimple: \"dnsimple.com\",\n dreamhost: \"dreamhost.com\",\n dynadot: \"dynadot.com\",\n gandi: \"gandi.net\",\n godaddy: \"godaddy.com\",\n google: \"cloud.google.com\",\n googlecloud: \"cloud.google.com\",\n googleclouddns: \"cloud.google.com\",\n hostgator: \"hostgator.com\",\n hostinger: \"hostinger.com\",\n hover: \"hover.com\",\n ionos: \"ionos.com\",\n namecheap: \"namecheap.com\",\n namecom: \"name.com\",\n netlify: \"netlify.com\",\n ns1: \"ns1.com\",\n ovh: \"ovh.com\",\n porkbun: \"porkbun.com\",\n route53: \"route53.com\",\n spaceship: \"spaceship.com\",\n squarespace: \"squarespace.com\",\n vercel: \"vercel.com\",\n};\n\nconst logoKey = (providerId: string): string =>\n providerId\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"\");\n\nconst logoHost = (providerId: string): string | undefined => logoHosts[logoKey(providerId)];\n\nconst letterMark = (provider: ProviderDescriptor): string =>\n provider.name.trim().charAt(0).toUpperCase() || \"?\";\n\nfunction DefaultMark({ provider }: { readonly provider: ProviderDescriptor }) {\n const host = logoHost(provider.id);\n const [failed, setFailed] = useState(false);\n if (host === undefined || failed) return letterMark(provider);\n return (\n <img\n alt=\"\"\n height={32}\n onError={() => setFailed(true)}\n referrerPolicy=\"no-referrer\"\n src={`https://integrations.sh/logo/${host}?sz=64`}\n width={32}\n />\n );\n}\n\nexport function Mark({ provider, ...props }: MarkProps) {\n const { marks } = useDomainKit();\n const replacement = marks[provider.id];\n const content =\n typeof replacement === \"function\"\n ? replacement(provider)\n : (replacement ?? <DefaultMark key={provider.id} provider={provider} />);\n return usePart(\n \"span\",\n props,\n { providerId: provider.id },\n {\n \"aria-label\": provider.name,\n children: content,\n \"data-domainkit-part\": \"provider-mark\",\n \"data-domainkit-provider\": logoKey(provider.id),\n role: \"img\",\n },\n );\n}\n\nexport type { ProviderDescriptor as Provider };\nexport type MarkElementProps = ComponentPropsWithoutRef<\"span\">;\n","import { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport * as AsyncResult from \"effect/unstable/reactivity/AsyncResult\";\nimport {\n useMemo,\n useState,\n type ComponentPropsWithoutRef,\n type FormEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport { failureFromDefect, failureFromError, type Failure } from \"./atom.ts\";\n\ntype LocalState = Data.TaggedEnum<{\n Detaching: { readonly snapshot: Transport.Connected };\n Loading: {};\n Redirecting: { readonly snapshot: Disconnected };\n Submitting: { readonly snapshot: Disconnected };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.ConnectionSnapshot | Failure;\n\ntype Disconnected = Extract<Transport.ConnectionSnapshot, { readonly _tag: \"Disconnected\" }>;\n\nconst sameTarget = (left: Transport.ProviderTarget, right: Transport.ProviderTarget): boolean =>\n left.accountId === right.accountId &&\n left.accountKind === right.accountKind &&\n left.zoneId === right.zoneId &&\n left.zoneName === right.zoneName;\n\nexport interface Controller {\n readonly attach: (\n connection: Transport.ReusableConnection,\n target: Transport.ProviderTarget,\n ) => void;\n readonly connect: (method: Transport.Method) => void;\n readonly detach: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Attach: { readonly connectionId: string; readonly target: Transport.ProviderTarget };\n Connect: { readonly method: Transport.Method };\n Detach: {};\n Retry: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(domain: string): Model {\n const { emit, navigate, runtime } = useDomainKit();\n return useMemo(() => {\n const actionState = Atom.make<State | undefined>(undefined);\n const inspect = runtime.atom(\n Effect.flatMap(Transport.Service, (transport) => transport.connection.inspect({ domain })),\n );\n const state = Atom.make((get): State => {\n const action = get(actionState);\n if (action !== undefined) return action;\n const inspection = get(inspect);\n return AsyncResult.matchWithError(inspection, {\n onDefect: () => failureFromDefect(\"connection.inspect\", \"Provider detection failed\"),\n onError: failureFromError,\n onInitial: () => State.Loading(),\n onSuccess: ({ value }) => value,\n });\n });\n const command = runtime.fn<Command>()((input, get) => {\n if (input._tag === \"Retry\") {\n get.set(actionState, undefined);\n get.refresh(inspect);\n return Effect.void;\n }\n const snapshot = get(state);\n if (input._tag === \"Detach\") {\n if (snapshot._tag !== \"Connected\") return Effect.void;\n get.set(actionState, State.Detaching({ snapshot }));\n return Effect.flatMap(Transport.Service, (transport) =>\n Effect.flatMap(\n transport.connection.detach({\n attachmentId: snapshot.attachment.id,\n preserveDns: true,\n }),\n (result) => {\n const detached: Disconnected = Transport.Disconnected({\n domain: snapshot.attachment.domain,\n provider: snapshot.provider,\n reusableConnections: [],\n });\n return Effect.flatMap(\n Effect.sync(() => {\n get.set(actionState, detached);\n emit(\n LifecycleEvent.DomainDetached({\n connection: snapshot,\n result,\n }),\n );\n }),\n () =>\n transport.connection.inspect({ domain }).pipe(\n Effect.catch(() => Effect.succeed(detached)),\n Effect.tap((refreshed) => Effect.sync(() => get.set(actionState, refreshed))),\n ),\n );\n },\n ),\n ).pipe(\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (snapshot._tag !== \"Disconnected\") return Effect.void;\n const complete = (\n request: Effect.Effect<Transport.ConnectionResult, Transport.Failure, Transport.Service>,\n source: \"connect\" | \"attach\",\n ) =>\n request.pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Redirect\") {\n get.set(actionState, State.Redirecting({ snapshot }));\n navigate(result.authorizationUrl);\n } else {\n get.set(actionState, result);\n emit(\n LifecycleEvent.ConnectionEstablished({\n connection: result,\n source,\n }),\n );\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(actionState, failureFromError(error)))),\n Effect.asVoid,\n );\n if (input._tag === \"Attach\") {\n const reusableConnection = snapshot.reusableConnections.find(\n ({ connection }) => connection.id === input.connectionId,\n );\n if (reusableConnection === undefined) return Effect.void;\n const target = reusableConnection.targets.find((candidate) =>\n sameTarget(candidate, input.target),\n );\n if (target === undefined) return Effect.void;\n get.set(actionState, State.Submitting({ snapshot }));\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.attach({\n connectionId: input.connectionId,\n domain,\n target,\n }),\n ),\n \"attach\",\n );\n }\n get.set(actionState, State.Submitting({ snapshot }));\n if (input._tag === \"Connect\") {\n return complete(\n Effect.flatMap(Transport.Service, (transport) =>\n transport.connection.connect({\n domain,\n method: input.method,\n providerId: snapshot.provider.id,\n }),\n ),\n \"connect\",\n );\n }\n return Effect.void;\n });\n return { command, state };\n }, [domain, emit, navigate, runtime]);\n}\n\nexport function useController(domain: string): Controller {\n const model = useModel(domain);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n attach: (connection, target) =>\n execute(Command.Attach({ connectionId: connection.connection.id, target })),\n connect: (method) => execute(Command.Connect({ method })),\n detach: () => execute(Command.Detach()),\n retry: () => execute(Command.Retry()),\n state,\n };\n}\n\nexport interface RootState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface RootProps extends PartProps<\"div\", RootState> {\n readonly status?: State[\"_tag\"];\n}\n\nexport function Root({ children, status = \"Loading\", ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n {\n children,\n \"data-domainkit-part\": \"connection-root\",\n },\n );\n}\n\nexport interface StatusState extends Record<string, unknown> {\n readonly status: State[\"_tag\"];\n}\n\nexport interface StatusProps extends PartProps<\"div\", StatusState> {\n readonly state: State;\n}\n\nexport function Status({ children, state, ...props }: StatusProps) {\n const { messages } = useDomainKit();\n const text =\n state._tag === \"Loading\"\n ? messages.detectingProvider\n : state._tag === \"Connected\"\n ? messages.connected(state.provider.name)\n : state._tag === \"Detaching\"\n ? messages.detaching\n : state._tag === \"Unsupported\"\n ? messages.automaticUnavailable\n : state._tag === \"Failure\"\n ? state.message\n : state._tag === \"Redirecting\"\n ? messages.openingAuthorization\n : state._tag === \"Submitting\"\n ? messages.connecting\n : messages.providerAvailable(state.provider.name);\n return usePart(\n \"div\",\n props,\n { status: state._tag },\n {\n children: children ?? text,\n \"data-domainkit-part\": \"connection-status\",\n \"data-state\": state._tag,\n },\n );\n}\n\nexport interface TriggerProps extends Omit<\n ComponentPropsWithoutRef<typeof BaseDialog.Trigger>,\n \"children\"\n> {\n readonly children: ReactNode;\n}\n\nexport interface ConnectTriggerProps extends Omit<TriggerProps, \"children\"> {\n readonly children?: ReactNode;\n readonly provider: Provider.Provider;\n}\n\nexport function Trigger({ children, ...props }: TriggerProps) {\n return (\n <BaseDialog.Trigger data-domainkit-part=\"connection-trigger\" {...props}>\n {children}\n </BaseDialog.Trigger>\n );\n}\n\nexport function ConnectTrigger({ children, provider, ...props }: ConnectTriggerProps) {\n const { messages } = useDomainKit();\n return (\n <Trigger {...props} data-domainkit-recipe=\"connect\">\n {children ?? (\n <>\n <Provider.Mark aria-hidden=\"true\" provider={provider} />\n {messages.connectProvider(provider.name)}\n </>\n )}\n </Trigger>\n );\n}\n\nexport interface ActionState extends Record<string, unknown> {\n readonly authentication: \"attach\" | \"integration\" | \"oauth\" | \"token\";\n}\n\nexport interface OAuthActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function OAuthAction({ controller, label, ...props }: OAuthActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"oauth\" },\n {\n children: label,\n \"data-domainkit-part\": \"oauth-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.OAuth()),\n type: \"button\",\n },\n );\n}\n\nexport interface IntegrationActionProps extends PartProps<\"button\", ActionState> {\n readonly controller: Controller;\n readonly label: string;\n}\n\nexport function IntegrationAction({ controller, label, ...props }: IntegrationActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"integration\" },\n {\n children: label,\n \"data-domainkit-part\": \"integration-connect\",\n disabled: pending,\n onClick: () => controller.connect(Transport.Method.Integration()),\n type: \"button\",\n },\n );\n}\n\nexport interface AttachActionProps extends PartProps<\"button\", ActionState> {\n readonly connection: Transport.ReusableConnection;\n readonly controller: Controller;\n readonly label: string;\n readonly target: Transport.ProviderTarget;\n}\n\nexport function AttachAction({\n connection,\n controller,\n label,\n target,\n ...props\n}: AttachActionProps) {\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n return usePart(\n \"button\",\n props,\n { authentication: \"attach\" },\n {\n children: label,\n \"data-domainkit-part\": \"attach-target\",\n disabled: pending,\n onClick: () => controller.attach(connection, target),\n type: \"button\",\n },\n );\n}\n\nexport interface TokenActionProps extends Omit<PartProps<\"form\", ActionState>, \"method\"> {\n readonly controller: Controller;\n readonly method: Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }>;\n}\n\nexport function TokenAction({ controller, method, ...props }: TokenActionProps) {\n const { messages } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const [token, setToken] = useState(\"\");\n const [parameters, setParameters] = useState<Readonly<Record<string, string>>>({});\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (token.length > 0) {\n const populated = Object.fromEntries(\n Object.entries(parameters).filter(([, value]) => value.length > 0),\n );\n controller.connect(\n Transport.Method.Token({\n token,\n ...(Object.keys(populated).length === 0 ? {} : { parameters: populated }),\n }),\n );\n }\n };\n const missingRequiredParameter = method.parameters?.some(\n (parameter) => parameter.required === true && !parameters[parameter.key],\n );\n return usePart(\n \"form\",\n props,\n { authentication: \"token\" },\n {\n children: (\n <>\n {method.parameters?.map((parameter) => (\n <label key={parameter.key}>\n {parameter.label}\n <input\n name={parameter.key}\n disabled={pending}\n onChange={(event) => {\n const value = event.currentTarget.value;\n setParameters((current) => ({\n ...current,\n [parameter.key]: value,\n }));\n }}\n placeholder={parameter.placeholder}\n required={parameter.required}\n type=\"text\"\n value={parameters[parameter.key] ?? \"\"}\n />\n {parameter.description === undefined ? null : <small>{parameter.description}</small>}\n </label>\n ))}\n <label>\n {messages.tokenLabel}\n <input\n autoComplete=\"off\"\n disabled={pending}\n name=\"token\"\n onChange={(event) => setToken(event.currentTarget.value)}\n placeholder={method.placeholder}\n type=\"password\"\n value={token}\n />\n </label>\n <button\n disabled={pending || token.length === 0 || missingRequiredParameter === true}\n type=\"submit\"\n >\n {method.label}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"token-connect\",\n onSubmit: submit,\n },\n );\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly snapshot: Disconnected;\n}\n\nexport const targetLabel = (target: Transport.ProviderTarget): string =>\n `${target.evidence?.accountName ?? target.accountId} · ${target.zoneName}`;\n\nexport function Dialog({ controller, snapshot }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const pending = controller.state._tag === \"Submitting\" || controller.state._tag === \"Redirecting\";\n const integrationMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Integration\" }> =>\n method._tag === \"Integration\",\n );\n const oauthMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"OAuth\" }> =>\n method._tag === \"OAuth\",\n );\n const tokenMethods = snapshot.provider.authentication.filter(\n (method): method is Extract<Transport.AuthenticationMethod, { readonly _tag: \"Token\" }> =>\n method._tag === \"Token\",\n );\n const hasProviderAccountPath =\n integrationMethods.length > 0 ||\n oauthMethods.length > 0 ||\n snapshot.reusableConnections.length > 0;\n return (\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-domainkit-part=\"connection-dialog\"\n data-domainkit-root=\"\"\n data-color-scheme={colorScheme}\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <Provider.Mark provider={snapshot.provider} />\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.dialogTitle(snapshot.provider.name)}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.dialogDescription(snapshot.domain)}\n </BaseDialog.Description>\n </div>\n {pending ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {hasProviderAccountPath ? (\n <div data-domainkit-part=\"provider-authentication\">\n {integrationMethods.map((method) => (\n <IntegrationAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {oauthMethods.map((method) => (\n <OAuthAction controller={controller} key={method._tag} label={method.label} />\n ))}\n {snapshot.reusableConnections.map((connection) => (\n <section\n data-connection-id={connection.connection.id}\n data-domainkit-part=\"reusable-connection\"\n key={connection.connection.id}\n >\n <div data-domainkit-part=\"reusable-connection-heading\">\n <strong>{messages.existingConnection}</strong>\n <span>{connection.connection.providerId}</span>\n </div>\n <div\n data-domainkit-part=\"target-list\"\n data-state={\n connection.targets.length === 0\n ? \"unavailable\"\n : connection.targets.length === 1\n ? \"unique\"\n : \"ambiguous\"\n }\n >\n {connection.targets.length === 0 ? (\n <p data-domainkit-part=\"target-unavailable\">{messages.targetUnavailable}</p>\n ) : (\n connection.targets.map((target) => (\n <AttachAction\n connection={connection}\n controller={controller}\n key={`${target.accountId}:${target.zoneId}`}\n label={messages.attachTarget(targetLabel(target))}\n target={target}\n />\n ))\n )}\n </div>\n </section>\n ))}\n </div>\n ) : null}\n {hasProviderAccountPath && tokenMethods.length > 0 ? (\n <div\n aria-label={messages.authenticationAlternative}\n data-domainkit-part=\"authentication-separator\"\n role=\"separator\"\n >\n <span aria-hidden=\"true\">{messages.authenticationAlternative}</span>\n </div>\n ) : null}\n {tokenMethods.map((method) => (\n <TokenAction controller={controller} key={method._tag} method={method} />\n ))}\n </div>\n {pending ? null : (\n <div data-domainkit-part=\"dialog-footer\">\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n </div>\n )}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"children\"> {\n readonly domain: string;\n}\n\nexport function Flow({ domain, ...props }: FlowProps) {\n const controller = useController(domain);\n const state = controller.state;\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Root {...props} status={state._tag}>\n <Status state={state} />\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <ConnectTrigger provider={snapshot.provider} />\n <Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Root>\n );\n}\n\nexport interface RetryActionProps extends PartProps<\"button\", { readonly status: \"Failure\" }> {\n readonly controller: Controller;\n readonly kind?: \"after-user-action\" | \"retry\";\n}\n\nexport function RetryAction({ controller, kind = \"retry\", ...props }: RetryActionProps) {\n const { messages } = useDomainKit();\n return usePart(\n \"button\",\n props,\n { status: \"Failure\" },\n {\n children: kind === \"after-user-action\" ? messages.checkAgain : messages.retry,\n \"data-domainkit-part\": \"connection-retry\",\n onClick: controller.retry,\n type: \"button\",\n },\n );\n}\n\nexport interface CardProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Card({ status, ...props }: CardProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-card\", \"data-state\": status },\n );\n}\n\nexport interface CardIdentityProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardIdentity({ status, ...props }: CardIdentityProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-identity\", \"data-state\": status },\n );\n}\n\nexport interface CardActionsProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function CardActions({ status, ...props }: CardActionsProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"connected-actions\", \"data-state\": status },\n );\n}\n\nexport interface DisconnectDialogProps {\n readonly connection: Transport.Connected;\n readonly controller: Controller;\n readonly onOpenChange?: (open: boolean) => void;\n readonly open?: boolean;\n readonly trigger?: ReactElement | null;\n}\n\nexport function DisconnectDialog({\n connection,\n controller,\n onOpenChange,\n open: openProp,\n trigger,\n}: DisconnectDialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const [internalOpen, setInternalOpen] = useState(false);\n const open = openProp ?? internalOpen;\n const setOpen = (nextOpen: boolean) => {\n if (openProp === undefined) setInternalOpen(nextOpen);\n onOpenChange?.(nextOpen);\n };\n const detaching = controller.state._tag === \"Detaching\";\n return (\n <BaseAlertDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && detaching) {\n eventDetails.cancel();\n return;\n }\n setOpen(nextOpen);\n }}\n open={open}\n >\n {trigger === null ? null : (\n <BaseAlertDialog.Trigger\n data-domainkit-part=\"disconnect-trigger\"\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.disconnectDomain}\n </BaseAlertDialog.Trigger>\n )}\n <BaseAlertDialog.Portal container={portalContainer}>\n <BaseAlertDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseAlertDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"disconnect-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseAlertDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.disconnectTitle(connection.provider.name)}\n </BaseAlertDialog.Title>\n <BaseAlertDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.disconnectConsent}\n </BaseAlertDialog.Description>\n </div>\n {detaching ? null : (\n <BaseAlertDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseAlertDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {detaching ? null : (\n <BaseAlertDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseAlertDialog.Close>\n )}\n <button\n data-domainkit-part=\"disconnect-action\"\n disabled={detaching}\n onClick={() => controller.detach()}\n type=\"button\"\n >\n {detaching ? messages.detaching : messages.disconnectDomain}\n </button>\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport type Connected = Transport.Connected;\n","import { useEffect, useRef, useState, type ReactElement, type ReactNode } from \"react\";\nimport type { Transport } from \"domainkit\";\n\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useIcons } from \"./icons.tsx\";\n\nexport const copyText = (value: string): Promise<boolean> => {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return Promise.resolve(false);\n }\n return navigator.clipboard.writeText(value).then(\n () => true,\n () => false,\n );\n};\n\nconst downloadText = (filename: string, contents: string): void => {\n if (typeof document === \"undefined\") return;\n const blob = new Blob([contents], { type: \"text/plain;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.download = filename;\n anchor.href = url;\n document.body.append(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n};\n\nconst absoluteDomainName = (value: string): string => (value.endsWith(\".\") ? value : `${value}.`);\n\nconst textEncoder = new TextEncoder();\n\nconst escapeTxtCharacter = (character: string): string => {\n if (character === '\"' || character === \"\\\\\") return `\\\\${character}`;\n const codePoint = character.codePointAt(0);\n if (codePoint !== undefined && (codePoint < 32 || codePoint === 127)) {\n return `\\\\${codePoint.toString().padStart(3, \"0\")}`;\n }\n return character;\n};\n\nconst txtValue = (value: string): string => {\n const chunks: Array<string> = [];\n let chunk = \"\";\n let byteLength = 0;\n for (const character of value) {\n const characterByteLength = textEncoder.encode(character).byteLength;\n if (byteLength + characterByteLength > 255) {\n chunks.push(chunk);\n chunk = \"\";\n byteLength = 0;\n }\n chunk += escapeTxtCharacter(character);\n byteLength += characterByteLength;\n }\n chunks.push(chunk);\n return chunks.map((part) => `\"${part}\"`).join(\" \");\n};\n\nconst srvValue = (value: string): string => {\n const fields = value.trim().split(/\\s+/);\n if (fields.length !== 3) throw new Error(`Invalid SRV value: ${value}`);\n const [weight, port, target] = fields;\n if (weight === undefined || port === undefined || target === undefined) {\n throw new Error(`Invalid SRV value: ${value}`);\n }\n return `${weight} ${port} ${absoluteDomainName(target)}`;\n};\n\nconst zoneValue = (record: Transport.DnsRecord): string => {\n switch (record.type.toUpperCase()) {\n case \"CNAME\":\n case \"MX\":\n case \"NS\":\n case \"PTR\":\n return absoluteDomainName(record.value);\n case \"SRV\":\n return srvValue(record.value);\n case \"TXT\":\n return txtValue(record.value);\n default:\n return record.value;\n }\n};\n\ntype LeafState = Record<string, unknown>;\n\nfunction leafPart<Tag extends keyof React.JSX.IntrinsicElements>(\n defaultTagName: Tag,\n part: string,\n) {\n return function Leaf(props: PartProps<Tag, LeafState>): ReactElement {\n return usePart(defaultTagName, props, {}, { \"data-domainkit-part\": part });\n };\n}\n\nexport interface CopyController {\n readonly copied: boolean;\n readonly copy: () => void;\n}\n\nexport function useCopy(value: string, resetAfter = 2000): CopyController {\n const [copied, setCopied] = useState(false);\n const reset = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => () => clearTimeout(reset.current), []);\n return {\n copied,\n copy: () => {\n void copyText(value).then((ok) => {\n if (!ok) return;\n setCopied(true);\n clearTimeout(reset.current);\n reset.current = setTimeout(() => setCopied(false), resetAfter);\n });\n },\n };\n}\n\nexport interface CopyValueProps extends PartProps<\"span\", { readonly copied: boolean }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly value: string;\n}\n\nexport function CopyValue({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy\",\n value,\n ...props\n}: CopyValueProps) {\n const icons = useIcons();\n const controller = useCopy(value);\n const copied = controller.copied;\n return usePart(\n \"span\",\n props,\n { copied },\n {\n children: (\n <>\n <code>{value}</code>\n <button\n aria-label={`${copied ? copiedLabel : copyLabel} ${value}`}\n data-domainkit-part=\"copy-action\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"idle\"\n >\n {copyIcon ?? icons.copy}\n </span>\n <span\n aria-hidden=\"true\"\n data-domainkit-part=\"copy-glyph\"\n data-icon=\"\"\n data-state=\"done\"\n >\n {copiedIcon ?? icons.copied}\n </span>\n </button>\n </>\n ),\n \"data-copied\": copied ? \"\" : undefined,\n \"data-domainkit-part\": \"copy-value\",\n },\n );\n}\n\nexport interface ZoneFileProps extends PartProps<\"div\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copiedLabel?: string;\n readonly copyIcon?: ReactNode;\n readonly copyLabel?: string;\n readonly domain: string;\n readonly downloadIcon?: ReactNode;\n readonly downloadLabel?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function ZoneFile({\n copiedIcon,\n copiedLabel = \"Copied\",\n copyIcon,\n copyLabel = \"Copy zone\",\n domain,\n downloadIcon,\n downloadLabel = \"Download\",\n records,\n ...props\n}: ZoneFileProps) {\n const icons = useIcons();\n const zone = toZoneFile(records);\n const controller = useCopy(zone);\n const copied = controller.copied;\n return usePart(\n \"div\",\n props,\n { count: records.length },\n {\n children: (\n <>\n <button\n aria-label={copied ? copiedLabel : copyLabel}\n data-domainkit-part=\"zone-copy\"\n onClick={controller.copy}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {copied ? (copiedIcon ?? icons.copied) : (copyIcon ?? icons.copy)}\n </span>\n {copied ? copiedLabel : copyLabel}\n </button>\n <button\n aria-label={downloadLabel}\n data-domainkit-part=\"zone-download\"\n onClick={() => downloadZoneFile(domain, records)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" data-icon=\"inline-start\">\n {downloadIcon ?? icons.download}\n </span>\n {downloadLabel}\n </button>\n </>\n ),\n \"data-domainkit-part\": \"zone-file\",\n },\n );\n}\n\nexport interface StatusProps extends PartProps<\n \"span\",\n { readonly status: Transport.ObservationEvidence[\"_tag\"] }\n> {\n readonly evidence: Transport.ObservationEvidence;\n}\n\nexport function Status({ evidence, ...props }: StatusProps) {\n return usePart(\n \"span\",\n props,\n { status: evidence._tag },\n {\n children: evidence._tag,\n \"data-domainkit-part\": \"record-status\",\n \"data-status\": evidence._tag,\n },\n );\n}\n\nexport interface PriorityProps extends PartProps<\"span\", { readonly priority: number }> {\n readonly priority?: number;\n}\n\nexport function Priority({ children, priority = 0, ...props }: PriorityProps) {\n return usePart(\n \"span\",\n props,\n { priority },\n {\n children: children ?? `Priority ${priority}`,\n \"data-domainkit-part\": \"record-priority\",\n },\n );\n}\n\nexport const Header = leafPart(\"thead\", \"records-header\");\nexport const Body = leafPart(\"tbody\", \"records-body\");\nexport const Footer = leafPart(\"tfoot\", \"records-footer\");\nexport const Row = leafPart(\"tr\", \"records-row\");\nexport const Head = leafPart(\"th\", \"records-head\");\nexport const Cell = leafPart(\"td\", \"records-cell\");\nexport const Caption = leafPart(\"caption\", \"records-caption\");\nexport const Value = leafPart(\"span\", \"record-value\");\nexport const CardHeader = leafPart(\"div\", \"record-card-head\");\nexport const CardTitle = leafPart(\"strong\", \"record-card-title\");\nexport const CardContent = leafPart(\"dl\", \"record-card-content\");\n\nexport interface RootProps extends PartProps<\"table\", { readonly count: number }> {\n readonly count?: number;\n}\n\nexport function Root({ count = 0, ...props }: RootProps) {\n return (\n <div data-domainkit-part=\"records-panel\">\n {usePart(\"table\", props, { count }, { \"data-domainkit-part\": \"records-table\" })}\n </div>\n );\n}\n\nexport interface CardProps extends PartProps<\"section\", { readonly recordId: string }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly record: Transport.DnsRecord;\n}\n\nexport function Card({ copiedIcon, copyIcon, evidence, record, ...props }: CardProps) {\n const matching =\n evidence === undefined ? [] : evidence.filter((item) => item.recordId === record.id);\n return usePart(\n \"section\",\n props,\n { recordId: record.id },\n {\n children: (\n <>\n <CardHeader>\n <CardTitle>{record.type}</CardTitle>\n {matching.map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </CardHeader>\n <CardContent>\n <div>\n <dt>Name</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </dd>\n </div>\n <div>\n <dt>Value</dt>\n <dd>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </dd>\n </div>\n </CardContent>\n </>\n ),\n \"data-domainkit-part\": \"record-card\",\n },\n );\n}\n\nexport interface TableProps extends PartProps<\"table\", { readonly count: number }> {\n readonly copiedIcon?: ReactNode;\n readonly copyIcon?: ReactNode;\n readonly evidence?: ReadonlyArray<Transport.ObservationEvidence>;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Table({ copiedIcon, copyIcon, evidence, records, ...props }: TableProps) {\n const status = evidence !== undefined;\n return (\n <Root count={records.length} {...props}>\n <Header>\n <Row>\n <Head scope=\"col\">Type</Head>\n <Head scope=\"col\">Name</Head>\n <Head scope=\"col\">Value</Head>\n {status ? (\n <Head data-column=\"status\" scope=\"col\">\n Status\n </Head>\n ) : null}\n </Row>\n </Header>\n <Body>\n {records.map((record) => (\n <Row key={record.id}>\n <Cell>{record.type}</Cell>\n <Cell>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.name} />\n </Cell>\n <Cell>\n <Value>\n <CopyValue copiedIcon={copiedIcon} copyIcon={copyIcon} value={record.value} />\n {record.priority === undefined ? null : <Priority priority={record.priority} />}\n </Value>\n </Cell>\n {status ? (\n <Cell data-column=\"status\">\n {evidence\n .filter((item) => item.recordId === record.id)\n .map((item, index) => (\n <Status evidence={item} key={`${item._tag}-${index}`} />\n ))}\n </Cell>\n ) : null}\n </Row>\n ))}\n </Body>\n </Root>\n );\n}\n\nexport const toZoneFile = (records: ReadonlyArray<Transport.DnsRecord>): string =>\n `${records\n .map(\n (record) =>\n `${absoluteDomainName(record.name)} IN ${record.type} ${record.priority === undefined ? \"\" : `${record.priority} `}${zoneValue(record)}`,\n )\n .join(\"\\n\")}\\n`;\n\nexport const downloadZoneFile = (\n domain: string,\n records: ReadonlyArray<Transport.DnsRecord>,\n): void => downloadText(`${domain}.txt`, toZoneFile(records));\n\nexport type DnsRecord = Transport.DnsRecord;\nexport type ObservationEvidence = Transport.ObservationEvidence;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo, useRef, type ReactElement } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Event as LifecycleEvent } from \"./lifecycle.ts\";\nimport * as Operations from \"./operations.tsx\";\nimport * as Records from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Applying: { readonly plan: Transport.ProvisioningPlan };\n Complete: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" }> };\n Idle: {};\n Partial: { readonly result: Extract<Transport.ApplyResult, { readonly _tag: \"Partial\" }> };\n Planning: {};\n Review: { readonly plan: Transport.ProvisioningPlan };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State =\n | LocalState\n | Extract<Transport.ApplyResult, { readonly _tag: \"Stale\" }>\n | Failure;\n\nexport interface Controller {\n readonly apply: () => void;\n readonly dismiss: () => void;\n readonly plan: () => void;\n readonly retry: () => void;\n readonly state: State;\n}\n\nexport type Command = Data.TaggedEnum<{\n Apply: {};\n Dismiss: {};\n Plan: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport function useModel(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Model {\n const { emit, runtime } = useDomainKit();\n const recordKey = recordsIdentity(records);\n const onAppliedRef = useRef(onApplied);\n onAppliedRef.current = onApplied;\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const execute = runtime.fn<Command>()((command, get) => {\n const current = get(state);\n if (command._tag === \"Dismiss\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Idle());\n return Effect.void;\n }\n if (command._tag === \"Plan\") {\n if (current._tag === \"Planning\" || current._tag === \"Applying\") return Effect.void;\n get.set(state, State.Planning());\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.plan({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n records,\n }),\n ).pipe(\n Effect.tap((plan) => Effect.sync(() => get.set(state, State.Review({ plan })))),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n }\n if (\n current._tag !== \"Review\" ||\n current.plan.operations.some((operation) => operation._tag === \"Conflict\")\n )\n return Effect.void;\n const plan = current.plan;\n get.set(state, State.Applying({ plan }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.provisioning.apply({\n attachmentId: connection.attachment.id,\n domain: connection.attachment.domain,\n planDigest: plan.digest,\n }),\n ).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Applied\") {\n get.set(state, State.Complete({ result }));\n emit(LifecycleEvent.RecordsApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else if (result._tag === \"Partial\") {\n get.set(state, State.Partial({ result }));\n emit(LifecycleEvent.RecordsPartiallyApplied({ connection, result }));\n onAppliedRef.current?.(result);\n } else {\n get.set(state, result);\n }\n }),\n ),\n Effect.catch((error) => Effect.sync(() => get.set(state, failureFromError(error)))),\n Effect.asVoid,\n );\n });\n return { command: execute, state };\n }, [connection.attachment.domain, connection.attachment.id, emit, recordKey, runtime]);\n}\n\nexport function useController(\n connection: Transport.Connected,\n records: ReadonlyArray<Transport.DnsRecord>,\n onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void,\n): Controller {\n const model = useModel(connection, records, onApplied);\n const state = useAtomValue(model.state);\n const execute = useAtomSet(model.command);\n\n return {\n apply: () => execute(Command.Apply()),\n dismiss: () => execute(Command.Dismiss()),\n plan: () => execute(Command.Plan()),\n retry: () => execute(Command.Plan()),\n state,\n };\n}\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"provisioning-flow\", \"data-state\": status },\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n const { messages } = useDomainKit();\n if (state._tag === \"Partial\" || state._tag === \"Failure\" || state._tag === \"Stale\") {\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state._tag === \"Partial\" ? messages.recordsPartiallyApplied : state.message}\n </p>\n );\n }\n return null;\n}\n\nexport interface DialogProps {\n readonly controller: Controller;\n readonly trigger?: ReactElement;\n}\n\nexport function Dialog({ controller, trigger }: DialogProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const state = controller.state;\n const planRef = useRef<Transport.ProvisioningPlan | undefined>(undefined);\n if (state._tag === \"Idle\") planRef.current = undefined;\n if (state._tag === \"Review\" || state._tag === \"Applying\") planRef.current = state.plan;\n const plan = planRef.current;\n const busy = state._tag === \"Planning\" || state._tag === \"Applying\";\n const open = state._tag !== \"Idle\" && state._tag !== \"Complete\";\n const isNoopOnly =\n plan !== undefined && plan.operations.every((operation) => operation._tag === \"Noop\");\n return (\n <BaseDialog.Root\n onOpenChange={(nextOpen, eventDetails) => {\n if (!nextOpen && busy) {\n eventDetails.cancel();\n return;\n }\n if (!nextOpen) controller.dismiss();\n }}\n open={open}\n >\n <BaseDialog.Trigger\n data-domainkit-part=\"plan-trigger\"\n disabled={state._tag !== \"Idle\"}\n onClick={() => controller.plan()}\n {...(trigger === undefined ? {} : { render: trigger })}\n >\n {messages.reviewDns}\n </BaseDialog.Trigger>\n <BaseDialog.Portal container={portalContainer}>\n <BaseDialog.Backdrop\n data-color-scheme={colorScheme}\n data-domainkit-part=\"dialog-backdrop\"\n data-domainkit-root=\"\"\n style={themeStyle}\n />\n <BaseDialog.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"plan-dialog\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <div data-domainkit-part=\"dialog-header\">\n <div data-domainkit-part=\"dialog-heading\">\n <BaseDialog.Title data-domainkit-part=\"dialog-title\">\n {messages.reviewDns}\n </BaseDialog.Title>\n <BaseDialog.Description data-domainkit-part=\"dialog-description\">\n {messages.planConsent}\n </BaseDialog.Description>\n </div>\n {busy ? null : (\n <BaseDialog.Close aria-label={messages.close} data-domainkit-part=\"dialog-close\">\n ×\n </BaseDialog.Close>\n )}\n </div>\n <div data-domainkit-part=\"dialog-body\">\n {plan === undefined ? (\n <p data-domainkit-part=\"dialog-progress\" role=\"status\">\n {messages.planningDns}\n </p>\n ) : (\n <Operations.List lifecycle=\"provisioning\" operations={plan.operations} />\n )}\n <Outcome state={state} />\n </div>\n <div data-domainkit-part=\"dialog-footer\">\n {busy ? (\n <button data-domainkit-part=\"plan-apply\" disabled type=\"button\">\n {state._tag === \"Applying\" ? messages.applyingDns : messages.planningDns}\n </button>\n ) : state._tag === \"Review\" && plan !== undefined ? (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.cancel}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"plan-apply\"\n disabled={\n isNoopOnly || plan.operations.some((operation) => operation._tag === \"Conflict\")\n }\n onClick={() => controller.apply()}\n type=\"button\"\n >\n {isNoopOnly ? messages.noChanges : messages.applyDns}\n </button>\n </>\n ) : (\n <>\n <BaseDialog.Close data-domainkit-part=\"dialog-cancel\">\n {messages.close}\n </BaseDialog.Close>\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n </>\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n\nexport function RetryAction({ controller }: { readonly controller: Controller }) {\n const { messages } = useDomainKit();\n const state = controller.state;\n if (state._tag !== \"Failure\" && state._tag !== \"Stale\" && state._tag !== \"Partial\") return null;\n return (\n <button\n data-domainkit-part=\"provisioning-retry\"\n onClick={() => controller.retry()}\n type=\"button\"\n >\n {messages.retry}\n </button>\n );\n}\n\nexport interface FlowProps extends Omit<RootProps, \"status\"> {\n readonly connection: Transport.Connected;\n readonly onApplied?: (\n result: Extract<Transport.ApplyResult, { readonly _tag: \"Applied\" | \"Partial\" }>,\n ) => void;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly showRecords?: boolean;\n readonly trigger?: ReactElement;\n}\n\nexport function Flow({\n connection,\n onApplied,\n records,\n showRecords = true,\n trigger,\n ...props\n}: FlowProps) {\n const controller = useController(connection, records, onApplied);\n const state = controller.state;\n return (\n <Root status={state._tag} {...props}>\n {showRecords ? <Records.Table records={records} /> : null}\n <Dialog controller={controller} {...(trigger === undefined ? {} : { trigger })} />\n </Root>\n );\n}\n","import { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { useAtomSet, useAtomValue } from \"@effect/atom-react\";\nimport { Transport } from \"domainkit\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { useMemo } from \"react\";\n\nimport { failureFromError, recordsIdentity, type Failure } from \"./atom.ts\";\nimport type { PartProps } from \"./composition.tsx\";\nimport { usePart } from \"./composition.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport { Status as RecordStatus } from \"./records.tsx\";\n\ntype LocalState = Data.TaggedEnum<{\n Failed: { readonly failure: Failure; readonly previous?: Transport.Observation };\n Idle: {};\n Observing: { readonly previous?: Transport.Observation };\n}>;\nexport const State = Data.taggedEnum<LocalState>();\nexport type State = LocalState | Transport.Observation;\n\nexport interface ObserveConfig {\n readonly connection?: Transport.Connected;\n readonly domain: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly sources?: {\n readonly provider?: boolean;\n readonly publicDns?: boolean;\n };\n}\n\nexport type Command = Data.TaggedEnum<{\n Observe: {};\n Reset: {};\n}>;\nexport const Command = Data.taggedEnum<Command>();\n\nexport interface Model {\n readonly command: Atom.AtomResultFn<Command, void>;\n readonly state: Atom.Atom<State>;\n}\n\nexport interface Controller {\n readonly observe: () => void;\n readonly reset: () => void;\n readonly state: State;\n}\n\nexport function useModel(config: ObserveConfig): Model {\n const { runtime } = useDomainKit();\n const provider = config.sources?.provider ?? config.connection !== undefined;\n const publicDns = config.sources?.publicDns ?? true;\n const recordKey = recordsIdentity(config.records);\n return useMemo(() => {\n const state = Atom.make<State>(State.Idle());\n const observe = runtime.fn<Command>()((command, get) => {\n if (command._tag === \"Reset\") {\n get.set(state, State.Idle());\n return Effect.void;\n }\n const current = get(state);\n if (current._tag === \"Observing\") return Effect.void;\n const previous =\n current._tag === \"Observation\"\n ? current\n : current._tag === \"Failed\"\n ? current.previous\n : undefined;\n get.set(state, State.Observing({ ...(previous === undefined ? {} : { previous }) }));\n return Effect.flatMap(Transport.Service, (transport) =>\n transport.verification.observe({\n ...(config.connection === undefined\n ? {}\n : { attachmentId: config.connection.attachment.id }),\n domain: config.domain,\n records: config.records,\n sources: { provider, publicDns },\n }),\n ).pipe(\n Effect.tap((observation) => Effect.sync(() => get.set(state, observation))),\n Effect.catch((error) =>\n Effect.sync(() =>\n get.set(\n state,\n State.Failed({\n failure: failureFromError(error),\n ...(previous === undefined ? {} : { previous }),\n }),\n ),\n ),\n ),\n Effect.asVoid,\n );\n });\n return { command: observe, state };\n }, [config.connection?.attachment.id, config.domain, provider, publicDns, recordKey, runtime]);\n}\n\nexport function useController(config: ObserveConfig): Controller {\n const model = useModel(config);\n const state = useAtomValue(model.state);\n const dispatch = useAtomSet(model.command);\n const observe = () => dispatch(Command.Observe());\n const reset = () => dispatch(Command.Reset());\n return { observe, reset, state };\n}\n\nconst evidenceNote = (evidence: Transport.ObservationEvidence): string | undefined => {\n switch (evidence._tag) {\n case \"Mismatch\":\n case \"Unavailable\":\n return evidence.message;\n case \"Found\":\n case \"Missing\":\n return undefined;\n default: {\n const _exhaustive: never = evidence;\n return _exhaustive;\n }\n }\n};\n\nconst observationGroups = (\n observation: Transport.Observation,\n): ReadonlyArray<{\n readonly evidence: ReadonlyArray<Transport.ObservationEvidence>;\n readonly label: string;\n}> =>\n [\n { evidence: observation.provider, label: \"Provider\" },\n { evidence: observation.publicDns, label: \"Public DNS\" },\n ].filter((group) => group.evidence.length > 0);\n\nexport interface RootProps extends PartProps<\"div\", { readonly status: State[\"_tag\"] }> {\n readonly status: State[\"_tag\"];\n}\n\nexport function Root({ status, ...props }: RootProps) {\n return usePart(\n \"div\",\n props,\n { status },\n { \"data-domainkit-part\": \"verification-status\", \"data-state\": status },\n );\n}\n\nexport function Evidence({ observation }: { readonly observation: Transport.Observation }) {\n return (\n <div data-domainkit-part=\"observation-list\">\n {observationGroups(observation).map((group) => (\n <section data-domainkit-part=\"observation-group\" key={group.label}>\n <h3 data-domainkit-part=\"observation-source\">{group.label}</h3>\n <ul>\n {group.evidence.map((evidence, index) => {\n const note = evidenceNote(evidence);\n return (\n <li key={`${evidence._tag}-${evidence.recordId}-${index}`}>\n <div data-domainkit-part=\"observation-row\">\n <span data-domainkit-part=\"observation-record\">{evidence.recordId}</span>\n <RecordStatus evidence={evidence} />\n </div>\n {note === undefined ? null : <p data-domainkit-part=\"observation-note\">{note}</p>}\n </li>\n );\n })}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\nexport function Outcome({ state }: { readonly state: State }) {\n if (state._tag !== \"Failed\") return null;\n return (\n <p data-domainkit-part=\"flow-outcome\" data-tone=\"danger\" role=\"alert\">\n {state.failure.message}\n </p>\n );\n}\n\nexport interface ObserveActionProps extends PartProps<\n \"button\",\n { readonly status: State[\"_tag\"] }\n> {\n readonly controller: Controller;\n}\n\nexport function ObserveAction({ controller, ...props }: ObserveActionProps) {\n const { messages } = useDomainKit();\n const observing = controller.state._tag === \"Observing\";\n return usePart(\n \"button\",\n props,\n { status: controller.state._tag },\n {\n \"aria-busy\": observing,\n children: messages.checkDns,\n \"data-domainkit-part\": \"observe-action\",\n \"data-loading\": observing ? \"\" : undefined,\n disabled: observing,\n onClick: () => controller.observe(),\n type: \"button\",\n },\n );\n}\n\nexport interface StatusProps extends Omit<RootProps, \"status\"> {\n readonly config: ObserveConfig;\n}\n\nexport function Status({ config, ...props }: StatusProps) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const controller = useController(config);\n const state = controller.state;\n const observation =\n state._tag === \"Observation\"\n ? state\n : state._tag === \"Observing\" || state._tag === \"Failed\"\n ? state.previous\n : undefined;\n return (\n <Root status={state._tag} {...props}>\n <BasePopover.Root>\n <BasePopover.Trigger render={<ObserveAction controller={controller} />} />\n <BasePopover.Portal container={portalContainer}>\n <BasePopover.Positioner\n align=\"end\"\n data-domainkit-part=\"verification-positioner\"\n sideOffset={6}\n >\n <BasePopover.Popup\n aria-label={messages.checkDns}\n aria-busy={state._tag === \"Observing\"}\n data-color-scheme={colorScheme}\n data-domainkit-part=\"verification-popover\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n <BasePopover.Arrow data-domainkit-part=\"verification-arrow\" />\n {state._tag === \"Observing\" ? (\n <p data-domainkit-part=\"verification-progress\" role=\"status\">\n {messages.checkingDns}\n </p>\n ) : null}\n {observation === undefined ? null : <Evidence observation={observation} />}\n <Outcome state={state} />\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n </Root>\n );\n}\n\nexport type Observation = Transport.Observation;\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport type { Transport } from \"domainkit\";\nimport { useRef, useState, type RefObject } from \"react\";\n\nimport * as Cleanup from \"./cleanup.tsx\";\nimport * as Connection from \"./connection.tsx\";\nimport { useDomainKit } from \"./domain-kit.tsx\";\nimport * as Provider from \"./provider.tsx\";\nimport * as Provisioning from \"./provisioning.tsx\";\nimport * as Records from \"./records.tsx\";\nimport * as Verification from \"./verification.tsx\";\n\nexport interface FlowProps {\n readonly domain: string;\n readonly receiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n}\n\nexport function Flow({ domain, receiptId, records }: FlowProps) {\n const controller = Connection.useController(domain);\n const state = controller.state;\n const connected =\n state._tag === \"Connected\" ? state : state._tag === \"Detaching\" ? state.snapshot : undefined;\n return (\n <Connection.Root status={state._tag}>\n {state._tag === \"Connected\" || state._tag === \"Detaching\" ? (\n <ConnectedCard\n connection={state._tag === \"Connected\" ? state : state.snapshot}\n controller={controller}\n {...(receiptId === undefined ? {} : { initialReceiptId: receiptId })}\n records={records}\n status={state._tag}\n />\n ) : (\n <AvailableCard controller={controller} state={state} />\n )}\n <Records.Table records={records} />\n <Verification.Status\n config={{\n ...(connected === undefined ? {} : { connection: connected }),\n domain,\n records,\n }}\n />\n </Connection.Root>\n );\n}\n\nfunction AvailableCard({\n controller,\n state,\n}: {\n readonly controller: Connection.Controller;\n readonly state: Exclude<Connection.State, Transport.Connected>;\n}) {\n const { messages } = useDomainKit();\n const snapshot =\n state._tag === \"Disconnected\"\n ? state\n : state._tag === \"Submitting\" || state._tag === \"Redirecting\"\n ? state.snapshot\n : undefined;\n return (\n <Connection.Card status={state._tag}>\n <Connection.CardIdentity status={state._tag}>\n {snapshot === undefined ? null : <Provider.Mark provider={snapshot.provider} />}\n <Connection.Status state={state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={state._tag}>\n {state._tag === \"Failure\" && state.retry !== \"never\" ? (\n <Connection.RetryAction\n controller={controller}\n kind={state.retry === \"after-user-action\" ? \"after-user-action\" : \"retry\"}\n />\n ) : null}\n {snapshot === undefined ? null : (\n <BaseDialog.Root\n onOpenChange={(open, eventDetails) => {\n if (!open && (state._tag === \"Submitting\" || state._tag === \"Redirecting\")) {\n eventDetails.cancel();\n }\n }}\n >\n <Connection.ConnectTrigger\n disabled={state._tag === \"Submitting\" || state._tag === \"Redirecting\"}\n provider={snapshot.provider}\n >\n {messages.connectProvider(snapshot.provider.name)}\n </Connection.ConnectTrigger>\n <Connection.Dialog controller={controller} snapshot={snapshot} />\n </BaseDialog.Root>\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ConnectedCard({\n connection,\n controller,\n initialReceiptId,\n records,\n status,\n}: {\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly initialReceiptId?: string;\n readonly records: ReadonlyArray<Transport.DnsRecord>;\n readonly status: \"Connected\" | \"Detaching\";\n}) {\n const [receipt, setReceipt] = useState({\n host: initialReceiptId,\n value: initialReceiptId,\n });\n if (receipt.host !== initialReceiptId) {\n setReceipt({ host: initialReceiptId, value: initialReceiptId });\n }\n const receiptId = receipt.host === initialReceiptId ? receipt.value : initialReceiptId;\n const disabled = status === \"Detaching\";\n const actionsTriggerRef = useRef<HTMLButtonElement>(null);\n return (\n <Connection.Card status={status}>\n <Connection.CardIdentity status={status}>\n <Provider.Mark provider={connection.provider} />\n <Connection.Status state={status === \"Connected\" ? connection : controller.state} />\n </Connection.CardIdentity>\n <Connection.CardActions status={status}>\n <Provisioning.Flow\n connection={connection}\n onApplied={(result) => setReceipt({ host: initialReceiptId, value: result.receiptId })}\n records={records}\n showRecords={false}\n />\n {receiptId === undefined ? (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n />\n ) : (\n <ProviderActionsWithCleanup\n actionsTriggerRef={actionsTriggerRef}\n connection={connection}\n controller={controller}\n disabled={disabled}\n key={receiptId}\n onCleaned={() => setReceipt({ host: initialReceiptId, value: undefined })}\n receiptId={receiptId}\n />\n )}\n </Connection.CardActions>\n </Connection.Card>\n );\n}\n\nfunction ProviderActionsWithCleanup({\n actionsTriggerRef,\n connection,\n controller,\n disabled,\n onCleaned,\n receiptId,\n}: {\n readonly actionsTriggerRef: RefObject<HTMLButtonElement | null>;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleaned: () => void;\n readonly receiptId: string;\n}) {\n const [cleaned, setCleaned] = useState(false);\n const cleanup = Cleanup.useController(connection, receiptId, (result) => {\n if (result._tag === \"Cleaned\") setCleaned(true);\n });\n return (\n <ProviderActions\n actionsTriggerRef={actionsTriggerRef}\n cleanup={cleanup}\n connection={connection}\n controller={controller}\n disabled={disabled}\n onCleanupCloseComplete={() => {\n if (cleaned) onCleaned();\n }}\n />\n );\n}\n\nfunction ProviderActions({\n actionsTriggerRef: actionsTriggerRefProp,\n cleanup,\n connection,\n controller,\n disabled,\n onCleanupCloseComplete,\n}: {\n readonly actionsTriggerRef?: RefObject<HTMLButtonElement | null>;\n readonly cleanup?: Cleanup.Controller;\n readonly connection: Transport.Connected;\n readonly controller: Connection.Controller;\n readonly disabled: boolean;\n readonly onCleanupCloseComplete?: () => void;\n}) {\n const { colorScheme, messages, portalContainer, themeStyle } = useDomainKit();\n const fallbackActionsTriggerRef = useRef<HTMLButtonElement>(null);\n const actionsTriggerRef = actionsTriggerRefProp ?? fallbackActionsTriggerRef;\n const [menuOpen, setMenuOpen] = useState(false);\n const [disconnectOpen, setDisconnectOpen] = useState(false);\n return (\n <>\n <BaseMenu.Root disabled={disabled} modal={false} onOpenChange={setMenuOpen} open={menuOpen}>\n <BaseMenu.Trigger\n aria-label={messages.moreActions}\n data-domainkit-part=\"actions-trigger\"\n ref={actionsTriggerRef}\n >\n <span aria-hidden=\"true\">⋯</span>\n </BaseMenu.Trigger>\n <BaseMenu.Portal container={portalContainer} keepMounted>\n <BaseMenu.Positioner align=\"end\" sideOffset={6}>\n <BaseMenu.Popup\n data-color-scheme={colorScheme}\n data-domainkit-part=\"actions-menu\"\n data-domainkit-root=\"\"\n style={themeStyle}\n >\n {cleanup === undefined ? null : (\n <>\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => cleanup.plan());\n }}\n render={<button type=\"button\" />}\n >\n {messages.reviewCleanup}\n </BaseMenu.Item>\n <BaseMenu.Separator data-domainkit-part=\"actions-separator\" />\n </>\n )}\n <BaseMenu.Item\n closeOnClick={false}\n data-domainkit-part=\"actions-item\"\n data-tone=\"danger\"\n nativeButton\n onClickCapture={() => {\n setMenuOpen(false);\n queueMicrotask(() => setDisconnectOpen(true));\n }}\n render={<button type=\"button\" />}\n >\n {messages.disconnectDomain}\n </BaseMenu.Item>\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n {cleanup === undefined ? null : (\n <Cleanup.Dialog\n controller={cleanup}\n onOpenChangeComplete={(open) => {\n if (!open) {\n onCleanupCloseComplete?.();\n queueMicrotask(() => actionsTriggerRef.current?.focus());\n }\n }}\n trigger={null}\n />\n )}\n <Connection.DisconnectDialog\n connection={connection}\n controller={controller}\n onOpenChange={(open) => {\n setDisconnectOpen(open);\n if (!open) queueMicrotask(() => actionsTriggerRef.current?.focus());\n }}\n open={disconnectOpen}\n trigger={null}\n />\n </>\n );\n}\n","import { DomainName, Transport } from \"domainkit\";\nimport type * as Layer from \"effect/Layer\";\n\nexport interface FakeOptions {\n readonly connect?: Transport.ConnectionResult;\n readonly inspect:\n | Transport.ConnectionSnapshot\n | FakeFailure\n | ReadonlyArray<Transport.ConnectionSnapshot | FakeFailure>;\n readonly attach?: Transport.Connected;\n readonly detach?: Transport.DetachResult;\n readonly plan?: Transport.ProvisioningPlan;\n readonly apply?: Transport.ApplyResult;\n readonly observe?: Transport.Observation;\n readonly cleanupPlan?: Transport.CleanupPlan;\n readonly cleanupApply?: Transport.CleanupResult;\n}\n\ninterface FakeFailure {\n readonly _tag: \"Failure\";\n readonly message: string;\n readonly operation?: string;\n readonly retry: Transport.Failure[\"retry\"];\n}\n\nexport interface FakeTransport extends Transport.AsyncInterface, Layer.Layer<Transport.Service> {\n readonly calls: {\n readonly attach: Array<Transport.AttachInput>;\n readonly connect: Array<Transport.ConnectInput>;\n readonly detach: Array<Transport.DetachInput>;\n readonly inspect: Array<Transport.InspectInput>;\n readonly plan: Array<Transport.ProvisioningPlanInput>;\n readonly apply: Array<Transport.ProvisioningApplyInput>;\n readonly observe: Array<Transport.ObserveInput>;\n readonly cleanupPlan: Array<Transport.CleanupPlanInput>;\n readonly cleanupApply: Array<Transport.CleanupApplyInput>;\n };\n}\n\nexport const provider = (overrides: Partial<Transport.Provider> = {}): Transport.Provider => ({\n authentication: [\n Transport.AuthenticationMethod.OAuth({ label: \"Continue with OAuth\" }),\n Transport.AuthenticationMethod.Token({\n label: \"Connect with token\",\n placeholder: \"Paste API token\",\n }),\n ],\n id: \"cloudflare\",\n name: \"Cloudflare\",\n ...overrides,\n});\n\nexport const target = (\n overrides: Partial<Transport.ProviderTarget> = {},\n): Transport.ProviderTarget => ({\n accountId: \"account-1\",\n accountKind: \"account\",\n zoneId: \"zone-1\",\n zoneName: DomainName.parse(\"example.com\"),\n ...overrides,\n});\n\nexport const connection = (\n overrides: Partial<Transport.ProviderConnection> = {},\n): Transport.ProviderConnection => ({\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n id: \"connection-1\",\n method: \"oauth2\",\n ownerId: \"organization-1\",\n providerId: \"cloudflare\",\n status: \"active\",\n ...overrides,\n});\n\nexport const attachment = (\n overrides: Partial<Transport.DomainAttachment> = {},\n): Transport.DomainAttachment => ({\n connectionId: \"connection-1\",\n createdAt: new Date(\"2026-08-30T00:00:00.000Z\"),\n domain: DomainName.parse(\"mail.example.com\"),\n id: \"attachment-1\",\n target: target(),\n ...overrides,\n});\n\nexport const connected = (overrides: Partial<Transport.Connected> = {}): Transport.Connected =>\n Transport.Connected({\n attachment: attachment(),\n connection: connection(),\n provider: provider(),\n ...overrides,\n });\n\nexport function makeFakeTransport(options: FakeOptions): FakeTransport {\n const calls: FakeTransport[\"calls\"] = {\n apply: [],\n attach: [],\n cleanupApply: [],\n cleanupPlan: [],\n connect: [],\n detach: [],\n inspect: [],\n observe: [],\n plan: [],\n };\n const inspections = Array.isArray(options.inspect) ? [...options.inspect] : [options.inspect];\n const transport: Transport.AsyncInterface = {\n cleanup: {\n apply: async (input) => {\n calls.cleanupApply.push(input);\n return (\n options.cleanupApply ??\n Transport.CleanupResult.Cleaned({\n operationId: \"cleanup-operation-1\",\n results: [],\n })\n );\n },\n plan: async (input) => {\n calls.cleanupPlan.push(input);\n return (\n options.cleanupPlan ??\n Transport.CleanupPlan({\n digest: \"cleanup-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: [],\n })\n );\n },\n },\n connection: {\n connect: async (input) => {\n calls.connect.push(input);\n return (\n options.connect ??\n Transport.Connected({\n attachment: attachment({ domain: DomainName.parse(input.domain) }),\n connection: connection(),\n provider: provider(),\n })\n );\n },\n inspect: async (input) => {\n calls.inspect.push(input);\n const snapshot = inspections.shift() ?? inspections.at(-1) ?? options.inspect;\n if (Array.isArray(snapshot)) throw new Error(\"Fake inspection sequence is empty\");\n if (snapshot._tag === \"Failure\")\n throw new Transport.Failure({\n message: snapshot.message,\n operation: snapshot.operation ?? \"connection.inspect\",\n retry: snapshot.retry,\n });\n return snapshot;\n },\n attach: async (input) => {\n calls.attach.push(input);\n return (\n options.attach ??\n Transport.Connected({\n attachment: attachment({\n connectionId: input.connectionId,\n domain: DomainName.parse(input.domain),\n target: input.target,\n }),\n connection: connection({ id: input.connectionId }),\n provider: provider(),\n })\n );\n },\n detach: async (input) => {\n calls.detach.push(input);\n return (\n options.detach ??\n Transport.DetachResult({\n attachment: attachment(),\n connection: connection(),\n remainingAttachments: 0,\n })\n );\n },\n },\n provisioning: {\n apply: async (input) => {\n calls.apply.push(input);\n return (\n options.apply ??\n Transport.ApplyResult.Applied({\n operationId: \"apply-operation-1\",\n receiptId: \"receipt-1\",\n results: [],\n })\n );\n },\n plan: async (input) => {\n calls.plan.push(input);\n return (\n options.plan ??\n Transport.ProvisioningPlan({\n digest: \"plan-digest-1\",\n expiresAt: \"2099-01-01T00:00:00.000Z\",\n operations: input.records.map((record) =>\n Transport.PlanOperation.Create({\n id: `create-${record.id}`,\n record,\n }),\n ),\n })\n );\n },\n },\n verification: {\n observe: async (input) => {\n calls.observe.push(input);\n return (\n options.observe ??\n Transport.Observation({\n provider: input.sources.provider\n ? input.records.map((record) =>\n Transport.ObservationEvidence.Found({ recordId: record.id }),\n )\n : [],\n publicDns: input.sources.publicDns\n ? input.records.map((record) =>\n Transport.ObservationEvidence.Found({ recordId: record.id }),\n )\n : [],\n })\n );\n },\n },\n };\n return Object.assign(Transport.layerFromAsync(transport), transport, { calls });\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@domainkit/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "React flows and UI parts for custom-domain setup",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"custom-domains",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@base-ui/react": "^1.7.0",
|
|
50
|
-
"domainkit": "^0.
|
|
50
|
+
"domainkit": "^0.8.0",
|
|
51
51
|
"scheduler": "0.27.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|