@sssoman/ember 0.1.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 (134) hide show
  1. package/README.md +131 -0
  2. package/dist/constants/event-type.d.ts +10 -0
  3. package/dist/constants/event-type.d.ts.map +1 -0
  4. package/dist/constants/event-type.js +9 -0
  5. package/dist/constants/event-type.js.map +1 -0
  6. package/dist/constants/index.d.ts +6 -0
  7. package/dist/constants/index.d.ts.map +1 -0
  8. package/dist/constants/index.js +6 -0
  9. package/dist/constants/index.js.map +1 -0
  10. package/dist/constants/record-status.d.ts +9 -0
  11. package/dist/constants/record-status.d.ts.map +1 -0
  12. package/dist/constants/record-status.js +8 -0
  13. package/dist/constants/record-status.js.map +1 -0
  14. package/dist/constants/record-type.d.ts +12 -0
  15. package/dist/constants/record-type.d.ts.map +1 -0
  16. package/dist/constants/record-type.js +11 -0
  17. package/dist/constants/record-type.js.map +1 -0
  18. package/dist/constants/schema-version.d.ts +16 -0
  19. package/dist/constants/schema-version.d.ts.map +1 -0
  20. package/dist/constants/schema-version.js +15 -0
  21. package/dist/constants/schema-version.js.map +1 -0
  22. package/dist/constants/visibility.d.ts +8 -0
  23. package/dist/constants/visibility.d.ts.map +1 -0
  24. package/dist/constants/visibility.js +7 -0
  25. package/dist/constants/visibility.js.map +1 -0
  26. package/dist/events/factory.d.ts +19 -0
  27. package/dist/events/factory.d.ts.map +1 -0
  28. package/dist/events/factory.js +51 -0
  29. package/dist/events/factory.js.map +1 -0
  30. package/dist/events/index.d.ts +4 -0
  31. package/dist/events/index.d.ts.map +1 -0
  32. package/dist/events/index.js +3 -0
  33. package/dist/events/index.js.map +1 -0
  34. package/dist/events/schemas.d.ts +4206 -0
  35. package/dist/events/schemas.d.ts.map +1 -0
  36. package/dist/events/schemas.js +59 -0
  37. package/dist/events/schemas.js.map +1 -0
  38. package/dist/events/types.d.ts +48 -0
  39. package/dist/events/types.d.ts.map +1 -0
  40. package/dist/events/types.js +2 -0
  41. package/dist/events/types.js.map +1 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +7 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/json-schema/index.d.ts +2 -0
  47. package/dist/json-schema/index.d.ts.map +1 -0
  48. package/dist/json-schema/index.js +2 -0
  49. package/dist/json-schema/index.js.map +1 -0
  50. package/dist/json-schema/registry.d.ts +8 -0
  51. package/dist/json-schema/registry.d.ts.map +1 -0
  52. package/dist/json-schema/registry.js +29 -0
  53. package/dist/json-schema/registry.js.map +1 -0
  54. package/dist/schemas/asset.d.ts +62 -0
  55. package/dist/schemas/asset.d.ts.map +1 -0
  56. package/dist/schemas/asset.js +19 -0
  57. package/dist/schemas/asset.js.map +1 -0
  58. package/dist/schemas/base-record.d.ts +78 -0
  59. package/dist/schemas/base-record.d.ts.map +1 -0
  60. package/dist/schemas/base-record.js +34 -0
  61. package/dist/schemas/base-record.js.map +1 -0
  62. package/dist/schemas/circle.d.ts +53 -0
  63. package/dist/schemas/circle.d.ts.map +1 -0
  64. package/dist/schemas/circle.js +19 -0
  65. package/dist/schemas/circle.js.map +1 -0
  66. package/dist/schemas/document.d.ts +92 -0
  67. package/dist/schemas/document.d.ts.map +1 -0
  68. package/dist/schemas/document.js +22 -0
  69. package/dist/schemas/document.js.map +1 -0
  70. package/dist/schemas/index.d.ts +11 -0
  71. package/dist/schemas/index.d.ts.map +1 -0
  72. package/dist/schemas/index.js +11 -0
  73. package/dist/schemas/index.js.map +1 -0
  74. package/dist/schemas/liability.d.ts +62 -0
  75. package/dist/schemas/liability.d.ts.map +1 -0
  76. package/dist/schemas/liability.js +19 -0
  77. package/dist/schemas/liability.js.map +1 -0
  78. package/dist/schemas/policy.d.ts +67 -0
  79. package/dist/schemas/policy.d.ts.map +1 -0
  80. package/dist/schemas/policy.js +25 -0
  81. package/dist/schemas/policy.js.map +1 -0
  82. package/dist/schemas/primitives.d.ts +28 -0
  83. package/dist/schemas/primitives.d.ts.map +1 -0
  84. package/dist/schemas/primitives.js +25 -0
  85. package/dist/schemas/primitives.js.map +1 -0
  86. package/dist/schemas/record-union.d.ts +832 -0
  87. package/dist/schemas/record-union.d.ts.map +1 -0
  88. package/dist/schemas/record-union.js +30 -0
  89. package/dist/schemas/record-union.js.map +1 -0
  90. package/dist/schemas/reminder.d.ts +68 -0
  91. package/dist/schemas/reminder.d.ts.map +1 -0
  92. package/dist/schemas/reminder.js +26 -0
  93. package/dist/schemas/reminder.js.map +1 -0
  94. package/dist/schemas/user.d.ts +53 -0
  95. package/dist/schemas/user.d.ts.map +1 -0
  96. package/dist/schemas/user.js +15 -0
  97. package/dist/schemas/user.js.map +1 -0
  98. package/dist/types/events.d.ts +2 -0
  99. package/dist/types/events.d.ts.map +1 -0
  100. package/dist/types/events.js +2 -0
  101. package/dist/types/events.js.map +1 -0
  102. package/dist/types/index.d.ts +5 -0
  103. package/dist/types/index.d.ts.map +1 -0
  104. package/dist/types/index.js +2 -0
  105. package/dist/types/index.js.map +1 -0
  106. package/dist/types/records.d.ts +2 -0
  107. package/dist/types/records.d.ts.map +1 -0
  108. package/dist/types/records.js +2 -0
  109. package/dist/types/records.js.map +1 -0
  110. package/dist/types/validation.d.ts +13 -0
  111. package/dist/types/validation.d.ts.map +1 -0
  112. package/dist/types/validation.js +2 -0
  113. package/dist/types/validation.js.map +1 -0
  114. package/dist/validators/events.d.ts +5 -0
  115. package/dist/validators/events.d.ts.map +1 -0
  116. package/dist/validators/events.js +9 -0
  117. package/dist/validators/events.js.map +1 -0
  118. package/dist/validators/index.d.ts +5 -0
  119. package/dist/validators/index.d.ts.map +1 -0
  120. package/dist/validators/index.js +5 -0
  121. package/dist/validators/index.js.map +1 -0
  122. package/dist/validators/parse.d.ts +5 -0
  123. package/dist/validators/parse.d.ts.map +1 -0
  124. package/dist/validators/parse.js +11 -0
  125. package/dist/validators/parse.js.map +1 -0
  126. package/dist/validators/records.d.ts +16 -0
  127. package/dist/validators/records.d.ts.map +1 -0
  128. package/dist/validators/records.js +44 -0
  129. package/dist/validators/records.js.map +1 -0
  130. package/dist/validators/schema-version.d.ts +11 -0
  131. package/dist/validators/schema-version.d.ts.map +1 -0
  132. package/dist/validators/schema-version.js +53 -0
  133. package/dist/validators/schema-version.js.map +1 -0
  134. package/package.json +77 -0
package/README.md ADDED
@@ -0,0 +1,131 @@
1
+ # Ember
2
+
3
+ **Ember** is the canonical schema and domain layer for [Hearth](https://github.com/hearth) — a local-first encrypted records ecosystem.
4
+
5
+ Ember is infrastructure-agnostic protocol code: Zod schemas, TypeScript types, validators, events, and JSON Schema exports. It is not an application and has no framework or storage dependencies.
6
+
7
+ ## Philosophy
8
+
9
+ > Everything is a record.
10
+
11
+ Every domain entity extends `BaseRecord` with shared fields: identity, lineage, visibility, tags, status, and versioning.
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ pnpm add @sssoman/ember zod
17
+ ```
18
+
19
+ ## Quick start
20
+
21
+ ```typescript
22
+ import {
23
+ VISIBILITY,
24
+ RECORD_TYPE,
25
+ SCHEMA_VERSION,
26
+ createBaseRecordDefaults,
27
+ validateDocumentRecord,
28
+ } from "@sssoman/ember";
29
+
30
+ const doc = {
31
+ ...createBaseRecordDefaults({
32
+ id: crypto.randomUUID(),
33
+ created_by: userId,
34
+ circle_id: circleId,
35
+ visibility: VISIBILITY.PRIVATE,
36
+ schema_version: SCHEMA_VERSION.DOCUMENT,
37
+ }),
38
+ record_type: RECORD_TYPE.DOCUMENT,
39
+ title: "Insurance policy PDF",
40
+ storage_reference: "blob://local/vault/abc123",
41
+ checksum: "sha256:…",
42
+ encryption_metadata: { algorithm: "AES-256-GCM", key_id: "key-1" },
43
+ linked_record_id: policyRecordId,
44
+ };
45
+
46
+ const result = validateDocumentRecord(doc);
47
+ if (result.success) {
48
+ console.log(result.data.storage_reference);
49
+ }
50
+ ```
51
+
52
+ ## Core entities
53
+
54
+ | Entity | Purpose |
55
+ |--------|---------|
56
+ | `CircleRecord` | Shared boundary for records and members |
57
+ | `UserRecord` | Identity within a circle |
58
+ | `PolicyRecord` | Access, retention, and sharing rules |
59
+ | `AssetRecord` | Owned value (property, accounts, etc.) |
60
+ | `LiabilityRecord` | Obligations and debts |
61
+ | `DocumentRecord` | Encrypted blob reference (no embedded files) |
62
+ | `ReminderRecord` | Time-based alerts linked to records |
63
+
64
+ ## Visibility
65
+
66
+ - `PRIVATE` — Creator only
67
+ - `CIRCLE` — All circle members
68
+ - `SHARED` — Explicitly shared subset
69
+
70
+ ## Events
71
+
72
+ | Event | When |
73
+ |-------|------|
74
+ | `record_created` | New record persisted |
75
+ | `record_updated` | Record revision applied |
76
+ | `visibility_changed` | Visibility field changed |
77
+ | `document_linked` | Document attached to another record |
78
+ | `reminder_triggered` | Reminder fired |
79
+
80
+ ```typescript
81
+ import { EmberEventBus, createRecordCreatedEvent, EVENT_TYPE } from "@sssoman/ember";
82
+
83
+ const bus = new EmberEventBus();
84
+ bus.on(EVENT_TYPE.RECORD_CREATED, (e) => { /* … */ });
85
+ bus.emit(createRecordCreatedEvent({ /* … */ }));
86
+ ```
87
+
88
+ ## JSON Schema
89
+
90
+ Generate JSON Schema artifacts from Zod definitions:
91
+
92
+ ```bash
93
+ pnpm run generate:json-schema
94
+ # → generated/json-schema/*.json
95
+ ```
96
+
97
+ Programmatic access:
98
+
99
+ ```typescript
100
+ import { JSON_SCHEMA_REGISTRY, getJsonSchemaByName } from "@sssoman/ember";
101
+
102
+ const circle = getJsonSchemaByName("CircleRecord");
103
+ ```
104
+
105
+ ## Package exports
106
+
107
+ | Subpath | Contents |
108
+ |---------|----------|
109
+ | `@sssoman/ember` | Full barrel |
110
+ | `@sssoman/ember/schemas` | Zod schemas |
111
+ | `@sssoman/ember/types` | TypeScript types |
112
+ | `@sssoman/ember/validators` | Parse helpers |
113
+ | `@sssoman/ember/events` | Event model |
114
+ | `@sssoman/ember/constants` | Enums and version pins |
115
+
116
+ ## Development
117
+
118
+ ```bash
119
+ pnpm install
120
+ pnpm run typecheck
121
+ pnpm run build
122
+ pnpm exec tsx examples/basic-usage.ts
123
+ ```
124
+
125
+ ## Publishing
126
+
127
+ See [docs/publishing.md](docs/publishing.md) for publishing `@sssoman/ember` under the **sssoman** npm organization.
128
+
129
+ ## License
130
+
131
+ MIT
@@ -0,0 +1,10 @@
1
+ export declare const EVENT_TYPE: {
2
+ readonly RECORD_CREATED: "record_created";
3
+ readonly RECORD_UPDATED: "record_updated";
4
+ readonly VISIBILITY_CHANGED: "visibility_changed";
5
+ readonly DOCUMENT_LINKED: "document_linked";
6
+ readonly REMINDER_TRIGGERED: "reminder_triggered";
7
+ };
8
+ export type EventType = (typeof EVENT_TYPE)[keyof typeof EVENT_TYPE];
9
+ export declare const EVENT_TYPE_VALUES: ("record_created" | "record_updated" | "visibility_changed" | "document_linked" | "reminder_triggered")[];
10
+ //# sourceMappingURL=event-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-type.d.ts","sourceRoot":"","sources":["../../src/constants/event-type.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE,eAAO,MAAM,iBAAiB,2GAA4B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export const EVENT_TYPE = {
2
+ RECORD_CREATED: "record_created",
3
+ RECORD_UPDATED: "record_updated",
4
+ VISIBILITY_CHANGED: "visibility_changed",
5
+ DOCUMENT_LINKED: "document_linked",
6
+ REMINDER_TRIGGERED: "reminder_triggered",
7
+ };
8
+ export const EVENT_TYPE_VALUES = Object.values(EVENT_TYPE);
9
+ //# sourceMappingURL=event-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-type.js","sourceRoot":"","sources":["../../src/constants/event-type.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,kBAAkB,EAAE,oBAAoB;IACxC,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAIX,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { VISIBILITY, VISIBILITY_VALUES, type Visibility, } from "./visibility.js";
2
+ export { RECORD_STATUS, RECORD_STATUS_VALUES, type RecordStatus, } from "./record-status.js";
3
+ export { RECORD_TYPE, RECORD_TYPE_VALUES, type RecordType, } from "./record-type.js";
4
+ export { SCHEMA_VERSION, type SchemaVersionKey, } from "./schema-version.js";
5
+ export { EVENT_TYPE, EVENT_TYPE_VALUES, type EventType, } from "./event-type.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { VISIBILITY, VISIBILITY_VALUES, } from "./visibility.js";
2
+ export { RECORD_STATUS, RECORD_STATUS_VALUES, } from "./record-status.js";
3
+ export { RECORD_TYPE, RECORD_TYPE_VALUES, } from "./record-type.js";
4
+ export { SCHEMA_VERSION, } from "./schema-version.js";
5
+ export { EVENT_TYPE, EVENT_TYPE_VALUES, } from "./event-type.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,WAAW,EACX,kBAAkB,GAEnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,cAAc,GAEf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,iBAAiB,GAElB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const RECORD_STATUS: {
2
+ readonly ACTIVE: "ACTIVE";
3
+ readonly ARCHIVED: "ARCHIVED";
4
+ readonly DELETED: "DELETED";
5
+ readonly DRAFT: "DRAFT";
6
+ };
7
+ export type RecordStatus = (typeof RECORD_STATUS)[keyof typeof RECORD_STATUS];
8
+ export declare const RECORD_STATUS_VALUES: ("ACTIVE" | "ARCHIVED" | "DELETED" | "DRAFT")[];
9
+ //# sourceMappingURL=record-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-status.d.ts","sourceRoot":"","sources":["../../src/constants/record-status.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,oBAAoB,iDAA+B,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const RECORD_STATUS = {
2
+ ACTIVE: "ACTIVE",
3
+ ARCHIVED: "ARCHIVED",
4
+ DELETED: "DELETED",
5
+ DRAFT: "DRAFT",
6
+ };
7
+ export const RECORD_STATUS_VALUES = Object.values(RECORD_STATUS);
8
+ //# sourceMappingURL=record-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-status.js","sourceRoot":"","sources":["../../src/constants/record-status.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACN,CAAC;AAIX,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const RECORD_TYPE: {
2
+ readonly CIRCLE: "circle";
3
+ readonly USER: "user";
4
+ readonly POLICY: "policy";
5
+ readonly ASSET: "asset";
6
+ readonly LIABILITY: "liability";
7
+ readonly DOCUMENT: "document";
8
+ readonly REMINDER: "reminder";
9
+ };
10
+ export type RecordType = (typeof RECORD_TYPE)[keyof typeof RECORD_TYPE];
11
+ export declare const RECORD_TYPE_VALUES: ("circle" | "user" | "policy" | "asset" | "liability" | "document" | "reminder")[];
12
+ //# sourceMappingURL=record-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-type.d.ts","sourceRoot":"","sources":["../../src/constants/record-type.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;CAQd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB,oFAA6B,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const RECORD_TYPE = {
2
+ CIRCLE: "circle",
3
+ USER: "user",
4
+ POLICY: "policy",
5
+ ASSET: "asset",
6
+ LIABILITY: "liability",
7
+ DOCUMENT: "document",
8
+ REMINDER: "reminder",
9
+ };
10
+ export const RECORD_TYPE_VALUES = Object.values(RECORD_TYPE);
11
+ //# sourceMappingURL=record-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-type.js","sourceRoot":"","sources":["../../src/constants/record-type.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAIX,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Current schema versions per record kind.
3
+ * Bump when breaking field changes occur; consumers use `schema_version` on records.
4
+ */
5
+ export declare const SCHEMA_VERSION: {
6
+ readonly BASE: 1;
7
+ readonly CIRCLE: 1;
8
+ readonly USER: 1;
9
+ readonly POLICY: 1;
10
+ readonly ASSET: 1;
11
+ readonly LIABILITY: 1;
12
+ readonly DOCUMENT: 1;
13
+ readonly REMINDER: 1;
14
+ };
15
+ export type SchemaVersionKey = keyof typeof SCHEMA_VERSION;
16
+ //# sourceMappingURL=schema-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-version.d.ts","sourceRoot":"","sources":["../../src/constants/schema-version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;CASjB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Current schema versions per record kind.
3
+ * Bump when breaking field changes occur; consumers use `schema_version` on records.
4
+ */
5
+ export const SCHEMA_VERSION = {
6
+ BASE: 1,
7
+ CIRCLE: 1,
8
+ USER: 1,
9
+ POLICY: 1,
10
+ ASSET: 1,
11
+ LIABILITY: 1,
12
+ DOCUMENT: 1,
13
+ REMINDER: 1,
14
+ };
15
+ //# sourceMappingURL=schema-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-version.js","sourceRoot":"","sources":["../../src/constants/schema-version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;CACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const VISIBILITY: {
2
+ readonly PRIVATE: "PRIVATE";
3
+ readonly CIRCLE: "CIRCLE";
4
+ readonly SHARED: "SHARED";
5
+ };
6
+ export type Visibility = (typeof VISIBILITY)[keyof typeof VISIBILITY];
7
+ export declare const VISIBILITY_VALUES: ("PRIVATE" | "CIRCLE" | "SHARED")[];
8
+ //# sourceMappingURL=visibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../src/constants/visibility.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEtE,eAAO,MAAM,iBAAiB,qCAA4B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const VISIBILITY = {
2
+ PRIVATE: "PRIVATE",
3
+ CIRCLE: "CIRCLE",
4
+ SHARED: "SHARED",
5
+ };
6
+ export const VISIBILITY_VALUES = Object.values(VISIBILITY);
7
+ //# sourceMappingURL=visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibility.js","sourceRoot":"","sources":["../../src/constants/visibility.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACR,CAAC;AAIX,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { DocumentLinkedEvent, EmberEvent, EmberEventBase, EmberEventType, RecordCreatedEvent, RecordUpdatedEvent, ReminderTriggeredEvent, VisibilityChangedEvent } from "./types.js";
2
+ type EventFactoryInput<TType extends EmberEventType, TPayload> = Omit<EmberEventBase<TType, TPayload>, "id" | "occurred_at" | "schema_version"> & Partial<Pick<EmberEventBase<TType, TPayload>, "id" | "occurred_at" | "schema_version">>;
3
+ export declare function createRecordCreatedEvent(input: EventFactoryInput<RecordCreatedEvent["type"], RecordCreatedEvent["payload"]>): RecordCreatedEvent;
4
+ export declare function createRecordUpdatedEvent(input: EventFactoryInput<RecordUpdatedEvent["type"], RecordUpdatedEvent["payload"]>): RecordUpdatedEvent;
5
+ export declare function createVisibilityChangedEvent(input: EventFactoryInput<VisibilityChangedEvent["type"], VisibilityChangedEvent["payload"]>): VisibilityChangedEvent;
6
+ export declare function createDocumentLinkedEvent(input: EventFactoryInput<DocumentLinkedEvent["type"], DocumentLinkedEvent["payload"]>): DocumentLinkedEvent;
7
+ export declare function createReminderTriggeredEvent(input: EventFactoryInput<ReminderTriggeredEvent["type"], ReminderTriggeredEvent["payload"]>): ReminderTriggeredEvent;
8
+ export type EmberEventListener<T extends EmberEvent = EmberEvent> = (event: T) => void;
9
+ /** Minimal in-process event bus for protocol-level dispatch. */
10
+ export declare class EmberEventBus {
11
+ private readonly listeners;
12
+ on<TType extends EmberEventType>(type: TType, listener: EmberEventListener<Extract<EmberEvent, {
13
+ type: TType;
14
+ }>>): () => void;
15
+ emit(event: EmberEvent): void;
16
+ clear(): void;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/events/factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,KAAK,iBAAiB,CAAC,KAAK,SAAS,cAAc,EAAE,QAAQ,IAAI,IAAI,CACnE,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,EAC/B,IAAI,GAAG,aAAa,GAAG,gBAAgB,CACxC,GACC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC;AAa1F,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,iBAAiB,CACtB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,kBAAkB,CAAC,SAAS,CAAC,CAC9B,GACA,kBAAkB,CAEpB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,iBAAiB,CACtB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,kBAAkB,CAAC,SAAS,CAAC,CAC9B,GACA,kBAAkB,CAEpB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iBAAiB,CACtB,sBAAsB,CAAC,MAAM,CAAC,EAC9B,sBAAsB,CAAC,SAAS,CAAC,CAClC,GACA,sBAAsB,CAExB;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,iBAAiB,CACtB,mBAAmB,CAAC,MAAM,CAAC,EAC3B,mBAAmB,CAAC,SAAS,CAAC,CAC/B,GACA,mBAAmB,CAErB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iBAAiB,CACtB,sBAAsB,CAAC,MAAM,CAAC,EAC9B,sBAAsB,CAAC,SAAS,CAAC,CAClC,GACA,sBAAsB,CAExB;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI,CAClE,KAAK,EAAE,CAAC,KACL,IAAI,CAAC;AAEV,gEAAgE;AAChE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsD;IAEhF,EAAE,CAAC,KAAK,SAAS,cAAc,EAC7B,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC,GACjE,MAAM,IAAI;IAUb,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQ7B,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,51 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { SCHEMA_VERSION } from "../constants/schema-version.js";
3
+ function createEvent(input) {
4
+ return {
5
+ id: input.id ?? randomUUID(),
6
+ occurred_at: input.occurred_at ?? new Date().toISOString(),
7
+ schema_version: input.schema_version ?? SCHEMA_VERSION.BASE,
8
+ ...input,
9
+ };
10
+ }
11
+ export function createRecordCreatedEvent(input) {
12
+ return createEvent(input);
13
+ }
14
+ export function createRecordUpdatedEvent(input) {
15
+ return createEvent(input);
16
+ }
17
+ export function createVisibilityChangedEvent(input) {
18
+ return createEvent(input);
19
+ }
20
+ export function createDocumentLinkedEvent(input) {
21
+ return createEvent(input);
22
+ }
23
+ export function createReminderTriggeredEvent(input) {
24
+ return createEvent(input);
25
+ }
26
+ /** Minimal in-process event bus for protocol-level dispatch. */
27
+ export class EmberEventBus {
28
+ listeners = new Map();
29
+ on(type, listener) {
30
+ const set = this.listeners.get(type) ?? new Set();
31
+ set.add(listener);
32
+ this.listeners.set(type, set);
33
+ return () => {
34
+ set.delete(listener);
35
+ if (set.size === 0)
36
+ this.listeners.delete(type);
37
+ };
38
+ }
39
+ emit(event) {
40
+ const set = this.listeners.get(event.type);
41
+ if (!set)
42
+ return;
43
+ for (const listener of set) {
44
+ listener(event);
45
+ }
46
+ }
47
+ clear() {
48
+ this.listeners.clear();
49
+ }
50
+ }
51
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/events/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAkBhE,SAAS,WAAW,CAClB,KAAyC;IAEzC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,UAAU,EAAE;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC1D,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI;QAC3D,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAGC;IAED,OAAO,WAAW,CAAC,KAAK,CAAuB,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAGC;IAED,OAAO,WAAW,CAAC,KAAK,CAAuB,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAGC;IAED,OAAO,WAAW,CAAC,KAAK,CAA2B,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAGC;IAED,OAAO,WAAW,CAAC,KAAK,CAAwB,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAGC;IAED,OAAO,WAAW,CAAC,KAAK,CAA2B,CAAC;AACtD,CAAC;AAMD,gEAAgE;AAChE,MAAM,OAAO,aAAa;IACP,SAAS,GAAG,IAAI,GAAG,EAA2C,CAAC;IAEhF,EAAE,CACA,IAAW,EACX,QAAkE;QAElE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,QAA8B,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,MAAM,CAAC,QAA8B,CAAC,CAAC;YAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAiB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE,CAAC;YAC3B,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export { emberEventSchema, recordCreatedEventSchema, recordUpdatedEventSchema, visibilityChangedEventSchema, documentLinkedEventSchema, reminderTriggeredEventSchema, } from "./schemas.js";
2
+ export type { EmberEvent, EmberEventPayload, EmberEventType, EmberEventInput, RecordCreatedEvent, RecordUpdatedEvent, VisibilityChangedEvent, DocumentLinkedEvent, ReminderTriggeredEvent, } from "./types.js";
3
+ export { createRecordCreatedEvent, createRecordUpdatedEvent, createVisibilityChangedEvent, createDocumentLinkedEvent, createReminderTriggeredEvent, EmberEventBus, type EmberEventListener, } from "./factory.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { emberEventSchema, recordCreatedEventSchema, recordUpdatedEventSchema, visibilityChangedEventSchema, documentLinkedEventSchema, reminderTriggeredEventSchema, } from "./schemas.js";
2
+ export { createRecordCreatedEvent, createRecordUpdatedEvent, createVisibilityChangedEvent, createDocumentLinkedEvent, createReminderTriggeredEvent, EmberEventBus, } from "./factory.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AActB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,aAAa,GAEd,MAAM,cAAc,CAAC"}