@shipfox/api-auth 18.0.0 → 19.0.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +34 -0
- package/README.md +24 -9
- package/dist/core/administration.d.ts +15 -0
- package/dist/core/administration.d.ts.map +1 -1
- package/dist/core/administration.js +44 -2
- package/dist/core/administration.js.map +1 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +5 -3
- package/dist/core/auth.js.map +1 -1
- package/dist/core/entities/agent-access.d.ts +75 -0
- package/dist/core/entities/agent-access.d.ts.map +1 -0
- package/dist/core/entities/agent-access.js +3 -0
- package/dist/core/entities/agent-access.js.map +1 -0
- package/dist/core/errors.d.ts +3 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +6 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/db/admin-user-moderation.d.ts.map +1 -1
- package/dist/db/admin-user-moderation.js +30 -26
- package/dist/db/admin-user-moderation.js.map +1 -1
- package/dist/db/admin-user-summary.d.ts +22 -0
- package/dist/db/admin-user-summary.d.ts.map +1 -1
- package/dist/db/admin-user-summary.js +75 -1
- package/dist/db/admin-user-summary.js.map +1 -1
- package/dist/db/admin-users.d.ts +11 -0
- package/dist/db/admin-users.d.ts.map +1 -1
- package/dist/db/admin-users.js +4 -1
- package/dist/db/admin-users.js.map +1 -1
- package/dist/db/agent-access.d.ts +159 -0
- package/dist/db/agent-access.d.ts.map +1 -0
- package/dist/db/agent-access.js +267 -0
- package/dist/db/agent-access.js.map +1 -0
- package/dist/db/db.d.ts +2604 -238
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +7 -0
- package/dist/db/db.js.map +1 -1
- package/dist/db/schema/agent-access.d.ts +1204 -0
- package/dist/db/schema/agent-access.d.ts.map +1 -0
- package/dist/db/schema/agent-access.js +267 -0
- package/dist/db/schema/agent-access.js.map +1 -0
- package/dist/db/schema/users.d.ts.map +1 -1
- package/dist/db/schema/users.js +8 -3
- package/dist/db/schema/users.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/metrics/instance.d.ts +1 -1
- package/dist/metrics/instance.d.ts.map +1 -1
- package/dist/metrics/instance.js.map +1 -1
- package/dist/presentation/routes/administration.d.ts.map +1 -1
- package/dist/presentation/routes/administration.js +123 -20
- package/dist/presentation/routes/administration.js.map +1 -1
- package/dist/presentation/routes/email-verification/verify-email-resend.d.ts.map +1 -1
- package/dist/presentation/routes/email-verification/verify-email-resend.js +6 -1
- package/dist/presentation/routes/email-verification/verify-email-resend.js.map +1 -1
- package/dist/presentation/routes/rate-limit.d.ts.map +1 -1
- package/dist/presentation/routes/rate-limit.js +10 -0
- package/dist/presentation/routes/rate-limit.js.map +1 -1
- package/dist/presentation/routes/registration/signup.d.ts.map +1 -1
- package/dist/presentation/routes/registration/signup.js +59 -50
- package/dist/presentation/routes/registration/signup.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0003_brainy_luckman.sql +6 -0
- package/drizzle/0004_yummy_runaways.sql +110 -0
- package/drizzle/meta/0003_snapshot.json +844 -0
- package/drizzle/meta/0004_snapshot.json +1751 -0
- package/drizzle/meta/_journal.json +14 -0
- package/package.json +7 -7
- package/src/core/admin-role.test.ts +70 -0
- package/src/core/administration.ts +78 -1
- package/src/core/auth.ts +3 -5
- package/src/core/entities/agent-access.ts +80 -0
- package/src/core/errors.ts +7 -0
- package/src/db/admin-user-moderation.ts +53 -45
- package/src/db/admin-user-summary.test.ts +228 -0
- package/src/db/admin-user-summary.ts +143 -1
- package/src/db/admin-users.ts +21 -1
- package/src/db/agent-access.test.ts +370 -0
- package/src/db/agent-access.ts +629 -0
- package/src/db/db.ts +14 -0
- package/src/db/schema/agent-access.ts +273 -0
- package/src/db/schema/users.ts +9 -3
- package/src/index.ts +6 -0
- package/src/metrics/instance.ts +1 -0
- package/src/presentation/routes/administration.test.ts +359 -2
- package/src/presentation/routes/administration.ts +142 -20
- package/src/presentation/routes/email-verification/verify-email-resend.ts +7 -1
- package/src/presentation/routes/rate-limit.ts +4 -0
- package/src/presentation/routes/registration/signup.ts +52 -41
- package/test/globalSetup.ts +1 -1
- package/test/routes.ts +3 -1
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-access.d.ts","sourceRoot":"","sources":["../../../src/db/schema/agent-access.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EAEX,UAAU,EACV,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,gCAAgC,CAAC;AAIxC,eAAO,MAAM,mBAAmB,8DAA2D,CAAC;AAE5F,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBxB,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBtC,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BvB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBnC,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyB9B,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBrC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC7D,MAAM,MAAM,mBAAmB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AACnE,MAAM,MAAM,2BAA2B,GAAG,OAAO,0BAA0B,CAAC,YAAY,CAAC;AACzF,MAAM,MAAM,iCAAiC,GAAG,OAAO,0BAA0B,CAAC,YAAY,CAAC;AAC/F,MAAM,MAAM,YAAY,GAAG,OAAO,WAAW,CAAC,YAAY,CAAC;AAC3D,MAAM,MAAM,kBAAkB,GAAG,OAAO,WAAW,CAAC,YAAY,CAAC;AACjE,MAAM,MAAM,wBAAwB,GAAG,OAAO,uBAAuB,CAAC,YAAY,CAAC;AACnF,MAAM,MAAM,8BAA8B,GAAG,OAAO,uBAAuB,CAAC,YAAY,CAAC;AACzF,MAAM,MAAM,mBAAmB,GAAG,OAAO,kBAAkB,CAAC,YAAY,CAAC;AACzE,MAAM,MAAM,yBAAyB,GAAG,OAAO,kBAAkB,CAAC,YAAY,CAAC;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,yBAAyB,CAAC,YAAY,CAAC;AACvF,MAAM,MAAM,gCAAgC,GAAG,OAAO,yBAAyB,CAAC,YAAY,CAAC;AAE7F,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,WAAW,CAY7D;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,2BAA2B,GAC/B,yBAAyB,CAc3B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,YAAY,GAAG,UAAU,CAa1D;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,wBAAwB,GAAG,sBAAsB,CAa9F;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,CAY/E;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,0BAA0B,GAC9B,wBAAwB,CAe1B"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { uuidv7PrimaryKey } from '@shipfox/node-drizzle';
|
|
2
|
+
import { sql } from 'drizzle-orm';
|
|
3
|
+
import { index, pgEnum, text, timestamp, uniqueIndex, uuid } from 'drizzle-orm/pg-core';
|
|
4
|
+
import { pgTable } from './common.js';
|
|
5
|
+
import { users } from './users.js';
|
|
6
|
+
export const agentClientKindEnum = pgEnum('auth_agent_client_kind', [
|
|
7
|
+
'registered',
|
|
8
|
+
'cimd'
|
|
9
|
+
]);
|
|
10
|
+
export const agentClients = pgTable('agent_clients', {
|
|
11
|
+
id: uuidv7PrimaryKey(),
|
|
12
|
+
clientId: text('client_id').notNull(),
|
|
13
|
+
name: text('name').notNull(),
|
|
14
|
+
redirectUris: text('redirect_uris').array().notNull(),
|
|
15
|
+
kind: agentClientKindEnum('kind').notNull(),
|
|
16
|
+
lastSeenAt: timestamp('last_seen_at', {
|
|
17
|
+
withTimezone: true
|
|
18
|
+
}),
|
|
19
|
+
unreferencedAt: timestamp('unreferenced_at', {
|
|
20
|
+
withTimezone: true
|
|
21
|
+
}),
|
|
22
|
+
createdAt: timestamp('created_at', {
|
|
23
|
+
withTimezone: true
|
|
24
|
+
}).notNull().defaultNow(),
|
|
25
|
+
updatedAt: timestamp('updated_at', {
|
|
26
|
+
withTimezone: true
|
|
27
|
+
}).notNull().defaultNow()
|
|
28
|
+
}, (table)=>[
|
|
29
|
+
uniqueIndex('auth_agent_clients_client_id_unique').on(table.clientId),
|
|
30
|
+
index('auth_agent_clients_unreferenced_at_idx').on(table.unreferencedAt),
|
|
31
|
+
index('auth_agent_clients_created_at_idx').on(table.createdAt)
|
|
32
|
+
]);
|
|
33
|
+
export const agentAuthorizationRequests = pgTable('agent_authorization_requests', {
|
|
34
|
+
id: uuidv7PrimaryKey(),
|
|
35
|
+
clientId: uuid('client_id').notNull().references(()=>agentClients.id, {
|
|
36
|
+
onDelete: 'cascade'
|
|
37
|
+
}),
|
|
38
|
+
redirectUri: text('redirect_uri').notNull(),
|
|
39
|
+
resource: text('resource').notNull(),
|
|
40
|
+
scopes: text('scopes').array().notNull(),
|
|
41
|
+
codeChallenge: text('code_challenge').notNull(),
|
|
42
|
+
state: text('state'),
|
|
43
|
+
expiresAt: timestamp('expires_at', {
|
|
44
|
+
withTimezone: true
|
|
45
|
+
}).notNull(),
|
|
46
|
+
consumedAt: timestamp('consumed_at', {
|
|
47
|
+
withTimezone: true
|
|
48
|
+
}),
|
|
49
|
+
createdAt: timestamp('created_at', {
|
|
50
|
+
withTimezone: true
|
|
51
|
+
}).notNull().defaultNow(),
|
|
52
|
+
updatedAt: timestamp('updated_at', {
|
|
53
|
+
withTimezone: true
|
|
54
|
+
}).notNull().defaultNow()
|
|
55
|
+
}, (table)=>[
|
|
56
|
+
index('auth_agent_authorization_requests_client_id_idx').on(table.clientId),
|
|
57
|
+
index('auth_agent_authorization_requests_expires_at_idx').on(table.expiresAt)
|
|
58
|
+
]);
|
|
59
|
+
export const agentGrants = pgTable('agent_grants', {
|
|
60
|
+
id: uuidv7PrimaryKey(),
|
|
61
|
+
userId: uuid('user_id').notNull().references(()=>users.id, {
|
|
62
|
+
onDelete: 'cascade'
|
|
63
|
+
}),
|
|
64
|
+
workspaceId: uuid('workspace_id').notNull(),
|
|
65
|
+
clientId: uuid('client_id').notNull().references(()=>agentClients.id, {
|
|
66
|
+
onDelete: 'cascade'
|
|
67
|
+
}),
|
|
68
|
+
scopes: text('scopes').array().notNull(),
|
|
69
|
+
lastUsedAt: timestamp('last_used_at', {
|
|
70
|
+
withTimezone: true
|
|
71
|
+
}),
|
|
72
|
+
revokedAt: timestamp('revoked_at', {
|
|
73
|
+
withTimezone: true
|
|
74
|
+
}),
|
|
75
|
+
terminalAt: timestamp('terminal_at', {
|
|
76
|
+
withTimezone: true
|
|
77
|
+
}),
|
|
78
|
+
createdAt: timestamp('created_at', {
|
|
79
|
+
withTimezone: true
|
|
80
|
+
}).notNull().defaultNow(),
|
|
81
|
+
updatedAt: timestamp('updated_at', {
|
|
82
|
+
withTimezone: true
|
|
83
|
+
}).notNull().defaultNow()
|
|
84
|
+
}, (table)=>[
|
|
85
|
+
index('auth_agent_grants_user_id_idx').on(table.userId),
|
|
86
|
+
index('auth_agent_grants_workspace_id_idx').on(table.workspaceId),
|
|
87
|
+
index('auth_agent_grants_client_id_idx').on(table.clientId),
|
|
88
|
+
index('auth_agent_grants_terminal_at_idx').on(table.terminalAt),
|
|
89
|
+
uniqueIndex('auth_agent_grants_active_user_workspace_client_unique').on(table.userId, table.workspaceId, table.clientId).where(sql`${table.revokedAt} IS NULL AND ${table.terminalAt} IS NULL`)
|
|
90
|
+
]);
|
|
91
|
+
export const agentAuthorizationCodes = pgTable('agent_authorization_codes', {
|
|
92
|
+
id: uuidv7PrimaryKey(),
|
|
93
|
+
grantId: uuid('grant_id').notNull().references(()=>agentGrants.id, {
|
|
94
|
+
onDelete: 'cascade'
|
|
95
|
+
}),
|
|
96
|
+
hashedCode: text('hashed_code').notNull(),
|
|
97
|
+
codeChallenge: text('code_challenge').notNull(),
|
|
98
|
+
redirectUri: text('redirect_uri').notNull(),
|
|
99
|
+
resource: text('resource').notNull(),
|
|
100
|
+
expiresAt: timestamp('expires_at', {
|
|
101
|
+
withTimezone: true
|
|
102
|
+
}).notNull(),
|
|
103
|
+
consumedAt: timestamp('consumed_at', {
|
|
104
|
+
withTimezone: true
|
|
105
|
+
}),
|
|
106
|
+
createdAt: timestamp('created_at', {
|
|
107
|
+
withTimezone: true
|
|
108
|
+
}).notNull().defaultNow(),
|
|
109
|
+
updatedAt: timestamp('updated_at', {
|
|
110
|
+
withTimezone: true
|
|
111
|
+
}).notNull().defaultNow()
|
|
112
|
+
}, (table)=>[
|
|
113
|
+
uniqueIndex('auth_agent_authorization_codes_hashed_code_unique').on(table.hashedCode),
|
|
114
|
+
index('auth_agent_authorization_codes_grant_id_idx').on(table.grantId),
|
|
115
|
+
index('auth_agent_authorization_codes_expires_at_idx').on(table.expiresAt)
|
|
116
|
+
]);
|
|
117
|
+
export const agentRefreshTokens = pgTable('agent_refresh_tokens', {
|
|
118
|
+
id: uuidv7PrimaryKey(),
|
|
119
|
+
grantId: uuid('grant_id').notNull().references(()=>agentGrants.id, {
|
|
120
|
+
onDelete: 'cascade'
|
|
121
|
+
}),
|
|
122
|
+
hashedToken: text('hashed_token').notNull(),
|
|
123
|
+
expiresAt: timestamp('expires_at', {
|
|
124
|
+
withTimezone: true
|
|
125
|
+
}).notNull(),
|
|
126
|
+
rotatedAt: timestamp('rotated_at', {
|
|
127
|
+
withTimezone: true
|
|
128
|
+
}),
|
|
129
|
+
revokedAt: timestamp('revoked_at', {
|
|
130
|
+
withTimezone: true
|
|
131
|
+
}),
|
|
132
|
+
lastUsedAt: timestamp('last_used_at', {
|
|
133
|
+
withTimezone: true
|
|
134
|
+
}),
|
|
135
|
+
createdAt: timestamp('created_at', {
|
|
136
|
+
withTimezone: true
|
|
137
|
+
}).notNull().defaultNow(),
|
|
138
|
+
updatedAt: timestamp('updated_at', {
|
|
139
|
+
withTimezone: true
|
|
140
|
+
}).notNull().defaultNow()
|
|
141
|
+
}, (table)=>[
|
|
142
|
+
uniqueIndex('auth_agent_refresh_tokens_hashed_token_unique').on(table.hashedToken),
|
|
143
|
+
uniqueIndex('auth_agent_refresh_tokens_live_grant_unique').on(table.grantId).where(sql`${table.rotatedAt} IS NULL AND ${table.revokedAt} IS NULL`),
|
|
144
|
+
index('auth_agent_refresh_tokens_grant_id_idx').on(table.grantId),
|
|
145
|
+
index('auth_agent_refresh_tokens_expires_at_idx').on(table.expiresAt),
|
|
146
|
+
index('auth_agent_refresh_tokens_rotated_at_idx').on(table.rotatedAt),
|
|
147
|
+
index('auth_agent_refresh_tokens_revoked_at_idx').on(table.revokedAt)
|
|
148
|
+
]);
|
|
149
|
+
export const agentPersonalAccessTokens = pgTable('agent_pats', {
|
|
150
|
+
id: uuidv7PrimaryKey(),
|
|
151
|
+
userId: uuid('user_id').notNull().references(()=>users.id, {
|
|
152
|
+
onDelete: 'cascade'
|
|
153
|
+
}),
|
|
154
|
+
workspaceId: uuid('workspace_id').notNull(),
|
|
155
|
+
hashedToken: text('hashed_token').notNull(),
|
|
156
|
+
prefix: text('prefix').notNull(),
|
|
157
|
+
name: text('name').notNull(),
|
|
158
|
+
scopes: text('scopes').array().notNull(),
|
|
159
|
+
expiresAt: timestamp('expires_at', {
|
|
160
|
+
withTimezone: true
|
|
161
|
+
}).notNull(),
|
|
162
|
+
lastUsedAt: timestamp('last_used_at', {
|
|
163
|
+
withTimezone: true
|
|
164
|
+
}),
|
|
165
|
+
revokedAt: timestamp('revoked_at', {
|
|
166
|
+
withTimezone: true
|
|
167
|
+
}),
|
|
168
|
+
createdAt: timestamp('created_at', {
|
|
169
|
+
withTimezone: true
|
|
170
|
+
}).notNull().defaultNow(),
|
|
171
|
+
updatedAt: timestamp('updated_at', {
|
|
172
|
+
withTimezone: true
|
|
173
|
+
}).notNull().defaultNow()
|
|
174
|
+
}, (table)=>[
|
|
175
|
+
uniqueIndex('auth_agent_pats_hashed_token_unique').on(table.hashedToken),
|
|
176
|
+
index('auth_agent_pats_user_id_idx').on(table.userId),
|
|
177
|
+
index('auth_agent_pats_workspace_id_idx').on(table.workspaceId),
|
|
178
|
+
index('auth_agent_pats_expires_at_idx').on(table.expiresAt),
|
|
179
|
+
index('auth_agent_pats_revoked_at_idx').on(table.revokedAt)
|
|
180
|
+
]);
|
|
181
|
+
export function toAgentClient(row) {
|
|
182
|
+
return {
|
|
183
|
+
id: row.id,
|
|
184
|
+
clientId: row.clientId,
|
|
185
|
+
name: row.name,
|
|
186
|
+
redirectUris: row.redirectUris,
|
|
187
|
+
kind: row.kind,
|
|
188
|
+
lastSeenAt: row.lastSeenAt,
|
|
189
|
+
unreferencedAt: row.unreferencedAt,
|
|
190
|
+
createdAt: row.createdAt,
|
|
191
|
+
updatedAt: row.updatedAt
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
export function toAgentAuthorizationRequest(row) {
|
|
195
|
+
return {
|
|
196
|
+
id: row.id,
|
|
197
|
+
clientId: row.clientId,
|
|
198
|
+
redirectUri: row.redirectUri,
|
|
199
|
+
resource: row.resource,
|
|
200
|
+
scopes: row.scopes,
|
|
201
|
+
codeChallenge: row.codeChallenge,
|
|
202
|
+
state: row.state,
|
|
203
|
+
expiresAt: row.expiresAt,
|
|
204
|
+
consumedAt: row.consumedAt,
|
|
205
|
+
createdAt: row.createdAt,
|
|
206
|
+
updatedAt: row.updatedAt
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
export function toAgentGrant(row) {
|
|
210
|
+
return {
|
|
211
|
+
id: row.id,
|
|
212
|
+
userId: row.userId,
|
|
213
|
+
workspaceId: row.workspaceId,
|
|
214
|
+
clientId: row.clientId,
|
|
215
|
+
scopes: row.scopes,
|
|
216
|
+
lastUsedAt: row.lastUsedAt,
|
|
217
|
+
revokedAt: row.revokedAt,
|
|
218
|
+
terminalAt: row.terminalAt,
|
|
219
|
+
createdAt: row.createdAt,
|
|
220
|
+
updatedAt: row.updatedAt
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
export function toAgentAuthorizationCode(row) {
|
|
224
|
+
return {
|
|
225
|
+
id: row.id,
|
|
226
|
+
grantId: row.grantId,
|
|
227
|
+
hashedCode: row.hashedCode,
|
|
228
|
+
codeChallenge: row.codeChallenge,
|
|
229
|
+
redirectUri: row.redirectUri,
|
|
230
|
+
resource: row.resource,
|
|
231
|
+
expiresAt: row.expiresAt,
|
|
232
|
+
consumedAt: row.consumedAt,
|
|
233
|
+
createdAt: row.createdAt,
|
|
234
|
+
updatedAt: row.updatedAt
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
export function toAgentRefreshToken(row) {
|
|
238
|
+
return {
|
|
239
|
+
id: row.id,
|
|
240
|
+
grantId: row.grantId,
|
|
241
|
+
hashedToken: row.hashedToken,
|
|
242
|
+
expiresAt: row.expiresAt,
|
|
243
|
+
rotatedAt: row.rotatedAt,
|
|
244
|
+
revokedAt: row.revokedAt,
|
|
245
|
+
lastUsedAt: row.lastUsedAt,
|
|
246
|
+
createdAt: row.createdAt,
|
|
247
|
+
updatedAt: row.updatedAt
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
export function toAgentPersonalAccessToken(row) {
|
|
251
|
+
return {
|
|
252
|
+
id: row.id,
|
|
253
|
+
userId: row.userId,
|
|
254
|
+
workspaceId: row.workspaceId,
|
|
255
|
+
hashedToken: row.hashedToken,
|
|
256
|
+
prefix: row.prefix,
|
|
257
|
+
name: row.name,
|
|
258
|
+
scopes: row.scopes,
|
|
259
|
+
expiresAt: row.expiresAt,
|
|
260
|
+
lastUsedAt: row.lastUsedAt,
|
|
261
|
+
revokedAt: row.revokedAt,
|
|
262
|
+
createdAt: row.createdAt,
|
|
263
|
+
updatedAt: row.updatedAt
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
//# sourceMappingURL=agent-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/db/schema/agent-access.ts"],"sourcesContent":["import {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {sql} from 'drizzle-orm';\nimport {index, pgEnum, text, timestamp, uniqueIndex, uuid} from 'drizzle-orm/pg-core';\nimport type {\n AgentAuthorizationCode,\n AgentAuthorizationRequest,\n AgentClient,\n AgentClientKind,\n AgentGrant,\n AgentPersonalAccessToken,\n AgentRefreshToken,\n} from '#core/entities/agent-access.js';\nimport {pgTable} from './common.js';\nimport {users} from './users.js';\n\nexport const agentClientKindEnum = pgEnum('auth_agent_client_kind', ['registered', 'cimd']);\n\nexport const agentClients = pgTable(\n 'agent_clients',\n {\n id: uuidv7PrimaryKey(),\n clientId: text('client_id').notNull(),\n name: text('name').notNull(),\n redirectUris: text('redirect_uris').array().notNull(),\n kind: agentClientKindEnum('kind').notNull(),\n lastSeenAt: timestamp('last_seen_at', {withTimezone: true}),\n unreferencedAt: timestamp('unreferenced_at', {withTimezone: true}),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('auth_agent_clients_client_id_unique').on(table.clientId),\n index('auth_agent_clients_unreferenced_at_idx').on(table.unreferencedAt),\n index('auth_agent_clients_created_at_idx').on(table.createdAt),\n ],\n);\n\nexport const agentAuthorizationRequests = pgTable(\n 'agent_authorization_requests',\n {\n id: uuidv7PrimaryKey(),\n clientId: uuid('client_id')\n .notNull()\n .references(() => agentClients.id, {onDelete: 'cascade'}),\n redirectUri: text('redirect_uri').notNull(),\n resource: text('resource').notNull(),\n scopes: text('scopes').array().notNull(),\n codeChallenge: text('code_challenge').notNull(),\n state: text('state'),\n expiresAt: timestamp('expires_at', {withTimezone: true}).notNull(),\n consumedAt: timestamp('consumed_at', {withTimezone: true}),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n index('auth_agent_authorization_requests_client_id_idx').on(table.clientId),\n index('auth_agent_authorization_requests_expires_at_idx').on(table.expiresAt),\n ],\n);\n\nexport const agentGrants = pgTable(\n 'agent_grants',\n {\n id: uuidv7PrimaryKey(),\n userId: uuid('user_id')\n .notNull()\n .references(() => users.id, {onDelete: 'cascade'}),\n workspaceId: uuid('workspace_id').notNull(),\n clientId: uuid('client_id')\n .notNull()\n .references(() => agentClients.id, {onDelete: 'cascade'}),\n scopes: text('scopes').array().notNull(),\n lastUsedAt: timestamp('last_used_at', {withTimezone: true}),\n revokedAt: timestamp('revoked_at', {withTimezone: true}),\n terminalAt: timestamp('terminal_at', {withTimezone: true}),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n index('auth_agent_grants_user_id_idx').on(table.userId),\n index('auth_agent_grants_workspace_id_idx').on(table.workspaceId),\n index('auth_agent_grants_client_id_idx').on(table.clientId),\n index('auth_agent_grants_terminal_at_idx').on(table.terminalAt),\n uniqueIndex('auth_agent_grants_active_user_workspace_client_unique')\n .on(table.userId, table.workspaceId, table.clientId)\n .where(sql`${table.revokedAt} IS NULL AND ${table.terminalAt} IS NULL`),\n ],\n);\n\nexport const agentAuthorizationCodes = pgTable(\n 'agent_authorization_codes',\n {\n id: uuidv7PrimaryKey(),\n grantId: uuid('grant_id')\n .notNull()\n .references(() => agentGrants.id, {onDelete: 'cascade'}),\n hashedCode: text('hashed_code').notNull(),\n codeChallenge: text('code_challenge').notNull(),\n redirectUri: text('redirect_uri').notNull(),\n resource: text('resource').notNull(),\n expiresAt: timestamp('expires_at', {withTimezone: true}).notNull(),\n consumedAt: timestamp('consumed_at', {withTimezone: true}),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('auth_agent_authorization_codes_hashed_code_unique').on(table.hashedCode),\n index('auth_agent_authorization_codes_grant_id_idx').on(table.grantId),\n index('auth_agent_authorization_codes_expires_at_idx').on(table.expiresAt),\n ],\n);\n\nexport const agentRefreshTokens = pgTable(\n 'agent_refresh_tokens',\n {\n id: uuidv7PrimaryKey(),\n grantId: uuid('grant_id')\n .notNull()\n .references(() => agentGrants.id, {onDelete: 'cascade'}),\n hashedToken: text('hashed_token').notNull(),\n expiresAt: timestamp('expires_at', {withTimezone: true}).notNull(),\n rotatedAt: timestamp('rotated_at', {withTimezone: true}),\n revokedAt: timestamp('revoked_at', {withTimezone: true}),\n lastUsedAt: timestamp('last_used_at', {withTimezone: true}),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('auth_agent_refresh_tokens_hashed_token_unique').on(table.hashedToken),\n uniqueIndex('auth_agent_refresh_tokens_live_grant_unique')\n .on(table.grantId)\n .where(sql`${table.rotatedAt} IS NULL AND ${table.revokedAt} IS NULL`),\n index('auth_agent_refresh_tokens_grant_id_idx').on(table.grantId),\n index('auth_agent_refresh_tokens_expires_at_idx').on(table.expiresAt),\n index('auth_agent_refresh_tokens_rotated_at_idx').on(table.rotatedAt),\n index('auth_agent_refresh_tokens_revoked_at_idx').on(table.revokedAt),\n ],\n);\n\nexport const agentPersonalAccessTokens = pgTable(\n 'agent_pats',\n {\n id: uuidv7PrimaryKey(),\n userId: uuid('user_id')\n .notNull()\n .references(() => users.id, {onDelete: 'cascade'}),\n workspaceId: uuid('workspace_id').notNull(),\n hashedToken: text('hashed_token').notNull(),\n prefix: text('prefix').notNull(),\n name: text('name').notNull(),\n scopes: text('scopes').array().notNull(),\n expiresAt: timestamp('expires_at', {withTimezone: true}).notNull(),\n lastUsedAt: timestamp('last_used_at', {withTimezone: true}),\n revokedAt: timestamp('revoked_at', {withTimezone: true}),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('auth_agent_pats_hashed_token_unique').on(table.hashedToken),\n index('auth_agent_pats_user_id_idx').on(table.userId),\n index('auth_agent_pats_workspace_id_idx').on(table.workspaceId),\n index('auth_agent_pats_expires_at_idx').on(table.expiresAt),\n index('auth_agent_pats_revoked_at_idx').on(table.revokedAt),\n ],\n);\n\nexport type AgentClientDb = typeof agentClients.$inferSelect;\nexport type AgentClientCreateDb = typeof agentClients.$inferInsert;\nexport type AgentAuthorizationRequestDb = typeof agentAuthorizationRequests.$inferSelect;\nexport type AgentAuthorizationRequestCreateDb = typeof agentAuthorizationRequests.$inferInsert;\nexport type AgentGrantDb = typeof agentGrants.$inferSelect;\nexport type AgentGrantCreateDb = typeof agentGrants.$inferInsert;\nexport type AgentAuthorizationCodeDb = typeof agentAuthorizationCodes.$inferSelect;\nexport type AgentAuthorizationCodeCreateDb = typeof agentAuthorizationCodes.$inferInsert;\nexport type AgentRefreshTokenDb = typeof agentRefreshTokens.$inferSelect;\nexport type AgentRefreshTokenCreateDb = typeof agentRefreshTokens.$inferInsert;\nexport type AgentPersonalAccessTokenDb = typeof agentPersonalAccessTokens.$inferSelect;\nexport type AgentPersonalAccessTokenCreateDb = typeof agentPersonalAccessTokens.$inferInsert;\n\nexport function toAgentClient(row: AgentClientDb): AgentClient {\n return {\n id: row.id,\n clientId: row.clientId,\n name: row.name,\n redirectUris: row.redirectUris,\n kind: row.kind as AgentClientKind,\n lastSeenAt: row.lastSeenAt,\n unreferencedAt: row.unreferencedAt,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nexport function toAgentAuthorizationRequest(\n row: AgentAuthorizationRequestDb,\n): AgentAuthorizationRequest {\n return {\n id: row.id,\n clientId: row.clientId,\n redirectUri: row.redirectUri,\n resource: row.resource,\n scopes: row.scopes,\n codeChallenge: row.codeChallenge,\n state: row.state,\n expiresAt: row.expiresAt,\n consumedAt: row.consumedAt,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nexport function toAgentGrant(row: AgentGrantDb): AgentGrant {\n return {\n id: row.id,\n userId: row.userId,\n workspaceId: row.workspaceId,\n clientId: row.clientId,\n scopes: row.scopes,\n lastUsedAt: row.lastUsedAt,\n revokedAt: row.revokedAt,\n terminalAt: row.terminalAt,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nexport function toAgentAuthorizationCode(row: AgentAuthorizationCodeDb): AgentAuthorizationCode {\n return {\n id: row.id,\n grantId: row.grantId,\n hashedCode: row.hashedCode,\n codeChallenge: row.codeChallenge,\n redirectUri: row.redirectUri,\n resource: row.resource,\n expiresAt: row.expiresAt,\n consumedAt: row.consumedAt,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nexport function toAgentRefreshToken(row: AgentRefreshTokenDb): AgentRefreshToken {\n return {\n id: row.id,\n grantId: row.grantId,\n hashedToken: row.hashedToken,\n expiresAt: row.expiresAt,\n rotatedAt: row.rotatedAt,\n revokedAt: row.revokedAt,\n lastUsedAt: row.lastUsedAt,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nexport function toAgentPersonalAccessToken(\n row: AgentPersonalAccessTokenDb,\n): AgentPersonalAccessToken {\n return {\n id: row.id,\n userId: row.userId,\n workspaceId: row.workspaceId,\n hashedToken: row.hashedToken,\n prefix: row.prefix,\n name: row.name,\n scopes: row.scopes,\n expiresAt: row.expiresAt,\n lastUsedAt: row.lastUsedAt,\n revokedAt: row.revokedAt,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n"],"names":["uuidv7PrimaryKey","sql","index","pgEnum","text","timestamp","uniqueIndex","uuid","pgTable","users","agentClientKindEnum","agentClients","id","clientId","notNull","name","redirectUris","array","kind","lastSeenAt","withTimezone","unreferencedAt","createdAt","defaultNow","updatedAt","table","on","agentAuthorizationRequests","references","onDelete","redirectUri","resource","scopes","codeChallenge","state","expiresAt","consumedAt","agentGrants","userId","workspaceId","lastUsedAt","revokedAt","terminalAt","where","agentAuthorizationCodes","grantId","hashedCode","agentRefreshTokens","hashedToken","rotatedAt","agentPersonalAccessTokens","prefix","toAgentClient","row","toAgentAuthorizationRequest","toAgentGrant","toAgentAuthorizationCode","toAgentRefreshToken","toAgentPersonalAccessToken"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/db/schema/users.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/db/schema/users.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,IAAI,EAAa,MAAM,wBAAwB,CAAC;AAG7D,eAAO,MAAM,cAAc,0EAAiE,CAAC;AAE7F,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBjB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,YAAY,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,YAAY,CAAC;AAErD,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAWxC"}
|
package/dist/db/schema/users.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { uuidv7PrimaryKey } from '@shipfox/node-drizzle';
|
|
2
|
-
import {
|
|
2
|
+
import { desc } from 'drizzle-orm';
|
|
3
|
+
import { index, pgEnum, text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';
|
|
3
4
|
import { pgTable } from './common.js';
|
|
4
5
|
export const userStatusEnum = pgEnum('auth_user_status', [
|
|
5
6
|
'active',
|
|
@@ -16,13 +17,17 @@ export const users = pgTable('users', {
|
|
|
16
17
|
}),
|
|
17
18
|
status: userStatusEnum('status').notNull().default('active'),
|
|
18
19
|
createdAt: timestamp('created_at', {
|
|
19
|
-
withTimezone: true
|
|
20
|
+
withTimezone: true,
|
|
21
|
+
precision: 3
|
|
20
22
|
}).notNull().defaultNow(),
|
|
21
23
|
updatedAt: timestamp('updated_at', {
|
|
22
24
|
withTimezone: true
|
|
23
25
|
}).notNull().defaultNow()
|
|
24
26
|
}, (table)=>[
|
|
25
|
-
uniqueIndex('auth_users_email_unique').on(table.email)
|
|
27
|
+
uniqueIndex('auth_users_email_unique').on(table.email),
|
|
28
|
+
index('auth_users_created_at_id_index').on(desc(table.createdAt), desc(table.id)),
|
|
29
|
+
index('auth_users_name_trgm_index').using('gin', table.name.op('gin_trgm_ops')),
|
|
30
|
+
index('auth_users_email_trgm_index').using('gin', table.email.op('gin_trgm_ops'))
|
|
26
31
|
]);
|
|
27
32
|
export function toUser(row) {
|
|
28
33
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/db/schema/users.ts"],"sourcesContent":["import {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {pgEnum, text, timestamp, uniqueIndex} from 'drizzle-orm/pg-core';\nimport type {User, UserStatus} from '#core/entities/user.js';\nimport {pgTable} from './common.js';\n\nexport const userStatusEnum = pgEnum('auth_user_status', ['active', 'suspended', 'deleted']);\n\nexport const users = pgTable(\n 'users',\n {\n id: uuidv7PrimaryKey(),\n email: text('email').notNull(),\n hashedPassword: text('hashed_password'),\n name: text('name'),\n emailVerifiedAt: timestamp('email_verified_at', {withTimezone: true}),\n status: userStatusEnum('status').notNull().default('active'),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [uniqueIndex('auth_users_email_unique').on(table.email)],\n);\n\nexport type UserDb = typeof users.$inferSelect;\nexport type UserCreateDb = typeof users.$inferInsert;\n\nexport function toUser(row: UserDb): User {\n return {\n id: row.id,\n email: row.email,\n hashedPassword: row.hashedPassword,\n name: row.name,\n emailVerifiedAt: row.emailVerifiedAt,\n status: row.status as UserStatus,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n"],"names":["uuidv7PrimaryKey","pgEnum","text","timestamp","uniqueIndex","pgTable","userStatusEnum","users","id","email","notNull","hashedPassword","name","emailVerifiedAt","withTimezone","status","default","createdAt","defaultNow","updatedAt","table","on","toUser","row"],"mappings":"AAAA,SAAQA,gBAAgB,QAAO,wBAAwB;AACvD,SAAQC,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,WAAW,QAAO,sBAAsB;
|
|
1
|
+
{"version":3,"sources":["../../../src/db/schema/users.ts"],"sourcesContent":["import {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {desc} from 'drizzle-orm';\nimport {index, pgEnum, text, timestamp, uniqueIndex} from 'drizzle-orm/pg-core';\nimport type {User, UserStatus} from '#core/entities/user.js';\nimport {pgTable} from './common.js';\n\nexport const userStatusEnum = pgEnum('auth_user_status', ['active', 'suspended', 'deleted']);\n\nexport const users = pgTable(\n 'users',\n {\n id: uuidv7PrimaryKey(),\n email: text('email').notNull(),\n hashedPassword: text('hashed_password'),\n name: text('name'),\n emailVerifiedAt: timestamp('email_verified_at', {withTimezone: true}),\n status: userStatusEnum('status').notNull().default('active'),\n createdAt: timestamp('created_at', {withTimezone: true, precision: 3}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('auth_users_email_unique').on(table.email),\n index('auth_users_created_at_id_index').on(desc(table.createdAt), desc(table.id)),\n index('auth_users_name_trgm_index').using('gin', table.name.op('gin_trgm_ops')),\n index('auth_users_email_trgm_index').using('gin', table.email.op('gin_trgm_ops')),\n ],\n);\n\nexport type UserDb = typeof users.$inferSelect;\nexport type UserCreateDb = typeof users.$inferInsert;\n\nexport function toUser(row: UserDb): User {\n return {\n id: row.id,\n email: row.email,\n hashedPassword: row.hashedPassword,\n name: row.name,\n emailVerifiedAt: row.emailVerifiedAt,\n status: row.status as UserStatus,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n"],"names":["uuidv7PrimaryKey","desc","index","pgEnum","text","timestamp","uniqueIndex","pgTable","userStatusEnum","users","id","email","notNull","hashedPassword","name","emailVerifiedAt","withTimezone","status","default","createdAt","precision","defaultNow","updatedAt","table","on","using","op","toUser","row"],"mappings":"AAAA,SAAQA,gBAAgB,QAAO,wBAAwB;AACvD,SAAQC,IAAI,QAAO,cAAc;AACjC,SAAQC,KAAK,EAAEC,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,WAAW,QAAO,sBAAsB;AAEhF,SAAQC,OAAO,QAAO,cAAc;AAEpC,OAAO,MAAMC,iBAAiBL,OAAO,oBAAoB;IAAC;IAAU;IAAa;CAAU,EAAE;AAE7F,OAAO,MAAMM,QAAQF,QACnB,SACA;IACEG,IAAIV;IACJW,OAAOP,KAAK,SAASQ,OAAO;IAC5BC,gBAAgBT,KAAK;IACrBU,MAAMV,KAAK;IACXW,iBAAiBV,UAAU,qBAAqB;QAACW,cAAc;IAAI;IACnEC,QAAQT,eAAe,UAAUI,OAAO,GAAGM,OAAO,CAAC;IACnDC,WAAWd,UAAU,cAAc;QAACW,cAAc;QAAMI,WAAW;IAAC,GAAGR,OAAO,GAAGS,UAAU;IAC3FC,WAAWjB,UAAU,cAAc;QAACW,cAAc;IAAI,GAAGJ,OAAO,GAAGS,UAAU;AAC/E,GACA,CAACE,QAAU;QACTjB,YAAY,2BAA2BkB,EAAE,CAACD,MAAMZ,KAAK;QACrDT,MAAM,kCAAkCsB,EAAE,CAACvB,KAAKsB,MAAMJ,SAAS,GAAGlB,KAAKsB,MAAMb,EAAE;QAC/ER,MAAM,8BAA8BuB,KAAK,CAAC,OAAOF,MAAMT,IAAI,CAACY,EAAE,CAAC;QAC/DxB,MAAM,+BAA+BuB,KAAK,CAAC,OAAOF,MAAMZ,KAAK,CAACe,EAAE,CAAC;KAClE,EACD;AAKF,OAAO,SAASC,OAAOC,GAAW;IAChC,OAAO;QACLlB,IAAIkB,IAAIlB,EAAE;QACVC,OAAOiB,IAAIjB,KAAK;QAChBE,gBAAgBe,IAAIf,cAAc;QAClCC,MAAMc,IAAId,IAAI;QACdC,iBAAiBa,IAAIb,eAAe;QACpCE,QAAQW,IAAIX,MAAM;QAClBE,WAAWS,IAAIT,SAAS;QACxBG,WAAWM,IAAIN,SAAS;IAC1B;AACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,14 +2,15 @@ import type { ShipfoxModule } from '@shipfox/node-module';
|
|
|
2
2
|
import type { SignupPolicy } from '#core/ports.js';
|
|
3
3
|
export type { AdminRole, JobLeaseTokenClaims, RunnerSessionTokenClaims } from '@shipfox/api-auth-dto';
|
|
4
4
|
export { ADMIN_ROLES, getCurrentAdminRole, hasMinimumAdminRole, highestAdminRole, requireAdminRole, revokeAdminGrant, } from '#core/admin-role.js';
|
|
5
|
-
export {
|
|
5
|
+
export type { ListAdministratorUsersParams, ListAdministratorUsersResult, } from '#core/administration.js';
|
|
6
|
+
export { bootstrapFirstAdminOwner, grantAdministratorRole, impersonateUser, listAdministratorUsers, reactivateAdministratorUser, revokeAdministratorGrant, revokeAdministratorUserSessions, suspendAdministratorUser, } from '#core/administration.js';
|
|
6
7
|
export type { CreateImpersonatedSessionTokenParams, CreateImpersonatedSessionTokenResult, CreateSessionForUserError, CreateSessionForUserParams, CreateSessionForUserResult, ProvisionUserParams, } from '#core/auth.js';
|
|
7
8
|
export { createImpersonatedSessionToken, createSessionForUser, provisionUser } from '#core/auth.js';
|
|
8
9
|
export type { EmailOwner, FindUserByEmailParams } from '#core/email-owner.js';
|
|
9
10
|
export { findUserByEmail } from '#core/email-owner.js';
|
|
10
11
|
export type { AdminGrant } from '#core/entities/admin-grant.js';
|
|
11
12
|
export type { User, UserStatus } from '#core/entities/user.js';
|
|
12
|
-
export { AdminBootstrapClosedError, AdminGrantAlreadyExistsError, AdminGrantNotFoundError, AdminIdempotencyKeyReuseError, AdminRoleRequiredError, AuthDependencyUnavailableError, CannotImpersonateAdministratorError, CannotImpersonateSelfError, EmailNotVerifiedError, ImpersonationDisabledError, ImpersonationExpiredError, ImpersonationTargetNotActiveError, InvalidAdminBootstrapTokenError, InvalidCredentialsError, LastAdminOwnerError, SignupNotAllowedError, UserNotFoundError, } from '#core/errors.js';
|
|
13
|
+
export { AdminBootstrapClosedError, AdminGrantAlreadyExistsError, AdminGrantNotFoundError, AdminIdempotencyKeyReuseError, AdminRoleRequiredError, AuthDependencyUnavailableError, CannotImpersonateAdministratorError, CannotImpersonateSelfError, EmailNotVerifiedError, ImpersonationDisabledError, ImpersonationExpiredError, ImpersonationTargetNotActiveError, InvalidAdminBootstrapTokenError, InvalidAdministratorUserDirectoryFilterError, InvalidCredentialsError, LastAdminOwnerError, SignupNotAllowedError, UserNotFoundError, } from '#core/errors.js';
|
|
13
14
|
export { issueJobLeaseToken, jobLeaseParamsFrom, verifyJobLeaseToken, } from '#core/job-lease-token.js';
|
|
14
15
|
export type { SignupDenialMessageFormat, SignupPolicy } from '#core/ports.js';
|
|
15
16
|
export { issueRunnerSessionToken, verifyRunnerSessionToken, } from '#core/runner-session-token.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAqBjD,YAAY,EAAC,SAAS,EAAE,mBAAmB,EAAE,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AACpG,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,2BAA2B,EAC3B,wBAAwB,EACxB,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,oCAAoC,EACpC,oCAAoC,EACpC,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,8BAA8B,EAAE,oBAAoB,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AAClG,YAAY,EAAC,UAAU,EAAE,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAC,UAAU,EAAC,MAAM,+BAA+B,CAAC;AAC9D,YAAY,EAAC,IAAI,EAAE,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,6BAA6B,EAC7B,sBAAsB,EACtB,8BAA8B,EAC9B,mCAAmC,EACnC,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,iCAAiC,EACjC,+BAA+B,EAC/B,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAC,yBAAyB,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,KAAK,2BAA2B,EAChC,mBAAmB,EACnB,8BAA8B,EAC9B,KAAK,gBAAgB,EACrB,KAAK,MAAM,GACZ,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,0BAA0B,EAAC,MAAM,wCAAwC,CAAC;AAClF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAC,6BAA6B,EAAC,MAAM,2CAA2C,CAAC;AAIxF,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,OAAO,0CAA0C,EAAE,2BAA2B,CAAC;IAC3F,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,YAA8C,GAC/C,EAAE,uBAAuB,GAAG,aAAa,CAiBzC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAqBjD,YAAY,EAAC,SAAS,EAAE,mBAAmB,EAAE,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AACpG,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,oCAAoC,EACpC,oCAAoC,EACpC,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,8BAA8B,EAAE,oBAAoB,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AAClG,YAAY,EAAC,UAAU,EAAE,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAC,UAAU,EAAC,MAAM,+BAA+B,CAAC;AAC9D,YAAY,EAAC,IAAI,EAAE,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,6BAA6B,EAC7B,sBAAsB,EACtB,8BAA8B,EAC9B,mCAAmC,EACnC,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,iCAAiC,EACjC,+BAA+B,EAC/B,4CAA4C,EAC5C,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAC,yBAAyB,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,KAAK,2BAA2B,EAChC,mBAAmB,EACnB,8BAA8B,EAC9B,KAAK,gBAAgB,EACrB,KAAK,MAAM,GACZ,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,0BAA0B,EAAC,MAAM,wCAAwC,CAAC;AAClF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAC,6BAA6B,EAAC,MAAM,2CAA2C,CAAC;AAIxF,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,OAAO,0CAA0C,EAAE,2BAA2B,CAAC;IAC3F,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,YAA8C,GAC/C,EAAE,uBAAuB,GAAG,aAAa,CAiBzC"}
|
package/dist/index.js
CHANGED
|
@@ -20,10 +20,10 @@ const authPublisherEventSchemas = {
|
|
|
20
20
|
...administrationActionEventSchemas
|
|
21
21
|
};
|
|
22
22
|
export { ADMIN_ROLES, getCurrentAdminRole, hasMinimumAdminRole, highestAdminRole, requireAdminRole, revokeAdminGrant } from '#core/admin-role.js';
|
|
23
|
-
export { bootstrapFirstAdminOwner, grantAdministratorRole, impersonateUser, reactivateAdministratorUser, revokeAdministratorGrant, revokeAdministratorUserSessions, suspendAdministratorUser } from '#core/administration.js';
|
|
23
|
+
export { bootstrapFirstAdminOwner, grantAdministratorRole, impersonateUser, listAdministratorUsers, reactivateAdministratorUser, revokeAdministratorGrant, revokeAdministratorUserSessions, suspendAdministratorUser } from '#core/administration.js';
|
|
24
24
|
export { createImpersonatedSessionToken, createSessionForUser, provisionUser } from '#core/auth.js';
|
|
25
25
|
export { findUserByEmail } from '#core/email-owner.js';
|
|
26
|
-
export { AdminBootstrapClosedError, AdminGrantAlreadyExistsError, AdminGrantNotFoundError, AdminIdempotencyKeyReuseError, AdminRoleRequiredError, AuthDependencyUnavailableError, CannotImpersonateAdministratorError, CannotImpersonateSelfError, EmailNotVerifiedError, ImpersonationDisabledError, ImpersonationExpiredError, ImpersonationTargetNotActiveError, InvalidAdminBootstrapTokenError, InvalidCredentialsError, LastAdminOwnerError, SignupNotAllowedError, UserNotFoundError } from '#core/errors.js';
|
|
26
|
+
export { AdminBootstrapClosedError, AdminGrantAlreadyExistsError, AdminGrantNotFoundError, AdminIdempotencyKeyReuseError, AdminRoleRequiredError, AuthDependencyUnavailableError, CannotImpersonateAdministratorError, CannotImpersonateSelfError, EmailNotVerifiedError, ImpersonationDisabledError, ImpersonationExpiredError, ImpersonationTargetNotActiveError, InvalidAdminBootstrapTokenError, InvalidAdministratorUserDirectoryFilterError, InvalidCredentialsError, LastAdminOwnerError, SignupNotAllowedError, UserNotFoundError } from '#core/errors.js';
|
|
27
27
|
export { issueJobLeaseToken, jobLeaseParamsFrom, verifyJobLeaseToken } from '#core/job-lease-token.js';
|
|
28
28
|
export { issueRunnerSessionToken, verifyRunnerSessionToken } from '#core/runner-session-token.js';
|
|
29
29
|
export { createEnvironmentSignupPolicy, DEFAULT_SIGNUP_NOT_ALLOWED_MESSAGE } from '#core/signup-policy.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n AUTH_PASSWORD_RESET_SEND_REQUESTED,\n type AuthEventMap,\n authEventSchemas,\n} from '@shipfox/api-auth-dto';\nimport {administrationActionEventSchemas} from '@shipfox/api-common-dto';\nimport type {ShipfoxModule} from '@shipfox/node-module';\nimport {subscriberFactory} from '@shipfox/node-module';\nimport {config} from '#config.js';\nimport type {SignupPolicy} from '#core/ports.js';\nimport {createEnvironmentSignupPolicy} from '#core/signup-policy.js';\nimport {db} from '#db/db.js';\nimport {migrationsPath} from '#db/migrations.js';\nimport {authOutbox} from '#db/schema/outbox.js';\nimport {createJwtAuthMethod} from '#presentation/auth/jwt-auth.js';\nimport {createLeaseTokenAuthMethod} from '#presentation/auth/lease-token-auth.js';\nimport {createRunnerSessionAuthMethod} from '#presentation/auth/runner-session-auth.js';\nimport {createAuthE2eRoutes} from '#presentation/e2eRoutes/index.js';\nimport {createAuthInterModulePresentation} from '#presentation/inter-module.js';\nimport {\n administrationBootstrapRoutes,\n administrationRoutes,\n createAdministrationUserRoutes,\n} from '#presentation/routes/administration.js';\nimport {buildAuthRoutes} from '#presentation/routes/index.js';\nimport {onPasswordResetSendRequested} from '#presentation/subscribers/index.js';\nimport {passwordLoginMethods} from './login-methods.js';\n\nconst authPublisherEventSchemas = {...authEventSchemas, ...administrationActionEventSchemas};\n\nexport type {AdminRole, JobLeaseTokenClaims, RunnerSessionTokenClaims} from '@shipfox/api-auth-dto';\nexport {\n ADMIN_ROLES,\n getCurrentAdminRole,\n hasMinimumAdminRole,\n highestAdminRole,\n requireAdminRole,\n revokeAdminGrant,\n} from '#core/admin-role.js';\nexport {\n bootstrapFirstAdminOwner,\n grantAdministratorRole,\n impersonateUser,\n reactivateAdministratorUser,\n revokeAdministratorGrant,\n revokeAdministratorUserSessions,\n suspendAdministratorUser,\n} from '#core/administration.js';\nexport type {\n CreateImpersonatedSessionTokenParams,\n CreateImpersonatedSessionTokenResult,\n CreateSessionForUserError,\n CreateSessionForUserParams,\n CreateSessionForUserResult,\n ProvisionUserParams,\n} from '#core/auth.js';\nexport {createImpersonatedSessionToken, createSessionForUser, provisionUser} from '#core/auth.js';\nexport type {EmailOwner, FindUserByEmailParams} from '#core/email-owner.js';\nexport {findUserByEmail} from '#core/email-owner.js';\nexport type {AdminGrant} from '#core/entities/admin-grant.js';\nexport type {User, UserStatus} from '#core/entities/user.js';\nexport {\n AdminBootstrapClosedError,\n AdminGrantAlreadyExistsError,\n AdminGrantNotFoundError,\n AdminIdempotencyKeyReuseError,\n AdminRoleRequiredError,\n AuthDependencyUnavailableError,\n CannotImpersonateAdministratorError,\n CannotImpersonateSelfError,\n EmailNotVerifiedError,\n ImpersonationDisabledError,\n ImpersonationExpiredError,\n ImpersonationTargetNotActiveError,\n InvalidAdminBootstrapTokenError,\n InvalidCredentialsError,\n LastAdminOwnerError,\n SignupNotAllowedError,\n UserNotFoundError,\n} from '#core/errors.js';\nexport {\n issueJobLeaseToken,\n jobLeaseParamsFrom,\n verifyJobLeaseToken,\n} from '#core/job-lease-token.js';\nexport type {SignupDenialMessageFormat, SignupPolicy} from '#core/ports.js';\nexport {\n issueRunnerSessionToken,\n verifyRunnerSessionToken,\n} from '#core/runner-session-token.js';\nexport {\n createEnvironmentSignupPolicy,\n DEFAULT_SIGNUP_NOT_ALLOWED_MESSAGE,\n} from '#core/signup-policy.js';\nexport type {ImpersonationResult} from '#db/impersonation.js';\nexport {\n type AuthenticatedSessionContext,\n createJwtAuthMethod,\n getAuthenticatedSessionContext,\n type RefreshSessionId,\n type UserId,\n} from '#presentation/auth/jwt-auth.js';\nexport {createLeaseTokenAuthMethod} from '#presentation/auth/lease-token-auth.js';\nexport {\n authCookiePlugin,\n clearRefreshTokenCookie,\n getRefreshTokenCookie,\n setRefreshTokenCookie,\n} from '#presentation/auth/refresh-cookie.js';\nexport {createRunnerSessionAuthMethod} from '#presentation/auth/runner-session-auth.js';\n\nconst subscriber = subscriberFactory<AuthEventMap>();\n\nexport interface CreateAuthModuleOptions {\n workspaces: import('@shipfox/api-workspaces-dto/inter-module').WorkspacesInterModuleClient;\n signupPolicy?: SignupPolicy;\n}\n\nexport function createAuthModule({\n workspaces,\n signupPolicy = createEnvironmentSignupPolicy(),\n}: CreateAuthModuleOptions): ShipfoxModule {\n return {\n name: 'auth',\n database: {db, migrationsPath, databaseNamespace: 'auth'},\n auth: [createJwtAuthMethod(), createLeaseTokenAuthMethod(), createRunnerSessionAuthMethod()],\n loginMethods: passwordLoginMethods(config.AUTH_PASSWORD_ENABLED),\n routes: [\n buildAuthRoutes(config.AUTH_PASSWORD_ENABLED, workspaces, signupPolicy),\n administrationBootstrapRoutes,\n administrationRoutes,\n ...createAdministrationUserRoutes(workspaces),\n ],\n e2eRoutes: [createAuthE2eRoutes(workspaces)],\n publishers: [{name: 'auth', table: authOutbox, db, eventSchemas: authPublisherEventSchemas}],\n subscribers: [subscriber(AUTH_PASSWORD_RESET_SEND_REQUESTED, onPasswordResetSendRequested)],\n interModulePresentations: [createAuthInterModulePresentation()],\n };\n}\n"],"names":["AUTH_PASSWORD_RESET_SEND_REQUESTED","authEventSchemas","administrationActionEventSchemas","subscriberFactory","config","createEnvironmentSignupPolicy","db","migrationsPath","authOutbox","createJwtAuthMethod","createLeaseTokenAuthMethod","createRunnerSessionAuthMethod","createAuthE2eRoutes","createAuthInterModulePresentation","administrationBootstrapRoutes","administrationRoutes","createAdministrationUserRoutes","buildAuthRoutes","onPasswordResetSendRequested","passwordLoginMethods","authPublisherEventSchemas","ADMIN_ROLES","getCurrentAdminRole","hasMinimumAdminRole","highestAdminRole","requireAdminRole","revokeAdminGrant","bootstrapFirstAdminOwner","grantAdministratorRole","impersonateUser","reactivateAdministratorUser","revokeAdministratorGrant","revokeAdministratorUserSessions","suspendAdministratorUser","createImpersonatedSessionToken","createSessionForUser","provisionUser","findUserByEmail","AdminBootstrapClosedError","AdminGrantAlreadyExistsError","AdminGrantNotFoundError","AdminIdempotencyKeyReuseError","AdminRoleRequiredError","AuthDependencyUnavailableError","CannotImpersonateAdministratorError","CannotImpersonateSelfError","EmailNotVerifiedError","ImpersonationDisabledError","ImpersonationExpiredError","ImpersonationTargetNotActiveError","InvalidAdminBootstrapTokenError","InvalidCredentialsError","LastAdminOwnerError","SignupNotAllowedError","UserNotFoundError","issueJobLeaseToken","jobLeaseParamsFrom","verifyJobLeaseToken","issueRunnerSessionToken","verifyRunnerSessionToken","DEFAULT_SIGNUP_NOT_ALLOWED_MESSAGE","getAuthenticatedSessionContext","authCookiePlugin","clearRefreshTokenCookie","getRefreshTokenCookie","setRefreshTokenCookie","subscriber","createAuthModule","workspaces","signupPolicy","name","database","databaseNamespace","auth","loginMethods","AUTH_PASSWORD_ENABLED","routes","e2eRoutes","publishers","table","eventSchemas","subscribers","interModulePresentations"],"mappings":"AAAA,SACEA,kCAAkC,EAElCC,gBAAgB,QACX,wBAAwB;AAC/B,SAAQC,gCAAgC,QAAO,0BAA0B;AAEzE,SAAQC,iBAAiB,QAAO,uBAAuB;AACvD,SAAQC,MAAM,QAAO,aAAa;AAElC,SAAQC,6BAA6B,QAAO,yBAAyB;AACrE,SAAQC,EAAE,QAAO,YAAY;AAC7B,SAAQC,cAAc,QAAO,oBAAoB;AACjD,SAAQC,UAAU,QAAO,uBAAuB;AAChD,SAAQC,mBAAmB,QAAO,iCAAiC;AACnE,SAAQC,0BAA0B,QAAO,yCAAyC;AAClF,SAAQC,6BAA6B,QAAO,4CAA4C;AACxF,SAAQC,mBAAmB,QAAO,mCAAmC;AACrE,SAAQC,iCAAiC,QAAO,gCAAgC;AAChF,SACEC,6BAA6B,EAC7BC,oBAAoB,EACpBC,8BAA8B,QACzB,yCAAyC;AAChD,SAAQC,eAAe,QAAO,gCAAgC;AAC9D,SAAQC,4BAA4B,QAAO,qCAAqC;AAChF,SAAQC,oBAAoB,QAAO,qBAAqB;AAExD,MAAMC,4BAA4B;IAAC,GAAGnB,gBAAgB;IAAE,GAAGC,gCAAgC;AAAA;AAG3F,SACEmB,WAAW,EACXC,mBAAmB,EACnBC,mBAAmB,EACnBC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,QACX,sBAAsB;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n AUTH_PASSWORD_RESET_SEND_REQUESTED,\n type AuthEventMap,\n authEventSchemas,\n} from '@shipfox/api-auth-dto';\nimport {administrationActionEventSchemas} from '@shipfox/api-common-dto';\nimport type {ShipfoxModule} from '@shipfox/node-module';\nimport {subscriberFactory} from '@shipfox/node-module';\nimport {config} from '#config.js';\nimport type {SignupPolicy} from '#core/ports.js';\nimport {createEnvironmentSignupPolicy} from '#core/signup-policy.js';\nimport {db} from '#db/db.js';\nimport {migrationsPath} from '#db/migrations.js';\nimport {authOutbox} from '#db/schema/outbox.js';\nimport {createJwtAuthMethod} from '#presentation/auth/jwt-auth.js';\nimport {createLeaseTokenAuthMethod} from '#presentation/auth/lease-token-auth.js';\nimport {createRunnerSessionAuthMethod} from '#presentation/auth/runner-session-auth.js';\nimport {createAuthE2eRoutes} from '#presentation/e2eRoutes/index.js';\nimport {createAuthInterModulePresentation} from '#presentation/inter-module.js';\nimport {\n administrationBootstrapRoutes,\n administrationRoutes,\n createAdministrationUserRoutes,\n} from '#presentation/routes/administration.js';\nimport {buildAuthRoutes} from '#presentation/routes/index.js';\nimport {onPasswordResetSendRequested} from '#presentation/subscribers/index.js';\nimport {passwordLoginMethods} from './login-methods.js';\n\nconst authPublisherEventSchemas = {...authEventSchemas, ...administrationActionEventSchemas};\n\nexport type {AdminRole, JobLeaseTokenClaims, RunnerSessionTokenClaims} from '@shipfox/api-auth-dto';\nexport {\n ADMIN_ROLES,\n getCurrentAdminRole,\n hasMinimumAdminRole,\n highestAdminRole,\n requireAdminRole,\n revokeAdminGrant,\n} from '#core/admin-role.js';\nexport type {\n ListAdministratorUsersParams,\n ListAdministratorUsersResult,\n} from '#core/administration.js';\nexport {\n bootstrapFirstAdminOwner,\n grantAdministratorRole,\n impersonateUser,\n listAdministratorUsers,\n reactivateAdministratorUser,\n revokeAdministratorGrant,\n revokeAdministratorUserSessions,\n suspendAdministratorUser,\n} from '#core/administration.js';\nexport type {\n CreateImpersonatedSessionTokenParams,\n CreateImpersonatedSessionTokenResult,\n CreateSessionForUserError,\n CreateSessionForUserParams,\n CreateSessionForUserResult,\n ProvisionUserParams,\n} from '#core/auth.js';\nexport {createImpersonatedSessionToken, createSessionForUser, provisionUser} from '#core/auth.js';\nexport type {EmailOwner, FindUserByEmailParams} from '#core/email-owner.js';\nexport {findUserByEmail} from '#core/email-owner.js';\nexport type {AdminGrant} from '#core/entities/admin-grant.js';\nexport type {User, UserStatus} from '#core/entities/user.js';\nexport {\n AdminBootstrapClosedError,\n AdminGrantAlreadyExistsError,\n AdminGrantNotFoundError,\n AdminIdempotencyKeyReuseError,\n AdminRoleRequiredError,\n AuthDependencyUnavailableError,\n CannotImpersonateAdministratorError,\n CannotImpersonateSelfError,\n EmailNotVerifiedError,\n ImpersonationDisabledError,\n ImpersonationExpiredError,\n ImpersonationTargetNotActiveError,\n InvalidAdminBootstrapTokenError,\n InvalidAdministratorUserDirectoryFilterError,\n InvalidCredentialsError,\n LastAdminOwnerError,\n SignupNotAllowedError,\n UserNotFoundError,\n} from '#core/errors.js';\nexport {\n issueJobLeaseToken,\n jobLeaseParamsFrom,\n verifyJobLeaseToken,\n} from '#core/job-lease-token.js';\nexport type {SignupDenialMessageFormat, SignupPolicy} from '#core/ports.js';\nexport {\n issueRunnerSessionToken,\n verifyRunnerSessionToken,\n} from '#core/runner-session-token.js';\nexport {\n createEnvironmentSignupPolicy,\n DEFAULT_SIGNUP_NOT_ALLOWED_MESSAGE,\n} from '#core/signup-policy.js';\nexport type {ImpersonationResult} from '#db/impersonation.js';\nexport {\n type AuthenticatedSessionContext,\n createJwtAuthMethod,\n getAuthenticatedSessionContext,\n type RefreshSessionId,\n type UserId,\n} from '#presentation/auth/jwt-auth.js';\nexport {createLeaseTokenAuthMethod} from '#presentation/auth/lease-token-auth.js';\nexport {\n authCookiePlugin,\n clearRefreshTokenCookie,\n getRefreshTokenCookie,\n setRefreshTokenCookie,\n} from '#presentation/auth/refresh-cookie.js';\nexport {createRunnerSessionAuthMethod} from '#presentation/auth/runner-session-auth.js';\n\nconst subscriber = subscriberFactory<AuthEventMap>();\n\nexport interface CreateAuthModuleOptions {\n workspaces: import('@shipfox/api-workspaces-dto/inter-module').WorkspacesInterModuleClient;\n signupPolicy?: SignupPolicy;\n}\n\nexport function createAuthModule({\n workspaces,\n signupPolicy = createEnvironmentSignupPolicy(),\n}: CreateAuthModuleOptions): ShipfoxModule {\n return {\n name: 'auth',\n database: {db, migrationsPath, databaseNamespace: 'auth'},\n auth: [createJwtAuthMethod(), createLeaseTokenAuthMethod(), createRunnerSessionAuthMethod()],\n loginMethods: passwordLoginMethods(config.AUTH_PASSWORD_ENABLED),\n routes: [\n buildAuthRoutes(config.AUTH_PASSWORD_ENABLED, workspaces, signupPolicy),\n administrationBootstrapRoutes,\n administrationRoutes,\n ...createAdministrationUserRoutes(workspaces),\n ],\n e2eRoutes: [createAuthE2eRoutes(workspaces)],\n publishers: [{name: 'auth', table: authOutbox, db, eventSchemas: authPublisherEventSchemas}],\n subscribers: [subscriber(AUTH_PASSWORD_RESET_SEND_REQUESTED, onPasswordResetSendRequested)],\n interModulePresentations: [createAuthInterModulePresentation()],\n };\n}\n"],"names":["AUTH_PASSWORD_RESET_SEND_REQUESTED","authEventSchemas","administrationActionEventSchemas","subscriberFactory","config","createEnvironmentSignupPolicy","db","migrationsPath","authOutbox","createJwtAuthMethod","createLeaseTokenAuthMethod","createRunnerSessionAuthMethod","createAuthE2eRoutes","createAuthInterModulePresentation","administrationBootstrapRoutes","administrationRoutes","createAdministrationUserRoutes","buildAuthRoutes","onPasswordResetSendRequested","passwordLoginMethods","authPublisherEventSchemas","ADMIN_ROLES","getCurrentAdminRole","hasMinimumAdminRole","highestAdminRole","requireAdminRole","revokeAdminGrant","bootstrapFirstAdminOwner","grantAdministratorRole","impersonateUser","listAdministratorUsers","reactivateAdministratorUser","revokeAdministratorGrant","revokeAdministratorUserSessions","suspendAdministratorUser","createImpersonatedSessionToken","createSessionForUser","provisionUser","findUserByEmail","AdminBootstrapClosedError","AdminGrantAlreadyExistsError","AdminGrantNotFoundError","AdminIdempotencyKeyReuseError","AdminRoleRequiredError","AuthDependencyUnavailableError","CannotImpersonateAdministratorError","CannotImpersonateSelfError","EmailNotVerifiedError","ImpersonationDisabledError","ImpersonationExpiredError","ImpersonationTargetNotActiveError","InvalidAdminBootstrapTokenError","InvalidAdministratorUserDirectoryFilterError","InvalidCredentialsError","LastAdminOwnerError","SignupNotAllowedError","UserNotFoundError","issueJobLeaseToken","jobLeaseParamsFrom","verifyJobLeaseToken","issueRunnerSessionToken","verifyRunnerSessionToken","DEFAULT_SIGNUP_NOT_ALLOWED_MESSAGE","getAuthenticatedSessionContext","authCookiePlugin","clearRefreshTokenCookie","getRefreshTokenCookie","setRefreshTokenCookie","subscriber","createAuthModule","workspaces","signupPolicy","name","database","databaseNamespace","auth","loginMethods","AUTH_PASSWORD_ENABLED","routes","e2eRoutes","publishers","table","eventSchemas","subscribers","interModulePresentations"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type AuthTokenType = 'session' | 'job_lease' | 'runner_session';
|
|
2
2
|
export type AuthTokenVerificationOutcome = 'ok' | 'rejected';
|
|
3
3
|
export type AuthTokenRefreshOutcome = 'rotated' | 'grace' | 'rejected';
|
|
4
|
-
export type AuthRateLimitAction = 'login' | 'email-send' | 'bootstrap' | 'bootstrap-state' | 'lookup' | 'impersonate';
|
|
4
|
+
export type AuthRateLimitAction = 'login' | 'email-send' | 'bootstrap' | 'bootstrap-state' | 'lookup' | 'directory' | 'impersonate';
|
|
5
5
|
export type AuthRateLimitScope = 'ip' | 'email' | 'actor';
|
|
6
6
|
export type AuthRateLimitOutcome = 'allowed' | 'blocked' | 'unavailable';
|
|
7
7
|
export type AuthImpersonationOutcome = 'succeeded' | 'failed';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/metrics/instance.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,gBAAgB,CAAC;AACvE,MAAM,MAAM,4BAA4B,GAAG,IAAI,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AACvE,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,YAAY,GACZ,WAAW,GACX,iBAAiB,GACjB,QAAQ,GACR,aAAa,CAAC;AAClB,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC;AAC1D,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AACzE,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,QAAQ,CAAC;AA2C9D,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAEhE;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,4BAA4B,GACpC,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAE3E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,oBAAoB,CAAC;CAC/B,GAAG,IAAI,CAQP;AAED,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAElF"}
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/metrics/instance.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,gBAAgB,CAAC;AACvE,MAAM,MAAM,4BAA4B,GAAG,IAAI,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AACvE,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,YAAY,GACZ,WAAW,GACX,iBAAiB,GACjB,QAAQ,GACR,WAAW,GACX,aAAa,CAAC;AAClB,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC;AAC1D,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AACzE,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,QAAQ,CAAC;AA2C9D,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAEhE;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,4BAA4B,GACpC,IAAI,CAEN;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAE3E;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,oBAAoB,CAAC;CAC/B,GAAG,IAAI,CAQP;AAED,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAElF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/metrics/instance.ts"],"sourcesContent":["import {instanceMetrics} from '@shipfox/node-opentelemetry';\n\nexport type AuthTokenType = 'session' | 'job_lease' | 'runner_session';\nexport type AuthTokenVerificationOutcome = 'ok' | 'rejected';\nexport type AuthTokenRefreshOutcome = 'rotated' | 'grace' | 'rejected';\nexport type AuthRateLimitAction =\n | 'login'\n | 'email-send'\n | 'bootstrap'\n | 'bootstrap-state'\n | 'lookup'\n | 'impersonate';\nexport type AuthRateLimitScope = 'ip' | 'email' | 'actor';\nexport type AuthRateLimitOutcome = 'allowed' | 'blocked' | 'unavailable';\nexport type AuthImpersonationOutcome = 'succeeded' | 'failed';\n\nconst meter = instanceMetrics.getMeter('auth');\n\nconst tokenIssuedCount = meter.createCounter<{token_type: AuthTokenType}>('auth_token_issued', {\n description: 'Tokens issued by token type',\n});\n\nconst tokenVerifiedCount = meter.createCounter<{\n token_type: AuthTokenType;\n outcome: AuthTokenVerificationOutcome;\n}>('auth_token_verified', {description: 'Token verification attempts by token type and outcome'});\n\nconst tokenRefreshedCount = meter.createCounter<{outcome: AuthTokenRefreshOutcome}>(\n 'auth_token_refreshed',\n {description: 'Refresh-token exchanges by outcome'},\n);\n\nconst rateLimitCheckCount = meter.createCounter<{\n action: AuthRateLimitAction;\n scope: AuthRateLimitScope;\n outcome: AuthRateLimitOutcome;\n}>('auth_rate_limit_checks', {\n description: 'Authentication rate limit checks by action, scope, and outcome',\n});\n\nconst rateLimitPruneFailureCount = meter.createCounter('auth_rate_limit_prune_failures', {\n description: 'Authentication rate limit prune failures',\n});\n\nconst impersonationCommandCount = meter.createCounter<{outcome: AuthImpersonationOutcome}>(\n 'auth_impersonation_commands',\n {description: 'Impersonation mint command attempts by outcome'},\n);\n\nfunction recordMetric(record: () => void): void {\n try {\n record();\n } catch {\n // Metrics must not affect authentication outcomes.\n }\n}\n\nexport function recordTokenIssued(tokenType: AuthTokenType): void {\n recordMetric(() => tokenIssuedCount.add(1, {token_type: tokenType}));\n}\n\nexport function recordTokenVerified(\n tokenType: AuthTokenType,\n outcome: AuthTokenVerificationOutcome,\n): void {\n recordMetric(() => tokenVerifiedCount.add(1, {token_type: tokenType, outcome}));\n}\n\nexport function recordTokenRefreshed(outcome: AuthTokenRefreshOutcome): void {\n recordMetric(() => tokenRefreshedCount.add(1, {outcome}));\n}\n\nexport function recordAuthRateLimitCheck(params: {\n action: AuthRateLimitAction;\n scope: AuthRateLimitScope;\n outcome: AuthRateLimitOutcome;\n}): void {\n recordMetric(() =>\n rateLimitCheckCount.add(1, {\n action: params.action,\n scope: params.scope,\n outcome: params.outcome,\n }),\n );\n}\n\nexport function recordAuthRateLimitPruneFailure(): void {\n recordMetric(() => rateLimitPruneFailureCount.add(1));\n}\n\nexport function recordImpersonationOutcome(outcome: AuthImpersonationOutcome): void {\n recordMetric(() => impersonationCommandCount.add(1, {outcome}));\n}\n"],"names":["instanceMetrics","meter","getMeter","tokenIssuedCount","createCounter","description","tokenVerifiedCount","tokenRefreshedCount","rateLimitCheckCount","rateLimitPruneFailureCount","impersonationCommandCount","recordMetric","record","recordTokenIssued","tokenType","add","token_type","recordTokenVerified","outcome","recordTokenRefreshed","recordAuthRateLimitCheck","params","action","scope","recordAuthRateLimitPruneFailure","recordImpersonationOutcome"],"mappings":"AAAA,SAAQA,eAAe,QAAO,8BAA8B;
|
|
1
|
+
{"version":3,"sources":["../../src/metrics/instance.ts"],"sourcesContent":["import {instanceMetrics} from '@shipfox/node-opentelemetry';\n\nexport type AuthTokenType = 'session' | 'job_lease' | 'runner_session';\nexport type AuthTokenVerificationOutcome = 'ok' | 'rejected';\nexport type AuthTokenRefreshOutcome = 'rotated' | 'grace' | 'rejected';\nexport type AuthRateLimitAction =\n | 'login'\n | 'email-send'\n | 'bootstrap'\n | 'bootstrap-state'\n | 'lookup'\n | 'directory'\n | 'impersonate';\nexport type AuthRateLimitScope = 'ip' | 'email' | 'actor';\nexport type AuthRateLimitOutcome = 'allowed' | 'blocked' | 'unavailable';\nexport type AuthImpersonationOutcome = 'succeeded' | 'failed';\n\nconst meter = instanceMetrics.getMeter('auth');\n\nconst tokenIssuedCount = meter.createCounter<{token_type: AuthTokenType}>('auth_token_issued', {\n description: 'Tokens issued by token type',\n});\n\nconst tokenVerifiedCount = meter.createCounter<{\n token_type: AuthTokenType;\n outcome: AuthTokenVerificationOutcome;\n}>('auth_token_verified', {description: 'Token verification attempts by token type and outcome'});\n\nconst tokenRefreshedCount = meter.createCounter<{outcome: AuthTokenRefreshOutcome}>(\n 'auth_token_refreshed',\n {description: 'Refresh-token exchanges by outcome'},\n);\n\nconst rateLimitCheckCount = meter.createCounter<{\n action: AuthRateLimitAction;\n scope: AuthRateLimitScope;\n outcome: AuthRateLimitOutcome;\n}>('auth_rate_limit_checks', {\n description: 'Authentication rate limit checks by action, scope, and outcome',\n});\n\nconst rateLimitPruneFailureCount = meter.createCounter('auth_rate_limit_prune_failures', {\n description: 'Authentication rate limit prune failures',\n});\n\nconst impersonationCommandCount = meter.createCounter<{outcome: AuthImpersonationOutcome}>(\n 'auth_impersonation_commands',\n {description: 'Impersonation mint command attempts by outcome'},\n);\n\nfunction recordMetric(record: () => void): void {\n try {\n record();\n } catch {\n // Metrics must not affect authentication outcomes.\n }\n}\n\nexport function recordTokenIssued(tokenType: AuthTokenType): void {\n recordMetric(() => tokenIssuedCount.add(1, {token_type: tokenType}));\n}\n\nexport function recordTokenVerified(\n tokenType: AuthTokenType,\n outcome: AuthTokenVerificationOutcome,\n): void {\n recordMetric(() => tokenVerifiedCount.add(1, {token_type: tokenType, outcome}));\n}\n\nexport function recordTokenRefreshed(outcome: AuthTokenRefreshOutcome): void {\n recordMetric(() => tokenRefreshedCount.add(1, {outcome}));\n}\n\nexport function recordAuthRateLimitCheck(params: {\n action: AuthRateLimitAction;\n scope: AuthRateLimitScope;\n outcome: AuthRateLimitOutcome;\n}): void {\n recordMetric(() =>\n rateLimitCheckCount.add(1, {\n action: params.action,\n scope: params.scope,\n outcome: params.outcome,\n }),\n );\n}\n\nexport function recordAuthRateLimitPruneFailure(): void {\n recordMetric(() => rateLimitPruneFailureCount.add(1));\n}\n\nexport function recordImpersonationOutcome(outcome: AuthImpersonationOutcome): void {\n recordMetric(() => impersonationCommandCount.add(1, {outcome}));\n}\n"],"names":["instanceMetrics","meter","getMeter","tokenIssuedCount","createCounter","description","tokenVerifiedCount","tokenRefreshedCount","rateLimitCheckCount","rateLimitPruneFailureCount","impersonationCommandCount","recordMetric","record","recordTokenIssued","tokenType","add","token_type","recordTokenVerified","outcome","recordTokenRefreshed","recordAuthRateLimitCheck","params","action","scope","recordAuthRateLimitPruneFailure","recordImpersonationOutcome"],"mappings":"AAAA,SAAQA,eAAe,QAAO,8BAA8B;AAiB5D,MAAMC,QAAQD,gBAAgBE,QAAQ,CAAC;AAEvC,MAAMC,mBAAmBF,MAAMG,aAAa,CAA8B,qBAAqB;IAC7FC,aAAa;AACf;AAEA,MAAMC,qBAAqBL,MAAMG,aAAa,CAG3C,uBAAuB;IAACC,aAAa;AAAuD;AAE/F,MAAME,sBAAsBN,MAAMG,aAAa,CAC7C,wBACA;IAACC,aAAa;AAAoC;AAGpD,MAAMG,sBAAsBP,MAAMG,aAAa,CAI5C,0BAA0B;IAC3BC,aAAa;AACf;AAEA,MAAMI,6BAA6BR,MAAMG,aAAa,CAAC,kCAAkC;IACvFC,aAAa;AACf;AAEA,MAAMK,4BAA4BT,MAAMG,aAAa,CACnD,+BACA;IAACC,aAAa;AAAgD;AAGhE,SAASM,aAAaC,MAAkB;IACtC,IAAI;QACFA;IACF,EAAE,OAAM;IACN,mDAAmD;IACrD;AACF;AAEA,OAAO,SAASC,kBAAkBC,SAAwB;IACxDH,aAAa,IAAMR,iBAAiBY,GAAG,CAAC,GAAG;YAACC,YAAYF;QAAS;AACnE;AAEA,OAAO,SAASG,oBACdH,SAAwB,EACxBI,OAAqC;IAErCP,aAAa,IAAML,mBAAmBS,GAAG,CAAC,GAAG;YAACC,YAAYF;YAAWI;QAAO;AAC9E;AAEA,OAAO,SAASC,qBAAqBD,OAAgC;IACnEP,aAAa,IAAMJ,oBAAoBQ,GAAG,CAAC,GAAG;YAACG;QAAO;AACxD;AAEA,OAAO,SAASE,yBAAyBC,MAIxC;IACCV,aAAa,IACXH,oBAAoBO,GAAG,CAAC,GAAG;YACzBO,QAAQD,OAAOC,MAAM;YACrBC,OAAOF,OAAOE,KAAK;YACnBL,SAASG,OAAOH,OAAO;QACzB;AAEJ;AAEA,OAAO,SAASM;IACdb,aAAa,IAAMF,2BAA2BM,GAAG,CAAC;AACpD;AAEA,OAAO,SAASU,2BAA2BP,OAAiC;IAC1EP,aAAa,IAAMD,0BAA0BK,GAAG,CAAC,GAAG;YAACG;QAAO;AAC9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"administration.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/administration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"administration.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/administration.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,0CAA0C,CAAC;AAE1F,OAAO,EAA2B,KAAK,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAqfhF,eAAO,MAAM,oBAAoB,EAAE,UAIjC,CAAC;AAEH,eAAO,MAAM,6BAA6B,EAAE,UAI1C,CAAC;AAuDH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,2BAA2B,GACtC,UAAU,EAAE,CAuBd"}
|