@heavybit/shared-lib 2.1.0 → 2.7.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.
- package/README.md +163 -2
- package/dist/cjs/access/index.js +9 -1
- package/dist/cjs/access/index.js.map +1 -1
- package/dist/cjs/approvals/index.js +137 -0
- package/dist/cjs/approvals/index.js.map +1 -0
- package/dist/cjs/audit/index.js +74 -0
- package/dist/cjs/audit/index.js.map +1 -0
- package/dist/cjs/cache/index.js +90 -16
- package/dist/cjs/cache/index.js.map +1 -1
- package/dist/cjs/cache/keyspace.js +101 -0
- package/dist/cjs/cache/keyspace.js.map +1 -0
- package/dist/cjs/common/circuit-breaker.js +74 -0
- package/dist/cjs/common/circuit-breaker.js.map +1 -0
- package/dist/cjs/common/index.js +4 -0
- package/dist/cjs/common/index.js.map +1 -1
- package/dist/cjs/common/internal-client.js +177 -0
- package/dist/cjs/common/internal-client.js.map +1 -0
- package/dist/cjs/common/internal-constants.js +12 -0
- package/dist/cjs/common/internal-constants.js.map +1 -0
- package/dist/cjs/common/internal-service-auth.js +160 -0
- package/dist/cjs/common/internal-service-auth.js.map +1 -0
- package/dist/cjs/common/money.js +215 -0
- package/dist/cjs/common/money.js.map +1 -0
- package/dist/cjs/common/phone.js +41 -22
- package/dist/cjs/common/phone.js.map +1 -1
- package/dist/cjs/common/time.js +28 -2
- package/dist/cjs/common/time.js.map +1 -1
- package/dist/cjs/config/index.js +139 -19
- package/dist/cjs/config/index.js.map +1 -1
- package/dist/cjs/contracts/notification-dispatch.js +1 -1
- package/dist/cjs/database/db.js +37 -0
- package/dist/cjs/database/db.js.map +1 -0
- package/dist/cjs/database/index.js +22 -51
- package/dist/cjs/database/index.js.map +1 -1
- package/dist/cjs/database/pagination.js +88 -0
- package/dist/cjs/database/pagination.js.map +1 -0
- package/dist/cjs/database/pool.js +60 -0
- package/dist/cjs/database/pool.js.map +1 -0
- package/dist/cjs/database/scoped-repository.js +132 -0
- package/dist/cjs/database/scoped-repository.js.map +1 -0
- package/dist/cjs/database/scopes.js +166 -0
- package/dist/cjs/database/scopes.js.map +1 -0
- package/dist/cjs/database/table-names.js +14 -0
- package/dist/cjs/database/table-names.js.map +1 -0
- package/dist/cjs/database/tables.js +71 -0
- package/dist/cjs/database/tables.js.map +1 -0
- package/dist/cjs/express/auth.js +64 -50
- package/dist/cjs/express/auth.js.map +1 -1
- package/dist/cjs/express/index.js +2 -0
- package/dist/cjs/express/index.js.map +1 -1
- package/dist/cjs/express/internal-caller.js +52 -0
- package/dist/cjs/express/internal-caller.js.map +1 -0
- package/dist/cjs/express/step-up.js +41 -0
- package/dist/cjs/express/step-up.js.map +1 -0
- package/dist/cjs/http/index.js +3 -71
- package/dist/cjs/http/index.js.map +1 -1
- package/dist/cjs/identity/index.js +269 -67
- package/dist/cjs/identity/index.js.map +1 -1
- package/dist/cjs/identity/step-up.js +52 -0
- package/dist/cjs/identity/step-up.js.map +1 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/knex/columns.js +36 -0
- package/dist/cjs/knex/columns.js.map +1 -0
- package/dist/cjs/knex/index.js +26 -43
- package/dist/cjs/knex/index.js.map +1 -1
- package/dist/cjs/knex/migration-helpers.js +57 -0
- package/dist/cjs/knex/migration-helpers.js.map +1 -0
- package/dist/cjs/logging/redact.js +6 -11
- package/dist/cjs/logging/redact.js.map +1 -1
- package/dist/cjs/messaging/base-consumer.js +36 -0
- package/dist/cjs/messaging/base-consumer.js.map +1 -0
- package/dist/cjs/messaging/consumer.js +142 -73
- package/dist/cjs/messaging/consumer.js.map +1 -1
- package/dist/cjs/messaging/envelope.js +53 -10
- package/dist/cjs/messaging/envelope.js.map +1 -1
- package/dist/cjs/messaging/idempotency.js +95 -8
- package/dist/cjs/messaging/idempotency.js.map +1 -1
- package/dist/cjs/messaging/index.js +2 -1
- package/dist/cjs/messaging/index.js.map +1 -1
- package/dist/cjs/messaging/outbox.js +97 -55
- package/dist/cjs/messaging/outbox.js.map +1 -1
- package/dist/cjs/messaging/publisher.js +86 -38
- package/dist/cjs/messaging/publisher.js.map +1 -1
- package/dist/cjs/messaging/staff-notifier.js +4 -4
- package/dist/cjs/messaging/staff-notifier.js.map +1 -1
- package/dist/cjs/messaging/topology.js +41 -5
- package/dist/cjs/messaging/topology.js.map +1 -1
- package/dist/cjs/rate-limit/index.js +57 -6
- package/dist/cjs/rate-limit/index.js.map +1 -1
- package/dist/cjs/rate-limit/keys.js +47 -0
- package/dist/cjs/rate-limit/keys.js.map +1 -0
- package/dist/cjs/socket/index.js +127 -16
- package/dist/cjs/socket/index.js.map +1 -1
- package/dist/cjs/socket/ticket.js +124 -0
- package/dist/cjs/socket/ticket.js.map +1 -0
- package/dist/cjs/testing/index.js +23 -14
- package/dist/cjs/testing/index.js.map +1 -1
- package/dist/esm/access/index.js +9 -1
- package/dist/esm/access/index.js.map +1 -1
- package/dist/esm/approvals/index.js +127 -0
- package/dist/esm/approvals/index.js.map +1 -0
- package/dist/esm/audit/index.js +70 -0
- package/dist/esm/audit/index.js.map +1 -0
- package/dist/esm/cache/index.js +70 -13
- package/dist/esm/cache/index.js.map +1 -1
- package/dist/esm/cache/keyspace.js +95 -0
- package/dist/esm/cache/keyspace.js.map +1 -0
- package/dist/esm/common/circuit-breaker.js +70 -0
- package/dist/esm/common/circuit-breaker.js.map +1 -0
- package/dist/esm/common/index.js +4 -0
- package/dist/esm/common/index.js.map +1 -1
- package/dist/esm/common/internal-client.js +173 -0
- package/dist/esm/common/internal-client.js.map +1 -0
- package/dist/esm/common/internal-constants.js +9 -0
- package/dist/esm/common/internal-constants.js.map +1 -0
- package/dist/esm/common/internal-service-auth.js +150 -0
- package/dist/esm/common/internal-service-auth.js.map +1 -0
- package/dist/esm/common/money.js +207 -0
- package/dist/esm/common/money.js.map +1 -0
- package/dist/esm/common/phone.js +41 -22
- package/dist/esm/common/phone.js.map +1 -1
- package/dist/esm/common/time.js +27 -2
- package/dist/esm/common/time.js.map +1 -1
- package/dist/esm/config/index.js +135 -18
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/contracts/notification-dispatch.js +1 -1
- package/dist/esm/database/db.js +32 -0
- package/dist/esm/database/db.js.map +1 -0
- package/dist/esm/database/index.js +9 -45
- package/dist/esm/database/index.js.map +1 -1
- package/dist/esm/database/pagination.js +81 -0
- package/dist/esm/database/pagination.js.map +1 -0
- package/dist/esm/database/pool.js +51 -0
- package/dist/esm/database/pool.js.map +1 -0
- package/dist/esm/database/scoped-repository.js +128 -0
- package/dist/esm/database/scoped-repository.js.map +1 -0
- package/dist/esm/database/scopes.js +157 -0
- package/dist/esm/database/scopes.js.map +1 -0
- package/dist/esm/database/table-names.js +11 -0
- package/dist/esm/database/table-names.js.map +1 -0
- package/dist/esm/database/tables.js +61 -0
- package/dist/esm/database/tables.js.map +1 -0
- package/dist/esm/express/auth.js +62 -48
- package/dist/esm/express/auth.js.map +1 -1
- package/dist/esm/express/index.js +2 -0
- package/dist/esm/express/index.js.map +1 -1
- package/dist/esm/express/internal-caller.js +49 -0
- package/dist/esm/express/internal-caller.js.map +1 -0
- package/dist/esm/express/step-up.js +38 -0
- package/dist/esm/express/step-up.js.map +1 -0
- package/dist/esm/http/index.js +3 -70
- package/dist/esm/http/index.js.map +1 -1
- package/dist/esm/identity/index.js +246 -64
- package/dist/esm/identity/index.js.map +1 -1
- package/dist/esm/identity/step-up.js +47 -0
- package/dist/esm/identity/step-up.js.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/knex/columns.js +28 -0
- package/dist/esm/knex/columns.js.map +1 -0
- package/dist/esm/knex/index.js +8 -34
- package/dist/esm/knex/index.js.map +1 -1
- package/dist/esm/knex/migration-helpers.js +51 -0
- package/dist/esm/knex/migration-helpers.js.map +1 -0
- package/dist/esm/logging/redact.js +3 -7
- package/dist/esm/logging/redact.js.map +1 -1
- package/dist/esm/messaging/base-consumer.js +32 -0
- package/dist/esm/messaging/base-consumer.js.map +1 -0
- package/dist/esm/messaging/consumer.js +139 -71
- package/dist/esm/messaging/consumer.js.map +1 -1
- package/dist/esm/messaging/envelope.js +50 -10
- package/dist/esm/messaging/envelope.js.map +1 -1
- package/dist/esm/messaging/idempotency.js +91 -7
- package/dist/esm/messaging/idempotency.js.map +1 -1
- package/dist/esm/messaging/index.js +2 -1
- package/dist/esm/messaging/index.js.map +1 -1
- package/dist/esm/messaging/outbox.js +97 -54
- package/dist/esm/messaging/outbox.js.map +1 -1
- package/dist/esm/messaging/publisher.js +86 -38
- package/dist/esm/messaging/publisher.js.map +1 -1
- package/dist/esm/messaging/staff-notifier.js +4 -4
- package/dist/esm/messaging/staff-notifier.js.map +1 -1
- package/dist/esm/messaging/topology.js +39 -4
- package/dist/esm/messaging/topology.js.map +1 -1
- package/dist/esm/rate-limit/index.js +41 -6
- package/dist/esm/rate-limit/index.js.map +1 -1
- package/dist/esm/rate-limit/keys.js +43 -0
- package/dist/esm/rate-limit/keys.js.map +1 -0
- package/dist/esm/socket/index.js +112 -17
- package/dist/esm/socket/index.js.map +1 -1
- package/dist/esm/socket/ticket.js +117 -0
- package/dist/esm/socket/ticket.js.map +1 -0
- package/dist/esm/testing/index.js +24 -15
- package/dist/esm/testing/index.js.map +1 -1
- package/dist/types/access/index.d.ts +9 -3
- package/dist/types/access/index.d.ts.map +1 -1
- package/dist/types/approvals/index.d.ts +99 -0
- package/dist/types/approvals/index.d.ts.map +1 -0
- package/dist/types/audit/index.d.ts +82 -0
- package/dist/types/audit/index.d.ts.map +1 -0
- package/dist/types/cache/index.d.ts +64 -14
- package/dist/types/cache/index.d.ts.map +1 -1
- package/dist/types/cache/keyspace.d.ts +84 -0
- package/dist/types/cache/keyspace.d.ts.map +1 -0
- package/dist/types/common/circuit-breaker.d.ts +51 -0
- package/dist/types/common/circuit-breaker.d.ts.map +1 -0
- package/dist/types/common/index.d.ts +4 -0
- package/dist/types/common/index.d.ts.map +1 -1
- package/dist/types/common/internal-client.d.ts +116 -0
- package/dist/types/common/internal-client.d.ts.map +1 -0
- package/dist/types/common/internal-constants.d.ts +9 -0
- package/dist/types/common/internal-constants.d.ts.map +1 -0
- package/dist/types/common/internal-service-auth.d.ts +102 -0
- package/dist/types/common/internal-service-auth.d.ts.map +1 -0
- package/dist/types/common/money.d.ts +104 -0
- package/dist/types/common/money.d.ts.map +1 -0
- package/dist/types/common/phone.d.ts +25 -15
- package/dist/types/common/phone.d.ts.map +1 -1
- package/dist/types/common/time.d.ts +20 -2
- package/dist/types/common/time.d.ts.map +1 -1
- package/dist/types/config/index.d.ts +251 -27
- package/dist/types/config/index.d.ts.map +1 -1
- package/dist/types/contracts/notification-dispatch.d.ts +13 -13
- package/dist/types/database/db.d.ts +46 -0
- package/dist/types/database/db.d.ts.map +1 -0
- package/dist/types/database/index.d.ts +9 -22
- package/dist/types/database/index.d.ts.map +1 -1
- package/dist/types/database/pagination.d.ts +68 -0
- package/dist/types/database/pagination.d.ts.map +1 -0
- package/dist/types/database/pool.d.ts +39 -0
- package/dist/types/database/pool.d.ts.map +1 -0
- package/dist/types/database/scoped-repository.d.ts +92 -0
- package/dist/types/database/scoped-repository.d.ts.map +1 -0
- package/dist/types/database/scopes.d.ts +159 -0
- package/dist/types/database/scopes.d.ts.map +1 -0
- package/dist/types/database/table-names.d.ts +13 -0
- package/dist/types/database/table-names.d.ts.map +1 -0
- package/dist/types/database/tables.d.ts +748 -0
- package/dist/types/database/tables.d.ts.map +1 -0
- package/dist/types/express/auth.d.ts +40 -24
- package/dist/types/express/auth.d.ts.map +1 -1
- package/dist/types/express/index.d.ts +2 -0
- package/dist/types/express/index.d.ts.map +1 -1
- package/dist/types/express/internal-caller.d.ts +53 -0
- package/dist/types/express/internal-caller.d.ts.map +1 -0
- package/dist/types/express/step-up.d.ts +38 -0
- package/dist/types/express/step-up.d.ts.map +1 -0
- package/dist/types/http/index.d.ts +3 -31
- package/dist/types/http/index.d.ts.map +1 -1
- package/dist/types/identity/index.d.ts +159 -21
- package/dist/types/identity/index.d.ts.map +1 -1
- package/dist/types/identity/step-up.d.ts +41 -0
- package/dist/types/identity/step-up.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/knex/columns.d.ts +15 -0
- package/dist/types/knex/columns.d.ts.map +1 -0
- package/dist/types/knex/index.d.ts +3 -11
- package/dist/types/knex/index.d.ts.map +1 -1
- package/dist/types/knex/migration-helpers.d.ts +28 -0
- package/dist/types/knex/migration-helpers.d.ts.map +1 -0
- package/dist/types/logging/redact.d.ts +2 -2
- package/dist/types/logging/redact.d.ts.map +1 -1
- package/dist/types/messaging/base-consumer.d.ts +33 -0
- package/dist/types/messaging/base-consumer.d.ts.map +1 -0
- package/dist/types/messaging/consumer.d.ts +59 -21
- package/dist/types/messaging/consumer.d.ts.map +1 -1
- package/dist/types/messaging/envelope.d.ts +50 -11
- package/dist/types/messaging/envelope.d.ts.map +1 -1
- package/dist/types/messaging/idempotency.d.ts +60 -3
- package/dist/types/messaging/idempotency.d.ts.map +1 -1
- package/dist/types/messaging/index.d.ts +7 -0
- package/dist/types/messaging/index.d.ts.map +1 -1
- package/dist/types/messaging/outbox.d.ts +62 -22
- package/dist/types/messaging/outbox.d.ts.map +1 -1
- package/dist/types/messaging/publisher.d.ts +54 -21
- package/dist/types/messaging/publisher.d.ts.map +1 -1
- package/dist/types/messaging/staff-notifier.d.ts +9 -9
- package/dist/types/messaging/staff-notifier.d.ts.map +1 -1
- package/dist/types/messaging/staff-recipients.d.ts +1 -1
- package/dist/types/messaging/topology.d.ts +40 -8
- package/dist/types/messaging/topology.d.ts.map +1 -1
- package/dist/types/rate-limit/index.d.ts +40 -4
- package/dist/types/rate-limit/index.d.ts.map +1 -1
- package/dist/types/rate-limit/keys.d.ts +52 -0
- package/dist/types/rate-limit/keys.d.ts.map +1 -0
- package/dist/types/socket/index.d.ts +86 -2
- package/dist/types/socket/index.d.ts.map +1 -1
- package/dist/types/socket/ticket.d.ts +90 -0
- package/dist/types/socket/ticket.d.ts.map +1 -0
- package/dist/types/testing/index.d.ts +31 -10
- package/dist/types/testing/index.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +26 -14
- package/dist/types/types/index.d.ts.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/database/pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAEnC,oFAAoF;AACpF,MAAM,WAAW,sBAAsB;IACrC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAe3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAgBxE;AAED,8BAA8B;AAC9B,wBAAsB,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type InferInsertModel, type InferSelectModel, type SQL } from 'drizzle-orm';
|
|
2
|
+
import type { MySqlColumn, MySqlDatabase, MySqlTable } from 'drizzle-orm/mysql-core';
|
|
3
|
+
import type { CursorPage } from '../types/index.js';
|
|
4
|
+
import { type RowScope } from './scopes.js';
|
|
5
|
+
/**
|
|
6
|
+
* Any Drizzle MySQL executor: the database or a transaction handle (`Tx`).
|
|
7
|
+
* Typed loosely on purpose so repositories work with every service schema.
|
|
8
|
+
*/
|
|
9
|
+
export type DbExecutor = MySqlDatabase<any, any, any, any>;
|
|
10
|
+
/** Optional transaction for a repository call. */
|
|
11
|
+
export interface TxOption {
|
|
12
|
+
/** Run inside this transaction instead of on the pool. */
|
|
13
|
+
tx?: DbExecutor;
|
|
14
|
+
}
|
|
15
|
+
/** Sort for {@link ScopedRepository.findMany}. `column` is a database column name. */
|
|
16
|
+
export interface SortSpec {
|
|
17
|
+
column: string;
|
|
18
|
+
direction?: 'asc' | 'desc';
|
|
19
|
+
}
|
|
20
|
+
/** Options for {@link ScopedRepository.findMany} and {@link ScopedRepository.findPage}. */
|
|
21
|
+
export interface FindManyOptions extends TxOption {
|
|
22
|
+
/** Extra conditions (AND-ed with the scope). */
|
|
23
|
+
where?: SQL;
|
|
24
|
+
/** Sort column (default: the id column, descending). The id is always the tie-breaker. */
|
|
25
|
+
orderBy?: SortSpec;
|
|
26
|
+
/** Opaque cursor from a previous page. */
|
|
27
|
+
cursor?: string;
|
|
28
|
+
/** Page size, 1–100 (default 20). */
|
|
29
|
+
limit?: number;
|
|
30
|
+
}
|
|
31
|
+
/** Options for {@link ScopedRepository}. */
|
|
32
|
+
export interface ScopedRepositoryOptions {
|
|
33
|
+
/** Database name of the primary-key column (default `id`). */
|
|
34
|
+
idColumn?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Base for every repository over scoped data (Drizzle). Every read, count, update and delete is
|
|
38
|
+
* AND-ed with the scope's condition, and every insert is stamped with the scope value; there is no
|
|
39
|
+
* method that returns an unscoped query. Subclasses add queries only through {@link scoped} and
|
|
40
|
+
* {@link executor}.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* class NoteRepository extends ScopedRepository<typeof notes, ScopeContext<'workspaceId'>> {
|
|
44
|
+
* findByTitle(ctx: ScopeContext<'workspaceId'>, title: string) {
|
|
45
|
+
* return this.executor().select().from(this.table).where(this.scoped(ctx, eq(this.table.title, title)));
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
* const repo = new NoteRepository(db, notes, workspaceScope);
|
|
49
|
+
*/
|
|
50
|
+
export declare class ScopedRepository<TTable extends MySqlTable, TCtx> {
|
|
51
|
+
#private;
|
|
52
|
+
protected readonly table: TTable;
|
|
53
|
+
protected readonly scope: RowScope<TCtx>;
|
|
54
|
+
protected readonly idColumn: MySqlColumn;
|
|
55
|
+
constructor(db: DbExecutor, table: TTable, scope: RowScope<TCtx>, options?: ScopedRepositoryOptions);
|
|
56
|
+
/** The row with `id` inside the caller's scope, or null (absent and out-of-scope look the same). */
|
|
57
|
+
findById(ctx: TCtx, id: string, options?: TxOption): Promise<InferSelectModel<TTable> | null>;
|
|
58
|
+
/** Rows inside the caller's scope, keyset-paginated by `orderBy` then id. */
|
|
59
|
+
findMany(ctx: TCtx, options?: FindManyOptions): Promise<InferSelectModel<TTable>[]>;
|
|
60
|
+
/** Like {@link findMany}, returning `{ data, meta: { limit, nextCursor, hasMore } }`. */
|
|
61
|
+
findPage(ctx: TCtx, options?: FindManyOptions): Promise<CursorPage<InferSelectModel<TTable>>>;
|
|
62
|
+
/** Number of rows inside the caller's scope matching `where`. */
|
|
63
|
+
count(ctx: TCtx, where?: SQL, options?: TxOption): Promise<number>;
|
|
64
|
+
/**
|
|
65
|
+
* Inserts rows stamped with the caller's scope value.
|
|
66
|
+
*
|
|
67
|
+
* @throws ForbiddenError (`SCOPE_MISMATCH`) when a row names another scope.
|
|
68
|
+
* @returns The stamped rows as written.
|
|
69
|
+
*/
|
|
70
|
+
insert(ctx: TCtx, rows: InferInsertModel<TTable> | InferInsertModel<TTable>[], options?: TxOption): Promise<InferInsertModel<TTable>[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Updates rows inside the caller's scope. Rows never move between scopes.
|
|
73
|
+
*
|
|
74
|
+
* @throws ForbiddenError (`SCOPE_IMMUTABLE`) when `values` sets the scope column.
|
|
75
|
+
* @returns Number of rows changed.
|
|
76
|
+
*/
|
|
77
|
+
update(ctx: TCtx, where: SQL, values: Partial<InferInsertModel<TTable>>, options?: TxOption): Promise<number>;
|
|
78
|
+
/**
|
|
79
|
+
* Deletes rows inside the caller's scope.
|
|
80
|
+
*
|
|
81
|
+
* @returns Number of rows deleted.
|
|
82
|
+
*/
|
|
83
|
+
delete(ctx: TCtx, where: SQL, options?: TxOption): Promise<number>;
|
|
84
|
+
/** The scope condition AND-ed with `conditions`. The only way subclasses may build a WHERE. */
|
|
85
|
+
protected scoped(ctx: TCtx, ...conditions: Array<SQL | undefined>): SQL;
|
|
86
|
+
/** The executor for a call: `tx` when given, otherwise the pool. Always pair with {@link scoped}. */
|
|
87
|
+
protected executor(tx?: DbExecutor): DbExecutor;
|
|
88
|
+
private selectPage;
|
|
89
|
+
/** Keyset condition: rows strictly after the cursor's (sortKey, id) in the sort direction. */
|
|
90
|
+
private afterCursor;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=scoped-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-repository.d.ts","sourceRoot":"","sources":["../../../src/database/scoped-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { type SQL } from 'drizzle-orm';
|
|
2
|
+
import type { MySqlColumn, MySqlTable } from 'drizzle-orm/mysql-core';
|
|
3
|
+
/**
|
|
4
|
+
* Row scopes: the only ways a {@link ScopedRepository} can reach rows. Each scope turns a request
|
|
5
|
+
* context into a Drizzle condition on one scope column and stamps that column on insert.
|
|
6
|
+
*
|
|
7
|
+
* - {@link defineScope}: rows belong to the scope value carried by the context (e.g. a workspace).
|
|
8
|
+
* - {@link OwnerScope}: rows belong to one owner (a user id column); a missing owner id is refused.
|
|
9
|
+
* - {@link PlatformScope}: cross-scope access, issued only when a caller-supplied predicate approves
|
|
10
|
+
* the identity. It still filters on the scope column (`IS NOT NULL`), so every query names it.
|
|
11
|
+
*
|
|
12
|
+
* App bindings (which column, which context key, who is a platform admin) live in the app's
|
|
13
|
+
* contracts package, never here.
|
|
14
|
+
*/
|
|
15
|
+
/** A scope a repository is bound to. `TCtx` is what each call must carry to prove its scope. */
|
|
16
|
+
export interface RowScope<TCtx> {
|
|
17
|
+
/** Readable name, used in error messages and logs (e.g. `workspace`). */
|
|
18
|
+
readonly name: string;
|
|
19
|
+
/** Database column name that holds the scope value (e.g. `workspace_id`). */
|
|
20
|
+
readonly column: string;
|
|
21
|
+
/**
|
|
22
|
+
* Condition restricting `table` to the rows `ctx` may reach.
|
|
23
|
+
*
|
|
24
|
+
* @throws ForbiddenError when `ctx` does not carry a usable scope value.
|
|
25
|
+
*/
|
|
26
|
+
condition(table: MySqlTable, ctx: TCtx): SQL;
|
|
27
|
+
/**
|
|
28
|
+
* Returns `row` with the scope column set from `ctx`.
|
|
29
|
+
*
|
|
30
|
+
* @throws ForbiddenError when the row already carries a different scope value.
|
|
31
|
+
*/
|
|
32
|
+
stamp<TRow extends Record<string, unknown>>(table: MySqlTable, row: TRow, ctx: TCtx): TRow;
|
|
33
|
+
}
|
|
34
|
+
/** Request context for a {@link defineScope} scope: `{ [contextKey]: scopeValue }`. */
|
|
35
|
+
export type ScopeContext<TKey extends string = string> = {
|
|
36
|
+
readonly [K in TKey]: string | null | undefined;
|
|
37
|
+
};
|
|
38
|
+
/** Options for {@link defineScope}. */
|
|
39
|
+
export interface ScopeDefinitionOptions<TKey extends string> {
|
|
40
|
+
/** Readable name (e.g. `workspace`). */
|
|
41
|
+
name: string;
|
|
42
|
+
/** Database column name (e.g. `workspace_id`). */
|
|
43
|
+
column: string;
|
|
44
|
+
/** Context property that carries the scope value (e.g. `workspaceId`). */
|
|
45
|
+
contextKey: TKey;
|
|
46
|
+
}
|
|
47
|
+
/** A scope created by {@link defineScope}. */
|
|
48
|
+
export interface ScopeDefinition<TKey extends string = string> extends RowScope<ScopeContext<TKey>> {
|
|
49
|
+
/** Context property that carries the scope value. */
|
|
50
|
+
readonly contextKey: TKey;
|
|
51
|
+
/**
|
|
52
|
+
* The scope value from `ctx`.
|
|
53
|
+
*
|
|
54
|
+
* @throws ForbiddenError (`SCOPE_REQUIRED`) when it is missing or empty.
|
|
55
|
+
*/
|
|
56
|
+
valueOf(ctx: ScopeContext<TKey>): string;
|
|
57
|
+
}
|
|
58
|
+
/** A table column located by its database name, with the property key Drizzle uses for it. */
|
|
59
|
+
export interface ResolvedColumn {
|
|
60
|
+
/** Property key on the Drizzle table (e.g. `workspaceId`). */
|
|
61
|
+
key: string;
|
|
62
|
+
/** The Drizzle column, for building conditions. */
|
|
63
|
+
column: MySqlColumn;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Finds a table column by its database name.
|
|
67
|
+
*
|
|
68
|
+
* @throws Error when the table has no such column (a wiring bug, caught at startup or in tests).
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveColumn(table: MySqlTable, dbName: string): ResolvedColumn;
|
|
71
|
+
/**
|
|
72
|
+
* Defines a scope whose value comes from the request context (the gateway-signed identity, never a
|
|
73
|
+
* request body).
|
|
74
|
+
*
|
|
75
|
+
* @example const workspaceScope = defineScope({ name: 'workspace', column: 'workspace_id', contextKey: 'workspaceId' });
|
|
76
|
+
*/
|
|
77
|
+
export declare function defineScope<TKey extends string>(options: ScopeDefinitionOptions<TKey>): ScopeDefinition<TKey>;
|
|
78
|
+
/** Context for an {@link OwnerScope}: the owner's id (from the signed identity). */
|
|
79
|
+
export interface OwnerContext {
|
|
80
|
+
readonly ownerId: string | null | undefined;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Rows owned by one principal (e.g. a user's own records). Refuses a missing owner id, so an
|
|
84
|
+
* anonymous call can never fall through to "all owners".
|
|
85
|
+
*
|
|
86
|
+
* @example const ownerScope = new OwnerScope({ name: 'owner', column: 'user_id' });
|
|
87
|
+
*/
|
|
88
|
+
export declare class OwnerScope implements RowScope<OwnerContext> {
|
|
89
|
+
/** Readable name (e.g. `owner`). */
|
|
90
|
+
readonly name: string;
|
|
91
|
+
/** Database name of the owner column (e.g. `user_id`). */
|
|
92
|
+
readonly column: string;
|
|
93
|
+
/** @param options `name` for messages, `column` = database name of the owner column. */
|
|
94
|
+
constructor(options: {
|
|
95
|
+
name: string;
|
|
96
|
+
column: string;
|
|
97
|
+
});
|
|
98
|
+
/** The owner id from `ctx`; throws ForbiddenError (`OWNER_REQUIRED`) when it is missing. */
|
|
99
|
+
ownerIdOf(ctx: OwnerContext): string;
|
|
100
|
+
/** `owner column = ownerId`. @throws ForbiddenError (`OWNER_REQUIRED`) without an owner id. */
|
|
101
|
+
condition(table: MySqlTable, ctx: OwnerContext): SQL;
|
|
102
|
+
/** Sets the owner column. @throws ForbiddenError (`OWNER_REQUIRED`, `SCOPE_MISMATCH`). */
|
|
103
|
+
stamp<TRow extends Record<string, unknown>>(table: MySqlTable, row: TRow, ctx: OwnerContext): TRow;
|
|
104
|
+
}
|
|
105
|
+
/** Options for {@link definePlatformScope}. */
|
|
106
|
+
export interface PlatformScopeOptions<TIdentity> {
|
|
107
|
+
/** Readable name (e.g. `platform`). */
|
|
108
|
+
name: string;
|
|
109
|
+
/** The scope column the platform scope spans (e.g. `workspace_id`). */
|
|
110
|
+
column: string;
|
|
111
|
+
/** Decides whether an identity may read across scopes (e.g. "is a platform admin"). */
|
|
112
|
+
predicate: (identity: TIdentity) => boolean;
|
|
113
|
+
}
|
|
114
|
+
declare const ISSUE: unique symbol;
|
|
115
|
+
/**
|
|
116
|
+
* Proof that an identity may act across scopes. Only {@link PlatformScopeDefinition.authorize} can
|
|
117
|
+
* create one, and only when the definition's predicate approves the identity.
|
|
118
|
+
*/
|
|
119
|
+
export declare class PlatformScope {
|
|
120
|
+
#private;
|
|
121
|
+
/** @internal Use `definePlatformScope(...).authorize(identity)`. */
|
|
122
|
+
constructor(token: typeof ISSUE, definition: PlatformScopeDefinition<never>);
|
|
123
|
+
/** True when this grant was issued by `definition`. */
|
|
124
|
+
issuedBy(definition: PlatformScopeDefinition<never>): boolean;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Cross-scope access for platform operators. Rows of every scope are reachable, but the query still
|
|
128
|
+
* filters on the scope column (`IS NOT NULL`) and inserts must name their scope explicitly.
|
|
129
|
+
*/
|
|
130
|
+
export declare class PlatformScopeDefinition<TIdentity> implements RowScope<PlatformScope> {
|
|
131
|
+
#private;
|
|
132
|
+
/** Readable name (e.g. `platform`). */
|
|
133
|
+
readonly name: string;
|
|
134
|
+
/** Database name of the scope column the platform scope spans. */
|
|
135
|
+
readonly column: string;
|
|
136
|
+
/** Prefer {@link definePlatformScope}. */
|
|
137
|
+
constructor(options: PlatformScopeOptions<TIdentity>);
|
|
138
|
+
/**
|
|
139
|
+
* Issues a {@link PlatformScope} for `identity`.
|
|
140
|
+
*
|
|
141
|
+
* @throws ForbiddenError (`PLATFORM_SCOPE_DENIED`) when the predicate refuses (or throws).
|
|
142
|
+
*/
|
|
143
|
+
authorize(identity: TIdentity | null | undefined): PlatformScope;
|
|
144
|
+
/** `scope column IS NOT NULL`. @throws ForbiddenError (`PLATFORM_SCOPE_REQUIRED`) without a grant from this scope. */
|
|
145
|
+
condition(table: MySqlTable, ctx: PlatformScope): SQL;
|
|
146
|
+
/** Requires the row to name its scope. @throws ForbiddenError (`PLATFORM_SCOPE_REQUIRED`, `SCOPE_REQUIRED`). */
|
|
147
|
+
stamp<TRow extends Record<string, unknown>>(table: MySqlTable, row: TRow, ctx: PlatformScope): TRow;
|
|
148
|
+
private assertGrant;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Defines the platform (cross-scope) scope.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* const platformScope = definePlatformScope({ name: 'platform', column: 'workspace_id', predicate: (u: AuthUser) => u.isSuperAdmin });
|
|
155
|
+
* const grant = platformScope.authorize(req.user); // throws 403 for anyone else
|
|
156
|
+
*/
|
|
157
|
+
export declare function definePlatformScope<TIdentity>(options: PlatformScopeOptions<TIdentity>): PlatformScopeDefinition<TIdentity>;
|
|
158
|
+
export {};
|
|
159
|
+
//# sourceMappingURL=scopes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../../../src/database/scopes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Default name of the transactional outbox table. */
|
|
2
|
+
export declare const DEFAULT_OUTBOX_TABLE = "event_outbox";
|
|
3
|
+
/** Default name of the consumer idempotency ledger. */
|
|
4
|
+
export declare const DEFAULT_PROCESSED_EVENTS_TABLE = "processed_events";
|
|
5
|
+
/** Default name of the scheduled-job runs table. */
|
|
6
|
+
export declare const DEFAULT_SCHEDULER_RUNS_TABLE = "scheduler_runs";
|
|
7
|
+
/** Scheduler run states, shared by the Drizzle table and the Knex helper. */
|
|
8
|
+
export declare const SCHEDULER_RUN_STATUSES: readonly ["running", "succeeded", "failed"];
|
|
9
|
+
/** Logical exchanges an outbox row can target: topic events or direct commands. */
|
|
10
|
+
export declare const OUTBOX_EXCHANGES: readonly ["events", "commands"];
|
|
11
|
+
/** One of {@link OUTBOX_EXCHANGES}. */
|
|
12
|
+
export type OutboxExchange = (typeof OUTBOX_EXCHANGES)[number];
|
|
13
|
+
//# sourceMappingURL=table-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-names.d.ts","sourceRoot":"","sources":["../../../src/database/table-names.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AACnD,uDAAuD;AACvD,eAAO,MAAM,8BAA8B,qBAAqB,CAAC;AACjE,oDAAoD;AACpD,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAC7D,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,6CAA8C,CAAC;AAClF,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,iCAAkC,CAAC;AAChE,uCAAuC;AACvC,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|