@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.
Files changed (99) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +18 -0
  3. package/dist/database/schema/auth.d.ts +857 -0
  4. package/dist/database/schema/auth.d.ts.map +1 -0
  5. package/dist/database/schema/auth.js +176 -0
  6. package/dist/database/schema/auth.js.map +1 -0
  7. package/dist/database/schema/index.d.ts +2955 -0
  8. package/dist/database/schema/index.d.ts.map +1 -0
  9. package/dist/database/schema/index.js +500 -0
  10. package/dist/database/schema/index.js.map +1 -0
  11. package/dist/index.d.ts +31 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +30 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/lib/test-helper.d.ts +17 -0
  16. package/dist/lib/test-helper.d.ts.map +1 -0
  17. package/dist/lib/test-helper.js +47 -0
  18. package/dist/lib/test-helper.js.map +1 -0
  19. package/dist/modules/admin/admin-permissions-repository.d.ts +17 -0
  20. package/dist/modules/admin/admin-permissions-repository.d.ts.map +1 -0
  21. package/dist/modules/admin/admin-permissions-repository.js +76 -0
  22. package/dist/modules/admin/admin-permissions-repository.js.map +1 -0
  23. package/dist/modules/admin/admin-roles-repository.d.ts +12 -0
  24. package/dist/modules/admin/admin-roles-repository.d.ts.map +1 -0
  25. package/dist/modules/admin/admin-roles-repository.js +168 -0
  26. package/dist/modules/admin/admin-roles-repository.js.map +1 -0
  27. package/dist/modules/admin/admin-store.d.ts +20 -0
  28. package/dist/modules/admin/admin-store.d.ts.map +1 -0
  29. package/dist/modules/admin/admin-store.js +28 -0
  30. package/dist/modules/admin/admin-store.js.map +1 -0
  31. package/dist/modules/admin/admin-users-repository.d.ts +12 -0
  32. package/dist/modules/admin/admin-users-repository.d.ts.map +1 -0
  33. package/dist/modules/admin/admin-users-repository.js +208 -0
  34. package/dist/modules/admin/admin-users-repository.js.map +1 -0
  35. package/dist/modules/admin/index.d.ts +27 -0
  36. package/dist/modules/admin/index.d.ts.map +1 -0
  37. package/dist/modules/admin/index.js +27 -0
  38. package/dist/modules/admin/index.js.map +1 -0
  39. package/dist/modules/admin/refresh-tokens-repository.d.ts +16 -0
  40. package/dist/modules/admin/refresh-tokens-repository.d.ts.map +1 -0
  41. package/dist/modules/admin/refresh-tokens-repository.js +132 -0
  42. package/dist/modules/admin/refresh-tokens-repository.js.map +1 -0
  43. package/dist/modules/admin/tests/auth-integration.test.d.ts +9 -0
  44. package/dist/modules/admin/tests/auth-integration.test.d.ts.map +1 -0
  45. package/dist/modules/admin/tests/auth-integration.test.js +392 -0
  46. package/dist/modules/admin/tests/auth-integration.test.js.map +1 -0
  47. package/dist/modules/admin/tests/session-provider.test.d.ts +9 -0
  48. package/dist/modules/admin/tests/session-provider.test.d.ts.map +1 -0
  49. package/dist/modules/admin/tests/session-provider.test.js +370 -0
  50. package/dist/modules/admin/tests/session-provider.test.js.map +1 -0
  51. package/dist/modules/storage/@types.d.ts +116 -0
  52. package/dist/modules/storage/@types.d.ts.map +1 -0
  53. package/dist/modules/storage/@types.js +9 -0
  54. package/dist/modules/storage/@types.js.map +1 -0
  55. package/dist/modules/storage/storage-commands.d.ts +136 -0
  56. package/dist/modules/storage/storage-commands.d.ts.map +1 -0
  57. package/dist/modules/storage/storage-commands.js +272 -0
  58. package/dist/modules/storage/storage-commands.js.map +1 -0
  59. package/dist/modules/storage/storage-flatten.d.ts +19 -0
  60. package/dist/modules/storage/storage-flatten.d.ts.map +1 -0
  61. package/dist/modules/storage/storage-flatten.js +261 -0
  62. package/dist/modules/storage/storage-flatten.js.map +1 -0
  63. package/dist/modules/storage/storage-insert.d.ts +22 -0
  64. package/dist/modules/storage/storage-insert.d.ts.map +1 -0
  65. package/dist/modules/storage/storage-insert.js +115 -0
  66. package/dist/modules/storage/storage-insert.js.map +1 -0
  67. package/dist/modules/storage/storage-queries.d.ts +377 -0
  68. package/dist/modules/storage/storage-queries.d.ts.map +1 -0
  69. package/dist/modules/storage/storage-queries.js +976 -0
  70. package/dist/modules/storage/storage-queries.js.map +1 -0
  71. package/dist/modules/storage/storage-restore.d.ts +19 -0
  72. package/dist/modules/storage/storage-restore.d.ts.map +1 -0
  73. package/dist/modules/storage/storage-restore.js +350 -0
  74. package/dist/modules/storage/storage-restore.js.map +1 -0
  75. package/dist/modules/storage/storage-store-manifest.d.ts +71 -0
  76. package/dist/modules/storage/storage-store-manifest.d.ts.map +1 -0
  77. package/dist/modules/storage/storage-store-manifest.js +294 -0
  78. package/dist/modules/storage/storage-store-manifest.js.map +1 -0
  79. package/dist/modules/storage/storage-utils.d.ts +23 -0
  80. package/dist/modules/storage/storage-utils.d.ts.map +1 -0
  81. package/dist/modules/storage/storage-utils.js +72 -0
  82. package/dist/modules/storage/storage-utils.js.map +1 -0
  83. package/dist/modules/storage/tests/storage-field-types.test.d.ts +9 -0
  84. package/dist/modules/storage/tests/storage-field-types.test.d.ts.map +1 -0
  85. package/dist/modules/storage/tests/storage-field-types.test.js +146 -0
  86. package/dist/modules/storage/tests/storage-field-types.test.js.map +1 -0
  87. package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts +9 -0
  88. package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts.map +1 -0
  89. package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js +327 -0
  90. package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js.map +1 -0
  91. package/dist/modules/storage/tests/storage-store-manifest.test.d.ts +9 -0
  92. package/dist/modules/storage/tests/storage-store-manifest.test.d.ts.map +1 -0
  93. package/dist/modules/storage/tests/storage-store-manifest.test.js +141 -0
  94. package/dist/modules/storage/tests/storage-store-manifest.test.js.map +1 -0
  95. package/dist/modules/storage/tests/storage-versioning.test.d.ts +9 -0
  96. package/dist/modules/storage/tests/storage-versioning.test.d.ts.map +1 -0
  97. package/dist/modules/storage/tests/storage-versioning.test.js +336 -0
  98. package/dist/modules/storage/tests/storage-versioning.test.js.map +1 -0
  99. 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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"}