@argos-js/auth 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +13 -2
- package/dist/certificates/cert-parser.d.ts +19 -0
- package/dist/certificates/cert-parser.d.ts.map +1 -0
- package/dist/certificates/cert-parser.js +192 -0
- package/dist/certificates/cert-parser.js.map +1 -0
- package/dist/certificates/cert.types.d.ts +60 -0
- package/dist/certificates/cert.types.d.ts.map +1 -0
- package/dist/certificates/cert.types.js +3 -0
- package/dist/certificates/cert.types.js.map +1 -0
- package/dist/certificates/index.d.ts +5 -0
- package/dist/certificates/index.d.ts.map +1 -0
- package/dist/certificates/index.js +21 -0
- package/dist/certificates/index.js.map +1 -0
- package/dist/certificates/jwks.d.ts +90 -0
- package/dist/certificates/jwks.d.ts.map +1 -0
- package/dist/certificates/jwks.js +180 -0
- package/dist/certificates/jwks.js.map +1 -0
- package/dist/certificates/mtls.guard.d.ts +10 -0
- package/dist/certificates/mtls.guard.d.ts.map +1 -0
- package/dist/certificates/mtls.guard.js +156 -0
- package/dist/certificates/mtls.guard.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -0
- package/dist/guards/api-key.guard.d.ts +21 -0
- package/dist/guards/api-key.guard.d.ts.map +1 -0
- package/dist/guards/api-key.guard.js +106 -0
- package/dist/guards/api-key.guard.js.map +1 -0
- package/dist/guards/basic.d.ts +6 -0
- package/dist/guards/basic.d.ts.map +1 -0
- package/dist/guards/basic.guard.d.ts +26 -0
- package/dist/guards/basic.guard.d.ts.map +1 -0
- package/dist/guards/basic.guard.js +123 -0
- package/dist/guards/basic.guard.js.map +1 -0
- package/dist/guards/basic.js +42 -0
- package/dist/guards/basic.js.map +1 -0
- package/dist/guards/guard.interface.d.ts +21 -0
- package/dist/guards/guard.interface.d.ts.map +1 -0
- package/dist/guards/guard.interface.js +3 -0
- package/dist/guards/guard.interface.js.map +1 -0
- package/dist/guards/hmac.guard.d.ts +18 -0
- package/dist/guards/hmac.guard.d.ts.map +1 -0
- package/dist/guards/hmac.guard.js +111 -0
- package/dist/guards/hmac.guard.js.map +1 -0
- package/dist/guards/index.d.ts +8 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +24 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/jwt.guard.d.ts +17 -0
- package/dist/guards/jwt.guard.d.ts.map +1 -0
- package/dist/guards/jwt.guard.js +92 -0
- package/dist/guards/jwt.guard.js.map +1 -0
- package/dist/hasher/argon2-hasher.d.ts +31 -0
- package/dist/hasher/argon2-hasher.d.ts.map +1 -0
- package/dist/hasher/argon2-hasher.js +114 -0
- package/dist/hasher/argon2-hasher.js.map +1 -0
- package/dist/hasher/hasher.interface.d.ts +22 -0
- package/dist/hasher/hasher.interface.d.ts.map +1 -0
- package/dist/hasher/hasher.interface.js +3 -0
- package/dist/hasher/hasher.interface.js.map +1 -0
- package/dist/hasher/index.d.ts +5 -0
- package/dist/hasher/index.d.ts.map +1 -0
- package/dist/hasher/index.js +21 -0
- package/dist/hasher/index.js.map +1 -0
- package/dist/hasher/password-manager.d.ts +52 -0
- package/dist/hasher/password-manager.d.ts.map +1 -0
- package/dist/hasher/password-manager.js +126 -0
- package/dist/hasher/password-manager.js.map +1 -0
- package/dist/hasher/scrypt-hasher.d.ts +30 -0
- package/dist/hasher/scrypt-hasher.d.ts.map +1 -0
- package/dist/hasher/scrypt-hasher.js +158 -0
- package/dist/hasher/scrypt-hasher.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.middleware.d.ts +42 -0
- package/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/middleware/auth.middleware.js +142 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/middleware/index.d.ts +2 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +18 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/oauth/base.provider.d.ts +27 -0
- package/dist/oauth/base.provider.d.ts.map +1 -0
- package/dist/oauth/base.provider.js +139 -0
- package/dist/oauth/base.provider.js.map +1 -0
- package/dist/oauth/index.d.ts +6 -0
- package/dist/oauth/index.d.ts.map +1 -0
- package/dist/oauth/index.js +22 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/oauth-manager.d.ts +41 -0
- package/dist/oauth/oauth-manager.d.ts.map +1 -0
- package/dist/oauth/oauth-manager.js +58 -0
- package/dist/oauth/oauth-manager.js.map +1 -0
- package/dist/oauth/oauth.types.d.ts +55 -0
- package/dist/oauth/oauth.types.d.ts.map +1 -0
- package/dist/oauth/oauth.types.js +3 -0
- package/dist/oauth/oauth.types.js.map +1 -0
- package/dist/oauth/pkce.d.ts +26 -0
- package/dist/oauth/pkce.d.ts.map +1 -0
- package/dist/oauth/pkce.js +136 -0
- package/dist/oauth/pkce.js.map +1 -0
- package/dist/oauth/providers/generic-oidc.provider.d.ts +25 -0
- package/dist/oauth/providers/generic-oidc.provider.d.ts.map +1 -0
- package/dist/oauth/providers/generic-oidc.provider.js +43 -0
- package/dist/oauth/providers/generic-oidc.provider.js.map +1 -0
- package/dist/oauth/providers/github.provider.d.ts +15 -0
- package/dist/oauth/providers/github.provider.d.ts.map +1 -0
- package/dist/oauth/providers/github.provider.js +70 -0
- package/dist/oauth/providers/github.provider.js.map +1 -0
- package/dist/oauth/providers/google.provider.d.ts +12 -0
- package/dist/oauth/providers/google.provider.d.ts.map +1 -0
- package/dist/oauth/providers/google.provider.js +27 -0
- package/dist/oauth/providers/google.provider.js.map +1 -0
- package/dist/oauth/providers/index.d.ts +5 -0
- package/dist/oauth/providers/index.d.ts.map +1 -0
- package/dist/oauth/providers/index.js +21 -0
- package/dist/oauth/providers/index.js.map +1 -0
- package/dist/oauth/providers/microsoft.provider.d.ts +13 -0
- package/dist/oauth/providers/microsoft.provider.d.ts.map +1 -0
- package/dist/oauth/providers/microsoft.provider.js +28 -0
- package/dist/oauth/providers/microsoft.provider.js.map +1 -0
- package/dist/oauth2/client.d.ts +63 -0
- package/dist/oauth2/client.d.ts.map +1 -0
- package/dist/oauth2/client.js +150 -0
- package/dist/oauth2/client.js.map +1 -0
- package/dist/oauth2/index.d.ts +2 -0
- package/dist/oauth2/index.d.ts.map +1 -0
- package/dist/oauth2/index.js +18 -0
- package/dist/oauth2/index.js.map +1 -0
- package/dist/tokens/api-key.d.ts +26 -0
- package/dist/tokens/api-key.d.ts.map +1 -0
- package/dist/tokens/api-key.js +84 -0
- package/dist/tokens/api-key.js.map +1 -0
- package/dist/tokens/index.d.ts +3 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +19 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/jwt.d.ts +93 -0
- package/dist/tokens/jwt.d.ts.map +1 -0
- package/dist/tokens/jwt.js +327 -0
- package/dist/tokens/jwt.js.map +1 -0
- package/package.json +38 -3
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GitHubProvider = void 0;
|
|
4
|
+
const base_provider_js_1 = require("../base.provider.js");
|
|
5
|
+
class GitHubProvider extends base_provider_js_1.BaseOAuthProvider {
|
|
6
|
+
emailsUrl;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
super({
|
|
9
|
+
authorizationUrl: 'https://github.com/login/oauth/authorize',
|
|
10
|
+
tokenUrl: 'https://github.com/login/oauth/access_token',
|
|
11
|
+
userInfoUrl: 'https://api.github.com/user',
|
|
12
|
+
scopes: ['read:user', 'user:email'],
|
|
13
|
+
...options,
|
|
14
|
+
});
|
|
15
|
+
this.emailsUrl = options.emailsUrl || 'https://api.github.com/user/emails';
|
|
16
|
+
}
|
|
17
|
+
async fetchUserInfo(accessToken) {
|
|
18
|
+
const userResponse = await fetch(this.options.userInfoUrl, {
|
|
19
|
+
headers: {
|
|
20
|
+
authorization: `Bearer ${accessToken}`,
|
|
21
|
+
accept: 'application/json',
|
|
22
|
+
'user-agent': 'Argos-JS-Auth',
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
if (!userResponse.ok) {
|
|
26
|
+
const errorText = await userResponse.text();
|
|
27
|
+
throw new Error(`Failed to fetch GitHub user info (${userResponse.status}): ${errorText}`);
|
|
28
|
+
}
|
|
29
|
+
const profile = (await userResponse.json());
|
|
30
|
+
// If public email is empty, fetch private verified email from /user/emails
|
|
31
|
+
if (!profile.email) {
|
|
32
|
+
try {
|
|
33
|
+
const emailsResponse = await fetch(this.emailsUrl, {
|
|
34
|
+
headers: {
|
|
35
|
+
authorization: `Bearer ${accessToken}`,
|
|
36
|
+
accept: 'application/json',
|
|
37
|
+
'user-agent': 'Argos-JS-Auth',
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
if (emailsResponse.ok) {
|
|
41
|
+
const emails = (await emailsResponse.json());
|
|
42
|
+
if (Array.isArray(emails)) {
|
|
43
|
+
const primary = emails.find((e) => e.primary && e.verified) || emails.find((e) => e.verified) || emails[0];
|
|
44
|
+
if (primary) {
|
|
45
|
+
profile.email = primary.email;
|
|
46
|
+
profile.email_verified = primary.verified;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// non-blocking
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return profile;
|
|
56
|
+
}
|
|
57
|
+
mapUser(rawProfile, _tokens) {
|
|
58
|
+
return {
|
|
59
|
+
id: String(rawProfile.id ?? rawProfile.node_id ?? ''),
|
|
60
|
+
username: rawProfile.login,
|
|
61
|
+
email: rawProfile.email,
|
|
62
|
+
emailVerified: Boolean(rawProfile.email_verified ?? (rawProfile.email ? true : false)),
|
|
63
|
+
name: rawProfile.name ?? rawProfile.login,
|
|
64
|
+
avatar: rawProfile.avatar_url ?? undefined,
|
|
65
|
+
raw: rawProfile,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.GitHubProvider = GitHubProvider;
|
|
70
|
+
//# sourceMappingURL=github.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.provider.js","sourceRoot":"","sources":["../../../src/oauth/providers/github.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseOAuthProvider } from '../base.provider.js';
|
|
2
|
+
import type { BaseOAuthProviderOptions, OAuthTokens, OAuthUser } from '../oauth.types.js';
|
|
3
|
+
export interface GoogleProviderOptions extends Omit<BaseOAuthProviderOptions, 'authorizationUrl' | 'tokenUrl'> {
|
|
4
|
+
authorizationUrl?: string;
|
|
5
|
+
tokenUrl?: string;
|
|
6
|
+
userInfoUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class GoogleProvider extends BaseOAuthProvider {
|
|
9
|
+
constructor(options: GoogleProviderOptions);
|
|
10
|
+
mapUser(rawProfile: Record<string, unknown>, _tokens: OAuthTokens): OAuthUser;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=google.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.provider.d.ts","sourceRoot":"","sources":["../../../src/oauth/providers/google.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE1F,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,wBAAwB,EAAE,kBAAkB,GAAG,UAAU,CAAC;IAC5G,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAe,SAAQ,iBAAiB;gBACvC,OAAO,EAAE,qBAAqB;IAUnC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS;CAUrF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GoogleProvider = void 0;
|
|
4
|
+
const base_provider_js_1 = require("../base.provider.js");
|
|
5
|
+
class GoogleProvider extends base_provider_js_1.BaseOAuthProvider {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
super({
|
|
8
|
+
authorizationUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
|
|
9
|
+
tokenUrl: 'https://oauth2.googleapis.com/token',
|
|
10
|
+
userInfoUrl: 'https://openidconnect.googleapis.com/v1/userinfo',
|
|
11
|
+
scopes: ['openid', 'email', 'profile'],
|
|
12
|
+
...options,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
mapUser(rawProfile, _tokens) {
|
|
16
|
+
return {
|
|
17
|
+
id: String(rawProfile.sub ?? rawProfile.id ?? ''),
|
|
18
|
+
email: rawProfile.email,
|
|
19
|
+
emailVerified: Boolean(rawProfile.email_verified),
|
|
20
|
+
name: rawProfile.name,
|
|
21
|
+
avatar: rawProfile.picture ?? undefined,
|
|
22
|
+
raw: rawProfile,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.GoogleProvider = GoogleProvider;
|
|
27
|
+
//# sourceMappingURL=google.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.provider.js","sourceRoot":"","sources":["../../../src/oauth/providers/google.provider.ts"],"names":[],"mappings":";;;AAAA,0DAAwD;AASxD,MAAa,cAAe,SAAQ,oCAAiB;IACnD,YAAY,OAA8B;QACxC,KAAK,CAAC;YACJ,gBAAgB,EAAE,8CAA8C;YAChE,QAAQ,EAAE,qCAAqC;YAC/C,WAAW,EAAE,kDAAkD;YAC/D,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;YACtC,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,UAAmC,EAAE,OAAoB;QACtE,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;YACjD,KAAK,EAAE,UAAU,CAAC,KAA2B;YAC7C,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;YACjD,IAAI,EAAE,UAAU,CAAC,IAA0B;YAC3C,MAAM,EAAG,UAAU,CAAC,OAAkB,IAAI,SAAS;YACnD,GAAG,EAAE,UAAU;SAChB,CAAC;IACJ,CAAC;CACF;AArBD,wCAqBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/oauth/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./google.provider.js"), exports);
|
|
18
|
+
__exportStar(require("./github.provider.js"), exports);
|
|
19
|
+
__exportStar(require("./microsoft.provider.js"), exports);
|
|
20
|
+
__exportStar(require("./generic-oidc.provider.js"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/oauth/providers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,uDAAqC;AACrC,0DAAwC;AACxC,6DAA2C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseOAuthProvider } from '../base.provider.js';
|
|
2
|
+
import type { BaseOAuthProviderOptions, OAuthTokens, OAuthUser } from '../oauth.types.js';
|
|
3
|
+
export interface MicrosoftProviderOptions extends Omit<BaseOAuthProviderOptions, 'authorizationUrl' | 'tokenUrl'> {
|
|
4
|
+
tenant?: string;
|
|
5
|
+
authorizationUrl?: string;
|
|
6
|
+
tokenUrl?: string;
|
|
7
|
+
userInfoUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class MicrosoftProvider extends BaseOAuthProvider {
|
|
10
|
+
constructor(options: MicrosoftProviderOptions);
|
|
11
|
+
mapUser(rawProfile: Record<string, unknown>, _tokens: OAuthTokens): OAuthUser;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=microsoft.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microsoft.provider.d.ts","sourceRoot":"","sources":["../../../src/oauth/providers/microsoft.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE1F,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,wBAAwB,EAAE,kBAAkB,GAAG,UAAU,CAAC;IAC/G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB;gBAC1C,OAAO,EAAE,wBAAwB;IAWtC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS;CAUrF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MicrosoftProvider = void 0;
|
|
4
|
+
const base_provider_js_1 = require("../base.provider.js");
|
|
5
|
+
class MicrosoftProvider extends base_provider_js_1.BaseOAuthProvider {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
const tenant = options.tenant || 'common';
|
|
8
|
+
super({
|
|
9
|
+
authorizationUrl: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/authorize`,
|
|
10
|
+
tokenUrl: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/token`,
|
|
11
|
+
userInfoUrl: 'https://graph.microsoft.com/oidc/userinfo',
|
|
12
|
+
scopes: ['openid', 'profile', 'email'],
|
|
13
|
+
...options,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
mapUser(rawProfile, _tokens) {
|
|
17
|
+
return {
|
|
18
|
+
id: String(rawProfile.sub ?? rawProfile.id ?? ''),
|
|
19
|
+
email: rawProfile.email ?? rawProfile.preferred_username,
|
|
20
|
+
emailVerified: true,
|
|
21
|
+
name: rawProfile.name ?? undefined,
|
|
22
|
+
avatar: rawProfile.picture ?? undefined,
|
|
23
|
+
raw: rawProfile,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.MicrosoftProvider = MicrosoftProvider;
|
|
28
|
+
//# sourceMappingURL=microsoft.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microsoft.provider.js","sourceRoot":"","sources":["../../../src/oauth/providers/microsoft.provider.ts"],"names":[],"mappings":";;;AAAA,0DAAwD;AAUxD,MAAa,iBAAkB,SAAQ,oCAAiB;IACtD,YAAY,OAAiC;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC1C,KAAK,CAAC;YACJ,gBAAgB,EAAE,qCAAqC,MAAM,wBAAwB;YACrF,QAAQ,EAAE,qCAAqC,MAAM,oBAAoB;YACzE,WAAW,EAAE,2CAA2C;YACxD,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;YACtC,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,UAAmC,EAAE,OAAoB;QACtE,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;YACjD,KAAK,EAAG,UAAU,CAAC,KAAgB,IAAK,UAAU,CAAC,kBAA6B;YAChF,aAAa,EAAE,IAAI;YACnB,IAAI,EAAG,UAAU,CAAC,IAAe,IAAI,SAAS;YAC9C,MAAM,EAAG,UAAU,CAAC,OAAkB,IAAI,SAAS;YACnD,GAAG,EAAE,UAAU;SAChB,CAAC;IACJ,CAAC;CACF;AAtBD,8CAsBC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { OAuthTokens } from '../oauth/oauth.types.js';
|
|
2
|
+
export interface OAuth2ClientOptions {
|
|
3
|
+
clientId: string;
|
|
4
|
+
clientSecret?: string;
|
|
5
|
+
authorizationUrl?: string;
|
|
6
|
+
tokenUrl?: string;
|
|
7
|
+
userInfoUrl?: string;
|
|
8
|
+
redirectUri?: string;
|
|
9
|
+
scopes?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface GenerateAuthorizationUrlOptions {
|
|
12
|
+
state?: string;
|
|
13
|
+
scope?: string | string[];
|
|
14
|
+
clientId?: string;
|
|
15
|
+
redirectUri?: string;
|
|
16
|
+
codeVerifier?: string;
|
|
17
|
+
prompt?: string;
|
|
18
|
+
accessType?: string;
|
|
19
|
+
extraParams?: Record<string, string>;
|
|
20
|
+
}
|
|
21
|
+
export interface ExchangeCodeOptions {
|
|
22
|
+
code: string;
|
|
23
|
+
redirectUri?: string;
|
|
24
|
+
clientId?: string;
|
|
25
|
+
clientSecret?: string;
|
|
26
|
+
tokenUrl?: string;
|
|
27
|
+
codeVerifier?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class OAuth2Client {
|
|
30
|
+
private options;
|
|
31
|
+
constructor(options: OAuth2ClientOptions);
|
|
32
|
+
/**
|
|
33
|
+
* Generates authorization URL with state, scope, client_id, and PKCE code_challenge support.
|
|
34
|
+
*/
|
|
35
|
+
generateAuthorizationUrl(options?: GenerateAuthorizationUrlOptions): {
|
|
36
|
+
url: string;
|
|
37
|
+
state: string;
|
|
38
|
+
codeVerifier: string;
|
|
39
|
+
codeChallenge: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Alias for generateAuthorizationUrl conforming to common naming conventions.
|
|
43
|
+
*/
|
|
44
|
+
authorizationUrl(options?: GenerateAuthorizationUrlOptions): {
|
|
45
|
+
url: string;
|
|
46
|
+
state: string;
|
|
47
|
+
codeVerifier: string;
|
|
48
|
+
codeChallenge: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Exchanges an authorization code for access & refresh tokens.
|
|
52
|
+
*/
|
|
53
|
+
exchangeCodeForToken(options: ExchangeCodeOptions): Promise<OAuthTokens>;
|
|
54
|
+
/**
|
|
55
|
+
* Fetches user info profile from userInfoUrl using bearer accessToken.
|
|
56
|
+
*/
|
|
57
|
+
fetchUserInfo(accessToken: string, userInfoUrl?: string): Promise<Record<string, unknown>>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Creates an OAuth2 client instance.
|
|
61
|
+
*/
|
|
62
|
+
export declare function createOAuth2Client(options: OAuth2ClientOptions): OAuth2Client;
|
|
63
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/oauth2/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,EAAE,mBAAmB;IAIxC;;OAEG;IACI,wBAAwB,CAAC,OAAO,GAAE,+BAAoC,GAAG;QAC9E,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB;IA0DD;;OAEG;IACI,gBAAgB,CAAC,OAAO,GAAE,+BAAoC;aAjE9D,MAAM;eACJ,MAAM;sBACC,MAAM;uBACL,MAAM;;IAkEvB;;OAEG;IACU,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwDrF;;OAEG;IACU,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAoBxG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAE7E"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OAuth2Client = void 0;
|
|
4
|
+
exports.createOAuth2Client = createOAuth2Client;
|
|
5
|
+
const pkce_js_1 = require("../oauth/pkce.js");
|
|
6
|
+
class OAuth2Client {
|
|
7
|
+
options;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.options = { ...options };
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Generates authorization URL with state, scope, client_id, and PKCE code_challenge support.
|
|
13
|
+
*/
|
|
14
|
+
generateAuthorizationUrl(options = {}) {
|
|
15
|
+
const authUrl = this.options.authorizationUrl;
|
|
16
|
+
if (!authUrl) {
|
|
17
|
+
throw new Error('authorizationUrl is required to generate authorization URL');
|
|
18
|
+
}
|
|
19
|
+
const clientId = options.clientId || this.options.clientId;
|
|
20
|
+
if (!clientId) {
|
|
21
|
+
throw new Error('clientId is required to generate authorization URL');
|
|
22
|
+
}
|
|
23
|
+
const redirectUri = options.redirectUri || this.options.redirectUri;
|
|
24
|
+
const pkce = options.codeVerifier
|
|
25
|
+
? {
|
|
26
|
+
codeVerifier: options.codeVerifier,
|
|
27
|
+
codeChallenge: options.codeVerifier,
|
|
28
|
+
codeChallengeMethod: 'S256',
|
|
29
|
+
}
|
|
30
|
+
: (0, pkce_js_1.generatePkcePair)();
|
|
31
|
+
const state = options.state || (0, pkce_js_1.generateState)();
|
|
32
|
+
const scopes = options.scope
|
|
33
|
+
? (Array.isArray(options.scope) ? options.scope.join(' ') : options.scope)
|
|
34
|
+
: (this.options.scopes ? this.options.scopes.join(' ') : '');
|
|
35
|
+
const url = new URL(authUrl);
|
|
36
|
+
url.searchParams.set('response_type', 'code');
|
|
37
|
+
url.searchParams.set('client_id', clientId);
|
|
38
|
+
if (redirectUri) {
|
|
39
|
+
url.searchParams.set('redirect_uri', redirectUri);
|
|
40
|
+
}
|
|
41
|
+
if (scopes) {
|
|
42
|
+
url.searchParams.set('scope', scopes);
|
|
43
|
+
}
|
|
44
|
+
url.searchParams.set('state', state);
|
|
45
|
+
url.searchParams.set('code_challenge', pkce.codeChallenge);
|
|
46
|
+
url.searchParams.set('code_challenge_method', pkce.codeChallengeMethod);
|
|
47
|
+
if (options.prompt) {
|
|
48
|
+
url.searchParams.set('prompt', options.prompt);
|
|
49
|
+
}
|
|
50
|
+
if (options.accessType) {
|
|
51
|
+
url.searchParams.set('access_type', options.accessType);
|
|
52
|
+
}
|
|
53
|
+
if (options.extraParams) {
|
|
54
|
+
for (const [k, v] of Object.entries(options.extraParams)) {
|
|
55
|
+
url.searchParams.set(k, v);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
url: url.toString(),
|
|
60
|
+
state,
|
|
61
|
+
codeVerifier: pkce.codeVerifier,
|
|
62
|
+
codeChallenge: pkce.codeChallenge,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Alias for generateAuthorizationUrl conforming to common naming conventions.
|
|
67
|
+
*/
|
|
68
|
+
authorizationUrl(options = {}) {
|
|
69
|
+
return this.generateAuthorizationUrl(options);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Exchanges an authorization code for access & refresh tokens.
|
|
73
|
+
*/
|
|
74
|
+
async exchangeCodeForToken(options) {
|
|
75
|
+
const tokenUrl = options.tokenUrl || this.options.tokenUrl;
|
|
76
|
+
if (!tokenUrl) {
|
|
77
|
+
throw new Error('tokenUrl is required to exchange code for token');
|
|
78
|
+
}
|
|
79
|
+
const clientId = options.clientId || this.options.clientId;
|
|
80
|
+
const clientSecret = options.clientSecret || this.options.clientSecret;
|
|
81
|
+
const redirectUri = options.redirectUri || this.options.redirectUri;
|
|
82
|
+
const bodyParams = new URLSearchParams({
|
|
83
|
+
grant_type: 'authorization_code',
|
|
84
|
+
code: options.code,
|
|
85
|
+
client_id: clientId,
|
|
86
|
+
});
|
|
87
|
+
if (redirectUri) {
|
|
88
|
+
bodyParams.set('redirect_uri', redirectUri);
|
|
89
|
+
}
|
|
90
|
+
if (clientSecret) {
|
|
91
|
+
bodyParams.set('client_secret', clientSecret);
|
|
92
|
+
}
|
|
93
|
+
if (options.codeVerifier) {
|
|
94
|
+
bodyParams.set('code_verifier', options.codeVerifier);
|
|
95
|
+
}
|
|
96
|
+
const response = await fetch(tokenUrl, {
|
|
97
|
+
method: 'POST',
|
|
98
|
+
headers: {
|
|
99
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
100
|
+
accept: 'application/json',
|
|
101
|
+
},
|
|
102
|
+
body: bodyParams.toString(),
|
|
103
|
+
});
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
const errorText = await response.text();
|
|
106
|
+
throw new Error(`OAuth token exchange failed (${response.status}): ${errorText}`);
|
|
107
|
+
}
|
|
108
|
+
const data = (await response.json());
|
|
109
|
+
const expiresIn = typeof data.expires_in === 'number' ? data.expires_in : undefined;
|
|
110
|
+
const expiresAt = expiresIn ? new Date(Date.now() + expiresIn * 1000) : undefined;
|
|
111
|
+
return {
|
|
112
|
+
accessToken: data.access_token,
|
|
113
|
+
refreshToken: data.refresh_token,
|
|
114
|
+
idToken: data.id_token,
|
|
115
|
+
tokenType: data.token_type || 'Bearer',
|
|
116
|
+
expiresIn,
|
|
117
|
+
expiresAt,
|
|
118
|
+
scope: data.scope,
|
|
119
|
+
raw: data,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Fetches user info profile from userInfoUrl using bearer accessToken.
|
|
124
|
+
*/
|
|
125
|
+
async fetchUserInfo(accessToken, userInfoUrl) {
|
|
126
|
+
const url = userInfoUrl || this.options.userInfoUrl;
|
|
127
|
+
if (!url) {
|
|
128
|
+
throw new Error('userInfoUrl is required to fetch user info');
|
|
129
|
+
}
|
|
130
|
+
const response = await fetch(url, {
|
|
131
|
+
headers: {
|
|
132
|
+
authorization: `Bearer ${accessToken}`,
|
|
133
|
+
accept: 'application/json',
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
if (!response.ok) {
|
|
137
|
+
const errorText = await response.text();
|
|
138
|
+
throw new Error(`OAuth fetchUserInfo failed (${response.status}): ${errorText}`);
|
|
139
|
+
}
|
|
140
|
+
return (await response.json());
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.OAuth2Client = OAuth2Client;
|
|
144
|
+
/**
|
|
145
|
+
* Creates an OAuth2 client instance.
|
|
146
|
+
*/
|
|
147
|
+
function createOAuth2Client(options) {
|
|
148
|
+
return new OAuth2Client(options);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/oauth2/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/oauth2/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./client.js"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oauth2/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface CreateApiKeyOptions {
|
|
2
|
+
prefix?: string;
|
|
3
|
+
bytes?: number;
|
|
4
|
+
name?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface GeneratedApiKey {
|
|
7
|
+
key: string;
|
|
8
|
+
hash: string;
|
|
9
|
+
preview: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a cryptographically secure API key formatted in the style of Stripe / Laravel Sanctum.
|
|
14
|
+
* The plaintext key must be presented to the user immediately; only the SHA-256 hash is saved in storage.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createApiKey(options?: CreateApiKeyOptions): GeneratedApiKey;
|
|
17
|
+
/**
|
|
18
|
+
* Computes the SHA-256 hex digest of an API key for indexed database storage.
|
|
19
|
+
*/
|
|
20
|
+
export declare function hashApiKey(key: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Constant-time comparison verifying a provided API key against a stored SHA-256 hash.
|
|
23
|
+
* Protects against side-channel timing attacks.
|
|
24
|
+
*/
|
|
25
|
+
export declare function verifyApiKey(providedKey: string, storedHash: string): boolean;
|
|
26
|
+
//# sourceMappingURL=api-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../src/tokens/api-key.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,eAAe,CAiB/E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAc7E"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createApiKey = createApiKey;
|
|
37
|
+
exports.hashApiKey = hashApiKey;
|
|
38
|
+
exports.verifyApiKey = verifyApiKey;
|
|
39
|
+
const crypto = __importStar(require("node:crypto"));
|
|
40
|
+
/**
|
|
41
|
+
* Creates a cryptographically secure API key formatted in the style of Stripe / Laravel Sanctum.
|
|
42
|
+
* The plaintext key must be presented to the user immediately; only the SHA-256 hash is saved in storage.
|
|
43
|
+
*/
|
|
44
|
+
function createApiKey(options = {}) {
|
|
45
|
+
const prefix = options.prefix ?? 'argos_live_';
|
|
46
|
+
const bytes = options.bytes ?? 32;
|
|
47
|
+
const randomPart = crypto.randomBytes(bytes).toString('base64url');
|
|
48
|
+
const key = `${prefix}${randomPart}`;
|
|
49
|
+
const hash = hashApiKey(key);
|
|
50
|
+
const suffix = randomPart.length > 4 ? randomPart.slice(-4) : randomPart;
|
|
51
|
+
const preview = `${prefix}...${suffix}`;
|
|
52
|
+
return {
|
|
53
|
+
key,
|
|
54
|
+
hash,
|
|
55
|
+
preview,
|
|
56
|
+
...(options.name ? { name: options.name } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Computes the SHA-256 hex digest of an API key for indexed database storage.
|
|
61
|
+
*/
|
|
62
|
+
function hashApiKey(key) {
|
|
63
|
+
if (!key || typeof key !== 'string') {
|
|
64
|
+
throw new Error('API key must be a valid non-empty string');
|
|
65
|
+
}
|
|
66
|
+
return crypto.createHash('sha256').update(key.trim(), 'utf-8').digest('hex');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Constant-time comparison verifying a provided API key against a stored SHA-256 hash.
|
|
70
|
+
* Protects against side-channel timing attacks.
|
|
71
|
+
*/
|
|
72
|
+
function verifyApiKey(providedKey, storedHash) {
|
|
73
|
+
if (!providedKey || !storedHash || typeof providedKey !== 'string' || typeof storedHash !== 'string') {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
const computedHash = hashApiKey(providedKey);
|
|
77
|
+
const computedBuffer = Buffer.from(computedHash, 'utf-8');
|
|
78
|
+
const storedBuffer = Buffer.from(storedHash.trim(), 'utf-8');
|
|
79
|
+
if (computedBuffer.length !== storedBuffer.length) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return crypto.timingSafeEqual(computedBuffer, storedBuffer);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=api-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../src/tokens/api-key.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,oCAiBC;AAKD,gCAKC;AAMD,oCAcC;AAlED,oDAAsC;AAetC;;;GAGG;AACH,SAAgB,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAElC,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACzE,MAAM,OAAO,GAAG,GAAG,MAAM,MAAM,MAAM,EAAE,CAAC;IAExC,OAAO;QACL,GAAG;QACH,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,WAAmB,EAAE,UAAkB;IAClE,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACrG,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAE7D,IAAI,cAAc,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./jwt"), exports);
|
|
18
|
+
__exportStar(require("./api-key"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,4CAA0B"}
|