@byline/db-postgres 0.9.3
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/LICENSE +373 -0
- package/README.md +18 -0
- package/dist/database/schema/auth.d.ts +857 -0
- package/dist/database/schema/auth.d.ts.map +1 -0
- package/dist/database/schema/auth.js +176 -0
- package/dist/database/schema/auth.js.map +1 -0
- package/dist/database/schema/index.d.ts +2955 -0
- package/dist/database/schema/index.d.ts.map +1 -0
- package/dist/database/schema/index.js +500 -0
- package/dist/database/schema/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/test-helper.d.ts +17 -0
- package/dist/lib/test-helper.d.ts.map +1 -0
- package/dist/lib/test-helper.js +47 -0
- package/dist/lib/test-helper.js.map +1 -0
- package/dist/modules/admin/admin-permissions-repository.d.ts +17 -0
- package/dist/modules/admin/admin-permissions-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-permissions-repository.js +76 -0
- package/dist/modules/admin/admin-permissions-repository.js.map +1 -0
- package/dist/modules/admin/admin-roles-repository.d.ts +12 -0
- package/dist/modules/admin/admin-roles-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-roles-repository.js +168 -0
- package/dist/modules/admin/admin-roles-repository.js.map +1 -0
- package/dist/modules/admin/admin-store.d.ts +20 -0
- package/dist/modules/admin/admin-store.d.ts.map +1 -0
- package/dist/modules/admin/admin-store.js +28 -0
- package/dist/modules/admin/admin-store.js.map +1 -0
- package/dist/modules/admin/admin-users-repository.d.ts +12 -0
- package/dist/modules/admin/admin-users-repository.d.ts.map +1 -0
- package/dist/modules/admin/admin-users-repository.js +208 -0
- package/dist/modules/admin/admin-users-repository.js.map +1 -0
- package/dist/modules/admin/index.d.ts +27 -0
- package/dist/modules/admin/index.d.ts.map +1 -0
- package/dist/modules/admin/index.js +27 -0
- package/dist/modules/admin/index.js.map +1 -0
- package/dist/modules/admin/refresh-tokens-repository.d.ts +16 -0
- package/dist/modules/admin/refresh-tokens-repository.d.ts.map +1 -0
- package/dist/modules/admin/refresh-tokens-repository.js +132 -0
- package/dist/modules/admin/refresh-tokens-repository.js.map +1 -0
- package/dist/modules/admin/tests/auth-integration.test.d.ts +9 -0
- package/dist/modules/admin/tests/auth-integration.test.d.ts.map +1 -0
- package/dist/modules/admin/tests/auth-integration.test.js +392 -0
- package/dist/modules/admin/tests/auth-integration.test.js.map +1 -0
- package/dist/modules/admin/tests/session-provider.test.d.ts +9 -0
- package/dist/modules/admin/tests/session-provider.test.d.ts.map +1 -0
- package/dist/modules/admin/tests/session-provider.test.js +370 -0
- package/dist/modules/admin/tests/session-provider.test.js.map +1 -0
- package/dist/modules/storage/@types.d.ts +116 -0
- package/dist/modules/storage/@types.d.ts.map +1 -0
- package/dist/modules/storage/@types.js +9 -0
- package/dist/modules/storage/@types.js.map +1 -0
- package/dist/modules/storage/storage-commands.d.ts +136 -0
- package/dist/modules/storage/storage-commands.d.ts.map +1 -0
- package/dist/modules/storage/storage-commands.js +272 -0
- package/dist/modules/storage/storage-commands.js.map +1 -0
- package/dist/modules/storage/storage-flatten.d.ts +19 -0
- package/dist/modules/storage/storage-flatten.d.ts.map +1 -0
- package/dist/modules/storage/storage-flatten.js +261 -0
- package/dist/modules/storage/storage-flatten.js.map +1 -0
- package/dist/modules/storage/storage-insert.d.ts +22 -0
- package/dist/modules/storage/storage-insert.d.ts.map +1 -0
- package/dist/modules/storage/storage-insert.js +115 -0
- package/dist/modules/storage/storage-insert.js.map +1 -0
- package/dist/modules/storage/storage-queries.d.ts +377 -0
- package/dist/modules/storage/storage-queries.d.ts.map +1 -0
- package/dist/modules/storage/storage-queries.js +976 -0
- package/dist/modules/storage/storage-queries.js.map +1 -0
- package/dist/modules/storage/storage-restore.d.ts +19 -0
- package/dist/modules/storage/storage-restore.d.ts.map +1 -0
- package/dist/modules/storage/storage-restore.js +350 -0
- package/dist/modules/storage/storage-restore.js.map +1 -0
- package/dist/modules/storage/storage-store-manifest.d.ts +71 -0
- package/dist/modules/storage/storage-store-manifest.d.ts.map +1 -0
- package/dist/modules/storage/storage-store-manifest.js +294 -0
- package/dist/modules/storage/storage-store-manifest.js.map +1 -0
- package/dist/modules/storage/storage-utils.d.ts +23 -0
- package/dist/modules/storage/storage-utils.d.ts.map +1 -0
- package/dist/modules/storage/storage-utils.js +72 -0
- package/dist/modules/storage/storage-utils.js.map +1 -0
- package/dist/modules/storage/tests/storage-field-types.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-field-types.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-field-types.test.js +146 -0
- package/dist/modules/storage/tests/storage-field-types.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js +327 -0
- package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.js +141 -0
- package/dist/modules/storage/tests/storage-store-manifest.test.js.map +1 -0
- package/dist/modules/storage/tests/storage-versioning.test.d.ts +9 -0
- package/dist/modules/storage/tests/storage-versioning.test.d.ts.map +1 -0
- package/dist/modules/storage/tests/storage-versioning.test.js +336 -0
- package/dist/modules/storage/tests/storage-versioning.test.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/database/schema/auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuCH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCtB,CAAA;AAMD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBtB,CAAA;AAMD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe9B,CAAA;AAMD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB5B,CAAA;AAMD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,CAAA;AAMD,eAAO,MAAM,mBAAmB;;;EAG7B,CAAA;AAEH,eAAO,MAAM,mBAAmB;;;EAG7B,CAAA;AAEH,eAAO,MAAM,2BAA2B;;;EASrC,CAAA;AAEH,eAAO,MAAM,yBAAyB;;EAKnC,CAAA;AAEH,eAAO,MAAM,2BAA2B;;EAKrC,CAAA"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Auth schema — admin identity, roles, role-user assignment, and per-role
|
|
10
|
+
* ability grants.
|
|
11
|
+
*
|
|
12
|
+
* All tables carry the `byline_` prefix so Byline can coexist with other
|
|
13
|
+
* schemas in a shared database. The TypeScript exports are unprefixed —
|
|
14
|
+
* the prefix is a DB-side concern.
|
|
15
|
+
*
|
|
16
|
+
* Shape mirrors the mature Modulus Learning implementation with minor
|
|
17
|
+
* Byline conventions:
|
|
18
|
+
* - UUIDv7 primary keys (generated at insert time in the repository).
|
|
19
|
+
* - `vid` integer version column for optimistic concurrency (defaults
|
|
20
|
+
* to 1; bumped by write paths when needed).
|
|
21
|
+
* - snake_case column names matching the rest of the Byline schema.
|
|
22
|
+
*
|
|
23
|
+
* See docs/analysis/AUTHN-AUTHZ-ANALYSIS.md for the full data model and
|
|
24
|
+
* phased rollout.
|
|
25
|
+
*/
|
|
26
|
+
import { relations } from 'drizzle-orm';
|
|
27
|
+
import { boolean, index, integer, pgTable, primaryKey, text, timestamp, unique, uuid, varchar, } from 'drizzle-orm/pg-core';
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// byline_admin_users
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
export const adminUsers = pgTable('byline_admin_users', {
|
|
32
|
+
id: uuid('id').primaryKey(),
|
|
33
|
+
vid: integer('vid').notNull().default(1),
|
|
34
|
+
given_name: varchar('given_name', { length: 100 }),
|
|
35
|
+
family_name: varchar('family_name', { length: 100 }),
|
|
36
|
+
/** Optional — email is the primary identifier. Unique when present. */
|
|
37
|
+
username: varchar('username', { length: 64 }).unique(),
|
|
38
|
+
email: varchar('email', { length: 254 }).notNull().unique(),
|
|
39
|
+
/** Full PHC string, e.g. `$argon2id$v=19$m=…$…$…`. */
|
|
40
|
+
password: varchar('password', { length: 255 }).notNull(),
|
|
41
|
+
remember_me: boolean('remember_me').notNull().default(false),
|
|
42
|
+
last_login: timestamp('last_login', { precision: 6, withTimezone: true }),
|
|
43
|
+
last_login_ip: varchar('last_login_ip', { length: 45 }),
|
|
44
|
+
failed_login_attempts: integer('failed_login_attempts').notNull().default(0),
|
|
45
|
+
/**
|
|
46
|
+
* Actor-level super-admin bypass. When true, `AdminAuth.isSuperAdmin`
|
|
47
|
+
* short-circuits every ability check. Set only via the seed script
|
|
48
|
+
* (or manually by a DB admin) — never via the admin UI.
|
|
49
|
+
*/
|
|
50
|
+
is_super_admin: boolean('is_super_admin').notNull().default(false),
|
|
51
|
+
/**
|
|
52
|
+
* Account enablement. Defaults to `false` so accounts created through
|
|
53
|
+
* any future admin UI require a deliberate enable step. The super-admin
|
|
54
|
+
* seed sets this to `true`.
|
|
55
|
+
*/
|
|
56
|
+
is_enabled: boolean('is_enabled').notNull().default(false),
|
|
57
|
+
is_email_verified: boolean('is_email_verified').notNull().default(false),
|
|
58
|
+
created_at: timestamp('created_at').notNull().defaultNow(),
|
|
59
|
+
updated_at: timestamp('updated_at').notNull().defaultNow(),
|
|
60
|
+
}, (table) => [index('idx_byline_admin_users_email').on(table.email)]);
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// byline_admin_roles
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
export const adminRoles = pgTable('byline_admin_roles', {
|
|
65
|
+
id: uuid('id').primaryKey(),
|
|
66
|
+
vid: integer('vid').notNull().default(1),
|
|
67
|
+
/** Human-readable label, e.g. `'Editor'`. */
|
|
68
|
+
name: varchar('name', { length: 128 }).notNull(),
|
|
69
|
+
/** Stable identifier used in code, e.g. `'editor'`, `'super-admin'`. */
|
|
70
|
+
machine_name: varchar('machine_name', { length: 128 }).notNull().unique(),
|
|
71
|
+
description: text('description'),
|
|
72
|
+
/** Display ordering in the role-editor UI. */
|
|
73
|
+
order: integer('order').notNull().default(0),
|
|
74
|
+
created_at: timestamp('created_at').notNull().defaultNow(),
|
|
75
|
+
updated_at: timestamp('updated_at').notNull().defaultNow(),
|
|
76
|
+
}, (table) => [index('idx_byline_admin_roles_machine_name').on(table.machine_name)]);
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// byline_admin_role_admin_user — many-to-many join
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
export const adminRoleAdminUser = pgTable('byline_admin_role_admin_user', {
|
|
81
|
+
admin_role_id: uuid('admin_role_id')
|
|
82
|
+
.notNull()
|
|
83
|
+
.references(() => adminRoles.id, { onDelete: 'cascade' }),
|
|
84
|
+
admin_user_id: uuid('admin_user_id')
|
|
85
|
+
.notNull()
|
|
86
|
+
.references(() => adminUsers.id, { onDelete: 'cascade' }),
|
|
87
|
+
created_at: timestamp('created_at').notNull().defaultNow(),
|
|
88
|
+
}, (table) => [
|
|
89
|
+
primaryKey({ columns: [table.admin_role_id, table.admin_user_id] }),
|
|
90
|
+
index('idx_byline_admin_role_admin_user_user').on(table.admin_user_id),
|
|
91
|
+
]);
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// byline_admin_permissions — one row per (role, ability) grant
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
export const adminPermissions = pgTable('byline_admin_permissions', {
|
|
96
|
+
id: uuid('id').primaryKey(),
|
|
97
|
+
vid: integer('vid').notNull().default(1),
|
|
98
|
+
admin_role_id: uuid('admin_role_id')
|
|
99
|
+
.notNull()
|
|
100
|
+
.references(() => adminRoles.id, { onDelete: 'cascade' }),
|
|
101
|
+
/** Flat dotted ability key — see `@byline/auth` AbilityRegistry. */
|
|
102
|
+
ability: varchar('ability', { length: 128 }).notNull(),
|
|
103
|
+
created_at: timestamp('created_at').notNull().defaultNow(),
|
|
104
|
+
updated_at: timestamp('updated_at').notNull().defaultNow(),
|
|
105
|
+
}, (table) => [
|
|
106
|
+
unique('uq_byline_admin_permissions_role_ability').on(table.admin_role_id, table.ability),
|
|
107
|
+
index('idx_byline_admin_permissions_role').on(table.admin_role_id),
|
|
108
|
+
]);
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// byline_admin_refresh_tokens — JWT session provider's refresh-token store
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
/**
|
|
113
|
+
* Refresh tokens are opaque random strings minted by `JwtSessionProvider`.
|
|
114
|
+
* We never store the plaintext — only a SHA-256 hash (`token_hash`). When
|
|
115
|
+
* a token is rotated, `revoked_at` is stamped and `rotated_to_id` points
|
|
116
|
+
* at the replacement row; presenting a rotated token is treated as replay
|
|
117
|
+
* and revokes the whole chain.
|
|
118
|
+
*/
|
|
119
|
+
export const adminRefreshTokens = pgTable('byline_admin_refresh_tokens', {
|
|
120
|
+
id: uuid('id').primaryKey(),
|
|
121
|
+
admin_user_id: uuid('admin_user_id')
|
|
122
|
+
.notNull()
|
|
123
|
+
.references(() => adminUsers.id, { onDelete: 'cascade' }),
|
|
124
|
+
/** SHA-256 hex digest of the raw refresh-token string. 64 chars. */
|
|
125
|
+
token_hash: varchar('token_hash', { length: 64 }).notNull().unique(),
|
|
126
|
+
issued_at: timestamp('issued_at', { precision: 6, withTimezone: true }).notNull().defaultNow(),
|
|
127
|
+
expires_at: timestamp('expires_at', { precision: 6, withTimezone: true }).notNull(),
|
|
128
|
+
revoked_at: timestamp('revoked_at', { precision: 6, withTimezone: true }),
|
|
129
|
+
/**
|
|
130
|
+
* When this token was rotated, the id of the new token issued in its
|
|
131
|
+
* place. Self-referential; set atomically alongside `revoked_at`.
|
|
132
|
+
*/
|
|
133
|
+
rotated_to_id: uuid('rotated_to_id'),
|
|
134
|
+
last_used_at: timestamp('last_used_at', { precision: 6, withTimezone: true }),
|
|
135
|
+
user_agent: varchar('user_agent', { length: 512 }),
|
|
136
|
+
ip: varchar('ip', { length: 45 }),
|
|
137
|
+
created_at: timestamp('created_at').notNull().defaultNow(),
|
|
138
|
+
updated_at: timestamp('updated_at').notNull().defaultNow(),
|
|
139
|
+
}, (table) => [
|
|
140
|
+
index('idx_byline_admin_refresh_tokens_user').on(table.admin_user_id),
|
|
141
|
+
index('idx_byline_admin_refresh_tokens_token_hash').on(table.token_hash),
|
|
142
|
+
]);
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
// Relations (drizzle query helpers)
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
export const adminUsersRelations = relations(adminUsers, ({ many }) => ({
|
|
147
|
+
roleAssignments: many(adminRoleAdminUser),
|
|
148
|
+
refreshTokens: many(adminRefreshTokens),
|
|
149
|
+
}));
|
|
150
|
+
export const adminRolesRelations = relations(adminRoles, ({ many }) => ({
|
|
151
|
+
userAssignments: many(adminRoleAdminUser),
|
|
152
|
+
permissions: many(adminPermissions),
|
|
153
|
+
}));
|
|
154
|
+
export const adminRoleAdminUserRelations = relations(adminRoleAdminUser, ({ one }) => ({
|
|
155
|
+
role: one(adminRoles, {
|
|
156
|
+
fields: [adminRoleAdminUser.admin_role_id],
|
|
157
|
+
references: [adminRoles.id],
|
|
158
|
+
}),
|
|
159
|
+
user: one(adminUsers, {
|
|
160
|
+
fields: [adminRoleAdminUser.admin_user_id],
|
|
161
|
+
references: [adminUsers.id],
|
|
162
|
+
}),
|
|
163
|
+
}));
|
|
164
|
+
export const adminPermissionsRelations = relations(adminPermissions, ({ one }) => ({
|
|
165
|
+
role: one(adminRoles, {
|
|
166
|
+
fields: [adminPermissions.admin_role_id],
|
|
167
|
+
references: [adminRoles.id],
|
|
168
|
+
}),
|
|
169
|
+
}));
|
|
170
|
+
export const adminRefreshTokensRelations = relations(adminRefreshTokens, ({ one }) => ({
|
|
171
|
+
user: one(adminUsers, {
|
|
172
|
+
fields: [adminRefreshTokens.admin_user_id],
|
|
173
|
+
references: [adminUsers.id],
|
|
174
|
+
}),
|
|
175
|
+
}));
|
|
176
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/database/schema/auth.ts"],"names":[],"mappings":"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"}
|