@gauts/auth 0.6.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +486 -198
- package/SECURITY.md +10 -2
- package/dist/adapters/hono/index.d.ts +29 -4
- package/dist/adapters/hono/index.d.ts.map +1 -1
- package/dist/adapters/hono/index.js +42 -8
- package/dist/adapters/hono/index.js.map +1 -1
- package/dist/adapters/hono/social.d.ts +34 -0
- package/dist/adapters/hono/social.d.ts.map +1 -0
- package/dist/adapters/hono/social.js +202 -0
- package/dist/adapters/hono/social.js.map +1 -0
- package/dist/adapters/prisma/config.d.ts.map +1 -1
- package/dist/adapters/prisma/config.js +85 -71
- package/dist/adapters/prisma/config.js.map +1 -1
- package/dist/adapters/prisma/index.d.ts +1 -1
- package/dist/adapters/prisma/index.d.ts.map +1 -1
- package/dist/adapters/prisma/index.js +90 -13
- package/dist/adapters/prisma/index.js.map +1 -1
- package/dist/adapters/prisma/model.d.ts +40 -7
- package/dist/adapters/prisma/model.d.ts.map +1 -1
- package/dist/adapters/prisma/model.js +38 -24
- package/dist/adapters/prisma/model.js.map +1 -1
- package/dist/adapters/prisma/types.d.ts +60 -72
- package/dist/adapters/prisma/types.d.ts.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/providers/common.d.ts +31 -0
- package/dist/providers/common.d.ts.map +1 -0
- package/dist/providers/common.js +89 -0
- package/dist/providers/common.js.map +1 -0
- package/dist/providers/github.d.ts +5 -0
- package/dist/providers/github.d.ts.map +1 -0
- package/dist/providers/github.js +93 -0
- package/dist/providers/github.js.map +1 -0
- package/dist/providers/google.d.ts +5 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +58 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +4 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/x.d.ts +5 -0
- package/dist/providers/x.d.ts.map +1 -0
- package/dist/providers/x.js +63 -0
- package/dist/providers/x.js.map +1 -0
- package/dist/session/cookie.d.ts +4 -0
- package/dist/session/cookie.d.ts.map +1 -1
- package/dist/session/cookie.js +9 -3
- package/dist/session/cookie.js.map +1 -1
- package/dist/session/guards.d.ts.map +1 -1
- package/dist/session/guards.js +7 -1
- package/dist/session/guards.js.map +1 -1
- package/dist/session/service.d.ts.map +1 -1
- package/dist/session/service.js +6 -0
- package/dist/session/service.js.map +1 -1
- package/dist/session/types.d.ts +10 -1
- package/dist/session/types.d.ts.map +1 -1
- package/dist/social/config.d.ts +3 -0
- package/dist/social/config.d.ts.map +1 -0
- package/dist/social/config.js +115 -0
- package/dist/social/config.js.map +1 -0
- package/dist/social/service.d.ts +18 -0
- package/dist/social/service.d.ts.map +1 -0
- package/dist/social/service.js +78 -0
- package/dist/social/service.js.map +1 -0
- package/dist/social/state.d.ts +46 -0
- package/dist/social/state.d.ts.map +1 -0
- package/dist/social/state.js +139 -0
- package/dist/social/state.js.map +1 -0
- package/dist/social/types.d.ts +75 -0
- package/dist/social/types.d.ts.map +1 -0
- package/dist/social/types.js +2 -0
- package/dist/social/types.js.map +1 -0
- package/package.json +7 -2
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
import { createError } from "../../errors.js";
|
|
2
2
|
import { isRecord } from "../../session/guards.js";
|
|
3
3
|
const PRISMA_DEFAULTS = {
|
|
4
|
-
|
|
5
|
-
name: "account",
|
|
4
|
+
accounts: {
|
|
6
5
|
select: ["id", "email"],
|
|
7
|
-
|
|
8
|
-
relation: {
|
|
9
|
-
select: ["id"],
|
|
6
|
+
table: "user_accounts",
|
|
10
7
|
},
|
|
11
8
|
sessions: {
|
|
12
|
-
|
|
9
|
+
table: "account_sessions",
|
|
10
|
+
},
|
|
11
|
+
socials: {
|
|
12
|
+
table: "social_accounts",
|
|
13
|
+
},
|
|
14
|
+
users: {
|
|
15
|
+
select: ["id", "name"],
|
|
16
|
+
table: "users",
|
|
13
17
|
},
|
|
18
|
+
privateFields: ["hash", "password", "password_hash", "passwordHash"],
|
|
19
|
+
};
|
|
20
|
+
const isPrivateField = (value) => {
|
|
21
|
+
return PRISMA_DEFAULTS.privateFields.some((field) => field === value);
|
|
14
22
|
};
|
|
15
23
|
export const isPrismaDelegate = (value) => {
|
|
16
24
|
return (isRecord(value) &&
|
|
@@ -27,47 +35,51 @@ const isAuthScalar = (value) => {
|
|
|
27
35
|
typeof value === "string" ||
|
|
28
36
|
(typeof value === "number" && Number.isFinite(value)));
|
|
29
37
|
};
|
|
30
|
-
const
|
|
38
|
+
const resolveTable = ({ input, path }) => {
|
|
31
39
|
if (typeof input !== "string" || !input.trim()) {
|
|
32
40
|
throw createError({
|
|
33
41
|
code: "AUTH_CONFIG_INVALID",
|
|
34
|
-
message: `${path} must be a non-empty string.`,
|
|
42
|
+
message: `${path}.table must be a non-empty string.`,
|
|
35
43
|
});
|
|
36
44
|
}
|
|
37
45
|
return input;
|
|
38
46
|
};
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
if (!Array.isArray(input)) {
|
|
47
|
+
const requireDelegate = ({ client, table }) => {
|
|
48
|
+
const delegate = isRecord(client) ? client[table] : undefined;
|
|
49
|
+
if (!isPrismaDelegate(delegate)) {
|
|
44
50
|
throw createError({
|
|
45
51
|
code: "AUTH_CONFIG_INVALID",
|
|
46
|
-
message:
|
|
52
|
+
message: `Prisma model ${table} is invalid.`,
|
|
47
53
|
});
|
|
48
54
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
};
|
|
56
|
+
const resolveSelect = ({ defaultSelect, input, path }) => {
|
|
57
|
+
if (input === undefined) {
|
|
58
|
+
return defaultSelect;
|
|
59
|
+
}
|
|
60
|
+
if (!Array.isArray(input) ||
|
|
61
|
+
input.some((field) => typeof field !== "string" || !field.trim()) ||
|
|
62
|
+
new Set(input).size !== input.length ||
|
|
63
|
+
input.some((field) => typeof field === "string" && isPrivateField(field))) {
|
|
52
64
|
throw createError({
|
|
53
65
|
code: "AUTH_CONFIG_INVALID",
|
|
54
66
|
message: `${path}.select must contain unique non-empty field names.`,
|
|
55
67
|
});
|
|
56
68
|
}
|
|
57
|
-
|
|
58
|
-
return names.includes("id") ? names : ["id", ...names];
|
|
69
|
+
return [...new Set([...defaultSelect, ...input])];
|
|
59
70
|
};
|
|
60
71
|
const isAccessValue = (value) => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return isAuthScalar(value);
|
|
72
|
+
return Array.isArray(value)
|
|
73
|
+
? value.length > 0 && value.every(isAuthScalar)
|
|
74
|
+
: isAuthScalar(value);
|
|
65
75
|
};
|
|
66
76
|
const resolveAccess = ({ input, path }) => {
|
|
67
77
|
if (input === undefined) {
|
|
68
78
|
return {};
|
|
69
79
|
}
|
|
70
|
-
if (!isRecord(input) ||
|
|
80
|
+
if (!isRecord(input) ||
|
|
81
|
+
Object.keys(input).some(isPrivateField) ||
|
|
82
|
+
Object.values(input).some((value) => !isAccessValue(value))) {
|
|
71
83
|
throw createError({
|
|
72
84
|
code: "AUTH_CONFIG_INVALID",
|
|
73
85
|
message: `${path}.access contains an invalid condition.`,
|
|
@@ -75,7 +87,7 @@ const resolveAccess = ({ input, path }) => {
|
|
|
75
87
|
}
|
|
76
88
|
return input;
|
|
77
89
|
};
|
|
78
|
-
const
|
|
90
|
+
const resolveDataModel = ({ client, defaultSelect, defaultTable, input, path, }) => {
|
|
79
91
|
if (input !== undefined && !isRecord(input)) {
|
|
80
92
|
throw createError({
|
|
81
93
|
code: "AUTH_CONFIG_INVALID",
|
|
@@ -83,69 +95,71 @@ const resolveModel = ({ client, defaultName, defaultSelect, input, path, relatio
|
|
|
83
95
|
});
|
|
84
96
|
}
|
|
85
97
|
const config = isRecord(input) ? input : {};
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
: resolveName({ input: config.name, path: `${path}.name` });
|
|
89
|
-
const delegate = isRecord(client) ? client[name] : undefined;
|
|
90
|
-
if (!isPrismaDelegate(delegate)) {
|
|
91
|
-
throw createError({
|
|
92
|
-
code: "AUTH_CONFIG_INVALID",
|
|
93
|
-
message: `Prisma model ${name} is invalid.`,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
if (config.relations !== undefined && !isRecord(config.relations)) {
|
|
97
|
-
throw createError({
|
|
98
|
-
code: "AUTH_CONFIG_INVALID",
|
|
99
|
-
message: `${path}.relations is invalid.`,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
const relations = Object.fromEntries(Object.entries(isRecord(config.relations) ? config.relations : {}).map(([relationName, relationConfig]) => [
|
|
103
|
-
relationName,
|
|
104
|
-
resolveModel({
|
|
105
|
-
client,
|
|
106
|
-
defaultName: relationName,
|
|
107
|
-
defaultSelect: PRISMA_DEFAULTS.relation.select,
|
|
108
|
-
input: relationConfig,
|
|
109
|
-
path: `${path}.relations.${relationName}`,
|
|
110
|
-
relation: relationName,
|
|
111
|
-
}),
|
|
112
|
-
]));
|
|
98
|
+
const table = config.table === undefined ? defaultTable : resolveTable({ input: config.table, path });
|
|
99
|
+
requireDelegate({ client, table });
|
|
113
100
|
return {
|
|
114
101
|
access: resolveAccess({ input: config.access, path }),
|
|
115
|
-
name,
|
|
116
|
-
relation,
|
|
117
|
-
relations,
|
|
118
102
|
select: resolveSelect({ defaultSelect, input: config.select, path }),
|
|
103
|
+
table,
|
|
119
104
|
};
|
|
120
105
|
};
|
|
121
|
-
|
|
106
|
+
const resolveTableModel = ({ client, defaultTable, input, path, }) => {
|
|
122
107
|
if (input !== undefined && !isRecord(input)) {
|
|
123
108
|
throw createError({
|
|
124
109
|
code: "AUTH_CONFIG_INVALID",
|
|
125
|
-
message:
|
|
110
|
+
message: `${path} model configuration is invalid.`,
|
|
126
111
|
});
|
|
127
112
|
}
|
|
128
|
-
const
|
|
129
|
-
|
|
113
|
+
const config = isRecord(input) ? input : {};
|
|
114
|
+
const table = config.table === undefined ? defaultTable : resolveTable({ input: config.table, path });
|
|
115
|
+
requireDelegate({ client, table });
|
|
116
|
+
return table;
|
|
117
|
+
};
|
|
118
|
+
const resolveOptionalTableModel = ({ client, defaultTable, input, path, }) => {
|
|
119
|
+
if (input !== undefined) {
|
|
120
|
+
return resolveTableModel({ client, defaultTable, input, path });
|
|
121
|
+
}
|
|
122
|
+
if (!isRecord(client) || !(defaultTable in client)) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
requireDelegate({ client, table: defaultTable });
|
|
126
|
+
return defaultTable;
|
|
127
|
+
};
|
|
128
|
+
export const resolvePrismaModels = ({ client, input, }) => {
|
|
129
|
+
if (input !== undefined && !isRecord(input)) {
|
|
130
130
|
throw createError({
|
|
131
131
|
code: "AUTH_CONFIG_INVALID",
|
|
132
|
-
message: "Prisma
|
|
132
|
+
message: "Prisma models configuration is invalid.",
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
|
-
const
|
|
136
|
-
const sessionName = sessions.name === undefined
|
|
137
|
-
? PRISMA_DEFAULTS.sessions.name
|
|
138
|
-
: resolveName({ input: sessions.name, path: "models.sessions.name" });
|
|
135
|
+
const models = isRecord(input) ? input : {};
|
|
139
136
|
return {
|
|
140
|
-
|
|
137
|
+
accounts: resolveDataModel({
|
|
138
|
+
client,
|
|
139
|
+
defaultSelect: PRISMA_DEFAULTS.accounts.select,
|
|
140
|
+
defaultTable: PRISMA_DEFAULTS.accounts.table,
|
|
141
|
+
input: models.accounts,
|
|
142
|
+
path: "models.accounts",
|
|
143
|
+
}),
|
|
144
|
+
sessions: resolveTableModel({
|
|
145
|
+
client,
|
|
146
|
+
defaultTable: PRISMA_DEFAULTS.sessions.table,
|
|
147
|
+
input: models.sessions,
|
|
148
|
+
path: "models.sessions",
|
|
149
|
+
}),
|
|
150
|
+
socials: resolveOptionalTableModel({
|
|
151
|
+
client,
|
|
152
|
+
defaultTable: PRISMA_DEFAULTS.socials.table,
|
|
153
|
+
input: models.socials,
|
|
154
|
+
path: "models.socials",
|
|
155
|
+
}),
|
|
156
|
+
users: resolveDataModel({
|
|
141
157
|
client,
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
input: models.
|
|
145
|
-
path: "models.
|
|
146
|
-
relation: "account",
|
|
158
|
+
defaultSelect: PRISMA_DEFAULTS.users.select,
|
|
159
|
+
defaultTable: PRISMA_DEFAULTS.users.table,
|
|
160
|
+
input: models.users,
|
|
161
|
+
path: "models.users",
|
|
147
162
|
}),
|
|
148
|
-
sessions: sessionName,
|
|
149
163
|
};
|
|
150
164
|
};
|
|
151
165
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/adapters/prisma/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AASnD,MAAM,eAAe,GAAG;IACpB,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/adapters/prisma/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { CreatePrismaAdapter } from "./types.js";
|
|
2
|
-
export type { PrismaAccount, PrismaAccountConfig, PrismaAccountModel, PrismaAdapterInput, PrismaModelsConfig,
|
|
2
|
+
export type { PrismaAccount, PrismaAccountConfig, PrismaAccountModel, PrismaAdapterInput, PrismaModelsConfig, PrismaSessionConfig, PrismaSessionModel, PrismaSocialConfig, PrismaSocialModel, PrismaUser, PrismaUserConfig, PrismaUserModel, } from "./types.js";
|
|
3
3
|
export declare const createPrismaAdapter: CreatePrismaAdapter;
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACR,mBAAmB,EAKtB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACR,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,eAAe,GAClB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mBAAmB,EAAE,mBA4MjC,CAAC"}
|
|
@@ -1,24 +1,67 @@
|
|
|
1
1
|
import { createError } from "../../errors.js";
|
|
2
2
|
import { isRecord } from "../../session/guards.js";
|
|
3
3
|
import { isPrismaDelegate, resolvePrismaModels } from "./config.js";
|
|
4
|
-
import { createAuthSelect, requireAuthRow, requireRow, requireRows, sessionSelect, } from "./model.js";
|
|
4
|
+
import { createAccountSelect, createAuthSelect, readAccount, requireAuthRow, requireRow, requireRows, sessionSelect, } from "./model.js";
|
|
5
5
|
export const createPrismaAdapter = (input) => {
|
|
6
6
|
const raw = input;
|
|
7
7
|
const resolved = resolvePrismaModels({ client: raw.client, input: raw.models });
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
8
|
+
const client = isRecord(raw.client) ? raw.client : {};
|
|
9
|
+
const accounts = client[resolved.accounts.table];
|
|
10
|
+
const sessions = client[resolved.sessions];
|
|
11
|
+
const socials = resolved.socials === null ? null : client[resolved.socials];
|
|
12
|
+
const users = client[resolved.users.table];
|
|
13
|
+
const accountSelect = createAccountSelect({
|
|
14
|
+
accounts: resolved.accounts,
|
|
15
|
+
users: resolved.users,
|
|
16
|
+
});
|
|
17
|
+
const authSelect = createAuthSelect({
|
|
18
|
+
accounts: resolved.accounts,
|
|
19
|
+
users: resolved.users,
|
|
20
|
+
});
|
|
21
|
+
if (!isPrismaDelegate(accounts) ||
|
|
22
|
+
!isPrismaDelegate(sessions) ||
|
|
23
|
+
(socials !== null && !isPrismaDelegate(socials)) ||
|
|
24
|
+
!isPrismaDelegate(users)) {
|
|
11
25
|
throw createError({
|
|
12
26
|
code: "AUTH_CONFIG_INVALID",
|
|
13
|
-
message:
|
|
27
|
+
message: "Prisma authentication models are invalid.",
|
|
14
28
|
});
|
|
15
29
|
}
|
|
16
|
-
|
|
30
|
+
const readSocialAccount = (value) => {
|
|
31
|
+
if (!isRecord(value)) {
|
|
32
|
+
throw new Error("Prisma social relation returned invalid data.");
|
|
33
|
+
}
|
|
34
|
+
const resolvedAccount = readAccount({
|
|
35
|
+
accounts: resolved.accounts,
|
|
36
|
+
users: resolved.users,
|
|
37
|
+
value: value.account,
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
account: resolvedAccount.account,
|
|
41
|
+
allowed: resolvedAccount.allowed,
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
const findAccount = async (where) => {
|
|
45
|
+
const value = await accounts.findUnique({ select: accountSelect, where });
|
|
46
|
+
if (value === null) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const resolvedAccount = readAccount({
|
|
50
|
+
accounts: resolved.accounts,
|
|
51
|
+
users: resolved.users,
|
|
52
|
+
value,
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
account: resolvedAccount.account,
|
|
56
|
+
allowed: resolvedAccount.allowed,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
const db = {
|
|
17
60
|
create: async (session) => {
|
|
18
|
-
await
|
|
61
|
+
await sessions.create({ data: session });
|
|
19
62
|
},
|
|
20
63
|
find: async ({ account_id, session_id }) => {
|
|
21
|
-
const row = await
|
|
64
|
+
const row = await sessions.findFirst({
|
|
22
65
|
select: sessionSelect,
|
|
23
66
|
where: {
|
|
24
67
|
account_id,
|
|
@@ -28,7 +71,7 @@ export const createPrismaAdapter = (input) => {
|
|
|
28
71
|
return row === null ? null : requireRow(row);
|
|
29
72
|
},
|
|
30
73
|
findActive: async ({ account_id, now }) => {
|
|
31
|
-
const rows = await
|
|
74
|
+
const rows = await sessions.findMany({
|
|
32
75
|
orderBy: { created_at: "desc" },
|
|
33
76
|
select: sessionSelect,
|
|
34
77
|
where: {
|
|
@@ -40,14 +83,15 @@ export const createPrismaAdapter = (input) => {
|
|
|
40
83
|
return requireRows(rows);
|
|
41
84
|
},
|
|
42
85
|
findToken: async (token_hash) => {
|
|
43
|
-
const row = await
|
|
86
|
+
const row = await sessions.findUnique({
|
|
44
87
|
select: authSelect,
|
|
45
88
|
where: { token_hash },
|
|
46
89
|
});
|
|
47
90
|
return row === null
|
|
48
91
|
? null
|
|
49
92
|
: requireAuthRow({
|
|
50
|
-
|
|
93
|
+
accounts: resolved.accounts,
|
|
94
|
+
users: resolved.users,
|
|
51
95
|
value: row,
|
|
52
96
|
});
|
|
53
97
|
},
|
|
@@ -55,7 +99,7 @@ export const createPrismaAdapter = (input) => {
|
|
|
55
99
|
if (session_ids.length === 0) {
|
|
56
100
|
return;
|
|
57
101
|
}
|
|
58
|
-
await
|
|
102
|
+
await sessions.updateMany({
|
|
59
103
|
data: {
|
|
60
104
|
revoked_at,
|
|
61
105
|
updated_at: revoked_at,
|
|
@@ -67,7 +111,7 @@ export const createPrismaAdapter = (input) => {
|
|
|
67
111
|
});
|
|
68
112
|
},
|
|
69
113
|
updateExpiry: async ({ expires_at, session_id, updated_at }) => {
|
|
70
|
-
await
|
|
114
|
+
await sessions.update({
|
|
71
115
|
data: {
|
|
72
116
|
expires_at,
|
|
73
117
|
updated_at,
|
|
@@ -76,5 +120,38 @@ export const createPrismaAdapter = (input) => {
|
|
|
76
120
|
});
|
|
77
121
|
},
|
|
78
122
|
};
|
|
123
|
+
if (socials === null) {
|
|
124
|
+
return db;
|
|
125
|
+
}
|
|
126
|
+
const social = {
|
|
127
|
+
createAccount: async ({ email, name }) => {
|
|
128
|
+
const value = await accounts.create({
|
|
129
|
+
data: {
|
|
130
|
+
email,
|
|
131
|
+
user: { create: { name } },
|
|
132
|
+
},
|
|
133
|
+
select: { id: true },
|
|
134
|
+
});
|
|
135
|
+
if (!isRecord(value) || typeof value.id !== "string") {
|
|
136
|
+
throw new Error("Prisma account model returned invalid data.");
|
|
137
|
+
}
|
|
138
|
+
return value.id;
|
|
139
|
+
},
|
|
140
|
+
createSocial: async (social) => {
|
|
141
|
+
await socials.create({ data: social });
|
|
142
|
+
},
|
|
143
|
+
findAccount: async (account_id) => findAccount({ id: account_id }),
|
|
144
|
+
findEmail: async (email) => findAccount({ email }),
|
|
145
|
+
findSocial: async ({ provider, provider_id }) => {
|
|
146
|
+
const value = await socials.findFirst({
|
|
147
|
+
select: {
|
|
148
|
+
account: { select: accountSelect },
|
|
149
|
+
},
|
|
150
|
+
where: { provider, provider_id },
|
|
151
|
+
});
|
|
152
|
+
return value === null ? null : readSocialAccount(value);
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
return { ...db, ...social };
|
|
79
156
|
};
|
|
80
157
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EACH,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,EACX,aAAa,GAChB,MAAM,YAAY,CAAC;AAwBpB,MAAM,CAAC,MAAM,mBAAmB,GAAwB,CAIpD,KAAyC,EACjB,EAAE;IAC1B,MAAM,GAAG,GAAG,KAA6C,CAAC;IAE1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAChF,MAAM,MAAM,GAA4B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACtC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAChC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;KACxB,CAAC,CAAC;IAEH,IACI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAC3B,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAC3B,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAC1B,CAAC;QACC,MAAM,WAAW,CAAC;YACd,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,2CAA2C;SACvD,CAAC,CAAC;IACP,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAE,EAAE;QACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,eAAe,GAAG,WAAW,CAAC;YAChC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE,eAAe,CAAC,OAIxB;YACD,OAAO,EAAE,eAAe,CAAC,OAAO;SACnC,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,KAA6B,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAE1E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,eAAe,GAAG,WAAW,CAAC;YAChC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK;SACR,CAAC,CAAC;QAEH,OAAO;YACH,OAAO,EAAE,eAAe,CAAC,OAIxB;YACD,OAAO,EAAE,eAAe,CAAC,OAAO;SACnC,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,EAAE,GAA2B;QAC/B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC;gBACjC,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE;oBACH,UAAU;oBACV,EAAE,EAAE,UAAU;iBACjB;aACJ,CAAC,CAAC;YAEH,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,UAAU,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC;gBACjC,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;gBAC/B,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE;oBACH,UAAU;oBACV,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;oBACvB,UAAU,EAAE,IAAI;iBACnB;aACJ,CAAC,CAAC;YAEH,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC;gBAClC,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,EAAE,UAAU,EAAE;aACxB,CAAC,CAAC;YAEH,OAAO,GAAG,KAAK,IAAI;gBACf,CAAC,CAAC,IAAI;gBACN,CAAC,CAAE,cAAc,CAAC;oBACZ,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,KAAK,EAAE,GAAG;iBACb,CAMC,CAAC;QACb,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE;YAC1C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;YACX,CAAC;YAED,MAAM,QAAQ,CAAC,UAAU,CAAC;gBACtB,IAAI,EAAE;oBACF,UAAU;oBACV,UAAU,EAAE,UAAU;iBACzB;gBACD,KAAK,EAAE;oBACH,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;oBACvB,UAAU,EAAE,IAAI;iBACnB;aACJ,CAAC,CAAC;QACP,CAAC;QAED,YAAY,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE;YAC3D,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAClB,IAAI,EAAE;oBACF,UAAU;oBACV,UAAU;iBACb;gBACD,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;aAC5B,CAAC,CAAC;QACP,CAAC;KACJ,CAAC;IAEF,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAA8B,CAAC;IAC1C,CAAC;IAED,MAAM,MAAM,GAAiC;QACzC,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAChC,IAAI,EAAE;oBACF,KAAK;oBACL,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE;iBAC7B;gBACD,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;aACvB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACnE,CAAC;YAED,OAAO,KAAK,CAAC,EAAE,CAAC;QACpB,CAAC;QAED,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC3B,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;QAElE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC;QAElD,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC;gBAClC,MAAM,EAAE;oBACJ,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;iBACrC;gBACD,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE;aACnC,CAAC,CAAC;YAEH,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;KACJ,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -1,5 +1,27 @@
|
|
|
1
|
-
import type { AuthSessionRecord, SessionRecord } from "../../session/types.js";
|
|
2
|
-
import type {
|
|
1
|
+
import type { AuthAccount, AuthSessionRecord, SessionRecord } from "../../session/types.js";
|
|
2
|
+
import type { ResolvedPrismaDataModel } from "./types.js";
|
|
3
|
+
type ReadAccountResult = {
|
|
4
|
+
account: AuthAccount;
|
|
5
|
+
allowed: boolean;
|
|
6
|
+
};
|
|
7
|
+
type ReadAccountInput = {
|
|
8
|
+
accounts: ResolvedPrismaDataModel;
|
|
9
|
+
users: ResolvedPrismaDataModel;
|
|
10
|
+
value: unknown;
|
|
11
|
+
};
|
|
12
|
+
type RequireAuthRowInput = {
|
|
13
|
+
accounts: ResolvedPrismaDataModel;
|
|
14
|
+
users: ResolvedPrismaDataModel;
|
|
15
|
+
value: unknown;
|
|
16
|
+
};
|
|
17
|
+
type CreateAuthSelectInput = {
|
|
18
|
+
accounts: ResolvedPrismaDataModel;
|
|
19
|
+
users: ResolvedPrismaDataModel;
|
|
20
|
+
};
|
|
21
|
+
type CreateAccountSelectInput = {
|
|
22
|
+
accounts: ResolvedPrismaDataModel;
|
|
23
|
+
users: ResolvedPrismaDataModel;
|
|
24
|
+
};
|
|
3
25
|
export declare const sessionSelect: {
|
|
4
26
|
readonly account_id: true;
|
|
5
27
|
readonly agent: true;
|
|
@@ -12,7 +34,19 @@ export declare const sessionSelect: {
|
|
|
12
34
|
readonly token_hash: true;
|
|
13
35
|
readonly updated_at: true;
|
|
14
36
|
};
|
|
15
|
-
export declare const
|
|
37
|
+
export declare const createAccountSelect: ({ accounts, users }: CreateAccountSelectInput) => {
|
|
38
|
+
user: {
|
|
39
|
+
select: Record<string, true>;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export declare const createAuthSelect: ({ accounts, users }: CreateAuthSelectInput) => {
|
|
43
|
+
account: {
|
|
44
|
+
select: {
|
|
45
|
+
user: {
|
|
46
|
+
select: Record<string, true>;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
};
|
|
16
50
|
account_id: true;
|
|
17
51
|
agent: true;
|
|
18
52
|
created_at: true;
|
|
@@ -24,10 +58,9 @@ export declare const createAuthSelect: (account: ResolvedPrismaModel) => {
|
|
|
24
58
|
token_hash: true;
|
|
25
59
|
updated_at: true;
|
|
26
60
|
};
|
|
61
|
+
export declare const readAccount: ({ accounts, users, value }: ReadAccountInput) => ReadAccountResult;
|
|
27
62
|
export declare const requireRow: (value: unknown) => SessionRecord;
|
|
28
63
|
export declare const requireRows: (value: unknown) => SessionRecord[];
|
|
29
|
-
export declare const requireAuthRow: ({
|
|
30
|
-
|
|
31
|
-
value: unknown;
|
|
32
|
-
}) => AuthSessionRecord;
|
|
64
|
+
export declare const requireAuthRow: ({ accounts, users, value, }: RequireAuthRowInput) => AuthSessionRecord;
|
|
65
|
+
export {};
|
|
33
66
|
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,WAAW,EAEX,iBAAiB,EAEjB,aAAa,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAqB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE7E,KAAK,iBAAiB,GAAG;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAOF,KAAK,gBAAgB,GAAG;IACpB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACvB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,uBAAuB,CAAC;CAClC,CAAC;AAOF,KAAK,wBAAwB,GAAG;IAC5B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,uBAAuB,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;CAWhB,CAAC;AA4BX,eAAO,MAAM,mBAAmB,GAAI,qBAAqB,wBAAwB;;;;CAK/E,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAAI,qBAAqB,qBAAqB;;;;;;;;;;;;;;;;;;CAKzE,CAAC;AA+BH,eAAO,MAAM,WAAW,GAAI,4BAA4B,gBAAgB,KAAG,iBA2B1E,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,aAiB3C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,aAAa,EAMzD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,6BAI5B,mBAAmB,KAAG,iBAcxB,CAAC"}
|
|
@@ -28,20 +28,21 @@ const isSessionRecord = (value) => {
|
|
|
28
28
|
isNullableDate(value.updated_at));
|
|
29
29
|
};
|
|
30
30
|
const createModelSelect = (model) => {
|
|
31
|
-
|
|
32
|
-
const select = Object.fromEntries([...fields].map((field) => [field, true]));
|
|
33
|
-
for (const relation of Object.values(model.relations)) {
|
|
34
|
-
select[relation.relation] = { select: createModelSelect(relation) };
|
|
35
|
-
}
|
|
36
|
-
return select;
|
|
31
|
+
return Object.fromEntries([...new Set([...model.select, ...Object.keys(model.access)])].map((field) => [field, true]));
|
|
37
32
|
};
|
|
38
|
-
export const
|
|
33
|
+
export const createAccountSelect = ({ accounts, users }) => ({
|
|
34
|
+
...createModelSelect(accounts),
|
|
35
|
+
user: {
|
|
36
|
+
select: createModelSelect(users),
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
export const createAuthSelect = ({ accounts, users }) => ({
|
|
39
40
|
...sessionSelect,
|
|
40
|
-
|
|
41
|
-
select:
|
|
41
|
+
account: {
|
|
42
|
+
select: createAccountSelect({ accounts, users }),
|
|
42
43
|
},
|
|
43
44
|
});
|
|
44
|
-
const matchesAccess = ({ access, value
|
|
45
|
+
const matchesAccess = ({ access, value }) => {
|
|
45
46
|
return Object.entries(access).every(([field, expected]) => {
|
|
46
47
|
const current = value[field];
|
|
47
48
|
return Array.isArray(expected)
|
|
@@ -49,28 +50,41 @@ const matchesAccess = ({ access, value, }) => {
|
|
|
49
50
|
: Object.is(expected, current);
|
|
50
51
|
});
|
|
51
52
|
};
|
|
52
|
-
const
|
|
53
|
+
const readData = ({ model, value }) => {
|
|
53
54
|
if (!isRecord(value)) {
|
|
54
|
-
throw new Error(`Prisma
|
|
55
|
+
throw new Error(`Prisma model ${model.table} returned invalid data.`);
|
|
55
56
|
}
|
|
56
57
|
const data = {};
|
|
57
58
|
for (const field of model.select) {
|
|
58
59
|
const fieldValue = value[field];
|
|
59
60
|
if (!isAuthValue(fieldValue) || isRecord(fieldValue) || Array.isArray(fieldValue)) {
|
|
60
|
-
throw new Error(`Prisma field ${model.
|
|
61
|
+
throw new Error(`Prisma field ${model.table}.${field} returned invalid payload data.`);
|
|
61
62
|
}
|
|
62
63
|
data[field] = fieldValue;
|
|
63
64
|
}
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
return data;
|
|
66
|
+
};
|
|
67
|
+
export const readAccount = ({ accounts, users, value }) => {
|
|
68
|
+
if (!isRecord(value)) {
|
|
69
|
+
throw new Error("Prisma account relation returned invalid data.");
|
|
66
70
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
const userValue = value.user;
|
|
72
|
+
const account = {
|
|
73
|
+
...readData({ model: accounts, value }),
|
|
74
|
+
user: readData({ model: users, value: userValue }),
|
|
75
|
+
};
|
|
76
|
+
if (typeof account.id !== "string" ||
|
|
77
|
+
typeof account.email !== "string" ||
|
|
78
|
+
typeof account.user.id !== "string" ||
|
|
79
|
+
typeof account.user.name !== "string") {
|
|
80
|
+
throw new Error("Prisma account relation returned invalid data.");
|
|
72
81
|
}
|
|
73
|
-
return {
|
|
82
|
+
return {
|
|
83
|
+
account: account,
|
|
84
|
+
allowed: matchesAccess({ access: accounts.access, value }) &&
|
|
85
|
+
isRecord(userValue) &&
|
|
86
|
+
matchesAccess({ access: users.access, value: userValue }),
|
|
87
|
+
};
|
|
74
88
|
};
|
|
75
89
|
export const requireRow = (value) => {
|
|
76
90
|
if (!isSessionRecord(value)) {
|
|
@@ -95,15 +109,15 @@ export const requireRows = (value) => {
|
|
|
95
109
|
}
|
|
96
110
|
return value.map(requireRow);
|
|
97
111
|
};
|
|
98
|
-
export const requireAuthRow = ({
|
|
112
|
+
export const requireAuthRow = ({ accounts, users, value, }) => {
|
|
99
113
|
const row = requireRow(value);
|
|
100
114
|
if (!isRecord(value)) {
|
|
101
115
|
throw new Error("Prisma account relation returned invalid data.");
|
|
102
116
|
}
|
|
103
|
-
const resolved =
|
|
117
|
+
const resolved = readAccount({ accounts, users, value: value.account });
|
|
104
118
|
return {
|
|
105
119
|
...row,
|
|
106
|
-
account: resolved.
|
|
120
|
+
account: resolved.account,
|
|
107
121
|
allowed: resolved.allowed,
|
|
108
122
|
};
|
|
109
123
|
};
|