@mcp-z/oauth 1.0.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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/dist/cjs/account-utils.d.cts +107 -0
  4. package/dist/cjs/account-utils.d.ts +107 -0
  5. package/dist/cjs/account-utils.js +481 -0
  6. package/dist/cjs/account-utils.js.map +1 -0
  7. package/dist/cjs/index.d.cts +19 -0
  8. package/dist/cjs/index.d.ts +19 -0
  9. package/dist/cjs/index.js +149 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/jwt-auth.d.cts +53 -0
  12. package/dist/cjs/jwt-auth.d.ts +53 -0
  13. package/dist/cjs/jwt-auth.js +417 -0
  14. package/dist/cjs/jwt-auth.js.map +1 -0
  15. package/dist/cjs/key-utils.d.cts +131 -0
  16. package/dist/cjs/key-utils.d.ts +131 -0
  17. package/dist/cjs/key-utils.js +421 -0
  18. package/dist/cjs/key-utils.js.map +1 -0
  19. package/dist/cjs/lib/account-server/index.d.cts +45 -0
  20. package/dist/cjs/lib/account-server/index.d.ts +45 -0
  21. package/dist/cjs/lib/account-server/index.js +67 -0
  22. package/dist/cjs/lib/account-server/index.js.map +1 -0
  23. package/dist/cjs/lib/account-server/loopback.d.cts +22 -0
  24. package/dist/cjs/lib/account-server/loopback.d.ts +22 -0
  25. package/dist/cjs/lib/account-server/loopback.js +778 -0
  26. package/dist/cjs/lib/account-server/loopback.js.map +1 -0
  27. package/dist/cjs/lib/account-server/me.d.cts +23 -0
  28. package/dist/cjs/lib/account-server/me.d.ts +23 -0
  29. package/dist/cjs/lib/account-server/me.js +412 -0
  30. package/dist/cjs/lib/account-server/me.js.map +1 -0
  31. package/dist/cjs/lib/account-server/shared-utils.d.cts +6 -0
  32. package/dist/cjs/lib/account-server/shared-utils.d.ts +6 -0
  33. package/dist/cjs/lib/account-server/shared-utils.js +235 -0
  34. package/dist/cjs/lib/account-server/shared-utils.js.map +1 -0
  35. package/dist/cjs/lib/account-server/stateless.d.cts +20 -0
  36. package/dist/cjs/lib/account-server/stateless.d.ts +20 -0
  37. package/dist/cjs/lib/account-server/stateless.js +32 -0
  38. package/dist/cjs/lib/account-server/stateless.js.map +1 -0
  39. package/dist/cjs/lib/account-server/types.d.cts +32 -0
  40. package/dist/cjs/lib/account-server/types.d.ts +32 -0
  41. package/dist/cjs/lib/account-server/types.js +7 -0
  42. package/dist/cjs/lib/account-server/types.js.map +1 -0
  43. package/dist/cjs/lib/dcr-types.d.cts +126 -0
  44. package/dist/cjs/lib/dcr-types.d.ts +126 -0
  45. package/dist/cjs/lib/dcr-types.js +12 -0
  46. package/dist/cjs/lib/dcr-types.js.map +1 -0
  47. package/dist/cjs/lib/rfc-metadata-types.d.cts +46 -0
  48. package/dist/cjs/lib/rfc-metadata-types.d.ts +46 -0
  49. package/dist/cjs/lib/rfc-metadata-types.js +8 -0
  50. package/dist/cjs/lib/rfc-metadata-types.js.map +1 -0
  51. package/dist/cjs/package.json +1 -0
  52. package/dist/cjs/pkce.d.cts +36 -0
  53. package/dist/cjs/pkce.d.ts +36 -0
  54. package/dist/cjs/pkce.js +25 -0
  55. package/dist/cjs/pkce.js.map +1 -0
  56. package/dist/cjs/sanitizer.d.cts +37 -0
  57. package/dist/cjs/sanitizer.d.ts +37 -0
  58. package/dist/cjs/sanitizer.js +407 -0
  59. package/dist/cjs/sanitizer.js.map +1 -0
  60. package/dist/cjs/schemas/index.d.cts +36 -0
  61. package/dist/cjs/schemas/index.d.ts +36 -0
  62. package/dist/cjs/schemas/index.js +28 -0
  63. package/dist/cjs/schemas/index.js.map +1 -0
  64. package/dist/cjs/session-auth.d.cts +79 -0
  65. package/dist/cjs/session-auth.d.ts +79 -0
  66. package/dist/cjs/session-auth.js +354 -0
  67. package/dist/cjs/session-auth.js.map +1 -0
  68. package/dist/cjs/templates.d.cts +18 -0
  69. package/dist/cjs/templates.d.ts +18 -0
  70. package/dist/cjs/templates.js +38 -0
  71. package/dist/cjs/templates.js.map +1 -0
  72. package/dist/cjs/types.d.cts +343 -0
  73. package/dist/cjs/types.d.ts +343 -0
  74. package/dist/cjs/types.js +210 -0
  75. package/dist/cjs/types.js.map +1 -0
  76. package/dist/esm/account-utils.d.ts +107 -0
  77. package/dist/esm/account-utils.js +179 -0
  78. package/dist/esm/account-utils.js.map +1 -0
  79. package/dist/esm/index.d.ts +19 -0
  80. package/dist/esm/index.js +23 -0
  81. package/dist/esm/index.js.map +1 -0
  82. package/dist/esm/jwt-auth.d.ts +53 -0
  83. package/dist/esm/jwt-auth.js +164 -0
  84. package/dist/esm/jwt-auth.js.map +1 -0
  85. package/dist/esm/key-utils.d.ts +131 -0
  86. package/dist/esm/key-utils.js +143 -0
  87. package/dist/esm/key-utils.js.map +1 -0
  88. package/dist/esm/lib/account-server/index.d.ts +45 -0
  89. package/dist/esm/lib/account-server/index.js +41 -0
  90. package/dist/esm/lib/account-server/index.js.map +1 -0
  91. package/dist/esm/lib/account-server/loopback.d.ts +22 -0
  92. package/dist/esm/lib/account-server/loopback.js +372 -0
  93. package/dist/esm/lib/account-server/loopback.js.map +1 -0
  94. package/dist/esm/lib/account-server/me.d.ts +23 -0
  95. package/dist/esm/lib/account-server/me.js +170 -0
  96. package/dist/esm/lib/account-server/me.js.map +1 -0
  97. package/dist/esm/lib/account-server/shared-utils.d.ts +6 -0
  98. package/dist/esm/lib/account-server/shared-utils.js +24 -0
  99. package/dist/esm/lib/account-server/shared-utils.js.map +1 -0
  100. package/dist/esm/lib/account-server/stateless.d.ts +20 -0
  101. package/dist/esm/lib/account-server/stateless.js +25 -0
  102. package/dist/esm/lib/account-server/stateless.js.map +1 -0
  103. package/dist/esm/lib/account-server/types.d.ts +32 -0
  104. package/dist/esm/lib/account-server/types.js +6 -0
  105. package/dist/esm/lib/account-server/types.js.map +1 -0
  106. package/dist/esm/lib/dcr-types.d.ts +126 -0
  107. package/dist/esm/lib/dcr-types.js +13 -0
  108. package/dist/esm/lib/dcr-types.js.map +1 -0
  109. package/dist/esm/lib/rfc-metadata-types.d.ts +46 -0
  110. package/dist/esm/lib/rfc-metadata-types.js +7 -0
  111. package/dist/esm/lib/rfc-metadata-types.js.map +1 -0
  112. package/dist/esm/package.json +1 -0
  113. package/dist/esm/pkce.d.ts +36 -0
  114. package/dist/esm/pkce.js +33 -0
  115. package/dist/esm/pkce.js.map +1 -0
  116. package/dist/esm/sanitizer.d.ts +37 -0
  117. package/dist/esm/sanitizer.js +256 -0
  118. package/dist/esm/sanitizer.js.map +1 -0
  119. package/dist/esm/schemas/index.d.ts +36 -0
  120. package/dist/esm/schemas/index.js +19 -0
  121. package/dist/esm/schemas/index.js.map +1 -0
  122. package/dist/esm/session-auth.d.ts +79 -0
  123. package/dist/esm/session-auth.js +141 -0
  124. package/dist/esm/session-auth.js.map +1 -0
  125. package/dist/esm/templates.d.ts +18 -0
  126. package/dist/esm/templates.js +132 -0
  127. package/dist/esm/templates.js.map +1 -0
  128. package/dist/esm/types.d.ts +343 -0
  129. package/dist/esm/types.js +34 -0
  130. package/dist/esm/types.js.map +1 -0
  131. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/oauth/oauth/src/lib/dcr-types.ts"],"sourcesContent":["/**\n * Dynamic Client Registration (DCR) types per RFC 7591\n *\n * Defines core types for OAuth 2.0 Dynamic Client Registration Protocol.\n * Used by providers to register clients dynamically with authorization servers.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7591\n */\n\nimport type { Logger } from '../types.ts';\n\n/**\n * Client metadata for dynamic registration request (RFC 7591 Section 2)\n *\n * All fields are optional per RFC 7591. Authorization server may have\n * required fields or default values based on policy.\n */\nexport interface DcrClientMetadata {\n /** Array of redirection URI strings for redirect-based flows */\n redirect_uris?: string[];\n\n /** Client authentication method for token endpoint */\n token_endpoint_auth_method?: 'none' | 'client_secret_post' | 'client_secret_basic';\n\n /** OAuth 2.0 grant types the client may use */\n grant_types?: string[];\n\n /** OAuth 2.0 response types the client may use */\n response_types?: string[];\n\n /** Human-readable client name */\n client_name?: string;\n\n /** URL providing information about the client */\n client_uri?: string;\n\n /** URL referencing a logo for the client */\n logo_uri?: string;\n\n /** Space-separated list of scope values */\n scope?: string;\n\n /** Array of contact strings (typically email addresses) */\n contacts?: string[];\n\n /** URL pointing to terms of service document */\n tos_uri?: string;\n\n /** URL pointing to privacy policy document */\n policy_uri?: string;\n\n /** URL referencing the client's JSON Web Key Set */\n jwks_uri?: string;\n\n /** Client's JSON Web Key Set document value */\n jwks?: object;\n\n /** Unique identifier for the client software */\n software_id?: string;\n\n /** Version identifier for the client software */\n software_version?: string;\n\n /** JWT containing client metadata claims (signed software statement) */\n software_statement?: string;\n}\n\n/**\n * Client information response from successful registration (RFC 7591 Section 3.2.1)\n *\n * Authorization server returns client credentials and echoes/modifies metadata.\n * client_id is always returned, client_secret is optional for public clients.\n */\nexport interface DcrClientInformation {\n /** REQUIRED: OAuth 2.0 client identifier string */\n client_id: string;\n\n /** OPTIONAL: OAuth 2.0 client secret (omitted for public clients) */\n client_secret?: string;\n\n /** OPTIONAL: Timestamp of client ID issuance (seconds since Unix epoch) */\n client_id_issued_at?: number;\n\n /**\n * REQUIRED if client_secret issued: Expiration timestamp (seconds since epoch)\n * Value of 0 indicates the secret does not expire\n */\n client_secret_expires_at?: number;\n\n // All registered metadata fields (echoed or server-modified)\n redirect_uris?: string[];\n token_endpoint_auth_method?: string;\n grant_types?: string[];\n response_types?: string[];\n client_name?: string;\n client_uri?: string;\n logo_uri?: string;\n scope?: string;\n contacts?: string[];\n tos_uri?: string;\n policy_uri?: string;\n jwks_uri?: string;\n jwks?: object;\n software_id?: string;\n software_version?: string;\n}\n\n/**\n * Provider tokens for stateless DCR pattern\n *\n * In stateless mode, DCR provider receives provider credentials from context\n * rather than managing token storage. Used for MCP server deployments where\n * client manages all tokens.\n */\nexport interface ProviderTokens {\n /** OAuth 2.0 access token for provider API calls */\n accessToken: string;\n\n /** Optional refresh token for token renewal */\n refreshToken?: string;\n\n /** Token expiration timestamp (seconds since Unix epoch) */\n expiresAt?: number;\n\n /** Space-separated list of granted scopes */\n scope?: string;\n}\n\n/**\n * Configuration for DCR provider initialization\n *\n * Minimal config for creating DCR provider instances. Additional provider-specific\n * config (client IDs, secrets, redirect URIs) handled by concrete implementations.\n */\nexport interface DcrConfig {\n /** Authorization server's registration endpoint URL */\n registrationEndpoint: string;\n\n /** Client metadata to register with authorization server */\n metadata: DcrClientMetadata;\n\n /** Optional logger for DCR operations */\n logger?: Logger;\n}\n\n/**\n * DCR error response per RFC 7591 Section 3.2.2\n *\n * Authorization server returns HTTP 400 with error details when\n * registration fails due to invalid metadata or policy violations.\n */\nexport interface DcrErrorResponse {\n /** REQUIRED: Single ASCII error code string */\n error: 'invalid_redirect_uri' | 'invalid_client_metadata' | 'invalid_software_statement' | 'unapproved_software_statement' | string;\n\n /** OPTIONAL: Human-readable ASCII description */\n error_description?: string;\n}\n"],"names":[],"mappings":"AAAA;;;;;;;CAOC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * RFC 8414 Authorization Server Metadata
3
+ * @see https://www.rfc-editor.org/rfc/rfc8414.html
4
+ */
5
+ export interface RFC8414Metadata {
6
+ /** Authorization server issuer URL */
7
+ issuer: string;
8
+ /** OAuth 2.0 authorization endpoint */
9
+ authorization_endpoint: string;
10
+ /** OAuth 2.0 token endpoint */
11
+ token_endpoint: string;
12
+ /** Dynamic Client Registration endpoint (RFC 7591) */
13
+ registration_endpoint: string;
14
+ /** Optional: Token revocation endpoint */
15
+ revocation_endpoint?: string;
16
+ /** Optional: Supported OAuth scopes */
17
+ scopes_supported?: string[];
18
+ /** Optional: Supported response types */
19
+ response_types_supported?: string[];
20
+ /** Optional: Supported grant types */
21
+ grant_types_supported?: string[];
22
+ /** Optional: Supported token endpoint auth methods */
23
+ token_endpoint_auth_methods_supported?: string[];
24
+ /** Optional: Supported PKCE code challenge methods (RFC 7636) */
25
+ code_challenge_methods_supported?: string[];
26
+ /** Optional: Service documentation URL */
27
+ service_documentation?: string;
28
+ /** Allow additional provider-specific fields */
29
+ [key: string]: unknown;
30
+ }
31
+ /**
32
+ * RFC 9728 Protected Resource Metadata
33
+ * @see https://www.rfc-editor.org/rfc/rfc9728.html
34
+ */
35
+ export interface RFC9728Metadata {
36
+ /** Protected resource URL */
37
+ resource: string;
38
+ /** List of authorization servers that can issue tokens for this resource */
39
+ authorization_servers: string[];
40
+ /** OAuth scopes supported by this resource */
41
+ scopes_supported: string[];
42
+ /** Methods for providing bearer tokens (typically ['header']) */
43
+ bearer_methods_supported: string[];
44
+ /** Allow additional provider-specific fields */
45
+ [key: string]: unknown;
46
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * RFC 8414 Authorization Server Metadata
3
+ * @see https://www.rfc-editor.org/rfc/rfc8414.html
4
+ */
5
+ export interface RFC8414Metadata {
6
+ /** Authorization server issuer URL */
7
+ issuer: string;
8
+ /** OAuth 2.0 authorization endpoint */
9
+ authorization_endpoint: string;
10
+ /** OAuth 2.0 token endpoint */
11
+ token_endpoint: string;
12
+ /** Dynamic Client Registration endpoint (RFC 7591) */
13
+ registration_endpoint: string;
14
+ /** Optional: Token revocation endpoint */
15
+ revocation_endpoint?: string;
16
+ /** Optional: Supported OAuth scopes */
17
+ scopes_supported?: string[];
18
+ /** Optional: Supported response types */
19
+ response_types_supported?: string[];
20
+ /** Optional: Supported grant types */
21
+ grant_types_supported?: string[];
22
+ /** Optional: Supported token endpoint auth methods */
23
+ token_endpoint_auth_methods_supported?: string[];
24
+ /** Optional: Supported PKCE code challenge methods (RFC 7636) */
25
+ code_challenge_methods_supported?: string[];
26
+ /** Optional: Service documentation URL */
27
+ service_documentation?: string;
28
+ /** Allow additional provider-specific fields */
29
+ [key: string]: unknown;
30
+ }
31
+ /**
32
+ * RFC 9728 Protected Resource Metadata
33
+ * @see https://www.rfc-editor.org/rfc/rfc9728.html
34
+ */
35
+ export interface RFC9728Metadata {
36
+ /** Protected resource URL */
37
+ resource: string;
38
+ /** List of authorization servers that can issue tokens for this resource */
39
+ authorization_servers: string[];
40
+ /** OAuth scopes supported by this resource */
41
+ scopes_supported: string[];
42
+ /** Methods for providing bearer tokens (typically ['header']) */
43
+ bearer_methods_supported: string[];
44
+ /** Allow additional provider-specific fields */
45
+ [key: string]: unknown;
46
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * RFC 8414 Authorization Server Metadata
3
+ * @see https://www.rfc-editor.org/rfc/rfc8414.html
4
+ */ "use strict";
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/oauth/oauth/src/lib/rfc-metadata-types.ts"],"sourcesContent":["/**\n * RFC 8414 Authorization Server Metadata\n * @see https://www.rfc-editor.org/rfc/rfc8414.html\n */\nexport interface RFC8414Metadata {\n /** Authorization server issuer URL */\n issuer: string;\n /** OAuth 2.0 authorization endpoint */\n authorization_endpoint: string;\n /** OAuth 2.0 token endpoint */\n token_endpoint: string;\n /** Dynamic Client Registration endpoint (RFC 7591) */\n registration_endpoint: string;\n /** Optional: Token revocation endpoint */\n revocation_endpoint?: string;\n /** Optional: Supported OAuth scopes */\n scopes_supported?: string[];\n /** Optional: Supported response types */\n response_types_supported?: string[];\n /** Optional: Supported grant types */\n grant_types_supported?: string[];\n /** Optional: Supported token endpoint auth methods */\n token_endpoint_auth_methods_supported?: string[];\n /** Optional: Supported PKCE code challenge methods (RFC 7636) */\n code_challenge_methods_supported?: string[];\n /** Optional: Service documentation URL */\n service_documentation?: string;\n /** Allow additional provider-specific fields */\n [key: string]: unknown;\n}\n\n/**\n * RFC 9728 Protected Resource Metadata\n * @see https://www.rfc-editor.org/rfc/rfc9728.html\n */\nexport interface RFC9728Metadata {\n /** Protected resource URL */\n resource: string;\n /** List of authorization servers that can issue tokens for this resource */\n authorization_servers: string[];\n /** OAuth scopes supported by this resource */\n scopes_supported: string[];\n /** Methods for providing bearer tokens (typically ['header']) */\n bearer_methods_supported: string[];\n /** Allow additional provider-specific fields */\n [key: string]: unknown;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC"}
@@ -0,0 +1 @@
1
+ { "type": "commonjs" }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0
3
+ *
4
+ * Implements RFC 7636 PKCE extension for public OAuth clients.
5
+ * Generates cryptographically secure code verifier and challenge.
6
+ */
7
+ /**
8
+ * PKCE code verifier and challenge pair
9
+ */
10
+ export interface PKCEPair {
11
+ /** Code verifier - random string sent to token endpoint */
12
+ verifier: string;
13
+ /** Code challenge - SHA256 hash of verifier sent to authorization endpoint */
14
+ challenge: string;
15
+ }
16
+ /**
17
+ * Generate PKCE code verifier and challenge pair
18
+ *
19
+ * Uses SHA-256 hashing (S256 method) as recommended by RFC 7636.
20
+ * Code verifier is 32 random bytes base64url-encoded (43 characters).
21
+ *
22
+ * @returns PKCE pair with verifier and challenge
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const { verifier, challenge } = generatePKCE();
27
+ *
28
+ * // Use challenge in authorization URL
29
+ * authUrl.searchParams.set('code_challenge', challenge);
30
+ * authUrl.searchParams.set('code_challenge_method', 'S256');
31
+ *
32
+ * // Later, use verifier in token exchange
33
+ * tokenParams.code_verifier = verifier;
34
+ * ```
35
+ */
36
+ export declare function generatePKCE(): PKCEPair;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0
3
+ *
4
+ * Implements RFC 7636 PKCE extension for public OAuth clients.
5
+ * Generates cryptographically secure code verifier and challenge.
6
+ */
7
+ /**
8
+ * PKCE code verifier and challenge pair
9
+ */
10
+ export interface PKCEPair {
11
+ /** Code verifier - random string sent to token endpoint */
12
+ verifier: string;
13
+ /** Code challenge - SHA256 hash of verifier sent to authorization endpoint */
14
+ challenge: string;
15
+ }
16
+ /**
17
+ * Generate PKCE code verifier and challenge pair
18
+ *
19
+ * Uses SHA-256 hashing (S256 method) as recommended by RFC 7636.
20
+ * Code verifier is 32 random bytes base64url-encoded (43 characters).
21
+ *
22
+ * @returns PKCE pair with verifier and challenge
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const { verifier, challenge } = generatePKCE();
27
+ *
28
+ * // Use challenge in authorization URL
29
+ * authUrl.searchParams.set('code_challenge', challenge);
30
+ * authUrl.searchParams.set('code_challenge_method', 'S256');
31
+ *
32
+ * // Later, use verifier in token exchange
33
+ * tokenParams.code_verifier = verifier;
34
+ * ```
35
+ */
36
+ export declare function generatePKCE(): PKCEPair;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0
3
+ *
4
+ * Implements RFC 7636 PKCE extension for public OAuth clients.
5
+ * Generates cryptographically secure code verifier and challenge.
6
+ */ "use strict";
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ Object.defineProperty(exports, "generatePKCE", {
11
+ enumerable: true,
12
+ get: function() {
13
+ return generatePKCE;
14
+ }
15
+ });
16
+ var _crypto = require("crypto");
17
+ function generatePKCE() {
18
+ var verifier = (0, _crypto.randomBytes)(32).toString('base64url');
19
+ var challenge = (0, _crypto.createHash)('sha256').update(verifier).digest('base64url');
20
+ return {
21
+ verifier: verifier,
22
+ challenge: challenge
23
+ };
24
+ }
25
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/oauth/oauth/src/pkce.ts"],"sourcesContent":["/**\n * PKCE (Proof Key for Code Exchange) utilities for OAuth 2.0\n *\n * Implements RFC 7636 PKCE extension for public OAuth clients.\n * Generates cryptographically secure code verifier and challenge.\n */\n\nimport { createHash, randomBytes } from 'crypto';\n\n/**\n * PKCE code verifier and challenge pair\n */\nexport interface PKCEPair {\n /** Code verifier - random string sent to token endpoint */\n verifier: string;\n /** Code challenge - SHA256 hash of verifier sent to authorization endpoint */\n challenge: string;\n}\n\n/**\n * Generate PKCE code verifier and challenge pair\n *\n * Uses SHA-256 hashing (S256 method) as recommended by RFC 7636.\n * Code verifier is 32 random bytes base64url-encoded (43 characters).\n *\n * @returns PKCE pair with verifier and challenge\n *\n * @example\n * ```typescript\n * const { verifier, challenge } = generatePKCE();\n *\n * // Use challenge in authorization URL\n * authUrl.searchParams.set('code_challenge', challenge);\n * authUrl.searchParams.set('code_challenge_method', 'S256');\n *\n * // Later, use verifier in token exchange\n * tokenParams.code_verifier = verifier;\n * ```\n */\nexport function generatePKCE(): PKCEPair {\n const verifier = randomBytes(32).toString('base64url');\n const challenge = createHash('sha256').update(verifier).digest('base64url');\n\n return {\n verifier,\n challenge,\n };\n}\n"],"names":["generatePKCE","verifier","randomBytes","toString","challenge","createHash","update","digest"],"mappings":"AAAA;;;;;CAKC;;;;+BAkCeA;;;eAAAA;;;sBAhCwB;AAgCjC,SAASA;IACd,IAAMC,WAAWC,IAAAA,mBAAW,EAAC,IAAIC,QAAQ,CAAC;IAC1C,IAAMC,YAAYC,IAAAA,kBAAU,EAAC,UAAUC,MAAM,CAACL,UAAUM,MAAM,CAAC;IAE/D,OAAO;QACLN,UAAAA;QACAG,WAAAA;IACF;AACF"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Data sanitization utilities for secure logging.
3
+ * Redacts sensitive OAuth tokens, API keys, and credentials from log output.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * sanitizeData({ accountId: 'test@example.com', access_token: 'secret_token_value' })
8
+ * // { accountId: 'test@example.com', access_token: 'secr****alue' }
9
+ *
10
+ * sanitizeForLogging('Processing token', { token: 'secret_value' })
11
+ * // { message: 'Processing token', meta: { token: 'secr****alue' } }
12
+ * ```
13
+ */
14
+ export declare function sanitizeData(data: unknown): unknown;
15
+ /**
16
+ * Prevent log injection attacks by escaping control characters
17
+ * SECURITY: Critical for preventing CRLF injection (OWASP A03)
18
+ */
19
+ export declare function sanitizeLogMessage(message: string, maxLength?: number): string;
20
+ /**
21
+ * Sanitize log message and metadata for safe logging
22
+ * Applies both CRLF protection and sensitive data redaction
23
+ *
24
+ * @param message - The log message to sanitize
25
+ * @param meta - Optional metadata object to sanitize
26
+ * @param enableDataSanitization - Whether to apply sensitive data redaction (default: true)
27
+ * @returns Sanitized message and metadata ready for logging
28
+ */
29
+ export declare function sanitizeForLogging(message: string, meta?: Record<string, unknown>, enableDataSanitization?: boolean): {
30
+ message: string;
31
+ meta: Record<string, unknown>;
32
+ };
33
+ export declare function sanitizeForLoggingFormatter(): {
34
+ log: (obj: any) => {
35
+ msg: string;
36
+ };
37
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Data sanitization utilities for secure logging.
3
+ * Redacts sensitive OAuth tokens, API keys, and credentials from log output.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * sanitizeData({ accountId: 'test@example.com', access_token: 'secret_token_value' })
8
+ * // { accountId: 'test@example.com', access_token: 'secr****alue' }
9
+ *
10
+ * sanitizeForLogging('Processing token', { token: 'secret_value' })
11
+ * // { message: 'Processing token', meta: { token: 'secr****alue' } }
12
+ * ```
13
+ */
14
+ export declare function sanitizeData(data: unknown): unknown;
15
+ /**
16
+ * Prevent log injection attacks by escaping control characters
17
+ * SECURITY: Critical for preventing CRLF injection (OWASP A03)
18
+ */
19
+ export declare function sanitizeLogMessage(message: string, maxLength?: number): string;
20
+ /**
21
+ * Sanitize log message and metadata for safe logging
22
+ * Applies both CRLF protection and sensitive data redaction
23
+ *
24
+ * @param message - The log message to sanitize
25
+ * @param meta - Optional metadata object to sanitize
26
+ * @param enableDataSanitization - Whether to apply sensitive data redaction (default: true)
27
+ * @returns Sanitized message and metadata ready for logging
28
+ */
29
+ export declare function sanitizeForLogging(message: string, meta?: Record<string, unknown>, enableDataSanitization?: boolean): {
30
+ message: string;
31
+ meta: Record<string, unknown>;
32
+ };
33
+ export declare function sanitizeForLoggingFormatter(): {
34
+ log: (obj: any) => {
35
+ msg: string;
36
+ };
37
+ };