@maronn-openid-connect/cli 0.7.0 → 0.8.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 (67) hide show
  1. package/README.md +83 -7
  2. package/dist/frameworks/hono/index.d.ts.map +1 -1
  3. package/dist/frameworks/hono/index.js +18 -9
  4. package/dist/frameworks/hono/index.js.map +1 -1
  5. package/dist/frameworks/hono/pages.d.ts +7 -6
  6. package/dist/frameworks/hono/pages.d.ts.map +1 -1
  7. package/dist/frameworks/hono/pages.js +62 -44
  8. package/dist/frameworks/hono/pages.js.map +1 -1
  9. package/dist/frameworks/hono/templates.d.ts +19 -6
  10. package/dist/frameworks/hono/templates.d.ts.map +1 -1
  11. package/dist/frameworks/hono/templates.js +439 -304
  12. package/dist/frameworks/hono/templates.js.map +1 -1
  13. package/dist/frameworks/hono/views.d.ts +3 -0
  14. package/dist/frameworks/hono/views.d.ts.map +1 -0
  15. package/dist/frameworks/hono/views.js +458 -0
  16. package/dist/frameworks/hono/views.js.map +1 -0
  17. package/dist/frameworks/nextjs/authorize.d.ts +3 -0
  18. package/dist/frameworks/nextjs/authorize.d.ts.map +1 -0
  19. package/dist/frameworks/nextjs/authorize.js +757 -0
  20. package/dist/frameworks/nextjs/authorize.js.map +1 -0
  21. package/dist/frameworks/nextjs/ciba.d.ts +8 -0
  22. package/dist/frameworks/nextjs/ciba.d.ts.map +1 -0
  23. package/dist/frameworks/nextjs/ciba.js +591 -0
  24. package/dist/frameworks/nextjs/ciba.js.map +1 -0
  25. package/dist/frameworks/nextjs/conformance.d.ts +3 -0
  26. package/dist/frameworks/nextjs/conformance.d.ts.map +1 -0
  27. package/dist/frameworks/nextjs/conformance.js +2447 -0
  28. package/dist/frameworks/nextjs/conformance.js.map +1 -0
  29. package/dist/frameworks/nextjs/device.d.ts +8 -0
  30. package/dist/frameworks/nextjs/device.d.ts.map +1 -0
  31. package/dist/frameworks/nextjs/device.js +662 -0
  32. package/dist/frameworks/nextjs/device.js.map +1 -0
  33. package/dist/frameworks/nextjs/endpoints.d.ts +7 -0
  34. package/dist/frameworks/nextjs/endpoints.d.ts.map +1 -0
  35. package/dist/frameworks/nextjs/endpoints.js +673 -0
  36. package/dist/frameworks/nextjs/endpoints.js.map +1 -0
  37. package/dist/frameworks/nextjs/index.d.ts.map +1 -1
  38. package/dist/frameworks/nextjs/index.js +135 -2
  39. package/dist/frameworks/nextjs/index.js.map +1 -1
  40. package/dist/frameworks/nextjs/interaction.d.ts +13 -0
  41. package/dist/frameworks/nextjs/interaction.d.ts.map +1 -0
  42. package/dist/frameworks/nextjs/interaction.js +864 -0
  43. package/dist/frameworks/nextjs/interaction.js.map +1 -0
  44. package/dist/frameworks/nextjs/logout.d.ts +5 -0
  45. package/dist/frameworks/nextjs/logout.d.ts.map +1 -0
  46. package/dist/frameworks/nextjs/logout.js +271 -0
  47. package/dist/frameworks/nextjs/logout.js.map +1 -0
  48. package/dist/frameworks/nextjs/metadata.d.ts +6 -0
  49. package/dist/frameworks/nextjs/metadata.d.ts.map +1 -0
  50. package/dist/frameworks/nextjs/metadata.js +339 -0
  51. package/dist/frameworks/nextjs/metadata.js.map +1 -0
  52. package/dist/frameworks/nextjs/provider.d.ts +6 -0
  53. package/dist/frameworks/nextjs/provider.d.ts.map +1 -0
  54. package/dist/frameworks/nextjs/provider.js +797 -0
  55. package/dist/frameworks/nextjs/provider.js.map +1 -0
  56. package/dist/frameworks/nextjs/token.d.ts +7 -0
  57. package/dist/frameworks/nextjs/token.d.ts.map +1 -0
  58. package/dist/frameworks/nextjs/token.js +1337 -0
  59. package/dist/frameworks/nextjs/token.js.map +1 -0
  60. package/dist/frameworks/web-standard/templates.d.ts +1 -13
  61. package/dist/frameworks/web-standard/templates.d.ts.map +1 -1
  62. package/dist/frameworks/web-standard/templates.js +12 -1296
  63. package/dist/frameworks/web-standard/templates.js.map +1 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +38 -8
  66. package/dist/index.js.map +1 -1
  67. package/package.json +1 -1
@@ -0,0 +1,458 @@
1
+ import { DEFAULT_FEATURES } from '../../features.js';
2
+ import { GOOGLE_LOGIN_PACKAGE, viewParamTypesTemplate, viewsInterfaceTemplate, } from './templates.js';
3
+ export function honoViewsTemplate(features = DEFAULT_FEATURES) {
4
+ const googleViewsImport = features.googleLogin
5
+ ? `// EXTENSION (google-login): the GIS configuration type and the script URL.
6
+ // The package generates no UI; the three elements GIS needs are written out in
7
+ // defaultLoginPage below.
8
+ import {
9
+ GOOGLE_GSI_CLIENT_SCRIPT_URL,
10
+ type GoogleSignInAttributes,
11
+ } from '${GOOGLE_LOGIN_PACKAGE}/sign-in';
12
+ `
13
+ : '';
14
+ const googleSignInMarkup = features.googleLogin
15
+ ? ` {/*
16
+ EXTENSION (google-login): the three elements GIS needs for redirect
17
+ mode — its client script, #g_id_onload carrying the configuration
18
+ (spread as attributes, which JSX escapes), and .g_id_signin, which GIS
19
+ replaces with the button. Style the button through the GIS button
20
+ attributes (data-theme, data-size, data-text, ...) on .g_id_signin.
21
+ hono/jsx hoists the async script into <head>.
22
+ */}
23
+ {params.googleSignIn ? (
24
+ <>
25
+ <hr />
26
+ <section aria-label="Sign in with Google">
27
+ <script src={GOOGLE_GSI_CLIENT_SCRIPT_URL} async></script>
28
+ <div {...params.googleSignIn}></div>
29
+ <div class="g_id_signin" data-type="standard"></div>
30
+ </section>
31
+ </>
32
+ ) : null}
33
+ `
34
+ : '';
35
+ const deviceDefaultViews = features.deviceAuthorizationGrant
36
+ ? `function defaultDeviceVerificationPage(params: DeviceVerificationPageParams): JSX.Element {
37
+ return (
38
+ <Layout title="Device Activation">
39
+ <h1>Device Activation</h1>
40
+ <p>Enter the code shown on your device.</p>
41
+ <FormError error={params.error} />
42
+ <form method="post" action="/device">
43
+ <div>
44
+ <label for="user_code">Code:</label>
45
+ <input type="text" id="user_code" name="user_code" value={params.userCode ?? ''} required />
46
+ </div>
47
+ <button type="submit">Continue</button>
48
+ </form>
49
+ </Layout>
50
+ );
51
+ }
52
+
53
+ function defaultDeviceLoginPage(params: DeviceLoginPageParams): JSX.Element {
54
+ return (
55
+ <Layout title="Login">
56
+ <h1>Login</h1>
57
+ <p>Activating device code <strong>{params.userCode}</strong></p>
58
+ <FormError error={params.error} remainingAttempts={params.remainingAttempts} />
59
+ <form method="post" action="/device/login">
60
+ <input type="hidden" name="user_code" value={params.userCode} />
61
+ <input type="hidden" name="csrf_token" value={params.csrfToken} />
62
+ <CredentialFields />
63
+ <button type="submit">Login</button>
64
+ </form>
65
+ </Layout>
66
+ );
67
+ }
68
+
69
+ function defaultDeviceApprovalPage(params: DeviceApprovalPageParams): JSX.Element {
70
+ // RFC 8628 §5.4: the code is repeated here on purpose. Ask the user to check it
71
+ // against the device in front of them before approving.
72
+ return (
73
+ <Layout title="Authorize Device">
74
+ <h1>Authorize Device</h1>
75
+ <p>Confirm that your device is showing this code: <strong>{params.userCode}</strong></p>
76
+ <p>Do not continue if the code does not match.</p>
77
+ <p>Client <strong>{params.clientId}</strong> is requesting access to the following scopes:</p>
78
+ <ScopeList scopes={params.scopes} />
79
+ <form method="post" action="/device/approve">
80
+ <input type="hidden" name="user_code" value={params.userCode} />
81
+ <input type="hidden" name="csrf_token" value={params.csrfToken} />
82
+ <button type="submit" name="decision" value="approve">Approve</button>
83
+ <button type="submit" name="decision" value="deny">Deny</button>
84
+ </form>
85
+ </Layout>
86
+ );
87
+ }
88
+
89
+ function defaultDeviceCompletedPage(params: DeviceCompletedPageParams): JSX.Element {
90
+ return (
91
+ <Layout title="Device Activation">
92
+ <h1>Device Activation</h1>
93
+ <DecisionOutcome approved={params.approved} clientId={params.clientId} />
94
+ <p>You can close this page and go back to your device.</p>
95
+ </Layout>
96
+ );
97
+ }
98
+
99
+ `
100
+ : '';
101
+ const deviceDefaultViewsEntries = features.deviceAuthorizationGrant
102
+ ? ` deviceVerificationPage: defaultDeviceVerificationPage,
103
+ deviceLoginPage: defaultDeviceLoginPage,
104
+ deviceApprovalPage: defaultDeviceApprovalPage,
105
+ deviceCompletedPage: defaultDeviceCompletedPage,
106
+ `
107
+ : '';
108
+ const cibaDefaultViews = features.ciba
109
+ ? `function defaultCibaLoginPage(params: CibaLoginPageParams): JSX.Element {
110
+ return (
111
+ <Layout title="Sign in">
112
+ <h1>Sign in</h1>
113
+ <p>Sign in to review sign-in requests sent to you.</p>
114
+ <FormError error={params.error} remainingAttempts={params.remainingAttempts} />
115
+ <form method="post" action="/ciba/login">
116
+ <input type="hidden" name="login_transaction_id" value={params.loginTransactionId} />
117
+ <input type="hidden" name="csrf_token" value={params.csrfToken} />
118
+ <CredentialFields />
119
+ <button type="submit">Login</button>
120
+ </form>
121
+ </Layout>
122
+ );
123
+ }
124
+
125
+ function defaultCibaPendingRequestsPage(params: CibaPendingRequestsPageParams): JSX.Element {
126
+ if (params.requests.length === 0) {
127
+ return (
128
+ <Layout title="Sign-in Requests">
129
+ <h1>Sign-in Requests</h1>
130
+ <p>No pending sign-in requests.</p>
131
+ </Layout>
132
+ );
133
+ }
134
+
135
+ // CIBA Core 1.0 §7.1: the binding_message is repeated here on purpose. Ask
136
+ // the user to check it against the device that started the request before
137
+ // approving. The Deny button is rendered with the same prominence as Approve.
138
+ return (
139
+ <Layout title="Sign-in Requests">
140
+ <h1>Sign-in Requests</h1>
141
+ <p>Only approve a request you started yourself on another device.</p>
142
+ {params.requests.map((request) => (
143
+ <section>
144
+ <p>Client <strong>{request.clientId}</strong> is requesting access to the following scopes:</p>
145
+ <ScopeList scopes={request.scopes} />
146
+ {request.bindingMessage ? (
147
+ <p>Confirm that your device is showing this message: <strong>{request.bindingMessage}</strong></p>
148
+ ) : null}
149
+ <p>This request expires in {request.expiresInSeconds} seconds.</p>
150
+ <form method="post" action="/ciba/approve">
151
+ <input type="hidden" name="auth_req_id" value={request.authReqId} />
152
+ <input type="hidden" name="csrf_token" value={request.csrfToken} />
153
+ <button type="submit" name="decision" value="approve">Approve</button>
154
+ <button type="submit" name="decision" value="deny">Deny</button>
155
+ </form>
156
+ </section>
157
+ ))}
158
+ </Layout>
159
+ );
160
+ }
161
+
162
+ function defaultCibaCompletedPage(params: CibaCompletedPageParams): JSX.Element {
163
+ return (
164
+ <Layout title="Sign-in Requests">
165
+ <h1>Sign-in Requests</h1>
166
+ <DecisionOutcome approved={params.approved} clientId={params.clientId} />
167
+ <p>You can close this page and go back to your device.</p>
168
+ </Layout>
169
+ );
170
+ }
171
+
172
+ `
173
+ : '';
174
+ const cibaDefaultViewsEntries = features.ciba
175
+ ? ` cibaLoginPage: defaultCibaLoginPage,
176
+ cibaPendingRequestsPage: defaultCibaPendingRequestsPage,
177
+ cibaCompletedPage: defaultCibaCompletedPage,
178
+ `
179
+ : '';
180
+ const rpInitiatedLogoutDefaultViews = features.rpInitiatedLogout
181
+ ? `// RP-Initiated Logout 1.0 §2: the wording is fixed for every path into this
182
+ // screen (no hint, an invalid or expired hint, another user's session, no
183
+ // session at all), so the page cannot be used as an oracle for session state
184
+ // or for why the hint failed.
185
+ function defaultLogoutConfirmationPage(params: LogoutConfirmationPageParams): JSX.Element {
186
+ return (
187
+ <Layout title="Log out">
188
+ <h1>Log out</h1>
189
+ <p>Do you want to log out of the OpenID Provider?</p>
190
+ <p>If you did not request this, close this page.</p>
191
+ <form method="post" action="/logout/approve">
192
+ <input type="hidden" name="csrf_token" value={params.csrfToken} />
193
+ <button type="submit">Log out</button>
194
+ </form>
195
+ </Layout>
196
+ );
197
+ }
198
+
199
+ function defaultLogoutCompletedPage(_params: LogoutCompletedPageParams): JSX.Element {
200
+ return (
201
+ <Layout title="Logged out">
202
+ <h1>Logged out</h1>
203
+ <p>You have been logged out.</p>
204
+ <p>You can close this page.</p>
205
+ </Layout>
206
+ );
207
+ }
208
+
209
+ `
210
+ : '';
211
+ const rpInitiatedLogoutDefaultViewsEntries = features.rpInitiatedLogout
212
+ ? ` logoutConfirmationPage: defaultLogoutConfirmationPage,
213
+ logoutCompletedPage: defaultLogoutCompletedPage,
214
+ `
215
+ : '';
216
+ const decisionOutcomeComponent = features.deviceAuthorizationGrant || features.ciba
217
+ ? `
218
+ /** The approve / deny result shown once the user decided. */
219
+ function DecisionOutcome(props: { approved: boolean; clientId: string }): JSX.Element {
220
+ return props.approved ? (
221
+ <p>You approved <strong>{props.clientId}</strong>.</p>
222
+ ) : (
223
+ <p>You denied <strong>{props.clientId}</strong>.</p>
224
+ );
225
+ }
226
+ `
227
+ : '';
228
+ return `/** @jsxImportSource hono/jsx */
229
+ /**
230
+ * UI Views for OpenID Connect Provider (hono/jsx).
231
+ *
232
+ * This file contains the default markup of every user-facing screen, written
233
+ * as JSX. The screen routes in pages/ deliver these views (pages/login.ts
234
+ * renders <views.loginPage {...params} />, and so on); the logic in routes/
235
+ * never renders anything — it returns outcomes the pages turn into HTTP.
236
+ * Customize these components to match your application's design, or change
237
+ * how a screen is delivered in its pages/ module.
238
+ *
239
+ * Every view is a hono/jsx component: it receives typed parameters as its
240
+ * props and returns a JSX element (ViewResult), which renderView turns into
241
+ * the Response the page sends. To control the Response itself (status,
242
+ * headers, a body from another renderer), change the render*Page() helper of
243
+ * the screen in pages/ instead.
244
+ *
245
+ * JSX escapes every value interpolated with {...}, in text and in attributes,
246
+ * so untrusted input (login_hint, error_description, binding_message, ...) is
247
+ * rendered safely without manual escaping. Never hand such a value to raw()
248
+ * or dangerouslySetInnerHTML.
249
+ *
250
+ * Compiling this file needs JSX enabled in tsconfig.json:
251
+ * "jsx": "react-jsx", "jsxImportSource": "hono/jsx"
252
+ */
253
+ import type { Child } from 'hono/jsx';
254
+ import type { JSX } from 'hono/jsx/jsx-runtime';
255
+ import { raw } from 'hono/html';
256
+ ${googleViewsImport}
257
+ // ============================================================
258
+ // View Parameter Types
259
+ // ============================================================
260
+
261
+ ${viewParamTypesTemplate(features)}
262
+ // ============================================================
263
+ // Views Interface
264
+ // ============================================================
265
+
266
+ /**
267
+ * What a view returns: a JSX element. A component may be async, and markup
268
+ * built elsewhere can be returned through hono/html — html\`...\` escapes its
269
+ * interpolations, raw() trusts its string as is, so only hand it HTML that is
270
+ * already escaped.
271
+ */
272
+ export type ViewResult = JSX.Element;
273
+
274
+ ${viewsInterfaceTemplate(features)}
275
+ /** Options applied when renderView turns a view into a Response. */
276
+ export interface RenderViewInit {
277
+ /** HTTP status code for the generated Response (defaults to 200). */
278
+ status?: number;
279
+ }
280
+
281
+ /**
282
+ * Turn a rendered view into the text/html Response a page sends.
283
+ *
284
+ * The element is serialized to HTML here. One that contains an async component
285
+ * serializes to a Promise; its HTML is streamed once it resolves, so the
286
+ * Response (and the cookies a page attaches to it) is still built
287
+ * synchronously.
288
+ */
289
+ export function renderView(view: ViewResult, init?: RenderViewInit): Response {
290
+ const html = serializeView(view);
291
+ return new Response(typeof html === 'string' ? html : streamWhenResolved(html), {
292
+ status: init?.status ?? 200,
293
+ headers: { 'Content-Type': 'text/html; charset=UTF-8' },
294
+ });
295
+ }
296
+
297
+ /**
298
+ * HTML of a view. JSX.Element is typed as a string, but at runtime a hono/jsx
299
+ * element is an object that serializes through toString(), and an async
300
+ * view is a Promise of one.
301
+ */
302
+ function serializeView(view: ViewResult): string | Promise<string> {
303
+ if (view instanceof Promise) {
304
+ return view.then(serializeView);
305
+ }
306
+ return (view as { toString(): string | Promise<string> }).toString();
307
+ }
308
+
309
+ function streamWhenResolved(html: Promise<string>): ReadableStream<Uint8Array> {
310
+ return new ReadableStream({
311
+ async start(controller) {
312
+ controller.enqueue(new TextEncoder().encode(await html));
313
+ controller.close();
314
+ },
315
+ });
316
+ }
317
+
318
+ // ============================================================
319
+ // Default Views Implementation
320
+ // Replace the components below to customize the UI.
321
+ // ============================================================
322
+
323
+ /**
324
+ * The HTML document every default view renders into. JSX has no syntax for the
325
+ * doctype, so it is written with raw() — a fixed literal, never user input.
326
+ */
327
+ function Layout(props: { title: string; children?: Child }): JSX.Element {
328
+ return (
329
+ <>
330
+ {raw('<!DOCTYPE html>')}
331
+ <html>
332
+ <head>
333
+ <title>{props.title}</title>
334
+ </head>
335
+ <body>{props.children}</body>
336
+ </html>
337
+ </>
338
+ );
339
+ }
340
+
341
+ /** The failure message of a form, with the attempts left when known. */
342
+ function FormError(props: { error?: string; remainingAttempts?: number }): JSX.Element | null {
343
+ if (!props.error) return null;
344
+ return (
345
+ <p style="color: red;">
346
+ {props.error}
347
+ {props.remainingAttempts !== undefined ? <>. Attempts remaining: {props.remainingAttempts}</> : null}
348
+ </p>
349
+ );
350
+ }
351
+
352
+ /** Username / password inputs shared by every sign-in form. */
353
+ function CredentialFields(props: { username?: string }): JSX.Element {
354
+ return (
355
+ <>
356
+ <div>
357
+ <label for="username">Username:</label>
358
+ <input type="text" id="username" name="username" value={props.username} required />
359
+ </div>
360
+ <div>
361
+ <label for="password">Password:</label>
362
+ <input type="password" id="password" name="password" required />
363
+ </div>
364
+ </>
365
+ );
366
+ }
367
+
368
+ /** The scopes a client asked for, one list item each. */
369
+ function ScopeList(props: { scopes: string[] }): JSX.Element {
370
+ return (
371
+ <ul>
372
+ {props.scopes.map((scope) => (
373
+ <li>{scope}</li>
374
+ ))}
375
+ </ul>
376
+ );
377
+ }
378
+ ${decisionOutcomeComponent}
379
+ function defaultLoginPage(params: LoginPageParams): JSX.Element {
380
+ // OIDC Core 1.0 §3.1.2.1: login_hint pre-fills the username. It is
381
+ // unauthenticated input; the JSX attribute escapes it.
382
+ return (
383
+ <Layout title="Login">
384
+ <h1>Login</h1>
385
+ <FormError error={params.error} remainingAttempts={params.remainingAttempts} />
386
+ <form method="post" action="/login">
387
+ <input type="hidden" name="transaction_id" value={params.transactionId} />
388
+ <input type="hidden" name="csrf_token" value={params.csrfToken} />
389
+ <CredentialFields username={params.loginHint ?? ''} />
390
+ <button type="submit">Login</button>
391
+ </form>
392
+ ${googleSignInMarkup} </Layout>
393
+ );
394
+ }
395
+
396
+ // The submit buttons below carry the authorization decision (OIDC Core 1.0
397
+ // Section 3.1.2.4). The consent handler accepts exactly two values — 'approve'
398
+ // and 'deny' — and rejects everything else with 400, so customizing this markup
399
+ // must keep both button values as they are: renaming 'approve' makes every
400
+ // approval fail, and renaming 'deny' makes the Deny button rejected as well.
401
+ // See routes/consent.ts.
402
+ function defaultConsentPage(params: ConsentPageParams): JSX.Element {
403
+ return (
404
+ <Layout title="Consent">
405
+ <h1>Authorize Application</h1>
406
+ <p>Client <strong>{params.clientId}</strong> is requesting access to the following scopes:</p>
407
+ <ScopeList scopes={params.scopes} />
408
+ <form method="post" action="/consent">
409
+ <input type="hidden" name="transaction_id" value={params.transactionId} />
410
+ <input type="hidden" name="csrf_token" value={params.csrfToken} />
411
+ <button type="submit" name="action" value="approve">Approve</button>
412
+ <button type="submit" name="action" value="deny">Deny</button>
413
+ </form>
414
+ </Layout>
415
+ );
416
+ }
417
+
418
+ function defaultErrorPage(params: ErrorPageParams): JSX.Element {
419
+ return (
420
+ <Layout title="Error">
421
+ <h1>Error</h1>
422
+ <p>{params.error}</p>
423
+ {params.errorDescription ? <p>{params.errorDescription}</p> : null}
424
+ </Layout>
425
+ );
426
+ }
427
+
428
+ ${deviceDefaultViews}${cibaDefaultViews}${rpInitiatedLogoutDefaultViews}/**
429
+ * Default Views used when no custom views are injected.
430
+ * These render minimal, unstyled HTML so the flow works out of the box.
431
+ */
432
+ export const defaultViews: Views = {
433
+ loginPage: defaultLoginPage,
434
+ consentPage: defaultConsentPage,
435
+ errorPage: defaultErrorPage,
436
+ ${deviceDefaultViewsEntries}${cibaDefaultViewsEntries}${rpInitiatedLogoutDefaultViewsEntries}};
437
+
438
+ /**
439
+ * Build a Views instance, overriding any subset of the default views with your
440
+ * own implementation. Inject the result through the provider options instead of
441
+ * editing this file:
442
+ *
443
+ * @example
444
+ * // Provide your own login UI while keeping the default consent/error pages.
445
+ * createApp({
446
+ * signingKeyProvider,
447
+ * views: {
448
+ * loginPage: (params) => <MyLoginPage {...params} />,
449
+ * },
450
+ * });
451
+ */
452
+ export function createViews(overrides?: Partial<Views>): Views {
453
+ if (!overrides) return defaultViews;
454
+ return { ...defaultViews, ...overrides };
455
+ }
456
+ `;
457
+ }
458
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/frameworks/hono/views.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAMxB,MAAM,UAAU,iBAAiB,CAC/B,QAAQ,GAAsB,gBAAgB;IAE9C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,WAAW;QAC5C,CAAC,CAAC;;;;;;UAMI,oBAAoB;CAC7B;QACG,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW;QAC7C,CAAC,CAAC;;;;;;;;;;;;;;;;;;CAkBL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,kBAAkB,GAAG,QAAQ,CAAC,wBAAwB;QAC1D,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DL;QACG,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,yBAAyB,GAAG,QAAQ,CAAC,wBAAwB;QACjE,CAAC,CAAC;;;;CAIL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI;QACpC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DL;QACG,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,uBAAuB,GAAG,QAAQ,CAAC,IAAI;QAC3C,CAAC,CAAC;;;CAGL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,6BAA6B,GAAG,QAAQ,CAAC,iBAAiB;QAC9D,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BL;QACG,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,oCAAoC,GAAG,QAAQ,CAAC,iBAAiB;QACrE,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EAAE,CAAC;IAIP,MAAM,wBAAwB,GAAG,QAAQ,CAAC,wBAAwB,IAAI,QAAQ,CAAC,IAAI;QACjF,CAAC,CAAC;;;;;;;;;CASL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BP,iBAAiB;;;;;EAKjB,sBAAsB,CAAC,QAAQ,CAAC;;;;;;;;;;;;;EAahC,sBAAsB,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwGhC,wBAAwB;;;;;;;;;;;;;;EAcxB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoClB,kBAAkB,GAAG,gBAAgB,GAAG,6BAA6B;;;;;;;;EAQrE,yBAAyB,GAAG,uBAAuB,GAAG,oCAAoC;;;;;;;;;;;;;;;;;;;;CAoB3F,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { OidcFeatureConfig } from '../../features.js';
2
+ export declare function nextJsAuthorizeRouteTemplate(corePkg: string, features?: OidcFeatureConfig, scopes?: string[]): string;
3
+ //# sourceMappingURL=authorize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorize.d.ts","sourceRoot":"","sources":["../../../src/frameworks/nextjs/authorize.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,iBAAoC,EAC9C,MAAM,GAAE,MAAM,EAAO,GACpB,MAAM,CAwwBR"}