@gauts/auth 0.6.4 → 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.
Files changed (74) hide show
  1. package/README.md +471 -198
  2. package/SECURITY.md +10 -2
  3. package/dist/adapters/hono/index.d.ts +28 -4
  4. package/dist/adapters/hono/index.d.ts.map +1 -1
  5. package/dist/adapters/hono/index.js +40 -7
  6. package/dist/adapters/hono/index.js.map +1 -1
  7. package/dist/adapters/hono/social.d.ts +34 -0
  8. package/dist/adapters/hono/social.d.ts.map +1 -0
  9. package/dist/adapters/hono/social.js +202 -0
  10. package/dist/adapters/hono/social.js.map +1 -0
  11. package/dist/adapters/prisma/config.d.ts.map +1 -1
  12. package/dist/adapters/prisma/config.js +85 -71
  13. package/dist/adapters/prisma/config.js.map +1 -1
  14. package/dist/adapters/prisma/index.d.ts +1 -1
  15. package/dist/adapters/prisma/index.d.ts.map +1 -1
  16. package/dist/adapters/prisma/index.js +90 -13
  17. package/dist/adapters/prisma/index.js.map +1 -1
  18. package/dist/adapters/prisma/model.d.ts +40 -7
  19. package/dist/adapters/prisma/model.d.ts.map +1 -1
  20. package/dist/adapters/prisma/model.js +38 -24
  21. package/dist/adapters/prisma/model.js.map +1 -1
  22. package/dist/adapters/prisma/types.d.ts +60 -72
  23. package/dist/adapters/prisma/types.d.ts.map +1 -1
  24. package/dist/errors.d.ts +1 -1
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js.map +1 -1
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/providers/common.d.ts +31 -0
  30. package/dist/providers/common.d.ts.map +1 -0
  31. package/dist/providers/common.js +89 -0
  32. package/dist/providers/common.js.map +1 -0
  33. package/dist/providers/github.d.ts +5 -0
  34. package/dist/providers/github.d.ts.map +1 -0
  35. package/dist/providers/github.js +93 -0
  36. package/dist/providers/github.js.map +1 -0
  37. package/dist/providers/google.d.ts +5 -0
  38. package/dist/providers/google.d.ts.map +1 -0
  39. package/dist/providers/google.js +58 -0
  40. package/dist/providers/google.js.map +1 -0
  41. package/dist/providers/index.d.ts +7 -0
  42. package/dist/providers/index.d.ts.map +1 -0
  43. package/dist/providers/index.js +4 -0
  44. package/dist/providers/index.js.map +1 -0
  45. package/dist/providers/x.d.ts +5 -0
  46. package/dist/providers/x.d.ts.map +1 -0
  47. package/dist/providers/x.js +63 -0
  48. package/dist/providers/x.js.map +1 -0
  49. package/dist/session/cookie.d.ts +4 -0
  50. package/dist/session/cookie.d.ts.map +1 -1
  51. package/dist/session/cookie.js +9 -3
  52. package/dist/session/cookie.js.map +1 -1
  53. package/dist/session/guards.d.ts.map +1 -1
  54. package/dist/session/guards.js +7 -1
  55. package/dist/session/guards.js.map +1 -1
  56. package/dist/session/types.d.ts +6 -0
  57. package/dist/session/types.d.ts.map +1 -1
  58. package/dist/social/config.d.ts +3 -0
  59. package/dist/social/config.d.ts.map +1 -0
  60. package/dist/social/config.js +115 -0
  61. package/dist/social/config.js.map +1 -0
  62. package/dist/social/service.d.ts +18 -0
  63. package/dist/social/service.d.ts.map +1 -0
  64. package/dist/social/service.js +78 -0
  65. package/dist/social/service.js.map +1 -0
  66. package/dist/social/state.d.ts +46 -0
  67. package/dist/social/state.d.ts.map +1 -0
  68. package/dist/social/state.js +139 -0
  69. package/dist/social/state.js.map +1 -0
  70. package/dist/social/types.d.ts +75 -0
  71. package/dist/social/types.d.ts.map +1 -0
  72. package/dist/social/types.js +2 -0
  73. package/dist/social/types.js.map +1 -0
  74. 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
- account: {
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
- name: "sessions",
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 resolveName = ({ input, path }) => {
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 resolveSelect = ({ defaultSelect, input, path, }) => {
40
- if (input === undefined) {
41
- return defaultSelect;
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: `${path}.select must contain unique non-empty field names.`,
52
+ message: `Prisma model ${table} is invalid.`,
47
53
  });
48
54
  }
49
- const fields = input;
50
- if (fields.some((field) => typeof field !== "string" || !field.trim()) ||
51
- new Set(fields).size !== fields.length) {
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
- const names = fields;
58
- return names.includes("id") ? names : ["id", ...names];
69
+ return [...new Set([...defaultSelect, ...input])];
59
70
  };
60
71
  const isAccessValue = (value) => {
61
- if (Array.isArray(value)) {
62
- return value.length > 0 && value.every(isAuthScalar);
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) || Object.values(input).some((value) => !isAccessValue(value))) {
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 resolveModel = ({ client, defaultName, defaultSelect, input, path, relation, }) => {
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 name = config.name === undefined
87
- ? defaultName
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
- export const resolvePrismaModels = ({ client, input, }) => {
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: "Prisma models configuration is invalid.",
110
+ message: `${path} model configuration is invalid.`,
126
111
  });
127
112
  }
128
- const models = isRecord(input) ? input : {};
129
- if (models.sessions !== undefined && !isRecord(models.sessions)) {
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 sessions model configuration is invalid.",
132
+ message: "Prisma models configuration is invalid.",
133
133
  });
134
134
  }
135
- const sessions = isRecord(models.sessions) ? models.sessions : {};
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
- account: resolveModel({
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
- defaultName: PRISMA_DEFAULTS.account.name,
143
- defaultSelect: PRISMA_DEFAULTS.account.select,
144
- input: models.account,
145
- path: "models.account",
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":"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"}
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, PrismaRelations, PrismaSessionConfig, PrismaSessionModel, } from "./types.js";
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":"AAWA,OAAO,KAAK,EACR,mBAAmB,EAKtB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACR,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACrB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mBAAmB,EAAE,mBA0FjC,CAAC"}
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 table = isRecord(raw.client) ? raw.client[resolved.sessions] : undefined;
9
- const authSelect = createAuthSelect(resolved.account);
10
- if (!isPrismaDelegate(table)) {
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: `Prisma session model ${resolved.sessions} is invalid.`,
27
+ message: "Prisma authentication models are invalid.",
14
28
  });
15
29
  }
16
- return {
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 table.create({ data: session });
61
+ await sessions.create({ data: session });
19
62
  },
20
63
  find: async ({ account_id, session_id }) => {
21
- const row = await table.findFirst({
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 table.findMany({
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 table.findUnique({
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
- account: resolved.account,
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 table.updateMany({
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 table.update({
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":"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"}
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 { ResolvedPrismaModel } from "./types.js";
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 createAuthSelect: (account: ResolvedPrismaModel) => {
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: ({ account, value, }: {
30
- account: ResolvedPrismaModel;
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,EAER,iBAAiB,EAEjB,aAAa,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAqB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAOzE,eAAO,MAAM,aAAa;;;;;;;;;;;CAWhB,CAAC;AAmCX,eAAO,MAAM,gBAAgB,GAAI,SAAS,mBAAmB;;;;;;;;;;;CAK3D,CAAC;AAuDH,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,qBAG5B;IACC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;CAClB,KAAG,iBAcH,CAAC"}
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
- const fields = new Set([...model.select, ...Object.keys(model.access)]);
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 createAuthSelect = (account) => ({
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
- [account.relation]: {
41
- select: createModelSelect(account),
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 readModel = ({ model, value, }) => {
53
+ const readData = ({ model, value }) => {
53
54
  if (!isRecord(value)) {
54
- throw new Error(`Prisma relation ${model.relation} returned invalid data.`);
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.name}.${field} returned invalid payload data.`);
61
+ throw new Error(`Prisma field ${model.table}.${field} returned invalid payload data.`);
61
62
  }
62
63
  data[field] = fieldValue;
63
64
  }
64
- if (typeof data.id !== "string") {
65
- throw new Error(`Prisma model ${model.name} must return a string id.`);
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
- let allowed = matchesAccess({ access: model.access, value });
68
- for (const relation of Object.values(model.relations)) {
69
- const nested = readModel({ model: relation, value: value[relation.relation] });
70
- data[relation.relation] = nested.data;
71
- allowed &&= nested.allowed;
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 { allowed, data: data };
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 = ({ account, value, }) => {
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 = readModel({ model: account, value: value[account.relation] });
117
+ const resolved = readAccount({ accounts, users, value: value.account });
104
118
  return {
105
119
  ...row,
106
- account: resolved.data,
120
+ account: resolved.account,
107
121
  allowed: resolved.allowed,
108
122
  };
109
123
  };