letopis 1.4.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/AGENT-CHEATSHEET.md +516 -398
  2. package/CHANGELOG.md +739 -0
  3. package/LICENSE +75 -21
  4. package/LICENSE-COMMERCIAL.md +49 -0
  5. package/README.md +1312 -1190
  6. package/api-contract.json +381 -0
  7. package/dist/acl.d.ts +81 -1
  8. package/dist/acl.js +281 -13
  9. package/dist/admin.d.ts +11 -141
  10. package/dist/admin.js +28 -186
  11. package/dist/auth.d.ts +20 -5
  12. package/dist/auth.js +80 -21
  13. package/dist/cache.d.ts +8 -1
  14. package/dist/cache.js +30 -8
  15. package/dist/chain.d.ts +46 -48
  16. package/dist/chain.js +556 -223
  17. package/dist/cli.js +73 -96
  18. package/dist/demo/booking.d.ts +352 -36
  19. package/dist/describe.d.ts +47 -0
  20. package/dist/describe.js +195 -0
  21. package/dist/errors.d.ts +77 -13
  22. package/dist/errors.js +231 -30
  23. package/dist/index.d.ts +62 -74
  24. package/dist/index.js +312 -155
  25. package/dist/internal.d.ts +7 -0
  26. package/dist/jsonschema.js +18 -17
  27. package/dist/load.d.ts +29 -17
  28. package/dist/load.js +235 -190
  29. package/dist/log.d.ts +121 -0
  30. package/dist/log.js +633 -0
  31. package/dist/mcp.d.ts +5 -7
  32. package/dist/mcp.js +194 -225
  33. package/dist/messages/access.d.ts +90 -0
  34. package/dist/messages/access.js +113 -0
  35. package/dist/messages/api.d.ts +237 -0
  36. package/dist/messages/api.js +304 -0
  37. package/dist/messages/boot.d.ts +201 -0
  38. package/dist/messages/boot.js +256 -0
  39. package/dist/messages/codes.d.ts +172 -0
  40. package/dist/messages/codes.js +173 -0
  41. package/dist/messages/index.d.ts +98 -0
  42. package/dist/messages/index.js +121 -0
  43. package/dist/messages/log.d.ts +229 -0
  44. package/dist/messages/log.js +102 -0
  45. package/dist/messages/mcp.d.ts +306 -0
  46. package/dist/messages/mcp.js +387 -0
  47. package/dist/messages/model.d.ts +256 -0
  48. package/dist/messages/model.js +314 -0
  49. package/dist/messages/query.d.ts +141 -0
  50. package/dist/messages/query.js +171 -0
  51. package/dist/messages/sql-access.d.ts +70 -0
  52. package/dist/messages/sql-access.js +87 -0
  53. package/dist/messages/sql-core.d.ts +164 -0
  54. package/dist/messages/sql-core.js +198 -0
  55. package/dist/messages/sql-time.d.ts +86 -0
  56. package/dist/messages/sql-time.js +111 -0
  57. package/dist/messages/sql-write.d.ts +246 -0
  58. package/dist/messages/sql-write.js +270 -0
  59. package/dist/messages/time.d.ts +23 -0
  60. package/dist/messages/time.js +29 -0
  61. package/dist/messages/types.d.ts +27 -0
  62. package/dist/messages/types.js +5 -0
  63. package/dist/messages/write.d.ts +452 -0
  64. package/dist/messages/write.js +572 -0
  65. package/dist/model.d.ts +77 -60
  66. package/dist/model.js +43 -34
  67. package/dist/ops.d.ts +35 -0
  68. package/dist/ops.js +101 -0
  69. package/dist/pglite.d.ts +0 -9
  70. package/dist/pglite.js +3 -1
  71. package/dist/registry.d.ts +3 -19
  72. package/dist/registry.js +3 -16
  73. package/dist/signals.d.ts +1 -5
  74. package/dist/signals.js +1 -5
  75. package/dist/sql.d.ts +9 -1
  76. package/dist/sql.js +175 -107
  77. package/dist/sync.d.ts +10 -4
  78. package/dist/sync.js +90 -17
  79. package/dist/tx.d.ts +21 -2
  80. package/dist/tx.js +76 -13
  81. package/dist/typed.d.ts +252 -53
  82. package/dist/types.d.ts +93 -90
  83. package/dist/types.js +17 -14
  84. package/dist/up.d.ts +56 -35
  85. package/dist/up.js +229 -83
  86. package/dist/uuid.d.ts +8 -0
  87. package/dist/uuid.js +14 -6
  88. package/dist/validate.d.ts +13 -1
  89. package/dist/validate.js +82 -33
  90. package/dist/watch.d.ts +10 -16
  91. package/dist/watch.js +36 -77
  92. package/dist/write.d.ts +87 -17
  93. package/dist/write.js +441 -206
  94. package/llms.txt +48 -31
  95. package/package.json +13 -14
  96. package/sql/10-core.sql +7 -50
  97. package/sql/15-errors.sql +64 -10
  98. package/sql/20-context.sql +18 -9
  99. package/sql/30-validate.sql +79 -30
  100. package/sql/40-class.sql +41 -115
  101. package/sql/50-acl.sql +8 -13
  102. package/sql/60-write.sql +220 -676
  103. package/sql/70-read.sql +11 -13
  104. package/sql/80-auth.sql +109 -42
  105. package/sql/90-time.sql +108 -947
  106. package/sql/95-seed.system.sql +7 -14
  107. package/sql/99-revision.sql +6 -1
  108. package/sql/README.md +32 -24
  109. package/sql/migrate/0009-restore-rev.tenants-name.sql +10 -0
  110. package/sql/migrate/0010-impersonation-no-account.sql +5 -0
  111. package/sql/migrate/0011-key-lock.otp-enabled.sql +7 -0
  112. package/sql/migrate/README.md +18 -0
  113. package/AGENT-CHEATSHEET.en.md +0 -488
  114. package/MIGRATION.md +0 -190
  115. package/README.en.md +0 -2910
  116. package/dist/import.d.ts +0 -185
  117. package/dist/import.js +0 -820
  118. package/dist/project.d.ts +0 -359
  119. package/dist/project.js +0 -1258
  120. package/sql/75-history.sql +0 -436
  121. package/sql/88-derived.sql +0 -1236
  122. package/sql/migrate/0006-changed-paths.sql +0 -3
  123. package/sql/migrate/0007-secret-account-fk.sql +0 -12
@@ -0,0 +1,141 @@
1
+ export declare const query: {
2
+ 'query.sort_field': {
3
+ code: "invalid_query";
4
+ ru: string;
5
+ };
6
+ 'query.sort_field_data': {
7
+ code: "invalid_query";
8
+ ru: string;
9
+ hint: string;
10
+ };
11
+ 'query.unknown_field': {
12
+ code: "invalid_query";
13
+ ru: string;
14
+ hint: string;
15
+ };
16
+ 'query.no_path': {
17
+ code: "no_path";
18
+ ru: string;
19
+ };
20
+ 'query.unknown_op': {
21
+ code: "invalid_query";
22
+ ru: string;
23
+ };
24
+ 'query.tags_arg': {
25
+ code: "invalid_query";
26
+ ru: string;
27
+ };
28
+ 'query.step_op': {
29
+ code: "invalid_query";
30
+ ru: string;
31
+ };
32
+ 'query.id_list': {
33
+ code: "invalid_query";
34
+ ru: string;
35
+ };
36
+ 'query.filter_id_list': {
37
+ code: "invalid_query";
38
+ ru: string;
39
+ };
40
+ 'query.filter_id': {
41
+ code: "invalid_query";
42
+ ru: string;
43
+ };
44
+ 'query.end_value': {
45
+ code: "invalid_query";
46
+ ru: string;
47
+ };
48
+ 'query.cursor_shape': {
49
+ code: "invalid_query";
50
+ ru: string;
51
+ };
52
+ 'query.cursor_id': {
53
+ code: "invalid_query";
54
+ ru: string;
55
+ };
56
+ 'query.cursor_value': {
57
+ code: "invalid_query";
58
+ ru: string;
59
+ };
60
+ 'query.cursor_value_nullable': {
61
+ code: "invalid_query";
62
+ ru: string;
63
+ };
64
+ 'query.cursor_expect_numeric': {
65
+ code: "invalid_query";
66
+ ru: string;
67
+ };
68
+ 'query.cursor_expect_int': {
69
+ code: "invalid_query";
70
+ ru: string;
71
+ };
72
+ 'query.cursor_expect_boolean': {
73
+ code: "invalid_query";
74
+ ru: string;
75
+ };
76
+ 'query.cursor_expect_text': {
77
+ code: "invalid_query";
78
+ ru: string;
79
+ };
80
+ 'query.cursor_expect_uuid': {
81
+ code: "invalid_query";
82
+ ru: string;
83
+ };
84
+ 'query.cursor_expect_timestamptz': {
85
+ code: "invalid_query";
86
+ ru: string;
87
+ };
88
+ 'query.cursor_expect_date': {
89
+ code: "invalid_query";
90
+ ru: string;
91
+ };
92
+ 'query.cursor_expect_jsonb': {
93
+ code: "invalid_query";
94
+ ru: string;
95
+ };
96
+ 'query.cursor_rev': {
97
+ code: "invalid_query";
98
+ ru: string;
99
+ };
100
+ 'query.cursor_path': {
101
+ code: "invalid_query";
102
+ ru: string;
103
+ };
104
+ 'query.cursor_of_field': {
105
+ code: "invalid_query";
106
+ ru: string;
107
+ };
108
+ 'query.empty_chain': {
109
+ code: "invalid_query";
110
+ ru: string;
111
+ };
112
+ 'query.pivot_missing': {
113
+ code: "invalid_query";
114
+ ru: string;
115
+ };
116
+ 'query.deep_first_step': {
117
+ code: "invalid_query";
118
+ ru: string;
119
+ };
120
+ 'query.deep_hop': {
121
+ code: "invalid_query";
122
+ ru: string;
123
+ };
124
+ 'query.deep_with_deleted': {
125
+ code: "invalid_query";
126
+ ru: string;
127
+ };
128
+ 'query.after_without_sort': {
129
+ code: "invalid_query";
130
+ ru: string;
131
+ };
132
+ 'query.bad_uuid': {
133
+ code: "invalid_query";
134
+ ru: string;
135
+ hint: string;
136
+ };
137
+ 'query.agg_field': {
138
+ code: "invalid_query";
139
+ ru: string;
140
+ };
141
+ };
@@ -0,0 +1,171 @@
1
+ export const query = {
2
+ // sql.ts, sortSpec: поле sort() не из списка
3
+ 'query.sort_field': {
4
+ code: 'invalid_query',
5
+ ru: "sort: поле 'at', 'rev', 'id' или 'data.<путь>', а не '{field}'",
6
+ },
7
+ // sql.ts, sortSpec: поле sort() похоже на имя поля данных без префикса data. (sort('code'))
8
+ 'query.sort_field_data': {
9
+ code: 'invalid_query',
10
+ ru: "sort: поле 'at', 'rev', 'id' или 'data.<путь>', а не '{field}' — может быть, data.{field}?",
11
+ hint: "поле данных в sort() — с префиксом data.: sort('data.code'); колонки строки — 'at' (время версии), 'rev', 'id'",
12
+ },
13
+ // sql.ts, checkField: поле фильтра, sort() или агрегата не описано ни в одном классе шага (в 1.5 — предупреждение, с 2.0 —
14
+ // отказ); where — шаг или вызов, как в коде: Shop({ nmae }), sort('data.nmae'), sum('data.nmae')
15
+ 'query.unknown_field': {
16
+ code: 'invalid_query',
17
+ ru: '{where}: поле {field} не описано в классе {cls}',
18
+ hint: 'проверить имя поля: похожие названы в тексте, поля класса — db.registry.resolve(класс).schema',
19
+ },
20
+ // sql.ts, resolveHop: классы соседних шагов не ссылаются друг на друга; from, to — имена шагов
21
+ 'query.no_path': {
22
+ code: 'no_path',
23
+ ru: 'нет перехода {from} → {to}: ни один класс не ссылается на другой',
24
+ },
25
+ // sql.ts, compileOp: оператор фильтра, которого построитель не знает
26
+ 'query.unknown_op': {
27
+ code: 'invalid_query',
28
+ ru: 'неизвестный оператор {op}',
29
+ },
30
+ // sql.ts, compileTags: значение tags()
31
+ 'query.tags_arg': {
32
+ code: 'invalid_query',
33
+ ru: 'tags() принимает строку, список или has/hasAny/hasAll',
34
+ },
35
+ // sql.ts, compileFilter: оператор, кроме or(…), вместо фильтра шага
36
+ 'query.step_op': {
37
+ code: 'invalid_query',
38
+ ru: 'оператор {op} на уровне фильтра шага — допустим только or(…)',
39
+ },
40
+ // sql.ts, compileFilter: фильтр — список, а в нём не id
41
+ 'query.id_list': {
42
+ code: 'invalid_query',
43
+ ru: 'список id: ожидались строки',
44
+ },
45
+ // sql.ts, compileFilter: { id: […] } — в списке не id
46
+ 'query.filter_id_list': {
47
+ code: 'invalid_query',
48
+ ru: 'filter.id: ожидались строки',
49
+ },
50
+ // sql.ts, compileFilter: { id } — не строка и не список
51
+ 'query.filter_id': {
52
+ code: 'invalid_query',
53
+ ru: 'filter.id принимает строку или список строк',
54
+ },
55
+ // sql.ts, compileFilter: значение конца в фильтре шага; role — имя конца
56
+ 'query.end_value': {
57
+ code: 'invalid_query',
58
+ ru: 'конец {role}: ожидался id, строка ответа или null',
59
+ },
60
+ // sql.ts, cursorParams: курсор — не объект со значением v; field — поле sort()
61
+ 'query.cursor_shape': {
62
+ code: 'invalid_query',
63
+ ru: "after(cursor): курсор — объект { v, id } из cursorOf(строка, '{field}')",
64
+ },
65
+ // sql.ts, cursorParams: id курсора — не uuid; id — значение, как его печатает shown() (JSON, длинное — с многоточием)
66
+ 'query.cursor_id': {
67
+ code: 'invalid_query',
68
+ ru: 'after(cursor): id курсора — uuid строки, а не {id}',
69
+ },
70
+ // sql.ts, cursorParams: значение курсора не подходит к типу поля sort(); value — как печатает shown(), expect — текст
71
+ // записи query.cursor_expect_* (lmsg)
72
+ 'query.cursor_value': {
73
+ code: 'invalid_query',
74
+ ru: "after(cursor): значение курсора {value} не подходит к sort('{field}') — ожидалось: {expect}; курсор снят с другого поля? Нужен cursorOf(строка, '{field}')",
75
+ },
76
+ // то же у поля данных, которого в строке может не быть: подходит и курсор null
77
+ 'query.cursor_value_nullable': {
78
+ code: 'invalid_query',
79
+ ru: "after(cursor): значение курсора {value} не подходит к sort('{field}') — ожидалось: {expect} или null; курсор снят с другого поля? Нужен cursorOf(строка, '{field}')",
80
+ },
81
+ // sql.ts, CURSOR_EXPECT: какое значение курсора ждёт поле sort() по своему типу — параметр expect двух записей выше
82
+ 'query.cursor_expect_numeric': {
83
+ code: 'invalid_query',
84
+ ru: 'число',
85
+ },
86
+ 'query.cursor_expect_int': {
87
+ code: 'invalid_query',
88
+ ru: 'целое число',
89
+ },
90
+ 'query.cursor_expect_boolean': {
91
+ code: 'invalid_query',
92
+ ru: 'true/false',
93
+ },
94
+ 'query.cursor_expect_text': {
95
+ code: 'invalid_query',
96
+ ru: 'строка',
97
+ },
98
+ 'query.cursor_expect_uuid': {
99
+ code: 'invalid_query',
100
+ ru: 'uuid строкой',
101
+ },
102
+ 'query.cursor_expect_timestamptz': {
103
+ code: 'invalid_query',
104
+ ru: 'время строкой вида 2026-10-07T10:00:00Z',
105
+ },
106
+ 'query.cursor_expect_date': {
107
+ code: 'invalid_query',
108
+ ru: 'дата строкой вида 2026-10-07',
109
+ },
110
+ 'query.cursor_expect_jsonb': {
111
+ code: 'invalid_query',
112
+ ru: 'строка, число, true/false',
113
+ },
114
+ // sql.ts, cursorRev: rev курсора versions(); rev — как печатает shown()
115
+ 'query.cursor_rev': {
116
+ code: 'invalid_query',
117
+ ru: 'after(cursor): rev курсора — номер версии (целое ≥ 1), а не {rev}',
118
+ },
119
+ // sql.ts, cursorPath: в курсоре paths() нет id узла; key — ключ узла в пути
120
+ 'query.cursor_path': {
121
+ code: 'invalid_query',
122
+ ru: 'after(cursor): в курсоре пути нет id узла {key} — нужен cursorOf(путь, поле) из paths() этой же цепочки',
123
+ },
124
+ // sql.ts, cursorOf(): поле не из списка
125
+ 'query.cursor_of_field': {
126
+ code: 'invalid_query',
127
+ ru: "cursorOf: поле 'at', 'rev', 'id' или 'data.<путь>', а не '{field}'",
128
+ },
129
+ // sql.ts, buildRead: цепочка без шагов
130
+ 'query.empty_chain': {
131
+ code: 'invalid_query',
132
+ ru: 'пустая цепочка',
133
+ },
134
+ // sql.ts, buildRead: возврат к узлу, которого нет в пути; name — имя шага
135
+ 'query.pivot_missing': {
136
+ code: 'invalid_query',
137
+ ru: 'возврат к узлу {name}: узла нет в этом пути',
138
+ },
139
+ // sql.ts, buildRead: deep() на первом шаге
140
+ 'query.deep_first_step': {
141
+ code: 'invalid_query',
142
+ ru: 'deep() — на шаге перехода к тому же классу, а не на первом шаге',
143
+ },
144
+ // sql.ts, buildRead: deep() на переходе к другому классу; from, to — имена шагов
145
+ 'query.deep_hop': {
146
+ code: 'invalid_query',
147
+ ru: 'deep() — только на переходе к тому же классу (дети любой глубины): {from} → {to}',
148
+ },
149
+ // sql.ts, buildRead: deep() вместе с withDeleted()
150
+ 'query.deep_with_deleted': {
151
+ code: 'invalid_query',
152
+ ru: 'deep() и withDeleted() не сочетаются',
153
+ },
154
+ // sql.ts, buildRead: after() без sort()
155
+ 'query.after_without_sort': {
156
+ code: 'invalid_query',
157
+ ru: 'after(cursor) требует sort(поле)',
158
+ },
159
+ // sql.ts, compileFilter: id шага, фильтра { id } или конца — не uuid (раньше — сырая ошибка PostgreSQL 22P02, у
160
+ // null — TypeError); value — значение, как в коде
161
+ 'query.bad_uuid': {
162
+ code: 'invalid_query',
163
+ ru: '{where}: {value} — не uuid',
164
+ hint: 'id — строка uuid (row.id из ответа или db.idOf(…)); проверьте переменную: undefined и null — не id',
165
+ },
166
+ // sql.ts, buildRead: агрегат не по полю данных
167
+ 'query.agg_field': {
168
+ code: 'invalid_query',
169
+ ru: "агрегат по полю 'data.<путь>'",
170
+ },
171
+ };
@@ -0,0 +1,70 @@
1
+ export declare const sqlAccess: {
2
+ 'sql-access.no_session': {
3
+ code: "no_session";
4
+ ru: string;
5
+ };
6
+ 'sql-access.no_membership': {
7
+ code: "tenant_denied";
8
+ ru: string;
9
+ };
10
+ 'sql-access.acl_bad_op': {
11
+ code: "invalid_data";
12
+ ru: string;
13
+ };
14
+ 'sql-access.account_unavailable': {
15
+ code: "target_not_found";
16
+ ru: string;
17
+ };
18
+ 'sql-access.no_right': {
19
+ code: "acl_denied";
20
+ ru: string;
21
+ };
22
+ 'sql-access.default_deny': {
23
+ code: "acl_denied";
24
+ ru: string;
25
+ };
26
+ 'sql-access.bind_denied': {
27
+ code: "acl_denied";
28
+ ru: string;
29
+ };
30
+ 'sql-access.self_or_sysadmin': {
31
+ code: "acl_denied";
32
+ ru: string;
33
+ };
34
+ 'sql-access.no_sessions_for_account': {
35
+ code: "acl_denied";
36
+ ru: string;
37
+ };
38
+ 'sql-access.password_args': {
39
+ code: "invalid_data";
40
+ ru: string;
41
+ };
42
+ 'sql-access.apikey_prefix_conflict': {
43
+ code: "conflict";
44
+ ru: string;
45
+ };
46
+ 'sql-access.otp_args': {
47
+ code: "invalid_data";
48
+ ru: string;
49
+ };
50
+ 'sql-access.account_not_found': {
51
+ code: "target_not_found";
52
+ ru: string;
53
+ };
54
+ 'sql-access.otp_sysadmin_only': {
55
+ code: "acl_denied";
56
+ ru: string;
57
+ };
58
+ 'sql-access.identity_args': {
59
+ code: "invalid_data";
60
+ ru: string;
61
+ };
62
+ 'sql-access.last_service_key': {
63
+ code: "acl_denied";
64
+ ru: string;
65
+ };
66
+ 'sql-access.switch_impersonating': {
67
+ code: "acl_denied";
68
+ ru: string;
69
+ };
70
+ };
@@ -0,0 +1,87 @@
1
+ export const sqlAccess = {
2
+ // 50-acl.sql (acl_check, acl_require), 80-auth.sql (auth_session_required, auth_can_manage, auth_switch): сессии нет
3
+ 'sql-access.no_session': {
4
+ code: 'no_session',
5
+ ru: 'нет действующей сессии',
6
+ },
7
+ // 50-acl.sql, acl_subject(); 80-auth.sql, auth_switch(): аккаунт не член арендатора-цели
8
+ 'sql-access.no_membership': {
9
+ code: 'tenant_denied',
10
+ ru: 'нет членства в арендаторе',
11
+ },
12
+ // 50-acl.sql, acl_plan(): op — переданная операция
13
+ 'sql-access.acl_bad_op': {
14
+ code: 'invalid_data',
15
+ ru: 'операция {op}: нужна READ, WRITE или DELETE',
16
+ },
17
+ // 50-acl.sql, acl_subject()
18
+ 'sql-access.account_unavailable': {
19
+ code: 'target_not_found',
20
+ ru: 'аккаунт не найден или отключён',
21
+ },
22
+ // 50-acl.sql, acl_require(): endpoint — эндпоинт API
23
+ 'sql-access.no_right': {
24
+ code: 'acl_denied',
25
+ ru: 'нет права {endpoint}',
26
+ },
27
+ // 50-acl.sql, acl_api_for(): message решения по эндпоинту без подходящего правила — текст не для ошибки (lt_text)
28
+ 'sql-access.default_deny': {
29
+ code: 'acl_denied',
30
+ ru: 'нет подходящего правила (запрет по умолчанию)',
31
+ },
32
+ // 80-auth.sql (auth_can_manage, auth_set_password, auth_link): нет недавнего входа и права auth.credential
33
+ 'sql-access.bind_denied': {
34
+ code: 'acl_denied',
35
+ ru: 'привязка отклонена: нужен недавний вход или право auth.credential',
36
+ },
37
+ // 80-auth.sql, auth_guard()
38
+ 'sql-access.self_or_sysadmin': {
39
+ code: 'acl_denied',
40
+ ru: 'креды и сессии этого аккаунта меняет только он сам или системный администратор',
41
+ },
42
+ // 80-auth.sql, issue_session()
43
+ 'sql-access.no_sessions_for_account': {
44
+ code: 'acl_denied',
45
+ ru: 'сессии для этого аккаунта не выпускаются',
46
+ },
47
+ // 80-auth.sql, auth_set_password()
48
+ 'sql-access.password_args': {
49
+ code: 'invalid_data',
50
+ ru: 'пароль: вид, идентификатор и хэш scrypt$… обязательны',
51
+ },
52
+ // 80-auth.sql, auth_issue_apikey(): SQLSTATE 40001 — повторяемый конфликт
53
+ 'sql-access.apikey_prefix_conflict': {
54
+ code: 'conflict',
55
+ ru: 'не удалось выпустить ключ с уникальным префиксом',
56
+ },
57
+ // 80-auth.sql, auth_issue_otp()
58
+ 'sql-access.otp_args': {
59
+ code: 'invalid_data',
60
+ ru: 'код: вид OTP или OTP_<имя>, идентификатор, 4–10 знаков',
61
+ },
62
+ // 80-auth.sql, auth_issue_otp()
63
+ 'sql-access.account_not_found': {
64
+ code: 'target_not_found',
65
+ ru: 'аккаунт не найден',
66
+ },
67
+ // 80-auth.sql, auth_issue_otp()
68
+ 'sql-access.otp_sysadmin_only': {
69
+ code: 'acl_denied',
70
+ ru: 'коды входа для System, сервисов и системных администраторов выпускает только системный администратор',
71
+ },
72
+ // 80-auth.sql, auth_link()
73
+ 'sql-access.identity_args': {
74
+ code: 'invalid_data',
75
+ ru: 'identity: вид (TELEGRAM, GOOGLE, …) и идентификатор обязательны',
76
+ },
77
+ // 80-auth.sql, auth_revoke_credential()
78
+ 'sql-access.last_service_key': {
79
+ code: 'acl_denied',
80
+ ru: 'последний действующий ключ сервиса не отзывается: сначала выпустите новый',
81
+ },
82
+ // 80-auth.sql, auth_switch()
83
+ 'sql-access.switch_impersonating': {
84
+ code: 'acl_denied',
85
+ ru: 'auth.switch — для собственной сессии, не при имперсонации',
86
+ },
87
+ };
@@ -0,0 +1,164 @@
1
+ export declare const sqlCore: {
2
+ 'sql-core.no_membership': {
3
+ code: "tenant_denied";
4
+ ru: string;
5
+ };
6
+ 'sql-core.account_not_id': {
7
+ code: "acl_denied";
8
+ ru: string;
9
+ };
10
+ 'sql-core.no_impersonate_right': {
11
+ code: "acl_denied";
12
+ ru: string;
13
+ };
14
+ 'sql-core.impersonation_no_account': {
15
+ code: "target_not_found";
16
+ ru: string;
17
+ hint: string;
18
+ };
19
+ 'sql-core.impersonation_denied': {
20
+ code: "acl_denied";
21
+ ru: string;
22
+ };
23
+ 'sql-core.tenant_not_id': {
24
+ code: "tenant_denied";
25
+ ru: string;
26
+ };
27
+ 'sql-core.bad_api_key': {
28
+ code: "no_session";
29
+ ru: string;
30
+ hint: string;
31
+ };
32
+ 'sql-core.pattern_trailing_backslash': {
33
+ code: "invalid_class";
34
+ ru: string;
35
+ };
36
+ 'sql-core.pattern_escape_in_set': {
37
+ code: "invalid_class";
38
+ ru: string;
39
+ };
40
+ 'sql-core.pattern_word_boundary': {
41
+ code: "invalid_class";
42
+ ru: string;
43
+ };
44
+ 'sql-core.pattern_unicode_property': {
45
+ code: "invalid_class";
46
+ ru: string;
47
+ };
48
+ 'sql-core.pattern_backreference': {
49
+ code: "invalid_class";
50
+ ru: string;
51
+ };
52
+ 'sql-core.pattern_named_group': {
53
+ code: "invalid_class";
54
+ ru: string;
55
+ };
56
+ 'sql-core.schema_node_not_object': {
57
+ code: "invalid_class";
58
+ ru: string;
59
+ };
60
+ 'sql-core.keyword_unsupported': {
61
+ code: "invalid_class";
62
+ ru: string;
63
+ };
64
+ 'sql-core.unknown_type': {
65
+ code: "invalid_class";
66
+ ru: string;
67
+ };
68
+ 'sql-core.enum_objects_in_any_of': {
69
+ code: "invalid_class";
70
+ ru: string;
71
+ };
72
+ 'sql-core.format_unsupported': {
73
+ code: "invalid_class";
74
+ ru: string;
75
+ };
76
+ 'sql-core.format_in_any_of': {
77
+ code: "invalid_class";
78
+ ru: string;
79
+ };
80
+ 'sql-core.string_length_in_any_of': {
81
+ code: "invalid_class";
82
+ ru: string;
83
+ };
84
+ 'sql-core.unique_items_in_any_of': {
85
+ code: "invalid_class";
86
+ ru: string;
87
+ };
88
+ 'sql-core.min_properties_in_any_of': {
89
+ code: "invalid_class";
90
+ ru: string;
91
+ };
92
+ 'sql-core.issue_string_too_short': {
93
+ code: "invalid_data";
94
+ ru: string;
95
+ };
96
+ 'sql-core.issue_string_too_long': {
97
+ code: "invalid_data";
98
+ ru: string;
99
+ };
100
+ 'sql-core.issue_unique_items': {
101
+ code: "invalid_data";
102
+ ru: string;
103
+ };
104
+ 'sql-core.issue_date': {
105
+ code: "invalid_data";
106
+ ru: string;
107
+ };
108
+ 'sql-core.issue_property_count': {
109
+ code: "invalid_data";
110
+ ru: string;
111
+ };
112
+ 'sql-core.issue_enum': {
113
+ code: "invalid_data";
114
+ ru: string;
115
+ };
116
+ 'sql-core.issue_additional': {
117
+ code: "invalid_data";
118
+ ru: string;
119
+ };
120
+ 'sql-core.issue_rule': {
121
+ code: "invalid_data";
122
+ ru: string;
123
+ };
124
+ 'sql-core.issue_schema': {
125
+ code: "invalid_data";
126
+ ru: string;
127
+ };
128
+ 'sql-core.parent_not_found': {
129
+ code: "invalid_class";
130
+ ru: string;
131
+ };
132
+ 'sql-core.inheritance_cycle': {
133
+ code: "invalid_class";
134
+ ru: string;
135
+ };
136
+ 'sql-core.class_metaschema': {
137
+ code: "invalid_data";
138
+ ru: string;
139
+ };
140
+ 'sql-core.meta_too_large': {
141
+ code: "invalid_class";
142
+ ru: string;
143
+ };
144
+ 'sql-core.key_field_type': {
145
+ code: "invalid_class";
146
+ ru: string;
147
+ };
148
+ 'sql-core.key_end_type': {
149
+ code: "invalid_class";
150
+ ru: string;
151
+ };
152
+ 'sql-core.key_unknown_name': {
153
+ code: "invalid_class";
154
+ ru: string;
155
+ };
156
+ 'sql-core.unset_required_end': {
157
+ code: "invalid_class";
158
+ ru: string;
159
+ };
160
+ 'sql-core.system_history_off': {
161
+ code: "invalid_class";
162
+ ru: string;
163
+ };
164
+ };