@hasna/contacts 0.6.22 → 0.6.27

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 (185) hide show
  1. package/README.md +82 -6
  2. package/dist/cli/commands/advanced.d.ts.map +1 -1
  3. package/dist/cli/commands/audience.d.ts +18 -0
  4. package/dist/cli/commands/audience.d.ts.map +1 -0
  5. package/dist/cli/commands/core.d.ts.map +1 -1
  6. package/dist/cli/commands/crm.d.ts.map +1 -1
  7. package/dist/cli/index.js +9446 -5681
  8. package/dist/cli/storage.d.ts.map +1 -1
  9. package/dist/cloud/http-storage.d.ts +88 -0
  10. package/dist/cloud/http-storage.d.ts.map +1 -0
  11. package/dist/db/audiences.d.ts +51 -0
  12. package/dist/db/audiences.d.ts.map +1 -0
  13. package/dist/db/companies.d.ts.map +1 -1
  14. package/dist/db/contacts.d.ts.map +1 -1
  15. package/dist/db/database.d.ts +1 -2
  16. package/dist/db/database.d.ts.map +1 -1
  17. package/dist/db/paths.d.ts +3 -0
  18. package/dist/db/paths.d.ts.map +1 -0
  19. package/dist/db/pg-migrations.d.ts.map +1 -1
  20. package/dist/db/storage.d.ts +1 -1
  21. package/dist/db/storage.d.ts.map +1 -1
  22. package/dist/db/tags.d.ts.map +1 -1
  23. package/dist/db/tombstones.d.ts +19 -0
  24. package/dist/db/tombstones.d.ts.map +1 -0
  25. package/dist/generated/storage-kit/health.d.ts +20 -0
  26. package/dist/generated/storage-kit/health.d.ts.map +1 -0
  27. package/dist/generated/storage-kit/index.d.ts +8 -0
  28. package/dist/generated/storage-kit/index.d.ts.map +1 -0
  29. package/dist/generated/storage-kit/migrations.d.ts +48 -0
  30. package/dist/generated/storage-kit/migrations.d.ts.map +1 -0
  31. package/dist/generated/storage-kit/mode.d.ts +48 -0
  32. package/dist/generated/storage-kit/mode.d.ts.map +1 -0
  33. package/dist/generated/storage-kit/pool.d.ts +34 -0
  34. package/dist/generated/storage-kit/pool.d.ts.map +1 -0
  35. package/dist/generated/storage-kit/query.d.ts +36 -0
  36. package/dist/generated/storage-kit/query.d.ts.map +1 -0
  37. package/dist/generated/storage-kit/tls.d.ts +26 -0
  38. package/dist/generated/storage-kit/tls.d.ts.map +1 -0
  39. package/dist/index.d.ts +6 -76
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3876 -2787
  42. package/dist/lib/audience-contract.d.ts +215 -0
  43. package/dist/lib/audience-contract.d.ts.map +1 -0
  44. package/dist/lib/mailery-sync.d.ts +46 -0
  45. package/dist/lib/mailery-sync.d.ts.map +1 -0
  46. package/dist/lib/package-version.d.ts +6 -0
  47. package/dist/lib/package-version.d.ts.map +1 -0
  48. package/dist/mcp/handlers/advanced.d.ts +5 -0
  49. package/dist/mcp/handlers/advanced.d.ts.map +1 -1
  50. package/dist/mcp/handlers/audience.d.ts +9 -0
  51. package/dist/mcp/handlers/audience.d.ts.map +1 -0
  52. package/dist/mcp/handlers/core.d.ts +4 -0
  53. package/dist/mcp/handlers/core.d.ts.map +1 -1
  54. package/dist/mcp/handlers/crm.d.ts +5 -0
  55. package/dist/mcp/handlers/crm.d.ts.map +1 -1
  56. package/dist/mcp/handlers/index.d.ts.map +1 -1
  57. package/dist/mcp/index.js +5843 -4045
  58. package/dist/mcp/storage-tools.d.ts.map +1 -1
  59. package/dist/mcp/tools.d.ts +252 -0
  60. package/dist/mcp/tools.d.ts.map +1 -1
  61. package/dist/sdk/index.d.ts +16 -0
  62. package/dist/sdk/index.d.ts.map +1 -0
  63. package/dist/sdk/index.js +173 -0
  64. package/dist/sdk/v1.generated.d.ts +189 -0
  65. package/dist/sdk/v1.generated.d.ts.map +1 -0
  66. package/dist/server/cloud.d.ts +51 -0
  67. package/dist/server/cloud.d.ts.map +1 -0
  68. package/dist/server/index.js +8791 -4916
  69. package/dist/server/openapi.d.ts +708 -0
  70. package/dist/server/openapi.d.ts.map +1 -0
  71. package/dist/server/pg-store.d.ts +57 -0
  72. package/dist/server/pg-store.d.ts.map +1 -0
  73. package/dist/server/security.d.ts +24 -0
  74. package/dist/server/security.d.ts.map +1 -0
  75. package/dist/server/serve.d.ts +8 -1
  76. package/dist/server/serve.d.ts.map +1 -1
  77. package/dist/server/v1.d.ts +6 -0
  78. package/dist/server/v1.d.ts.map +1 -0
  79. package/dist/store/index.d.ts +383 -0
  80. package/dist/store/index.d.ts.map +1 -0
  81. package/dist/types/index.d.ts +96 -0
  82. package/dist/types/index.d.ts.map +1 -1
  83. package/hasna.contract.json +32 -0
  84. package/migrations/0001_core_schema.sql +162 -0
  85. package/migrations/0002_contact_fields_groups.sql +22 -0
  86. package/migrations/0003_status_archiving.sql +17 -0
  87. package/migrations/0004_company_relationships.sql +16 -0
  88. package/migrations/0005_contact_projects.sql +19 -0
  89. package/migrations/0006_contact_notes.sql +14 -0
  90. package/migrations/0007_entities_vendor_tasks.sql +91 -0
  91. package/migrations/0008_deals_events.sql +36 -0
  92. package/migrations/0009_history_learnings_coordination.sql +122 -0
  93. package/migrations/0010_documents_health.sql +38 -0
  94. package/migrations/0011_feedback.sql +14 -0
  95. package/migrations/0012_audiences_consent_suppressions.sql +38 -0
  96. package/migrations/9001_api_keys.sql +18 -0
  97. package/package.json +19 -4
  98. package/dist/cli/storage-contract.test.d.ts +0 -2
  99. package/dist/cli/storage-contract.test.d.ts.map +0 -1
  100. package/dist/db/activity.test.d.ts +0 -2
  101. package/dist/db/activity.test.d.ts.map +0 -1
  102. package/dist/db/applications.test.d.ts +0 -2
  103. package/dist/db/applications.test.d.ts.map +0 -1
  104. package/dist/db/companies.test.d.ts +0 -2
  105. package/dist/db/companies.test.d.ts.map +0 -1
  106. package/dist/db/contact-tasks.test.d.ts +0 -2
  107. package/dist/db/contact-tasks.test.d.ts.map +0 -1
  108. package/dist/db/contacts.test.d.ts +0 -2
  109. package/dist/db/contacts.test.d.ts.map +0 -1
  110. package/dist/db/coordination.test.d.ts +0 -2
  111. package/dist/db/coordination.test.d.ts.map +0 -1
  112. package/dist/db/database.test.d.ts +0 -2
  113. package/dist/db/database.test.d.ts.map +0 -1
  114. package/dist/db/deals.test.d.ts +0 -2
  115. package/dist/db/deals.test.d.ts.map +0 -1
  116. package/dist/db/documents.test.d.ts +0 -2
  117. package/dist/db/documents.test.d.ts.map +0 -1
  118. package/dist/db/events.test.d.ts +0 -2
  119. package/dist/db/events.test.d.ts.map +0 -1
  120. package/dist/db/feedback.d.ts +0 -15
  121. package/dist/db/feedback.d.ts.map +0 -1
  122. package/dist/db/field-history.test.d.ts +0 -2
  123. package/dist/db/field-history.test.d.ts.map +0 -1
  124. package/dist/db/freshness.test.d.ts +0 -2
  125. package/dist/db/freshness.test.d.ts.map +0 -1
  126. package/dist/db/graph.test.d.ts +0 -2
  127. package/dist/db/graph.test.d.ts.map +0 -1
  128. package/dist/db/groups.test.d.ts +0 -2
  129. package/dist/db/groups.test.d.ts.map +0 -1
  130. package/dist/db/health.test.d.ts +0 -2
  131. package/dist/db/health.test.d.ts.map +0 -1
  132. package/dist/db/identity.test.d.ts +0 -2
  133. package/dist/db/identity.test.d.ts.map +0 -1
  134. package/dist/db/job-history.test.d.ts +0 -2
  135. package/dist/db/job-history.test.d.ts.map +0 -1
  136. package/dist/db/learnings.test.d.ts +0 -2
  137. package/dist/db/learnings.test.d.ts.map +0 -1
  138. package/dist/db/notes.test.d.ts +0 -2
  139. package/dist/db/notes.test.d.ts.map +0 -1
  140. package/dist/db/org-chart.test.d.ts +0 -2
  141. package/dist/db/org-chart.test.d.ts.map +0 -1
  142. package/dist/db/org-members.test.d.ts +0 -2
  143. package/dist/db/org-members.test.d.ts.map +0 -1
  144. package/dist/db/relationships.test.d.ts +0 -2
  145. package/dist/db/relationships.test.d.ts.map +0 -1
  146. package/dist/db/signals.test.d.ts +0 -2
  147. package/dist/db/signals.test.d.ts.map +0 -1
  148. package/dist/db/sqlite-adapter.test.d.ts +0 -2
  149. package/dist/db/sqlite-adapter.test.d.ts.map +0 -1
  150. package/dist/db/storage.test.d.ts +0 -2
  151. package/dist/db/storage.test.d.ts.map +0 -1
  152. package/dist/db/tags.test.d.ts +0 -2
  153. package/dist/db/tags.test.d.ts.map +0 -1
  154. package/dist/db/vendor-comms.test.d.ts +0 -2
  155. package/dist/db/vendor-comms.test.d.ts.map +0 -1
  156. package/dist/lib/audit.test.d.ts +0 -2
  157. package/dist/lib/audit.test.d.ts.map +0 -1
  158. package/dist/lib/brief.test.d.ts +0 -2
  159. package/dist/lib/brief.test.d.ts.map +0 -1
  160. package/dist/lib/config.test.d.ts +0 -2
  161. package/dist/lib/config.test.d.ts.map +0 -1
  162. package/dist/lib/dedup.test.d.ts +0 -2
  163. package/dist/lib/dedup.test.d.ts.map +0 -1
  164. package/dist/lib/export.test.d.ts +0 -2
  165. package/dist/lib/export.test.d.ts.map +0 -1
  166. package/dist/lib/gmail-import.test.d.ts +0 -2
  167. package/dist/lib/gmail-import.test.d.ts.map +0 -1
  168. package/dist/lib/google-contacts.test.d.ts +0 -2
  169. package/dist/lib/google-contacts.test.d.ts.map +0 -1
  170. package/dist/lib/import.test.d.ts +0 -2
  171. package/dist/lib/import.test.d.ts.map +0 -1
  172. package/dist/lib/signature-parser.test.d.ts +0 -2
  173. package/dist/lib/signature-parser.test.d.ts.map +0 -1
  174. package/dist/lib/stats.test.d.ts +0 -2
  175. package/dist/lib/stats.test.d.ts.map +0 -1
  176. package/dist/lib/timeline.test.d.ts +0 -2
  177. package/dist/lib/timeline.test.d.ts.map +0 -1
  178. package/dist/lib/upcoming.test.d.ts +0 -2
  179. package/dist/lib/upcoming.test.d.ts.map +0 -1
  180. package/dist/mcp/http.test.d.ts +0 -2
  181. package/dist/mcp/http.test.d.ts.map +0 -1
  182. package/dist/mcp/mcp.test.d.ts +0 -2
  183. package/dist/mcp/mcp.test.d.ts.map +0 -1
  184. package/dist/mcp/storage-contract.test.d.ts +0 -2
  185. package/dist/mcp/storage-contract.test.d.ts.map +0 -1
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Vendored minimal mirror of the `hasna.audience.v1` contract from
3
+ * @hasna/contracts (branch feat/distribution-schemas). The upstream package is
4
+ * not published yet, so this file mirrors the schema shape 1:1 (strict object,
5
+ * contract base fields, predicate refinement rules). Once @hasna/contracts
6
+ * ships, this mirror can be replaced with:
7
+ *
8
+ * import { AudienceSchema, parseContract, SCHEMA_IDS } from "@hasna/contracts/schemas";
9
+ * parseContract(SCHEMA_IDS.audience, value);
10
+ */
11
+ import { z } from "zod";
12
+ import type { Audience } from "../types/index.js";
13
+ export declare const AUDIENCE_CONTRACT_SCHEMA_ID: "hasna.audience.v1";
14
+ export declare const AudiencePredicateContractSchema: z.ZodEffects<z.ZodObject<{
15
+ kind: z.ZodEnum<["tag", "attribute", "group"]>;
16
+ key: z.ZodOptional<z.ZodString>;
17
+ op: z.ZodDefault<z.ZodEnum<["eq", "neq", "in", "not_in", "exists", "not_exists"]>>;
18
+ value: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
19
+ values: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
20
+ }, "strict", z.ZodTypeAny, {
21
+ values: (string | number | boolean)[];
22
+ kind: "tag" | "attribute" | "group";
23
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
24
+ key?: string | undefined;
25
+ value?: string | number | boolean | undefined;
26
+ }, {
27
+ kind: "tag" | "attribute" | "group";
28
+ values?: (string | number | boolean)[] | undefined;
29
+ key?: string | undefined;
30
+ value?: string | number | boolean | undefined;
31
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
32
+ }>, {
33
+ values: (string | number | boolean)[];
34
+ kind: "tag" | "attribute" | "group";
35
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
36
+ key?: string | undefined;
37
+ value?: string | number | boolean | undefined;
38
+ }, {
39
+ kind: "tag" | "attribute" | "group";
40
+ values?: (string | number | boolean)[] | undefined;
41
+ key?: string | undefined;
42
+ value?: string | number | boolean | undefined;
43
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
44
+ }>;
45
+ export declare const AudienceDefinitionContractSchema: z.ZodObject<{
46
+ match: z.ZodDefault<z.ZodEnum<["all", "any"]>>;
47
+ predicates: z.ZodArray<z.ZodEffects<z.ZodObject<{
48
+ kind: z.ZodEnum<["tag", "attribute", "group"]>;
49
+ key: z.ZodOptional<z.ZodString>;
50
+ op: z.ZodDefault<z.ZodEnum<["eq", "neq", "in", "not_in", "exists", "not_exists"]>>;
51
+ value: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
52
+ values: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
53
+ }, "strict", z.ZodTypeAny, {
54
+ values: (string | number | boolean)[];
55
+ kind: "tag" | "attribute" | "group";
56
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
57
+ key?: string | undefined;
58
+ value?: string | number | boolean | undefined;
59
+ }, {
60
+ kind: "tag" | "attribute" | "group";
61
+ values?: (string | number | boolean)[] | undefined;
62
+ key?: string | undefined;
63
+ value?: string | number | boolean | undefined;
64
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
65
+ }>, {
66
+ values: (string | number | boolean)[];
67
+ kind: "tag" | "attribute" | "group";
68
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
69
+ key?: string | undefined;
70
+ value?: string | number | boolean | undefined;
71
+ }, {
72
+ kind: "tag" | "attribute" | "group";
73
+ values?: (string | number | boolean)[] | undefined;
74
+ key?: string | undefined;
75
+ value?: string | number | boolean | undefined;
76
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
77
+ }>, "many">;
78
+ }, "strict", z.ZodTypeAny, {
79
+ match: "all" | "any";
80
+ predicates: {
81
+ values: (string | number | boolean)[];
82
+ kind: "tag" | "attribute" | "group";
83
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
84
+ key?: string | undefined;
85
+ value?: string | number | boolean | undefined;
86
+ }[];
87
+ }, {
88
+ predicates: {
89
+ kind: "tag" | "attribute" | "group";
90
+ values?: (string | number | boolean)[] | undefined;
91
+ key?: string | undefined;
92
+ value?: string | number | boolean | undefined;
93
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
94
+ }[];
95
+ match?: "all" | "any" | undefined;
96
+ }>;
97
+ export declare const ConsentPolicyContractSchema: z.ZodEnum<["opt_in", "opt_out", "transactional", "none"]>;
98
+ export declare const AudienceContractSchema: z.ZodObject<{
99
+ schema: z.ZodLiteral<"hasna.audience.v1">;
100
+ id: z.ZodString;
101
+ createdAt: z.ZodString;
102
+ updatedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
103
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
104
+ audienceId: z.ZodString;
105
+ name: z.ZodString;
106
+ definition: z.ZodObject<{
107
+ match: z.ZodDefault<z.ZodEnum<["all", "any"]>>;
108
+ predicates: z.ZodArray<z.ZodEffects<z.ZodObject<{
109
+ kind: z.ZodEnum<["tag", "attribute", "group"]>;
110
+ key: z.ZodOptional<z.ZodString>;
111
+ op: z.ZodDefault<z.ZodEnum<["eq", "neq", "in", "not_in", "exists", "not_exists"]>>;
112
+ value: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
113
+ values: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>, "many">>;
114
+ }, "strict", z.ZodTypeAny, {
115
+ values: (string | number | boolean)[];
116
+ kind: "tag" | "attribute" | "group";
117
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
118
+ key?: string | undefined;
119
+ value?: string | number | boolean | undefined;
120
+ }, {
121
+ kind: "tag" | "attribute" | "group";
122
+ values?: (string | number | boolean)[] | undefined;
123
+ key?: string | undefined;
124
+ value?: string | number | boolean | undefined;
125
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
126
+ }>, {
127
+ values: (string | number | boolean)[];
128
+ kind: "tag" | "attribute" | "group";
129
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
130
+ key?: string | undefined;
131
+ value?: string | number | boolean | undefined;
132
+ }, {
133
+ kind: "tag" | "attribute" | "group";
134
+ values?: (string | number | boolean)[] | undefined;
135
+ key?: string | undefined;
136
+ value?: string | number | boolean | undefined;
137
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
138
+ }>, "many">;
139
+ }, "strict", z.ZodTypeAny, {
140
+ match: "all" | "any";
141
+ predicates: {
142
+ values: (string | number | boolean)[];
143
+ kind: "tag" | "attribute" | "group";
144
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
145
+ key?: string | undefined;
146
+ value?: string | number | boolean | undefined;
147
+ }[];
148
+ }, {
149
+ predicates: {
150
+ kind: "tag" | "attribute" | "group";
151
+ values?: (string | number | boolean)[] | undefined;
152
+ key?: string | undefined;
153
+ value?: string | number | boolean | undefined;
154
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
155
+ }[];
156
+ match?: "all" | "any" | undefined;
157
+ }>;
158
+ consentPolicy: z.ZodEnum<["opt_in", "opt_out", "transactional", "none"]>;
159
+ suppressionSyncedAt: z.ZodOptional<z.ZodString>;
160
+ }, "strict", z.ZodTypeAny, {
161
+ name: string;
162
+ id: string;
163
+ schema: "hasna.audience.v1";
164
+ createdAt: string;
165
+ audienceId: string;
166
+ definition: {
167
+ match: "all" | "any";
168
+ predicates: {
169
+ values: (string | number | boolean)[];
170
+ kind: "tag" | "attribute" | "group";
171
+ op: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists";
172
+ key?: string | undefined;
173
+ value?: string | number | boolean | undefined;
174
+ }[];
175
+ };
176
+ consentPolicy: "opt_in" | "opt_out" | "transactional" | "none";
177
+ metadata?: Record<string, unknown> | undefined;
178
+ updatedAt?: string | null | undefined;
179
+ suppressionSyncedAt?: string | undefined;
180
+ }, {
181
+ name: string;
182
+ id: string;
183
+ schema: "hasna.audience.v1";
184
+ createdAt: string;
185
+ audienceId: string;
186
+ definition: {
187
+ predicates: {
188
+ kind: "tag" | "attribute" | "group";
189
+ values?: (string | number | boolean)[] | undefined;
190
+ key?: string | undefined;
191
+ value?: string | number | boolean | undefined;
192
+ op?: "eq" | "neq" | "in" | "not_in" | "exists" | "not_exists" | undefined;
193
+ }[];
194
+ match?: "all" | "any" | undefined;
195
+ };
196
+ consentPolicy: "opt_in" | "opt_out" | "transactional" | "none";
197
+ metadata?: Record<string, unknown> | undefined;
198
+ updatedAt?: string | null | undefined;
199
+ suppressionSyncedAt?: string | undefined;
200
+ }>;
201
+ export type AudienceContract = z.infer<typeof AudienceContractSchema>;
202
+ /** Map a stored audience row to a hasna.audience.v1 contract document. */
203
+ export declare function toAudienceContract(audience: Audience): AudienceContract;
204
+ /** Validate an arbitrary value against the vendored hasna.audience.v1 mirror. */
205
+ export declare function validateAudienceContract(value: unknown): {
206
+ ok: true;
207
+ value: AudienceContract;
208
+ } | {
209
+ ok: false;
210
+ issues: {
211
+ path: string;
212
+ message: string;
213
+ }[];
214
+ };
215
+ //# sourceMappingURL=audience-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience-contract.d.ts","sourceRoot":"","sources":["../../src/lib/audience-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,eAAO,MAAM,2BAA2B,EAAG,mBAA4B,CAAC;AAUxE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBxC,CAAC;AAEL,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKlC,CAAC;AAEZ,eAAO,MAAM,2BAA2B,2DAAyD,CAAC;AAElG,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaxB,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CAwBvE;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAO3J"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Suppression sync: push email unsubscribes/suppressions recorded in contacts
3
+ * to a mail delivery system so campaign sends never hit opted-out addresses.
4
+ *
5
+ * The default adapter dynamically imports @hasna/mailery (which exposes
6
+ * `suppressContact(email)`) so mailery stays an optional integration rather
7
+ * than a hard dependency. Any other backend can implement
8
+ * SuppressionSyncAdapter and be passed to syncSuppressions().
9
+ */
10
+ import type { ContactsDatabase } from "../db/database.js";
11
+ export interface SuppressionSyncAdapter {
12
+ /** Human-readable adapter name for reporting, e.g. "mailery". */
13
+ name: string;
14
+ /** Push one suppressed email address to the delivery system. Throw on failure. */
15
+ suppress(email: string, reason?: string): Promise<void> | void;
16
+ }
17
+ export interface SuppressionSyncResult {
18
+ adapter: string;
19
+ dry_run: boolean;
20
+ pending: number;
21
+ pushed: number;
22
+ failed: {
23
+ address: string;
24
+ error: string;
25
+ }[];
26
+ synced_at: string | null;
27
+ }
28
+ export declare class MaileryNotAvailableError extends Error {
29
+ constructor(detail: string);
30
+ }
31
+ /**
32
+ * Build the default adapter backed by @hasna/mailery, if importable.
33
+ * Throws MaileryNotAvailableError when the package is not installed.
34
+ */
35
+ export declare function createMaileryAdapter(): Promise<SuppressionSyncAdapter>;
36
+ export interface SyncSuppressionsOptions {
37
+ adapter?: SuppressionSyncAdapter;
38
+ dryRun?: boolean;
39
+ db?: ContactsDatabase;
40
+ }
41
+ /**
42
+ * Push all unsynced email suppressions to the delivery system and stamp
43
+ * synced_at on each pushed entry plus suppression_synced_at on every audience.
44
+ */
45
+ export declare function syncSuppressions(options?: SyncSuppressionsOptions): Promise<SuppressionSyncResult>;
46
+ //# sourceMappingURL=mailery-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailery-sync.d.ts","sourceRoot":"","sources":["../../src/lib/mailery-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAU1D,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,MAAM,EAAE,MAAM;CAO3B;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAoB5E;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,gBAAgB,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAwC5G"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Resolve the installed @hasna/contacts version from the nearest package.json.
3
+ * Falls back to "0.0.0" only if the manifest cannot be located (never throws).
4
+ */
5
+ export declare function getPackageVersion(): string;
6
+ //# sourceMappingURL=package-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-version.d.ts","sourceRoot":"","sources":["../../src/lib/package-version.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAsB1C"}
@@ -3,6 +3,11 @@
3
3
  * coordination (locks), graph, identity, embeddings, signals, freshness,
4
4
  * org chart, deal teams, context, signatures, meeting capture, images,
5
5
  * vault, documents, health, feedback, and agent registry.
6
+ *
7
+ * Every handler routes storage through the single `Store` abstraction
8
+ * (getStore()). No handler touches SQLite (`getDatabase`) directly. Pure
9
+ * computation helpers (signature parsing, AI document scanning) stay as direct
10
+ * imports because they never touch the storage backend.
6
11
  */
7
12
  import type { ToolHandler } from "./types.js";
8
13
  export declare const advancedHandlers: Record<string, ToolHandler>;
@@ -1 +1 @@
1
- {"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/advanced.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA+E9C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA+qBxD,CAAC"}
1
+ {"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/advanced.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0B9C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAycxD,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Audience / consent / suppression handlers (distribution apps plan).
3
+ *
4
+ * Every handler routes through the single `Store` abstraction (getStore()). No
5
+ * handler touches SQLite (`getDatabase`) or performs raw HTTP directly.
6
+ */
7
+ import type { ToolHandler } from "./types.js";
8
+ export declare const audienceHandlers: Record<string, ToolHandler>;
9
+ //# sourceMappingURL=audience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/audience.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAa9C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA6DxD,CAAC"}
@@ -1,5 +1,9 @@
1
1
  /**
2
2
  * Core contact handlers: CRUD, search, merge, bulk, tags, groups, relationships, notes, import/export basics.
3
+ *
4
+ * Every handler routes through the single `Store` abstraction (getStore()). No
5
+ * handler touches SQLite (`getDatabase`) or performs raw HTTP directly — the
6
+ * transport (local SQLite vs self_hosted /v1) is resolved once, inside the Store.
3
7
  */
4
8
  import type { ToolHandler } from "./types.js";
5
9
  export declare const coreHandlers: Record<string, ToolHandler>;
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/core.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAiF9C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAmZpD,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2C9C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA+YpD,CAAC"}
@@ -3,6 +3,11 @@
3
3
  * vendor communications, contact tasks, applications, entities, cold contacts,
4
4
  * upcoming, stats, audit, deals, events, timeline, enrich, context, webhook,
5
5
  * bulk tags, DNC, export.
6
+ *
7
+ * Every handler routes storage through the single `Store` abstraction
8
+ * (getStore()). No handler touches SQLite (`getDatabase`) or performs raw HTTP
9
+ * against the storage backend. External integrations (Gmail, Google People,
10
+ * Exa, outbound webhooks) are legitimate network calls kept in the handler.
6
11
  */
7
12
  import type { ToolHandler } from "./types.js";
8
13
  export declare const crmHandlers: Record<string, ToolHandler>;
@@ -1 +1 @@
1
- {"version":3,"file":"crm.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/crm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwF9C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAgpBnD,CAAC"}
1
+ {"version":3,"file":"crm.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/crm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwB9C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA4hBnD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAInD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAM9C,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAKnD,CAAC"}