Files
slm-design/docs2/specification/layers/domains/client-and-server.md

4.3 KiB
Raw Blame History

title, status, normative
title status normative
Client и server assembly domain draft true

Client и Server Assembly

client и server создают готовые runtime-specific instances одного domain поверх его business factory и adapters.

Client assembly

domains/{group...}/{domain}/client/
├── create-{domain}-client-runtime.ts
└── index.ts
export const createAuthClientRuntime = (): AuthRuntime => {
  return authFactory({
    phoneAuth: browserPhoneAuthAdapter,
    session: browserSessionAdapter,
  })
}

SLM-ASM-001 - ОБЯЗАН. Client assembly может импортировать только собственную business factory, собственные client adapters, собственную React surface и необходимые runtime-specific technical inputs.

SLM-ASM-002 - ОБЯЗАН. Client assembly должна возвращать готовый runtime собственного domain.

SLM-ASM-003 - ЗАПРЕЩЕНО. Client assembly одного domain не может импортировать creator или runtime другого domain.

SLM-ASM-004 - МОЖЕТ. Client assembly может принимать готовую внешнюю capability через собственный input contract.

createUserClientRuntime({ auth: auth.session })

Такой input не даёт user domain права создавать AuthRuntime или импортировать его client entrypoint.

Server assembly

domains/{group...}/{domain}/server/
├── create-{domain}-server-runtime.ts
└── index.ts

SLM-ASM-005 - ОБЯЗАН. Server assembly должна создавать новый runtime в scope, соответствующем request или другой явно выбранной server lifetime.

SLM-ASM-006 - ЗАПРЕЩЕНО. Request credentials, cookies, headers и user-specific state не могут сохраняться в process-level mutable singleton.

SLM-ASM-007 - ОБЯЗАН. Framework/request input используется только для создания server adapters и не протекает как raw framework object в business API.

SLM-ASM-008 - ОБЯЗАН. Server entrypoint должен иметь явный server-only marker, если framework предоставляет такой механизм.

SLM-ASM-015 - МОЖЕТ. Server assembly может принимать готовую внешнюю capability через собственный input contract на тех же условиях, что и client assembly.

SLM-ASM-016 - ОБЯЗАН. Server assembly может импортировать только собственную business factory, собственные server adapters и необходимые server technical inputs; импорт React/client surface запрещён.

Constructor и activation

Assembly определяет способ создания, но не владеет полным cross-domain graph.

SLM-ASM-009 - ЗАПРЕЩЕНО. Вызов runtime creator не должен выполнять product request, открывать socket или запускать background resource.

module import
  → определяет creator

creator call
  → создаёт runtime instance

explicit start
  → запускает resources

SLM-ASM-010 - ОБЯЗАН. Resources запускает graph owner в выбранном scope согласно lifecycle rules.

Public entrypoints

SLM-ASM-011 - ОБЯЗАН. Client и server assembly должны иметь разные public entrypoints.

SLM-ASM-012 - ЗАПРЕЩЕНО. Общий domain barrel не может runtime-реэкспортировать одновременно client и server surfaces.

Server/client bridge

Client и server runtimes являются разными instances над общей business semantics.

SLM-ASM-013 - ЗАПРЕЩЕНО. DomainRuntime, functions, Context, store или query client нельзя передавать через serializable server/client boundary.

SLM-ASM-014 - МОЖЕТ. Server может передать client assembly только serializable business-owned bootstrap data без secrets и mutable runtime objects.