@rubytech/create-maxy-code 0.1.414 → 0.1.417

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 (218) hide show
  1. package/dist/__tests__/outlook-client-id-env.test.js +46 -0
  2. package/dist/index.js +31 -0
  3. package/dist/port-resolution.js +8 -1
  4. package/package.json +1 -1
  5. package/payload/platform/config/brand.json +1 -0
  6. package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.d.ts +2 -0
  7. package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.d.ts.map +1 -0
  8. package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.js +81 -0
  9. package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.js.map +1 -0
  10. package/payload/platform/lib/account-enumeration/dist/index.d.ts +17 -0
  11. package/payload/platform/lib/account-enumeration/dist/index.d.ts.map +1 -1
  12. package/payload/platform/lib/account-enumeration/dist/index.js +46 -9
  13. package/payload/platform/lib/account-enumeration/dist/index.js.map +1 -1
  14. package/payload/platform/lib/account-enumeration/src/__tests__/is-provisioned.test.ts +86 -0
  15. package/payload/platform/lib/account-enumeration/src/index.ts +45 -9
  16. package/payload/platform/lib/account-scope/dist/index.d.ts +14 -5
  17. package/payload/platform/lib/account-scope/dist/index.d.ts.map +1 -1
  18. package/payload/platform/lib/account-scope/dist/index.js +14 -5
  19. package/payload/platform/lib/account-scope/dist/index.js.map +1 -1
  20. package/payload/platform/lib/account-scope/src/index.ts +22 -5
  21. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +43 -10
  22. package/payload/platform/plugins/docs/references/outlook-guide.md +42 -9
  23. package/payload/platform/plugins/email/references/email-reference.md +1 -1
  24. package/payload/platform/plugins/filesystem/PLUGIN.md +1 -1
  25. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js +16 -2
  26. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js.map +1 -1
  27. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts +1 -1
  28. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts.map +1 -1
  29. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js +8 -3
  30. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js.map +1 -1
  31. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js +2 -2
  32. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js.map +1 -1
  33. package/payload/platform/plugins/memory/PLUGIN.md +2 -2
  34. package/payload/platform/plugins/memory/mcp/dist/index-testable.d.ts.map +1 -1
  35. package/payload/platform/plugins/memory/mcp/dist/index-testable.js +14 -5
  36. package/payload/platform/plugins/memory/mcp/dist/index-testable.js.map +1 -1
  37. package/payload/platform/plugins/memory/mcp/dist/index.js +6 -2
  38. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  39. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.d.ts +29 -0
  40. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.d.ts.map +1 -0
  41. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.js +44 -0
  42. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.js.map +1 -0
  43. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.d.ts +2 -0
  44. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.d.ts.map +1 -0
  45. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.js +22 -0
  46. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.js.map +1 -0
  47. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.d.ts +2 -0
  48. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.d.ts.map +1 -0
  49. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.js +204 -0
  50. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.js.map +1 -0
  51. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.d.ts +2 -0
  52. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.d.ts.map +1 -0
  53. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.js +78 -0
  54. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.js.map +1 -0
  55. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-tool-account.test.js +2 -2
  56. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-tool-account.test.js.map +1 -1
  57. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +0 -5
  58. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
  59. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +2 -12
  60. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  61. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +17 -0
  62. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
  63. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +137 -6
  64. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
  65. package/payload/platform/plugins/outlook/.claude-plugin/plugin.json +1 -1
  66. package/payload/platform/plugins/outlook/PLUGIN.md +40 -7
  67. package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.d.ts +2 -0
  68. package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.d.ts.map +1 -0
  69. package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.js +137 -0
  70. package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.js.map +1 -0
  71. package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.d.ts +2 -0
  72. package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.d.ts.map +1 -0
  73. package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.js +186 -0
  74. package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.js.map +1 -0
  75. package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.d.ts +2 -0
  76. package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.d.ts.map +1 -0
  77. package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.js +110 -0
  78. package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.js.map +1 -0
  79. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.d.ts +2 -0
  80. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.d.ts.map +1 -0
  81. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.js +108 -0
  82. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.js.map +1 -0
  83. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js +13 -0
  84. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js.map +1 -1
  85. package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.d.ts +2 -0
  86. package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.d.ts.map +1 -0
  87. package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.js +32 -0
  88. package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.js.map +1 -0
  89. package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.d.ts +2 -0
  90. package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.d.ts.map +1 -0
  91. package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.js +67 -0
  92. package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.js.map +1 -0
  93. package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js +7 -5
  94. package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js.map +1 -1
  95. package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.d.ts +2 -0
  96. package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.d.ts.map +1 -0
  97. package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.js +141 -0
  98. package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.js.map +1 -0
  99. package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.d.ts +69 -0
  100. package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.d.ts.map +1 -0
  101. package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.js +129 -0
  102. package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.js.map +1 -0
  103. package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.d.ts +39 -0
  104. package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.d.ts.map +1 -0
  105. package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.js +101 -0
  106. package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.js.map +1 -0
  107. package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.d.ts.map +1 -1
  108. package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js +3 -2
  109. package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js.map +1 -1
  110. package/payload/platform/plugins/outlook/mcp/dist/index.js +187 -5
  111. package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
  112. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts +34 -1
  113. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
  114. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +96 -7
  115. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
  116. package/payload/platform/plugins/outlook/mcp/dist/lib/message.d.ts +31 -0
  117. package/payload/platform/plugins/outlook/mcp/dist/lib/message.d.ts.map +1 -0
  118. package/payload/platform/plugins/outlook/mcp/dist/lib/message.js +30 -0
  119. package/payload/platform/plugins/outlook/mcp/dist/lib/message.js.map +1 -0
  120. package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.d.ts +41 -17
  121. package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.d.ts.map +1 -1
  122. package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.js +87 -28
  123. package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.js.map +1 -1
  124. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.d.ts +17 -0
  125. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.d.ts.map +1 -0
  126. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.js +38 -0
  127. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.js.map +1 -0
  128. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.d.ts +29 -0
  129. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.d.ts.map +1 -0
  130. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.js +50 -0
  131. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.js.map +1 -0
  132. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.d.ts +34 -0
  133. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.d.ts.map +1 -0
  134. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.js +46 -0
  135. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.js.map +1 -0
  136. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.d.ts +15 -0
  137. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.d.ts.map +1 -0
  138. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.js +27 -0
  139. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.js.map +1 -0
  140. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.d.ts +11 -0
  141. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.d.ts.map +1 -0
  142. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.js +20 -0
  143. package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.js.map +1 -0
  144. package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.d.ts +17 -0
  145. package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.d.ts.map +1 -0
  146. package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.js +26 -0
  147. package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.js.map +1 -0
  148. package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts +11 -0
  149. package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts.map +1 -0
  150. package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js +26 -0
  151. package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js.map +1 -0
  152. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.d.ts +14 -0
  153. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.d.ts.map +1 -0
  154. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.js +26 -0
  155. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.js.map +1 -0
  156. package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +2 -2
  157. package/payload/platform/plugins/outlook/references/auth.md +51 -54
  158. package/payload/platform/plugins/outlook/references/graph-surfaces.md +97 -4
  159. package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +34 -9
  160. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  161. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +9 -0
  162. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  163. package/payload/platform/services/claude-session-manager/dist/config.d.ts +18 -0
  164. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  165. package/payload/platform/services/claude-session-manager/dist/config.js +16 -0
  166. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  167. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  168. package/payload/platform/services/claude-session-manager/dist/http-server.js +34 -10
  169. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  170. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  171. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +7 -2
  172. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  173. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +9 -0
  174. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  175. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +9 -0
  176. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  177. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +5 -5
  178. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  179. package/payload/platform/services/whatsapp-channel/dist/notification.js +6 -5
  180. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  181. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  182. package/payload/platform/services/whatsapp-channel/dist/server.js +11 -11
  183. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  184. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  185. package/payload/server/public/assets/{AdminLoginScreens-CYPTMmTk.js → AdminLoginScreens-CBTx7ZPK.js} +1 -1
  186. package/payload/server/public/assets/AdminShell-DPHUeXea.js +2 -0
  187. package/payload/server/public/assets/{Checkbox-B0pbYJDQ.js → Checkbox-BHTxekRB.js} +1 -1
  188. package/payload/server/public/assets/{Transcript-CYaAPBFX.js → Transcript-5kLbBInN.js} +1 -1
  189. package/payload/server/public/assets/{admin-BKDMSRto.js → admin-BWCLE32N.js} +1 -1
  190. package/payload/server/public/assets/{browser-CxeMDDZA.js → browser-CRvCPsvV.js} +1 -1
  191. package/payload/server/public/assets/{calendar-DiIiTY9-.js → calendar-BI-kd-QP.js} +1 -1
  192. package/payload/server/public/assets/chat-DFy8hb1y.js +1 -0
  193. package/payload/server/public/assets/chevron-left-Bggm5B5U.js +1 -0
  194. package/payload/server/public/assets/data-HvZ69Ya1.js +1 -0
  195. package/payload/server/public/assets/{graph-DC3dwnMZ.js → graph-BFSyW_5i.js} +1 -1
  196. package/payload/server/public/assets/{graph-labels-Csnovm_c.js → graph-labels-DEjD_qJh.js} +1 -1
  197. package/payload/server/public/assets/{maximize-2-WRUJsg5n.js → maximize-2-BcMJNeCB.js} +1 -1
  198. package/payload/server/public/assets/{operator-BpzeHTAw.js → operator-Dtvm9ero.js} +1 -1
  199. package/payload/server/public/assets/{page-8jJOxx6y.js → page-C_pm3hl3.js} +1 -1
  200. package/payload/server/public/assets/{page-IQDLdebG.js → page-TXi9dmaB.js} +1 -1
  201. package/payload/server/public/assets/{public-Dqg7jwjq.js → public-DBx3U0r8.js} +1 -1
  202. package/payload/server/public/assets/{rotate-ccw-BayMWwfc.js → rotate-ccw-8ti3QkeY.js} +1 -1
  203. package/payload/server/public/assets/useSubAccountSwitcher-BUvlETHN.css +1 -0
  204. package/payload/server/public/assets/{useSubAccountSwitcher-C9aLg8yI.js → useSubAccountSwitcher-Bc5dOBdI.js} +1 -1
  205. package/payload/server/public/browser.html +4 -4
  206. package/payload/server/public/calendar.html +5 -5
  207. package/payload/server/public/chat.html +9 -9
  208. package/payload/server/public/data.html +8 -8
  209. package/payload/server/public/graph.html +9 -9
  210. package/payload/server/public/index.html +11 -11
  211. package/payload/server/public/operator.html +11 -11
  212. package/payload/server/public/public.html +9 -9
  213. package/payload/server/server.js +13 -31
  214. package/payload/server/public/assets/AdminShell-CZH_EZIy.js +0 -2
  215. package/payload/server/public/assets/chat-C56Oqvt1.js +0 -1
  216. package/payload/server/public/assets/chevron-left-Da-iZGi_.js +0 -1
  217. package/payload/server/public/assets/data-ZUdT44Ba.js +0 -1
  218. package/payload/server/public/assets/useSubAccountSwitcher-CRZfyJXR.css +0 -1
@@ -5,6 +5,7 @@ import { notTrashed } from "../../../../../lib/graph-trash/dist/index.js";
5
5
  import { validateWrite } from "../lib/schema-validator.js";
6
6
  import { loadEnabledPluginProfileKeys } from "./profile-read.js";
7
7
  import { withWriteEvent } from "../lib/log-ingest.js";
8
+ import { isConstraintViolation, parseConstraintProperties, } from "../lib/neo4j-constraint.js";
8
9
  // Cross-process agreement: these values must match neo4j-store.ts
9
10
  const INITIAL_CONFIDENCE = 0.5;
10
11
  const REINFORCEMENT_INCREMENT = 0.15;
@@ -47,11 +48,26 @@ const PERSON_SYSTEM_MANAGED_PROPS = new Set([
47
48
  "createdByTool",
48
49
  "createdBySession",
49
50
  ]);
51
+ // Task 1470 — the owner `Person`'s embed text, byte-identical to
52
+ // writeAdminUserAndPerson (neo4j-store.ts:2205) so a bootstrapped/updated owner
53
+ // ranks alongside the canonical identity Person in one memory-search. Built from
54
+ // the node's RESULTING name after the SET (a partial update that sets only the
55
+ // family name must still embed the full name). Returns null when no name exists
56
+ // — a contact-only write has nothing to embed on.
57
+ export function ownerPersonEmbedText(givenName, familyName) {
58
+ const name = [givenName, familyName]
59
+ .map((s) => (typeof s === "string" ? s.trim() : ""))
60
+ .filter((s) => s.length > 0)
61
+ .join(" ");
62
+ if (name.length === 0)
63
+ return null;
64
+ return `[Person] ${name} role: admin-personal`;
65
+ }
50
66
  export async function profileUpdate(params) {
51
67
  return withWriteEvent({ tool: "profile-update", accountId: params.accountId, labels: ["Preference"], name: `${params.category}.${params.key}` }, () => profileUpdateImpl(params), (r) => ({ elementId: r.preferenceId }));
52
68
  }
53
69
  async function profileUpdateImpl(params) {
54
- const { accountId, userId, category, key, value, source = "behavioural", mode = "reinforce", sessionId, profileFields, personFields, mergeSourceIds, notApplicable = false, validator, bootstrapProfile = false, } = params;
70
+ const { accountId, userId, category, key, value, source = "behavioural", mode = "reinforce", sessionId, profileFields, personFields, mergeSourceIds, notApplicable = false, validator, bootstrapProfile = false, bootstrapPerson = false, } = params;
55
71
  const validCategories = validCategoriesFor(accountId);
56
72
  if (!validCategories.has(category)) {
57
73
  throw new Error(`Invalid category "${category}". Must be one of: ${[...validCategories].join(", ")}`);
@@ -184,15 +200,130 @@ async function profileUpdateImpl(params) {
184
200
  // The RETURN count guard is mandatory: MATCH-SET against a missing
185
201
  // Person silently no-ops (sprint-learning: neo4j-match-set-no-op).
186
202
  if (personSafeFields !== null) {
187
- const personUpdate = await session.run(`
203
+ // Task 1463 cross-account owner `personFields` write MERGEs the owner
204
+ // `Person` off the seeded owner `AdminUser` when absent; own-account keeps
205
+ // the bare `MATCH` that loud-fails on a missing `OWNS`-`Person`. The MERGE
206
+ // keys the owner `Person` on the `OWNS` edge + `accountId` — the same
207
+ // identity key `profile-read/update` resolve through — so it reuses the
208
+ // one existing owner `Person` if present. It is NOT keyed on phone, so it
209
+ // cannot match / fork the phone-keyed access-grant `Person` (that node
210
+ // carries no `OWNS` edge, so the MERGE pattern misses it and a fresh owner
211
+ // `Person` is created instead). `scope`/`role` are set server-side because
212
+ // `scope` is system-managed (agent input for it is rejected above). The
213
+ // `affected` guard still fires on 0 — cross-account that means the
214
+ // resolved owner `AdminUser` vanished (resolveProfileIdentity guarantees
215
+ // it exists), which must loud-fail.
216
+ //
217
+ // This does NOT replicate `writeAdminUserAndPerson`'s identity `Person`
218
+ // in full: that writer keys reuse on `accountId` + `givenName`/
219
+ // `familyName` and embeds the node, neither of which is available here
220
+ // (this path carries only email/telephone). Idempotency therefore rests
221
+ // on the `OWNS`-edge key and the premise that a sub-account never runs the
222
+ // PIN flow that would fork a second owner `Person`. The residual
223
+ // uniqueness / concurrency / embedding gaps are tracked in Task 1467.
224
+ const personCypher = bootstrapPerson
225
+ ? `
226
+ MATCH (au:AdminUser {userId: $userId})
227
+ MERGE (au)-[:OWNS]->(p:Person {accountId: $accountId})
228
+ ON CREATE SET p.scope = 'admin', p.role = 'admin-personal', p.createdAt = $now
229
+ SET p += $fields, p.updatedAt = $now
230
+ RETURN count(p) AS affected, collect(elementId(p))[0] AS personElementId,
231
+ collect(p.givenName)[0] AS givenName, collect(p.familyName)[0] AS familyName
232
+ `
233
+ : `
188
234
  MATCH (au:AdminUser {userId: $userId})-[:OWNS]->(p:Person {accountId: $accountId})
189
235
  SET p += $fields, p.updatedAt = $now
190
- RETURN count(p) AS affected, collect(elementId(p))[0] AS personElementId
191
- `, { accountId, userId, fields: personSafeFields, now });
236
+ RETURN count(p) AS affected, collect(elementId(p))[0] AS personElementId,
237
+ collect(p.givenName)[0] AS givenName, collect(p.familyName)[0] AS familyName
238
+ `;
239
+ // Task 1467 — a unique-constraint violation on the owner Person's
240
+ // contact fields (person_email_unique / person_telephone_unique, both
241
+ // keyed (accountId, <field>)) means the email/telephone the house
242
+ // operator is setting already belongs to a *different* Person in this
243
+ // account (e.g. the owner also exists as a CRM contact). The bootstrap
244
+ // MERGE cannot reconcile that — the pre-existing Person carries no OWNS
245
+ // edge, so it is not the matched owner — and `SET p += $fields` throws a
246
+ // raw ConstraintValidationFailed. Shape it into an actionable error
247
+ // instead of leaking the Neo4j fault. Own-account writes share this SET
248
+ // and the same exposure, so the catch covers both branches. The control-
249
+ // flow decision is the machine `err.code`; parseConstraintProperty only
250
+ // enriches the message and always has a fallback.
251
+ let personUpdate;
252
+ try {
253
+ personUpdate = await session.run(personCypher, {
254
+ accountId,
255
+ userId,
256
+ fields: personSafeFields,
257
+ now,
258
+ });
259
+ }
260
+ catch (err) {
261
+ if (isConstraintViolation(err)) {
262
+ // person_email_unique / person_telephone_unique are composite
263
+ // (accountId, <field>) constraints, so the fault message names both
264
+ // accountId and the contact field. Pick the CONTACT field the
265
+ // operator actually set (the key present in personSafeFields), not
266
+ // the co-appearing system accountId; fall back to the field names
267
+ // when the message does not parse.
268
+ const collided = parseConstraintProperties(err.message).find((p) => Object.prototype.hasOwnProperty.call(personSafeFields, p.propName));
269
+ const field = collided
270
+ ? `${collided.propName} '${collided.propValue}'`
271
+ : `contact field (${Object.keys(personSafeFields).join(", ")})`;
272
+ throw new Error(`profile-update personFields: cannot set the owner Person's ${field} for accountId=${accountId.slice(0, 8)}… — that value already belongs to another Person in this account (unique constraint). The owner and that Person are likely the same individual; merge the contacts explicitly rather than reassigning the owner's contact.`);
273
+ }
274
+ throw err;
275
+ }
192
276
  const affected = personUpdate.records[0]?.get("affected");
193
277
  const affectedN = typeof affected === "number" ? affected : (affected?.toNumber?.() ?? 0);
194
- if (affectedN !== 1) {
195
- throw new Error(`profile-update personFields: AdminUser-OWNS-Person not found for userId=${userId} accountId=${accountId.slice(0, 8)}… (affected=${affectedN}). Personal-profile Person is created at PIN setup; if this fires the OWNS edge is missing and the operator-identity capture path is broken.`);
278
+ // Task 1467 split the count guard so each fault names its own cause.
279
+ // affected===0: the resolved owner AdminUser has no OWNS-Person (cross-
280
+ // account: resolveProfileIdentity guarantees the AdminUser exists, so a
281
+ // 0 means the owner Person genuinely vanished; own-account: the post-PIN
282
+ // OWNS edge is missing). affected>1: a concurrent bootstrap created
283
+ // duplicate owner Persons — a distinct fault the old "not found" wording
284
+ // described backwards. Preventing that duplicate (a unique owner-key
285
+ // constraint + the same hardening on writeAdminUserAndPerson + a backfill)
286
+ // is deferred to Task 1469; the nameless/unembedded owner Person to 1470.
287
+ if (affectedN === 0) {
288
+ throw new Error(`profile-update personFields: AdminUser-OWNS-Person not found for userId=${userId} accountId=${accountId.slice(0, 8)}… (affected=0). Personal-profile Person is created at PIN setup; if this fires the OWNS edge is missing and the operator-identity capture path is broken.`);
289
+ }
290
+ if (affectedN > 1) {
291
+ throw new Error(`profile-update personFields: found ${affectedN} owner Persons for userId=${userId} accountId=${accountId.slice(0, 8)}… (expected exactly 1) — a concurrent bootstrap created duplicate owner Persons. Every personFields write to this account will fail until the duplicates are reconciled to a single owner identity.`);
292
+ }
293
+ // Task 1470 — when this write sets the owner Person's name, embed it with
294
+ // the writeAdminUserAndPerson parity text so it is findable by
295
+ // memory-search. Built from the RESULTING name (read back above) so a
296
+ // partial update (only familyName) still embeds the full name. Contact-
297
+ // only writes set no name → embedText is null → no embed, no write-back.
298
+ const setName = "givenName" in personSafeFields || "familyName" in personSafeFields;
299
+ if (setName) {
300
+ const rec = personUpdate.records[0];
301
+ const embedText = ownerPersonEmbedText(rec?.get("givenName"), rec?.get("familyName"));
302
+ const personElementId = rec?.get("personElementId");
303
+ if (embedText && personElementId) {
304
+ let personEmbedding = null;
305
+ try {
306
+ personEmbedding = await embed(embedText);
307
+ }
308
+ catch (err) {
309
+ process.stderr.write(`[graph-write] warn reason=embed-failed labels=Person detail=${err instanceof Error ? err.message : String(err)}\n`);
310
+ }
311
+ // A null embedding (Ollama down) is never written — it must not clobber
312
+ // a good embedding from a prior write. The name still landed above.
313
+ // The write-back is wrapped so a transient failure here degrades to a
314
+ // named-but-unembedded owner (logged, findable later on reindex) rather
315
+ // than aborting the tool's primary preference write, which runs below —
316
+ // embedding must never block the write.
317
+ if (personEmbedding) {
318
+ try {
319
+ await session.run(`MATCH (p:Person) WHERE elementId(p) = $personElementId
320
+ SET p.embedding = $personEmbedding, p.updatedAt = $now`, { personElementId, personEmbedding, now });
321
+ }
322
+ catch (err) {
323
+ process.stderr.write(`[graph-write] warn reason=embed-write-failed labels=Person detail=${err instanceof Error ? err.message : String(err)}\n`);
324
+ }
325
+ }
326
+ }
196
327
  }
197
328
  // One log line per Person property set in this call — generic over
198
329
  // the open Record, not per-kind. Operators grep
@@ -1 +1 @@
1
- {"version":3,"file":"profile-update.js","sourceRoot":"","sources":["../../src/tools/profile-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile-update.js","sourceRoot":"","sources":["../../src/tools/profile-update.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "outlook",
3
- "description": "Microsoft 365 / Outlook.com via Microsoft Graph (read-only first cut). Per-account OAuth Auth Code + PKCE; no client secret. Tools — outlook-account-register: PKCE register; outlook-mail-list / outlook-mail-search: inbox; outlook-calendar-list / outlook-calendar-event: calendar; outlook-contacts-list: contacts; outlook-mailbox-info: auth state + folder count.",
3
+ "description": "Microsoft 365 / Outlook.com via Microsoft Graph. Mail is read + draft + send; contacts are read-only; calendar is read + control. Per-account OAuth device-code flow; no client secret. Tools — outlook-account-register / outlook-account-register-poll: device-code register (start + poll); outlook-mail-list / outlook-mail-search: inbox; outlook-mail-send / outlook-draft / outlook-draft-send: compose and send; outlook-calendar-list / outlook-calendar-event: read calendar; outlook-calendar-create / outlook-calendar-update / outlook-calendar-cancel / outlook-calendar-respond / outlook-calendar-freebusy: control calendar; outlook-contacts-list: contacts; outlook-mailbox-info: auth state + folder count.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"
@@ -1,22 +1,49 @@
1
1
  ---
2
2
  name: outlook
3
- description: Microsoft 365 / Outlook.com via Microsoft Graph (read-only first cut). Per-account OAuth Auth Code + PKCE; no client secret. Tools — outlook-account-register: PKCE register; outlook-mail-list / outlook-mail-search: inbox; outlook-calendar-list / outlook-calendar-event: calendar; outlook-contacts-list: contacts; outlook-mailbox-info: auth state + folder count.
3
+ description: Microsoft 365 / Outlook.com via Microsoft Graph. Mail is read + draft + send; contacts are read-only; calendar is read + control. Per-account OAuth device-code flow; no client secret. Tools — outlook-account-register / outlook-account-register-poll: device-code register (start + poll); outlook-mail-list / outlook-mail-search: inbox; outlook-mail-send / outlook-draft / outlook-draft-send: compose and send; outlook-calendar-list / outlook-calendar-event: read calendar; outlook-calendar-create / outlook-calendar-update / outlook-calendar-cancel / outlook-calendar-respond / outlook-calendar-freebusy: control calendar; outlook-contacts-list: contacts; outlook-mailbox-info: auth state + folder count.
4
4
  tools:
5
5
  - name: outlook-account-register
6
6
  publicAllowlist: false
7
7
  adminAllowlist: false
8
+ - name: outlook-account-register-poll
9
+ publicAllowlist: false
10
+ adminAllowlist: false
8
11
  - name: outlook-mail-list
9
12
  publicAllowlist: false
10
13
  adminAllowlist: false
11
14
  - name: outlook-mail-search
12
15
  publicAllowlist: false
13
16
  adminAllowlist: false
17
+ - name: outlook-mail-send
18
+ publicAllowlist: false
19
+ adminAllowlist: false
20
+ - name: outlook-draft
21
+ publicAllowlist: false
22
+ adminAllowlist: false
23
+ - name: outlook-draft-send
24
+ publicAllowlist: false
25
+ adminAllowlist: false
14
26
  - name: outlook-calendar-list
15
27
  publicAllowlist: false
16
28
  adminAllowlist: false
17
29
  - name: outlook-calendar-event
18
30
  publicAllowlist: false
19
31
  adminAllowlist: false
32
+ - name: outlook-calendar-create
33
+ publicAllowlist: false
34
+ adminAllowlist: false
35
+ - name: outlook-calendar-update
36
+ publicAllowlist: false
37
+ adminAllowlist: false
38
+ - name: outlook-calendar-cancel
39
+ publicAllowlist: false
40
+ adminAllowlist: false
41
+ - name: outlook-calendar-respond
42
+ publicAllowlist: false
43
+ adminAllowlist: false
44
+ - name: outlook-calendar-freebusy
45
+ publicAllowlist: false
46
+ adminAllowlist: false
20
47
  - name: outlook-contacts-list
21
48
  publicAllowlist: false
22
49
  adminAllowlist: false
@@ -37,24 +64,30 @@ mcp:
37
64
  PLATFORM_ROOT: ${PLATFORM_ROOT}
38
65
  ACCOUNT_ID: ${ACCOUNT_ID}
39
66
  SESSION_ID: ${SESSION_ID}
67
+ OUTLOOK_CLIENT_ID: ${OUTLOOK_CLIENT_ID}
68
+ OUTLOOK_TENANT_ID: ${OUTLOOK_TENANT_ID}
40
69
  mcp-manifest: auto
41
70
  ---
42
71
 
43
72
  # Outlook
44
73
 
45
- Read-only Microsoft Graph access for Outlook.com / Microsoft 365 mailboxes. Admin agent only — public agent surface is explicitly excluded.
74
+ Microsoft Graph access for Outlook.com / Microsoft 365 mailboxes. Mail is read, draft, and send; contacts are read-only; calendar is read + control. Admin agent only — public agent surface is explicitly excluded.
46
75
 
47
76
  ## Capabilities
48
77
 
49
- - **Register:** `outlook-account-register` — initiates OAuth Auth Code + PKCE flow against the operator's Entra app. Returns an authorization URL the operator opens in the VNC browser to consent. Tokens persist per-account, encrypted on disk (AES-256-CBC).
50
- - **Mail (read-only):** `outlook-mail-list` returns recent messages; `outlook-mail-search` runs a Graph `$search` query.
51
- - **Calendar (read-only):** `outlook-calendar-list` returns events in a future range; `outlook-calendar-event` returns a single event with full body + attendees.
78
+ - **Register:** `outlook-account-register` — starts the OAuth device-code flow against the brand's Entra app and returns a user code + verification URL immediately. The operator opens `microsoft.com/devicelogin` on any device, enters the code, and consents. `outlook-account-register-poll` completes registration — one check per call. Tokens persist per-account, encrypted on disk (AES-256-CBC).
79
+ - **Mail (read):** `outlook-mail-list` returns recent messages; `outlook-mail-search` runs a Graph `$search` query.
80
+ - **Mail (send / draft):** `outlook-mail-send` sends via `POST /me/sendMail` (success asserted on Graph 202); `outlook-draft` creates a draft and returns its id; `outlook-draft-send` sends an existing draft by id. Recipients are to/cc/bcc arrays; body is HTML or plain text via `isHtml`. Requires `Mail.Send` + `Mail.ReadWrite`; a mailbox on the old read-only consent returns an actionable "re-register to grant send" signal.
81
+ - **Calendar (read + control):** `outlook-calendar-list` and `outlook-calendar-event` read events; `outlook-calendar-create` books an event; `outlook-calendar-update` reschedules or edits one; `outlook-calendar-cancel` cancels a meeting (notifying attendees when the account organises it) or deletes a personal appointment; `outlook-calendar-respond` accepts, declines, or tentatively accepts an invite; `outlook-calendar-freebusy` reports availability for one or more addresses over a window. Writes require the `Calendars.ReadWrite` consent; a mailbox on stale read-only consent returns a distinct signal naming the scope and `outlook-account-register`.
52
82
  - **Contacts (read-only):** `outlook-contacts-list` returns contacts.
53
83
  - **Health:** `outlook-mailbox-info` reports auth state, refresh-window status, and top-level folder count. Use this to answer "did account X auth?" without grepping logs.
54
84
 
55
85
  ## Out of scope
56
86
 
57
- - Send / draft / move / flag — write surfaces are deferred to a follow-up task.
87
+ - Mail move / flag / delete — write surfaces beyond send and draft are not implemented.
88
+ - Contacts write — read-only.
89
+ - Recurring-series occurrence editing (edit-this-occurrence) beyond whole-series create/update.
90
+ - The `scheduling` (Neo4j graph) plugin and any auto-sync between it and the Outlook calendar.
58
91
  - OneDrive, Files, Sites — separate plugin; different endpoints.
59
92
  - Push notifications via `/subscriptions` — first cut polls.
60
93
  - On-premises Exchange — Microsoft Graph deprecated hybrid REST 2023-07. The plugin detects on-prem mailboxes and routes the operator to the IMAP path (`email` plugin).
@@ -64,7 +97,7 @@ Read-only Microsoft Graph access for Outlook.com / Microsoft 365 mailboxes. Admi
64
97
 
65
98
  | Reference | Topics |
66
99
  |-----------|--------|
67
- | [auth.md](references/auth.md) | Entra app registration, PKCE flow, vendored upstream SHA, re-vendor procedure |
100
+ | [auth.md](references/auth.md) | Entra app registration, device-code flow, public-client requirement |
68
101
  | [graph-surfaces.md](references/graph-surfaces.md) | Graph endpoint and response shape per tool |
69
102
 
70
103
  ## Skills
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=account-register.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-register.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/account-register.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { mkdtempSync, rmSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { PendingStore } from "../auth/pending-store.js";
7
+ import { TokenStore } from "../auth/token-store.js";
8
+ import { runAccountRegisterStart, runAccountRegisterPoll } from "../tools/account-register.js";
9
+ const mk = () => {
10
+ const dir = mkdtempSync(join(tmpdir(), "outlook-reg-"));
11
+ return { dir, cleanup: () => rmSync(dir, { recursive: true, force: true }) };
12
+ };
13
+ function withFetch(seq) {
14
+ const original = globalThis.fetch;
15
+ let i = 0;
16
+ globalThis.fetch = (async () => (seq[Math.min(i++, seq.length - 1)])());
17
+ return () => { globalThis.fetch = original; };
18
+ }
19
+ function captureStderr() {
20
+ const chunks = [];
21
+ const orig = process.stderr.write.bind(process.stderr);
22
+ process.stderr.write = ((s) => {
23
+ chunks.push(String(s));
24
+ return true;
25
+ });
26
+ return { text: () => chunks.join(""), restore: () => { process.stderr.write = orig; } };
27
+ }
28
+ const json = (o, status = 200) => new Response(JSON.stringify(o), { status, headers: { "Content-Type": "application/json" } });
29
+ const cfg = { clientId: "cid", tenantId: "common" };
30
+ const pendingEntry = () => ({
31
+ deviceCode: "DEV",
32
+ scopes: ["Mail.Read"],
33
+ intervalSec: 5,
34
+ expiresAtMs: Date.now() + 900_000,
35
+ issuedAtMs: Date.now(),
36
+ });
37
+ test("start writes pending entry and logs devicecode-issued before returning", async () => {
38
+ const { dir, cleanup } = mk();
39
+ const restore = withFetch([() => json({
40
+ device_code: "DEV", user_code: "WXYZ-1234",
41
+ verification_uri: "https://microsoft.com/devicelogin", expires_in: 900, interval: 5,
42
+ })]);
43
+ const cap = captureStderr();
44
+ try {
45
+ const ps = new PendingStore("acct-1", dir);
46
+ const res = await runAccountRegisterStart({ accountId: "acct-1", ...cfg, pendingStore: ps });
47
+ cap.restore();
48
+ assert.equal(res.status, "pending");
49
+ assert.equal(res.userCode, "WXYZ-1234");
50
+ assert.equal(ps.read()?.deviceCode, "DEV");
51
+ assert.match(cap.text(), /devicecode-issued/);
52
+ assert.match(cap.text(), /userCode=WXYZ-1234/);
53
+ assert.match(cap.text(), /pending-store-census account=acct-1 live=1/);
54
+ }
55
+ finally {
56
+ cap.restore();
57
+ restore();
58
+ cleanup();
59
+ }
60
+ });
61
+ test("poll authorization_pending -> pending", async () => {
62
+ const { dir, cleanup } = mk();
63
+ const ps = new PendingStore("acct-2", dir);
64
+ ps.write(pendingEntry());
65
+ const restore = withFetch([() => json({ error: "authorization_pending" }, 400)]);
66
+ try {
67
+ const out = await runAccountRegisterPoll({ accountId: "acct-2", ...cfg, tokenStore: new TokenStore("acct-2", dir), pendingStore: ps });
68
+ assert.equal(out.status, "pending");
69
+ }
70
+ finally {
71
+ restore();
72
+ cleanup();
73
+ }
74
+ });
75
+ test("poll success -> registered, tokens persisted, pending cleared", async () => {
76
+ const { dir, cleanup } = mk();
77
+ const ps = new PendingStore("acct-3", dir);
78
+ ps.write(pendingEntry());
79
+ const ts = new TokenStore("acct-3", dir);
80
+ const restore = withFetch([
81
+ () => json({ access_token: "AT", refresh_token: "RT", expires_in: 3600, token_type: "Bearer", scope: "offline_access User.Read Mail.ReadWrite Mail.Send Calendars.ReadWrite Contacts.Read" }),
82
+ () => json({ id: "graph-123", mail: "a@b.com" }),
83
+ ]);
84
+ try {
85
+ const out = await runAccountRegisterPoll({ accountId: "acct-3", ...cfg, tokenStore: ts, pendingStore: ps });
86
+ assert.equal(out.status, "registered");
87
+ if (out.status === "registered")
88
+ assert.equal(out.graphUserId, "graph-123");
89
+ assert.equal(ts.read()?.accessToken, "AT");
90
+ assert.equal(ps.census(), 0);
91
+ }
92
+ finally {
93
+ restore();
94
+ cleanup();
95
+ }
96
+ });
97
+ test("poll expired_token -> expired and pending cleared", async () => {
98
+ const { dir, cleanup } = mk();
99
+ const ps = new PendingStore("acct-4", dir);
100
+ ps.write(pendingEntry());
101
+ const restore = withFetch([() => json({ error: "expired_token" }, 400)]);
102
+ try {
103
+ const out = await runAccountRegisterPoll({ accountId: "acct-4", ...cfg, tokenStore: new TokenStore("acct-4", dir), pendingStore: ps });
104
+ assert.equal(out.status, "expired");
105
+ assert.equal(ps.census(), 0);
106
+ }
107
+ finally {
108
+ restore();
109
+ cleanup();
110
+ }
111
+ });
112
+ test("poll access_denied -> denied and pending cleared", async () => {
113
+ const { dir, cleanup } = mk();
114
+ const ps = new PendingStore("acct-5", dir);
115
+ ps.write(pendingEntry());
116
+ const restore = withFetch([() => json({ error: "access_denied" }, 400)]);
117
+ try {
118
+ const out = await runAccountRegisterPoll({ accountId: "acct-5", ...cfg, tokenStore: new TokenStore("acct-5", dir), pendingStore: ps });
119
+ assert.equal(out.status, "denied");
120
+ assert.equal(ps.census(), 0);
121
+ }
122
+ finally {
123
+ restore();
124
+ cleanup();
125
+ }
126
+ });
127
+ test("poll with no pending entry -> expired", async () => {
128
+ const { dir, cleanup } = mk();
129
+ try {
130
+ const out = await runAccountRegisterPoll({ accountId: "acct-6", ...cfg, tokenStore: new TokenStore("acct-6", dir), pendingStore: new PendingStore("acct-6", dir) });
131
+ assert.equal(out.status, "expired");
132
+ }
133
+ finally {
134
+ cleanup();
135
+ }
136
+ });
137
+ //# sourceMappingURL=account-register.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-register.test.js","sourceRoot":"","sources":["../../src/__tests__/account-register.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=calendar-write.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-write.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/calendar-write.test.ts"],"names":[],"mappings":""}