@digimuza/system-core 0.2.0-rc.2 → 0.3.0-rc.1

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 (151) hide show
  1. package/INTEGRATION.md +209 -3
  2. package/README.md +23 -0
  3. package/dist/ai/api.d.ts +120 -0
  4. package/dist/ai/api.d.ts.map +1 -0
  5. package/dist/ai/api.js +446 -0
  6. package/dist/ai/api.js.map +1 -0
  7. package/dist/ai/card.d.ts +27 -0
  8. package/dist/ai/card.d.ts.map +1 -0
  9. package/dist/ai/card.js +84 -0
  10. package/dist/ai/card.js.map +1 -0
  11. package/dist/ai/contract.d.ts +364 -0
  12. package/dist/ai/contract.d.ts.map +1 -0
  13. package/dist/ai/contract.js +101 -0
  14. package/dist/ai/contract.js.map +1 -0
  15. package/dist/ai/display.d.ts +20 -0
  16. package/dist/ai/display.d.ts.map +1 -0
  17. package/dist/ai/display.js +35 -0
  18. package/dist/ai/display.js.map +1 -0
  19. package/dist/ai/index.d.ts +7 -0
  20. package/dist/ai/index.d.ts.map +1 -0
  21. package/dist/ai/index.js +10 -0
  22. package/dist/ai/index.js.map +1 -0
  23. package/dist/ai/manifest.d.ts +25 -0
  24. package/dist/ai/manifest.d.ts.map +1 -0
  25. package/dist/ai/manifest.js +15 -0
  26. package/dist/ai/manifest.js.map +1 -0
  27. package/dist/ai/runner.d.ts +71 -0
  28. package/dist/ai/runner.d.ts.map +1 -0
  29. package/dist/ai/runner.js +246 -0
  30. package/dist/ai/runner.js.map +1 -0
  31. package/dist/ai/tools.d.ts +42 -0
  32. package/dist/ai/tools.d.ts.map +1 -0
  33. package/dist/ai/tools.js +117 -0
  34. package/dist/ai/tools.js.map +1 -0
  35. package/dist/audit/csv.d.ts +31 -0
  36. package/dist/audit/csv.d.ts.map +1 -0
  37. package/dist/audit/csv.js +39 -0
  38. package/dist/audit/csv.js.map +1 -0
  39. package/dist/audit/index.d.ts +5 -0
  40. package/dist/audit/index.d.ts.map +1 -0
  41. package/dist/audit/index.js +6 -0
  42. package/dist/audit/index.js.map +1 -0
  43. package/dist/convex/functions.d.ts +39 -0
  44. package/dist/convex/functions.d.ts.map +1 -1
  45. package/dist/convex/functions.js +38 -6
  46. package/dist/convex/functions.js.map +1 -1
  47. package/dist/convex/index.d.ts +1 -1
  48. package/dist/convex/index.d.ts.map +1 -1
  49. package/dist/convex/index.js.map +1 -1
  50. package/dist/core/access.d.ts +14 -0
  51. package/dist/core/access.d.ts.map +1 -1
  52. package/dist/core/access.js +62 -0
  53. package/dist/core/access.js.map +1 -1
  54. package/dist/core/audit-module.d.ts +5 -0
  55. package/dist/core/audit-module.d.ts.map +1 -0
  56. package/dist/core/audit-module.js +25 -0
  57. package/dist/core/audit-module.js.map +1 -0
  58. package/dist/core/audit.d.ts +31 -0
  59. package/dist/core/audit.d.ts.map +1 -1
  60. package/dist/core/audit.js +46 -2
  61. package/dist/core/audit.js.map +1 -1
  62. package/dist/core/catalog.d.ts +41 -0
  63. package/dist/core/catalog.d.ts.map +1 -1
  64. package/dist/core/catalog.js +45 -0
  65. package/dist/core/catalog.js.map +1 -1
  66. package/dist/core/context.d.ts +8 -2
  67. package/dist/core/context.d.ts.map +1 -1
  68. package/dist/core/context.js +4 -1
  69. package/dist/core/context.js.map +1 -1
  70. package/dist/core/index.d.ts +2 -0
  71. package/dist/core/index.d.ts.map +1 -1
  72. package/dist/core/index.js +2 -0
  73. package/dist/core/index.js.map +1 -1
  74. package/dist/core/notify.d.ts +37 -0
  75. package/dist/core/notify.d.ts.map +1 -0
  76. package/dist/core/notify.js +16 -0
  77. package/dist/core/notify.js.map +1 -0
  78. package/dist/core/roles.d.ts.map +1 -1
  79. package/dist/core/roles.js +5 -1
  80. package/dist/core/roles.js.map +1 -1
  81. package/dist/core/system-modules.d.ts +4 -0
  82. package/dist/core/system-modules.d.ts.map +1 -1
  83. package/dist/core/system-modules.js +11 -0
  84. package/dist/core/system-modules.js.map +1 -1
  85. package/dist/finance/ai-tools.d.ts +55 -0
  86. package/dist/finance/ai-tools.d.ts.map +1 -0
  87. package/dist/finance/ai-tools.js +65 -0
  88. package/dist/finance/ai-tools.js.map +1 -0
  89. package/dist/finance/index.d.ts +87 -1
  90. package/dist/finance/index.d.ts.map +1 -1
  91. package/dist/finance/index.js +92 -38
  92. package/dist/finance/index.js.map +1 -1
  93. package/dist/finance/search.d.ts +15 -0
  94. package/dist/finance/search.d.ts.map +1 -0
  95. package/dist/finance/search.js +51 -0
  96. package/dist/finance/search.js.map +1 -0
  97. package/dist/index.d.ts +2 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +2 -0
  100. package/dist/index.js.map +1 -1
  101. package/dist/modules/index.d.ts +1 -1
  102. package/dist/modules/index.d.ts.map +1 -1
  103. package/dist/modules/index.js +1 -1
  104. package/dist/modules/index.js.map +1 -1
  105. package/dist/notifications/api.d.ts +130 -0
  106. package/dist/notifications/api.d.ts.map +1 -0
  107. package/dist/notifications/api.js +384 -0
  108. package/dist/notifications/api.js.map +1 -0
  109. package/dist/notifications/contract.d.ts +132 -0
  110. package/dist/notifications/contract.d.ts.map +1 -0
  111. package/dist/notifications/contract.js +59 -0
  112. package/dist/notifications/contract.js.map +1 -0
  113. package/dist/notifications/index.d.ts +6 -0
  114. package/dist/notifications/index.d.ts.map +1 -0
  115. package/dist/notifications/index.js +9 -0
  116. package/dist/notifications/index.js.map +1 -0
  117. package/dist/search/index.d.ts +95 -0
  118. package/dist/search/index.d.ts.map +1 -0
  119. package/dist/search/index.js +151 -0
  120. package/dist/search/index.js.map +1 -0
  121. package/package.json +41 -2
  122. package/src/ai/api.ts +535 -0
  123. package/src/ai/card.ts +91 -0
  124. package/src/ai/contract.ts +245 -0
  125. package/src/ai/display.ts +38 -0
  126. package/src/ai/index.ts +9 -0
  127. package/src/ai/manifest.ts +16 -0
  128. package/src/ai/runner.ts +275 -0
  129. package/src/ai/tools.ts +128 -0
  130. package/src/audit/csv.ts +60 -0
  131. package/src/audit/index.ts +7 -0
  132. package/src/convex/functions.ts +54 -7
  133. package/src/convex/index.ts +1 -1
  134. package/src/core/access.ts +55 -1
  135. package/src/core/audit-module.ts +26 -0
  136. package/src/core/audit.ts +68 -2
  137. package/src/core/catalog.ts +63 -0
  138. package/src/core/context.ts +13 -2
  139. package/src/core/index.ts +2 -0
  140. package/src/core/notify.ts +52 -0
  141. package/src/core/roles.ts +5 -1
  142. package/src/core/system-modules.ts +12 -0
  143. package/src/finance/ai-tools.ts +68 -0
  144. package/src/finance/index.ts +119 -42
  145. package/src/finance/search.ts +58 -0
  146. package/src/index.ts +2 -0
  147. package/src/modules/index.ts +3 -0
  148. package/src/notifications/api.ts +477 -0
  149. package/src/notifications/contract.ts +142 -0
  150. package/src/notifications/index.ts +8 -0
  151. package/src/search/index.ts +198 -0
@@ -1,4 +1,6 @@
1
- import { requirePermission } from "./access.js";
1
+ import { requireHuman, requirePermission, withOperation } from "./access.js";
2
+ import { auditModuleOf } from "./audit-module.js";
3
+ import { validation } from "./errors.js";
2
4
  import { newId } from "./crypto.js";
3
5
  import { redact } from "./redact.js";
4
6
  import { clampLimit } from "./store.js";
@@ -44,7 +46,9 @@ export async function listAudit(sys, actor, filter = {}) {
44
46
  (filter.apiKeyId === undefined || e.apiKeyId === filter.apiKeyId) &&
45
47
  (filter.targetId === undefined || e.targetId === filter.targetId) &&
46
48
  (filter.operationId === undefined || e.operationId === filter.operationId) &&
47
- (filter.action === undefined || e.action === filter.action);
49
+ (filter.action === undefined || e.action === filter.action) &&
50
+ (filter.moduleId === undefined || auditModuleOf(e.action) === filter.moduleId) &&
51
+ (filter.actionPrefix === undefined || e.action.startsWith(filter.actionPrefix));
48
52
  // Use an index when the filter allows it; otherwise scan pages.
49
53
  const indexed = filter.operationId
50
54
  ? await sys.store.findBy("auditEvents", "operationId", filter.operationId)
@@ -63,4 +67,44 @@ export async function listAudit(sys, actor, filter = {}) {
63
67
  const page = await sys.store.page("auditEvents", { cursor: filter.cursor ?? null, limit, order: "desc" });
64
68
  return { ...page, items: page.items.filter(match) };
65
69
  }
70
+ /** Newest events `listAuditFacets` scans. */
71
+ export const AUDIT_FACETS_SCAN_MAX = 1000;
72
+ /** Filter options for the audit UI: distinct actions and modules of the newest events. Same permission as `listAudit`. */
73
+ export async function listAuditFacets(sys, actor) {
74
+ await requirePermission(sys, actor, P.auditRead);
75
+ const actions = new Set();
76
+ let scanned = 0;
77
+ let cursor = null;
78
+ let complete = false;
79
+ while (scanned < AUDIT_FACETS_SCAN_MAX) {
80
+ const page = await sys.store.page("auditEvents", { cursor, limit: 200, order: "desc" });
81
+ for (const e of page.items)
82
+ actions.add(e.action);
83
+ scanned += page.items.length;
84
+ cursor = page.cursor;
85
+ if (!cursor) {
86
+ complete = true;
87
+ break;
88
+ }
89
+ }
90
+ const sorted = [...actions].sort();
91
+ return { actions: sorted, moduleIds: [...new Set(sorted.map(auditModuleOf))].sort(), scanned, complete };
92
+ }
93
+ export const AUDIT_EXPORT_MAX = 1_000_000;
94
+ /**
95
+ * Records that the caller exported audit events (CSV built in the browser with
96
+ * `auditToCsv`). Same permission as reading; human sessions only.
97
+ */
98
+ export async function recordAuditExport(sys, actor, input) {
99
+ const human = requireHuman(sys, actor);
100
+ await requirePermission(sys, human, P.auditRead);
101
+ if (!Number.isInteger(input.count) || input.count < 0 || input.count > AUDIT_EXPORT_MAX)
102
+ throw withOperation(sys, validation("invalid_count", ["count"]));
103
+ // `apiKeyId` would be masked by `redact` (its name looks like a credential); a key ID is not one.
104
+ const filter = Object.fromEntries(Object.entries(input.filter)
105
+ .filter(([, v]) => v !== undefined)
106
+ .map(([k, v]) => [k === "apiKeyId" ? "keyId" : k, v]));
107
+ const eventId = await recordAudit(sys, human, { action: "audit.export", targetType: "audit", targetId: "csv", changes: { filter, count: input.count } });
108
+ return { eventId };
109
+ }
66
110
  //# sourceMappingURL=audit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/core/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/core/audit.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,27 @@ export interface FeatureFlagDefinition {
26
26
  /** V1 flags are boolean, per installation. */
27
27
  default: boolean;
28
28
  }
29
+ /** `module.snake_case`, e.g. `finance.invoice_awaiting_approval`. */
30
+ export declare const NOTIFICATION_TYPE_ID: RegExp;
31
+ /**
32
+ * A kind of notification a module sends. Core stores the type and its JSON
33
+ * params, never pre-rendered text: the app renders titles (LT/EN) from params.
34
+ */
35
+ export interface NotificationTypeDefinition {
36
+ /** Stable `module.snake_case`; starts with `${moduleId}.`. */
37
+ id: string;
38
+ /** Owning module. A type is visible to a user only while its module is enabled. */
39
+ moduleId: string;
40
+ /** Channels used until the user sets a preference. */
41
+ defaultChannels: {
42
+ inApp: boolean;
43
+ email: boolean;
44
+ };
45
+ /** Fallback text for the preferences UI (the app translates by `id`). */
46
+ description?: string;
47
+ /** Param names the type carries (documentation for the app's renderer). */
48
+ params?: readonly string[];
49
+ }
29
50
  export interface ModuleManifest {
30
51
  id: string;
31
52
  kind: ModuleKind;
@@ -38,6 +59,8 @@ export interface ModuleManifest {
38
59
  dependsOn?: readonly string[];
39
60
  /** Config keys the module registers (documentation / status). */
40
61
  configKeys?: readonly string[];
62
+ /** Notification types the module sends (`@digimuza/system-core/notifications`). */
63
+ notificationTypes?: readonly NotificationTypeDefinition[];
41
64
  }
42
65
  export declare const manifestSchema: z.ZodObject<{
43
66
  id: z.ZodString;
@@ -66,6 +89,16 @@ export declare const manifestSchema: z.ZodObject<{
66
89
  }, z.core.$strict>>>;
67
90
  dependsOn: z.ZodOptional<z.ZodArray<z.ZodString>>;
68
91
  configKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
92
+ notificationTypes: z.ZodOptional<z.ZodArray<z.ZodObject<{
93
+ id: z.ZodString;
94
+ moduleId: z.ZodString;
95
+ defaultChannels: z.ZodObject<{
96
+ inApp: z.ZodBoolean;
97
+ email: z.ZodBoolean;
98
+ }, z.core.$strict>;
99
+ description: z.ZodOptional<z.ZodString>;
100
+ params: z.ZodOptional<z.ZodArray<z.ZodString>>;
101
+ }, z.core.$strict>>>;
69
102
  }, z.core.$strict>;
70
103
  export declare class CatalogError extends Error {
71
104
  readonly problems: string[];
@@ -73,6 +106,11 @@ export declare class CatalogError extends Error {
73
106
  }
74
107
  /** Validates a single manifest's internal consistency. Returns problems, empty if valid. */
75
108
  export declare function manifestProblems(manifest: unknown): string[];
109
+ /**
110
+ * Declares a notification type. Validates eagerly (id format, module prefix)
111
+ * and returns a frozen copy. List it in the module manifest's `notificationTypes`.
112
+ */
113
+ export declare function defineNotificationType<const T extends NotificationTypeDefinition>(type: T): T;
76
114
  type DeepReadonly<T> = T extends readonly (infer U)[] ? readonly DeepReadonly<U>[] : T extends object ? {
77
115
  readonly [K in keyof T]: DeepReadonly<T[K]>;
78
116
  } : T;
@@ -97,6 +135,7 @@ export interface CatalogSubrole extends SubroleTemplate {
97
135
  export interface CatalogFlag extends FeatureFlagDefinition {
98
136
  moduleId: string;
99
137
  }
138
+ export type CatalogNotificationType = NotificationTypeDefinition;
100
139
  export interface SystemRoleTemplate {
101
140
  id: string;
102
141
  name: string;
@@ -112,6 +151,8 @@ export interface Catalog {
112
151
  readonly permissions: ReadonlyMap<string, CatalogPermission>;
113
152
  readonly subroles: ReadonlyMap<string, CatalogSubrole>;
114
153
  readonly flags: ReadonlyMap<string, CatalogFlag>;
154
+ /** Notification types declared by the composed modules (not part of the catalog version). */
155
+ readonly notificationTypes: ReadonlyMap<string, CatalogNotificationType>;
115
156
  readonly systemRoles: readonly SystemRoleTemplate[];
116
157
  /** Deterministic serialization of the catalog, for versioning. */
117
158
  readonly canonical: string;
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import { sha256Hex } from "./crypto.js";
3
3
  export const MODULE_ID = /^[a-z][a-z0-9-]{1,47}$/;
4
4
  export const PERMISSION_ID = /^[a-z][a-z0-9-]*:[a-z][a-z0-9-]*:[a-z][a-z0-9-]*$/;
5
5
  export const SCOPED_ID = /^[a-z][a-z0-9-]*:[a-z][a-z0-9-]*$/;
6
+ /** `module.snake_case`, e.g. `finance.invoice_awaiting_approval`. */
7
+ export const NOTIFICATION_TYPE_ID = /^[a-z][a-z0-9-]*\.[a-z][a-z0-9_]*$/;
6
8
  const describedItem = { name: z.string().min(1).max(120), description: z.string().min(1).max(500) };
7
9
  export const manifestSchema = z.strictObject({
8
10
  id: z.string().regex(MODULE_ID, "module id must match /^[a-z][a-z0-9-]{1,47}$/"),
@@ -18,6 +20,15 @@ export const manifestSchema = z.strictObject({
18
20
  .optional(),
19
21
  dependsOn: z.array(z.string().regex(MODULE_ID)).optional(),
20
22
  configKeys: z.array(z.string().min(1)).optional(),
23
+ notificationTypes: z
24
+ .array(z.strictObject({
25
+ id: z.string().regex(NOTIFICATION_TYPE_ID),
26
+ moduleId: z.string().regex(MODULE_ID),
27
+ defaultChannels: z.strictObject({ inApp: z.boolean(), email: z.boolean() }),
28
+ description: z.string().min(1).max(500).optional(),
29
+ params: z.array(z.string().min(1).max(64)).optional(),
30
+ }))
31
+ .optional(),
21
32
  });
22
33
  export class CatalogError extends Error {
23
34
  problems;
@@ -64,8 +75,35 @@ export function manifestProblems(manifest) {
64
75
  problems.push(`${m.id}: duplicate feature flag ${f.id}`);
65
76
  flagIds.add(f.id);
66
77
  }
78
+ const typeIds = new Set();
79
+ for (const t of m.notificationTypes ?? []) {
80
+ if (t.moduleId !== m.id)
81
+ problems.push(`${m.id}: notification type ${t.id} belongs to module ${t.moduleId}`);
82
+ if (!t.id.startsWith(`${m.id}.`))
83
+ problems.push(`${m.id}: notification type ${t.id} must start with "${m.id}."`);
84
+ if (typeIds.has(t.id))
85
+ problems.push(`${m.id}: duplicate notification type ${t.id}`);
86
+ typeIds.add(t.id);
87
+ }
67
88
  return problems;
68
89
  }
90
+ /**
91
+ * Declares a notification type. Validates eagerly (id format, module prefix)
92
+ * and returns a frozen copy. List it in the module manifest's `notificationTypes`.
93
+ */
94
+ export function defineNotificationType(type) {
95
+ const id = typeof type?.id === "string" ? type.id : "";
96
+ if (!NOTIFICATION_TYPE_ID.test(id))
97
+ throw new Error(`defineNotificationType: invalid id "${id}" (expected module.snake_case, e.g. finance.invoice_awaiting_approval)`);
98
+ if (typeof type.moduleId !== "string" || !MODULE_ID.test(type.moduleId))
99
+ throw new Error(`defineNotificationType(${id}): invalid moduleId`);
100
+ if (!id.startsWith(`${type.moduleId}.`))
101
+ throw new Error(`defineNotificationType(${id}): id must start with "${type.moduleId}."`);
102
+ const ch = type.defaultChannels;
103
+ if (!ch || typeof ch.inApp !== "boolean" || typeof ch.email !== "boolean")
104
+ throw new Error(`defineNotificationType(${id}): defaultChannels { inApp, email } are required`);
105
+ return deepFreeze(structuredClone(type));
106
+ }
69
107
  function deepFreeze(value) {
70
108
  if (value && typeof value === "object" && !Object.isFrozen(value)) {
71
109
  Object.freeze(value);
@@ -95,6 +133,7 @@ export function buildCatalog(systemModules, businessModules, systemRoles) {
95
133
  const permissions = new Map();
96
134
  const subroles = new Map();
97
135
  const flags = new Map();
136
+ const notificationTypes = new Map();
98
137
  for (const m of all) {
99
138
  problems.push(...manifestProblems(m));
100
139
  if (modules.has(m.id)) {
@@ -117,6 +156,11 @@ export function buildCatalog(systemModules, businessModules, systemRoles) {
117
156
  problems.push(`feature flag id collision: ${f.id}`);
118
157
  flags.set(f.id, { ...f, moduleId: m.id });
119
158
  }
159
+ for (const t of m.notificationTypes ?? []) {
160
+ if (notificationTypes.has(t.id))
161
+ problems.push(`notification type id collision: ${t.id}`);
162
+ notificationTypes.set(t.id, t);
163
+ }
120
164
  }
121
165
  for (const m of all) {
122
166
  for (const dep of m.dependsOn ?? [])
@@ -137,6 +181,7 @@ export function buildCatalog(systemModules, businessModules, systemRoles) {
137
181
  permissions,
138
182
  subroles,
139
183
  flags,
184
+ notificationTypes,
140
185
  systemRoles,
141
186
  canonical,
142
187
  version: () => sha256Hex(canonical),
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/core/catalog.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type Catalog, type ModuleManifest } from "./catalog.js";
2
2
  import { type Logger } from "../diagnostics/logging.js";
3
+ import type { Notifier } from "./notify.js";
3
4
  import type { Store } from "./store.js";
4
5
  export declare const normalizeEmail: (email: string) => string;
5
6
  export declare function parseEmailList(value: string | readonly string[] | undefined | null): Set<string>;
@@ -33,9 +34,14 @@ export interface SystemContext {
33
34
  readonly operationId: string;
34
35
  readonly logger: Logger;
35
36
  readonly superEmails: ReadonlySet<string>;
37
+ /** Present when the app installed notifications (see `notifyIfInstalled`). */
38
+ readonly notifier?: Notifier;
36
39
  now(): number;
37
40
  }
38
- export declare function bindSystem(def: SystemDefinition, store: Store, options?: {
41
+ export interface BindOptions {
39
42
  operationId?: string;
40
- }): SystemContext;
43
+ /** Builds the transaction's notifier (Convex layer, when notifications are installed). */
44
+ notifier?: (sys: SystemContext) => Notifier;
45
+ }
46
+ export declare function bindSystem(def: SystemDefinition, store: Store, options?: BindOptions): SystemContext;
41
47
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE9E,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGvC,eAAO,MAAM,cAAc,UAAW,MAAM,WAA+B,CAAA;AAE3E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAGhG;AAED,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IACnC;;;;OAIG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,GAAG,IAAI,MAAM,CAAA;IACb,eAAe,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;CACvC;AAKD,mHAAmH;AACnH,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,gBAAgB,CAU1E;AAED,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAA;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,GAAG,IAAI,MAAM,CAAA;CACd;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,aAAa,CAUrH"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE9E,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGvC,eAAO,MAAM,cAAc,UAAW,MAAM,WAA+B,CAAA;AAE3E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAGhG;AAED,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IACnC;;;;OAIG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,GAAG,IAAI,MAAM,CAAA;IACb,eAAe,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;CACvC;AAKD,mHAAmH;AACnH,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,gBAAgB,CAU1E;AAED,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAA;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAC5B,GAAG,IAAI,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,QAAQ,CAAA;CAC5C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,WAAgB,GAAG,aAAa,CAYxG"}
@@ -22,7 +22,7 @@ export function createSystem(options = {}) {
22
22
  }
23
23
  export function bindSystem(def, store, options = {}) {
24
24
  const operationId = options.operationId ?? newTraceId();
25
- return {
25
+ const sys = {
26
26
  def,
27
27
  store,
28
28
  operationId,
@@ -30,5 +30,8 @@ export function bindSystem(def, store, options = {}) {
30
30
  superEmails: def.superUserEmails(),
31
31
  now: () => def.now(),
32
32
  };
33
+ if (options.notifier)
34
+ sys.notifier = options.notifier(sys);
35
+ return sys;
33
36
  }
34
37
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqC,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,YAAY,EAAe,MAAM,2BAA2B,CAAA;AAErE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AAE3E,MAAM,UAAU,cAAc,CAAC,KAAoD;IACjF,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IAC/E,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACzE,CAAC;AAyBD,MAAM,cAAc,GAAG,GAAG,EAAE,CAC1B,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAE5F,mHAAmH;AACnH,MAAM,UAAU,YAAY,CAAC,OAAO,GAAkB,EAAE;IACtD,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,YAAY,CAAC,CAAA;IACjF,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAA;IACtC,OAAO;QACL,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,YAAY;QACtC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAC3D,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG;QAC5B,eAAe,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC;KAC9G,CAAA;AACH,CAAC;AAYD,MAAM,UAAU,UAAU,CAAC,GAAqB,EAAE,KAAY,EAAE,OAAO,GAA6B,EAAE;IACpG,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,UAAU,EAAE,CAAA;IACvD,OAAO;QACL,GAAG;QACH,KAAK;QACL,WAAW;QACX,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QACvG,WAAW,EAAE,GAAG,CAAC,eAAe,EAAE;QAClC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE;KACrB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqC,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,YAAY,EAAe,MAAM,2BAA2B,CAAA;AAGrE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AAE3E,MAAM,UAAU,cAAc,CAAC,KAAoD;IACjF,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IAC/E,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACzE,CAAC;AAyBD,MAAM,cAAc,GAAG,GAAG,EAAE,CAC1B,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAE5F,mHAAmH;AACnH,MAAM,UAAU,YAAY,CAAC,OAAO,GAAkB,EAAE;IACtD,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,YAAY,CAAC,CAAA;IACjF,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAA;IACtC,OAAO;QACL,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,YAAY;QACtC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAC3D,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG;QAC5B,eAAe,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC;KAC9G,CAAA;AACH,CAAC;AAoBD,MAAM,UAAU,UAAU,CAAC,GAAqB,EAAE,KAAY,EAAE,OAAO,GAAgB,EAAE;IACvF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,UAAU,EAAE,CAAA;IACvD,MAAM,GAAG,GAA+D;QACtE,GAAG;QACH,KAAK;QACL,WAAW;QACX,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QACvG,WAAW,EAAE,GAAG,CAAC,eAAe,EAAE;QAClC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE;KACrB,CAAA;IACD,IAAI,OAAO,CAAC,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC1D,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -16,4 +16,6 @@ export * from "./modules-service.js";
16
16
  export * from "./feature-flags.js";
17
17
  export * from "./jobs.js";
18
18
  export * from "./role-view.js";
19
+ export * from "./notify.js";
20
+ export * from "./audit-module.js";
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA"}
@@ -18,4 +18,6 @@ export * from "./modules-service.js";
18
18
  export * from "./feature-flags.js";
19
19
  export * from "./jobs.js";
20
20
  export * from "./role-view.js";
21
+ export * from "./notify.js";
22
+ export * from "./audit-module.js";
21
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0DAA0D;AAC1D,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0DAA0D;AAC1D,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,37 @@
1
+ import type { Actor } from "./access.js";
2
+ import type { SystemContext } from "./context.js";
3
+ /** JSON value stored as notification params. */
4
+ export type NotificationParams = Record<string, unknown>;
5
+ export type NotifyTarget =
6
+ /** Explicit recipients (active users only; others are skipped). */
7
+ {
8
+ userIds: readonly string[];
9
+ }
10
+ /** Active users who hold the permission right now (system-core `decide`). */
11
+ | {
12
+ permission: string;
13
+ };
14
+ export interface NotifyRequest {
15
+ to: NotifyTarget;
16
+ /** A registered notification type id, e.g. `finance.invoice_awaiting_approval`. */
17
+ type: string;
18
+ /** JSON params; the app renders the text from them. Never pre-rendered text. */
19
+ params: NotificationParams;
20
+ /** App-relative link (`/app/...`). */
21
+ href?: string;
22
+ /** Who caused it. With `to.permission`, this user (or an agent's owner) is excluded. */
23
+ actor?: Actor | "system" | null;
24
+ /** Also notify the acting user when resolving `to.permission`. Default false. */
25
+ includeActor?: boolean;
26
+ }
27
+ /** Bound per transaction by the Convex layer. */
28
+ export interface Notifier {
29
+ /** Inserts notification rows and schedules emails. Returns the number of recipients. */
30
+ notify(request: NotifyRequest): Promise<number>;
31
+ }
32
+ /**
33
+ * Sends a notification when the app installed notifications; returns 0 otherwise.
34
+ * Errors are logged (without params) and swallowed.
35
+ */
36
+ export declare function notifyIfInstalled(sys: SystemContext, request: NotifyRequest): Promise<number>;
37
+ //# sourceMappingURL=notify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/core/notify.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,gDAAgD;AAChD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAExD,MAAM,MAAM,YAAY;AACtB,mEAAmE;AACjE;IAAE,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AAChC,6EAA6E;GAC3E;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,YAAY,CAAA;IAChB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ,gFAAgF;IAChF,MAAM,EAAE,kBAAkB,CAAA;IAC1B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wFAAwF;IACxF,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAA;IAC/B,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACvB,wFAAwF;IACxF,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAChD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAQnG"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Sends a notification when the app installed notifications; returns 0 otherwise.
3
+ * Errors are logged (without params) and swallowed.
4
+ */
5
+ export async function notifyIfInstalled(sys, request) {
6
+ if (!sys.notifier)
7
+ return 0;
8
+ try {
9
+ return await sys.notifier.notify(request);
10
+ }
11
+ catch (error) {
12
+ sys.logger.error("notify_failed", { type: request.type, error });
13
+ return 0;
14
+ }
15
+ }
16
+ //# sourceMappingURL=notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/core/notify.ts"],"names":[],"mappings":"AAuCA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAkB,EAAE,OAAsB;IAChF,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAA;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAChE,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/core/roles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/core/roles.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,9 @@ import { decide, delegableScope, entitlements, heldRoleIds, isSuperActor, permis
2
2
  import { recordAudit } from "./audit.js";
3
3
  import { newId, randomString } from "./crypto.js";
4
4
  import { forbidden, notFound, validation } from "./errors.js";
5
+ import { notifyIfInstalled } from "./notify.js";
5
6
  import { clampLimit, pairKey } from "./store.js";
6
- import { P, PROFILE_ROLE_ID, WILDCARD_SCOPE } from "./system-modules.js";
7
+ import { CORE_NOTIFICATION_TYPES, P, PROFILE_ROLE_ID, WILDCARD_SCOPE } from "./system-modules.js";
7
8
  const isSubset = (a, b) => [...a].every((x) => b.has(x));
8
9
  function deny(sys, reason) {
9
10
  throw withOperation(sys, forbidden(reason));
@@ -167,6 +168,9 @@ export async function assignRoles(sys, actor, target, roleIds) {
167
168
  }
168
169
  if (assigned.length) {
169
170
  await recordAudit(sys, human, { action: "role.assign", targetType: "user", targetId: target.userId, changes: { addedRoles: assigned } });
171
+ // No-op unless the app installed notifications.
172
+ const roleNames = roles.filter((r) => assigned.includes(r.key)).map((r) => r.name);
173
+ await notifyIfInstalled(sys, { to: { userIds: [target.userId] }, type: CORE_NOTIFICATION_TYPES.roleAssigned, params: { roleNames }, actor: human });
170
174
  }
171
175
  return { assigned };
172
176
  }