@ever-works/oidc-identity 1.0.1 → 1.0.3

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/index.cjs CHANGED
@@ -66,6 +66,254 @@ module.exports = __toCommonJS(src_exports);
66
66
  // src/oidc-identity.plugin.ts
67
67
  var import_node_crypto = require("crypto");
68
68
 
69
+ // ../../../node_modules/.pnpm/@ever-co+connect-contracts@1.0.0-rc.2/node_modules/@ever-co/connect-contracts/dist/index.js
70
+ var CONSTANTS = {
71
+ "$comment": "Wire constants of the Ever Platform modules. tools/split-integrations.mjs refreshes the fields read from the contract (contracts_version, code patterns, install_sources, products, stats_headers, feed_event_types, integration_keys, root_keys); every other value is a default a product may override by its own configuration.",
72
+ "contracts_version": "1.0.0-rc.2",
73
+ "connect_code_pattern": "^EVC(-[0-9A-HJKMNP-TV-Za-hj-kmnp-tv-z]{4}){3}$",
74
+ "link_code_pattern": "^EVL(-[0-9A-HJKMNP-TV-Za-hj-kmnp-tv-z]{4}){3}$",
75
+ "install_sources": "^(cloud|self-hosted|ever\\.sh|works_app|desktop|partner:[a-z0-9-]{2,32})$",
76
+ "products": [
77
+ "gauzy",
78
+ "teams",
79
+ "works",
80
+ "rec",
81
+ "traduora",
82
+ "demand"
83
+ ],
84
+ "instance_kinds": [
85
+ "cloud",
86
+ "self_hosted",
87
+ "works_app"
88
+ ],
89
+ "instance_token_prefix": "evit_",
90
+ "entitlement_typ": "ever-entitlement+jwt",
91
+ "intent_typ": "ever-intent+jwt",
92
+ "assertion_typ": "ever-assertion+jwt",
93
+ "key_manifest_typ": "ever-key-manifest+jwt",
94
+ "stats_link_typ": "ever-stats-link+jwt",
95
+ "client_assertion_typ": "JWT",
96
+ "client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
97
+ "entitlement_aud": "ever-connect",
98
+ "stats_headers": {
99
+ "key": "Ever-Stats-Key",
100
+ "signature": "Ever-Stats-Signature",
101
+ "key_id": "Ever-Stats-Key-Id"
102
+ },
103
+ "stats_signature_prefix": "ed25519=",
104
+ "feed_event_types": [
105
+ "ever.consent.consent.granted",
106
+ "ever.consent.consent.revoked",
107
+ "ever.consent.integration.disabled",
108
+ "ever.consent.integration.enabled",
109
+ "ever.consent.integration.scope_bumped",
110
+ "ever.entitlements.entitlement.issued",
111
+ "ever.entitlements.entitlement.revoked",
112
+ "ever.entitlements.usage.limit_reached",
113
+ "ever.registry.instance.approved",
114
+ "ever.registry.instance.connected",
115
+ "ever.registry.instance.disconnected",
116
+ "ever.registry.instance.key_rotated",
117
+ "ever.registry.instance.revoked",
118
+ "ever.registry.instance.seen",
119
+ "ever.registry.managed_operation.requested",
120
+ "ever.registry.managed_operation.state_changed",
121
+ "ever.registry.membership.created",
122
+ "ever.registry.membership.removed",
123
+ "ever.registry.membership.role_changed",
124
+ "ever.registry.person.deletion_requested",
125
+ "ever.registry.person.export_requested",
126
+ "ever.registry.tenant_link.created",
127
+ "ever.registry.tenant_link.orphaned",
128
+ "ever.registry.tenant_link.resumed",
129
+ "ever.registry.tenant_link.suspended",
130
+ "ever.registry.tenant_link.unlinked"
131
+ ],
132
+ "integration_keys": [
133
+ "instance_url",
134
+ "stats_link",
135
+ "ever_id_login",
136
+ "counterparty_lookup",
137
+ "counterparty_discoverable",
138
+ "profile_import",
139
+ "usage_reporting",
140
+ "app_sync",
141
+ "billing_link",
142
+ "webhooks",
143
+ "managed_operations",
144
+ "provider_access",
145
+ "marketplace_installs"
146
+ ],
147
+ "key_manifest_path": "/.well-known/ever-keys.json",
148
+ "assertion_audience_path": "/v1/instances/token",
149
+ "assertion_max_ttl_s": 300,
150
+ "assertion_max_skew_s": 300,
151
+ "token_ttl_s": 3600,
152
+ "token_refresh_after_s": 3e3,
153
+ "key_rotation_overlap_s": 604800,
154
+ "entitlement": {
155
+ "validity_s": 604800,
156
+ "refresh_after_s": 21600,
157
+ "grace_s": 2592e3,
158
+ "max_reads_per_hour": 6
159
+ },
160
+ "key_manifest": {
161
+ "refresh_s": 86400,
162
+ "unknown_kid_refresh_min_s": 600,
163
+ "lifetime_s": 2592e3
164
+ },
165
+ "heartbeat_interval_s": 86400,
166
+ "heartbeat_after_boot_max_s": 300,
167
+ "heartbeat_min_interval_s": 60,
168
+ "feed": {
169
+ "wait_s": 25,
170
+ "interval_fallback_s": 900,
171
+ "page_limit": 50
172
+ },
173
+ "stats": {
174
+ "send_interval_s": 86400,
175
+ "min_interval_s": 3600,
176
+ "max_bytes": 16384,
177
+ "final_resend_days": [
178
+ 1,
179
+ 2,
180
+ 3
181
+ ],
182
+ "reports_per_day": 24
183
+ },
184
+ "lookup": {
185
+ "normalization_version": 1,
186
+ "max_hashes_per_query": 100,
187
+ "cache_positive_s": 86400,
188
+ "cache_negative_s": 3600,
189
+ "salt_cache_s": 86400
190
+ },
191
+ "mirror": {
192
+ "max_bytes": 4194304,
193
+ "interval_s": 30
194
+ },
195
+ "step_up_max_age_s": 300,
196
+ "stats_link_statement_max_age_s": 600,
197
+ "timeouts_ms": {
198
+ "read": 6e3,
199
+ "write": 1e4
200
+ },
201
+ "user_agent_pattern": "ever-connect-sdk/<sdk version> (<product>/<product version>)",
202
+ "root_keys": [
203
+ {
204
+ "kid": "ever-202610-0d77",
205
+ "iss": "https://api-dev.ever.co",
206
+ "kty": "OKP",
207
+ "crv": "Ed25519",
208
+ "x": "cgULEqOov0n4s9I8luZboIgJp9mIGusmsSdSL4oCjKk",
209
+ "use": "sig",
210
+ "alg": "EdDSA"
211
+ },
212
+ {
213
+ "kid": "ever-202610-8704",
214
+ "iss": "https://api-stage.ever.co",
215
+ "kty": "OKP",
216
+ "crv": "Ed25519",
217
+ "x": "Ync-MW21JL72GOiS-RVrlvS3gyFH5Krh5f6I66jw1Qc",
218
+ "use": "sig",
219
+ "alg": "EdDSA"
220
+ }
221
+ ],
222
+ "root_keys_file_env": "EVER_PLATFORM_ROOT_KEYS_FILE",
223
+ "root_keys_file_hosts": [
224
+ "localhost",
225
+ "127.0.0.0/8",
226
+ "::1",
227
+ "10.0.0.0/8",
228
+ "172.16.0.0/12",
229
+ "192.168.0.0/16",
230
+ "*.localhost"
231
+ ]
232
+ };
233
+ var FEED_EVENT_TYPES = CONSTANTS.feed_event_types;
234
+ var PROBLEM_CODES = [
235
+ "validation_failed",
236
+ "not_found",
237
+ "unauthorized",
238
+ "forbidden_role",
239
+ "forbidden_scope",
240
+ "ambiguous_credentials",
241
+ "credential_revoked",
242
+ "instance_disconnected",
243
+ "instance_pending_approval",
244
+ "not_connection_owner",
245
+ "integration_disabled",
246
+ "integration_revoked",
247
+ "denied_by_policy",
248
+ "integration_not_available",
249
+ "entitlement_required",
250
+ "tier_required",
251
+ "limit_exceeded",
252
+ "rate_limited",
253
+ "idempotency_mismatch",
254
+ "idempotency_in_progress",
255
+ "stale_version",
256
+ "module_disabled",
257
+ "handle_taken",
258
+ "handle_reserved",
259
+ "handle_retired",
260
+ "handle_invalid",
261
+ "handle_held",
262
+ "handle_held_by_you",
263
+ "code_invalid",
264
+ "code_expired",
265
+ "product_mismatch",
266
+ "product_not_supported",
267
+ "key_mismatch",
268
+ "signature_invalid",
269
+ "unlinked_org",
270
+ "schema_violation",
271
+ "mirror_owned_field",
272
+ "illegal_transition",
273
+ "already_exists",
274
+ "already_completed",
275
+ "billing_active",
276
+ "sso_required",
277
+ "reauth_required",
278
+ "session_required",
279
+ "step_up_required",
280
+ "session_bound",
281
+ "authorization_pending",
282
+ "slow_down",
283
+ "expired_token",
284
+ "already_connected",
285
+ "already_linked",
286
+ "already_claimed",
287
+ "invalid_client",
288
+ "public_jwk_invalid",
289
+ "identifier_claimed",
290
+ "salt_version_unknown",
291
+ "salt_version_retired",
292
+ "hashes_invalid",
293
+ "lookup_key_required",
294
+ "required_component",
295
+ "resync_required",
296
+ "last_owner",
297
+ "last_auth_method",
298
+ "instances_linked",
299
+ "install_in_progress",
300
+ "slug_reserved",
301
+ "checklist_incomplete",
302
+ "scope_version_outdated",
303
+ "method_not_allowed",
304
+ "payload_too_large",
305
+ "unsupported_media_type",
306
+ "gone",
307
+ "unavailable",
308
+ "upstream",
309
+ "database_absent",
310
+ "database_unreachable",
311
+ "topic_private",
312
+ "keys_unavailable",
313
+ "internal_error"
314
+ ];
315
+ var CODES = new Set(PROBLEM_CODES);
316
+
69
317
  // ../../contracts/dist/index.js
70
318
  var USER_SELECTABLE_WORK_KINDS = [
71
319
  "website",
@@ -868,6 +1116,8 @@ var FLEET_JOB_DEFAULT_QUEUED_MAX_AGE_SEC = Object.freeze({
868
1116
  });
869
1117
  var FLEET_JOB_MAX_QUEUED_MAX_AGE_SEC = 7 * 24 * 60 * 60;
870
1118
  var FLEET_AGENT_EXECUTION_MAX_INSTRUCTIONS_BYTES = 160 * 1024;
1119
+ var FLEET_AGENT_TASK_TIMELINE_MAX_BYTES = 48 * 1024;
1120
+ var FLEET_AGENT_TASK_TRANSCRIPT_MAX_BYTES = 64 * 1024;
871
1121
  var FLEET_AGENT_TASK_QUESTION_MAX_FILE_BYTES = 64 * 1024;
872
1122
  var FLEET_AGENT_TASK_QUESTION_MAX_CONTEXT_BYTES = 6 * 1024;
873
1123
  var FLEET_MAX_DAILY_COST_CEILING_CENTS = 1e5 * 100;
@@ -1273,6 +1523,11 @@ var READINESS_BLOCKERS = Object.freeze([
1273
1523
  "withdrawn",
1274
1524
  "other-refusals"
1275
1525
  ]);
1526
+ var EVER_STATS_KEY_HEADER = CONSTANTS.stats_headers.key;
1527
+ var EVER_STATS_SIGNATURE_HEADER = CONSTANTS.stats_headers.signature;
1528
+ var EVER_STATS_KEY_ID_HEADER = CONSTANTS.stats_headers.key_id;
1529
+ var EVER_STATS_SIGNATURE_PREFIX = CONSTANTS.stats_signature_prefix;
1530
+ var EVER_STATS_MAX_BODY_BYTES = CONSTANTS.stats.max_bytes;
1276
1531
 
1277
1532
  // ../../plugin/dist/index.js
1278
1533
  var DEFAULT_DIFF_MAX_BYTES = 256 * 1024;
package/dist/index.js CHANGED
@@ -1,6 +1,254 @@
1
1
  // src/oidc-identity.plugin.ts
2
2
  import { randomBytes } from "crypto";
3
3
 
4
+ // ../../../node_modules/.pnpm/@ever-co+connect-contracts@1.0.0-rc.2/node_modules/@ever-co/connect-contracts/dist/index.js
5
+ var CONSTANTS = {
6
+ "$comment": "Wire constants of the Ever Platform modules. tools/split-integrations.mjs refreshes the fields read from the contract (contracts_version, code patterns, install_sources, products, stats_headers, feed_event_types, integration_keys, root_keys); every other value is a default a product may override by its own configuration.",
7
+ "contracts_version": "1.0.0-rc.2",
8
+ "connect_code_pattern": "^EVC(-[0-9A-HJKMNP-TV-Za-hj-kmnp-tv-z]{4}){3}$",
9
+ "link_code_pattern": "^EVL(-[0-9A-HJKMNP-TV-Za-hj-kmnp-tv-z]{4}){3}$",
10
+ "install_sources": "^(cloud|self-hosted|ever\\.sh|works_app|desktop|partner:[a-z0-9-]{2,32})$",
11
+ "products": [
12
+ "gauzy",
13
+ "teams",
14
+ "works",
15
+ "rec",
16
+ "traduora",
17
+ "demand"
18
+ ],
19
+ "instance_kinds": [
20
+ "cloud",
21
+ "self_hosted",
22
+ "works_app"
23
+ ],
24
+ "instance_token_prefix": "evit_",
25
+ "entitlement_typ": "ever-entitlement+jwt",
26
+ "intent_typ": "ever-intent+jwt",
27
+ "assertion_typ": "ever-assertion+jwt",
28
+ "key_manifest_typ": "ever-key-manifest+jwt",
29
+ "stats_link_typ": "ever-stats-link+jwt",
30
+ "client_assertion_typ": "JWT",
31
+ "client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
32
+ "entitlement_aud": "ever-connect",
33
+ "stats_headers": {
34
+ "key": "Ever-Stats-Key",
35
+ "signature": "Ever-Stats-Signature",
36
+ "key_id": "Ever-Stats-Key-Id"
37
+ },
38
+ "stats_signature_prefix": "ed25519=",
39
+ "feed_event_types": [
40
+ "ever.consent.consent.granted",
41
+ "ever.consent.consent.revoked",
42
+ "ever.consent.integration.disabled",
43
+ "ever.consent.integration.enabled",
44
+ "ever.consent.integration.scope_bumped",
45
+ "ever.entitlements.entitlement.issued",
46
+ "ever.entitlements.entitlement.revoked",
47
+ "ever.entitlements.usage.limit_reached",
48
+ "ever.registry.instance.approved",
49
+ "ever.registry.instance.connected",
50
+ "ever.registry.instance.disconnected",
51
+ "ever.registry.instance.key_rotated",
52
+ "ever.registry.instance.revoked",
53
+ "ever.registry.instance.seen",
54
+ "ever.registry.managed_operation.requested",
55
+ "ever.registry.managed_operation.state_changed",
56
+ "ever.registry.membership.created",
57
+ "ever.registry.membership.removed",
58
+ "ever.registry.membership.role_changed",
59
+ "ever.registry.person.deletion_requested",
60
+ "ever.registry.person.export_requested",
61
+ "ever.registry.tenant_link.created",
62
+ "ever.registry.tenant_link.orphaned",
63
+ "ever.registry.tenant_link.resumed",
64
+ "ever.registry.tenant_link.suspended",
65
+ "ever.registry.tenant_link.unlinked"
66
+ ],
67
+ "integration_keys": [
68
+ "instance_url",
69
+ "stats_link",
70
+ "ever_id_login",
71
+ "counterparty_lookup",
72
+ "counterparty_discoverable",
73
+ "profile_import",
74
+ "usage_reporting",
75
+ "app_sync",
76
+ "billing_link",
77
+ "webhooks",
78
+ "managed_operations",
79
+ "provider_access",
80
+ "marketplace_installs"
81
+ ],
82
+ "key_manifest_path": "/.well-known/ever-keys.json",
83
+ "assertion_audience_path": "/v1/instances/token",
84
+ "assertion_max_ttl_s": 300,
85
+ "assertion_max_skew_s": 300,
86
+ "token_ttl_s": 3600,
87
+ "token_refresh_after_s": 3e3,
88
+ "key_rotation_overlap_s": 604800,
89
+ "entitlement": {
90
+ "validity_s": 604800,
91
+ "refresh_after_s": 21600,
92
+ "grace_s": 2592e3,
93
+ "max_reads_per_hour": 6
94
+ },
95
+ "key_manifest": {
96
+ "refresh_s": 86400,
97
+ "unknown_kid_refresh_min_s": 600,
98
+ "lifetime_s": 2592e3
99
+ },
100
+ "heartbeat_interval_s": 86400,
101
+ "heartbeat_after_boot_max_s": 300,
102
+ "heartbeat_min_interval_s": 60,
103
+ "feed": {
104
+ "wait_s": 25,
105
+ "interval_fallback_s": 900,
106
+ "page_limit": 50
107
+ },
108
+ "stats": {
109
+ "send_interval_s": 86400,
110
+ "min_interval_s": 3600,
111
+ "max_bytes": 16384,
112
+ "final_resend_days": [
113
+ 1,
114
+ 2,
115
+ 3
116
+ ],
117
+ "reports_per_day": 24
118
+ },
119
+ "lookup": {
120
+ "normalization_version": 1,
121
+ "max_hashes_per_query": 100,
122
+ "cache_positive_s": 86400,
123
+ "cache_negative_s": 3600,
124
+ "salt_cache_s": 86400
125
+ },
126
+ "mirror": {
127
+ "max_bytes": 4194304,
128
+ "interval_s": 30
129
+ },
130
+ "step_up_max_age_s": 300,
131
+ "stats_link_statement_max_age_s": 600,
132
+ "timeouts_ms": {
133
+ "read": 6e3,
134
+ "write": 1e4
135
+ },
136
+ "user_agent_pattern": "ever-connect-sdk/<sdk version> (<product>/<product version>)",
137
+ "root_keys": [
138
+ {
139
+ "kid": "ever-202610-0d77",
140
+ "iss": "https://api-dev.ever.co",
141
+ "kty": "OKP",
142
+ "crv": "Ed25519",
143
+ "x": "cgULEqOov0n4s9I8luZboIgJp9mIGusmsSdSL4oCjKk",
144
+ "use": "sig",
145
+ "alg": "EdDSA"
146
+ },
147
+ {
148
+ "kid": "ever-202610-8704",
149
+ "iss": "https://api-stage.ever.co",
150
+ "kty": "OKP",
151
+ "crv": "Ed25519",
152
+ "x": "Ync-MW21JL72GOiS-RVrlvS3gyFH5Krh5f6I66jw1Qc",
153
+ "use": "sig",
154
+ "alg": "EdDSA"
155
+ }
156
+ ],
157
+ "root_keys_file_env": "EVER_PLATFORM_ROOT_KEYS_FILE",
158
+ "root_keys_file_hosts": [
159
+ "localhost",
160
+ "127.0.0.0/8",
161
+ "::1",
162
+ "10.0.0.0/8",
163
+ "172.16.0.0/12",
164
+ "192.168.0.0/16",
165
+ "*.localhost"
166
+ ]
167
+ };
168
+ var FEED_EVENT_TYPES = CONSTANTS.feed_event_types;
169
+ var PROBLEM_CODES = [
170
+ "validation_failed",
171
+ "not_found",
172
+ "unauthorized",
173
+ "forbidden_role",
174
+ "forbidden_scope",
175
+ "ambiguous_credentials",
176
+ "credential_revoked",
177
+ "instance_disconnected",
178
+ "instance_pending_approval",
179
+ "not_connection_owner",
180
+ "integration_disabled",
181
+ "integration_revoked",
182
+ "denied_by_policy",
183
+ "integration_not_available",
184
+ "entitlement_required",
185
+ "tier_required",
186
+ "limit_exceeded",
187
+ "rate_limited",
188
+ "idempotency_mismatch",
189
+ "idempotency_in_progress",
190
+ "stale_version",
191
+ "module_disabled",
192
+ "handle_taken",
193
+ "handle_reserved",
194
+ "handle_retired",
195
+ "handle_invalid",
196
+ "handle_held",
197
+ "handle_held_by_you",
198
+ "code_invalid",
199
+ "code_expired",
200
+ "product_mismatch",
201
+ "product_not_supported",
202
+ "key_mismatch",
203
+ "signature_invalid",
204
+ "unlinked_org",
205
+ "schema_violation",
206
+ "mirror_owned_field",
207
+ "illegal_transition",
208
+ "already_exists",
209
+ "already_completed",
210
+ "billing_active",
211
+ "sso_required",
212
+ "reauth_required",
213
+ "session_required",
214
+ "step_up_required",
215
+ "session_bound",
216
+ "authorization_pending",
217
+ "slow_down",
218
+ "expired_token",
219
+ "already_connected",
220
+ "already_linked",
221
+ "already_claimed",
222
+ "invalid_client",
223
+ "public_jwk_invalid",
224
+ "identifier_claimed",
225
+ "salt_version_unknown",
226
+ "salt_version_retired",
227
+ "hashes_invalid",
228
+ "lookup_key_required",
229
+ "required_component",
230
+ "resync_required",
231
+ "last_owner",
232
+ "last_auth_method",
233
+ "instances_linked",
234
+ "install_in_progress",
235
+ "slug_reserved",
236
+ "checklist_incomplete",
237
+ "scope_version_outdated",
238
+ "method_not_allowed",
239
+ "payload_too_large",
240
+ "unsupported_media_type",
241
+ "gone",
242
+ "unavailable",
243
+ "upstream",
244
+ "database_absent",
245
+ "database_unreachable",
246
+ "topic_private",
247
+ "keys_unavailable",
248
+ "internal_error"
249
+ ];
250
+ var CODES = new Set(PROBLEM_CODES);
251
+
4
252
  // ../../contracts/dist/index.js
5
253
  var USER_SELECTABLE_WORK_KINDS = [
6
254
  "website",
@@ -803,6 +1051,8 @@ var FLEET_JOB_DEFAULT_QUEUED_MAX_AGE_SEC = Object.freeze({
803
1051
  });
804
1052
  var FLEET_JOB_MAX_QUEUED_MAX_AGE_SEC = 7 * 24 * 60 * 60;
805
1053
  var FLEET_AGENT_EXECUTION_MAX_INSTRUCTIONS_BYTES = 160 * 1024;
1054
+ var FLEET_AGENT_TASK_TIMELINE_MAX_BYTES = 48 * 1024;
1055
+ var FLEET_AGENT_TASK_TRANSCRIPT_MAX_BYTES = 64 * 1024;
806
1056
  var FLEET_AGENT_TASK_QUESTION_MAX_FILE_BYTES = 64 * 1024;
807
1057
  var FLEET_AGENT_TASK_QUESTION_MAX_CONTEXT_BYTES = 6 * 1024;
808
1058
  var FLEET_MAX_DAILY_COST_CEILING_CENTS = 1e5 * 100;
@@ -1208,6 +1458,11 @@ var READINESS_BLOCKERS = Object.freeze([
1208
1458
  "withdrawn",
1209
1459
  "other-refusals"
1210
1460
  ]);
1461
+ var EVER_STATS_KEY_HEADER = CONSTANTS.stats_headers.key;
1462
+ var EVER_STATS_SIGNATURE_HEADER = CONSTANTS.stats_headers.signature;
1463
+ var EVER_STATS_KEY_ID_HEADER = CONSTANTS.stats_headers.key_id;
1464
+ var EVER_STATS_SIGNATURE_PREFIX = CONSTANTS.stats_signature_prefix;
1465
+ var EVER_STATS_MAX_BODY_BYTES = CONSTANTS.stats.max_bytes;
1211
1466
 
1212
1467
  // ../../plugin/dist/index.js
1213
1468
  var DEFAULT_DIFF_MAX_BYTES = 256 * 1024;
@@ -408,7 +408,10 @@ var FakeOidcProvider = class _FakeOidcProvider {
408
408
  return sendJson(response, 404, { error: "not_found" });
409
409
  }
410
410
  } catch (error) {
411
- return sendJson(response, 500, { error: "fake_provider_error", error_description: String(error) });
411
+ return sendJson(response, 500, {
412
+ error: "fake_provider_error",
413
+ error_description: errorDescription(error)
414
+ });
412
415
  }
413
416
  }
414
417
  /** §10.4's "authorize (auto-approve a configured user)", with S256 required. */
@@ -474,7 +477,7 @@ var FakeOidcProvider = class _FakeOidcProvider {
474
477
  }
475
478
  void this.tokensFor(stored.nonce, stored.scope).then(
476
479
  (tokens) => sendJson(response, 200, tokens),
477
- (error) => sendJson(response, 500, { error: "server_error", error_description: String(error) })
480
+ (error) => sendJson(response, 500, { error: "server_error", error_description: errorDescription(error) })
478
481
  );
479
482
  }
480
483
  handleDeviceCodeGrant(form, response) {
@@ -497,7 +500,7 @@ var FakeOidcProvider = class _FakeOidcProvider {
497
500
  const authorizedParty = this.isLocalClient(grant.clientId) ? grant.clientId : this.clientId;
498
501
  void this.tokensFor(null, grant.scope, authorizedParty).then(
499
502
  (tokens) => sendJson(response, 200, tokens),
500
- (error) => sendJson(response, 500, { error: "server_error", error_description: String(error) })
503
+ (error) => sendJson(response, 500, { error: "server_error", error_description: errorDescription(error) })
501
504
  );
502
505
  }
503
506
  /** RFC 8628 §3.2's device authorization response. */
@@ -616,14 +619,16 @@ function randomId(prefix) {
616
619
  }
617
620
  function randomUserCode() {
618
621
  const alphabet = "BCDFGHJKLMNPQRSTVWXZ";
619
- const bytes = (0, import_node_crypto.randomBytes)(8);
620
622
  let code = "";
621
623
  for (let index = 0; index < 8; index += 1) {
622
624
  if (index === 4) code += "-";
623
- code += alphabet[bytes[index] % alphabet.length];
625
+ code += alphabet[(0, import_node_crypto.randomInt)(alphabet.length)];
624
626
  }
625
627
  return code;
626
628
  }
629
+ function errorDescription(error) {
630
+ return error instanceof Error ? error.message : "unexpected fake provider failure";
631
+ }
627
632
  function sendJson(response, status, body) {
628
633
  const payload = JSON.stringify(body);
629
634
  response.writeHead(status, {
@@ -1,5 +1,5 @@
1
1
  // src/testing/fake-oidc-provider.ts
2
- import { createHash, createSign, generateKeyPairSync, randomBytes } from "crypto";
2
+ import { createHash, createSign, generateKeyPairSync, randomBytes, randomInt } from "crypto";
3
3
  import { createServer } from "http";
4
4
  var FAKE_BACKCHANNEL_LOGOUT_EVENT = "http://schemas.openid.net/event/backchannel-logout";
5
5
  var FAKE_DEFAULT_LOCAL_CLIENT_ID = "ever-works-cli";
@@ -380,7 +380,10 @@ var FakeOidcProvider = class _FakeOidcProvider {
380
380
  return sendJson(response, 404, { error: "not_found" });
381
381
  }
382
382
  } catch (error) {
383
- return sendJson(response, 500, { error: "fake_provider_error", error_description: String(error) });
383
+ return sendJson(response, 500, {
384
+ error: "fake_provider_error",
385
+ error_description: errorDescription(error)
386
+ });
384
387
  }
385
388
  }
386
389
  /** §10.4's "authorize (auto-approve a configured user)", with S256 required. */
@@ -446,7 +449,7 @@ var FakeOidcProvider = class _FakeOidcProvider {
446
449
  }
447
450
  void this.tokensFor(stored.nonce, stored.scope).then(
448
451
  (tokens) => sendJson(response, 200, tokens),
449
- (error) => sendJson(response, 500, { error: "server_error", error_description: String(error) })
452
+ (error) => sendJson(response, 500, { error: "server_error", error_description: errorDescription(error) })
450
453
  );
451
454
  }
452
455
  handleDeviceCodeGrant(form, response) {
@@ -469,7 +472,7 @@ var FakeOidcProvider = class _FakeOidcProvider {
469
472
  const authorizedParty = this.isLocalClient(grant.clientId) ? grant.clientId : this.clientId;
470
473
  void this.tokensFor(null, grant.scope, authorizedParty).then(
471
474
  (tokens) => sendJson(response, 200, tokens),
472
- (error) => sendJson(response, 500, { error: "server_error", error_description: String(error) })
475
+ (error) => sendJson(response, 500, { error: "server_error", error_description: errorDescription(error) })
473
476
  );
474
477
  }
475
478
  /** RFC 8628 §3.2's device authorization response. */
@@ -588,14 +591,16 @@ function randomId(prefix) {
588
591
  }
589
592
  function randomUserCode() {
590
593
  const alphabet = "BCDFGHJKLMNPQRSTVWXZ";
591
- const bytes = randomBytes(8);
592
594
  let code = "";
593
595
  for (let index = 0; index < 8; index += 1) {
594
596
  if (index === 4) code += "-";
595
- code += alphabet[bytes[index] % alphabet.length];
597
+ code += alphabet[randomInt(alphabet.length)];
596
598
  }
597
599
  return code;
598
600
  }
601
+ function errorDescription(error) {
602
+ return error instanceof Error ? error.message : "unexpected fake provider failure";
603
+ }
599
604
  function sendJson(response, status, body) {
600
605
  const payload = JSON.stringify(body);
601
606
  response.writeHead(status, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ever-works/oidc-identity",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "OpenID Connect identity provider plugin (Ever ID) for Ever Works",
5
5
  "author": {
6
6
  "name": "Ever Co. LTD",
@@ -38,14 +38,14 @@
38
38
  "test:coverage": "vitest run --coverage"
39
39
  },
40
40
  "peerDependencies": {
41
- "@ever-works/plugin": "^1.2.3"
41
+ "@ever-works/plugin": "^1.2.4"
42
42
  },
43
43
  "dependencies": {
44
44
  "jose": "^6",
45
45
  "openid-client": "^6"
46
46
  },
47
47
  "devDependencies": {
48
- "@ever-works/plugin": "^1.2.3",
48
+ "@ever-works/plugin": "^1.2.4",
49
49
  "@types/node": "^26.6.4",
50
50
  "ajv": "^8.18.0",
51
51
  "ajv-formats": "^3.0.1",
@@ -81,8 +81,8 @@
81
81
  "url": "https://github.com/ever-works/ever-works/issues"
82
82
  },
83
83
  "everworksRelease": {
84
- "contentHash": "sha256:d6ab8f43c74717409b5ee7e719ac9452397a0aacfca5420ef64e29cee4d8d870",
85
- "commit": "481654e1181e43571ceb71e50ec465d9df360cb2",
86
- "source": "https://github.com/ever-works/ever-works/tree/481654e1181e43571ceb71e50ec465d9df360cb2/packages/plugins/oidc-identity"
84
+ "contentHash": "sha256:fd87fb87b04782650a8a9657fc6ba13145f151c17a18cc55664085b6b31c03e7",
85
+ "commit": "5afea18479322951b23246dd492a05dc332e90ca",
86
+ "source": "https://github.com/ever-works/ever-works/tree/5afea18479322951b23246dd492a05dc332e90ca/packages/plugins/oidc-identity"
87
87
  }
88
88
  }