@taskless-app/shared 0.1.32 → 0.1.34

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.
@@ -0,0 +1,24 @@
1
+ /**
2
+ * MOVE-10: призрачные авторы импорта — общее для api и web.
3
+ *
4
+ * Призрак (`User.kind === "imported"`) — автор из чужого сервиса, чьи страницы и
5
+ * комментарии переехали, а сам он в воркспейс не переезжал. Интерфейс обязан
6
+ * отличать его от живого человека везде, где показывает авторство, — за это
7
+ * отвечает бейдж «из Confluence».
8
+ */
9
+ /** `User.kind` — вид аккаунта. Строки, а не enum: см. комментарий к полю в схеме. */
10
+ export declare const USER_KIND_IMPORTED = "imported";
11
+ /**
12
+ * Откуда переехал призрак. Список открыт (следующий импорт — Notion, Jira),
13
+ * поэтому это не enum БД, а строка: новый источник = одна строка здесь, не
14
+ * миграция. Неизвестный источник не ломает интерфейс — см. importSourceLabel.
15
+ */
16
+ export declare const IMPORT_SOURCE_LABELS: Record<string, string>;
17
+ /**
18
+ * Название источника для человека. Неизвестный источник отдаётся как есть (с
19
+ * заглавной) — бейдж честнее покажет сырое имя, чем исчезнет: пропавший бейдж
20
+ * означал бы «это живой участник», а это ровно то, что мы не хотим соврать.
21
+ */
22
+ export declare function importSourceLabel(source: string | null | undefined): string | null;
23
+ /** Текст бейджа у автора-призрака: «из Confluence». Источник неизвестен — «импортирован». */
24
+ export declare function importedBadgeText(source: string | null | undefined): string;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * MOVE-10: призрачные авторы импорта — общее для api и web.
3
+ *
4
+ * Призрак (`User.kind === "imported"`) — автор из чужого сервиса, чьи страницы и
5
+ * комментарии переехали, а сам он в воркспейс не переезжал. Интерфейс обязан
6
+ * отличать его от живого человека везде, где показывает авторство, — за это
7
+ * отвечает бейдж «из Confluence».
8
+ */
9
+ /** `User.kind` — вид аккаунта. Строки, а не enum: см. комментарий к полю в схеме. */
10
+ export const USER_KIND_IMPORTED = "imported";
11
+ /**
12
+ * Откуда переехал призрак. Список открыт (следующий импорт — Notion, Jira),
13
+ * поэтому это не enum БД, а строка: новый источник = одна строка здесь, не
14
+ * миграция. Неизвестный источник не ломает интерфейс — см. importSourceLabel.
15
+ */
16
+ export const IMPORT_SOURCE_LABELS = {
17
+ confluence: "Confluence",
18
+ notion: "Notion",
19
+ jira: "Jira",
20
+ };
21
+ /**
22
+ * Название источника для человека. Неизвестный источник отдаётся как есть (с
23
+ * заглавной) — бейдж честнее покажет сырое имя, чем исчезнет: пропавший бейдж
24
+ * означал бы «это живой участник», а это ровно то, что мы не хотим соврать.
25
+ */
26
+ export function importSourceLabel(source) {
27
+ if (!source)
28
+ return null;
29
+ return IMPORT_SOURCE_LABELS[source] ?? source.charAt(0).toUpperCase() + source.slice(1);
30
+ }
31
+ /** Текст бейджа у автора-призрака: «из Confluence». Источник неизвестен — «импортирован». */
32
+ export function importedBadgeText(source) {
33
+ const label = importSourceLabel(source);
34
+ return label ? `из ${label}` : "импортирован";
35
+ }
36
+ //# sourceMappingURL=importedIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importedIdentity.js","sourceRoot":"","sources":["../src/importedIdentity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,qFAAqF;AACrF,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAiC;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,iBAAiB,CAAC,MAAiC;IACjE,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AAChD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -9,7 +9,7 @@ export * from "./finishChip.js";
9
9
  export * from "./weight.js";
10
10
  export * from "./uiTour.js";
11
11
  export * from "./translit.js";
12
- export * from "./branding.js";
12
+ export * from "./tenantTheme.js";
13
13
  export * from "./workspaceBrand.js";
14
14
  export * from "./labelColors.js";
15
15
  export * from "./chatMessageKinds.js";
@@ -21,3 +21,4 @@ export * from "./transcriptCoverage.js";
21
21
  export * from "./conventionRules.js";
22
22
  export * from "./chatOrigin.js";
23
23
  export * from "./repoProfile.js";
24
+ export * from "./importedIdentity.js";
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ export * from "./finishChip.js";
9
9
  export * from "./weight.js";
10
10
  export * from "./uiTour.js";
11
11
  export * from "./translit.js";
12
- export * from "./branding.js";
12
+ export * from "./tenantTheme.js";
13
13
  export * from "./workspaceBrand.js";
14
14
  export * from "./labelColors.js";
15
15
  export * from "./chatMessageKinds.js";
@@ -21,4 +21,5 @@ export * from "./transcriptCoverage.js";
21
21
  export * from "./conventionRules.js";
22
22
  export * from "./chatOrigin.js";
23
23
  export * from "./repoProfile.js";
24
+ export * from "./importedIdentity.js";
24
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC"}
@@ -1,3 +1,16 @@
1
+ // Конфигурация ТЕНАНТА: тема (пресет, акцент, светлая/тёмная), имя отправителя писем
2
+ // и CNAME-таргет для кастомных доменов.
3
+ //
4
+ // ПОЧЕМУ НЕ `branding.ts`, КАК БЫЛО. Файл с таким именем не доезжает до браузера у любого,
5
+ // у кого стоит блокировщик рекламы: путь со словом «branding» ловится фильтр-листами, и
6
+ // запрос отваливается с `ERR_BLOCKED_BY_CLIENT`. Для МОДУЛЕЙ в проде это невидимо (всё
7
+ // склеено в бандл, отдельного URL нет), а в деве Vite отдаёт каждый модуль своим URL — и
8
+ // приложение падало ЦЕЛИКОМ в белый экран, потому что этот модуль тянет `TenantProvider.tsx`
9
+ // у самого корня дерева. Поймано живьём 24.08.2026. Имена экспортов (BrandingConfig и
10
+ // прочие) менять не потребовалось: блокировщик смотрит на URL, а не на то, что внутри.
11
+ //
12
+ // А вот ручку `/api/workspaces/:id/branding` бандл НЕ прячет: адрес запроса уходит в сеть
13
+ // дословно и в проде тоже. Это отдельная история и чинится не здесь — TAS-575.
1
14
  import { z } from "zod";
2
15
  /** CNAME-таргет для кастомных доменов. Клиенты CNAME-ят свой домен на него;
3
16
  * при смене прод-IP правим одну A-запись ingress, у клиентов ничего не ломается. */
@@ -25,4 +38,4 @@ export const THEME_PRESETS = [
25
38
  export function getThemePreset(key) {
26
39
  return THEME_PRESETS.find((p) => p.key === key) ?? THEME_PRESETS[0];
27
40
  }
28
- //# sourceMappingURL=branding.js.map
41
+ //# sourceMappingURL=tenantTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenantTheme.js","sourceRoot":"","sources":["../src/tenantTheme.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,wCAAwC;AACxC,EAAE;AACF,2FAA2F;AAC3F,wFAAwF;AACxF,uFAAuF;AACvF,yFAAyF;AACzF,6FAA6F;AAC7F,sFAAsF;AACtF,uFAAuF;AACvF,EAAE;AACF,0FAA0F;AAC1F,+EAA+E;AAC/E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;qFACqF;AACrF,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAG/D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,uEAAuE;IACvE,wEAAwE;IACxE,2BAA2B;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,4EAA4E;IAC5E,2EAA2E;IAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAChE,kBAAkB,EAAE,WAAW,CAAC,QAAQ,EAAE;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC;KACD,MAAM,EAAE,CAAC;AAWZ,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,sBAAsB,EAAE;IACxG,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,sBAAsB,EAAE;IACvG,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,EAAE;IACjG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,EAAE;CAChG,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC,CAAE,CAAC;AACvE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taskless-app/shared",
3
- "version": "0.1.32",
3
+ "version": "0.1.34",
4
4
  "type": "module",
5
5
  "description": "Shared types, Zod schemas and design tokens for the Taskless API contract — consumed by @taskless/api, @taskless/web and the Taskless mobile app.",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"file":"branding.js","sourceRoot":"","sources":["../src/branding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;qFACqF;AACrF,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAG/D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,uEAAuE;IACvE,wEAAwE;IACxE,2BAA2B;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,4EAA4E;IAC5E,2EAA2E;IAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAChE,kBAAkB,EAAE,WAAW,CAAC,QAAQ,EAAE;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC;KACD,MAAM,EAAE,CAAC;AAWZ,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,sBAAsB,EAAE;IACxG,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,sBAAsB,EAAE;IACvG,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,EAAE;IACjG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,EAAE;CAChG,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC,CAAE,CAAC;AACvE,CAAC"}
File without changes