@indigoai-us/hq-cloud 5.19.1 → 5.21.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 (128) hide show
  1. package/.github/workflows/ci.yml +8 -4
  2. package/.github/workflows/publish.yml +9 -3
  3. package/dist/bin/sync-runner.d.ts +9 -0
  4. package/dist/bin/sync-runner.d.ts.map +1 -1
  5. package/dist/bin/sync-runner.js +58 -0
  6. package/dist/bin/sync-runner.js.map +1 -1
  7. package/dist/entity-resolver.d.ts +53 -0
  8. package/dist/entity-resolver.d.ts.map +1 -0
  9. package/dist/entity-resolver.js +127 -0
  10. package/dist/entity-resolver.js.map +1 -0
  11. package/dist/entity-resolver.test.d.ts +10 -0
  12. package/dist/entity-resolver.test.d.ts.map +1 -0
  13. package/dist/entity-resolver.test.js +244 -0
  14. package/dist/entity-resolver.test.js.map +1 -0
  15. package/dist/index.d.ts +17 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +21 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/schemas/signal-types.d.ts +16 -0
  20. package/dist/schemas/signal-types.d.ts.map +1 -0
  21. package/dist/schemas/signal-types.js +30 -0
  22. package/dist/schemas/signal-types.js.map +1 -0
  23. package/dist/schemas/signal-types.test.d.ts +2 -0
  24. package/dist/schemas/signal-types.test.d.ts.map +1 -0
  25. package/dist/schemas/signal-types.test.js +65 -0
  26. package/dist/schemas/signal-types.test.js.map +1 -0
  27. package/dist/schemas/source-channels.d.ts +15 -0
  28. package/dist/schemas/source-channels.d.ts.map +1 -0
  29. package/dist/schemas/source-channels.js +28 -0
  30. package/dist/schemas/source-channels.js.map +1 -0
  31. package/dist/schemas/source-channels.test.d.ts +2 -0
  32. package/dist/schemas/source-channels.test.d.ts.map +1 -0
  33. package/dist/schemas/source-channels.test.js +65 -0
  34. package/dist/schemas/source-channels.test.js.map +1 -0
  35. package/dist/signals/get.d.ts +13 -0
  36. package/dist/signals/get.d.ts.map +1 -0
  37. package/dist/signals/get.js +74 -0
  38. package/dist/signals/get.js.map +1 -0
  39. package/dist/signals/get.test.d.ts +5 -0
  40. package/dist/signals/get.test.d.ts.map +1 -0
  41. package/dist/signals/get.test.js +170 -0
  42. package/dist/signals/get.test.js.map +1 -0
  43. package/dist/signals/internals.d.ts +16 -0
  44. package/dist/signals/internals.d.ts.map +1 -0
  45. package/dist/signals/internals.js +39 -0
  46. package/dist/signals/internals.js.map +1 -0
  47. package/dist/signals/list.d.ts +10 -0
  48. package/dist/signals/list.d.ts.map +1 -0
  49. package/dist/signals/list.js +76 -0
  50. package/dist/signals/list.js.map +1 -0
  51. package/dist/signals/list.test.d.ts +9 -0
  52. package/dist/signals/list.test.d.ts.map +1 -0
  53. package/dist/signals/list.test.js +227 -0
  54. package/dist/signals/list.test.js.map +1 -0
  55. package/dist/signals/parse.d.ts +8 -0
  56. package/dist/signals/parse.d.ts.map +1 -0
  57. package/dist/signals/parse.js +8 -0
  58. package/dist/signals/parse.js.map +1 -0
  59. package/dist/signals/types.d.ts +69 -0
  60. package/dist/signals/types.d.ts.map +1 -0
  61. package/dist/signals/types.js +10 -0
  62. package/dist/signals/types.js.map +1 -0
  63. package/dist/sources/get.d.ts +11 -0
  64. package/dist/sources/get.d.ts.map +1 -0
  65. package/dist/sources/get.js +67 -0
  66. package/dist/sources/get.js.map +1 -0
  67. package/dist/sources/get.test.d.ts +5 -0
  68. package/dist/sources/get.test.d.ts.map +1 -0
  69. package/dist/sources/get.test.js +132 -0
  70. package/dist/sources/get.test.js.map +1 -0
  71. package/dist/sources/internals.d.ts +16 -0
  72. package/dist/sources/internals.d.ts.map +1 -0
  73. package/dist/sources/internals.js +39 -0
  74. package/dist/sources/internals.js.map +1 -0
  75. package/dist/sources/list.d.ts +10 -0
  76. package/dist/sources/list.d.ts.map +1 -0
  77. package/dist/sources/list.js +76 -0
  78. package/dist/sources/list.js.map +1 -0
  79. package/dist/sources/list.test.d.ts +8 -0
  80. package/dist/sources/list.test.d.ts.map +1 -0
  81. package/dist/sources/list.test.js +198 -0
  82. package/dist/sources/list.test.js.map +1 -0
  83. package/dist/sources/parse.d.ts +18 -0
  84. package/dist/sources/parse.d.ts.map +1 -0
  85. package/dist/sources/parse.js +35 -0
  86. package/dist/sources/parse.js.map +1 -0
  87. package/dist/sources/types.d.ts +62 -0
  88. package/dist/sources/types.d.ts.map +1 -0
  89. package/dist/sources/types.js +8 -0
  90. package/dist/sources/types.js.map +1 -0
  91. package/dist/telemetry.d.ts +87 -0
  92. package/dist/telemetry.d.ts.map +1 -0
  93. package/dist/telemetry.js +349 -0
  94. package/dist/telemetry.js.map +1 -0
  95. package/dist/telemetry.test.d.ts +11 -0
  96. package/dist/telemetry.test.d.ts.map +1 -0
  97. package/dist/telemetry.test.js +309 -0
  98. package/dist/telemetry.test.js.map +1 -0
  99. package/dist/vault-client.d.ts +43 -0
  100. package/dist/vault-client.d.ts.map +1 -1
  101. package/dist/vault-client.js +28 -0
  102. package/dist/vault-client.js.map +1 -1
  103. package/package.json +5 -3
  104. package/src/bin/sync-runner.ts +73 -0
  105. package/src/entity-resolver.test.ts +315 -0
  106. package/src/entity-resolver.ts +180 -0
  107. package/src/index.ts +76 -0
  108. package/src/schemas/signal-types.test.ts +82 -0
  109. package/src/schemas/signal-types.ts +38 -0
  110. package/src/schemas/source-channels.test.ts +82 -0
  111. package/src/schemas/source-channels.ts +36 -0
  112. package/src/signals/get.test.ts +204 -0
  113. package/src/signals/get.ts +79 -0
  114. package/src/signals/internals.ts +46 -0
  115. package/src/signals/list.test.ts +283 -0
  116. package/src/signals/list.ts +92 -0
  117. package/src/signals/parse.ts +8 -0
  118. package/src/signals/types.ts +74 -0
  119. package/src/sources/get.test.ts +166 -0
  120. package/src/sources/get.ts +75 -0
  121. package/src/sources/internals.ts +46 -0
  122. package/src/sources/list.test.ts +247 -0
  123. package/src/sources/list.ts +95 -0
  124. package/src/sources/parse.ts +43 -0
  125. package/src/sources/types.ts +67 -0
  126. package/src/telemetry.test.ts +394 -0
  127. package/src/telemetry.ts +436 -0
  128. package/src/vault-client.ts +60 -0
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Unit tests for entity-resolver.ts — slug → EntityContext resolution.
3
+ *
4
+ * Mocks globalThis.fetch to simulate vault-service responses for:
5
+ * GET /membership/me → list memberships
6
+ * GET /entity/{uid} → entity info (slug, bucketName)
7
+ * POST /entities/{uid}/sts → STS credentials
8
+ */
9
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
10
+ import { clearContextCache } from "./context.js";
11
+ import { resolveEntity, listAvailableEntities, EntityNotFoundError, EntityPermissionError, EntityResolutionError, } from "./entity-resolver.js";
12
+ // ---------------------------------------------------------------------------
13
+ // Test fixtures
14
+ // ---------------------------------------------------------------------------
15
+ const VAULT_CONFIG = {
16
+ apiUrl: "https://vault.test",
17
+ authToken: "test-jwt",
18
+ region: "us-east-1",
19
+ };
20
+ const ENTITIES = {
21
+ indigo: {
22
+ uid: "cmp_indigo_001",
23
+ slug: "indigo",
24
+ type: "company",
25
+ name: "Indigo",
26
+ bucketName: "hq-vault-indigo",
27
+ status: "active",
28
+ },
29
+ personal: {
30
+ uid: "cmp_personal_001",
31
+ slug: "personal",
32
+ type: "person",
33
+ name: "Stefan",
34
+ bucketName: "hq-vault-personal",
35
+ status: "active",
36
+ },
37
+ };
38
+ const STS_CREDS = {
39
+ credentials: {
40
+ accessKeyId: "ASIAMOCK000000000001",
41
+ secretAccessKey: "mockSecret",
42
+ sessionToken: "mockSession",
43
+ },
44
+ expiresAt: new Date(Date.now() + 3600_000).toISOString(),
45
+ bucketName: "hq-vault-indigo",
46
+ region: "us-east-1",
47
+ };
48
+ // ---------------------------------------------------------------------------
49
+ // Mock helpers
50
+ // ---------------------------------------------------------------------------
51
+ function json(body, status = 200) {
52
+ return new Response(JSON.stringify(body), {
53
+ status,
54
+ headers: { "Content-Type": "application/json" },
55
+ });
56
+ }
57
+ function setupFetchMock(opts = {}) {
58
+ const memberships = opts.memberships ?? [
59
+ { companyUid: "cmp_indigo_001", role: "owner" },
60
+ { companyUid: "cmp_personal_001", role: "owner" },
61
+ ];
62
+ const entities = opts.entities ?? {
63
+ cmp_indigo_001: ENTITIES.indigo,
64
+ cmp_personal_001: ENTITIES.personal,
65
+ };
66
+ const fetchMock = vi.fn(async (input, init) => {
67
+ const url = typeof input === "string" ? input : input.toString();
68
+ const method = (init?.method ?? "GET").toUpperCase();
69
+ // GET /membership/me
70
+ if (method === "GET" && url.endsWith("/membership/me")) {
71
+ return json({
72
+ memberships: memberships.map((m) => ({
73
+ membershipKey: `mbr_${m.companyUid}`,
74
+ personUid: "prs_test_001",
75
+ companyUid: m.companyUid,
76
+ role: m.role,
77
+ status: "active",
78
+ invitedBy: "system",
79
+ invitedAt: "2026-01-01T00:00:00Z",
80
+ createdAt: "2026-01-01T00:00:00Z",
81
+ updatedAt: "2026-01-01T00:00:00Z",
82
+ })),
83
+ });
84
+ }
85
+ // GET /entity/{uid}
86
+ const entityGetMatch = /\/entity\/([^/?]+)$/.exec(url);
87
+ if (method === "GET" && entityGetMatch) {
88
+ const uid = decodeURIComponent(entityGetMatch[1]);
89
+ const entity = entities[uid];
90
+ if (!entity || opts.entityStatus === 404) {
91
+ return json({ error: "Not found" }, opts.entityStatus ?? 404);
92
+ }
93
+ return json({ entity });
94
+ }
95
+ // POST /sts/vend (canonical vault-service endpoint; was /entities/{uid}/sts
96
+ // in early drafts but that path doesn't actually exist server-side — the
97
+ // resolver now delegates to resolveEntityContext() which uses this route).
98
+ if (method === "POST" && url.endsWith("/sts/vend")) {
99
+ if (opts.stsStatus && opts.stsStatus >= 400) {
100
+ const body = opts.stsBody ?? { error: `STS error ${opts.stsStatus}` };
101
+ return json(body, opts.stsStatus);
102
+ }
103
+ // resolveEntityContext also re-fetches /entity/{uid} before vending, so
104
+ // the test mock above already handles that. Return creds + expiresAt;
105
+ // bucket/region come from the entity object + config respectively.
106
+ return json(opts.stsBody ?? {
107
+ credentials: STS_CREDS.credentials,
108
+ expiresAt: STS_CREDS.expiresAt,
109
+ });
110
+ }
111
+ return json({ error: `Unhandled: ${method} ${url}` }, 500);
112
+ });
113
+ vi.stubGlobal("fetch", fetchMock);
114
+ return fetchMock;
115
+ }
116
+ // ---------------------------------------------------------------------------
117
+ // Tests
118
+ // ---------------------------------------------------------------------------
119
+ beforeEach(() => {
120
+ vi.restoreAllMocks();
121
+ // resolveEntity delegates to resolveEntityContext (context.ts), which
122
+ // caches by UID. The cache must be cleared between tests, otherwise a
123
+ // 200 response from the success test sticks around and the subsequent
124
+ // 403/500 tests see a cached EntityContext and never call fetch.
125
+ clearContextCache();
126
+ });
127
+ afterEach(() => {
128
+ vi.restoreAllMocks();
129
+ });
130
+ describe("resolveEntity", () => {
131
+ it("resolves entity by slug (happy path)", async () => {
132
+ setupFetchMock();
133
+ const ctx = await resolveEntity({ slug: "indigo", vaultConfig: VAULT_CONFIG });
134
+ expect(ctx.uid).toBe("cmp_indigo_001");
135
+ expect(ctx.slug).toBe("indigo");
136
+ expect(ctx.bucketName).toBe("hq-vault-indigo");
137
+ expect(ctx.region).toBe("us-east-1");
138
+ expect(ctx.credentials.accessKeyId).toBe("ASIAMOCK000000000001");
139
+ expect(ctx.credentials.secretAccessKey).toBe("mockSecret");
140
+ expect(ctx.credentials.sessionToken).toBe("mockSession");
141
+ expect(ctx.expiresAt).toBeTruthy();
142
+ });
143
+ it("resolves 'personal' slug without special-casing", async () => {
144
+ setupFetchMock();
145
+ const ctx = await resolveEntity({ slug: "personal", vaultConfig: VAULT_CONFIG });
146
+ expect(ctx.uid).toBe("cmp_personal_001");
147
+ expect(ctx.slug).toBe("personal");
148
+ expect(ctx.bucketName).toBe("hq-vault-personal");
149
+ });
150
+ it("throws EntityNotFoundError when slug not found", async () => {
151
+ setupFetchMock();
152
+ await expect(resolveEntity({ slug: "unknown", vaultConfig: VAULT_CONFIG })).rejects.toThrow(EntityNotFoundError);
153
+ try {
154
+ await resolveEntity({ slug: "unknown", vaultConfig: VAULT_CONFIG });
155
+ }
156
+ catch (err) {
157
+ expect(err).toBeInstanceOf(EntityNotFoundError);
158
+ const e = err;
159
+ expect(e.message).toContain("unknown");
160
+ expect(e.message).toContain("indigo");
161
+ expect(e.message).toContain("personal");
162
+ }
163
+ });
164
+ it("throws EntityNotFoundError with (none) when user has no memberships", async () => {
165
+ setupFetchMock({ memberships: [] });
166
+ await expect(resolveEntity({ slug: "indigo", vaultConfig: VAULT_CONFIG })).rejects.toThrow(EntityNotFoundError);
167
+ try {
168
+ await resolveEntity({ slug: "indigo", vaultConfig: VAULT_CONFIG });
169
+ }
170
+ catch (err) {
171
+ expect(err.message).toContain("(none)");
172
+ }
173
+ });
174
+ it("throws EntityPermissionError on 403 from STS", async () => {
175
+ setupFetchMock({ stsStatus: 403, stsBody: { error: "Permission denied" } });
176
+ await expect(resolveEntity({ slug: "indigo", vaultConfig: VAULT_CONFIG })).rejects.toThrow(EntityPermissionError);
177
+ });
178
+ it("throws EntityResolutionError on 500 from STS", async () => {
179
+ setupFetchMock({ stsStatus: 500, stsBody: { error: "Internal error" } });
180
+ let caught;
181
+ try {
182
+ await resolveEntity({ slug: "indigo", vaultConfig: VAULT_CONFIG });
183
+ }
184
+ catch (err) {
185
+ caught = err;
186
+ }
187
+ expect(caught).toBeInstanceOf(EntityResolutionError);
188
+ expect(caught.statusCode).toBe(500);
189
+ }, 15_000);
190
+ it("rejects slug case-mismatch (case-sensitive)", async () => {
191
+ setupFetchMock();
192
+ await expect(resolveEntity({ slug: "Indigo", vaultConfig: VAULT_CONFIG })).rejects.toThrow(EntityNotFoundError);
193
+ try {
194
+ await resolveEntity({ slug: "Indigo", vaultConfig: VAULT_CONFIG });
195
+ }
196
+ catch (err) {
197
+ expect(err.message).toContain("Indigo");
198
+ expect(err.message).toContain("indigo");
199
+ }
200
+ });
201
+ it("throws EntityResolutionError when entity has no bucket", async () => {
202
+ setupFetchMock({
203
+ entities: {
204
+ cmp_indigo_001: { ...ENTITIES.indigo, bucketName: undefined },
205
+ cmp_personal_001: ENTITIES.personal,
206
+ },
207
+ });
208
+ await expect(resolveEntity({ slug: "indigo", vaultConfig: VAULT_CONFIG })).rejects.toThrow(EntityResolutionError);
209
+ try {
210
+ await resolveEntity({ slug: "indigo", vaultConfig: VAULT_CONFIG });
211
+ }
212
+ catch (err) {
213
+ expect(err.message).toContain("no bucket provisioned");
214
+ }
215
+ });
216
+ });
217
+ describe("listAvailableEntities", () => {
218
+ it("returns all available entities with slug, uid, and role", async () => {
219
+ setupFetchMock();
220
+ const entities = await listAvailableEntities({ vaultConfig: VAULT_CONFIG });
221
+ expect(entities).toHaveLength(2);
222
+ expect(entities).toEqual(expect.arrayContaining([
223
+ { slug: "indigo", uid: "cmp_indigo_001", role: "owner" },
224
+ { slug: "personal", uid: "cmp_personal_001", role: "owner" },
225
+ ]));
226
+ });
227
+ it("returns empty array when user has no memberships", async () => {
228
+ setupFetchMock({ memberships: [] });
229
+ const entities = await listAvailableEntities({ vaultConfig: VAULT_CONFIG });
230
+ expect(entities).toEqual([]);
231
+ });
232
+ it("preserves role from membership", async () => {
233
+ setupFetchMock({
234
+ memberships: [
235
+ { companyUid: "cmp_indigo_001", role: "member" },
236
+ ],
237
+ entities: { cmp_indigo_001: ENTITIES.indigo },
238
+ });
239
+ const entities = await listAvailableEntities({ vaultConfig: VAULT_CONFIG });
240
+ expect(entities).toHaveLength(1);
241
+ expect(entities[0].role).toBe("member");
242
+ });
243
+ });
244
+ //# sourceMappingURL=entity-resolver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-resolver.test.js","sourceRoot":"","sources":["../src/entity-resolver.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,7 +14,9 @@ export type { CognitoAuthConfig, CognitoTokens } from "./cognito-auth.js";
14
14
  export { PERSONAL_VAULT_EXCLUDED_TOP_LEVEL, computePersonalVaultPaths, } from "./personal-vault.js";
15
15
  export { VaultClient, pickCanonicalPersonEntity } from "./vault-client.js";
16
16
  export { VaultClientError, VaultAuthError, VaultPermissionDeniedError, VaultNotFoundError, VaultConflictError, } from "./vault-client.js";
17
- export type { MembershipRole, MembershipStatus, Membership, CreateInviteInput, CreateInviteResult, AcceptInviteResult, UpdateRoleInput, EntityInfo, CreateEntityInput, CreateEntityResult, PendingInviteByEmail, } from "./vault-client.js";
17
+ export type { MembershipRole, MembershipStatus, Membership, CreateInviteInput, CreateInviteResult, AcceptInviteResult, UpdateRoleInput, EntityInfo, CreateEntityInput, CreateEntityResult, PendingInviteByEmail, TelemetryOptInResponse, UsageBatch, UsageIngestResult, } from "./vault-client.js";
18
+ export { collectAndSendTelemetry, sanitizeRow } from "./telemetry.js";
19
+ export type { CollectTelemetryOptions, CollectTelemetryResult, TelemetryClientSurface, } from "./telemetry.js";
18
20
  export type { TaskAction, TaskScope, VendChildInput, VendChildResult, StsChildCredentials, } from "./vault-client.js";
19
21
  export { share, sync } from "./cli/index.js";
20
22
  export type { ShareOptions, ShareResult, SyncOptions, SyncResult, SyncProgressEvent } from "./cli/index.js";
@@ -28,4 +30,18 @@ export { promote } from "./cli/index.js";
28
30
  export type { PromoteOptions, PromoteResult } from "./cli/index.js";
29
31
  export type { EntityContext, VaultCredentials, VaultServiceConfig, ClientInfo, SyncConfig, Credentials, JournalEntry, SyncJournal, SyncStatus, PushResult, PullResult, DaemonState, } from "./types.js";
30
32
  export { buildClientHeaders, clientInfoFromPackage, detectHqCoreVersion, HEADER_CLIENT_NAME, HEADER_CLIENT_VERSION, HEADER_HQ_CORE_VERSION, } from "./client-info.js";
33
+ export { SOURCE_CHANNELS, isSourceChannel, assertSourceChannel, InvalidSourceChannelError, } from "./schemas/source-channels.js";
34
+ export type { SourceChannel } from "./schemas/source-channels.js";
35
+ export { SIGNAL_TYPES, isSignalType, assertSignalType, InvalidSignalTypeError, } from "./schemas/signal-types.js";
36
+ export type { SignalType } from "./schemas/signal-types.js";
37
+ export { resolveEntity, listAvailableEntities, EntityNotFoundError, EntityPermissionError, EntityResolutionError, } from "./entity-resolver.js";
38
+ export type { AvailableEntity } from "./entity-resolver.js";
39
+ export { listSources } from "./sources/list.js";
40
+ export { getSource, SourceNotFoundError } from "./sources/get.js";
41
+ export type { SourceSummary, SourceDocument, ListSourcesOptions, ListSourcesResult, GetSourceOptions, } from "./sources/types.js";
42
+ export { _setSourcesS3Factory, _resetSourcesS3Factory, } from "./sources/internals.js";
43
+ export { listSignals } from "./signals/list.js";
44
+ export { getSignal, SignalNotFoundError } from "./signals/get.js";
45
+ export type { SignalSummary, SignalDocument, ListSignalsOptions, ListSignalsResult, GetSignalOptions, } from "./signals/types.js";
46
+ export { _setSignalsS3Factory, _resetSignalsS3Factory, } from "./signals/internals.js";
31
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EACL,iCAAiC,EACjC,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,UAAU,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,6 +15,10 @@ export { PERSONAL_VAULT_EXCLUDED_TOP_LEVEL, computePersonalVaultPaths, } from ".
15
15
  // VaultClient SDK (VLT-7)
16
16
  export { VaultClient, pickCanonicalPersonEntity } from "./vault-client.js";
17
17
  export { VaultClientError, VaultAuthError, VaultPermissionDeniedError, VaultNotFoundError, VaultConflictError, } from "./vault-client.js";
18
+ // Usage telemetry collector (`/v1/usage`). Re-exported so wrappers other than
19
+ // `hq-sync-runner` (mobile, custom CLIs) can run the collector on their own
20
+ // schedule without re-implementing the cursor + sanitizer.
21
+ export { collectAndSendTelemetry, sanitizeRow } from "./telemetry.js";
18
22
  // CLI commands
19
23
  export { share, sync } from "./cli/index.js";
20
24
  export { resolveConflict, showDiff } from "./cli/index.js";
@@ -25,4 +29,21 @@ export { promote } from "./cli/index.js";
25
29
  // Client identification — every first-party caller should construct one of
26
30
  // these once at startup and pass it in via VaultServiceConfig.clientInfo.
27
31
  export { buildClientHeaders, clientInfoFromPackage, detectHqCoreVersion, HEADER_CLIENT_NAME, HEADER_CLIENT_VERSION, HEADER_HQ_CORE_VERSION, } from "./client-info.js";
32
+ // Source-channel + signal-type schemas (SoT)
33
+ export { SOURCE_CHANNELS, isSourceChannel, assertSourceChannel, InvalidSourceChannelError, } from "./schemas/source-channels.js";
34
+ export { SIGNAL_TYPES, isSignalType, assertSignalType, InvalidSignalTypeError, } from "./schemas/signal-types.js";
35
+ // Entity resolver (sources/signals slug → EntityContext)
36
+ export { resolveEntity, listAvailableEntities, EntityNotFoundError, EntityPermissionError, EntityResolutionError, } from "./entity-resolver.js";
37
+ // Sources read surface
38
+ export { listSources } from "./sources/list.js";
39
+ export { getSource, SourceNotFoundError } from "./sources/get.js";
40
+ // Test-only S3 factory hook for sources (consumed by hq-cli tests).
41
+ // Underscore prefix signals "not for production use".
42
+ export { _setSourcesS3Factory, _resetSourcesS3Factory, } from "./sources/internals.js";
43
+ // Signals read surface
44
+ export { listSignals } from "./signals/list.js";
45
+ export { getSignal, SignalNotFoundError } from "./signals/get.js";
46
+ // Test-only S3 factory hook for signals (consumed by hq-cli tests).
47
+ // Underscore prefix signals "not for production use".
48
+ export { _setSignalsS3Factory, _resetSignalsS3Factory, } from "./signals/internals.js";
28
49
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,SAAS,CAAC;AAIjB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,gCAAgC;AAChC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,6EAA6E;AAC7E,OAAO,EACL,iCAAiC,EACjC,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,0BAA0B;AAC1B,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAwB3B,eAAe;AACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG3D,kCAAkC;AAClC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAkBzC,2EAA2E;AAC3E,0EAA0E;AAC1E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,SAAS,CAAC;AAIjB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,gCAAgC;AAChC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,6EAA6E;AAC7E,OAAO,EACL,iCAAiC,EACjC,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,0BAA0B;AAC1B,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAkB3B,8EAA8E;AAC9E,4EAA4E;AAC5E,2DAA2D;AAC3D,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAgBtE,eAAe;AACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG3D,kCAAkC;AAClC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAkBzC,2EAA2E;AAC3E,0EAA0E;AAC1E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,6CAA6C;AAC7C,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAGnC,yDAAyD;AACzD,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AASlE,oEAAoE;AACpE,sDAAsD;AACtD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AASlE,oEAAoE;AACpE,sDAAsD;AACtD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Signal type schema — single source of truth.
3
+ *
4
+ * Closed enum: the six canonical signal types.
5
+ * assertSignalType is the agent-mitigation lever — prevents LLMs
6
+ * from fabricating signal types.
7
+ */
8
+ export declare const SIGNAL_TYPES: readonly ["action_item", "commitment", "decision", "key_point", "risk", "summary"];
9
+ export type SignalType = (typeof SIGNAL_TYPES)[number];
10
+ export declare class InvalidSignalTypeError extends Error {
11
+ readonly name = "InvalidSignalTypeError";
12
+ constructor(value: unknown);
13
+ }
14
+ export declare function isSignalType(value: unknown): value is SignalType;
15
+ export declare function assertSignalType(value: unknown): asserts value is SignalType;
16
+ //# sourceMappingURL=signal-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-types.d.ts","sourceRoot":"","sources":["../../src/schemas/signal-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,YAAY,oFAOd,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,SAAkB,IAAI,4BAA4B;gBAEtC,KAAK,EAAE,OAAO;CAK3B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAI5E"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Signal type schema — single source of truth.
3
+ *
4
+ * Closed enum: the six canonical signal types.
5
+ * assertSignalType is the agent-mitigation lever — prevents LLMs
6
+ * from fabricating signal types.
7
+ */
8
+ export const SIGNAL_TYPES = Object.freeze([
9
+ "action_item",
10
+ "commitment",
11
+ "decision",
12
+ "key_point",
13
+ "risk",
14
+ "summary",
15
+ ]);
16
+ export class InvalidSignalTypeError extends Error {
17
+ name = "InvalidSignalTypeError";
18
+ constructor(value) {
19
+ super(`Invalid signal type: '${String(value)}'. Valid types: ${SIGNAL_TYPES.join(", ")}`);
20
+ }
21
+ }
22
+ export function isSignalType(value) {
23
+ return typeof value === "string" && SIGNAL_TYPES.includes(value);
24
+ }
25
+ export function assertSignalType(value) {
26
+ if (!isSignalType(value)) {
27
+ throw new InvalidSignalTypeError(value);
28
+ }
29
+ }
30
+ //# sourceMappingURL=signal-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-types.js","sourceRoot":"","sources":["../../src/schemas/signal-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,aAAa;IACb,YAAY;IACZ,UAAU;IACV,WAAW;IACX,MAAM;IACN,SAAS;CACD,CAAC,CAAC;AAIZ,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC7B,IAAI,GAAG,wBAAwB,CAAC;IAElD,YAAY,KAAc;QACxB,KAAK,CACH,yBAAyB,MAAM,CAAC,KAAK,CAAC,mBAAmB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signal-types.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-types.test.d.ts","sourceRoot":"","sources":["../../src/schemas/signal-types.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { SIGNAL_TYPES, isSignalType, assertSignalType, InvalidSignalTypeError, } from "./signal-types.js";
3
+ describe("SIGNAL_TYPES", () => {
4
+ it("contains the six canonical types", () => {
5
+ expect([...SIGNAL_TYPES]).toEqual([
6
+ "action_item",
7
+ "commitment",
8
+ "decision",
9
+ "key_point",
10
+ "risk",
11
+ "summary",
12
+ ]);
13
+ });
14
+ it("is frozen (readonly at runtime)", () => {
15
+ expect(Object.isFrozen(SIGNAL_TYPES)).toBe(true);
16
+ });
17
+ });
18
+ describe("isSignalType", () => {
19
+ it.each(SIGNAL_TYPES)("returns true for '%s'", (type) => {
20
+ expect(isSignalType(type)).toBe(true);
21
+ });
22
+ it("returns false for an invalid string", () => {
23
+ expect(isSignalType("ramble")).toBe(false);
24
+ });
25
+ it("returns false for non-string values", () => {
26
+ expect(isSignalType(42)).toBe(false);
27
+ expect(isSignalType(null)).toBe(false);
28
+ expect(isSignalType(undefined)).toBe(false);
29
+ });
30
+ });
31
+ describe("assertSignalType", () => {
32
+ it.each(SIGNAL_TYPES)("does not throw for '%s'", (type) => {
33
+ expect(() => assertSignalType(type)).not.toThrow();
34
+ });
35
+ it("throws InvalidSignalTypeError for invalid value", () => {
36
+ expect(() => assertSignalType("ramble")).toThrow(InvalidSignalTypeError);
37
+ });
38
+ it("error message contains the offending value", () => {
39
+ expect(() => assertSignalType("ramble")).toThrow("'ramble'");
40
+ });
41
+ it("error message lists all valid types", () => {
42
+ try {
43
+ assertSignalType("ramble");
44
+ }
45
+ catch (err) {
46
+ const msg = err.message;
47
+ for (const type of SIGNAL_TYPES) {
48
+ expect(msg).toContain(type);
49
+ }
50
+ }
51
+ });
52
+ it("error message matches snapshot", () => {
53
+ expect(() => assertSignalType("ramble")).toThrowErrorMatchingInlineSnapshot(`[InvalidSignalTypeError: Invalid signal type: 'ramble'. Valid types: action_item, commitment, decision, key_point, risk, summary]`);
54
+ });
55
+ });
56
+ describe("SignalType type", () => {
57
+ it("narrows correctly via type guard", () => {
58
+ const value = "action_item";
59
+ if (isSignalType(value)) {
60
+ const _type = value;
61
+ expect(_type).toBe("action_item");
62
+ }
63
+ });
64
+ });
65
+ //# sourceMappingURL=signal-types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-types.test.js","sourceRoot":"","sources":["../../src/schemas/signal-types.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Source channel schema — single source of truth.
3
+ *
4
+ * Closed enum: extension requires a code change (PR).
5
+ * Matches the sources-pipeline SourceChannel type.
6
+ */
7
+ export declare const SOURCE_CHANNELS: readonly ["meeting", "email", "slack", "linear", "notion"];
8
+ export type SourceChannel = (typeof SOURCE_CHANNELS)[number];
9
+ export declare class InvalidSourceChannelError extends Error {
10
+ readonly name = "InvalidSourceChannelError";
11
+ constructor(value: unknown);
12
+ }
13
+ export declare function isSourceChannel(value: unknown): value is SourceChannel;
14
+ export declare function assertSourceChannel(value: unknown): asserts value is SourceChannel;
15
+ //# sourceMappingURL=source-channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-channels.d.ts","sourceRoot":"","sources":["../../src/schemas/source-channels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,eAAe,4DAMjB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAkB,IAAI,+BAA+B;gBAEzC,KAAK,EAAE,OAAO;CAK3B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAIlF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Source channel schema — single source of truth.
3
+ *
4
+ * Closed enum: extension requires a code change (PR).
5
+ * Matches the sources-pipeline SourceChannel type.
6
+ */
7
+ export const SOURCE_CHANNELS = Object.freeze([
8
+ "meeting",
9
+ "email",
10
+ "slack",
11
+ "linear",
12
+ "notion",
13
+ ]);
14
+ export class InvalidSourceChannelError extends Error {
15
+ name = "InvalidSourceChannelError";
16
+ constructor(value) {
17
+ super(`Invalid source channel: '${String(value)}'. Valid channels: ${SOURCE_CHANNELS.join(", ")}`);
18
+ }
19
+ }
20
+ export function isSourceChannel(value) {
21
+ return typeof value === "string" && SOURCE_CHANNELS.includes(value);
22
+ }
23
+ export function assertSourceChannel(value) {
24
+ if (!isSourceChannel(value)) {
25
+ throw new InvalidSourceChannelError(value);
26
+ }
27
+ }
28
+ //# sourceMappingURL=source-channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-channels.js","sourceRoot":"","sources":["../../src/schemas/source-channels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,SAAS;IACT,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;CACA,CAAC,CAAC;AAIZ,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAChC,IAAI,GAAG,2BAA2B,CAAC;IAErD,YAAY,KAAc;QACxB,KAAK,CACH,4BAA4B,MAAM,CAAC,KAAK,CAAC,sBAAsB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5F,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,eAAqC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=source-channels.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-channels.test.d.ts","sourceRoot":"","sources":["../../src/schemas/source-channels.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { SOURCE_CHANNELS, isSourceChannel, assertSourceChannel, InvalidSourceChannelError, } from "./source-channels.js";
3
+ describe("SOURCE_CHANNELS", () => {
4
+ it("contains the five canonical channels", () => {
5
+ expect([...SOURCE_CHANNELS]).toEqual([
6
+ "meeting",
7
+ "email",
8
+ "slack",
9
+ "linear",
10
+ "notion",
11
+ ]);
12
+ });
13
+ it("is frozen (readonly at runtime)", () => {
14
+ expect(Object.isFrozen(SOURCE_CHANNELS)).toBe(true);
15
+ });
16
+ });
17
+ describe("isSourceChannel", () => {
18
+ it.each(SOURCE_CHANNELS)("returns true for '%s'", (channel) => {
19
+ expect(isSourceChannel(channel)).toBe(true);
20
+ });
21
+ it("returns false for an invalid string", () => {
22
+ expect(isSourceChannel("pigeon")).toBe(false);
23
+ });
24
+ it("returns false for non-string values", () => {
25
+ expect(isSourceChannel(42)).toBe(false);
26
+ expect(isSourceChannel(null)).toBe(false);
27
+ expect(isSourceChannel(undefined)).toBe(false);
28
+ });
29
+ });
30
+ describe("assertSourceChannel", () => {
31
+ it.each(SOURCE_CHANNELS)("does not throw for '%s'", (channel) => {
32
+ expect(() => assertSourceChannel(channel)).not.toThrow();
33
+ });
34
+ it("throws InvalidSourceChannelError for invalid value", () => {
35
+ expect(() => assertSourceChannel("pigeon")).toThrow(InvalidSourceChannelError);
36
+ });
37
+ it("error message contains the offending value", () => {
38
+ expect(() => assertSourceChannel("pigeon")).toThrow("'pigeon'");
39
+ });
40
+ it("error message lists all valid channels", () => {
41
+ try {
42
+ assertSourceChannel("pigeon");
43
+ }
44
+ catch (err) {
45
+ const msg = err.message;
46
+ for (const channel of SOURCE_CHANNELS) {
47
+ expect(msg).toContain(channel);
48
+ }
49
+ }
50
+ });
51
+ it("error message matches snapshot", () => {
52
+ expect(() => assertSourceChannel("pigeon")).toThrowErrorMatchingInlineSnapshot(`[InvalidSourceChannelError: Invalid source channel: 'pigeon'. Valid channels: meeting, email, slack, linear, notion]`);
53
+ });
54
+ });
55
+ describe("SourceChannel type", () => {
56
+ it("narrows correctly via type guard", () => {
57
+ const value = "meeting";
58
+ if (isSourceChannel(value)) {
59
+ // TypeScript narrows to SourceChannel — compile-time check
60
+ const _channel = value;
61
+ expect(_channel).toBe("meeting");
62
+ }
63
+ });
64
+ });
65
+ //# sourceMappingURL=source-channels.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-channels.test.js","sourceRoot":"","sources":["../../src/schemas/source-channels.test.ts"],"names":[],"mappings":"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"}