@superpanel-sdk/runtime 0.2.2 → 0.5.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 (274) hide show
  1. package/README.md +28 -8
  2. package/dist/builder/codegen/emit.d.ts +29 -11
  3. package/dist/builder/codegen/emit.js +328 -61
  4. package/dist/builder/codegen/generate.d.ts +21 -0
  5. package/dist/builder/codegen/generate.js +152 -20
  6. package/dist/builder/company-import-graph.d.ts +2 -0
  7. package/dist/builder/company-import-graph.js +40 -8
  8. package/dist/builder/company-imports.d.ts +24 -0
  9. package/dist/builder/company-imports.js +114 -0
  10. package/dist/builder/compile/compile-sequence.d.ts +59 -8
  11. package/dist/builder/compile/compile-sequence.js +279 -77
  12. package/dist/builder/compile/function-code.d.ts +12 -2
  13. package/dist/builder/compile/function-code.js +87 -39
  14. package/dist/builder/compile/registry.d.ts +7 -3
  15. package/dist/builder/compile/registry.js +24 -23
  16. package/dist/builder/load.d.ts +70 -10
  17. package/dist/builder/load.js +250 -61
  18. package/dist/builder/paths.d.ts +3 -0
  19. package/dist/builder/paths.js +16 -0
  20. package/dist/builder/schedules.d.ts +23 -0
  21. package/dist/builder/schedules.js +102 -0
  22. package/dist/builder/slot-schema-validation.d.ts +4 -0
  23. package/dist/builder/slot-schema-validation.js +10 -0
  24. package/dist/builder/typecheck.d.ts +8 -0
  25. package/dist/builder/typecheck.js +105 -0
  26. package/dist/builder/types.d.ts +91 -19
  27. package/dist/builder/types.js +2 -1
  28. package/dist/cli/auth/auth.d.ts +37 -0
  29. package/dist/cli/auth/auth.js +211 -0
  30. package/dist/cli/auth/backend-url.d.ts +5 -0
  31. package/dist/cli/auth/backend-url.js +25 -0
  32. package/dist/cli/auth/clipboard.d.ts +9 -0
  33. package/dist/cli/auth/clipboard.js +38 -0
  34. package/dist/cli/auth/http.d.ts +20 -0
  35. package/dist/cli/auth/http.js +27 -0
  36. package/dist/cli/auth/index.d.ts +10 -0
  37. package/dist/cli/auth/index.js +27 -0
  38. package/dist/cli/auth/progress.d.ts +12 -0
  39. package/dist/cli/auth/progress.js +15 -0
  40. package/dist/cli/auth/serve-login.d.ts +8 -0
  41. package/dist/cli/auth/serve-login.js +24 -0
  42. package/dist/cli/compile/index.js +3 -0
  43. package/dist/cli/config.d.ts +10 -0
  44. package/dist/cli/config.js +52 -0
  45. package/dist/cli/index.js +28 -8
  46. package/dist/cli/serve/index.d.ts +73 -3
  47. package/dist/cli/serve/index.js +410 -113
  48. package/dist/cli/type-gen/index.js +9 -8
  49. package/dist/compiler.d.ts +7 -0
  50. package/dist/compiler.js +7 -0
  51. package/dist/compute-host/compute-host.d.ts +15 -23
  52. package/dist/compute-host/compute-host.js +25 -28
  53. package/dist/compute-host/index.d.ts +2 -2
  54. package/dist/compute-host/index.js +1 -1
  55. package/dist/compute-host/source-compute-host.d.ts +11 -9
  56. package/dist/compute-host/source-compute-host.js +50 -31
  57. package/dist/core/case-orchestrator/contact-hours.d.ts +50 -0
  58. package/dist/core/case-orchestrator/contact-hours.js +108 -0
  59. package/dist/core/case-orchestrator/follow-ups.d.ts +31 -0
  60. package/dist/core/case-orchestrator/follow-ups.js +103 -0
  61. package/dist/core/case-orchestrator/index.d.ts +6 -0
  62. package/dist/core/case-orchestrator/index.js +6 -0
  63. package/dist/core/case-orchestrator/render.d.ts +75 -0
  64. package/dist/core/case-orchestrator/render.js +239 -0
  65. package/dist/core/case-orchestrator/time.d.ts +11 -0
  66. package/dist/core/case-orchestrator/time.js +29 -0
  67. package/dist/core/case-orchestrator/tools.d.ts +29 -0
  68. package/dist/core/case-orchestrator/tools.js +31 -0
  69. package/dist/core/case-orchestrator/types.d.ts +753 -0
  70. package/dist/core/case-orchestrator/types.js +46 -0
  71. package/dist/core/case-orchestrator/validate.d.ts +11 -0
  72. package/dist/core/case-orchestrator/validate.js +63 -0
  73. package/dist/core/context/call.d.ts +291 -0
  74. package/dist/core/context/call.js +94 -0
  75. package/dist/core/context/channels.d.ts +60 -0
  76. package/dist/core/context/channels.js +35 -0
  77. package/dist/core/context/contact.d.ts +96 -6
  78. package/dist/core/context/contact.js +48 -2
  79. package/dist/core/context/email-message.d.ts +159 -0
  80. package/dist/core/context/email-message.js +59 -0
  81. package/dist/core/context/email.d.ts +97 -0
  82. package/dist/core/context/email.js +91 -0
  83. package/dist/core/context/exchanges.d.ts +142 -0
  84. package/dist/core/context/exchanges.js +63 -0
  85. package/dist/core/context/instances.d.ts +278 -0
  86. package/dist/core/context/instances.js +123 -0
  87. package/dist/core/context/kv.d.ts +113 -0
  88. package/dist/core/context/kv.js +60 -0
  89. package/dist/core/context/platform-registry.d.ts +509 -4
  90. package/dist/core/context/platform-registry.js +14 -2
  91. package/dist/core/context/platform.d.ts +2 -1
  92. package/dist/core/context/sms.d.ts +147 -0
  93. package/dist/core/context/sms.js +57 -0
  94. package/dist/core/context/types.d.ts +51 -30
  95. package/dist/core/context/types.js +1 -7
  96. package/dist/core/conversation/index.d.ts +31 -0
  97. package/dist/core/conversation/index.js +14 -0
  98. package/dist/core/functions/define/bind.d.ts +25 -0
  99. package/dist/core/functions/define/bind.js +14 -0
  100. package/dist/core/functions/define/case.d.ts +9 -0
  101. package/dist/core/functions/define/case.js +13 -0
  102. package/dist/core/functions/define/events.d.ts +20 -0
  103. package/dist/core/functions/define/events.js +21 -0
  104. package/dist/core/functions/define/no-case.d.ts +4 -0
  105. package/dist/core/functions/define/no-case.js +9 -0
  106. package/dist/core/functions/events.d.ts +247 -0
  107. package/dist/core/functions/events.js +32 -0
  108. package/dist/core/functions/func-ref.d.ts +11 -2
  109. package/dist/core/functions/schedules.d.ts +51 -0
  110. package/dist/core/functions/schedules.js +20 -0
  111. package/dist/core/functions/types.d.ts +62 -51
  112. package/dist/core/functions/types.js +6 -1
  113. package/dist/core/office-hours/index.d.ts +39 -0
  114. package/dist/core/office-hours/index.js +187 -0
  115. package/dist/core/page/define.d.ts +834 -0
  116. package/dist/core/page/define.js +477 -0
  117. package/dist/core/page/ops.d.ts +58 -0
  118. package/dist/core/page/ops.js +220 -0
  119. package/dist/core/page/render.d.ts +253 -0
  120. package/dist/core/page/render.js +840 -0
  121. package/dist/core/page/time-format.d.ts +19 -0
  122. package/dist/core/page/time-format.js +41 -0
  123. package/dist/core/page/timeline.d.ts +40 -0
  124. package/dist/core/page/timeline.js +2 -0
  125. package/dist/core/page/typed.d.ts +642 -0
  126. package/dist/core/page/typed.js +2 -0
  127. package/dist/core/page/workspace.d.ts +33 -0
  128. package/dist/core/page/workspace.js +231 -0
  129. package/dist/core/party/index.d.ts +3 -0
  130. package/dist/core/party/index.js +3 -0
  131. package/dist/core/party/schema.d.ts +137 -0
  132. package/dist/core/party/schema.js +80 -0
  133. package/dist/core/party/types.d.ts +40 -0
  134. package/dist/core/party/types.js +15 -0
  135. package/dist/core/sequence/define.d.ts +57 -0
  136. package/dist/core/sequence/define.js +10 -0
  137. package/dist/core/sequence/index.d.ts +63 -0
  138. package/dist/core/sequence/index.js +231 -0
  139. package/dist/core/slot/binding.d.ts +40 -0
  140. package/dist/core/slot/binding.js +2 -0
  141. package/dist/core/slot/company-metadata.d.ts +113 -0
  142. package/dist/core/slot/company-metadata.js +563 -0
  143. package/dist/core/slot/compile-schema.d.ts +19 -13
  144. package/dist/core/slot/compile-schema.js +51 -248
  145. package/dist/core/slot/contact-timezone.d.ts +110 -0
  146. package/dist/core/slot/contact-timezone.js +186 -0
  147. package/dist/core/slot/field.d.ts +2 -24
  148. package/dist/core/slot/field.js +0 -69
  149. package/dist/core/slot/id-ref.d.ts +17 -2
  150. package/dist/core/slot/id-ref.js +16 -8
  151. package/dist/core/slot/index.d.ts +12 -13
  152. package/dist/core/slot/index.js +11 -12
  153. package/dist/core/slot/naming.d.ts +15 -0
  154. package/dist/core/slot/naming.js +96 -0
  155. package/dist/core/slot/platform-fields.d.ts +119 -0
  156. package/dist/core/slot/platform-fields.js +121 -0
  157. package/dist/core/slot/ref.d.ts +16 -0
  158. package/dist/core/slot/ref.js +14 -0
  159. package/dist/core/slot/row.d.ts +2 -9
  160. package/dist/core/slot/row.js +13 -23
  161. package/dist/core/slot/schema-compat.d.ts +16 -0
  162. package/dist/core/slot/schema-compat.js +112 -0
  163. package/dist/core/slot/schema.d.ts +409 -76
  164. package/dist/core/slot/schema.js +178 -10
  165. package/dist/core/slot/types.d.ts +27 -92
  166. package/dist/core/slot/value.d.ts +26 -3
  167. package/dist/core/slot/value.js +89 -57
  168. package/dist/dev-overlay/protocol.d.ts +41 -8
  169. package/dist/fn-context/build-context.d.ts +3 -1
  170. package/dist/fn-context/build-context.js +20 -10
  171. package/dist/fn-context/fake/empty-api.js +9 -28
  172. package/dist/fn-context/fake/index.d.ts +11 -4
  173. package/dist/fn-context/fake/index.js +27 -2
  174. package/dist/fn-context/fn-params.d.ts +6 -0
  175. package/dist/fn-context/fn-params.js +13 -0
  176. package/dist/fn-context/index.d.ts +5 -5
  177. package/dist/fn-context/index.js +4 -4
  178. package/dist/fn-context/log.js +2 -2
  179. package/dist/fn-context/make-ctx.d.ts +11 -0
  180. package/dist/fn-context/make-ctx.js +18 -8
  181. package/dist/fn-context/rpc/case-orchestrator-tools.d.ts +24 -0
  182. package/dist/fn-context/rpc/case-orchestrator-tools.js +13 -0
  183. package/dist/fn-context/rpc/index.d.ts +3 -1
  184. package/dist/fn-context/rpc/index.js +3 -1
  185. package/dist/fn-context/rpc/integration/index.d.ts +4 -4
  186. package/dist/fn-context/rpc/integration/index.js +1 -1
  187. package/dist/fn-context/rpc/integration/list-surfaces.d.ts +21 -0
  188. package/dist/fn-context/rpc/integration/{list-bindings.js → list-surfaces.js} +4 -4
  189. package/dist/fn-context/rpc/platform.d.ts +2 -2
  190. package/dist/fn-context/rpc/platform.js +1 -1
  191. package/dist/fn-context/rpc/records.d.ts +78 -0
  192. package/dist/fn-context/rpc/records.js +26 -0
  193. package/dist/fn-context/rpc/trpc-client.d.ts +2 -2
  194. package/dist/fn-context/rpc/trpc-client.js +89 -5
  195. package/dist/fn-context/rpc/trpc-init.d.ts +2 -2
  196. package/dist/fn-context/rpc/trpc-router-factory.d.ts +49 -3
  197. package/dist/fn-context/rpc/trpc-router-factory.js +2 -0
  198. package/dist/fn-context/run-scope.d.ts +4 -0
  199. package/dist/fn-context/run-scope.js +9 -0
  200. package/dist/fn-context/types.d.ts +36 -3
  201. package/dist/index.d.ts +37 -46
  202. package/dist/index.js +33 -33
  203. package/dist/logger.d.ts +7 -0
  204. package/dist/logger.js +41 -0
  205. package/dist/platform.d.ts +76 -0
  206. package/dist/platform.js +56 -0
  207. package/dist/voice-service/actions.d.ts +71 -4
  208. package/dist/voice-service/types.d.ts +42 -2
  209. package/dist/worker.d.ts +10 -0
  210. package/dist/worker.js +10 -0
  211. package/package.json +38 -19
  212. package/dist/builder/compile/compile-agenda.d.ts +0 -15
  213. package/dist/builder/compile/compile-agenda.js +0 -59
  214. package/dist/builder/merge.d.ts +0 -4
  215. package/dist/builder/merge.js +0 -19
  216. package/dist/core/context/db.d.ts +0 -69
  217. package/dist/core/context/db.js +0 -44
  218. package/dist/core/context/docusign.d.ts +0 -134
  219. package/dist/core/context/docusign.js +0 -108
  220. package/dist/core/context/filevine.d.ts +0 -323
  221. package/dist/core/context/filevine.js +0 -254
  222. package/dist/core/context/http.d.ts +0 -9
  223. package/dist/core/context/http.js +0 -4
  224. package/dist/core/context/hubspot.d.ts +0 -250
  225. package/dist/core/context/hubspot.js +0 -191
  226. package/dist/core/context/twilio.d.ts +0 -50
  227. package/dist/core/context/twilio.js +0 -42
  228. package/dist/core/functions/define/case-context.d.ts +0 -14
  229. package/dist/core/functions/define/case-context.js +0 -15
  230. package/dist/core/functions/define/compute.d.ts +0 -7
  231. package/dist/core/functions/define/compute.js +0 -17
  232. package/dist/core/functions/define/custom.d.ts +0 -4
  233. package/dist/core/functions/define/custom.js +0 -8
  234. package/dist/core/functions/define/system.d.ts +0 -7
  235. package/dist/core/functions/define/system.js +0 -12
  236. package/dist/core/slot/deps.d.ts +0 -15
  237. package/dist/core/slot/deps.js +0 -88
  238. package/dist/core/slot/derived.d.ts +0 -32
  239. package/dist/core/slot/derived.js +0 -115
  240. package/dist/core/slot/platform-session-fields.d.ts +0 -38
  241. package/dist/core/slot/platform-session-fields.js +0 -48
  242. package/dist/core/slot/sf-schema.d.ts +0 -23
  243. package/dist/core/slot/sf-schema.js +0 -125
  244. package/dist/core/slot/sf-validate.d.ts +0 -14
  245. package/dist/core/slot/sf-validate.js +0 -132
  246. package/dist/core/slot/snapshot.d.ts +0 -18
  247. package/dist/core/slot/snapshot.js +0 -138
  248. package/dist/core/slot/write.d.ts +0 -41
  249. package/dist/core/slot/write.js +0 -319
  250. package/dist/core/stage/builders.d.ts +0 -36
  251. package/dist/core/stage/builders.js +0 -28
  252. package/dist/core/stage/condition.d.ts +0 -17
  253. package/dist/core/stage/condition.js +0 -198
  254. package/dist/core/stage/drive.d.ts +0 -43
  255. package/dist/core/stage/drive.js +0 -77
  256. package/dist/core/stage/finish-when.d.ts +0 -20
  257. package/dist/core/stage/finish-when.js +0 -82
  258. package/dist/core/stage/flatten.d.ts +0 -27
  259. package/dist/core/stage/flatten.js +0 -464
  260. package/dist/core/stage/index.d.ts +0 -11
  261. package/dist/core/stage/index.js +0 -10
  262. package/dist/core/stage/simulate.d.ts +0 -24
  263. package/dist/core/stage/simulate.js +0 -33
  264. package/dist/core/stage/transfer-fields.d.ts +0 -14
  265. package/dist/core/stage/transfer-fields.js +0 -88
  266. package/dist/core/stage/types.d.ts +0 -177
  267. package/dist/core/stage/types.js +0 -2
  268. package/dist/core/stage/validate.d.ts +0 -11
  269. package/dist/core/stage/validate.js +0 -226
  270. package/dist/core/stage/walk.d.ts +0 -34
  271. package/dist/core/stage/walk.js +0 -96
  272. package/dist/fn-context/rpc/integration/list-bindings.d.ts +0 -21
  273. package/dist/fn-context/system-args.d.ts +0 -6
  274. package/dist/fn-context/system-args.js +0 -14
@@ -1,11 +1,16 @@
1
1
  import { z } from 'zod';
2
+ import type { Id } from '../page/typed.js';
2
3
  export declare const CONTACT_PAGE_LIMIT_MAX = 100;
4
+ /** A filled slot value as scripts read and write it. */
5
+ export declare const slotFieldValue: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>;
6
+ export type SlotFieldValue = z.infer<typeof slotFieldValue>;
3
7
  export declare const contactSummary: z.ZodObject<{
4
- id: z.ZodString;
8
+ id: z.ZodCustom<Id<"contact">, Id<"contact">>;
5
9
  kind: z.ZodString;
6
- externalIdentifier: z.ZodNullable<z.ZodString>;
7
10
  phone: z.ZodNullable<z.ZodString>;
11
+ email: z.ZodNullable<z.ZodString>;
8
12
  createdAt: z.ZodString;
13
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
9
14
  }, z.core.$strip>;
10
15
  export type ContactSummary = z.infer<typeof contactSummary>;
11
16
  export declare const contactListInput: z.ZodObject<{
@@ -17,19 +22,58 @@ export declare const contactListInput: z.ZodObject<{
17
22
  export type ContactListParams = z.infer<typeof contactListInput>;
18
23
  export declare const contactListOutput: z.ZodObject<{
19
24
  contacts: z.ZodArray<z.ZodObject<{
20
- id: z.ZodString;
25
+ id: z.ZodCustom<Id<"contact">, Id<"contact">>;
21
26
  kind: z.ZodString;
22
- externalIdentifier: z.ZodNullable<z.ZodString>;
23
27
  phone: z.ZodNullable<z.ZodString>;
28
+ email: z.ZodNullable<z.ZodString>;
24
29
  createdAt: z.ZodString;
30
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
25
31
  }, z.core.$strip>>;
26
32
  offset: z.ZodNumber;
27
33
  limit: z.ZodNumber;
28
34
  }, z.core.$strip>;
29
35
  export type ContactListResult = z.infer<typeof contactListOutput>;
36
+ /** Exactly one identity: an id, a phone or an email. */
37
+ export declare const contactFindInput: z.ZodUnion<readonly [z.ZodObject<{
38
+ id: z.ZodString;
39
+ }, z.core.$strict>, z.ZodObject<{
40
+ phone: z.ZodString;
41
+ }, z.core.$strict>, z.ZodObject<{
42
+ email: z.ZodString;
43
+ }, z.core.$strict>]>;
44
+ export type ContactFindParams = z.infer<typeof contactFindInput>;
45
+ export declare const contactFindOutput: z.ZodObject<{
46
+ contacts: z.ZodArray<z.ZodObject<{
47
+ id: z.ZodCustom<Id<"contact">, Id<"contact">>;
48
+ kind: z.ZodString;
49
+ phone: z.ZodNullable<z.ZodString>;
50
+ email: z.ZodNullable<z.ZodString>;
51
+ createdAt: z.ZodString;
52
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
53
+ }, z.core.$strip>>;
54
+ }, z.core.$strip>;
55
+ export type ContactFindResult = z.infer<typeof contactFindOutput>;
56
+ export declare const contactCreateInput: z.ZodObject<{
57
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
58
+ }, z.core.$strict>;
59
+ export type ContactCreateParams = z.infer<typeof contactCreateInput>;
60
+ export declare const contactIdInput: z.ZodObject<{
61
+ contactId: z.ZodString;
62
+ }, z.core.$strict>;
63
+ export type ContactIdParams = z.infer<typeof contactIdInput>;
30
64
  /** Platform contact capability, reached from scripts as `ctx.api.contact`. */
31
65
  export type ContactApi = {
32
66
  list(input: ContactListParams): Promise<ContactListResult>;
67
+ /** Contacts with this id, phone or email; several people can share a phone or an email. */
68
+ find(input: ContactFindParams): Promise<ContactFindResult>;
69
+ /** A new contact with these fields filled (`kind` defaults to `person`). */
70
+ create(input: ContactCreateParams): Promise<ContactSummary>;
71
+ /**
72
+ * "Remove" a contact (14-sequence-instance §5.5): clear its phone, email and every other identifier
73
+ * field, drop their lookup rows, cancel its pending scheduled actions. The record and its history
74
+ * stay. An opted-out contact's addresses go to the do-not-contact list first.
75
+ */
76
+ clearContactMethods(input: ContactIdParams): Promise<ContactSummary>;
33
77
  };
34
78
  /** Stand-in surface for fake contexts and local runs; never touches the database. */
35
79
  export declare const contactMockService: ContactApi;
@@ -44,16 +88,62 @@ export declare const contactSurface: {
44
88
  }, z.core.$strip>;
45
89
  output: z.ZodObject<{
46
90
  contacts: z.ZodArray<z.ZodObject<{
47
- id: z.ZodString;
91
+ id: z.ZodCustom<Id<"contact">, Id<"contact">>;
48
92
  kind: z.ZodString;
49
- externalIdentifier: z.ZodNullable<z.ZodString>;
50
93
  phone: z.ZodNullable<z.ZodString>;
94
+ email: z.ZodNullable<z.ZodString>;
51
95
  createdAt: z.ZodString;
96
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
52
97
  }, z.core.$strip>>;
53
98
  offset: z.ZodNumber;
54
99
  limit: z.ZodNumber;
55
100
  }, z.core.$strip>;
56
101
  };
102
+ find: {
103
+ input: z.ZodUnion<readonly [z.ZodObject<{
104
+ id: z.ZodString;
105
+ }, z.core.$strict>, z.ZodObject<{
106
+ phone: z.ZodString;
107
+ }, z.core.$strict>, z.ZodObject<{
108
+ email: z.ZodString;
109
+ }, z.core.$strict>]>;
110
+ output: z.ZodObject<{
111
+ contacts: z.ZodArray<z.ZodObject<{
112
+ id: z.ZodCustom<Id<"contact">, Id<"contact">>;
113
+ kind: z.ZodString;
114
+ phone: z.ZodNullable<z.ZodString>;
115
+ email: z.ZodNullable<z.ZodString>;
116
+ createdAt: z.ZodString;
117
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
118
+ }, z.core.$strip>>;
119
+ }, z.core.$strip>;
120
+ };
121
+ create: {
122
+ input: z.ZodObject<{
123
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
124
+ }, z.core.$strict>;
125
+ output: z.ZodObject<{
126
+ id: z.ZodCustom<Id<"contact">, Id<"contact">>;
127
+ kind: z.ZodString;
128
+ phone: z.ZodNullable<z.ZodString>;
129
+ email: z.ZodNullable<z.ZodString>;
130
+ createdAt: z.ZodString;
131
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
132
+ }, z.core.$strip>;
133
+ };
134
+ clearContactMethods: {
135
+ input: z.ZodObject<{
136
+ contactId: z.ZodString;
137
+ }, z.core.$strict>;
138
+ output: z.ZodObject<{
139
+ id: z.ZodCustom<Id<"contact">, Id<"contact">>;
140
+ kind: z.ZodString;
141
+ phone: z.ZodNullable<z.ZodString>;
142
+ email: z.ZodNullable<z.ZodString>;
143
+ createdAt: z.ZodString;
144
+ fields: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodNull]>>;
145
+ }, z.core.$strip>;
146
+ };
57
147
  };
58
148
  mock: ContactApi;
59
149
  };
@@ -1,11 +1,18 @@
1
1
  import { z } from 'zod';
2
+ /** A contact's id, typed as one (25 §16): it goes where `db` takes a contact's id without a cast. */
3
+ const contactId = z.custom((value) => typeof value === 'string' && value.length > 0);
2
4
  export const CONTACT_PAGE_LIMIT_MAX = 100;
5
+ /** A filled slot value as scripts read and write it. */
6
+ export const slotFieldValue = z.union([z.string(), z.number(), z.boolean(), z.array(z.string()), z.null()]);
3
7
  export const contactSummary = z.object({
4
- id: z.string(),
8
+ id: contactId,
9
+ /** `person` or `organization` (the platform field `kind`). */
5
10
  kind: z.string(),
6
- externalIdentifier: z.string().nullable(),
7
11
  phone: z.string().nullable(),
12
+ email: z.string().nullable(),
8
13
  createdAt: z.string(),
14
+ /** The contact's filled fields with a plain value, by name. */
15
+ fields: z.record(z.string(), slotFieldValue),
9
16
  });
10
17
  // Paging is required so a caller can never fetch an unbounded page by omission.
11
18
  export const contactListInput = z.object({
@@ -19,15 +26,54 @@ export const contactListOutput = z.object({
19
26
  offset: z.number().int(),
20
27
  limit: z.number().int(),
21
28
  });
29
+ /** Exactly one identity: an id, a phone or an email. */
30
+ export const contactFindInput = z.union([
31
+ z.strictObject({ id: z.string().min(1) }),
32
+ z.strictObject({ phone: z.string().min(1) }),
33
+ z.strictObject({ email: z.string().min(1) }),
34
+ ]);
35
+ export const contactFindOutput = z.object({ contacts: z.array(contactSummary) });
36
+ export const contactCreateInput = z.strictObject({
37
+ /** Contact fields by name, checked against the sequence's contact schema. */
38
+ fields: z.record(z.string(), slotFieldValue),
39
+ });
40
+ export const contactIdInput = z.strictObject({ contactId: z.string().min(1) });
22
41
  /** Stand-in surface for fake contexts and local runs; never touches the database. */
23
42
  export const contactMockService = {
24
43
  async list(input) {
25
44
  return { contacts: [], offset: input.offset, limit: input.limit };
26
45
  },
46
+ async find() {
47
+ return { contacts: [] };
48
+ },
49
+ async create(input) {
50
+ const fields = Object.fromEntries(Object.entries(input.fields).filter(([, value]) => value !== null));
51
+ return {
52
+ id: 'contact',
53
+ kind: typeof fields.kind === 'string' ? fields.kind : 'person',
54
+ phone: typeof fields.phone === 'string' ? fields.phone : null,
55
+ email: typeof fields.email === 'string' ? fields.email : null,
56
+ createdAt: new Date(0).toISOString(),
57
+ fields,
58
+ };
59
+ },
60
+ async clearContactMethods(input) {
61
+ return {
62
+ id: input.contactId,
63
+ kind: 'person',
64
+ phone: null,
65
+ email: null,
66
+ createdAt: new Date(0).toISOString(),
67
+ fields: {},
68
+ };
69
+ },
27
70
  };
28
71
  export const contactSurface = {
29
72
  methods: {
30
73
  list: { input: contactListInput, output: contactListOutput },
74
+ find: { input: contactFindInput, output: contactFindOutput },
75
+ create: { input: contactCreateInput, output: contactSummary },
76
+ clearContactMethods: { input: contactIdInput, output: contactSummary },
31
77
  },
32
78
  mock: contactMockService,
33
79
  };
@@ -0,0 +1,159 @@
1
+ import { z } from 'zod';
2
+ export declare const EMAIL_PAGE_LIMIT_MAX = 100;
3
+ export declare const emailDirection: z.ZodEnum<{
4
+ inbound: "inbound";
5
+ outbound: "outbound";
6
+ }>;
7
+ export type EmailDirection = z.infer<typeof emailDirection>;
8
+ /** Script-facing email projection (21 §5.9). OAuth data and raw provider payloads stay private. */
9
+ export declare const emailRecord: z.ZodObject<{
10
+ id: z.ZodString;
11
+ emailThreadId: z.ZodString;
12
+ threadId: z.ZodNullable<z.ZodString>;
13
+ instanceId: z.ZodNullable<z.ZodString>;
14
+ contactId: z.ZodNullable<z.ZodString>;
15
+ runId: z.ZodNullable<z.ZodString>;
16
+ direction: z.ZodEnum<{
17
+ inbound: "inbound";
18
+ outbound: "outbound";
19
+ }>;
20
+ from: z.ZodArray<z.ZodString>;
21
+ to: z.ZodArray<z.ZodString>;
22
+ cc: z.ZodArray<z.ZodString>;
23
+ subject: z.ZodNullable<z.ZodString>;
24
+ body: z.ZodNullable<z.ZodString>;
25
+ processing: z.ZodNullable<z.ZodString>;
26
+ delivery: z.ZodNullable<z.ZodString>;
27
+ occurredAt: z.ZodString;
28
+ }, z.core.$strip>;
29
+ export type EmailRecord = z.infer<typeof emailRecord>;
30
+ export declare const emailListInput: z.ZodObject<{
31
+ offset: z.ZodNumber;
32
+ limit: z.ZodNumber;
33
+ instanceId: z.ZodOptional<z.ZodString>;
34
+ contactId: z.ZodOptional<z.ZodString>;
35
+ emailThreadId: z.ZodOptional<z.ZodString>;
36
+ direction: z.ZodOptional<z.ZodEnum<{
37
+ inbound: "inbound";
38
+ outbound: "outbound";
39
+ }>>;
40
+ }, z.core.$strip>;
41
+ export type EmailListParams = z.infer<typeof emailListInput>;
42
+ export declare const emailListOutput: z.ZodObject<{
43
+ emails: z.ZodArray<z.ZodObject<{
44
+ id: z.ZodString;
45
+ emailThreadId: z.ZodString;
46
+ threadId: z.ZodNullable<z.ZodString>;
47
+ instanceId: z.ZodNullable<z.ZodString>;
48
+ contactId: z.ZodNullable<z.ZodString>;
49
+ runId: z.ZodNullable<z.ZodString>;
50
+ direction: z.ZodEnum<{
51
+ inbound: "inbound";
52
+ outbound: "outbound";
53
+ }>;
54
+ from: z.ZodArray<z.ZodString>;
55
+ to: z.ZodArray<z.ZodString>;
56
+ cc: z.ZodArray<z.ZodString>;
57
+ subject: z.ZodNullable<z.ZodString>;
58
+ body: z.ZodNullable<z.ZodString>;
59
+ processing: z.ZodNullable<z.ZodString>;
60
+ delivery: z.ZodNullable<z.ZodString>;
61
+ occurredAt: z.ZodString;
62
+ }, z.core.$strip>>;
63
+ offset: z.ZodNumber;
64
+ limit: z.ZodNumber;
65
+ }, z.core.$strip>;
66
+ export type EmailListResult = z.infer<typeof emailListOutput>;
67
+ export declare const emailGetInput: z.ZodString;
68
+ export declare const emailGetOutput: z.ZodNullable<z.ZodObject<{
69
+ id: z.ZodString;
70
+ emailThreadId: z.ZodString;
71
+ threadId: z.ZodNullable<z.ZodString>;
72
+ instanceId: z.ZodNullable<z.ZodString>;
73
+ contactId: z.ZodNullable<z.ZodString>;
74
+ runId: z.ZodNullable<z.ZodString>;
75
+ direction: z.ZodEnum<{
76
+ inbound: "inbound";
77
+ outbound: "outbound";
78
+ }>;
79
+ from: z.ZodArray<z.ZodString>;
80
+ to: z.ZodArray<z.ZodString>;
81
+ cc: z.ZodArray<z.ZodString>;
82
+ subject: z.ZodNullable<z.ZodString>;
83
+ body: z.ZodNullable<z.ZodString>;
84
+ processing: z.ZodNullable<z.ZodString>;
85
+ delivery: z.ZodNullable<z.ZodString>;
86
+ occurredAt: z.ZodString;
87
+ }, z.core.$strip>>;
88
+ /** Platform email-history capability, reached from scripts as `ctx.api.email`. */
89
+ export type EmailHistoryApi = {
90
+ list(input: EmailListParams): Promise<EmailListResult>;
91
+ get(id: string): Promise<EmailRecord | null>;
92
+ };
93
+ export declare const emailHistoryMockService: EmailHistoryApi;
94
+ export declare const emailHistorySurface: {
95
+ methods: {
96
+ list: {
97
+ input: z.ZodObject<{
98
+ offset: z.ZodNumber;
99
+ limit: z.ZodNumber;
100
+ instanceId: z.ZodOptional<z.ZodString>;
101
+ contactId: z.ZodOptional<z.ZodString>;
102
+ emailThreadId: z.ZodOptional<z.ZodString>;
103
+ direction: z.ZodOptional<z.ZodEnum<{
104
+ inbound: "inbound";
105
+ outbound: "outbound";
106
+ }>>;
107
+ }, z.core.$strip>;
108
+ output: z.ZodObject<{
109
+ emails: z.ZodArray<z.ZodObject<{
110
+ id: z.ZodString;
111
+ emailThreadId: z.ZodString;
112
+ threadId: z.ZodNullable<z.ZodString>;
113
+ instanceId: z.ZodNullable<z.ZodString>;
114
+ contactId: z.ZodNullable<z.ZodString>;
115
+ runId: z.ZodNullable<z.ZodString>;
116
+ direction: z.ZodEnum<{
117
+ inbound: "inbound";
118
+ outbound: "outbound";
119
+ }>;
120
+ from: z.ZodArray<z.ZodString>;
121
+ to: z.ZodArray<z.ZodString>;
122
+ cc: z.ZodArray<z.ZodString>;
123
+ subject: z.ZodNullable<z.ZodString>;
124
+ body: z.ZodNullable<z.ZodString>;
125
+ processing: z.ZodNullable<z.ZodString>;
126
+ delivery: z.ZodNullable<z.ZodString>;
127
+ occurredAt: z.ZodString;
128
+ }, z.core.$strip>>;
129
+ offset: z.ZodNumber;
130
+ limit: z.ZodNumber;
131
+ }, z.core.$strip>;
132
+ };
133
+ get: {
134
+ input: z.ZodString;
135
+ output: z.ZodNullable<z.ZodObject<{
136
+ id: z.ZodString;
137
+ emailThreadId: z.ZodString;
138
+ threadId: z.ZodNullable<z.ZodString>;
139
+ instanceId: z.ZodNullable<z.ZodString>;
140
+ contactId: z.ZodNullable<z.ZodString>;
141
+ runId: z.ZodNullable<z.ZodString>;
142
+ direction: z.ZodEnum<{
143
+ inbound: "inbound";
144
+ outbound: "outbound";
145
+ }>;
146
+ from: z.ZodArray<z.ZodString>;
147
+ to: z.ZodArray<z.ZodString>;
148
+ cc: z.ZodArray<z.ZodString>;
149
+ subject: z.ZodNullable<z.ZodString>;
150
+ body: z.ZodNullable<z.ZodString>;
151
+ processing: z.ZodNullable<z.ZodString>;
152
+ delivery: z.ZodNullable<z.ZodString>;
153
+ occurredAt: z.ZodString;
154
+ }, z.core.$strip>>;
155
+ };
156
+ };
157
+ mock: EmailHistoryApi;
158
+ };
159
+ //# sourceMappingURL=email-message.d.ts.map
@@ -0,0 +1,59 @@
1
+ import { z } from 'zod';
2
+ export const EMAIL_PAGE_LIMIT_MAX = 100;
3
+ export const emailDirection = z.enum(['inbound', 'outbound']);
4
+ /** Script-facing email projection (21 §5.9). OAuth data and raw provider payloads stay private. */
5
+ export const emailRecord = z.object({
6
+ id: z.string(),
7
+ /** Our thread (21 §5.9): `ExchangeRef` `{ channel: 'email', emailThreadId }`. */
8
+ emailThreadId: z.string(),
9
+ /** The provider's thread id (null for a thread we started, until its first email went). */
10
+ threadId: z.string().nullable(),
11
+ instanceId: z.string().nullable(),
12
+ /** Inbound: who sent it, as recognized on the thread. */
13
+ contactId: z.string().nullable(),
14
+ /** Inbound: the run that handled it; outbound: the run that sent it (null: the platform did). */
15
+ runId: z.string().nullable(),
16
+ direction: emailDirection,
17
+ from: z.array(z.string()),
18
+ to: z.array(z.string()),
19
+ cc: z.array(z.string()),
20
+ subject: z.string().nullable(),
21
+ /** The new text, without the quoted history. */
22
+ body: z.string().nullable(),
23
+ /** Inbound: pending | claimed | processed | skipped | declined | failed. */
24
+ processing: z.string().nullable(),
25
+ /** Outbound: pending | submitting | sent | failed. */
26
+ delivery: z.string().nullable(),
27
+ occurredAt: z.string(),
28
+ });
29
+ export const emailListInput = z.object({
30
+ offset: z.number().int().min(0),
31
+ limit: z.number().int().min(1).max(EMAIL_PAGE_LIMIT_MAX),
32
+ instanceId: z.string().optional(),
33
+ contactId: z.string().optional(),
34
+ emailThreadId: z.string().optional(),
35
+ direction: emailDirection.optional(),
36
+ });
37
+ export const emailListOutput = z.object({
38
+ emails: z.array(emailRecord),
39
+ offset: z.number().int(),
40
+ limit: z.number().int(),
41
+ });
42
+ export const emailGetInput = z.string().min(1);
43
+ export const emailGetOutput = emailRecord.nullable();
44
+ export const emailHistoryMockService = {
45
+ async list(input) {
46
+ return { emails: [], offset: input.offset, limit: input.limit };
47
+ },
48
+ async get() {
49
+ return null;
50
+ },
51
+ };
52
+ export const emailHistorySurface = {
53
+ methods: {
54
+ list: { input: emailListInput, output: emailListOutput },
55
+ get: { input: emailGetInput, output: emailGetOutput },
56
+ },
57
+ mock: emailHistoryMockService,
58
+ };
59
+ //# sourceMappingURL=email-message.js.map
@@ -0,0 +1,97 @@
1
+ import { z } from 'zod';
2
+ import type { IntegrationAccountFields } from './account-fields.js';
3
+ /** `hotmail` covers every Microsoft account (Outlook.com / Hotmail / M365). */
4
+ export declare const emailProvider: z.ZodEnum<{
5
+ gmail: "gmail";
6
+ hotmail: "hotmail";
7
+ }>;
8
+ export type EmailProvider = z.infer<typeof emailProvider>;
9
+ export declare const emailSendEmailInput: z.ZodObject<{
10
+ to: z.ZodArray<z.ZodString>;
11
+ cc: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
+ bcc: z.ZodOptional<z.ZodArray<z.ZodString>>;
13
+ subject: z.ZodString;
14
+ body: z.ZodString;
15
+ threadId: z.ZodOptional<z.ZodString>;
16
+ inReplyTo: z.ZodOptional<z.ZodString>;
17
+ references: z.ZodOptional<z.ZodString>;
18
+ replyToId: z.ZodOptional<z.ZodString>;
19
+ }, z.core.$strip>;
20
+ export type EmailSendEmailInput = z.infer<typeof emailSendEmailInput>;
21
+ export declare const emailSendEmailOutput: z.ZodObject<{
22
+ id: z.ZodString;
23
+ threadId: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>;
25
+ export type EmailSendEmailOutput = z.infer<typeof emailSendEmailOutput>;
26
+ export declare const emailGetMessageInput: z.ZodObject<{
27
+ id: z.ZodString;
28
+ }, z.core.$strip>;
29
+ export type EmailGetMessageInput = z.infer<typeof emailGetMessageInput>;
30
+ export declare const emailAttachment: z.ZodObject<{
31
+ filename: z.ZodString;
32
+ contentType: z.ZodString;
33
+ attachmentId: z.ZodString;
34
+ isInline: z.ZodBoolean;
35
+ size: z.ZodOptional<z.ZodNumber>;
36
+ }, z.core.$strip>;
37
+ export type EmailAttachment = z.infer<typeof emailAttachment>;
38
+ export declare const emailGetMessageOutput: z.ZodObject<{
39
+ id: z.ZodString;
40
+ threadId: z.ZodString;
41
+ from: z.ZodString;
42
+ to: z.ZodArray<z.ZodString>;
43
+ cc: z.ZodArray<z.ZodString>;
44
+ bcc: z.ZodArray<z.ZodString>;
45
+ subject: z.ZodString;
46
+ text: z.ZodString;
47
+ html: z.ZodString;
48
+ date: z.ZodString;
49
+ messageId: z.ZodString;
50
+ labelIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
51
+ attachments: z.ZodArray<z.ZodObject<{
52
+ filename: z.ZodString;
53
+ contentType: z.ZodString;
54
+ attachmentId: z.ZodString;
55
+ isInline: z.ZodBoolean;
56
+ size: z.ZodOptional<z.ZodNumber>;
57
+ }, z.core.$strip>>;
58
+ autoHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
59
+ }, z.core.$strip>;
60
+ export type EmailGetMessageOutput = z.infer<typeof emailGetMessageOutput>;
61
+ export declare const emailListMessagesInput: z.ZodObject<{
62
+ maxResults: z.ZodOptional<z.ZodNumber>;
63
+ query: z.ZodOptional<z.ZodString>;
64
+ pageToken: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$strip>;
66
+ export type EmailListMessagesInput = z.infer<typeof emailListMessagesInput>;
67
+ export declare const emailListMessagesOutput: z.ZodObject<{
68
+ messages: z.ZodArray<z.ZodObject<{
69
+ id: z.ZodString;
70
+ threadId: z.ZodString;
71
+ }, z.core.$strip>>;
72
+ nextPageToken: z.ZodOptional<z.ZodString>;
73
+ }, z.core.$strip>;
74
+ export type EmailListMessagesOutput = z.infer<typeof emailListMessagesOutput>;
75
+ export declare const emailGetAttachmentInput: z.ZodObject<{
76
+ messageId: z.ZodString;
77
+ attachmentId: z.ZodString;
78
+ }, z.core.$strip>;
79
+ export type EmailGetAttachmentInput = z.infer<typeof emailGetAttachmentInput>;
80
+ export declare const emailGetAttachmentOutput: z.ZodObject<{
81
+ filename: z.ZodString;
82
+ contentType: z.ZodString;
83
+ data: z.ZodString;
84
+ }, z.core.$strip>;
85
+ export type EmailGetAttachmentOutput = z.infer<typeof emailGetAttachmentOutput>;
86
+ export type EmailService = {
87
+ sendEmail(input: EmailSendEmailInput): Promise<EmailSendEmailOutput>;
88
+ getMessage(input: EmailGetMessageInput): Promise<EmailGetMessageOutput>;
89
+ listMessages(input: EmailListMessagesInput): Promise<EmailListMessagesOutput>;
90
+ getAttachment(input: EmailGetAttachmentInput): Promise<EmailGetAttachmentOutput>;
91
+ };
92
+ export declare const emailMockService: EmailService;
93
+ export type EmailApi = IntegrationAccountFields & EmailService & {
94
+ readonly address: string;
95
+ readonly provider: EmailProvider;
96
+ };
97
+ //# sourceMappingURL=email.d.ts.map
@@ -0,0 +1,91 @@
1
+ import { z } from 'zod';
2
+ /** `hotmail` covers every Microsoft account (Outlook.com / Hotmail / M365). */
3
+ export const emailProvider = z.enum(['gmail', 'hotmail']);
4
+ export const emailSendEmailInput = z.object({
5
+ to: z.array(z.string()).min(1),
6
+ cc: z.array(z.string()).optional(),
7
+ bcc: z.array(z.string()).optional(),
8
+ subject: z.string(),
9
+ body: z.string(),
10
+ threadId: z.string().optional(),
11
+ inReplyTo: z.string().optional(),
12
+ references: z.string().optional(),
13
+ replyToId: z.string().optional(),
14
+ });
15
+ export const emailSendEmailOutput = z.object({
16
+ id: z.string(),
17
+ threadId: z.string().optional(),
18
+ });
19
+ export const emailGetMessageInput = z.object({
20
+ id: z.string(),
21
+ });
22
+ export const emailAttachment = z.object({
23
+ filename: z.string(),
24
+ contentType: z.string(),
25
+ attachmentId: z.string(),
26
+ isInline: z.boolean(),
27
+ size: z.number().optional(),
28
+ });
29
+ export const emailGetMessageOutput = z.object({
30
+ id: z.string(),
31
+ threadId: z.string(),
32
+ from: z.string(),
33
+ to: z.array(z.string()),
34
+ cc: z.array(z.string()),
35
+ bcc: z.array(z.string()),
36
+ subject: z.string(),
37
+ text: z.string(),
38
+ html: z.string(),
39
+ date: z.string(),
40
+ messageId: z.string(),
41
+ labelIds: z.array(z.string()).optional(),
42
+ attachments: z.array(emailAttachment),
43
+ /** The headers that mark automatic mail (Auto-Submitted, Precedence, List-Id, X-Autoreply…), lower-cased names. */
44
+ autoHeaders: z.record(z.string(), z.string()).optional(),
45
+ });
46
+ export const emailListMessagesInput = z.object({
47
+ maxResults: z.number().optional(),
48
+ query: z.string().optional(),
49
+ pageToken: z.string().optional(),
50
+ });
51
+ export const emailListMessagesOutput = z.object({
52
+ messages: z.array(z.object({ id: z.string(), threadId: z.string() })),
53
+ nextPageToken: z.string().optional(),
54
+ });
55
+ export const emailGetAttachmentInput = z.object({
56
+ messageId: z.string(),
57
+ attachmentId: z.string(),
58
+ });
59
+ export const emailGetAttachmentOutput = z.object({
60
+ filename: z.string(),
61
+ contentType: z.string(),
62
+ data: z.string(),
63
+ });
64
+ export const emailMockService = {
65
+ async sendEmail() {
66
+ return { id: 'mock-email-id', threadId: 'mock-thread' };
67
+ },
68
+ async getMessage() {
69
+ return {
70
+ id: 'mock-email-id',
71
+ threadId: 'mock-thread',
72
+ from: 'sender@example.com',
73
+ to: ['intake@example.com'],
74
+ cc: [],
75
+ bcc: [],
76
+ subject: '',
77
+ text: '',
78
+ html: '',
79
+ date: '1970-01-01T00:00:00.000Z',
80
+ messageId: '',
81
+ attachments: [],
82
+ };
83
+ },
84
+ async listMessages() {
85
+ return { messages: [] };
86
+ },
87
+ async getAttachment() {
88
+ return { filename: 'file', contentType: 'application/octet-stream', data: '' };
89
+ },
90
+ };
91
+ //# sourceMappingURL=email.js.map