hazo_notify 4.0.2 → 5.0.1

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.
@@ -1,19 +1,19 @@
1
1
  /**
2
- * Inbox connection holder. Mirrors template_manager's pattern: caller
3
- * provides a hazo_connect factory at boot via `initInbox()`; subsequent
4
- * storage calls read the resolved instance from this module.
5
- *
6
- * @packageDocumentation
2
+ * Inbox connection holder. Stash the resolved adapter on globalThis so it
3
+ * survives Next.js dev-mode module duplication (each route bundle re-imports
4
+ * this file separately; the global reference unifies them).
7
5
  */
8
- import type { HazoConnectInstance } from "../template_manager/types.js";
6
+ import type { HazoConnectAdapter } from "hazo_connect/server";
9
7
  export interface InitInboxOptions {
10
- /** Factory returning (or resolving to) a hazo_connect instance. */
11
- hazo_connect_factory: () => Promise<HazoConnectInstance> | HazoConnectInstance;
8
+ /** Either an adapter directly... */
9
+ adapter?: HazoConnectAdapter;
10
+ /** ...or a (possibly async) factory that produces one. */
11
+ adapter_factory?: () => HazoConnectAdapter | Promise<HazoConnectAdapter>;
12
12
  }
13
- /** Boot-time init. Must be called before any dispatch() / worker call. */
14
- export declare function initInbox(opts: InitInboxOptions): Promise<HazoConnectInstance>;
15
- /** Internal: get the resolved instance. Throws if not initialised. */
16
- export declare function getInboxConnection(): HazoConnectInstance;
13
+ /** Boot-time init. Must be called before any storage / worker call. */
14
+ export declare function initInbox(opts: InitInboxOptions): Promise<HazoConnectAdapter>;
15
+ /** Internal: get the resolved adapter. Throws if not initialised. */
16
+ export declare function getInboxConnection(): HazoConnectAdapter;
17
17
  /** Test-only: reset the holder. */
18
18
  export declare function __resetInboxConnection(): void;
19
19
  //# sourceMappingURL=connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/lib/inbox/connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAUxE,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,oBAAoB,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;CAChF;AAED,0EAA0E;AAC1E,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CASpF;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,IAAI,mBAAmB,CAMxD;AAED,mCAAmC;AACnC,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/lib/inbox/connection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAK9D,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1E;AAUD,uEAAuE;AACvE,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAanF;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,kBAAkB,CAIvD;AAED,mCAAmC;AACnC,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -1,31 +1,34 @@
1
- /**
2
- * Inbox connection holder. Mirrors template_manager's pattern: caller
3
- * provides a hazo_connect factory at boot via `initInbox()`; subsequent
4
- * storage calls read the resolved instance from this module.
5
- *
6
- * @packageDocumentation
7
- */
8
- // Stash on globalThis so the resolved connection survives Next.js dev-mode
9
- // module duplication. Each route bundle imports this file separately; the
10
- // global reference unifies them.
11
1
  const CONN_KEY = "__hazo_notify_inbox_connection__";
12
2
  const g = globalThis;
13
- /** Boot-time init. Must be called before any dispatch() / worker call. */
3
+ function looksLikeAdapter(a) {
4
+ if (typeof a !== "object" || a === null)
5
+ return false;
6
+ const obj = a;
7
+ return typeof obj.query === "function"
8
+ && typeof obj.claimRows === "function"
9
+ && typeof obj.getConfig === "function";
10
+ }
11
+ /** Boot-time init. Must be called before any storage / worker call. */
14
12
  export async function initInbox(opts) {
15
- const conn = await opts.hazo_connect_factory();
16
- if (!conn.raw) {
17
- throw new Error("initInbox: hazo_connect_factory must return an instance supporting raw SQL");
13
+ let adapter = opts.adapter;
14
+ if (!adapter && opts.adapter_factory) {
15
+ adapter = await opts.adapter_factory();
16
+ }
17
+ if (!adapter) {
18
+ throw new Error("initInbox: must provide adapter or adapter_factory");
18
19
  }
19
- g[CONN_KEY] = conn;
20
- return conn;
20
+ if (!looksLikeAdapter(adapter)) {
21
+ throw new Error("initInbox: argument must be a HazoConnectAdapter (with query, claimRows, getConfig)");
22
+ }
23
+ g[CONN_KEY] = adapter;
24
+ return adapter;
21
25
  }
22
- /** Internal: get the resolved instance. Throws if not initialised. */
26
+ /** Internal: get the resolved adapter. Throws if not initialised. */
23
27
  export function getInboxConnection() {
24
- const conn = g[CONN_KEY];
25
- if (!conn) {
28
+ const a = g[CONN_KEY];
29
+ if (!a)
26
30
  throw new Error("inbox: initInbox() must be called before storage access");
27
- }
28
- return conn;
31
+ return a;
29
32
  }
30
33
  /** Test-only: reset the holder. */
31
34
  export function __resetInboxConnection() {
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/lib/inbox/connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,2EAA2E;AAC3E,0EAA0E;AAC1E,iCAAiC;AACjC,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACpD,MAAM,CAAC,GAAG,UAET,CAAC;AAOF,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAsB;IACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,sBAAsB;IACpC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/lib/inbox/connection.ts"],"names":[],"mappings":"AAOA,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACpD,MAAM,CAAC,GAAG,UAAkE,CAAC;AAS7E,SAAS,gBAAgB,CAAC,CAAU;IAClC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,GAAG,GAAG,CAA4B,CAAC;IACzC,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU;WAC/B,OAAO,GAAG,CAAC,SAAS,KAAK,UAAU;WACnC,OAAO,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC;AAC7C,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAsB;IACpD,IAAI,OAAO,GAAmC,IAAI,CAAC,OAAO,CAAC;IAC3D,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IACzG,CAAC;IACD,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,kBAAkB;IAChC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACnF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,sBAAsB;IACpC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACrB,CAAC"}
@@ -1,21 +1,121 @@
1
- import type { UpsertInboxRowInput, UpsertInboxRowResult, UpsertDeliveryInput, UpsertDeliveryResult, ClaimedDelivery } from "./dialects/types.js";
2
- import type { InboxRow } from "./types.js";
1
+ import type { UpsertInboxRowInput, UpsertInboxRowResult, UpsertDeliveryInput, UpsertDeliveryResult, ClaimedDelivery, InboxRow } from "./types.js";
2
+ /**
3
+ * Upsert an inbox row using a claim-first strategy:
4
+ *
5
+ * 1. Try to increment an existing open batch that matches `batch_key` and
6
+ * `batch_closed_at IS NULL`. This preserves the increment-on-conflict
7
+ * semantics of the original Postgres
8
+ * `ON CONFLICT (batch_key) WHERE batch_closed_at IS NULL` partial-index upsert.
9
+ * 2. If no open batch found, insert a fresh row.
10
+ *
11
+ * Race-condition trade-off: if two workers concurrently find no open batch and
12
+ * both insert, both succeed (no unique index guards the SQLite/adapter path).
13
+ * The original Postgres SQL used a partial unique index for true atomicity.
14
+ * For Hazodocs (single-worker), this race window is acceptable; adding retry
15
+ * logic would require error-code parsing not available in hazo_connect.
16
+ */
3
17
  export declare function upsertInboxRow(i: UpsertInboxRowInput): Promise<UpsertInboxRowResult>;
18
+ /**
19
+ * Upsert a channel delivery row using a two-claim strategy that preserves the
20
+ * original Postgres CASE-WHEN semantic for `flush_after`:
21
+ *
22
+ * 1. Claim an **existing fresh row** (attempt_count = 0) — update both `payload`
23
+ * and `flush_after` (the delivery hasn't been tried yet, so rescheduling is safe).
24
+ * 2. Claim an **existing in-flight row** (attempt_count > 0) — update `payload`
25
+ * only; preserve `flush_after` to avoid resetting an active retry schedule.
26
+ * 3. If neither claim succeeds, no row exists — insert a new one.
27
+ *
28
+ * The two claims are mutually exclusive so at most one succeeds per call.
29
+ */
4
30
  export declare function upsertDelivery(i: UpsertDeliveryInput): Promise<UpsertDeliveryResult>;
5
31
  export declare function claimDueDeliveries(channel_id: string, batch_size: number): Promise<ClaimedDelivery[]>;
32
+ /**
33
+ * Task 2.7 — markDeliverySent via CrudService.updateById
34
+ *
35
+ * Sets status=sent, records the provider message_id, and stamps finalized_at.
36
+ * updateById returns T[] — ignored here (fire-and-forget).
37
+ */
6
38
  export declare function markDeliverySent(id: string, message_id: string): Promise<void>;
39
+ /**
40
+ * Task 2.8 — markDeliveryFailed via CrudService.updateById
41
+ *
42
+ * Sets status=failed, stores the error (truncated to 1000 chars), and stamps finalized_at.
43
+ * updateById returns T[] — ignored here (fire-and-forget).
44
+ */
7
45
  export declare function markDeliveryFailed(id: string, error: string): Promise<void>;
46
+ /**
47
+ * Task 2.9 — rescheduleDelivery via CrudService.updateById
48
+ *
49
+ * Updates flush_after and last_error for the next retry. Status stays 'pending'.
50
+ * updateById returns T[] — ignored here (fire-and-forget).
51
+ */
8
52
  export declare function rescheduleDelivery(id: string, flush_after: string, error: string): Promise<void>;
53
+ /**
54
+ * Task 2.10 — closeStaleBatches via adapter.claimRows
55
+ *
56
+ * Closes inbox rows whose batch_closed_at is NULL (open) and whose
57
+ * created_at is older than (now - window_ms).
58
+ *
59
+ * Returns the number of batches closed.
60
+ */
9
61
  export declare function closeStaleBatches(window_ms: number): Promise<number>;
62
+ /**
63
+ * Task 2.11a — purgeReadInbox via QueryBuilder DELETE
64
+ *
65
+ * Deletes inbox rows that have been read and whose read_at is older than
66
+ * `older_than`. Returns the number of rows deleted.
67
+ *
68
+ * QueryBuilder 'neq' with null → IS NOT NULL (via translateWhereCondition).
69
+ * QueryBuilder 'lt' → read_at < older_than.
70
+ */
10
71
  export declare function purgeReadInbox(older_than: string): Promise<number>;
72
+ /**
73
+ * Task 2.11b — purgeFinalizedDeliveries via QueryBuilder DELETE
74
+ *
75
+ * Deletes delivery rows that have been finalized (sent or failed) and whose
76
+ * finalized_at is older than `older_than`. Returns the number of rows deleted.
77
+ */
11
78
  export declare function purgeFinalizedDeliveries(older_than: string): Promise<number>;
12
79
  export interface ListOptions {
13
80
  limit?: number;
14
81
  cursor?: string;
15
82
  surface?: "in_app" | "banner";
16
83
  }
84
+ /**
85
+ * Task 2.12a — listUnreadForUser via QueryBuilder
86
+ *
87
+ * Returns unread inbox rows for the given user/scope, ordered by created_at
88
+ * descending with optional cursor (created_at < cursor) and limit.
89
+ *
90
+ * Surface filtering (in_app / banner) requires dialect-specific JSONB or
91
+ * json_extract access. Rather than branching on adapter type at this layer,
92
+ * callers filter in-memory when surface filtering is needed. This keeps the
93
+ * storage layer adapter-agnostic.
94
+ *
95
+ * QueryBuilder 'is' with null → IS NULL (via translateWhereCondition).
96
+ */
17
97
  export declare function listUnreadForUser(user_id: string, scope_id: string, opts?: ListOptions): Promise<InboxRow[]>;
98
+ /**
99
+ * Task 2.12b — unreadCount via QueryBuilder
100
+ *
101
+ * Counts unread inbox rows for the given user/scope.
102
+ * QueryBuilder 'is' with null → IS NULL.
103
+ */
18
104
  export declare function unreadCount(user_id: string, scope_id: string): Promise<number>;
105
+ /**
106
+ * Task 2.13a — markRead via claimRows
107
+ *
108
+ * Sets read_at = now() for the given inbox row, scoped by user_id to prevent
109
+ * cross-user reads. Only updates unread rows. Returns true iff a row was
110
+ * actually marked read by this call.
111
+ */
19
112
  export declare function markRead(id: string, user_id: string): Promise<boolean>;
113
+ /**
114
+ * Task 2.13b — markAllRead via claimRows
115
+ *
116
+ * Sets read_at = now() for every unread inbox row belonging to the given
117
+ * user/scope. Only updates unread rows. Returns the number of rows actually
118
+ * marked read by this call (already-read rows are not touched).
119
+ */
20
120
  export declare function markAllRead(user_id: string, scope_id: string): Promise<number>;
21
121
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/lib/inbox/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,wBAAsB,cAAc,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAG1F;AAED,wBAAsB,cAAc,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAG1F;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAG3G;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAGpE;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBAGjE;AAED,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBAGtF;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG1E;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAED,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlF;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC/B;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoBrB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASpF;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5E;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUpF"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/lib/inbox/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0C1F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2C1F;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAwD3G;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpF;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjF;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQtG;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQxE;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlF;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC/B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAarB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASpF;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5E;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUpF"}
@@ -1,94 +1,324 @@
1
+ import { QueryBuilder, createCrudService } from "hazo_connect/server";
1
2
  import { getInboxConnection } from "./connection.js";
2
- import { pickDialect } from "./dialects/index.js";
3
- function d() {
4
- const conn = getInboxConnection();
5
- return { conn, dialect: pickDialect(conn) };
6
- }
3
+ /**
4
+ * Upsert an inbox row using a claim-first strategy:
5
+ *
6
+ * 1. Try to increment an existing open batch that matches `batch_key` and
7
+ * `batch_closed_at IS NULL`. This preserves the increment-on-conflict
8
+ * semantics of the original Postgres
9
+ * `ON CONFLICT (batch_key) WHERE batch_closed_at IS NULL` partial-index upsert.
10
+ * 2. If no open batch found, insert a fresh row.
11
+ *
12
+ * Race-condition trade-off: if two workers concurrently find no open batch and
13
+ * both insert, both succeed (no unique index guards the SQLite/adapter path).
14
+ * The original Postgres SQL used a partial unique index for true atomicity.
15
+ * For Hazodocs (single-worker), this race window is acceptable; adding retry
16
+ * logic would require error-code parsing not available in hazo_connect.
17
+ */
7
18
  export async function upsertInboxRow(i) {
8
- const { conn, dialect } = d();
9
- return dialect.upsertInboxRow(conn, i);
19
+ const adapter = getInboxConnection();
20
+ // Try to increment an existing open batch first.
21
+ const claimed = await adapter.claimRows({
22
+ table: "hazo_notify_inbox",
23
+ where: { batch_key: i.batch_key, batch_closed_at: null },
24
+ set: {
25
+ aggregate_count: { increment: 1 },
26
+ in_app_text: i.in_app_text,
27
+ payload: JSON.stringify(i.payload),
28
+ updated_at: { $now: true },
29
+ },
30
+ returning: ["id"],
31
+ limit: 1,
32
+ });
33
+ if (claimed.length > 0) {
34
+ return { id: claimed[0].id, inserted: false };
35
+ }
36
+ // No open batch — insert a new row.
37
+ const rows = await adapter.query(new QueryBuilder()
38
+ .from("hazo_notify_inbox")
39
+ .returning("id"), "POST", {
40
+ scope_id: i.scope_id,
41
+ user_id: i.user_id,
42
+ event_type: i.event_type,
43
+ subject_id: i.subject_id,
44
+ batch_key: i.batch_key,
45
+ in_app_text: i.in_app_text,
46
+ deep_link: i.deep_link,
47
+ payload: JSON.stringify(i.payload),
48
+ surfaces: JSON.stringify(i.surfaces),
49
+ batch_closed_at: i.batch_closed_at,
50
+ });
51
+ return { id: rows[0].id, inserted: true };
10
52
  }
53
+ /**
54
+ * Upsert a channel delivery row using a two-claim strategy that preserves the
55
+ * original Postgres CASE-WHEN semantic for `flush_after`:
56
+ *
57
+ * 1. Claim an **existing fresh row** (attempt_count = 0) — update both `payload`
58
+ * and `flush_after` (the delivery hasn't been tried yet, so rescheduling is safe).
59
+ * 2. Claim an **existing in-flight row** (attempt_count > 0) — update `payload`
60
+ * only; preserve `flush_after` to avoid resetting an active retry schedule.
61
+ * 3. If neither claim succeeds, no row exists — insert a new one.
62
+ *
63
+ * The two claims are mutually exclusive so at most one succeeds per call.
64
+ */
11
65
  export async function upsertDelivery(i) {
12
- const { conn, dialect } = d();
13
- return dialect.upsertDelivery(conn, i);
66
+ const adapter = getInboxConnection();
67
+ // Step 1: claim a fresh (not-yet-attempted) row — update payload + flush_after.
68
+ const claimedFresh = await adapter.claimRows({
69
+ table: "hazo_notify_channel_deliveries",
70
+ where: { inbox_id: i.inbox_id, channel_id: i.channel_id, attempt_count: 0 },
71
+ set: { payload: JSON.stringify(i.payload), flush_after: i.flush_after, updated_at: { $now: true } },
72
+ returning: ["id"],
73
+ limit: 1,
74
+ });
75
+ if (claimedFresh.length > 0) {
76
+ return { id: claimedFresh[0].id, inserted: false, attempt_in_flight: false };
77
+ }
78
+ // Step 2: claim an in-flight row (attempt_count > 0) — update payload only,
79
+ // preserve flush_after so the retry schedule is not reset.
80
+ const claimedInFlight = await adapter.claimRows({
81
+ table: "hazo_notify_channel_deliveries",
82
+ where: { inbox_id: i.inbox_id, channel_id: i.channel_id, attempt_count: { gt: 0 } },
83
+ set: { payload: JSON.stringify(i.payload), updated_at: { $now: true } },
84
+ returning: ["id"],
85
+ limit: 1,
86
+ });
87
+ if (claimedInFlight.length > 0) {
88
+ return { id: claimedInFlight[0].id, inserted: false, attempt_in_flight: true };
89
+ }
90
+ // Step 3: no existing row — insert a new delivery.
91
+ const rows = await adapter.query(new QueryBuilder()
92
+ .from("hazo_notify_channel_deliveries")
93
+ .returning("id"), "POST", {
94
+ inbox_id: i.inbox_id,
95
+ channel_id: i.channel_id,
96
+ payload: JSON.stringify(i.payload),
97
+ flush_after: i.flush_after,
98
+ });
99
+ return { id: rows[0].id, inserted: true, attempt_in_flight: false };
14
100
  }
15
101
  export async function claimDueDeliveries(channel_id, batch_size) {
16
- const { conn, dialect } = d();
17
- return dialect.claimDueDeliveries(conn, channel_id, batch_size);
102
+ const adapter = getInboxConnection();
103
+ // THE KEY CHANGE (Task 2.6): delegates to adapter.claimRows instead of a
104
+ // dialect-bound raw SQL query (SELECT … FOR UPDATE SKIP LOCKED on Postgres).
105
+ // Strong atomicity on PgAdapter; CAS-optimistic on PostgrestAdapter;
106
+ // serialised transaction on SqliteAdapter. All adapters are supported.
107
+ const claimed = await adapter.claimRows({
108
+ table: "hazo_notify_channel_deliveries",
109
+ where: {
110
+ channel_id,
111
+ status: "pending",
112
+ flush_after: { lte: { $now: true } },
113
+ },
114
+ set: {
115
+ attempt_count: { increment: 1 },
116
+ updated_at: { $now: true },
117
+ },
118
+ returning: ["id", "inbox_id", "channel_id", "payload", "attempt_count"],
119
+ limit: batch_size,
120
+ orderBy: { column: "flush_after", direction: "asc" },
121
+ });
122
+ // Enrich each claimed row with user_id + scope_id from the originating inbox
123
+ // row. N+1 is acceptable: batch sizes are small (~10) and per-call latency
124
+ // dominates. Map `id` → `delivery_id` to match the ClaimedDelivery contract
125
+ // that callers (flush worker) expect.
126
+ return Promise.all(claimed.map(async (r) => {
127
+ const inboxRows = await adapter.query(new QueryBuilder()
128
+ .from("hazo_notify_inbox")
129
+ .select("user_id, scope_id")
130
+ .where("id", "eq", r.inbox_id), "GET");
131
+ const payload = typeof r.payload === "string"
132
+ ? JSON.parse(r.payload)
133
+ : r.payload;
134
+ return {
135
+ delivery_id: r.id,
136
+ inbox_id: r.inbox_id,
137
+ channel_id: r.channel_id,
138
+ payload,
139
+ attempt_count: r.attempt_count,
140
+ user_id: inboxRows[0]?.user_id ?? "",
141
+ scope_id: inboxRows[0]?.scope_id ?? "",
142
+ };
143
+ }));
18
144
  }
145
+ /**
146
+ * Task 2.7 — markDeliverySent via CrudService.updateById
147
+ *
148
+ * Sets status=sent, records the provider message_id, and stamps finalized_at.
149
+ * updateById returns T[] — ignored here (fire-and-forget).
150
+ */
19
151
  export async function markDeliverySent(id, message_id) {
20
- const { conn, dialect } = d();
21
- return dialect.markDeliverySent(conn, id, message_id);
152
+ const adapter = getInboxConnection();
153
+ const crud = createCrudService(adapter, "hazo_notify_channel_deliveries");
154
+ await crud.updateById(id, {
155
+ status: "sent",
156
+ message_id,
157
+ finalized_at: new Date().toISOString(),
158
+ updated_at: new Date().toISOString(),
159
+ });
22
160
  }
161
+ /**
162
+ * Task 2.8 — markDeliveryFailed via CrudService.updateById
163
+ *
164
+ * Sets status=failed, stores the error (truncated to 1000 chars), and stamps finalized_at.
165
+ * updateById returns T[] — ignored here (fire-and-forget).
166
+ */
23
167
  export async function markDeliveryFailed(id, error) {
24
- const { conn, dialect } = d();
25
- return dialect.markDeliveryFailed(conn, id, error);
168
+ const adapter = getInboxConnection();
169
+ const crud = createCrudService(adapter, "hazo_notify_channel_deliveries");
170
+ await crud.updateById(id, {
171
+ status: "failed",
172
+ last_error: error.slice(0, 1000),
173
+ finalized_at: new Date().toISOString(),
174
+ updated_at: new Date().toISOString(),
175
+ });
26
176
  }
177
+ /**
178
+ * Task 2.9 — rescheduleDelivery via CrudService.updateById
179
+ *
180
+ * Updates flush_after and last_error for the next retry. Status stays 'pending'.
181
+ * updateById returns T[] — ignored here (fire-and-forget).
182
+ */
27
183
  export async function rescheduleDelivery(id, flush_after, error) {
28
- const { conn, dialect } = d();
29
- return dialect.rescheduleDelivery(conn, id, flush_after, error);
184
+ const adapter = getInboxConnection();
185
+ const crud = createCrudService(adapter, "hazo_notify_channel_deliveries");
186
+ await crud.updateById(id, {
187
+ flush_after,
188
+ last_error: error,
189
+ updated_at: new Date().toISOString(),
190
+ });
30
191
  }
192
+ /**
193
+ * Task 2.10 — closeStaleBatches via adapter.claimRows
194
+ *
195
+ * Closes inbox rows whose batch_closed_at is NULL (open) and whose
196
+ * created_at is older than (now - window_ms).
197
+ *
198
+ * Returns the number of batches closed.
199
+ */
31
200
  export async function closeStaleBatches(window_ms) {
32
- const { conn, dialect } = d();
33
- return dialect.closeStaleBatches(conn, window_ms);
201
+ const adapter = getInboxConnection();
202
+ const cutoff = new Date(Date.now() - window_ms).toISOString();
203
+ const rows = await adapter.claimRows({
204
+ table: "hazo_notify_inbox",
205
+ where: { batch_closed_at: null, created_at: { lte: cutoff } },
206
+ set: { batch_closed_at: { $now: true } },
207
+ returning: ["id"],
208
+ limit: 10000,
209
+ });
210
+ return rows.length;
34
211
  }
212
+ /**
213
+ * Task 2.11a — purgeReadInbox via QueryBuilder DELETE
214
+ *
215
+ * Deletes inbox rows that have been read and whose read_at is older than
216
+ * `older_than`. Returns the number of rows deleted.
217
+ *
218
+ * QueryBuilder 'neq' with null → IS NOT NULL (via translateWhereCondition).
219
+ * QueryBuilder 'lt' → read_at < older_than.
220
+ */
35
221
  export async function purgeReadInbox(older_than) {
36
- const { conn, dialect } = d();
37
- return dialect.purgeReadInbox(conn, older_than);
222
+ const adapter = getInboxConnection();
223
+ const builder = new QueryBuilder()
224
+ .from("hazo_notify_inbox")
225
+ .where("read_at", "neq", null)
226
+ .where("read_at", "lt", older_than);
227
+ const rows = await adapter.query(builder, "DELETE");
228
+ return rows.length;
38
229
  }
230
+ /**
231
+ * Task 2.11b — purgeFinalizedDeliveries via QueryBuilder DELETE
232
+ *
233
+ * Deletes delivery rows that have been finalized (sent or failed) and whose
234
+ * finalized_at is older than `older_than`. Returns the number of rows deleted.
235
+ */
39
236
  export async function purgeFinalizedDeliveries(older_than) {
40
- const { conn, dialect } = d();
41
- return dialect.purgeFinalizedDeliveries(conn, older_than);
237
+ const adapter = getInboxConnection();
238
+ const builder = new QueryBuilder()
239
+ .from("hazo_notify_channel_deliveries")
240
+ .where("finalized_at", "neq", null)
241
+ .where("finalized_at", "lt", older_than);
242
+ const rows = await adapter.query(builder, "DELETE");
243
+ return rows.length;
42
244
  }
245
+ /**
246
+ * Task 2.12a — listUnreadForUser via QueryBuilder
247
+ *
248
+ * Returns unread inbox rows for the given user/scope, ordered by created_at
249
+ * descending with optional cursor (created_at < cursor) and limit.
250
+ *
251
+ * Surface filtering (in_app / banner) requires dialect-specific JSONB or
252
+ * json_extract access. Rather than branching on adapter type at this layer,
253
+ * callers filter in-memory when surface filtering is needed. This keeps the
254
+ * storage layer adapter-agnostic.
255
+ *
256
+ * QueryBuilder 'is' with null → IS NULL (via translateWhereCondition).
257
+ */
43
258
  export async function listUnreadForUser(user_id, scope_id, opts = {}) {
44
- const conn = getInboxConnection();
45
- const limit = Math.min(opts.limit ?? 20, 100);
46
- const isSqlite = conn.type === "sqlite";
47
- const ph = (n) => (isSqlite ? "?" : `$${n}`);
48
- const where = [`user_id = ${ph(1)}`, `scope_id = ${ph(2)}`, "read_at IS NULL"];
49
- const params = [user_id, scope_id];
50
- let i = 3;
259
+ const adapter = getInboxConnection();
260
+ let builder = new QueryBuilder()
261
+ .from("hazo_notify_inbox")
262
+ .where("user_id", "eq", user_id)
263
+ .where("scope_id", "eq", scope_id)
264
+ .where("read_at", "is", null)
265
+ .order("created_at", "desc")
266
+ .limit(Math.min(opts.limit ?? 20, 100));
51
267
  if (opts.cursor) {
52
- where.push(`created_at < ${ph(i)}`);
53
- params.push(opts.cursor);
54
- i++;
268
+ builder = builder.where("created_at", "lt", opts.cursor);
55
269
  }
56
- if (opts.surface) {
57
- where.push(isSqlite
58
- ? `json_extract(surfaces, '$.${opts.surface}') = 1`
59
- : `(surfaces->>'${opts.surface}')::boolean = true`);
60
- }
61
- params.push(limit);
62
- return await conn.raw(`SELECT * FROM hazo_notify_inbox WHERE ${where.join(" AND ")}
63
- ORDER BY created_at DESC LIMIT ${ph(i)}`, params);
270
+ return await adapter.query(builder, "GET");
64
271
  }
272
+ /**
273
+ * Task 2.12b — unreadCount via QueryBuilder
274
+ *
275
+ * Counts unread inbox rows for the given user/scope.
276
+ * QueryBuilder 'is' with null → IS NULL.
277
+ */
65
278
  export async function unreadCount(user_id, scope_id) {
66
- const conn = getInboxConnection();
67
- const isSqlite = conn.type === "sqlite";
68
- const rows = await conn.raw(`SELECT count(*) AS n FROM hazo_notify_inbox
69
- WHERE user_id = ${isSqlite ? "?" : "$1"} AND scope_id = ${isSqlite ? "?" : "$2"} AND read_at IS NULL`, [user_id, scope_id]);
70
- return Number(rows[0]?.n ?? 0);
279
+ const adapter = getInboxConnection();
280
+ const builder = new QueryBuilder()
281
+ .from("hazo_notify_inbox")
282
+ .where("user_id", "eq", user_id)
283
+ .where("scope_id", "eq", scope_id)
284
+ .where("read_at", "is", null);
285
+ const rows = await adapter.query(builder, "GET");
286
+ return rows.length;
71
287
  }
288
+ /**
289
+ * Task 2.13a — markRead via claimRows
290
+ *
291
+ * Sets read_at = now() for the given inbox row, scoped by user_id to prevent
292
+ * cross-user reads. Only updates unread rows. Returns true iff a row was
293
+ * actually marked read by this call.
294
+ */
72
295
  export async function markRead(id, user_id) {
73
- const conn = getInboxConnection();
74
- const isSqlite = conn.type === "sqlite";
75
- const sql = isSqlite
76
- ? `UPDATE hazo_notify_inbox SET read_at=datetime('now')
77
- WHERE id=? AND user_id=? AND read_at IS NULL RETURNING id`
78
- : `UPDATE hazo_notify_inbox SET read_at=now()
79
- WHERE id=$1 AND user_id=$2 AND read_at IS NULL RETURNING id`;
80
- const rows = await conn.raw(sql, [id, user_id]);
296
+ const adapter = getInboxConnection();
297
+ const rows = await adapter.claimRows({
298
+ table: "hazo_notify_inbox",
299
+ where: { id, user_id, read_at: null },
300
+ set: { read_at: { $now: true } },
301
+ returning: ["id"],
302
+ limit: 1,
303
+ });
81
304
  return rows.length > 0;
82
305
  }
306
+ /**
307
+ * Task 2.13b — markAllRead via claimRows
308
+ *
309
+ * Sets read_at = now() for every unread inbox row belonging to the given
310
+ * user/scope. Only updates unread rows. Returns the number of rows actually
311
+ * marked read by this call (already-read rows are not touched).
312
+ */
83
313
  export async function markAllRead(user_id, scope_id) {
84
- const conn = getInboxConnection();
85
- const isSqlite = conn.type === "sqlite";
86
- const sql = isSqlite
87
- ? `UPDATE hazo_notify_inbox SET read_at=datetime('now')
88
- WHERE user_id=? AND scope_id=? AND read_at IS NULL RETURNING id`
89
- : `UPDATE hazo_notify_inbox SET read_at=now()
90
- WHERE user_id=$1 AND scope_id=$2 AND read_at IS NULL RETURNING id`;
91
- const rows = await conn.raw(sql, [user_id, scope_id]);
314
+ const adapter = getInboxConnection();
315
+ const rows = await adapter.claimRows({
316
+ table: "hazo_notify_inbox",
317
+ where: { user_id, scope_id, read_at: null },
318
+ set: { read_at: { $now: true } },
319
+ returning: ["id"],
320
+ limit: 10000,
321
+ });
92
322
  return rows.length;
93
323
  }
94
324
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/lib/inbox/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/lib/inbox/storage.ts"],"names":[],"mappings":"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"}
@@ -54,4 +54,41 @@ export interface DispatchResult {
54
54
  deliveries_refreshed: number;
55
55
  channels_dispatched: string[];
56
56
  }
57
+ export interface UpsertInboxRowInput {
58
+ scope_id: string;
59
+ user_id: string;
60
+ event_type: string;
61
+ subject_id: string | null;
62
+ batch_key: string;
63
+ in_app_text: string;
64
+ deep_link: string;
65
+ payload: Record<string, unknown>;
66
+ surfaces: NotificationSurfaces;
67
+ batch_closed_at: string | null;
68
+ }
69
+ export interface UpsertInboxRowResult {
70
+ id: string;
71
+ inserted: boolean;
72
+ }
73
+ export interface UpsertDeliveryInput {
74
+ inbox_id: string;
75
+ channel_id: string;
76
+ payload: Record<string, unknown>;
77
+ flush_after: string;
78
+ }
79
+ export interface UpsertDeliveryResult {
80
+ id: string;
81
+ inserted: boolean;
82
+ /** True if the worker has already started attempts on this row. */
83
+ attempt_in_flight: boolean;
84
+ }
85
+ export interface ClaimedDelivery {
86
+ delivery_id: string;
87
+ inbox_id: string;
88
+ channel_id: string;
89
+ payload: Record<string, unknown>;
90
+ attempt_count: number;
91
+ user_id: string;
92
+ scope_id: string;
93
+ }
57
94
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/inbox/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/inbox/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../src/lib/inbox/worker/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC1D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2BjC"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../src/lib/inbox/worker/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAmB9D;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC1D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2BjC"}
@@ -7,9 +7,25 @@
7
7
  *
8
8
  * @packageDocumentation
9
9
  */
10
+ import { QueryBuilder } from "hazo_connect/server";
10
11
  import { get_template_by_name } from "../../template_manager/db/index.js";
11
12
  import { render_handlebars_string } from "../../template_manager/engine/index.js";
12
13
  import { getInboxConnection } from "../connection.js";
14
+ // Bridge inbox's HazoConnectAdapter to template_manager's HazoConnectInstance facade.
15
+ // template_manager only calls .query()/.list() on this; other facade methods are unused
16
+ // in this path. The HazoConnectInstance contract is preserved as an internal facade
17
+ // for template_manager (see template_manager/types.ts JSDoc).
18
+ function asTemplateManagerInstance(adapter) {
19
+ return {
20
+ query: () => new QueryBuilder(),
21
+ list: async (qb) => (await adapter.query(qb, "GET")),
22
+ findById: async () => { throw new Error("asTemplateManagerInstance: findById not implemented"); },
23
+ findBy: async () => { throw new Error("asTemplateManagerInstance: findBy not implemented"); },
24
+ insert: async () => { throw new Error("asTemplateManagerInstance: insert not implemented"); },
25
+ updateById: async () => { throw new Error("asTemplateManagerInstance: updateById not implemented"); },
26
+ deleteById: async () => { throw new Error("asTemplateManagerInstance: deleteById not implemented"); },
27
+ };
28
+ }
13
29
  /**
14
30
  * Render template bodies for a claimed delivery row.
15
31
  *
@@ -22,7 +38,7 @@ export async function renderForChannel(adapter, row) {
22
38
  const payload = row.payload;
23
39
  if (!payload.template_name)
24
40
  return {};
25
- const conn = getInboxConnection();
41
+ const conn = asTemplateManagerInstance(getInboxConnection());
26
42
  const scope_chain = row.scope_id ? [row.scope_id] : [];
27
43
  const result = await get_template_by_name(conn, scope_chain, payload.template_name);
28
44
  const template = result.data;
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../src/lib/inbox/worker/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,GAA2D;IAE3D,MAAM,OAAO,GAAG,GAAG,CAAC,OAGnB,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,aAAa;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAEpF,MAAM,QAAQ,GAAI,MAA+C,CAAC,IAAI,CAAC;IACvE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAE/E,MAAM,UAAU,GAAI,QAAgD,CAAC,MAAM,IAAI,EAAE,CAAC;IAClF,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAA4B,CAAC;IACtE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,IAA8B,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../src/lib/inbox/worker/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAItD,sFAAsF;AACtF,wFAAwF;AACxF,oFAAoF;AACpF,8DAA8D;AAC9D,SAAS,yBAAyB,CAAC,OAA2B;IAC5D,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,EAAyD;QACtF,IAAI,EAAE,KAAK,EAAK,EAAW,EAAE,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,EAAkB,EAAE,KAAK,CAAC,CAAQ;QACvF,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC,CAAC;QAC7F,UAAU,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC,CAAC;QACrG,UAAU,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC,CAAC;KACtG,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,GAA2D;IAE3D,MAAM,OAAO,GAAG,GAAG,CAAC,OAGnB,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,aAAa;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,IAAI,GAAG,yBAAyB,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAEpF,MAAM,QAAQ,GAAI,MAA+C,CAAC,IAAI,CAAC;IACvE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAE/E,MAAM,UAAU,GAAI,QAAgD,CAAC,MAAM,IAAI,EAAE,CAAC;IAClF,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAA4B,CAAC;IACtE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,IAA8B,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -108,6 +108,14 @@ export interface EmailTemplateUpdate {
108
108
  bodies?: Record<string, string>;
109
109
  is_modified?: boolean;
110
110
  }
111
+ /**
112
+ * Internal query-builder facade used by template_manager's repository layer.
113
+ * This is a narrow subset of hazo_connect's QueryBuilder, shaped for the
114
+ * CrudService-style API that template_manager repositories depend on.
115
+ *
116
+ * **Inbox subsystem** does NOT use this type. Inbox imports
117
+ * HazoConnectAdapter directly from hazo_connect/server (5.0+).
118
+ */
111
119
  export interface HazoConnectQueryBuilder {
112
120
  from(table: string): this;
113
121
  select(columns: string | string[]): this;
@@ -117,6 +125,22 @@ export interface HazoConnectQueryBuilder {
117
125
  limit(n: number): this;
118
126
  offset(n: number): this;
119
127
  }
128
+ /**
129
+ * Internal facade used by template_manager's repository layer. Provides
130
+ * a higher-level CRUD shape than hazo_connect's HazoConnectAdapter.
131
+ *
132
+ * **Inbox subsystem** does NOT use this type. Inbox imports
133
+ * HazoConnectAdapter directly from hazo_connect/server (5.0+).
134
+ *
135
+ * Consumers wiring the template_manager pass a small adapter object
136
+ * matching this shape (Hazodocs has one in lib/notifications/).
137
+ *
138
+ * Note: HazoConnectAdapter (hazo_connect/server) has a completely different
139
+ * method surface (rawQuery/getConfig/claimRows/query(builder, method?, body?))
140
+ * and cannot be substituted here without rewriting all template_manager
141
+ * repositories to use CrudService — that refactor is out of scope for
142
+ * the inbox-worker-fix plan.
143
+ */
120
144
  export interface HazoConnectInstance {
121
145
  list<T>(query: HazoConnectQueryBuilder): Promise<T[]>;
122
146
  findById<T>(table: string, id: string): Promise<T | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/template_manager/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/template_manager/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hazo_notify",
3
- "version": "4.0.2",
3
+ "version": "5.0.1",
4
4
  "type": "module",
5
5
  "description": "Email notification system with scope-aware template management",
6
6
  "main": "./dist/lib/index.js",
@@ -118,10 +118,10 @@
118
118
  "tailwind-merge": "^3.5.0"
119
119
  },
120
120
  "peerDependencies": {
121
- "hazo_connect": "^2.6.0",
121
+ "hazo_connect": "^2.7.1",
122
+ "hazo_jobs": "^0.7.0",
122
123
  "hazo_logs": "^1.0.13",
123
- "hazo_ui": "^2.8.0",
124
- "hazo_jobs": "^0.7.0"
124
+ "hazo_ui": "^2.8.0"
125
125
  },
126
126
  "peerDependenciesMeta": {
127
127
  "hazo_connect": {
@@ -190,6 +190,7 @@
190
190
  "clsx": "^2.1.1",
191
191
  "cmdk": "^1.1.1",
192
192
  "hazo_auth": "^5.2.0",
193
+ "hazo_connect": "^2.7.1",
193
194
  "hazo_ui": "^2.8.0",
194
195
  "jest": "^30.2.0",
195
196
  "jest-environment-jsdom": "^30.4.1",