@pattern-js/mod-identity 0.3.0 → 0.4.0-main.c8eb671

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 (63) hide show
  1. package/dist/admin-routes.d.ts +4 -0
  2. package/dist/admin-routes.d.ts.map +1 -1
  3. package/dist/admin-routes.js +16 -2
  4. package/dist/admin-routes.js.map +1 -1
  5. package/dist/api-token-provider.d.ts +18 -0
  6. package/dist/api-token-provider.d.ts.map +1 -0
  7. package/dist/api-token-provider.js +47 -0
  8. package/dist/api-token-provider.js.map +1 -0
  9. package/dist/deliver.d.ts +2 -0
  10. package/dist/deliver.d.ts.map +1 -1
  11. package/dist/deliver.js +55 -2
  12. package/dist/deliver.js.map +1 -1
  13. package/dist/frontend.d.ts.map +1 -1
  14. package/dist/frontend.js +101 -12
  15. package/dist/frontend.js.map +1 -1
  16. package/dist/index.d.ts +3 -2
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/mod.d.ts.map +1 -1
  21. package/dist/mod.js +9 -2
  22. package/dist/mod.js.map +1 -1
  23. package/dist/ops.d.ts.map +1 -1
  24. package/dist/ops.js +149 -24
  25. package/dist/ops.js.map +1 -1
  26. package/dist/pages/html.d.ts.map +1 -1
  27. package/dist/pages/html.js +1 -0
  28. package/dist/pages/html.js.map +1 -1
  29. package/dist/pages/invited.d.ts +15 -0
  30. package/dist/pages/invited.d.ts.map +1 -0
  31. package/dist/pages/invited.js +21 -0
  32. package/dist/pages/invited.js.map +1 -0
  33. package/dist/service.d.ts +92 -3
  34. package/dist/service.d.ts.map +1 -1
  35. package/dist/service.js +187 -0
  36. package/dist/service.js.map +1 -1
  37. package/dist/store/memory.d.ts.map +1 -1
  38. package/dist/store/memory.js +0 -0
  39. package/dist/store/memory.js.map +1 -1
  40. package/dist/store/migrations.d.ts.map +1 -1
  41. package/dist/store/migrations.js +35 -0
  42. package/dist/store/migrations.js.map +1 -1
  43. package/dist/store/sqlite.d.ts.map +1 -1
  44. package/dist/store/sqlite.js +121 -0
  45. package/dist/store/sqlite.js.map +1 -1
  46. package/dist/store/types.d.ts +76 -0
  47. package/dist/store/types.d.ts.map +1 -1
  48. package/dist/store/types.js.map +1 -1
  49. package/dist/workflows.d.ts.map +1 -1
  50. package/dist/workflows.js +1 -0
  51. package/dist/workflows.js.map +1 -1
  52. package/docs/index.md +66 -0
  53. package/docs/ops/identity.apiTokens.create.md +13 -0
  54. package/docs/ops/identity.apiTokens.list.md +4 -0
  55. package/docs/ops/identity.apiTokens.revoke.md +4 -0
  56. package/docs/ops/identity.invited.page.md +6 -0
  57. package/docs/ops/identity.invites.list.md +6 -0
  58. package/docs/ops/identity.invites.revoke.md +6 -0
  59. package/docs/ops/identity.users.delete.md +6 -0
  60. package/docs/ops/identity.users.invite.md +11 -7
  61. package/docs/ops/identity.users.setRoles.md +7 -5
  62. package/docs/ops/identity.users.toggleDisabled.md +6 -4
  63. package/package.json +4 -4
@@ -19,9 +19,13 @@ export declare const PATHS: {
19
19
  readonly userLoginLink: "/identity/users/:userId/login-link";
20
20
  readonly userToggleDisabled: "/identity/users/:userId/toggle-disabled";
21
21
  readonly userRevokeSessions: "/identity/users/:userId/revoke-sessions";
22
+ readonly userSetRoles: "/identity/users/:userId/roles";
22
23
  readonly invites: "/identity/invites";
24
+ readonly inviteRevoke: "/identity/invites/:inviteId/revoke";
23
25
  readonly sessions: "/identity/sessions";
24
26
  readonly session: "/identity/sessions/:sessionId";
27
+ readonly apiTokens: "/identity/api-tokens";
28
+ readonly apiTokenRevoke: "/identity/api-tokens/:tokenId/revoke";
25
29
  readonly settings: "/identity/settings";
26
30
  readonly whoami: "/identity/whoami";
27
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"admin-routes.d.ts","sourceRoot":"","sources":["../src/admin-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAsC,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIrF,oFAAoF;AACpF,eAAO,MAAM,KAAK;;;;;;;;;;;;;CAaR,CAAC;AAEX,8DAA8D;AAC9D,wBAAgB,mBAAmB,IAAI,QAAQ,EAAE,CA6BhD"}
1
+ {"version":3,"file":"admin-routes.d.ts","sourceRoot":"","sources":["../src/admin-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAsD,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIrG,oFAAoF;AACpF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;CAiBR,CAAC;AAEX,8DAA8D;AAC9D,wBAAgB,mBAAmB,IAAI,QAAQ,EAAE,CAuChD"}
@@ -9,7 +9,7 @@
9
9
  * principal, so it needs authentication, not the admin scope. Paths are
10
10
  * single-sourced here so the workflows and the manifest can't drift.
11
11
  */
12
- import { fromBody, fromParams, httpEndpoint } from "@pattern-js/core";
12
+ import { fromBody, fromParams, fromRequestUrl, httpEndpoint } from "@pattern-js/core";
13
13
  const API = "/admin/api";
14
14
  /** Route paths relative to the admin API mount — the manifest's `RouteRef.path`. */
15
15
  export const PATHS = {
@@ -20,9 +20,13 @@ export const PATHS = {
20
20
  userLoginLink: "/identity/users/:userId/login-link",
21
21
  userToggleDisabled: "/identity/users/:userId/toggle-disabled",
22
22
  userRevokeSessions: "/identity/users/:userId/revoke-sessions",
23
+ userSetRoles: "/identity/users/:userId/roles",
23
24
  invites: "/identity/invites",
25
+ inviteRevoke: "/identity/invites/:inviteId/revoke",
24
26
  sessions: "/identity/sessions",
25
27
  session: "/identity/sessions/:sessionId",
28
+ apiTokens: "/identity/api-tokens",
29
+ apiTokenRevoke: "/identity/api-tokens/:tokenId/revoke",
26
30
  settings: "/identity/settings",
27
31
  whoami: "/identity/whoami",
28
32
  };
@@ -40,13 +44,23 @@ export function identityAdminRoutes() {
40
44
  r("identity.route.admin.settings.get", "GET", PATHS.settings, "identity.settings.get", { out: "settings" }),
41
45
  // whoami is about the *caller* — authentication, not the admin scope.
42
46
  r("identity.route.admin.whoami", "GET", PATHS.whoami, "identity.whoami", { out: "whoami" }, true),
47
+ r("identity.route.admin.invites.list", "GET", PATHS.invites, "identity.invites.list", { out: "invites" }),
43
48
  // ── actions ──
44
- r("identity.route.admin.users.invite", "POST", PATHS.invites, "identity.users.invite", { in: { email: fromBody(), roles: fromBody() }, out: "result" }),
49
+ // The invite's emailed link must be absolute: the request URL rides along so
50
+ // the op can derive the origin (PATTERN_PUBLIC_URL beats it when configured).
51
+ r("identity.route.admin.users.invite", "POST", PATHS.invites, "identity.users.invite", { in: { email: fromBody(), roles: fromBody(), next: fromBody(), url: fromRequestUrl() }, out: "result" }),
52
+ r("identity.route.admin.invites.revoke", "POST", PATHS.inviteRevoke, "identity.invites.revoke", { in: { inviteId: fromParams() }, out: "result" }),
45
53
  r("identity.route.admin.users.loginLink", "POST", PATHS.userLoginLink, "identity.users.loginLink", { in: { userId: fromParams() }, out: "result" }),
46
54
  r("identity.route.admin.users.toggleDisabled", "POST", PATHS.userToggleDisabled, "identity.users.toggleDisabled", { in: { userId: fromParams() }, out: "user" }),
47
55
  r("identity.route.admin.users.revokeSessions", "POST", PATHS.userRevokeSessions, "identity.users.revokeSessions", { in: { userId: fromParams() }, out: "result" }),
56
+ r("identity.route.admin.users.setRoles", "POST", PATHS.userSetRoles, "identity.users.setRoles", { in: { userId: fromParams(), roles: fromBody() }, out: "user" }),
57
+ r("identity.route.admin.users.delete", "DELETE", PATHS.user, "identity.users.delete", { in: { userId: fromParams() }, out: "result" }),
48
58
  r("identity.route.admin.sessions.revoke", "DELETE", PATHS.session, "identity.sessions.revoke", { in: { sessionId: fromParams() }, out: "result" }),
49
59
  r("identity.route.admin.settings.set", "POST", PATHS.settings, "identity.settings.set", { in: { signup: fromBody() }, out: "result" }),
60
+ // ── API tokens ──
61
+ r("identity.route.admin.apiTokens.list", "GET", PATHS.apiTokens, "identity.apiTokens.list", { out: "tokens" }),
62
+ r("identity.route.admin.apiTokens.create", "POST", PATHS.apiTokens, "identity.apiTokens.create", { in: { name: fromBody(), scopes: fromBody(), ttlDays: fromBody() }, out: "result" }),
63
+ r("identity.route.admin.apiTokens.revoke", "POST", PATHS.apiTokenRevoke, "identity.apiTokens.revoke", { in: { tokenId: fromParams() }, out: "result" }),
50
64
  ];
51
65
  }
52
66
  //# sourceMappingURL=admin-routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-routes.js","sourceRoot":"","sources":["../src/admin-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-routes.js","sourceRoot":"","sources":["../src/admin-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @pattern-js/mod-identity — the API-token AuthProvider (0.4.0).
3
+ *
4
+ * The bridge from `Authorization: Bearer pat_…` to a principal, for the
5
+ * control-plane surface (MCP server, admin API automation, CI). Returns null
6
+ * fast when the header is absent or not token-shaped, so the session provider
7
+ * and any custom providers get their turn.
8
+ *
9
+ * The principal's id is the TOKEN id (`apitoken:<id>`), not the minting
10
+ * user's — audit trails then say which credential acted, which is the whole
11
+ * point of named revocable tokens. No CSRF concerns here: bearer headers are
12
+ * never attached cross-site by a browser.
13
+ */
14
+ import type { AuthProvider } from "@pattern-js/core";
15
+ import { type IdentityService } from "./service.js";
16
+ export declare const API_TOKEN_PROVIDER_NAME = "@pattern-js/mod-identity/api-token";
17
+ export declare function apiTokenAuthProvider(svc: () => IdentityService | undefined): AuthProvider;
18
+ //# sourceMappingURL=api-token-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-token-provider.d.ts","sourceRoot":"","sources":["../src/api-token-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEtE,eAAO,MAAM,uBAAuB,uCAAuC,CAAC;AAE5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,eAAe,GAAG,SAAS,GAAG,YAAY,CA6BzF"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @pattern-js/mod-identity — the API-token AuthProvider (0.4.0).
3
+ *
4
+ * The bridge from `Authorization: Bearer pat_…` to a principal, for the
5
+ * control-plane surface (MCP server, admin API automation, CI). Returns null
6
+ * fast when the header is absent or not token-shaped, so the session provider
7
+ * and any custom providers get their turn.
8
+ *
9
+ * The principal's id is the TOKEN id (`apitoken:<id>`), not the minting
10
+ * user's — audit trails then say which credential acted, which is the whole
11
+ * point of named revocable tokens. No CSRF concerns here: bearer headers are
12
+ * never attached cross-site by a browser.
13
+ */
14
+ import { API_TOKEN_PREFIX } from "./service.js";
15
+ export const API_TOKEN_PROVIDER_NAME = "@pattern-js/mod-identity/api-token";
16
+ export function apiTokenAuthProvider(svc) {
17
+ return {
18
+ name: API_TOKEN_PROVIDER_NAME,
19
+ async authenticate(ctx) {
20
+ const service = svc();
21
+ if (!service)
22
+ return null;
23
+ const header = ctx.headers.get("authorization");
24
+ if (!header)
25
+ return null;
26
+ const [scheme, raw] = header.split(/\s+/, 2);
27
+ if (scheme?.toLowerCase() !== "bearer" || !raw?.startsWith(API_TOKEN_PREFIX))
28
+ return null;
29
+ const row = await service.verifyApiToken(raw);
30
+ if (!row)
31
+ return null;
32
+ return {
33
+ kind: "user",
34
+ id: `apitoken:${row.id}`,
35
+ provider: API_TOKEN_PROVIDER_NAME,
36
+ scopes: row.scopes,
37
+ claims: {
38
+ tokenId: row.id,
39
+ tokenName: row.name,
40
+ // The admin who minted it, when recorded — context, not authority.
41
+ mintedBy: row.userId ?? undefined,
42
+ },
43
+ };
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=api-token-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-token-provider.js","sourceRoot":"","sources":["../src/api-token-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,gBAAgB,EAAwB,MAAM,cAAc,CAAC;AAEtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,oCAAoC,CAAC;AAE5E,MAAM,UAAU,oBAAoB,CAAC,GAAsC;IACzE,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,KAAK,CAAC,YAAY,CAAC,GAAG;YACpB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAE1B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,gBAAgB,CAAC;gBAAE,OAAO,IAAI,CAAC;YAE1F,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YAEtB,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE;gBACxB,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE;oBACN,OAAO,EAAE,GAAG,CAAC,EAAE;oBACf,SAAS,EAAE,GAAG,CAAC,IAAI;oBACnB,mEAAmE;oBACnE,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;iBAClC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/deliver.d.ts CHANGED
@@ -17,6 +17,8 @@ export interface DeliverInput {
17
17
  purpose: string;
18
18
  /** The request origin (e.g. "http://localhost:3000"), when available — makes the link absolute. */
19
19
  origin?: string | null;
20
+ /** Token expiry (ms epoch) — turns "expires soon" into "valid for 7 days" in the copy. */
21
+ expiresAt?: number;
20
22
  }
21
23
  export interface DeliverResult {
22
24
  delivered: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"deliver.d.ts","sourceRoot":"","sources":["../src/deliver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,mGAAmG;IACnG,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAExE;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAoB9F"}
1
+ {"version":3,"file":"deliver.d.ts","sourceRoot":"","sources":["../src/deliver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,mGAAmG;IACnG,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAExE;AA8CD,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B9F"}
package/dist/deliver.js CHANGED
@@ -13,9 +13,62 @@ export const DELIVER_TOKEN_HOOK = "identity.deliverToken";
13
13
  export function absoluteUrl(path, origin) {
14
14
  return origin ? `${origin.replace(/\/$/, "")}${path}` : path;
15
15
  }
16
+ /**
17
+ * The canonical public origin, when configured. `PATTERN_PUBLIC_URL` beats any
18
+ * request-derived origin on purpose: behind a proxy or tunnel the Host header
19
+ * is whatever the hop put there, and links minted outside a request (cron,
20
+ * CLI) have no origin at all — an emailed link must survive both.
21
+ */
22
+ function configuredOrigin(ctx) {
23
+ const raw = ctx.env?.PATTERN_PUBLIC_URL;
24
+ return typeof raw === "string" && raw.trim() ? raw.trim() : null;
25
+ }
26
+ /** "valid for 7 days" / "expires in 14 minutes" — humanized from the expiry stamp. */
27
+ function humanTtl(expiresAt) {
28
+ const ms = (expiresAt ?? 0) - Date.now();
29
+ if (ms <= 0)
30
+ return null;
31
+ const minutes = Math.round(ms / 60_000);
32
+ if (minutes < 90)
33
+ return `${minutes} minute${minutes === 1 ? "" : "s"}`;
34
+ const hours = Math.round(minutes / 60);
35
+ if (hours <= 48)
36
+ return `${hours} hour${hours === 1 ? "" : "s"}`;
37
+ const days = Math.round(hours / 24);
38
+ return `${days} day${days === 1 ? "" : "s"}`;
39
+ }
40
+ /**
41
+ * Human copy per purpose. It lives HERE, not in the delivery workflow, because
42
+ * identity owns the token's semantics (what it does, how long it lives) —
43
+ * every channel subscribed to the hook (email, SMS, chat…) gets sensible
44
+ * wording for free, and a forked delivery workflow may still write its own.
45
+ */
46
+ function copyFor(purpose, ttl) {
47
+ const expiry = ttl ? `The link is single-use and valid for ${ttl}.` : "The link is single-use and expires soon.";
48
+ switch (purpose) {
49
+ case "invite":
50
+ return {
51
+ subject: "You've been invited",
52
+ message: `You've been invited to join. Open the link below to accept the invitation — your account is created on the spot, then you sign in for the first time. ${expiry}`,
53
+ };
54
+ case "login":
55
+ return { subject: "Your sign-in link", message: `Open the link below to sign in. ${expiry}` };
56
+ default:
57
+ return { subject: `Your ${purpose} link`, message: `Open the link below to continue. ${expiry}` };
58
+ }
59
+ }
16
60
  export async function deliverToken(ctx, input) {
17
- const url = absoluteUrl(input.path, input.origin);
18
- const payload = { email: input.email, url, purpose: input.purpose, delivered: false };
61
+ const url = absoluteUrl(input.path, configuredOrigin(ctx) ?? input.origin);
62
+ const { subject, message } = copyFor(input.purpose, humanTtl(input.expiresAt));
63
+ const payload = {
64
+ email: input.email,
65
+ url,
66
+ purpose: input.purpose,
67
+ delivered: false,
68
+ subject,
69
+ message,
70
+ ...(input.expiresAt !== undefined ? { expiresAt: input.expiresAt } : {}),
71
+ };
19
72
  let result;
20
73
  try {
21
74
  result = await ctx.services.hooks.invoke(DELIVER_TOKEN_HOOK, payload);
@@ -1 +1 @@
1
- {"version":3,"file":"deliver.js","sourceRoot":"","sources":["../src/deliver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAgB1D,0FAA0F;AAC1F,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAsB;IAC9D,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAc,EAAE,KAAmB;IACpE,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACtF,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4DAA4D;QAC5D,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,sDAAuD,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChG,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAE,MAA8C,EAAE,SAAS,CAAC,CAAC;IACtF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACT,iBAAiB,KAAK,CAAC,OAAO,aAAa,KAAK,CAAC,KAAK,IAAI;YACxD,eAAe,GAAG,IAAI;YACtB,yEAAyE,kBAAkB,WAAW,CACzG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"deliver.js","sourceRoot":"","sources":["../src/deliver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"frontend.d.ts","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,wBAAgB,gBAAgB,IAAI,oBAAoB,CAiIvD"}
1
+ {"version":3,"file":"frontend.d.ts","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,wBAAgB,gBAAgB,IAAI,oBAAoB,CA2NvD"}
package/dist/frontend.js CHANGED
@@ -10,8 +10,9 @@ export function identityFrontend() {
10
10
  return {
11
11
  menu: [
12
12
  { category: "Access", label: "Users", icon: "users", path: "/x/identity/users", order: 10 },
13
- { category: "Access", label: "Invite", icon: "user-plus", path: "/x/identity/invite", order: 20 },
13
+ { category: "Access", label: "Invites", icon: "user-plus", path: "/x/identity/invite", order: 20 },
14
14
  { category: "Access", label: "Sessions", icon: "key-round", path: "/x/identity/sessions", order: 30 },
15
+ { category: "Access", label: "API tokens", icon: "key-square", path: "/x/identity/api-tokens", order: 40 },
15
16
  ],
16
17
  pages: [
17
18
  {
@@ -32,8 +33,9 @@ export function identityFrontend() {
32
33
  // stay silent: the refreshed row is the feedback.
33
34
  { label: "Details", path: "/x/identity/users/:userId", args: { userId: "id" }, icon: "user" },
34
35
  { label: "Sign-in link", route: { method: "POST", path: PATHS.userLoginLink }, args: { userId: "id" }, icon: "key-round", result: "show" },
35
- { label: "Toggle disabled", route: { method: "POST", path: PATHS.userToggleDisabled }, args: { userId: "id" }, icon: "ban", confirm: true },
36
+ { label: "Disable / enable", route: { method: "POST", path: PATHS.userToggleDisabled }, args: { userId: "id" }, icon: "ban", confirm: true },
36
37
  { label: "Log out everywhere", route: { method: "POST", path: PATHS.userRevokeSessions }, args: { userId: "id" }, icon: "log-out", confirm: true },
38
+ { label: "Delete", route: { method: "DELETE", path: PATHS.user }, args: { userId: "id" }, icon: "trash", confirm: true },
37
39
  ],
38
40
  },
39
41
  },
@@ -43,6 +45,24 @@ export function identityFrontend() {
43
45
  path: "/x/identity/users/:userId",
44
46
  views: [
45
47
  { title: "Profile", view: { kind: "detail", route: { method: "GET", path: PATHS.user } } },
48
+ {
49
+ // Editing roles needs an input, which a row action can't carry —
50
+ // so it lives here as a form (the page's :userId fills the route).
51
+ title: "Set roles",
52
+ view: {
53
+ kind: "form",
54
+ schema: {
55
+ type: "object",
56
+ properties: {
57
+ roles: {
58
+ type: "string",
59
+ description: 'Comma-separated — REPLACES the current set, e.g. "admin" (empty = plain user). Ends the user\'s sessions.',
60
+ },
61
+ },
62
+ },
63
+ route: { method: "POST", path: PATHS.userSetRoles },
64
+ },
65
+ },
46
66
  {
47
67
  title: "Runs by workflow (recent window)",
48
68
  view: {
@@ -76,19 +96,88 @@ export function identityFrontend() {
76
96
  ],
77
97
  },
78
98
  {
99
+ // Invites: send (form) + the sent list with statuses, one page.
79
100
  path: "/x/identity/invite",
80
- view: {
81
- kind: "form",
82
- schema: {
83
- type: "object",
84
- properties: {
85
- email: { type: "string", description: "Who to invite" },
86
- roles: { type: "string", description: 'Comma-separated roles, e.g. "admin" (empty = plain user)' },
101
+ views: [
102
+ {
103
+ title: "Send an invite",
104
+ view: {
105
+ kind: "form",
106
+ schema: {
107
+ type: "object",
108
+ properties: {
109
+ email: { type: "string", description: "Who to invite" },
110
+ roles: { type: "string", description: 'Comma-separated roles, e.g. "admin" (empty = plain user)' },
111
+ next: { type: "string", description: "Where their first login lands, e.g. /admin or /chat (empty = the app default)" },
112
+ },
113
+ required: ["email"],
114
+ },
115
+ route: { method: "POST", path: PATHS.invites },
87
116
  },
88
- required: ["email"],
89
117
  },
90
- route: { method: "POST", path: PATHS.invites },
91
- },
118
+ {
119
+ title: "Sent invites",
120
+ view: {
121
+ kind: "table",
122
+ route: { method: "GET", path: PATHS.invites },
123
+ columns: [
124
+ { key: "email", label: "Email" },
125
+ { key: "roles", label: "Roles" },
126
+ { key: "status", label: "Status", format: "badge" },
127
+ { key: "next", label: "Lands on" },
128
+ { key: "invited by", label: "Invited by" },
129
+ { key: "sent", label: "Sent", format: "date" },
130
+ { key: "expires", label: "Expires", format: "date" },
131
+ ],
132
+ rowActions: [
133
+ { label: "Revoke", route: { method: "POST", path: PATHS.inviteRevoke }, args: { inviteId: "id" }, icon: "ban", confirm: true },
134
+ ],
135
+ },
136
+ },
137
+ ],
138
+ },
139
+ {
140
+ // API tokens: mint (show-once secret in the result view) + inventory.
141
+ path: "/x/identity/api-tokens",
142
+ views: [
143
+ {
144
+ title: "Mint a token",
145
+ view: {
146
+ kind: "form",
147
+ schema: {
148
+ type: "object",
149
+ properties: {
150
+ name: { type: "string", description: 'A label you\'ll recognize ("CI deploys", "Claude Code")' },
151
+ scopes: {
152
+ type: "string",
153
+ description: "Comma-separated: workflows:read, workflows:write, runs:read, runs:write, deploy, admin",
154
+ },
155
+ ttlDays: { type: "string", description: "Days until expiry (empty = never)" },
156
+ },
157
+ required: ["name", "scopes"],
158
+ },
159
+ route: { method: "POST", path: PATHS.apiTokens },
160
+ },
161
+ },
162
+ {
163
+ title: "Tokens",
164
+ view: {
165
+ kind: "table",
166
+ route: { method: "GET", path: PATHS.apiTokens },
167
+ columns: [
168
+ { key: "name", label: "Name" },
169
+ { key: "scopes", label: "Scopes" },
170
+ { key: "status", label: "Status", format: "badge" },
171
+ { key: "created", label: "Created", format: "date" },
172
+ { key: "lastUsed", label: "Last used", format: "date" },
173
+ { key: "expires", label: "Expires" },
174
+ ],
175
+ rowActions: [
176
+ { label: "Revoke", route: { method: "POST", path: PATHS.apiTokenRevoke }, args: { tokenId: "id" }, icon: "ban", confirm: true },
177
+ ],
178
+ },
179
+ },
180
+ ],
92
181
  },
93
182
  {
94
183
  path: "/x/identity/sessions",
@@ -1 +1 @@
1
- {"version":3,"file":"frontend.js","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontend.js","sourceRoot":"","sources":["../src/frontend.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,9 +7,10 @@
7
7
  export { identityMod } from "./mod.js";
8
8
  export { default } from "./mod.js";
9
9
  export { resolveOptions, type IdentityOptions, type ResolvedIdentityOptions } from "./options.js";
10
- export { DefaultIdentityService, type FindOrCreateInput, type IdentityService, type IssuedToken, type LoginMethod, type MintedSession, type ResolvedSession, } from "./service.js";
10
+ export { DefaultIdentityService, API_TOKEN_PREFIX, API_TOKEN_SCOPES, type ApiTokenScope, type FindOrCreateInput, type IdentityService, type IssuedToken, type LoginMethod, type MintedApiToken, type MintedSession, type ResolvedSession, } from "./service.js";
11
11
  export { identityService, IDENTITY_SERVICE } from "./service-key.js";
12
12
  export { sessionAuthProvider, SESSION_PROVIDER_NAME } from "./auth-provider.js";
13
+ export { apiTokenAuthProvider, API_TOKEN_PROVIDER_NAME } from "./api-token-provider.js";
13
14
  export { deliverToken, absoluteUrl, DELIVER_TOKEN_HOOK, type DeliverInput, type DeliverResult } from "./deliver.js";
14
15
  export { parseCookies, serializeSessionCookie, clearSessionCookie } from "./cookies.js";
15
16
  export { isCrossSiteWrite, isStateChanging } from "./csrf.js";
@@ -19,5 +20,5 @@ export { layout, escapeHtml, safeNextPath } from "./pages/html.js";
19
20
  export { memoryIdentityStores } from "./store/memory.js";
20
21
  export { sqliteIdentityStores } from "./store/sqlite.js";
21
22
  export { KeyedMutex } from "./store/mutex.js";
22
- export { UniqueViolationError, type IdentityStores, type SessionRow, type SessionStore, type TokenPurpose, type TokenRow, type TokenStore, type UserRow, type UserStore, } from "./store/types.js";
23
+ export { UniqueViolationError, type ApiTokenRow, type ApiTokenStore, type IdentityStores, type SessionRow, type SessionStore, type TokenPurpose, type TokenRow, type TokenStore, type UserRow, type UserStore, } from "./store/types.js";
23
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EACL,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACpH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACpH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -7,9 +7,10 @@
7
7
  export { identityMod } from "./mod.js";
8
8
  export { default } from "./mod.js";
9
9
  export { resolveOptions } from "./options.js";
10
- export { DefaultIdentityService, } from "./service.js";
10
+ export { DefaultIdentityService, API_TOKEN_PREFIX, API_TOKEN_SCOPES, } from "./service.js";
11
11
  export { identityService, IDENTITY_SERVICE } from "./service-key.js";
12
12
  export { sessionAuthProvider, SESSION_PROVIDER_NAME } from "./auth-provider.js";
13
+ export { apiTokenAuthProvider, API_TOKEN_PROVIDER_NAME } from "./api-token-provider.js";
13
14
  export { deliverToken, absoluteUrl, DELIVER_TOKEN_HOOK } from "./deliver.js";
14
15
  export { parseCookies, serializeSessionCookie, clearSessionCookie } from "./cookies.js";
15
16
  export { isCrossSiteWrite, isStateChanging } from "./csrf.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAsD,MAAM,cAAc,CAAC;AAClG,OAAO,EACL,sBAAsB,GAOvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAyC,MAAM,cAAc,CAAC;AACpH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,oBAAoB,GASrB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAsD,MAAM,cAAc,CAAC;AAClG,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GASjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAyC,MAAM,cAAc,CAAC;AACpH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,oBAAoB,GAWrB,MAAM,kBAAkB,CAAC"}
package/dist/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAA+D,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAuBpE,wBAAgB,WAAW,CAAC,OAAO,GAAE,eAAoB,GAAG,UAAU,CAwDrE;AAED,+EAA+E;;AAC/E,wBAA6B"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAA+D,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAwBpE,wBAAgB,WAAW,CAAC,OAAO,GAAE,eAAoB,GAAG,UAAU,CA8DrE;AAED,+EAA+E;;AAC/E,wBAA6B"}
package/dist/mod.js CHANGED
@@ -19,6 +19,7 @@ import { AUTH_LOGIN_URL, IDENTITY_SERVICE, defineMod, z } from "@pattern-js/core
19
19
  import { resolveOptions } from "./options.js";
20
20
  import { DefaultIdentityService } from "./service.js";
21
21
  import { sessionAuthProvider } from "./auth-provider.js";
22
+ import { apiTokenAuthProvider } from "./api-token-provider.js";
22
23
  import { identityOps } from "./ops.js";
23
24
  import { endpointWorkflows } from "./workflows.js";
24
25
  import { identityAdminRoutes } from "./admin-routes.js";
@@ -50,7 +51,7 @@ export function identityMod(options = {}) {
50
51
  // Auth-page routes + the admin Access screens' dedicated routes (one
51
52
  // purposeful endpoint per screen and action, replacing the invoke path).
52
53
  workflows: [...endpointWorkflows(opts.mount), ...identityAdminRoutes()],
53
- authProviders: [sessionAuthProvider(() => service)],
54
+ authProviders: [sessionAuthProvider(() => service), apiTokenAuthProvider(() => service)],
54
55
  hooks: [
55
56
  {
56
57
  name: DELIVER_TOKEN_HOOK,
@@ -60,6 +61,11 @@ export function identityMod(options = {}) {
60
61
  url: z.string(),
61
62
  purpose: z.string(),
62
63
  delivered: z.boolean(),
64
+ /** Ready-made human copy (purpose- and expiry-aware) — any channel may use or replace it. */
65
+ subject: z.string(),
66
+ message: z.string(),
67
+ /** Token expiry (ms epoch), when the issuer knows it. */
68
+ expiresAt: z.number().optional(),
63
69
  })
64
70
  .loose(),
65
71
  },
@@ -85,7 +91,8 @@ export function identityMod(options = {}) {
85
91
  data: { roles: opts.bootstrapRoles },
86
92
  });
87
93
  const path = `${opts.mount}/bootstrap?t=${issued.token}`;
88
- const guess = `http://localhost:${process.env.PORT ?? 3000}${path}`;
94
+ const configured = process.env.PATTERN_PUBLIC_URL?.trim().replace(/\/$/, "");
95
+ const guess = configured ? `${configured}${path}` : `http://localhost:${process.env.PORT ?? 3000}${path}`;
89
96
  console.log(`\n[pattern] ◆ No users yet. Create the first admin with this one-time link (valid 24h):\n` +
90
97
  `[pattern] ${guess}\n` +
91
98
  `[pattern] (path: ${path}; adjust host/port if your app serves elsewhere)\n`);
package/dist/mod.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"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"}
package/dist/ops.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAuE9F,6EAA6E;AAC7E,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAM,CAAC;AA2bxG,eAAO,MAAM,WAAW,EAAE,YAAY,EAoBrC,CAAC"}
1
+ {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAwE9F,6EAA6E;AAC7E,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAM,CAAC;AAomBxG,eAAO,MAAM,WAAW,EAAE,YAAY,EA2BrC,CAAC"}