mirror of
https://github.com/logto-io/logto.git
synced 2024-12-30 20:33:54 -05:00
feat: adopt schemas v1.0.6
This commit is contained in:
parent
916130b5fc
commit
3231be014a
3 changed files with 33 additions and 29 deletions
|
@ -13,7 +13,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@logto/essentials": "^1.0.5",
|
"@logto/essentials": "^1.0.5",
|
||||||
"@logto/schemas": "^1.0.5",
|
"@logto/schemas": "^1.0.6",
|
||||||
"dayjs": "^1.10.5",
|
"dayjs": "^1.10.5",
|
||||||
"dotenv": "^10.0.0",
|
"dotenv": "^10.0.0",
|
||||||
"got": "^11.8.2",
|
"got": "^11.8.2",
|
||||||
|
|
|
@ -2,7 +2,11 @@ import dayjs from 'dayjs';
|
||||||
import { AdapterFactory } from 'oidc-provider';
|
import { AdapterFactory } from 'oidc-provider';
|
||||||
import { IdentifierSqlTokenType, sql, ValueExpressionType } from 'slonik';
|
import { IdentifierSqlTokenType, sql, ValueExpressionType } from 'slonik';
|
||||||
import { conditional } from '@logto/essentials';
|
import { conditional } from '@logto/essentials';
|
||||||
import { OidcModelInstances, OidcModelInstanceDBEntry } from '@logto/schemas';
|
import {
|
||||||
|
OidcModelInstances,
|
||||||
|
OidcModelInstanceDBEntry,
|
||||||
|
OidcModelInstancePayload,
|
||||||
|
} from '@logto/schemas';
|
||||||
import pool from '@/database/pool';
|
import pool from '@/database/pool';
|
||||||
import { convertToIdentifiers } from '@/database/utils';
|
import { convertToIdentifiers } from '@/database/utils';
|
||||||
|
|
||||||
|
@ -37,43 +41,43 @@ export default function postgresAdapter(modelName: string) {
|
||||||
return convertResult(result);
|
return convertResult(result);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const findByPayloadField = async <
|
||||||
|
T extends ValueExpressionType,
|
||||||
|
Field extends keyof OidcModelInstancePayload
|
||||||
|
>(
|
||||||
|
field: Field,
|
||||||
|
value: T
|
||||||
|
) => {
|
||||||
|
const result = await pool.maybeOne<QueryResult>(sql`
|
||||||
|
select ${fields.payload}, ${fields.consumedAt}
|
||||||
|
from ${table}
|
||||||
|
where ${fields.modelName}=${modelName}
|
||||||
|
and ${fields.payload}->>${field}=${value}
|
||||||
|
`);
|
||||||
|
|
||||||
|
return convertResult(result);
|
||||||
|
};
|
||||||
|
|
||||||
const adapter: ReturnType<AdapterFactory> = {
|
const adapter: ReturnType<AdapterFactory> = {
|
||||||
upsert: async (id, payload, expiresIn) => {
|
upsert: async (id, payload, expiresIn) => {
|
||||||
await pool.query(sql`
|
await pool.query(sql`
|
||||||
insert into ${table} (${sql.join(
|
insert into ${table} (${sql.join(
|
||||||
[
|
[fields.modelName, fields.id, fields.payload, fields.expiresAt],
|
||||||
fields.modelName,
|
|
||||||
fields.id,
|
|
||||||
fields.payload,
|
|
||||||
fields.expiresAt,
|
|
||||||
fields.userCode,
|
|
||||||
fields.uid,
|
|
||||||
fields.grantId,
|
|
||||||
],
|
|
||||||
sql`, `
|
sql`, `
|
||||||
)})
|
)})
|
||||||
values (
|
values (
|
||||||
${modelName},
|
${modelName},
|
||||||
${id},
|
${id},
|
||||||
${JSON.stringify(payload)},
|
${JSON.stringify(payload)},
|
||||||
${dayjs().add(expiresIn, 'second').unix()},
|
${dayjs().add(expiresIn, 'second').unix()}
|
||||||
${payload.userCode ?? null},
|
|
||||||
${payload.uid ?? null},
|
|
||||||
${payload.grantId ?? null}
|
|
||||||
)
|
)
|
||||||
on conflict (${fields.modelName}, ${fields.id}) do update
|
on conflict (${fields.modelName}, ${fields.id}) do update
|
||||||
set ${setExcluded(
|
set ${setExcluded(fields.payload, fields.expiresAt)}
|
||||||
fields.payload,
|
|
||||||
fields.expiresAt,
|
|
||||||
fields.userCode,
|
|
||||||
fields.uid,
|
|
||||||
fields.grantId
|
|
||||||
)}
|
|
||||||
`);
|
`);
|
||||||
},
|
},
|
||||||
find: async (id) => findByField(fields.id, id),
|
find: async (id) => findByField(fields.id, id),
|
||||||
findByUserCode: async (userCode) => findByField(fields.userCode, userCode),
|
findByUserCode: async (userCode) => findByPayloadField('userCode', userCode),
|
||||||
findByUid: async (uid) => findByField(fields.uid, uid),
|
findByUid: async (uid) => findByPayloadField('uid', uid),
|
||||||
consume: async (id) => {
|
consume: async (id) => {
|
||||||
await pool.query(sql`
|
await pool.query(sql`
|
||||||
update ${table}
|
update ${table}
|
||||||
|
@ -93,7 +97,7 @@ export default function postgresAdapter(modelName: string) {
|
||||||
await pool.query(sql`
|
await pool.query(sql`
|
||||||
delete from ${table}
|
delete from ${table}
|
||||||
where ${fields.modelName}=${modelName}
|
where ${fields.modelName}=${modelName}
|
||||||
and ${fields.grantId}=${grantId}
|
and ${fields.payload}->>'grantId'=${grantId}
|
||||||
`);
|
`);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -396,10 +396,10 @@
|
||||||
lodash.orderby "^4.6.0"
|
lodash.orderby "^4.6.0"
|
||||||
lodash.pick "^4.4.0"
|
lodash.pick "^4.4.0"
|
||||||
|
|
||||||
"@logto/schemas@^1.0.5":
|
"@logto/schemas@^1.0.6":
|
||||||
version "1.0.5"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/@logto/schemas/-/schemas-1.0.5.tgz#7784ca8f58569bfe1feafb4ad5ca6f098b1a557e"
|
resolved "https://registry.yarnpkg.com/@logto/schemas/-/schemas-1.0.6.tgz#ef72c883b29d698a0d5b1075eee0a0de8ab80191"
|
||||||
integrity sha512-JxA9uXNz2tt0NqAp8Gl0hp0L/dLhZakG5sm41JrJKfhtse2Yy2K1X7gBYkH1C9P8P+NcHhv/K4pEgY66yXMOGQ==
|
integrity sha512-rQncFIl4cs3kZfXUTC6nrvDA1sdTlSn7ibQoZ0sjuXalqw6iGhpkQ/iQUYibkJMASc2KOtndMd47FwnQGISNUQ==
|
||||||
|
|
||||||
"@mrmlnc/readdir-enhanced@^2.2.1":
|
"@mrmlnc/readdir-enhanced@^2.2.1":
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
|
|
Loading…
Reference in a new issue