@objectstack/plugin-sharing 7.2.1 → 7.4.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.
@@ -0,0 +1,275 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+
3
+ /**
4
+ * Auto-generated by 'os i18n extract' for locale 'es-ES'.
5
+ * Edit translations in place; re-run extract (with --merge) to fill new gaps.
6
+ * Do not hand-edit the structure — only the leaf string values.
7
+ */
8
+
9
+ import type { TranslationData } from '@objectstack/spec/system';
10
+
11
+ export const esESObjects: NonNullable<TranslationData['objects']> = {
12
+ sys_record_share: {
13
+ label: "Compartición de registro",
14
+ pluralLabel: "Comparticiones de registro",
15
+ description: "Concesión de compartición por registro; amplía OWD con acceso explícito.",
16
+ fields: {
17
+ id: {
18
+ label: "ID de compartición"
19
+ },
20
+ object_name: {
21
+ label: "Objeto",
22
+ help: "Nombre corto del objeto del registro compartido."
23
+ },
24
+ record_id: {
25
+ label: "Registro",
26
+ help: "Clave primaria del registro compartido dentro de object_name."
27
+ },
28
+ recipient_type: {
29
+ label: "Tipo de destinatario",
30
+ help: "Tipo de principal que posee la concesión.",
31
+ options: {
32
+ user: "Usuario",
33
+ group: "Grupo",
34
+ role: "Rol",
35
+ role_and_subordinates: "Rol y subordinados",
36
+ guest: "Invitado"
37
+ }
38
+ },
39
+ recipient_id: {
40
+ label: "Destinatario",
41
+ help: "ID del usuario/grupo/rol que recibe acceso."
42
+ },
43
+ access_level: {
44
+ label: "Nivel de acceso",
45
+ help: "Lo que puede hacer el destinatario: read | edit | full (transfer/share/delete).",
46
+ options: {
47
+ read: "Leer",
48
+ edit: "Editar",
49
+ full: "Total"
50
+ }
51
+ },
52
+ source: {
53
+ label: "Origen",
54
+ help: "Motivo por el que existe esta concesión; lo utiliza el evaluador de reglas para reconciliar.",
55
+ options: {
56
+ manual: "Manual",
57
+ rule: "Regla",
58
+ team: "Equipo",
59
+ inherited: "Heredado"
60
+ }
61
+ },
62
+ source_id: {
63
+ label: "ID de origen",
64
+ help: "Nombre de la regla / ID del equipo cuando source != manual."
65
+ },
66
+ granted_by: {
67
+ label: "Concedido por",
68
+ help: "Usuario que creó la concesión (solo manual)."
69
+ },
70
+ reason: {
71
+ label: "Motivo",
72
+ help: "Explicación opcional en texto libre que se muestra al destinatario."
73
+ },
74
+ created_at: {
75
+ label: "Creado el"
76
+ },
77
+ updated_at: {
78
+ label: "Actualizado el"
79
+ }
80
+ },
81
+ _views: {
82
+ granted_to_me: {
83
+ label: "Concedidos a mí"
84
+ },
85
+ granted_by_me: {
86
+ label: "Concedidos por mí"
87
+ },
88
+ by_object: {
89
+ label: "Por objeto"
90
+ },
91
+ manual_grants: {
92
+ label: "Concesiones manuales"
93
+ },
94
+ rule_grants: {
95
+ label: "Concesiones por regla"
96
+ },
97
+ all_shares: {
98
+ label: "Todas"
99
+ }
100
+ }
101
+ },
102
+ sys_sharing_rule: {
103
+ label: "Regla de compartición",
104
+ pluralLabel: "Reglas de compartición",
105
+ description: "Regla de compartición declarativa que materializa automáticamente concesiones de sys_record_share. Se define mediante defineSharingRule() en código o con el generador de criterios de Studio.",
106
+ fields: {
107
+ id: {
108
+ label: "ID de regla"
109
+ },
110
+ organization_id: {
111
+ label: "Organización",
112
+ help: "Tenant que posee esta regla; null = global."
113
+ },
114
+ name: {
115
+ label: "Nombre",
116
+ help: "Nombre de regla snake_case único."
117
+ },
118
+ label: {
119
+ label: "Nombre visible"
120
+ },
121
+ description: {
122
+ label: "Descripción"
123
+ },
124
+ object_name: {
125
+ label: "Objeto",
126
+ help: "Nombre corto del objeto (p. ej. opportunity, account)."
127
+ },
128
+ criteria_json: {
129
+ label: "Criterios (JSON de FilterCondition)",
130
+ help: "FilterCondition JSON comparado con los registros de object_name. Vacío = coincide con todos."
131
+ },
132
+ recipient_type: {
133
+ label: "Tipo de destinatario",
134
+ help: "Tipo de principal que recibe acceso; se expande a concesiones de usuario durante la evaluación. `department` recorre el árbol parent_department_id; `team` es plano (better-auth).",
135
+ options: {
136
+ user: "Usuario",
137
+ team: "Equipo",
138
+ department: "Departamento",
139
+ role: "Rol",
140
+ queue: "Cola"
141
+ }
142
+ },
143
+ recipient_id: {
144
+ label: "Destinatario",
145
+ help: "ID de departamento / ID de equipo / nombre del rol / nombre de la cola / ID del usuario según recipient_type."
146
+ },
147
+ access_level: {
148
+ label: "Nivel de acceso",
149
+ options: {
150
+ read: "Leer",
151
+ edit: "Editar",
152
+ full: "Total"
153
+ }
154
+ },
155
+ active: {
156
+ label: "Activo",
157
+ help: "Solo las reglas activas participan en la evaluación del ciclo de vida."
158
+ },
159
+ created_at: {
160
+ label: "Creado el"
161
+ },
162
+ updated_at: {
163
+ label: "Actualizado el"
164
+ }
165
+ },
166
+ _views: {
167
+ active: {
168
+ label: "Activo"
169
+ },
170
+ inactive: {
171
+ label: "Inactivo"
172
+ },
173
+ by_object: {
174
+ label: "Por objeto"
175
+ },
176
+ all_rules: {
177
+ label: "Todas"
178
+ }
179
+ }
180
+ },
181
+ sys_share_link: {
182
+ label: "Enlace de uso compartido",
183
+ pluralLabel: "Enlaces de uso compartido",
184
+ description: "Token de capacidad opaco que concede acceso a un único registro. Uso compartido mediante enlace público al estilo de Notion/Figma.",
185
+ fields: {
186
+ id: {
187
+ label: "ID del enlace"
188
+ },
189
+ token: {
190
+ label: "Token",
191
+ help: "Token aleatorio opaco seguro para URL (≥ 22 caracteres). El único secreto de esta fila."
192
+ },
193
+ object_name: {
194
+ label: "Objeto",
195
+ help: "Nombre corto del objeto del registro compartido (p. ej. ai_conversation, contracts_contract)"
196
+ },
197
+ record_id: {
198
+ label: "Registro",
199
+ help: "Clave principal del registro compartido dentro de object_name"
200
+ },
201
+ permission: {
202
+ label: "Permiso",
203
+ help: "Lo que el titular del enlace puede hacer con el registro",
204
+ options: {
205
+ view: "Ver",
206
+ comment: "Comentar",
207
+ edit: "Editar"
208
+ }
209
+ },
210
+ audience: {
211
+ label: "Audiencia",
212
+ help: "Capa de control aplicada por encima de la verificación del token",
213
+ options: {
214
+ public: "Público (indexable)",
215
+ link_only: "Cualquier persona con el enlace",
216
+ signed_in: "Usuarios con sesión iniciada",
217
+ email: "Correos específicos"
218
+ }
219
+ },
220
+ expires_at: {
221
+ label: "Caduca el",
222
+ help: "Cuando se establece, resolveToken devuelve null después de esta marca de tiempo"
223
+ },
224
+ email_allowlist: {
225
+ label: "Lista de correos permitidos",
226
+ help: "Direcciones en minúsculas que se comprueban cuando audience=email"
227
+ },
228
+ password_hash: {
229
+ label: "Hash de contraseña",
230
+ help: "Hash Argon2/bcrypt. Cuando se establece, la interfaz solicita una contraseña antes de mostrar el contenido."
231
+ },
232
+ redact_fields: {
233
+ label: "Campos ocultos por enlace",
234
+ help: "Campos adicionales que se eliminan de la respuesta, además del conjunto predeterminado del objeto"
235
+ },
236
+ label: {
237
+ label: "Etiqueta",
238
+ help: "Texto libre que se muestra en el cuadro de diálogo de uso compartido (p. ej. \"ACME Q3 contract\")"
239
+ },
240
+ revoked_at: {
241
+ label: "Revocado el",
242
+ help: "Cuando se establece, el enlace queda deshabilitado permanentemente"
243
+ },
244
+ created_by: {
245
+ label: "Creado por",
246
+ help: "Emisor del enlace"
247
+ },
248
+ created_at: {
249
+ label: "Creado el"
250
+ },
251
+ last_used_at: {
252
+ label: "Último uso el",
253
+ help: "Lo registra resolveToken; el panel lo usa para resaltar los enlaces activos"
254
+ },
255
+ use_count: {
256
+ label: "Número de usos",
257
+ help: "Lo incrementa resolveToken en cada resolución correcta"
258
+ }
259
+ },
260
+ _views: {
261
+ active_links: {
262
+ label: "Activos"
263
+ },
264
+ by_me: {
265
+ label: "Creados por mí"
266
+ },
267
+ revoked: {
268
+ label: "Revocados"
269
+ },
270
+ all_links: {
271
+ label: "Todos"
272
+ }
273
+ }
274
+ }
275
+ };
@@ -0,0 +1,23 @@
1
+ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
2
+
3
+ /**
4
+ * SharingTranslations — i18n bundle owned by this plugin (ADR-0029 D8).
5
+ *
6
+ * Object label/field/view/action translations for the sys_* objects this
7
+ * plugin owns. Loaded at runtime via the plugin's `kernel:ready` hook
8
+ * (`i18n.loadTranslations`). Regenerate with `os i18n extract` against
9
+ * `scripts/i18n-extract.config.ts`.
10
+ */
11
+
12
+ import type { TranslationBundle } from '@objectstack/spec/system';
13
+ import { enObjects } from './en.objects.generated.js';
14
+ import { zhCNObjects } from './zh-CN.objects.generated.js';
15
+ import { jaJPObjects } from './ja-JP.objects.generated.js';
16
+ import { esESObjects } from './es-ES.objects.generated.js';
17
+
18
+ export const SharingTranslations: TranslationBundle = {
19
+ en: { objects: enObjects },
20
+ 'zh-CN': { objects: zhCNObjects },
21
+ 'ja-JP': { objects: jaJPObjects },
22
+ 'es-ES': { objects: esESObjects },
23
+ };
@@ -0,0 +1,275 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+
3
+ /**
4
+ * Auto-generated by 'os i18n extract' for locale 'ja-JP'.
5
+ * Edit translations in place; re-run extract (with --merge) to fill new gaps.
6
+ * Do not hand-edit the structure — only the leaf string values.
7
+ */
8
+
9
+ import type { TranslationData } from '@objectstack/spec/system';
10
+
11
+ export const jaJPObjects: NonNullable<TranslationData['objects']> = {
12
+ sys_record_share: {
13
+ label: "レコード共有",
14
+ pluralLabel: "レコード共有",
15
+ description: "レコードごとの共有付与 — OWD に明示的なアクセスを追加",
16
+ fields: {
17
+ id: {
18
+ label: "共有 ID"
19
+ },
20
+ object_name: {
21
+ label: "オブジェクト",
22
+ help: "共有レコードの短いオブジェクト名"
23
+ },
24
+ record_id: {
25
+ label: "レコード",
26
+ help: "object_name 内の共有レコードの主キー"
27
+ },
28
+ recipient_type: {
29
+ label: "受信者タイプ",
30
+ help: "付与を保持するプリンシパルの種別",
31
+ options: {
32
+ user: "ユーザー",
33
+ group: "グループ",
34
+ role: "ロール",
35
+ role_and_subordinates: "ロールと下位階層",
36
+ guest: "ゲスト"
37
+ }
38
+ },
39
+ recipient_id: {
40
+ label: "受信者",
41
+ help: "アクセスを受け取るユーザー/グループ/ロールの ID"
42
+ },
43
+ access_level: {
44
+ label: "アクセスレベル",
45
+ help: "受信者に許可される操作 — read | edit | full(転送/共有/削除)",
46
+ options: {
47
+ read: "閲覧",
48
+ edit: "編集",
49
+ full: "フルアクセス"
50
+ }
51
+ },
52
+ source: {
53
+ label: "ソース",
54
+ help: "この付与が存在する理由 — ルール評価者が調整に使用",
55
+ options: {
56
+ manual: "手動",
57
+ rule: "ルール",
58
+ team: "チーム",
59
+ inherited: "継承"
60
+ }
61
+ },
62
+ source_id: {
63
+ label: "ソース ID",
64
+ help: "source != manual の場合のルール名 / チーム ID"
65
+ },
66
+ granted_by: {
67
+ label: "付与者",
68
+ help: "付与を作成したユーザー(手動のみ)"
69
+ },
70
+ reason: {
71
+ label: "理由",
72
+ help: "受信者に表示されるオプションの自由記述説明"
73
+ },
74
+ created_at: {
75
+ label: "作成日時"
76
+ },
77
+ updated_at: {
78
+ label: "更新日時"
79
+ }
80
+ },
81
+ _views: {
82
+ granted_to_me: {
83
+ label: "自分への付与"
84
+ },
85
+ granted_by_me: {
86
+ label: "自分による付与"
87
+ },
88
+ by_object: {
89
+ label: "オブジェクト別"
90
+ },
91
+ manual_grants: {
92
+ label: "手動付与"
93
+ },
94
+ rule_grants: {
95
+ label: "ルール付与"
96
+ },
97
+ all_shares: {
98
+ label: "すべて"
99
+ }
100
+ }
101
+ },
102
+ sys_sharing_rule: {
103
+ label: "共有ルール",
104
+ pluralLabel: "共有ルール",
105
+ description: "sys_record_share 付与を自動マテリアライズする宣言的共有ルール。コードの defineSharingRule() または Studio の条件ビルダーで作成します。",
106
+ fields: {
107
+ id: {
108
+ label: "ルール ID"
109
+ },
110
+ organization_id: {
111
+ label: "組織",
112
+ help: "このルールを所有するテナント。null = グローバル"
113
+ },
114
+ name: {
115
+ label: "名前",
116
+ help: "一意の snake_case ルール名"
117
+ },
118
+ label: {
119
+ label: "表示名"
120
+ },
121
+ description: {
122
+ label: "説明"
123
+ },
124
+ object_name: {
125
+ label: "オブジェクト",
126
+ help: "短いオブジェクト名(例: opportunity、account)"
127
+ },
128
+ criteria_json: {
129
+ label: "条件(FilterCondition JSON)",
130
+ help: "object_name のレコードに対してマッチする JSON FilterCondition。空 = すべてにマッチ。"
131
+ },
132
+ recipient_type: {
133
+ label: "受信者タイプ",
134
+ help: "アクセスを受け取るプリンシパルの種別 — 評価時にユーザー付与に展開されます。`department` は parent_department_id ツリーをたどります。`team` はフラット(better-auth)。",
135
+ options: {
136
+ user: "ユーザー",
137
+ team: "チーム",
138
+ department: "部門",
139
+ role: "ロール",
140
+ queue: "キュー"
141
+ }
142
+ },
143
+ recipient_id: {
144
+ label: "受信者",
145
+ help: "recipient_type に応じた部門 ID / チーム ID / ロール名 / キュー名 / ユーザー ID"
146
+ },
147
+ access_level: {
148
+ label: "アクセスレベル",
149
+ options: {
150
+ read: "閲覧",
151
+ edit: "編集",
152
+ full: "フルアクセス"
153
+ }
154
+ },
155
+ active: {
156
+ label: "有効",
157
+ help: "有効なルールのみがライフサイクル評価に参加します"
158
+ },
159
+ created_at: {
160
+ label: "作成日時"
161
+ },
162
+ updated_at: {
163
+ label: "更新日時"
164
+ }
165
+ },
166
+ _views: {
167
+ active: {
168
+ label: "有効"
169
+ },
170
+ inactive: {
171
+ label: "無効"
172
+ },
173
+ by_object: {
174
+ label: "オブジェクト別"
175
+ },
176
+ all_rules: {
177
+ label: "すべて"
178
+ }
179
+ }
180
+ },
181
+ sys_share_link: {
182
+ label: "共有リンク",
183
+ pluralLabel: "共有リンク",
184
+ description: "単一レコードへのアクセスを許可する不透明なケーパビリティトークン。Notion / Figma スタイルの公開リンク共有。",
185
+ fields: {
186
+ id: {
187
+ label: "リンク ID"
188
+ },
189
+ token: {
190
+ label: "トークン",
191
+ help: "URL セーフな不透明ランダムトークン(22 文字以上)。この行で唯一の機密情報です。"
192
+ },
193
+ object_name: {
194
+ label: "オブジェクト",
195
+ help: "共有対象レコードのオブジェクト短縮名(例: ai_conversation、contracts_contract)"
196
+ },
197
+ record_id: {
198
+ label: "レコード",
199
+ help: "object_name 内における共有対象レコードの主キー"
200
+ },
201
+ permission: {
202
+ label: "権限",
203
+ help: "リンク保持者がレコードに対して実行できる操作",
204
+ options: {
205
+ view: "閲覧",
206
+ comment: "コメント",
207
+ edit: "編集"
208
+ }
209
+ },
210
+ audience: {
211
+ label: "対象者",
212
+ help: "トークン検証の上に適用されるアクセス制御レイヤー",
213
+ options: {
214
+ public: "公開(インデックス可能)",
215
+ link_only: "リンクを知っている全員",
216
+ signed_in: "サインイン済みユーザー",
217
+ email: "特定のメールアドレス"
218
+ }
219
+ },
220
+ expires_at: {
221
+ label: "有効期限",
222
+ help: "設定すると、このタイムスタンプ以降は resolveToken が null を返します"
223
+ },
224
+ email_allowlist: {
225
+ label: "メール許可リスト",
226
+ help: "audience=email のときに照合される小文字のメールアドレス"
227
+ },
228
+ password_hash: {
229
+ label: "パスワードハッシュ",
230
+ help: "Argon2/bcrypt ハッシュ。設定すると、表示前に UI がパスワードの入力を求めます。"
231
+ },
232
+ redact_fields: {
233
+ label: "リンク単位のマスキング",
234
+ help: "オブジェクト既定のマスキング集合に加えて、レスポンスから除外する追加フィールド"
235
+ },
236
+ label: {
237
+ label: "ラベル",
238
+ help: "共有ダイアログに表示される自由記述テキスト(例: \"ACME Q3 contract\")"
239
+ },
240
+ revoked_at: {
241
+ label: "失効日時",
242
+ help: "設定すると、リンクは恒久的に無効化されます"
243
+ },
244
+ created_by: {
245
+ label: "作成者",
246
+ help: "リンクの発行者"
247
+ },
248
+ created_at: {
249
+ label: "作成日時"
250
+ },
251
+ last_used_at: {
252
+ label: "最終使用日時",
253
+ help: "resolveToken によって記録されます。ダッシュボードでアクティブなリンクを強調表示するために使用されます"
254
+ },
255
+ use_count: {
256
+ label: "使用回数",
257
+ help: "解決が成功するたびに resolveToken によって加算されます"
258
+ }
259
+ },
260
+ _views: {
261
+ active_links: {
262
+ label: "アクティブ"
263
+ },
264
+ by_me: {
265
+ label: "自分が作成"
266
+ },
267
+ revoked: {
268
+ label: "失効済み"
269
+ },
270
+ all_links: {
271
+ label: "すべて"
272
+ }
273
+ }
274
+ }
275
+ };