@open-everywhere/provider-notion 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +21 -0
  3. package/README.md +48 -0
  4. package/agent/channels/notion-acting-identity.ts +88 -0
  5. package/agent/channels/notion-ancestry-trust.ts +458 -0
  6. package/agent/channels/notion-api.ts +1290 -0
  7. package/agent/channels/notion-bot-user.ts +250 -0
  8. package/agent/channels/notion-catch-up.ts +339 -0
  9. package/agent/channels/notion-credentials.ts +417 -0
  10. package/agent/channels/notion-engagement.ts +372 -0
  11. package/agent/channels/notion-event-normalizer.ts +587 -0
  12. package/agent/channels/notion-identity.ts +271 -0
  13. package/agent/channels/notion-ingress-drain.ts +289 -0
  14. package/agent/channels/notion-ingress.ts +182 -0
  15. package/agent/channels/notion-message-ops.ts +140 -0
  16. package/agent/channels/notion-origin-codec.ts +38 -0
  17. package/agent/channels/notion-post-arm.ts +189 -0
  18. package/agent/channels/notion-question-return.ts +223 -0
  19. package/agent/channels/notion-read.ts +283 -0
  20. package/agent/channels/notion-scope.ts +560 -0
  21. package/agent/channels/notion-stop.ts +169 -0
  22. package/agent/channels/notion-supervisor.ts +856 -0
  23. package/agent/channels/notion-webhook-timing.ts +131 -0
  24. package/agent/channels/notion-webhook-verifier.ts +55 -0
  25. package/agent/channels/notion-webhook.ts +963 -0
  26. package/agent/channels/notion-work-search.ts +74 -0
  27. package/agent/channels/notion-work.ts +144 -0
  28. package/agent/channels/notion.ts +1242 -0
  29. package/agent/contributions.ts +39 -0
  30. package/agent/docs-generated.ts +15 -0
  31. package/agent/memory/blocks.ts +295 -0
  32. package/agent/memory/memory.ts +622 -0
  33. package/agent/provider-events.ts +198 -0
  34. package/agent/register.ts +144 -0
  35. package/agent/schedules/notion-ingress.ts +20 -0
  36. package/agent/surface-parity.ts +105 -0
  37. package/agent/tools/notion_search.ts +110 -0
  38. package/agent/tools/read_notion_comments.ts +250 -0
  39. package/agent/tools/read_notion_page.ts +351 -0
  40. package/dist/agent/channels/notion-acting-identity.d.ts +23 -0
  41. package/dist/agent/channels/notion-acting-identity.d.ts.map +1 -0
  42. package/dist/agent/channels/notion-acting-identity.js +85 -0
  43. package/dist/agent/channels/notion-acting-identity.js.map +1 -0
  44. package/dist/agent/channels/notion-ancestry-trust.d.ts +208 -0
  45. package/dist/agent/channels/notion-ancestry-trust.d.ts.map +1 -0
  46. package/dist/agent/channels/notion-ancestry-trust.js +331 -0
  47. package/dist/agent/channels/notion-ancestry-trust.js.map +1 -0
  48. package/dist/agent/channels/notion-api.d.ts +655 -0
  49. package/dist/agent/channels/notion-api.d.ts.map +1 -0
  50. package/dist/agent/channels/notion-api.js +938 -0
  51. package/dist/agent/channels/notion-api.js.map +1 -0
  52. package/dist/agent/channels/notion-bot-user.d.ts +107 -0
  53. package/dist/agent/channels/notion-bot-user.d.ts.map +1 -0
  54. package/dist/agent/channels/notion-bot-user.js +192 -0
  55. package/dist/agent/channels/notion-bot-user.js.map +1 -0
  56. package/dist/agent/channels/notion-catch-up.d.ts +64 -0
  57. package/dist/agent/channels/notion-catch-up.d.ts.map +1 -0
  58. package/dist/agent/channels/notion-catch-up.js +289 -0
  59. package/dist/agent/channels/notion-catch-up.js.map +1 -0
  60. package/dist/agent/channels/notion-credentials.d.ts +210 -0
  61. package/dist/agent/channels/notion-credentials.d.ts.map +1 -0
  62. package/dist/agent/channels/notion-credentials.js +360 -0
  63. package/dist/agent/channels/notion-credentials.js.map +1 -0
  64. package/dist/agent/channels/notion-engagement.d.ts +219 -0
  65. package/dist/agent/channels/notion-engagement.d.ts.map +1 -0
  66. package/dist/agent/channels/notion-engagement.js +283 -0
  67. package/dist/agent/channels/notion-engagement.js.map +1 -0
  68. package/dist/agent/channels/notion-event-normalizer.d.ts +194 -0
  69. package/dist/agent/channels/notion-event-normalizer.d.ts.map +1 -0
  70. package/dist/agent/channels/notion-event-normalizer.js +542 -0
  71. package/dist/agent/channels/notion-event-normalizer.js.map +1 -0
  72. package/dist/agent/channels/notion-identity.d.ts +119 -0
  73. package/dist/agent/channels/notion-identity.d.ts.map +1 -0
  74. package/dist/agent/channels/notion-identity.js +205 -0
  75. package/dist/agent/channels/notion-identity.js.map +1 -0
  76. package/dist/agent/channels/notion-ingress-drain.d.ts +66 -0
  77. package/dist/agent/channels/notion-ingress-drain.d.ts.map +1 -0
  78. package/dist/agent/channels/notion-ingress-drain.js +185 -0
  79. package/dist/agent/channels/notion-ingress-drain.js.map +1 -0
  80. package/dist/agent/channels/notion-ingress.d.ts +64 -0
  81. package/dist/agent/channels/notion-ingress.d.ts.map +1 -0
  82. package/dist/agent/channels/notion-ingress.js +130 -0
  83. package/dist/agent/channels/notion-ingress.js.map +1 -0
  84. package/dist/agent/channels/notion-message-ops.d.ts +3 -0
  85. package/dist/agent/channels/notion-message-ops.d.ts.map +1 -0
  86. package/dist/agent/channels/notion-message-ops.js +126 -0
  87. package/dist/agent/channels/notion-message-ops.js.map +1 -0
  88. package/dist/agent/channels/notion-origin-codec.d.ts +7 -0
  89. package/dist/agent/channels/notion-origin-codec.d.ts.map +1 -0
  90. package/dist/agent/channels/notion-origin-codec.js +32 -0
  91. package/dist/agent/channels/notion-origin-codec.js.map +1 -0
  92. package/dist/agent/channels/notion-post-arm.d.ts +3 -0
  93. package/dist/agent/channels/notion-post-arm.d.ts.map +1 -0
  94. package/dist/agent/channels/notion-post-arm.js +185 -0
  95. package/dist/agent/channels/notion-post-arm.js.map +1 -0
  96. package/dist/agent/channels/notion-question-return.d.ts +77 -0
  97. package/dist/agent/channels/notion-question-return.d.ts.map +1 -0
  98. package/dist/agent/channels/notion-question-return.js +183 -0
  99. package/dist/agent/channels/notion-question-return.js.map +1 -0
  100. package/dist/agent/channels/notion-read.d.ts +62 -0
  101. package/dist/agent/channels/notion-read.d.ts.map +1 -0
  102. package/dist/agent/channels/notion-read.js +257 -0
  103. package/dist/agent/channels/notion-read.js.map +1 -0
  104. package/dist/agent/channels/notion-scope.d.ts +188 -0
  105. package/dist/agent/channels/notion-scope.d.ts.map +1 -0
  106. package/dist/agent/channels/notion-scope.js +433 -0
  107. package/dist/agent/channels/notion-scope.js.map +1 -0
  108. package/dist/agent/channels/notion-stop.d.ts +48 -0
  109. package/dist/agent/channels/notion-stop.d.ts.map +1 -0
  110. package/dist/agent/channels/notion-stop.js +141 -0
  111. package/dist/agent/channels/notion-stop.js.map +1 -0
  112. package/dist/agent/channels/notion-supervisor.d.ts +462 -0
  113. package/dist/agent/channels/notion-supervisor.d.ts.map +1 -0
  114. package/dist/agent/channels/notion-supervisor.js +482 -0
  115. package/dist/agent/channels/notion-supervisor.js.map +1 -0
  116. package/dist/agent/channels/notion-webhook-timing.d.ts +35 -0
  117. package/dist/agent/channels/notion-webhook-timing.d.ts.map +1 -0
  118. package/dist/agent/channels/notion-webhook-timing.js +99 -0
  119. package/dist/agent/channels/notion-webhook-timing.js.map +1 -0
  120. package/dist/agent/channels/notion-webhook-verifier.d.ts +5 -0
  121. package/dist/agent/channels/notion-webhook-verifier.d.ts.map +1 -0
  122. package/dist/agent/channels/notion-webhook-verifier.js +53 -0
  123. package/dist/agent/channels/notion-webhook-verifier.js.map +1 -0
  124. package/dist/agent/channels/notion-webhook.d.ts +242 -0
  125. package/dist/agent/channels/notion-webhook.d.ts.map +1 -0
  126. package/dist/agent/channels/notion-webhook.js +675 -0
  127. package/dist/agent/channels/notion-webhook.js.map +1 -0
  128. package/dist/agent/channels/notion-work-search.d.ts +9 -0
  129. package/dist/agent/channels/notion-work-search.d.ts.map +1 -0
  130. package/dist/agent/channels/notion-work-search.js +69 -0
  131. package/dist/agent/channels/notion-work-search.js.map +1 -0
  132. package/dist/agent/channels/notion-work.d.ts +68 -0
  133. package/dist/agent/channels/notion-work.d.ts.map +1 -0
  134. package/dist/agent/channels/notion-work.js +126 -0
  135. package/dist/agent/channels/notion-work.js.map +1 -0
  136. package/dist/agent/channels/notion.d.ts +95 -0
  137. package/dist/agent/channels/notion.d.ts.map +1 -0
  138. package/dist/agent/channels/notion.js +1081 -0
  139. package/dist/agent/channels/notion.js.map +1 -0
  140. package/dist/agent/contributions.d.ts +32 -0
  141. package/dist/agent/contributions.d.ts.map +1 -0
  142. package/dist/agent/contributions.js +37 -0
  143. package/dist/agent/contributions.js.map +1 -0
  144. package/dist/agent/docs-generated.d.ts +3 -0
  145. package/dist/agent/docs-generated.d.ts.map +1 -0
  146. package/dist/agent/docs-generated.js +13 -0
  147. package/dist/agent/docs-generated.js.map +1 -0
  148. package/dist/agent/memory/blocks.d.ts +58 -0
  149. package/dist/agent/memory/blocks.d.ts.map +1 -0
  150. package/dist/agent/memory/blocks.js +264 -0
  151. package/dist/agent/memory/blocks.js.map +1 -0
  152. package/dist/agent/memory/memory.d.ts +157 -0
  153. package/dist/agent/memory/memory.d.ts.map +1 -0
  154. package/dist/agent/memory/memory.js +471 -0
  155. package/dist/agent/memory/memory.js.map +1 -0
  156. package/dist/agent/provider-events.d.ts +3 -0
  157. package/dist/agent/provider-events.d.ts.map +1 -0
  158. package/dist/agent/provider-events.js +196 -0
  159. package/dist/agent/provider-events.js.map +1 -0
  160. package/dist/agent/register.d.ts +5 -0
  161. package/dist/agent/register.d.ts.map +1 -0
  162. package/dist/agent/register.js +128 -0
  163. package/dist/agent/register.js.map +1 -0
  164. package/dist/agent/schedules/notion-ingress.d.ts +6 -0
  165. package/dist/agent/schedules/notion-ingress.d.ts.map +1 -0
  166. package/dist/agent/schedules/notion-ingress.js +16 -0
  167. package/dist/agent/schedules/notion-ingress.js.map +1 -0
  168. package/dist/agent/surface-parity.d.ts +3 -0
  169. package/dist/agent/surface-parity.d.ts.map +1 -0
  170. package/dist/agent/surface-parity.js +99 -0
  171. package/dist/agent/surface-parity.js.map +1 -0
  172. package/dist/agent/tools/notion_search.d.ts +56 -0
  173. package/dist/agent/tools/notion_search.d.ts.map +1 -0
  174. package/dist/agent/tools/notion_search.js +100 -0
  175. package/dist/agent/tools/notion_search.js.map +1 -0
  176. package/dist/agent/tools/read_notion_comments.d.ts +57 -0
  177. package/dist/agent/tools/read_notion_comments.d.ts.map +1 -0
  178. package/dist/agent/tools/read_notion_comments.js +236 -0
  179. package/dist/agent/tools/read_notion_comments.js.map +1 -0
  180. package/dist/agent/tools/read_notion_page.d.ts +53 -0
  181. package/dist/agent/tools/read_notion_page.d.ts.map +1 -0
  182. package/dist/agent/tools/read_notion_page.js +327 -0
  183. package/dist/agent/tools/read_notion_page.js.map +1 -0
  184. package/package.json +231 -0
  185. package/tsconfig.build.json +22 -0
  186. package/tsconfig.json +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-api.js","sourceRoot":"","sources":["../../../agent/channels/notion-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { type ResolvedNotionCredential } from "./notion-api.js";
2
+ /**
3
+ * EVERY bot user id this deployment posts under, and whether the set is COMPLETE (OPE-1921).
4
+ *
5
+ * 🔴 ONE ID IS NOT THE DEPLOYMENT'S IDENTITY WHEN IT RUNS TWO INTEGRATIONS. Each Notion integration
6
+ * has its own bot user id. The loop guard used to compare a comment against the id of the ONE
7
+ * integration whose secret verified that delivery, so a reply posted by integration A and delivered
8
+ * on integration B's subscription carried a real id that matched nothing. It read as a person, woke a
9
+ * turn, and A's subscription then saw B's answer — a loop the OPE-1906 once-guard cannot bound,
10
+ * because every reply is a new comment id.
11
+ *
12
+ * `all` is what a self-check compares against; `primary` is the VERIFYING integration's own id, kept
13
+ * separate because the addressed path is still that integration's (a structured @mention names one
14
+ * bot user, not a deployment).
15
+ *
16
+ * 🔴 `complete` IS THE FAIL-CLOSED INPUT, AND IT IS FALSE WHENEVER ONE CONFIGURED INTEGRATION'S ID
17
+ * DID NOT RESOLVE. Notion serves a comment's `created_by` as a PARTIAL user with no `type`
18
+ * (OPE-1857), so an unresolved sibling leaves a real authored comment that NOTHING can attribute:
19
+ * it is either a person or our own second integration, and the payload cannot say which. The guard
20
+ * therefore drops it — see {@link NotionOwnBotIds.complete} for what that costs.
21
+ */
22
+ export interface NotionOwnBotIds {
23
+ /** The bot user id of the integration this delivery VERIFIED under, or undefined when it did not
24
+ * resolve. An absent primary is the pre-existing fail-closed arm and still drops on its own. */
25
+ readonly primary: string | undefined;
26
+ /** Every bot user id this deployment could resolve, `primary` included. A comment whose author id
27
+ * is in here is OUR OWN WORDS, whichever integration posted it. */
28
+ readonly all: ReadonlySet<string>;
29
+ /**
30
+ * True when EVERY configured integration's bot user id resolved. False ⇒ the self-check cannot
31
+ * answer "is this ours" for an author it does not recognise, and the loop guard fails CLOSED.
32
+ *
33
+ * 🔴 THE COST, STATED PLAINLY: an integration that CAN reach Notion but whose `GET /v1/users/me`
34
+ * fails makes the whole deployment deaf to every Notion comment Notion does not mark
35
+ * `person`-authored — on every page, including pages the healthy integration serves. That is NOT
36
+ * only ambient chatter: `classifyNotionComment` step 5 sits ABOVE the addressed arms, so an
37
+ * addressed name-drop and an `oe link <code>` identity claim drop with it. And
38
+ * `resolveNotionBotUser` caches a failure for the PROCESS
39
+ * LIFETIME, so a single rate-limit episode during the first resolve silences that instance until
40
+ * it restarts. That is the direction this repository takes everywhere else on this guard (an
41
+ * identity we cannot establish never wakes the agent), and the alternative is worse: a fail-open
42
+ * sibling is an unbounded reply loop between two integrations of one deployment, on a launch
43
+ * surface, with no once-guard able to stop it.
44
+ * The cost is bounded to integrations that could actually have posted — an integration with no
45
+ * usable key never sets this false. See `collectNotionOwnBotIds`'s `canPost`.
46
+ */
47
+ readonly complete: boolean;
48
+ }
49
+ /**
50
+ * Resolve the deployment's own bot user ids: the already-resolved `primary`, plus one per entry of
51
+ * `siblingCredentialIds` — every CONFIGURED INTEGRATION EXCEPT the one this delivery verified under.
52
+ * The resolver is the SAME per-credential one and cache the loop guard already reads, so no second
53
+ * spelling of one identity can exist.
54
+ *
55
+ * 🔴 THE ADDED INGRESS COST, EXACTLY: N-1 extra `GET /v1/users/me` calls for N configured
56
+ * integrations, on the FIRST delivery of a process, and ZERO after it —
57
+ * {@link resolveNotionBotUser} memoises on the credential id. The verifying integration is excluded
58
+ * here precisely so the number is N-1 and not N: its id is already in hand, and re-resolving it
59
+ * would charge a live resolver for an answer the caller just took. A SINGLE-INTEGRATION deployment —
60
+ * every deployment before OPE-1921 — therefore pays NOTHING at all, and `notion-test.ts`'s
61
+ * ack-attribution fixture measures that: its `botTriggerPage` bucket is unchanged.
62
+ *
63
+ * A resolver that THROWS counts as unresolved rather than failing the delivery: this runs on the
64
+ * awaited ingress path, and a thrown identity lookup must not turn into a 500 Notion will retry.
65
+ *
66
+ * 🔴 AN INTEGRATION THAT CANNOT POST IS NOT A LOOP RISK, AND MARKING THE SET INCOMPLETE FOR ONE IS
67
+ * PURE AVAILABILITY LOSS. `resolve` answers `undefined` for two different failures: a working key
68
+ * whose `GET /v1/users/me` failed — that integration CAN post, so we must fail closed — and an
69
+ * integration THIS DEPLOYMENT holds no usable API key for, so it cannot post FROM HERE. `canPost`
70
+ * separates them, and it is consulted ONLY when `resolve` came back empty, so the ordinary path
71
+ * pays nothing for it. Without the split, a domain whose credential is declared but whose secret is
72
+ * unset or revoked would silence Notion on EVERY page of the deployment, including pages
73
+ * the healthy org-default integration serves — a blast radius nothing buys. Absent ⇒ every
74
+ * unresolved sibling is treated as able to post, which is the conservative reading.
75
+ *
76
+ * 🔴 THE CLAIM IS "NOT A LOOP RISK FROM HERE", NEVER "CANNOT HAVE AUTHORED ANY COMMENT", and the
77
+ * difference is real. `canPost` establishes only that THIS deployment cannot resolve a key for that
78
+ * credential right now. A token an operator deleted here, or one another environment still holds,
79
+ * can keep authoring comments on the shared page — and this deployment then reads those replies as a
80
+ * person's, because that id is absent from `all` while `complete` stays true. The residual is
81
+ * accepted: a loop needs two of OUR OWN integrations answering each other, and an integration we
82
+ * cannot post under is not one of the two.
83
+ */
84
+ export declare function collectNotionOwnBotIds(primary: string | undefined, siblingCredentialIds: readonly string[], resolve: (credentialId: string) => Promise<string | undefined>, canPost?: (credentialId: string) => Promise<boolean>): Promise<NotionOwnBotIds>;
85
+ /**
86
+ * The bot user (id and display name) for ONE integration, memoised on `credentialId`.
87
+ * `credential` is a THUNK so an operator override short-circuits the credential resolution entirely.
88
+ *
89
+ * 🔴 `NOTION_BOT_USER_ID` PINS THE ORG DEFAULT ONLY, AND SCOPING IT IS LOAD-BEARING (OPE-1921). It
90
+ * is ONE id, and two Notion integrations NEVER share a bot user — so an override applied to every
91
+ * credential would answer every integration with the org default's id. That is worse than no
92
+ * override: the cross-integration loop guard would hold a one-element set AND report it COMPLETE,
93
+ * so a sibling's reply would match nothing, the fail-closed arm would not fire, and the loop the
94
+ * set exists to close would reopen silently on a deployment that looks configured. Scoped here, a
95
+ * sibling still resolves live and an unresolvable one correctly marks the set incomplete.
96
+ * `NOTION_BOT_NAME` is NOT scoped: it is a display name the judge reads, never an identity anything
97
+ * is compared against, and a deployment that renames its agent means the new name everywhere.
98
+ */
99
+ export declare function resolveNotionBotUser(credentialId: string, credential: () => Promise<ResolvedNotionCredential | undefined>): () => Promise<{
100
+ id?: string;
101
+ name?: string;
102
+ }>;
103
+ /** Reset the cached bot users AND the cached reachability verdicts (tests only). Both are keyed by
104
+ * credential id and both live for the process lifetime, so a test that resets one and not the other
105
+ * would carry a stale answer into the next case. */
106
+ export declare function _resetNotionBotUserCache(): void;
107
+ //# sourceMappingURL=notion-bot-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-bot-user.d.ts","sourceRoot":"","sources":["../../../agent/channels/notion-bot-user.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAyC,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAKvG;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,eAAe;IAC9B;qGACiG;IACjG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC;wEACoE;IACpE,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,oBAAoB,EAAE,SAAS,MAAM,EAAE,EACvC,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,EAC9D,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GACnD,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAwCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,GAC9D,MAAM,OAAO,CAAC;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B/C;AAED;;qDAEqD;AACrD,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C"}
@@ -0,0 +1,192 @@
1
+ // notion-bot-user — THE deployment's own Notion identity, per integration: the bot user id every
2
+ // road that has to tell "our own words" from someone else's compares against.
3
+ //
4
+ // 🔴 IT LIVES IN ITS OWN MODULE BECAUSE TWO ROADS NEED IT (OPE-1857). The ingress road has always
5
+ // held it — `classifyNotionComment` drops a self-authored comment, and `notionCommentIsStopDirective`
6
+ // refuses one — and it sat as a module-private helper inside `notion.ts`. The SEAT CATCH-UP needs the
7
+ // same answer: it reads the page's own discussion since the seat last woke, and the seat's previous
8
+ // reply is IN that window. Without this the catch-up cannot recognise our own comment, and Notion's
9
+ // comment payload gives it nothing else to go on — `created_by` is a partial user (an id and an
10
+ // object, no `type`), so our own reply is indistinguishable from a person's by shape alone. A second
11
+ // copy of this resolver would be a second spelling of one identity, which is the class OPE-1857 is.
12
+ //
13
+ // 🔴 CACHED PER CREDENTIAL (OPE-467), not per deployment. EVERY Notion integration has its OWN bot
14
+ // user id, so a deployment running a second integration for a bound domain has two of them. One
15
+ // shared cache would compare a reply against the WRONG identity and break the loop guard in both
16
+ // directions: the agent could either loop on its own replies (its id never matches) or drop real
17
+ // human comments. The key is the credential id, which is exactly one integration.
18
+ //
19
+ // FAIL-SOFT, AND THE TWO ROADS READ AN UNRESOLVED ID DIFFERENTLY. A failed resolve answers `{}` and
20
+ // is CACHED as such for the process lifetime.
21
+ // • THE INGRESS ROAD FAILS CLOSED: `classifyNotionComment` drops on "unresolved bot user id", so
22
+ // nothing dispatches rather than risk looping on our own replies.
23
+ // • THE CATCH-UP ROAD DOES NOT. With no id, our own comment reads as a PERSON and enters the
24
+ // seat's context at the `unauth` floor. That is deliberate and `notion-catch-up.ts` states and
25
+ // defends it where it reads this resolver: blinding a context read on a transient
26
+ // `GET /v1/users/me` failure would re-create the OPE-1857 symptom — a seat that keeps nothing.
27
+ // The ingress road's fail-closed arm covers the PRIMARY id only: a deployment that cannot
28
+ // resolve THAT dispatches no Notion wake and therefore takes no catch-up. An unresolved SIBLING
29
+ // still wakes on a person-marked comment (classifyNotionComment step 5), so its own replies can
30
+ // reach a seat's context as a person's — `notion-catch-up.ts` states that residual.
31
+ import { retrieveBotUser, NOTION_INGRESS_RETRY } from "./notion-api.js";
32
+ // The ORG-DEFAULT credential id, imported rather than spelled: the override scope below is a
33
+ // security decision, and a second spelling of that id would silently widen it.
34
+ import { NOTION_CHANNEL_CREDENTIAL } from "./notion-credentials.js";
35
+ /**
36
+ * Resolve the deployment's own bot user ids: the already-resolved `primary`, plus one per entry of
37
+ * `siblingCredentialIds` — every CONFIGURED INTEGRATION EXCEPT the one this delivery verified under.
38
+ * The resolver is the SAME per-credential one and cache the loop guard already reads, so no second
39
+ * spelling of one identity can exist.
40
+ *
41
+ * 🔴 THE ADDED INGRESS COST, EXACTLY: N-1 extra `GET /v1/users/me` calls for N configured
42
+ * integrations, on the FIRST delivery of a process, and ZERO after it —
43
+ * {@link resolveNotionBotUser} memoises on the credential id. The verifying integration is excluded
44
+ * here precisely so the number is N-1 and not N: its id is already in hand, and re-resolving it
45
+ * would charge a live resolver for an answer the caller just took. A SINGLE-INTEGRATION deployment —
46
+ * every deployment before OPE-1921 — therefore pays NOTHING at all, and `notion-test.ts`'s
47
+ * ack-attribution fixture measures that: its `botTriggerPage` bucket is unchanged.
48
+ *
49
+ * A resolver that THROWS counts as unresolved rather than failing the delivery: this runs on the
50
+ * awaited ingress path, and a thrown identity lookup must not turn into a 500 Notion will retry.
51
+ *
52
+ * 🔴 AN INTEGRATION THAT CANNOT POST IS NOT A LOOP RISK, AND MARKING THE SET INCOMPLETE FOR ONE IS
53
+ * PURE AVAILABILITY LOSS. `resolve` answers `undefined` for two different failures: a working key
54
+ * whose `GET /v1/users/me` failed — that integration CAN post, so we must fail closed — and an
55
+ * integration THIS DEPLOYMENT holds no usable API key for, so it cannot post FROM HERE. `canPost`
56
+ * separates them, and it is consulted ONLY when `resolve` came back empty, so the ordinary path
57
+ * pays nothing for it. Without the split, a domain whose credential is declared but whose secret is
58
+ * unset or revoked would silence Notion on EVERY page of the deployment, including pages
59
+ * the healthy org-default integration serves — a blast radius nothing buys. Absent ⇒ every
60
+ * unresolved sibling is treated as able to post, which is the conservative reading.
61
+ *
62
+ * 🔴 THE CLAIM IS "NOT A LOOP RISK FROM HERE", NEVER "CANNOT HAVE AUTHORED ANY COMMENT", and the
63
+ * difference is real. `canPost` establishes only that THIS deployment cannot resolve a key for that
64
+ * credential right now. A token an operator deleted here, or one another environment still holds,
65
+ * can keep authoring comments on the shared page — and this deployment then reads those replies as a
66
+ * person's, because that id is absent from `all` while `complete` stays true. The residual is
67
+ * accepted: a loop needs two of OUR OWN integrations answering each other, and an integration we
68
+ * cannot post under is not one of the two.
69
+ */
70
+ export async function collectNotionOwnBotIds(primary, siblingCredentialIds, resolve, canPost) {
71
+ const all = new Set();
72
+ if (primary)
73
+ all.add(primary);
74
+ // An unresolved PRIMARY is already an incomplete set. Step 1 of the classifier drops on it before
75
+ // step 5 is reached, so this line changes no verdict — it keeps the flag's meaning honest for any
76
+ // later reader of the structure.
77
+ let complete = primary !== undefined;
78
+ for (const credentialId of new Set(siblingCredentialIds)) {
79
+ let id;
80
+ try {
81
+ id = await resolve(credentialId);
82
+ }
83
+ catch {
84
+ id = undefined;
85
+ }
86
+ if (id) {
87
+ all.add(id);
88
+ continue;
89
+ }
90
+ // Unresolved. Only an integration that can REACH Notion could have authored the comment in
91
+ // hand, so only that one makes the set incomplete.
92
+ // 🔴 AN UNKNOWN ANSWER COUNTS AS ABLE TO POST. `resolveNotionCredential` signals the real
93
+ // no-usable-key cases by RETURNING `undefined` — an unregistered credential, one with no
94
+ // `secretRef`, and a broker `CredentialError` all take that path — so it re-throws only an
95
+ // UNEXPECTED fault (a store timeout, a decrypt error). A throw therefore says the state is
96
+ // unknown, never "this integration has no key", and the unknown side of this question has to
97
+ // fall the way the absent-`canPost` default falls: treat the sibling as able to post and let
98
+ // the set go incomplete. `reachableOnce` holds that direction.
99
+ let reachable = true;
100
+ if (canPost)
101
+ reachable = await reachableOnce(credentialId, canPost);
102
+ if (reachable)
103
+ complete = false;
104
+ }
105
+ return { primary, all, complete };
106
+ }
107
+ /**
108
+ * Can this credential reach Notion at all — memoised for the PROCESS LIFETIME, the same lifetime
109
+ * {@link botUserCache} gives a resolved bot user.
110
+ *
111
+ * 🔴 WITHOUT THE MEMO THIS QUESTION IS ASKED ON EVERY DELIVERY, FOR EVER. The answer is consulted
112
+ * only for a sibling whose bot user id did not resolve — and `botUserCache` holds THAT failure for
113
+ * the process lifetime, so the arm runs on every subsequent delivery of the process. The webhook
114
+ * core's own credential memo is per-DELIVERY (`notion.ts` builds a fresh `Map` per delivery), so
115
+ * each of those deliveries paid a fresh operational-store read on the AWAITED ingress path. Worse,
116
+ * on the default `db` broker a ref with no stored row writes one `CREDENTIAL_UNRESOLVED` audit row
117
+ * per attempt by design, so a declared-but-unstored sibling credential — a configuration
118
+ * `docs/deploy/surfaces/notion.md` calls supported — wrote one row per ingress delivery indefinitely
119
+ * and drowned the repeated-refusal RATE that row exists to show. `notion-catch-up.ts` refuses that
120
+ * same cost on the catch-up road; this is the ingress road's answer to it.
121
+ *
122
+ * The cached value is the VERDICT, not the credential, so no key is held here. Both answers last
123
+ * until restart, which matches `botUserCache`: a sibling whose id will not resolve stays unresolved
124
+ * until then anyway, so a fresher reachability answer could not change any verdict.
125
+ */
126
+ const reachableCache = new Map();
127
+ function reachableOnce(credentialId, canPost) {
128
+ const hit = reachableCache.get(credentialId);
129
+ if (hit)
130
+ return hit;
131
+ // `.catch(() => true)` is the fail-CLOSED direction, and it is the whole point: an unknown answer
132
+ // leaves the sibling counted as able to post, which marks the set incomplete. See the call site.
133
+ const verdict = canPost(credentialId).catch(() => true);
134
+ reachableCache.set(credentialId, verdict);
135
+ return verdict;
136
+ }
137
+ const botUserCache = new Map();
138
+ /** Where this module's own diagnostics go — the same prefix every Notion channel module logs under. */
139
+ function log(msg) {
140
+ console.log(`[open-everywhere:notion] ${msg}`);
141
+ }
142
+ /**
143
+ * The bot user (id and display name) for ONE integration, memoised on `credentialId`.
144
+ * `credential` is a THUNK so an operator override short-circuits the credential resolution entirely.
145
+ *
146
+ * 🔴 `NOTION_BOT_USER_ID` PINS THE ORG DEFAULT ONLY, AND SCOPING IT IS LOAD-BEARING (OPE-1921). It
147
+ * is ONE id, and two Notion integrations NEVER share a bot user — so an override applied to every
148
+ * credential would answer every integration with the org default's id. That is worse than no
149
+ * override: the cross-integration loop guard would hold a one-element set AND report it COMPLETE,
150
+ * so a sibling's reply would match nothing, the fail-closed arm would not fire, and the loop the
151
+ * set exists to close would reopen silently on a deployment that looks configured. Scoped here, a
152
+ * sibling still resolves live and an unresolvable one correctly marks the set incomplete.
153
+ * `NOTION_BOT_NAME` is NOT scoped: it is a display name the judge reads, never an identity anything
154
+ * is compared against, and a deployment that renames its agent means the new name everywhere.
155
+ */
156
+ export function resolveNotionBotUser(credentialId, credential) {
157
+ return () => {
158
+ const cached = botUserCache.get(credentialId);
159
+ if (cached)
160
+ return cached;
161
+ const overrideId = credentialId === NOTION_CHANNEL_CREDENTIAL ? process.env.NOTION_BOT_USER_ID : undefined;
162
+ const overrideName = process.env.NOTION_BOT_NAME;
163
+ const named = (u) => ({ id: u.id, name: overrideName && overrideName.length > 0 ? overrideName : u.name });
164
+ const resolved = overrideId && overrideId.length > 0
165
+ ? Promise.resolve(named({ id: overrideId }))
166
+ : credential()
167
+ // 🔴 THE INGRESS POLICY, BECAUSE THIS RESOLVE IS ON THE AWAITED INGRESS PATH (OPE-1254).
168
+ // `handleNotionDelivery` awaits `deps.resolveBotUserId` BEFORE `retrieveComment`, and
169
+ // this is the only thing behind it. On the shared defaults it could spend 60 s of backoff
170
+ // on its own, ahead of every call the webhook core's own `ingressCallOpts` bounds — so
171
+ // the delivery's worst case was ~90 s against a 300 s ceiling, not the ~60 s the seam
172
+ // claims. Worse, a failure here is CACHED for the process lifetime as `{}` below, and an
173
+ // unresolved bot id makes the classifier fail closed: one rate-limit episode during the
174
+ // first resolve silences every later delivery on that instance. Bounding the wait shrinks
175
+ // that window.
176
+ .then((cred) => (cred ? retrieveBotUser({ ...cred, retry: NOTION_INGRESS_RETRY }).then(named) : {}))
177
+ .catch((err) => {
178
+ log(`could not resolve bot user for credential "${credentialId}" (GET /v1/users/me failed): ${String(err)}`);
179
+ return {};
180
+ });
181
+ botUserCache.set(credentialId, resolved);
182
+ return resolved;
183
+ };
184
+ }
185
+ /** Reset the cached bot users AND the cached reachability verdicts (tests only). Both are keyed by
186
+ * credential id and both live for the process lifetime, so a test that resets one and not the other
187
+ * would carry a stale answer into the next case. */
188
+ export function _resetNotionBotUserCache() {
189
+ botUserCache.clear();
190
+ reachableCache.clear();
191
+ }
192
+ //# sourceMappingURL=notion-bot-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-bot-user.js","sourceRoot":"","sources":["../../../agent/channels/notion-bot-user.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { readNotionComments, resolveNotionCredential, type ResolvedNotionCredential } from "./notion-api.js";
2
+ import { type Domain, type NormalizedMessage, type SeatCatchUpFetch } from "@open-everywhere/core/agent/adapter-api.js";
3
+ /** Injected seam so the fetch drives offline in tests; defaults to the live brokered credential. */
4
+ export interface NotionCatchUpDeps {
5
+ readonly readComments: typeof readNotionComments;
6
+ readonly resolveCredential: typeof resolveNotionCredential;
7
+ /** The domain roster the per-surface credential is resolved against. Injected so the fetch drives
8
+ * with no config registered; the live default is the loaded roster. */
9
+ readonly domains?: readonly Domain[];
10
+ /** ONE own Notion bot id, pinning the whole self set — a TEST override, so a fetch drives with a
11
+ * fixed identity and resolves nothing. Present ⇒ {@link selfActorIdFor} is never called and no
12
+ * sibling integration is resolved. The live read builds the set through `collectCatchUpSelfIds`. */
13
+ readonly selfActorId?: string;
14
+ /**
15
+ * Resolve the deployment's own bot user id for ONE integration. The live default is the SAME
16
+ * per-credential resolver and cache the ingress road reads (`notion-bot-user.ts`), so the catch-up
17
+ * and the loop guard can never hold two answers for one integration. `collectCatchUpSelfIds` calls
18
+ * it once per CONFIGURED integration, so the seat recognises its own words whichever one posted
19
+ * them (OPE-1921).
20
+ *
21
+ * 🔴 IT IS LOAD-BEARING SINCE OPE-1857, NOT A LABEL. Notion's comment payload carries a partial
22
+ * `created_by` — an id and an object, no `type` — so this read cannot tell our own reply from a
23
+ * person's by SHAPE. Before OPE-1857 an absent `type` made every author a `bot`, which refused our
24
+ * own comment as a side effect of refusing everyone. Now that an unsignalled author is a person,
25
+ * the id comparison is the ONLY thing keeping the seat's own previous reply — which lands in the
26
+ * very discussion this read sweeps — out of its next wake as another person's words.
27
+ * 🔴 THE READING CREDENTIAL AND THE POSTING ONE CAN DIFFER, AND THAT NO LONGER LOSES THE REPLY.
28
+ * This read's credential comes from the page's DOMAIN BINDING, while the reply sitting in the
29
+ * discussion was posted under the DELIVERY's carried credential, which wins where the two differ
30
+ * (OPE-499, `notion-credentials.ts`). On a page served by two integrations they disagree, and the
31
+ * seat's own reply used to read as a person's. `collectCatchUpSelfIds` resolves BOTH, so the
32
+ * comparison no longer depends on which credential posted — and the delivery's credential id,
33
+ * which this seam once needed on `SeatCatchUpRequest` to close this, is not required after all.
34
+ * 🔴 AN UNRESOLVED ID DOES NOT BLIND THIS READ, and it does not have to: the INGRESS road fails
35
+ * CLOSED on the same id from the same cache (`classifyNotionComment` drops on "unresolved bot user
36
+ * id"), so a deployment that cannot resolve it dispatches no Notion wake at all and takes no
37
+ * catch-up. Blinding the read here as well would re-create the OPE-1857 symptom — a seat that
38
+ * keeps nothing — out of a transient `GET /v1/users/me` failure.
39
+ */
40
+ readonly selfActorIdFor?: (credentialId: string, credential: () => Promise<ResolvedNotionCredential | undefined>) => Promise<string | undefined>;
41
+ }
42
+ /** The fetch, with its seams exposed so the contract test drives it with no network. */
43
+ export declare function fetchNotionCatchUpWindow(req: {
44
+ container: string;
45
+ threadRoot?: string;
46
+ threadAnchor?: string;
47
+ sinceMs: number;
48
+ channelKey?: string;
49
+ }, deps?: NotionCatchUpDeps): Promise<readonly NormalizedMessage[]>;
50
+ /**
51
+ * 🔴 NOTION FLOORS `created_time` TO THE MINUTE, and this is the number the shared catch-up road
52
+ * widens both of its bounds by (OPE-1847, `core/agent/channels/seat-catch-up.ts`
53
+ * {@link SeatCatchUpDeclaration.timestampPrecisionMs}).
54
+ * It is the VENDOR'S UNIT, not a margin: every comment posted inside one wall-clock minute comes back
55
+ * carrying that minute's opening instant. Declare it too small and a comment in the trigger's own
56
+ * minute is bounded out of the window it belongs to — the ship #211 red, where the seat read two
57
+ * comments and kept none. Declare it too large and the seat is handed comments from before its window.
58
+ * Measured on the live workspace (OPE-1711) and the repository's own e2e driver floors to the same
59
+ * unit (`core/scripts/e2e/notion-driver.ts` `notionMinuteFloor`).
60
+ */
61
+ export declare const NOTION_TIMESTAMP_PRECISION_MS = 60000;
62
+ /** Notion's registered {@link SeatCatchUpFetch} — the one thing this surface contributes to the shared path. */
63
+ export declare const notionSeatCatchUpFetch: SeatCatchUpFetch;
64
+ //# sourceMappingURL=notion-catch-up.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-catch-up.d.ts","sourceRoot":"","sources":["../../../agent/channels/notion-catch-up.ts"],"names":[],"mappings":"AA+DA,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAA6B,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGxI,OAAO,EAA4B,KAAK,MAAM,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AA0FlJ,oGAAoG;AACpG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,EAAE,OAAO,kBAAkB,CAAC;IACjD,QAAQ,CAAC,iBAAiB,EAAE,OAAO,uBAAuB,CAAC;IAC3D;4EACwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;yGAEqG;IACrG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAClJ;AAkED,wFAAwF;AACxF,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5G,IAAI,GAAE,iBAA4B,GACjC,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAmDvC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD,gHAAgH;AAChH,eAAO,MAAM,sBAAsB,EAAE,gBAOjC,CAAC"}