@hearth-auth/sdk 1.0.21 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/admin.d.ts CHANGED
@@ -36,6 +36,66 @@ export declare class AdminClient {
36
36
  updateRealm(realmId: string, params: UpdateRealmParams): Promise<Realm>;
37
37
  /** DELETE /admin/realms/:id — delete a realm. */
38
38
  deleteRealm(realmId: string): Promise<void>;
39
+ /** POST /admin/clients — register an OAuth 2.0 client. */
40
+ createClient(params: Record<string, unknown>): Promise<Record<string, unknown>>;
41
+ /** GET /admin/clients/:id — get a client by ID. */
42
+ getClient(clientId: string): Promise<Record<string, unknown>>;
43
+ /** PATCH /admin/clients/:id — update a client. */
44
+ updateClient(clientId: string, params: Record<string, unknown>): Promise<Record<string, unknown>>;
45
+ /** DELETE /admin/clients/:id — delete a client. */
46
+ deleteClient(clientId: string): Promise<void>;
47
+ /** GET /admin/clients — list clients with optional pagination. */
48
+ listClients(options?: {
49
+ limit?: number;
50
+ cursor?: string;
51
+ }): Promise<{
52
+ items: Record<string, unknown>[];
53
+ next_cursor: string | null;
54
+ }>;
55
+ /** POST /admin/roles — create a role. */
56
+ createRole(params: Record<string, unknown>): Promise<Record<string, unknown>>;
57
+ /** GET /admin/roles/:id — get a role by ID. */
58
+ getRole(roleId: string): Promise<Record<string, unknown>>;
59
+ /** PATCH /admin/roles/:id — update a role. */
60
+ updateRole(roleId: string, params: Record<string, unknown>): Promise<Record<string, unknown>>;
61
+ /** DELETE /admin/roles/:id — delete a role. */
62
+ deleteRole(roleId: string): Promise<void>;
63
+ /** GET /admin/roles — list roles with optional pagination. */
64
+ listRoles(options?: {
65
+ limit?: number;
66
+ cursor?: string;
67
+ }): Promise<{
68
+ items: Record<string, unknown>[];
69
+ next_cursor: string | null;
70
+ }>;
71
+ /** POST /admin/groups — create a group. */
72
+ createGroup(params: Record<string, unknown>): Promise<Record<string, unknown>>;
73
+ /** GET /admin/groups/:id — get a group by ID. */
74
+ getGroup(groupId: string): Promise<Record<string, unknown>>;
75
+ /** PATCH /admin/groups/:id — update a group. */
76
+ updateGroup(groupId: string, params: Record<string, unknown>): Promise<Record<string, unknown>>;
77
+ /** DELETE /admin/groups/:id — delete a group. */
78
+ deleteGroup(groupId: string): Promise<void>;
79
+ /** GET /admin/groups — list groups with optional pagination. */
80
+ listGroups(options?: {
81
+ limit?: number;
82
+ cursor?: string;
83
+ }): Promise<{
84
+ items: Record<string, unknown>[];
85
+ next_cursor: string | null;
86
+ }>;
87
+ /** POST /admin/orgs/:orgId/members — add a member to an organization. */
88
+ addOrgMember(orgId: string, params: Record<string, unknown>): Promise<Record<string, unknown>>;
89
+ /** GET /admin/orgs/:orgId/members — list members of an organization. */
90
+ listOrgMembers(orgId: string, options?: {
91
+ limit?: number;
92
+ cursor?: string;
93
+ }): Promise<{
94
+ items: Record<string, unknown>[];
95
+ next_cursor: string | null;
96
+ }>;
97
+ /** DELETE /admin/orgs/:orgId/members/:userId — remove a member from an organization. */
98
+ removeOrgMember(orgId: string, userId: string): Promise<void>;
39
99
  private headers;
40
100
  private get;
41
101
  private post;
package/dist/admin.js CHANGED
@@ -92,6 +92,130 @@ export class AdminClient {
92
92
  throw new HearthError(resp.status, await resp.json());
93
93
  }
94
94
  }
95
+ // === OAuth Clients ===
96
+ /** POST /admin/clients — register an OAuth 2.0 client. */
97
+ async createClient(params) {
98
+ return this.post("/admin/clients", params);
99
+ }
100
+ /** GET /admin/clients/:id — get a client by ID. */
101
+ async getClient(clientId) {
102
+ return this.get(`/admin/clients/${clientId}`);
103
+ }
104
+ /** PATCH /admin/clients/:id — update a client. */
105
+ async updateClient(clientId, params) {
106
+ return this.request("PATCH", `/admin/clients/${clientId}`, params);
107
+ }
108
+ /** DELETE /admin/clients/:id — delete a client. */
109
+ async deleteClient(clientId) {
110
+ const resp = await fetch(`${this.baseUrl}/admin/clients/${clientId}`, {
111
+ method: "DELETE",
112
+ headers: this.headers(),
113
+ });
114
+ if (!resp.ok) {
115
+ throw new HearthError(resp.status, await resp.json());
116
+ }
117
+ }
118
+ /** GET /admin/clients — list clients with optional pagination. */
119
+ async listClients(options) {
120
+ const q = new URLSearchParams();
121
+ if (options?.limit)
122
+ q.set("limit", String(options.limit));
123
+ if (options?.cursor)
124
+ q.set("cursor", options.cursor);
125
+ const qs = q.toString();
126
+ return this.get(`/admin/clients${qs ? `?${qs}` : ""}`);
127
+ }
128
+ // === Roles ===
129
+ /** POST /admin/roles — create a role. */
130
+ async createRole(params) {
131
+ return this.post("/admin/roles", params);
132
+ }
133
+ /** GET /admin/roles/:id — get a role by ID. */
134
+ async getRole(roleId) {
135
+ return this.get(`/admin/roles/${roleId}`);
136
+ }
137
+ /** PATCH /admin/roles/:id — update a role. */
138
+ async updateRole(roleId, params) {
139
+ return this.request("PATCH", `/admin/roles/${roleId}`, params);
140
+ }
141
+ /** DELETE /admin/roles/:id — delete a role. */
142
+ async deleteRole(roleId) {
143
+ const resp = await fetch(`${this.baseUrl}/admin/roles/${roleId}`, {
144
+ method: "DELETE",
145
+ headers: this.headers(),
146
+ });
147
+ if (!resp.ok) {
148
+ throw new HearthError(resp.status, await resp.json());
149
+ }
150
+ }
151
+ /** GET /admin/roles — list roles with optional pagination. */
152
+ async listRoles(options) {
153
+ const q = new URLSearchParams();
154
+ if (options?.limit)
155
+ q.set("limit", String(options.limit));
156
+ if (options?.cursor)
157
+ q.set("cursor", options.cursor);
158
+ const qs = q.toString();
159
+ return this.get(`/admin/roles${qs ? `?${qs}` : ""}`);
160
+ }
161
+ // === Groups ===
162
+ /** POST /admin/groups — create a group. */
163
+ async createGroup(params) {
164
+ return this.post("/admin/groups", params);
165
+ }
166
+ /** GET /admin/groups/:id — get a group by ID. */
167
+ async getGroup(groupId) {
168
+ return this.get(`/admin/groups/${groupId}`);
169
+ }
170
+ /** PATCH /admin/groups/:id — update a group. */
171
+ async updateGroup(groupId, params) {
172
+ return this.request("PATCH", `/admin/groups/${groupId}`, params);
173
+ }
174
+ /** DELETE /admin/groups/:id — delete a group. */
175
+ async deleteGroup(groupId) {
176
+ const resp = await fetch(`${this.baseUrl}/admin/groups/${groupId}`, {
177
+ method: "DELETE",
178
+ headers: this.headers(),
179
+ });
180
+ if (!resp.ok) {
181
+ throw new HearthError(resp.status, await resp.json());
182
+ }
183
+ }
184
+ /** GET /admin/groups — list groups with optional pagination. */
185
+ async listGroups(options) {
186
+ const q = new URLSearchParams();
187
+ if (options?.limit)
188
+ q.set("limit", String(options.limit));
189
+ if (options?.cursor)
190
+ q.set("cursor", options.cursor);
191
+ const qs = q.toString();
192
+ return this.get(`/admin/groups${qs ? `?${qs}` : ""}`);
193
+ }
194
+ // === Org Members ===
195
+ /** POST /admin/orgs/:orgId/members — add a member to an organization. */
196
+ async addOrgMember(orgId, params) {
197
+ return this.post(`/admin/orgs/${orgId}/members`, params);
198
+ }
199
+ /** GET /admin/orgs/:orgId/members — list members of an organization. */
200
+ async listOrgMembers(orgId, options) {
201
+ const q = new URLSearchParams();
202
+ if (options?.limit)
203
+ q.set("limit", String(options.limit));
204
+ if (options?.cursor)
205
+ q.set("cursor", options.cursor);
206
+ const qs = q.toString();
207
+ return this.get(`/admin/orgs/${orgId}/members${qs ? `?${qs}` : ""}`);
208
+ }
209
+ /** DELETE /admin/orgs/:orgId/members/:userId — remove a member from an organization. */
210
+ async removeOrgMember(orgId, userId) {
211
+ const resp = await fetch(`${this.baseUrl}/admin/orgs/${orgId}/members/${userId}`, {
212
+ method: "DELETE",
213
+ headers: this.headers(),
214
+ });
215
+ if (!resp.ok) {
216
+ throw new HearthError(resp.status, await resp.json());
217
+ }
218
+ }
95
219
  headers() {
96
220
  return {
97
221
  "X-Realm-ID": this.realmId,
package/dist/admin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW1C;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IAEH;IACA;IACA;IAHnB,YACmB,OAAe,EACf,OAAe,EACf,WAAmB;QAFnB,YAAO,GAAP,OAAO,CAAQ;QACf,YAAO,GAAP,OAAO,CAAQ;QACf,gBAAW,GAAX,WAAW,CAAQ;IACnC,CAAC;IAEJ,gBAAgB;IAEhB,yCAAyC;IACzC,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,WAAW;SACjC,CAAC,CAAC;IACL,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,SAAS,CAAC,OAGf;QACC,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,MAAwB;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,MAAM,EAAE,EAAE;YACrD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,MAAM,EAAE,EAAE;YAChE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,iBAAiB;IAEjB,2CAA2C;IAC3C,KAAK,CAAC,WAAW,CAAC,MAAyB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAChC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,UAAU,CAAC,OAGhB;QACC,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,WAAW,CACf,OAAe,EACf,MAAyB;QAEzB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,OAAO,EAAE,EAAE;YACvD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,OAAO,EAAE,EAAE;YAClE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,wBAAwB;IAExB,0DAA0D;IAC1D,KAAK,CAAC,YAAY,CAAC,MAA+B;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,MAA+B;QAClE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,QAAQ,EAAE,EAAE;YACpE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,WAAW,CAAC,OAA6C;QAC7D,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,gBAAgB;IAEhB,yCAAyC;IACzC,KAAK,CAAC,UAAU,CAAC,MAA+B;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,MAA+B;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,MAAM,EAAE,EAAE;YAChE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,SAAS,CAAC,OAA6C;QAC3D,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,iBAAiB;IAEjB,2CAA2C;IAC3C,KAAK,CAAC,WAAW,CAAC,MAA+B;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,MAA+B;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,OAAO,EAAE,EAAE;YAClE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,UAAU,CAAC,OAA6C;QAC5D,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,sBAAsB;IAEtB,yEAAyE;IACzE,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,MAA+B;QAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,OAA6C;QAC/E,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,wFAAwF;IACxF,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,MAAc;QACjD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,eAAe,KAAK,YAAY,MAAM,EAAE,EAAE;YAChF,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAEO,OAAO;QACb,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,OAAO;YAC1B,aAAa,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;YAC3C,cAAc,EAAE,kBAAkB;SACnC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,GAAG,CAAI,IAAY;QAC/B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACjD,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,EAAgB,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAa;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAa;QAEb,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACjD,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,EAAgB,CAAC;IACnC,CAAC;CACF"}
package/dist/errors.d.ts CHANGED
@@ -70,6 +70,21 @@ export declare class IntrospectionError extends HearthSdkError {
70
70
  readonly cause?: unknown | undefined;
71
71
  constructor(message: string, cause?: unknown | undefined);
72
72
  }
73
+ /**
74
+ * Thrown when an OAuth 2.0 token-endpoint request (code exchange, client credentials,
75
+ * device flow, magic-link, etc.) returns a non-2xx HTTP response.
76
+ */
77
+ export declare class OAuthFlowError extends HearthSdkError {
78
+ /** HTTP status code returned by the server; 0 for network-level failures. */
79
+ readonly statusCode: number;
80
+ /** OAuth error code from the response body, or a summary message. */
81
+ readonly errorCode: string;
82
+ constructor(
83
+ /** HTTP status code returned by the server; 0 for network-level failures. */
84
+ statusCode: number,
85
+ /** OAuth error code from the response body, or a summary message. */
86
+ errorCode: string, message?: string);
87
+ }
73
88
  /**
74
89
  * Thrown when the `mode` field echoed in an introspection response does not
75
90
  * match the SDK's configured `expectedMode`.
package/dist/errors.js CHANGED
@@ -102,6 +102,23 @@ export class IntrospectionError extends HearthSdkError {
102
102
  this.cause = cause;
103
103
  }
104
104
  }
105
+ /**
106
+ * Thrown when an OAuth 2.0 token-endpoint request (code exchange, client credentials,
107
+ * device flow, magic-link, etc.) returns a non-2xx HTTP response.
108
+ */
109
+ export class OAuthFlowError extends HearthSdkError {
110
+ statusCode;
111
+ errorCode;
112
+ constructor(
113
+ /** HTTP status code returned by the server; 0 for network-level failures. */
114
+ statusCode,
115
+ /** OAuth error code from the response body, or a summary message. */
116
+ errorCode, message = `OAuth flow error ${statusCode}: ${errorCode}`) {
117
+ super(message);
118
+ this.statusCode = statusCode;
119
+ this.errorCode = errorCode;
120
+ }
121
+ }
105
122
  /**
106
123
  * Thrown when the `mode` field echoed in an introspection response does not
107
124
  * match the SDK's configured `expectedMode`.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { JwksClient } from "./jwks-client.js";
2
2
  import { IntrospectionClient, type IntrospectionResult } from "./introspection-client.js";
3
- import type { AccessTokenAuthorizationMode, AuthorizePermissionOptions } from "./types.js";
3
+ import type { AccessTokenAuthorizationMode, AuthorizePermissionOptions, DeviceAuthorizationResponse, TokenResponse } from "./types.js";
4
+ import { Claims } from "./claims.js";
4
5
  /** Configuration for {@link HearthClient}. */
5
6
  export interface HearthClientConfig {
6
7
  /**
@@ -129,5 +130,69 @@ export declare class HearthClient {
129
130
  * @throws {@link AuthorizationModeMismatchError} on mode echo mismatch.
130
131
  */
131
132
  introspect(token: string): Promise<IntrospectionResult>;
133
+ /**
134
+ * Verify a JWT using JWKS-backed EdDSA/Ed25519 local signature verification (spec §2).
135
+ *
136
+ * Performs all five mandatory validation steps in order:
137
+ * 1. Signature against the JWKS endpoint (EdDSA/OKP/Ed25519 required; RS256/ES256 accepted).
138
+ * 2. `exp` claim (rejects expired tokens).
139
+ * 3. `iss` claim (must match configured `issuerUrl`).
140
+ * 4. `aud` claim (validated when `clientId` is set in config).
141
+ * 5. `iat` claim (within 60-second clock skew tolerance).
142
+ *
143
+ * @throws {@link TokenExpiredError} — token is expired.
144
+ * @throws {@link TokenInvalidError} — signature invalid or JWT malformed.
145
+ * @throws {@link TokenIssuerError} — issuer does not match `issuerUrl`.
146
+ * @throws {@link TokenAudienceError} — audience does not include `clientId`.
147
+ * @throws {@link JWKSFetchError} — JWKS endpoint unreachable.
148
+ */
149
+ verifyToken(token: string): Promise<Claims>;
150
+ /**
151
+ * Obtain a token via the Client Credentials grant (RFC 6749 §4.4).
152
+ *
153
+ * Sends `client_id` and `client_secret` as `application/x-www-form-urlencoded`
154
+ * body fields — NEVER as URL query parameters. The token endpoint is discovered
155
+ * from the OIDC discovery document.
156
+ *
157
+ * @throws {@link OAuthFlowError} on any non-2xx response.
158
+ */
159
+ clientCredentials(scope?: string): Promise<TokenResponse>;
160
+ /**
161
+ * Begin a Device Authorization Flow (RFC 8628 §3.1).
162
+ *
163
+ * Returns the `device_code`, `user_code`, `verification_uri`, and polling `interval`.
164
+ * Pass the returned `device_code` and `interval` to `pollDeviceToken()` to await approval.
165
+ *
166
+ * @throws {@link ConfigurationError} when `device_authorization_endpoint` is absent.
167
+ * @throws {@link OAuthFlowError} on any non-2xx response.
168
+ */
169
+ startDeviceFlow(scope?: string): Promise<DeviceAuthorizationResponse>;
170
+ /**
171
+ * Poll the token endpoint until the device flow completes (RFC 8628 §3.5).
172
+ *
173
+ * Handles `authorization_pending` by continuing to poll transparently.
174
+ * Handles `slow_down` by increasing the interval by 5 s per occurrence.
175
+ * Throws `TokenExpiredError` when the device code expires (`expired_token`).
176
+ *
177
+ * @param deviceCode - The `device_code` from `startDeviceFlow()`.
178
+ * @param intervalSeconds - Initial polling interval (from `startDeviceFlow().interval`).
179
+ * @throws {@link TokenExpiredError} — device code has expired.
180
+ * @throws {@link OAuthFlowError} — non-recoverable error from the server.
181
+ */
182
+ pollDeviceToken(deviceCode: string, intervalSeconds: number): Promise<TokenResponse>;
183
+ /**
184
+ * Request a magic-link / passwordless authentication email (spec §4.5.3).
185
+ *
186
+ * Always resolves silently on HTTP 202 — per enumeration-resistance requirements,
187
+ * the server always returns 202 whether or not the email is registered.
188
+ * HTTP 429 (rate limit) and other non-2xx responses throw `OAuthFlowError`.
189
+ *
190
+ * Requires `realmId` in `HearthClientConfig`.
191
+ *
192
+ * @throws {@link ConfigurationError} when `realmId` is absent.
193
+ * @throws {@link OAuthFlowError} on non-2xx response.
194
+ */
195
+ requestMagicLink(email: string): Promise<void>;
196
+ private postForm;
132
197
  }
133
198
  export {};
@@ -1,4 +1,4 @@
1
- import { AuthorizationModeMismatchError, ConfigurationError, DiscoveryError, } from "./errors.js";
1
+ import { AuthorizationModeMismatchError, ConfigurationError, DiscoveryError, OAuthFlowError, TokenExpiredError, } from "./errors.js";
2
2
  import { JwksClient } from "./jwks-client.js";
3
3
  import { IntrospectionClient, } from "./introspection-client.js";
4
4
  /**
@@ -188,5 +188,180 @@ export class HearthClient {
188
188
  }
189
189
  return result;
190
190
  }
191
+ // ── §2 — Token Verification (EdDSA/Ed25519) ─────────────────────────────
192
+ /**
193
+ * Verify a JWT using JWKS-backed EdDSA/Ed25519 local signature verification (spec §2).
194
+ *
195
+ * Performs all five mandatory validation steps in order:
196
+ * 1. Signature against the JWKS endpoint (EdDSA/OKP/Ed25519 required; RS256/ES256 accepted).
197
+ * 2. `exp` claim (rejects expired tokens).
198
+ * 3. `iss` claim (must match configured `issuerUrl`).
199
+ * 4. `aud` claim (validated when `clientId` is set in config).
200
+ * 5. `iat` claim (within 60-second clock skew tolerance).
201
+ *
202
+ * @throws {@link TokenExpiredError} — token is expired.
203
+ * @throws {@link TokenInvalidError} — signature invalid or JWT malformed.
204
+ * @throws {@link TokenIssuerError} — issuer does not match `issuerUrl`.
205
+ * @throws {@link TokenAudienceError} — audience does not include `clientId`.
206
+ * @throws {@link JWKSFetchError} — JWKS endpoint unreachable.
207
+ */
208
+ async verifyToken(token) {
209
+ const jc = await this.jwksClient();
210
+ return jc.verify(token, {
211
+ issuer: this.issuerUrl,
212
+ audience: this.clientId,
213
+ });
214
+ }
215
+ // ── §4.5 — OAuth Flows ───────────────────────────────────────────────────
216
+ /**
217
+ * Obtain a token via the Client Credentials grant (RFC 6749 §4.4).
218
+ *
219
+ * Sends `client_id` and `client_secret` as `application/x-www-form-urlencoded`
220
+ * body fields — NEVER as URL query parameters. The token endpoint is discovered
221
+ * from the OIDC discovery document.
222
+ *
223
+ * @throws {@link OAuthFlowError} on any non-2xx response.
224
+ */
225
+ async clientCredentials(scope) {
226
+ const doc = await this.discover();
227
+ const tokenEndpoint = doc["token_endpoint"];
228
+ if (!tokenEndpoint) {
229
+ throw new ConfigurationError("token_endpoint not found in OIDC discovery document");
230
+ }
231
+ const params = {
232
+ grant_type: "client_credentials",
233
+ client_id: this.clientId ?? "",
234
+ client_secret: this.clientSecret ?? "",
235
+ };
236
+ if (scope !== undefined)
237
+ params.scope = scope;
238
+ return this.postForm(tokenEndpoint, params);
239
+ }
240
+ /**
241
+ * Begin a Device Authorization Flow (RFC 8628 §3.1).
242
+ *
243
+ * Returns the `device_code`, `user_code`, `verification_uri`, and polling `interval`.
244
+ * Pass the returned `device_code` and `interval` to `pollDeviceToken()` to await approval.
245
+ *
246
+ * @throws {@link ConfigurationError} when `device_authorization_endpoint` is absent.
247
+ * @throws {@link OAuthFlowError} on any non-2xx response.
248
+ */
249
+ async startDeviceFlow(scope) {
250
+ const doc = await this.discover();
251
+ const deviceEndpoint = doc["device_authorization_endpoint"];
252
+ if (!deviceEndpoint) {
253
+ throw new ConfigurationError("device_authorization_endpoint not found in OIDC discovery document");
254
+ }
255
+ const params = { client_id: this.clientId ?? "" };
256
+ if (scope !== undefined)
257
+ params.scope = scope;
258
+ return this.postForm(deviceEndpoint, params);
259
+ }
260
+ /**
261
+ * Poll the token endpoint until the device flow completes (RFC 8628 §3.5).
262
+ *
263
+ * Handles `authorization_pending` by continuing to poll transparently.
264
+ * Handles `slow_down` by increasing the interval by 5 s per occurrence.
265
+ * Throws `TokenExpiredError` when the device code expires (`expired_token`).
266
+ *
267
+ * @param deviceCode - The `device_code` from `startDeviceFlow()`.
268
+ * @param intervalSeconds - Initial polling interval (from `startDeviceFlow().interval`).
269
+ * @throws {@link TokenExpiredError} — device code has expired.
270
+ * @throws {@link OAuthFlowError} — non-recoverable error from the server.
271
+ */
272
+ async pollDeviceToken(deviceCode, intervalSeconds) {
273
+ const doc = await this.discover();
274
+ const tokenEndpoint = doc["token_endpoint"];
275
+ if (!tokenEndpoint) {
276
+ throw new ConfigurationError("token_endpoint not found in OIDC discovery document");
277
+ }
278
+ let currentIntervalMs = intervalSeconds * 1000;
279
+ // Use while(true) + await-setTimeout so Vitest fake timers can control polling in tests.
280
+ // eslint-disable-next-line no-constant-condition
281
+ while (true) {
282
+ await new Promise((res) => setTimeout(res, currentIntervalMs));
283
+ const body = new URLSearchParams({
284
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
285
+ device_code: deviceCode,
286
+ client_id: this.clientId ?? "",
287
+ }).toString();
288
+ const resp = await fetch(tokenEndpoint, {
289
+ method: "POST",
290
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
291
+ body,
292
+ });
293
+ if (resp.ok) {
294
+ return resp.json();
295
+ }
296
+ let errorCode = "unknown";
297
+ try {
298
+ const parsed = (await resp.json());
299
+ errorCode = typeof parsed["error"] === "string" ? parsed["error"] : "unknown";
300
+ }
301
+ catch { /* ignore parse failures */ }
302
+ if (errorCode === "authorization_pending") {
303
+ continue;
304
+ }
305
+ else if (errorCode === "slow_down") {
306
+ currentIntervalMs += 5000;
307
+ continue;
308
+ }
309
+ else if (errorCode === "expired_token") {
310
+ throw new TokenExpiredError(new Date());
311
+ }
312
+ else {
313
+ throw new OAuthFlowError(resp.status, errorCode);
314
+ }
315
+ }
316
+ }
317
+ /**
318
+ * Request a magic-link / passwordless authentication email (spec §4.5.3).
319
+ *
320
+ * Always resolves silently on HTTP 202 — per enumeration-resistance requirements,
321
+ * the server always returns 202 whether or not the email is registered.
322
+ * HTTP 429 (rate limit) and other non-2xx responses throw `OAuthFlowError`.
323
+ *
324
+ * Requires `realmId` in `HearthClientConfig`.
325
+ *
326
+ * @throws {@link ConfigurationError} when `realmId` is absent.
327
+ * @throws {@link OAuthFlowError} on non-2xx response.
328
+ */
329
+ async requestMagicLink(email) {
330
+ if (!this.realmId) {
331
+ throw new ConfigurationError("realmId is required for requestMagicLink");
332
+ }
333
+ const url = `${this.issuerUrl}/v1/${this.realmId}/auth/magic-link`;
334
+ const resp = await fetch(url, {
335
+ method: "POST",
336
+ headers: { "Content-Type": "application/json" },
337
+ body: JSON.stringify({ email }),
338
+ signal: AbortSignal.timeout(this.httpTimeout),
339
+ });
340
+ if (resp.status === 202)
341
+ return;
342
+ if (!resp.ok) {
343
+ throw new OAuthFlowError(resp.status, `HTTP ${resp.status}`);
344
+ }
345
+ }
346
+ // ── Private helpers ──────────────────────────────────────────────────────
347
+ async postForm(endpoint, params) {
348
+ const resp = await fetch(endpoint, {
349
+ method: "POST",
350
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
351
+ body: new URLSearchParams(params).toString(),
352
+ signal: AbortSignal.timeout(this.httpTimeout),
353
+ });
354
+ if (!resp.ok) {
355
+ let errorCode = `HTTP ${resp.status}`;
356
+ try {
357
+ const parsed = (await resp.json());
358
+ if (typeof parsed["error"] === "string")
359
+ errorCode = parsed["error"];
360
+ }
361
+ catch { /* ignore */ }
362
+ throw new OAuthFlowError(resp.status, errorCode);
363
+ }
364
+ return resp.json();
365
+ }
191
366
  }
192
367
  //# sourceMappingURL=hearth-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hearth-client.js","sourceRoot":"","sources":["../src/hearth-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hearth-client.js","sourceRoot":"","sources":["../src/hearth-client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,10 +3,10 @@ export { generateCodeVerifier, generateCodeChallenge, buildAuthorizationUrl, sta
3
3
  export type { BuildAuthorizationUrlOptions, AuthorizationUrlResult, StartLoginOptions, StartLoginResult, } from "./pkce.js";
4
4
  export type { HearthClientConfig } from "./hearth-client.js";
5
5
  export { JwksClient } from "./jwks-client.js";
6
- export type { JwksClientConfig } from "./jwks-client.js";
6
+ export type { JwksClientConfig, VerifyOptions } from "./jwks-client.js";
7
7
  export { IntrospectionClient } from "./introspection-client.js";
8
8
  export type { IntrospectionClientConfig, IntrospectionResult, } from "./introspection-client.js";
9
- export { AuthorizationModeMismatchError, ConfigurationError, DiscoveryError, HearthSdkError, IntrospectionError, JWKSFetchError, RequiredActionError, SessionVersionCacheStaleError, SessionVersionRevokedError, TokenAudienceError, TokenExpiredError, TokenInvalidError, TokenIssuerError, TokenNotYetValidError, } from "./errors.js";
9
+ export { AuthorizationModeMismatchError, ConfigurationError, DiscoveryError, HearthSdkError, IntrospectionError, JWKSFetchError, OAuthFlowError, RequiredActionError, SessionVersionCacheStaleError, SessionVersionRevokedError, TokenAudienceError, TokenExpiredError, TokenInvalidError, TokenIssuerError, TokenNotYetValidError, } from "./errors.js";
10
10
  export { requirePermission } from "./middleware.js";
11
11
  export type { PermissionChecker, RequirePermissionOptions } from "./middleware.js";
12
12
  export { Claims } from "./claims.js";
@@ -17,7 +17,7 @@ export { createHearth } from "./hearth.js";
17
17
  export type { HearthFacade, HearthHttpClient, HearthOptions, } from "./hearth.js";
18
18
  export { HearthContext, HearthProvider, useHasPermission, useHasRole, useInGroup, useInOrg, } from "./react.js";
19
19
  export type { HearthProviderProps } from "./react.js";
20
- export type { AccessTokenAuthorizationMode, AuthorizeParams, AuthorizePermissionOptions, AuthorizeResponse, BootstrapResponse, CreateRealmParams, CreateUserParams, JwksDocument, JsonWebKey, MePermissionsResponse, OAuthClient, PageResponse, RegisterClientParams, Realm, SessionVersionConfig, TokenExchangeParams, TokenResponse, UpdateRealmParams, UpdateUserParams, User, UserInfoResponse, } from "./types.js";
20
+ export type { AccessTokenAuthorizationMode, AuthorizeParams, AuthorizePermissionOptions, AuthorizeResponse, BootstrapResponse, CreateRealmParams, CreateUserParams, JwksDocument, JsonWebKey, MePermissionsResponse, OAuthClient, PageResponse, RegisterClientParams, Realm, SessionVersionConfig, TokenExchangeParams, DeviceAuthorizationResponse, TokenResponse, UpdateRealmParams, UpdateUserParams, User, UserInfoResponse, } from "./types.js";
21
21
  export { SessionVersionCache } from "./session-version-cache.js";
22
22
  export { getAccessToken, getRefreshToken, getIdToken, isAuthenticated, clearTokens, createHearthAuth, } from "./browser-auth.js";
23
23
  export type { AuthConfig, HearthBrowserAuth } from "./browser-auth.js";
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ export { generateCodeVerifier, generateCodeChallenge, buildAuthorizationUrl, sta
6
6
  export { JwksClient } from "./jwks-client.js";
7
7
  export { IntrospectionClient } from "./introspection-client.js";
8
8
  // Error types (spec §5).
9
- export { AuthorizationModeMismatchError, ConfigurationError, DiscoveryError, HearthSdkError, IntrospectionError, JWKSFetchError, RequiredActionError, SessionVersionCacheStaleError, SessionVersionRevokedError, TokenAudienceError, TokenExpiredError, TokenInvalidError, TokenIssuerError, TokenNotYetValidError, } from "./errors.js";
9
+ export { AuthorizationModeMismatchError, ConfigurationError, DiscoveryError, HearthSdkError, IntrospectionError, JWKSFetchError, OAuthFlowError, RequiredActionError, SessionVersionCacheStaleError, SessionVersionRevokedError, TokenAudienceError, TokenExpiredError, TokenInvalidError, TokenIssuerError, TokenNotYetValidError, } from "./errors.js";
10
10
  // Mode-aware middleware (HEA-923).
11
11
  export { requirePermission } from "./middleware.js";
12
12
  // Claims API (spec §4).
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,GACX,MAAM,WAAW,CAAC;AASnB,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMhE,yBAAyB;AACzB,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,mCAAmC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,wBAAwB;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,6DAA6D;AAC7D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,GACT,MAAM,YAAY,CAAC;AAyBpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,0DAA0D;AAC1D,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,EACX,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,GACX,MAAM,WAAW,CAAC;AASnB,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMhE,yBAAyB;AACzB,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,mCAAmC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,wBAAwB;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,6DAA6D;AAC7D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,GACT,MAAM,YAAY,CAAC;AA0BpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,0DAA0D;AAC1D,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,EACX,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
@@ -1,4 +1,14 @@
1
1
  import type { JsonWebKey } from "./types.js";
2
+ import { Claims } from "./claims.js";
3
+ /** Options for {@link JwksClient.verify}. */
4
+ export interface VerifyOptions {
5
+ /** Expected `iss` claim. When provided, verification fails if the token's issuer differs. */
6
+ issuer?: string;
7
+ /** Expected `aud` claim(s). Skipped when absent. */
8
+ audience?: string | string[];
9
+ /** Clock skew tolerance in seconds. Default: 60. */
10
+ clockSkewSeconds?: number;
11
+ }
2
12
  /** Configuration for {@link JwksClient}. */
3
13
  export interface JwksClientConfig {
4
14
  /** URL of the JWKS endpoint (e.g. from OIDC discovery `jwks_uri`). */
@@ -6,23 +16,46 @@ export interface JwksClientConfig {
6
16
  /**
7
17
  * Override cache TTL in milliseconds.
8
18
  * When absent, the client respects `Cache-Control: max-age` from the JWKS
9
- * response and falls back to 5 minutes.
19
+ * response and falls back to 5 minutes (300 000 ms).
10
20
  */
11
21
  ttl?: number;
12
22
  /** Timeout for outbound HTTP calls in milliseconds. Default: 10 000. */
13
23
  httpTimeout?: number;
14
24
  }
15
25
  /**
16
- * Low-level JWKS fetcher.
26
+ * JWKS-backed JWT verifier with key caching, automatic key rotation,
27
+ * and full EdDSA / Ed25519 signature verification (spec §2).
17
28
  *
18
- * Fetches the JSON Web Key Set from the configured endpoint.
19
- * Full caching and rotation logic will be added in §2.
29
+ * Uses `fetchKeys()` (global `fetch`) to retrieve JWKS, then builds a local
30
+ * key set via `createLocalJWKSet`. This makes the JWKS fetch mockable in tests.
31
+ * Keys are cached for `ttl` milliseconds; on a key miss the JWKS is re-fetched once.
20
32
  */
21
33
  export declare class JwksClient {
22
34
  private readonly jwksUri;
23
35
  readonly ttl: number | undefined;
24
36
  readonly httpTimeout: number;
37
+ /** Cached local key set and when it was fetched. */
38
+ private _cache;
25
39
  constructor(config: JwksClientConfig);
40
+ private getKeySet;
41
+ /**
42
+ * Verify a JWT using Ed25519/EdDSA JWKS-based local signature verification (spec §2).
43
+ *
44
+ * Executes all five spec §2 validation steps in order:
45
+ * 1. Signature against cached JWKS (EdDSA / RS256 / ES256).
46
+ * 2. `exp` — rejects expired tokens.
47
+ * 3. `iss` — when `options.issuer` is provided.
48
+ * 4. `aud` — when `options.audience` is provided.
49
+ * 5. `iat` — within clock skew tolerance.
50
+ *
51
+ * @throws {@link TokenExpiredError} when the token is expired.
52
+ * @throws {@link TokenInvalidError} when the signature or structure is invalid.
53
+ * @throws {@link TokenIssuerError} when the issuer does not match.
54
+ * @throws {@link TokenAudienceError} when the audience does not match.
55
+ * @throws {@link JWKSFetchError} when the JWKS endpoint cannot be reached.
56
+ */
57
+ verify(token: string, options?: VerifyOptions): Promise<Claims>;
58
+ private mapJoseError;
26
59
  /** Fetch the current JWKS keys from the endpoint. */
27
60
  fetchKeys(): Promise<JsonWebKey[]>;
28
61
  }
@@ -1,25 +1,120 @@
1
+ import { createLocalJWKSet, jwtVerify, errors as joseErrors, } from "jose";
2
+ import { Claims } from "./claims.js";
3
+ import { JWKSFetchError, TokenExpiredError, TokenInvalidError, TokenIssuerError, TokenAudienceError, } from "./errors.js";
1
4
  /**
2
- * Low-level JWKS fetcher.
5
+ * JWKS-backed JWT verifier with key caching, automatic key rotation,
6
+ * and full EdDSA / Ed25519 signature verification (spec §2).
3
7
  *
4
- * Fetches the JSON Web Key Set from the configured endpoint.
5
- * Full caching and rotation logic will be added in §2.
8
+ * Uses `fetchKeys()` (global `fetch`) to retrieve JWKS, then builds a local
9
+ * key set via `createLocalJWKSet`. This makes the JWKS fetch mockable in tests.
10
+ * Keys are cached for `ttl` milliseconds; on a key miss the JWKS is re-fetched once.
6
11
  */
7
12
  export class JwksClient {
8
13
  jwksUri;
9
14
  ttl;
10
15
  httpTimeout;
16
+ /** Cached local key set and when it was fetched. */
17
+ _cache = null;
11
18
  constructor(config) {
12
19
  this.jwksUri = config.jwksUri;
13
20
  this.ttl = config.ttl;
14
21
  this.httpTimeout = config.httpTimeout ?? 10_000;
15
22
  }
23
+ async getKeySet(forceRefresh = false) {
24
+ const now = Date.now();
25
+ const maxAge = this.ttl ?? 5 * 60 * 1000;
26
+ if (!forceRefresh && this._cache && (now - this._cache.fetchedAt) < maxAge) {
27
+ return this._cache.keySet;
28
+ }
29
+ const keys = await this.fetchKeys();
30
+ const keySet = createLocalJWKSet({ keys: keys });
31
+ this._cache = { keySet: keySet, fetchedAt: now };
32
+ return keySet;
33
+ }
34
+ /**
35
+ * Verify a JWT using Ed25519/EdDSA JWKS-based local signature verification (spec §2).
36
+ *
37
+ * Executes all five spec §2 validation steps in order:
38
+ * 1. Signature against cached JWKS (EdDSA / RS256 / ES256).
39
+ * 2. `exp` — rejects expired tokens.
40
+ * 3. `iss` — when `options.issuer` is provided.
41
+ * 4. `aud` — when `options.audience` is provided.
42
+ * 5. `iat` — within clock skew tolerance.
43
+ *
44
+ * @throws {@link TokenExpiredError} when the token is expired.
45
+ * @throws {@link TokenInvalidError} when the signature or structure is invalid.
46
+ * @throws {@link TokenIssuerError} when the issuer does not match.
47
+ * @throws {@link TokenAudienceError} when the audience does not match.
48
+ * @throws {@link JWKSFetchError} when the JWKS endpoint cannot be reached.
49
+ */
50
+ async verify(token, options) {
51
+ const clockTolerance = options?.clockSkewSeconds ?? 60;
52
+ let keySet = await this.getKeySet();
53
+ const doVerify = async (ks) => {
54
+ const { payload } = await jwtVerify(token, ks, {
55
+ issuer: options?.issuer,
56
+ audience: options?.audience,
57
+ algorithms: ["EdDSA", "RS256", "ES256", "RS384", "ES384"],
58
+ clockTolerance,
59
+ });
60
+ return new Claims(payload);
61
+ };
62
+ try {
63
+ return await doVerify(keySet);
64
+ }
65
+ catch (firstErr) {
66
+ if (firstErr instanceof joseErrors.JWKSNoMatchingKey) {
67
+ // Key miss — re-fetch once to handle key rotation, then retry.
68
+ keySet = await this.getKeySet(true);
69
+ try {
70
+ return await doVerify(keySet);
71
+ }
72
+ catch (retryErr) {
73
+ return this.mapJoseError(retryErr, options);
74
+ }
75
+ }
76
+ return this.mapJoseError(firstErr, options);
77
+ }
78
+ }
79
+ mapJoseError(err, options) {
80
+ if (err instanceof joseErrors.JWTExpired) {
81
+ const exp = err.payload?.exp;
82
+ throw new TokenExpiredError(exp ? new Date(exp * 1000) : new Date(0));
83
+ }
84
+ if (err instanceof joseErrors.JWTClaimValidationFailed) {
85
+ const claim = err.claim;
86
+ if (claim === "iss") {
87
+ const actual = err.payload?.["iss"] ?? "";
88
+ throw new TokenIssuerError(options?.issuer ?? "", actual);
89
+ }
90
+ if (claim === "aud") {
91
+ const raw = err.payload?.["aud"];
92
+ const actual = Array.isArray(raw) ? raw : [String(raw ?? "")];
93
+ const expected = Array.isArray(options?.audience)
94
+ ? options.audience[0]
95
+ : (options?.audience ?? "");
96
+ throw new TokenAudienceError(expected, actual);
97
+ }
98
+ throw new TokenInvalidError(`JWT claim validation failed (${claim}): ${err.message}`);
99
+ }
100
+ if (err instanceof joseErrors.JWTInvalid ||
101
+ err instanceof joseErrors.JWSInvalid ||
102
+ err instanceof joseErrors.JWSSignatureVerificationFailed ||
103
+ err instanceof joseErrors.JWKSNoMatchingKey) {
104
+ throw new TokenInvalidError(err instanceof Error ? err.message : "JWT signature verification failed");
105
+ }
106
+ if (err instanceof Error) {
107
+ throw new TokenInvalidError(err.message);
108
+ }
109
+ throw new TokenInvalidError("Unknown token verification error");
110
+ }
16
111
  /** Fetch the current JWKS keys from the endpoint. */
17
112
  async fetchKeys() {
18
113
  const resp = await fetch(this.jwksUri, {
19
114
  signal: AbortSignal.timeout(this.httpTimeout),
20
115
  });
21
116
  if (!resp.ok) {
22
- throw new Error(`JWKS fetch failed with HTTP ${resp.status}`);
117
+ throw new JWKSFetchError(`JWKS fetch failed with HTTP ${resp.status}`);
23
118
  }
24
119
  const doc = (await resp.json());
25
120
  return doc.keys;
@@ -1 +1 @@
1
- {"version":3,"file":"jwks-client.js","sourceRoot":"","sources":["../src/jwks-client.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACJ,OAAO,CAAS;IACxB,GAAG,CAAqB;IACxB,WAAW,CAAS;IAE7B,YAAY,MAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC;IAClD,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;YACrC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA2B,CAAC;QAC1D,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"jwks-client.js","sourceRoot":"","sources":["../src/jwks-client.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -29,6 +29,17 @@ export interface TokenExchangeParams {
29
29
  redirectUri: string;
30
30
  codeVerifier?: string;
31
31
  }
32
+ /** RFC 8628 device authorization response. */
33
+ export interface DeviceAuthorizationResponse {
34
+ device_code: string;
35
+ user_code: string;
36
+ verification_uri: string;
37
+ /** Pre-filled URI with user_code (when provided by server). */
38
+ verification_uri_complete?: string;
39
+ expires_in: number;
40
+ /** Minimum polling interval in seconds. */
41
+ interval: number;
42
+ }
32
43
  /** Response from the token exchange endpoint. */
33
44
  export interface TokenResponse {
34
45
  access_token: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hearth-auth/sdk",
3
- "version": "1.0.21",
3
+ "version": "1.1.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/hearth-auth/hearth.git",