@absolutejs/auth 0.55.6 → 0.55.8
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/dist/index.d.ts +1 -0
- package/dist/index.js +120 -15
- package/dist/index.js.map +6 -5
- package/dist/linkedProviders/index.d.ts +3 -0
- package/dist/linkedProviders/index.js +3233 -0
- package/dist/linkedProviders/index.js.map +14 -0
- package/dist/linkedProviders/oauthAccountResolver.d.ts +28 -0
- package/dist/server.js +119 -15
- package/dist/server.js.map +6 -5
- package/package.json +7 -2
package/dist/index.d.ts
CHANGED
|
@@ -3462,6 +3462,7 @@ export { providersFromEnv, type ProviderSelection } from './providersFromEnv';
|
|
|
3462
3462
|
export { createRedisAuthSessionStore, type RedisSessionClient } from './session/redisStore';
|
|
3463
3463
|
export { createLinkedProviderCredentialResolver } from './linkedProviders/resolver';
|
|
3464
3464
|
export { createOAuthLinkedProviderCredentialResolver } from './linkedProviders/oauthResolver';
|
|
3465
|
+
export { createOAuthAccountLinkedProviderCredentialResolver, type OAuthLinkedProviderAccount, type OAuthLinkedProviderAccountStore } from './linkedProviders/oauthAccountResolver';
|
|
3465
3466
|
export { createNeonLinkedProviderStores, createNeonOAuthLinkedProviderCredentialResolver } from './linkedProviders/neonStores';
|
|
3466
3467
|
export { createInMemoryLinkedProviderStores } from './linkedProviders/inMemoryStores';
|
|
3467
3468
|
export { protectRoutePlugin } from './routes/protectRoute';
|
package/dist/index.js
CHANGED
|
@@ -23587,13 +23587,12 @@ var createLinkedProviderCredentialResolver = ({
|
|
|
23587
23587
|
},
|
|
23588
23588
|
resolveCredential: async (input) => {
|
|
23589
23589
|
const bindings = sortNewestFirst(await bindingStore.listBindingsByOwner(input.ownerRef)).filter((binding) => binding.connectorProvider === input.connectorProvider && isBindingUsable(binding) && (input.bindingId === undefined || binding.id === input.bindingId) && (input.externalAccountId === undefined || binding.externalAccountId === input.externalAccountId));
|
|
23590
|
-
|
|
23591
|
-
const credential = await
|
|
23592
|
-
if (credential)
|
|
23590
|
+
return bindings.reduce(async (pendingCredential, binding) => {
|
|
23591
|
+
const credential = await pendingCredential;
|
|
23592
|
+
if (credential)
|
|
23593
23593
|
return credential;
|
|
23594
|
-
|
|
23595
|
-
}
|
|
23596
|
-
return null;
|
|
23594
|
+
return resolveBindingCredential(grantStore, binding, input);
|
|
23595
|
+
}, Promise.resolve(null));
|
|
23597
23596
|
}
|
|
23598
23597
|
});
|
|
23599
23598
|
// src/linkedProviders/oauthResolver.ts
|
|
@@ -23696,6 +23695,111 @@ var createOAuthLinkedProviderCredentialResolver = async ({
|
|
|
23696
23695
|
}
|
|
23697
23696
|
});
|
|
23698
23697
|
};
|
|
23698
|
+
// src/linkedProviders/oauthAccountResolver.ts
|
|
23699
|
+
var bindingId = (accountId) => `oauth-account:${accountId}`;
|
|
23700
|
+
var accountIdFromBinding = (id) => {
|
|
23701
|
+
const prefix = "oauth-account:";
|
|
23702
|
+
return id.startsWith(prefix) ? id.slice(prefix.length) : null;
|
|
23703
|
+
};
|
|
23704
|
+
var toGrant = (account) => ({
|
|
23705
|
+
accessTokenCiphertext: account.accessToken,
|
|
23706
|
+
authProviderKey: account.authProviderKey,
|
|
23707
|
+
createdAt: account.createdAt,
|
|
23708
|
+
expiresAt: account.expiresAt,
|
|
23709
|
+
grantedScopes: [...account.grantedScopes],
|
|
23710
|
+
id: account.id,
|
|
23711
|
+
metadata: account.metadata,
|
|
23712
|
+
ownerRef: account.ownerRef,
|
|
23713
|
+
providerFamily: account.authProviderKey,
|
|
23714
|
+
providerSubject: account.providerSubject,
|
|
23715
|
+
refreshTokenCiphertext: account.refreshToken,
|
|
23716
|
+
status: account.status,
|
|
23717
|
+
tokenType: account.tokenType,
|
|
23718
|
+
updatedAt: account.updatedAt
|
|
23719
|
+
});
|
|
23720
|
+
var toBinding = (account) => ({
|
|
23721
|
+
availableScopes: [...account.grantedScopes],
|
|
23722
|
+
connectorProvider: account.authProviderKey,
|
|
23723
|
+
createdAt: account.createdAt,
|
|
23724
|
+
externalAccountId: account.providerSubject,
|
|
23725
|
+
externalAccountType: "user",
|
|
23726
|
+
grantId: account.id,
|
|
23727
|
+
id: bindingId(account.id),
|
|
23728
|
+
metadata: account.metadata,
|
|
23729
|
+
status: account.status === "revoked" || account.status === "error" ? "disconnected" : "active",
|
|
23730
|
+
updatedAt: account.updatedAt
|
|
23731
|
+
});
|
|
23732
|
+
var accountWithGrant = (account, grant) => ({
|
|
23733
|
+
...account,
|
|
23734
|
+
accessToken: grant.accessTokenCiphertext,
|
|
23735
|
+
authProviderKey: grant.authProviderKey,
|
|
23736
|
+
expiresAt: grant.expiresAt,
|
|
23737
|
+
grantedScopes: [...grant.grantedScopes],
|
|
23738
|
+
metadata: grant.metadata,
|
|
23739
|
+
ownerRef: grant.ownerRef,
|
|
23740
|
+
providerSubject: grant.providerSubject,
|
|
23741
|
+
refreshToken: grant.refreshTokenCiphertext,
|
|
23742
|
+
status: grant.status,
|
|
23743
|
+
tokenType: grant.tokenType,
|
|
23744
|
+
updatedAt: grant.updatedAt
|
|
23745
|
+
});
|
|
23746
|
+
var accountStatusForBinding = (account, binding) => {
|
|
23747
|
+
if (binding.status === "disconnected")
|
|
23748
|
+
return "revoked";
|
|
23749
|
+
if (binding.status === "restricted")
|
|
23750
|
+
return "error";
|
|
23751
|
+
return account.status;
|
|
23752
|
+
};
|
|
23753
|
+
var createOAuthAccountLinkedProviderCredentialResolver = async ({
|
|
23754
|
+
accountStore,
|
|
23755
|
+
now,
|
|
23756
|
+
providersConfiguration
|
|
23757
|
+
}) => {
|
|
23758
|
+
const grantStore = {
|
|
23759
|
+
getGrant: async (id) => {
|
|
23760
|
+
const account = await accountStore.getAccount(id);
|
|
23761
|
+
return account ? toGrant(account) : undefined;
|
|
23762
|
+
},
|
|
23763
|
+
listGrantsByOwner: async (ownerRef) => (await accountStore.listAccountsByOwner(ownerRef)).map(toGrant),
|
|
23764
|
+
saveGrant: async (grant) => {
|
|
23765
|
+
const account = await accountStore.getAccount(grant.id);
|
|
23766
|
+
if (!account)
|
|
23767
|
+
throw new Error("OAuth linked account is unavailable");
|
|
23768
|
+
await accountStore.saveAccount(accountWithGrant(account, grant));
|
|
23769
|
+
}
|
|
23770
|
+
};
|
|
23771
|
+
const bindingStore = {
|
|
23772
|
+
getBinding: async (id) => {
|
|
23773
|
+
const accountId = accountIdFromBinding(id);
|
|
23774
|
+
if (!accountId)
|
|
23775
|
+
return;
|
|
23776
|
+
const account = await accountStore.getAccount(accountId);
|
|
23777
|
+
return account ? toBinding(account) : undefined;
|
|
23778
|
+
},
|
|
23779
|
+
listBindingsByGrant: async (grantId) => {
|
|
23780
|
+
const account = await accountStore.getAccount(grantId);
|
|
23781
|
+
return account ? [toBinding(account)] : [];
|
|
23782
|
+
},
|
|
23783
|
+
listBindingsByOwner: async (ownerRef) => (await accountStore.listAccountsByOwner(ownerRef)).map(toBinding),
|
|
23784
|
+
saveBinding: async (binding) => {
|
|
23785
|
+
const account = await accountStore.getAccount(binding.grantId);
|
|
23786
|
+
if (!account)
|
|
23787
|
+
throw new Error("OAuth linked account is unavailable");
|
|
23788
|
+
await accountStore.saveAccount({
|
|
23789
|
+
...account,
|
|
23790
|
+
metadata: binding.metadata,
|
|
23791
|
+
status: accountStatusForBinding(account, binding),
|
|
23792
|
+
updatedAt: binding.updatedAt
|
|
23793
|
+
});
|
|
23794
|
+
}
|
|
23795
|
+
};
|
|
23796
|
+
return createOAuthLinkedProviderCredentialResolver({
|
|
23797
|
+
bindingStore,
|
|
23798
|
+
grantStore,
|
|
23799
|
+
...now ? { now } : {},
|
|
23800
|
+
providersConfiguration
|
|
23801
|
+
});
|
|
23802
|
+
};
|
|
23699
23803
|
// src/linkedProviders/neonStores.ts
|
|
23700
23804
|
var linkedProviderBindingsTable = pgTable("linked_provider_bindings", {
|
|
23701
23805
|
available_scopes: jsonb("available_scopes").$type().notNull().default([]),
|
|
@@ -23737,7 +23841,7 @@ var linkedProviderGrantsTable = pgTable("linked_provider_grants", {
|
|
|
23737
23841
|
});
|
|
23738
23842
|
var toTimestamp = (value) => value === undefined ? null : new Date(value);
|
|
23739
23843
|
var fromTimestamp = (value) => value === null ? undefined : value.getTime();
|
|
23740
|
-
var
|
|
23844
|
+
var toGrant2 = (row) => ({
|
|
23741
23845
|
accessTokenCiphertext: row.access_token_ciphertext ?? undefined,
|
|
23742
23846
|
authProviderKey: row.auth_provider_key,
|
|
23743
23847
|
createdAt: row.created_at.getTime(),
|
|
@@ -23755,7 +23859,7 @@ var toGrant = (row) => ({
|
|
|
23755
23859
|
tokenType: row.token_type ?? undefined,
|
|
23756
23860
|
updatedAt: row.updated_at.getTime()
|
|
23757
23861
|
});
|
|
23758
|
-
var
|
|
23862
|
+
var toBinding2 = (row) => ({
|
|
23759
23863
|
availableScopes: row.available_scopes ?? [],
|
|
23760
23864
|
capabilities: row.capabilities ?? undefined,
|
|
23761
23865
|
connectorProvider: row.connector_provider,
|
|
@@ -23774,15 +23878,15 @@ var toBinding = (row) => ({
|
|
|
23774
23878
|
var createNeonLinkedProviderBindingStore = (db) => ({
|
|
23775
23879
|
getBinding: async (id) => {
|
|
23776
23880
|
const [row] = await db.select().from(linkedProviderBindingsTable).where(eq(linkedProviderBindingsTable.id, id)).limit(1);
|
|
23777
|
-
return row ?
|
|
23881
|
+
return row ? toBinding2(row) : undefined;
|
|
23778
23882
|
},
|
|
23779
23883
|
listBindingsByGrant: async (grantId) => {
|
|
23780
23884
|
const rows = await db.select().from(linkedProviderBindingsTable).where(eq(linkedProviderBindingsTable.grant_id, grantId)).orderBy(desc(linkedProviderBindingsTable.updated_at));
|
|
23781
|
-
return rows.map(
|
|
23885
|
+
return rows.map(toBinding2);
|
|
23782
23886
|
},
|
|
23783
23887
|
listBindingsByOwner: async (ownerRef) => {
|
|
23784
23888
|
const rows = await db.select({ binding: linkedProviderBindingsTable }).from(linkedProviderBindingsTable).innerJoin(linkedProviderGrantsTable, eq(linkedProviderBindingsTable.grant_id, linkedProviderGrantsTable.id)).where(eq(linkedProviderGrantsTable.owner_ref, ownerRef)).orderBy(desc(linkedProviderBindingsTable.updated_at));
|
|
23785
|
-
return rows.map(({ binding }) =>
|
|
23889
|
+
return rows.map(({ binding }) => toBinding2(binding));
|
|
23786
23890
|
},
|
|
23787
23891
|
removeBinding: async (id) => {
|
|
23788
23892
|
await db.delete(linkedProviderBindingsTable).where(eq(linkedProviderBindingsTable.id, id));
|
|
@@ -23825,11 +23929,11 @@ var createNeonLinkedProviderBindingStore = (db) => ({
|
|
|
23825
23929
|
var createNeonLinkedProviderGrantStore = (db) => ({
|
|
23826
23930
|
getGrant: async (id) => {
|
|
23827
23931
|
const [row] = await db.select().from(linkedProviderGrantsTable).where(eq(linkedProviderGrantsTable.id, id)).limit(1);
|
|
23828
|
-
return row ?
|
|
23932
|
+
return row ? toGrant2(row) : undefined;
|
|
23829
23933
|
},
|
|
23830
23934
|
listGrantsByOwner: async (ownerRef) => {
|
|
23831
23935
|
const rows = await db.select().from(linkedProviderGrantsTable).where(eq(linkedProviderGrantsTable.owner_ref, ownerRef)).orderBy(desc(linkedProviderGrantsTable.updated_at));
|
|
23832
|
-
return rows.map(
|
|
23936
|
+
return rows.map(toGrant2);
|
|
23833
23937
|
},
|
|
23834
23938
|
removeGrant: async (id) => {
|
|
23835
23939
|
await db.delete(linkedProviderBindingsTable).where(eq(linkedProviderBindingsTable.grant_id, id));
|
|
@@ -23921,7 +24025,7 @@ var createInMemoryLinkedProviderStores = (input = {}) => {
|
|
|
23921
24025
|
listGrantsByOwner: async (ownerRef) => [...grants.values()].filter((grant) => grant.ownerRef === ownerRef).map(cloneGrant),
|
|
23922
24026
|
removeGrant: async (id) => {
|
|
23923
24027
|
grants.delete(id);
|
|
23924
|
-
[...bindings.entries()].filter(([, binding]) => binding.grantId === id).forEach(([
|
|
24028
|
+
[...bindings.entries()].filter(([, binding]) => binding.grantId === id).forEach(([bindingId2]) => bindings.delete(bindingId2));
|
|
23925
24029
|
},
|
|
23926
24030
|
saveGrant: async (grant) => {
|
|
23927
24031
|
grants.set(grant.id, cloneGrant(grant));
|
|
@@ -29788,6 +29892,7 @@ export {
|
|
|
29788
29892
|
createOrganization,
|
|
29789
29893
|
createOidcAgentCredentialVerifier,
|
|
29790
29894
|
createOAuthLinkedProviderCredentialResolver,
|
|
29895
|
+
createOAuthAccountLinkedProviderCredentialResolver,
|
|
29791
29896
|
createNeonWebhookDeliveryStore,
|
|
29792
29897
|
createNeonWebAuthnCredentialStore,
|
|
29793
29898
|
createNeonWarrantStore,
|
|
@@ -29979,5 +30084,5 @@ export {
|
|
|
29979
30084
|
AGENT_CLAIM_GRANT_TYPE
|
|
29980
30085
|
};
|
|
29981
30086
|
|
|
29982
|
-
//# debugId=
|
|
30087
|
+
//# debugId=DCA509B790E265BD64756E2164756E21
|
|
29983
30088
|
//# sourceMappingURL=index.js.map
|