@doist/outline-cli 1.5.3 → 1.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 (57) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/commands/auth.d.ts +12 -0
  3. package/dist/commands/auth.js +110 -158
  4. package/dist/commands/auth.js.map +1 -1
  5. package/dist/commands/changelog.d.ts +1 -6
  6. package/dist/commands/changelog.js +8 -88
  7. package/dist/commands/changelog.js.map +1 -1
  8. package/dist/index.js +9 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/api.d.ts +5 -1
  11. package/dist/lib/api.js +9 -6
  12. package/dist/lib/api.js.map +1 -1
  13. package/dist/lib/auth-constants.d.ts +18 -0
  14. package/dist/lib/auth-constants.js +25 -0
  15. package/dist/lib/auth-constants.js.map +1 -0
  16. package/dist/lib/auth-pages.d.ts +2 -0
  17. package/dist/lib/auth-pages.js +101 -0
  18. package/dist/lib/auth-pages.js.map +1 -0
  19. package/dist/lib/auth-provider.d.ts +59 -0
  20. package/dist/lib/auth-provider.js +299 -0
  21. package/dist/lib/auth-provider.js.map +1 -0
  22. package/dist/lib/auth.d.ts +24 -7
  23. package/dist/lib/auth.js +53 -36
  24. package/dist/lib/auth.js.map +1 -1
  25. package/dist/lib/config.d.ts +23 -0
  26. package/dist/lib/config.js.map +1 -1
  27. package/dist/lib/errors.d.ts +3 -1
  28. package/dist/lib/errors.js +1 -0
  29. package/dist/lib/errors.js.map +1 -1
  30. package/dist/lib/global-args.d.ts +1 -0
  31. package/dist/lib/global-args.js +4 -0
  32. package/dist/lib/global-args.js.map +1 -1
  33. package/dist/lib/migrate-auth.d.ts +11 -0
  34. package/dist/lib/migrate-auth.js +92 -0
  35. package/dist/lib/migrate-auth.js.map +1 -0
  36. package/dist/lib/outline-account.d.ts +26 -0
  37. package/dist/lib/outline-account.js +12 -0
  38. package/dist/lib/outline-account.js.map +1 -0
  39. package/dist/lib/output.d.ts +6 -0
  40. package/dist/lib/output.js +16 -4
  41. package/dist/lib/output.js.map +1 -1
  42. package/dist/lib/skills/content.d.ts +1 -1
  43. package/dist/lib/skills/content.js +10 -3
  44. package/dist/lib/skills/content.js.map +1 -1
  45. package/dist/lib/user-records.d.ts +14 -0
  46. package/dist/lib/user-records.js +89 -0
  47. package/dist/lib/user-records.js.map +1 -0
  48. package/package.json +2 -2
  49. package/dist/lib/oauth-server.d.ts +0 -14
  50. package/dist/lib/oauth-server.js +0 -203
  51. package/dist/lib/oauth-server.js.map +0 -1
  52. package/dist/lib/oauth.d.ts +0 -17
  53. package/dist/lib/oauth.js +0 -42
  54. package/dist/lib/oauth.js.map +0 -1
  55. package/dist/lib/pkce.d.ts +0 -3
  56. package/dist/lib/pkce.js +0 -16
  57. package/dist/lib/pkce.js.map +0 -1
@@ -1,203 +0,0 @@
1
- import http from 'node:http';
2
- export const DEFAULT_OAUTH_CALLBACK_PORT = 54969;
3
- function escapeHtml(text) {
4
- return text
5
- .replaceAll('&', '&')
6
- .replaceAll('<', '&lt;')
7
- .replaceAll('>', '&gt;')
8
- .replaceAll('"', '&quot;')
9
- .replaceAll("'", '&#39;');
10
- }
11
- function renderPage(title, subtitle, body) {
12
- return `<!doctype html>
13
- <html lang="en">
14
- <head>
15
- <meta charset="utf-8">
16
- <meta name="viewport" content="width=device-width, initial-scale=1">
17
- <title>${escapeHtml(title)} - Outline CLI</title>
18
- <style>
19
- :root {
20
- --bg: #f5f7fb;
21
- --surface: #ffffff;
22
- --border: #e6e9f0;
23
- --text: #1e2430;
24
- --muted: #586178;
25
- --ok: #15803d;
26
- --ok-soft: #dcfce7;
27
- --err: #b91c1c;
28
- --err-soft: #fee2e2;
29
- --radius: 14px;
30
- }
31
- * { box-sizing: border-box; }
32
- body {
33
- margin: 0;
34
- min-height: 100vh;
35
- display: grid;
36
- place-items: center;
37
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
38
- background: radial-gradient(1200px 500px at 50% -10%, #dbeafe 0%, var(--bg) 60%);
39
- color: var(--text);
40
- line-height: 1.5;
41
- padding: 20px;
42
- }
43
- .card {
44
- width: min(560px, 100%);
45
- background: var(--surface);
46
- border: 1px solid var(--border);
47
- border-radius: var(--radius);
48
- padding: 24px;
49
- box-shadow: 0 16px 40px rgba(15, 23, 42, 0.08);
50
- }
51
- h1 {
52
- margin: 0 0 8px;
53
- font-size: 24px;
54
- letter-spacing: -0.01em;
55
- }
56
- .subtitle {
57
- margin: 0 0 16px;
58
- color: var(--muted);
59
- font-size: 15px;
60
- }
61
- .message {
62
- border-radius: 12px;
63
- padding: 14px 16px;
64
- font-size: 14px;
65
- }
66
- .success {
67
- background: var(--ok-soft);
68
- color: #14532d;
69
- }
70
- .error {
71
- background: var(--err-soft);
72
- color: #7f1d1d;
73
- }
74
- .hint {
75
- margin-top: 14px;
76
- color: var(--muted);
77
- font-size: 13px;
78
- }
79
- code {
80
- font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
81
- background: #eef2ff;
82
- border-radius: 6px;
83
- padding: 2px 6px;
84
- }
85
- </style>
86
- </head>
87
- <body>
88
- <main class="card">
89
- <h1>${escapeHtml(title)}</h1>
90
- <p class="subtitle">${escapeHtml(subtitle)}</p>
91
- ${body}
92
- <p class="hint">Return to your terminal and continue with <code>ol</code> commands.</p>
93
- </main>
94
- </body>
95
- </html>`;
96
- }
97
- function renderSuccessPage() {
98
- return renderPage('Login complete', 'Outline CLI is now authenticated.', '<div class="message success">You can close this tab now.</div>');
99
- }
100
- function renderErrorPage(message) {
101
- return renderPage('Authentication failed', 'Outline CLI could not finish OAuth login.', `<div class="message error">${escapeHtml(message)}</div>`);
102
- }
103
- export async function startOAuthCallbackServer(options) {
104
- const { state, timeoutMs = 3 * 60 * 1000, port = DEFAULT_OAUTH_CALLBACK_PORT } = options;
105
- let origin = 'http://localhost';
106
- let resolved = false;
107
- let resolveCode;
108
- let rejectCode;
109
- const waitForCode = new Promise((resolve, reject) => {
110
- resolveCode = resolve;
111
- rejectCode = reject;
112
- });
113
- const server = http.createServer((req, res) => {
114
- if (resolved) {
115
- res.writeHead(409, { 'Content-Type': 'text/html; charset=utf-8' });
116
- res.end(renderErrorPage('Authorization was already received.'));
117
- return;
118
- }
119
- if (req.method !== 'GET' || !req.url) {
120
- res.writeHead(405, { 'Content-Type': 'text/html; charset=utf-8' });
121
- res.end(renderErrorPage('Invalid callback request method.'));
122
- return;
123
- }
124
- const url = new URL(req.url, origin);
125
- if (url.pathname !== '/callback') {
126
- res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });
127
- res.end(renderErrorPage('Unknown callback path.'));
128
- return;
129
- }
130
- // Check for OAuth error response first
131
- const error = url.searchParams.get('error');
132
- if (error) {
133
- const errorDescription = url.searchParams.get('error_description') || error;
134
- res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
135
- res.end(renderErrorPage(`Authorization failed: ${errorDescription}`));
136
- rejectCode(new Error(`OAuth authorization denied: ${errorDescription}`));
137
- resolved = true;
138
- return;
139
- }
140
- const code = url.searchParams.get('code');
141
- const returnedState = url.searchParams.get('state');
142
- if (!code || !returnedState) {
143
- res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
144
- res.end(renderErrorPage('Missing OAuth code or state parameter.'));
145
- rejectCode(new Error('Missing OAuth authorization code.'));
146
- resolved = true;
147
- return;
148
- }
149
- if (returnedState !== state) {
150
- res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
151
- res.end(renderErrorPage('Invalid OAuth state parameter.'));
152
- rejectCode(new Error('OAuth state mismatch.'));
153
- resolved = true;
154
- return;
155
- }
156
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
157
- res.end(renderSuccessPage());
158
- resolved = true;
159
- resolveCode(code);
160
- });
161
- server.on('error', (err) => {
162
- if (resolved)
163
- return;
164
- resolved = true;
165
- rejectCode(err);
166
- });
167
- await new Promise((resolve, reject) => {
168
- const onListening = () => {
169
- server.off('error', onError);
170
- resolve();
171
- };
172
- const onError = (err) => {
173
- server.off('listening', onListening);
174
- reject(err);
175
- };
176
- server.once('listening', onListening);
177
- server.once('error', onError);
178
- server.listen(port, '127.0.0.1');
179
- });
180
- const { port: listeningPort } = server.address();
181
- origin = `http://localhost:${listeningPort}`;
182
- const redirectUri = `${origin}/callback`;
183
- const timeout = setTimeout(() => {
184
- if (resolved)
185
- return;
186
- resolved = true;
187
- rejectCode(new Error('Timed out waiting for OAuth callback.'));
188
- server.close();
189
- }, timeoutMs);
190
- const close = () => {
191
- clearTimeout(timeout);
192
- server.close();
193
- };
194
- waitForCode.then(() => {
195
- clearTimeout(timeout);
196
- server.close();
197
- }, () => {
198
- clearTimeout(timeout);
199
- server.close();
200
- });
201
- return { port: listeningPort, redirectUri, waitForCode, close };
202
- }
203
- //# sourceMappingURL=oauth-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/lib/oauth-server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAgB5B,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAA;AAEhD,SAAS,UAAU,CAAC,IAAY;IAC5B,OAAO,IAAI;SACN,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,QAAgB,EAAE,IAAY;IAC7D,OAAO;;;;;WAKA,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAwElB,UAAU,CAAC,KAAK,CAAC;0BACD,UAAU,CAAC,QAAQ,CAAC;MACxC,IAAI;;;;QAIF,CAAA;AACR,CAAC;AAED,SAAS,iBAAiB;IACtB,OAAO,UAAU,CACb,gBAAgB,EAChB,mCAAmC,EACnC,gEAAgE,CACnE,CAAA;AACL,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACpC,OAAO,UAAU,CACb,uBAAuB,EACvB,2CAA2C,EAC3C,8BAA8B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAC5D,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,OAA2B;IAE3B,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,GAAG,2BAA2B,EAAE,GAAG,OAAO,CAAA;IACxF,IAAI,MAAM,GAAG,kBAAkB,CAAA;IAC/B,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,WAAmC,CAAA;IACvC,IAAI,UAAkC,CAAA;IAEtC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxD,WAAW,GAAG,OAAO,CAAA;QACrB,UAAU,GAAG,MAAM,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACX,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAA;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,qCAAqC,CAAC,CAAC,CAAA;YAC/D,OAAM;QACV,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACnC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAA;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,kCAAkC,CAAC,CAAC,CAAA;YAC5D,OAAM;QACV,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACpC,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC/B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAA;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,CAAA;YAClD,OAAM;QACV,CAAC;QAED,uCAAuC;QACvC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,gBAAgB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAA;YAC3E,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAA;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,yBAAyB,gBAAgB,EAAE,CAAC,CAAC,CAAA;YACrE,UAAU,CAAC,IAAI,KAAK,CAAC,+BAA+B,gBAAgB,EAAE,CAAC,CAAC,CAAA;YACxE,QAAQ,GAAG,IAAI,CAAA;YACf,OAAM;QACV,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACzC,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAEnD,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAA;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,wCAAwC,CAAC,CAAC,CAAA;YAClE,UAAU,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAA;YAC1D,QAAQ,GAAG,IAAI,CAAA;YACf,OAAM;QACV,CAAC;QAED,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAA;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,gCAAgC,CAAC,CAAC,CAAA;YAC1D,UAAU,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAA;YAC9C,QAAQ,GAAG,IAAI,CAAA;YACf,OAAM;QACV,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAA;QAClE,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAA;QAC5B,QAAQ,GAAG,IAAI,CAAA;QACf,WAAW,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,IAAI,QAAQ;YAAE,OAAM;QACpB,QAAQ,GAAG,IAAI,CAAA;QACf,UAAU,CAAC,GAAY,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,GAAG,EAAE;YACrB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC5B,OAAO,EAAE,CAAA;QACb,CAAC,CAAA;QACD,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;YACpC,MAAM,CAAC,GAAG,CAAC,CAAA;QACf,CAAC,CAAA;QAED,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAA;IAC/D,MAAM,GAAG,oBAAoB,aAAa,EAAE,CAAA;IAC5C,MAAM,WAAW,GAAG,GAAG,MAAM,WAAW,CAAA;IAExC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,IAAI,QAAQ;YAAE,OAAM;QACpB,QAAQ,GAAG,IAAI,CAAA;QACf,UAAU,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAA;QAC9D,MAAM,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,EAAE,SAAS,CAAC,CAAA;IAEb,MAAM,KAAK,GAAG,GAAG,EAAE;QACf,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,MAAM,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,CAAA;IAED,WAAW,CAAC,IAAI,CACZ,GAAG,EAAE;QACD,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,MAAM,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,EACD,GAAG,EAAE;QACD,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,MAAM,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,CACJ,CAAA;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;AACnE,CAAC"}
@@ -1,17 +0,0 @@
1
- interface AuthorizationUrlOptions {
2
- baseUrl: string;
3
- clientId: string;
4
- redirectUri: string;
5
- codeChallenge: string;
6
- state: string;
7
- }
8
- interface TokenExchangeOptions {
9
- baseUrl: string;
10
- clientId: string;
11
- redirectUri: string;
12
- codeVerifier: string;
13
- code: string;
14
- }
15
- export declare function buildAuthorizationUrl(options: AuthorizationUrlOptions): string;
16
- export declare function exchangeCodeForToken(options: TokenExchangeOptions): Promise<string>;
17
- export {};
package/dist/lib/oauth.js DELETED
@@ -1,42 +0,0 @@
1
- import { fetchWithRetry } from '../transport/fetch-with-retry.js';
2
- export function buildAuthorizationUrl(options) {
3
- const { baseUrl, clientId, redirectUri, codeChallenge, state } = options;
4
- const url = new URL(`${baseUrl}/oauth/authorize`);
5
- url.searchParams.set('client_id', clientId);
6
- url.searchParams.set('response_type', 'code');
7
- url.searchParams.set('code_challenge', codeChallenge);
8
- url.searchParams.set('code_challenge_method', 'S256');
9
- url.searchParams.set('redirect_uri', redirectUri);
10
- url.searchParams.set('state', state);
11
- return url.toString();
12
- }
13
- export async function exchangeCodeForToken(options) {
14
- const { baseUrl, clientId, redirectUri, codeVerifier, code } = options;
15
- const params = new URLSearchParams({
16
- grant_type: 'authorization_code',
17
- client_id: clientId,
18
- redirect_uri: redirectUri,
19
- code_verifier: codeVerifier,
20
- code,
21
- });
22
- const res = await fetchWithRetry({
23
- url: `${baseUrl}/oauth/token`,
24
- options: {
25
- method: 'POST',
26
- headers: {
27
- 'Content-Type': 'application/x-www-form-urlencoded',
28
- },
29
- body: params.toString(),
30
- },
31
- });
32
- const json = (await res.json());
33
- if (!res.ok) {
34
- const message = json.error_description || json.message || json.error || res.statusText;
35
- throw new Error(`OAuth token exchange failed: ${message}`);
36
- }
37
- if (!json.access_token) {
38
- throw new Error('OAuth token exchange did not return an access token.');
39
- }
40
- return json.access_token;
41
- }
42
- //# sourceMappingURL=oauth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAyBjE,MAAM,UAAU,qBAAqB,CAAC,OAAgC;IAClE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IACxE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,kBAAkB,CAAC,CAAA;IACjD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IAC3C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IAC7C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;IACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;IACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IACjD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACpC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA6B;IACpE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACtE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QAC/B,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,WAAW;QACzB,aAAa,EAAE,YAAY;QAC3B,IAAI;KACP,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;QAC7B,GAAG,EAAE,GAAG,OAAO,cAAc;QAC7B,OAAO,EAAE;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,mCAAmC;aACtD;YACD,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;SAC1B;KACJ,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAA;IAChD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,CAAA;QACtF,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,IAAI,CAAC,YAAY,CAAA;AAC5B,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare function generateCodeVerifier(): string;
2
- export declare function generateCodeChallenge(codeVerifier: string): string;
3
- export declare function generateState(): string;
package/dist/lib/pkce.js DELETED
@@ -1,16 +0,0 @@
1
- import { createHash, randomBytes } from 'node:crypto';
2
- function base64UrlEncode(buffer) {
3
- return buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
4
- }
5
- export function generateCodeVerifier() {
6
- // 64 bytes => 86 chars, within 43-128 requirement.
7
- return base64UrlEncode(randomBytes(64));
8
- }
9
- export function generateCodeChallenge(codeVerifier) {
10
- const hash = createHash('sha256').update(codeVerifier).digest();
11
- return base64UrlEncode(hash);
12
- }
13
- export function generateState() {
14
- return base64UrlEncode(randomBytes(32));
15
- }
16
- //# sourceMappingURL=pkce.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAErD,SAAS,eAAe,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAC/F,CAAC;AAED,MAAM,UAAU,oBAAoB;IAChC,mDAAmD;IACnD,OAAO,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACtD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAA;IAC/D,OAAO,eAAe,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,OAAO,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3C,CAAC"}