@atlasauth/emulator-core 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/dist/adopt.d.ts +50 -0
  2. package/dist/adopt.js +57 -0
  3. package/dist/adopt.js.map +1 -0
  4. package/dist/coverage.d.ts +15 -0
  5. package/dist/coverage.js +31 -0
  6. package/dist/coverage.js.map +1 -0
  7. package/dist/crypto-util.d.ts +10 -0
  8. package/dist/crypto-util.js +76 -0
  9. package/dist/crypto-util.js.map +1 -0
  10. package/dist/custom-html.d.ts +57 -0
  11. package/dist/custom-html.js +491 -0
  12. package/dist/custom-html.js.map +1 -0
  13. package/dist/engine.d.ts +34 -3
  14. package/dist/engine.js +57 -8
  15. package/dist/engine.js.map +1 -1
  16. package/dist/error-catalog.js +16 -0
  17. package/dist/error-catalog.js.map +1 -1
  18. package/dist/event-gate.d.ts +3 -0
  19. package/dist/event-gate.js +430 -0
  20. package/dist/event-gate.js.map +1 -0
  21. package/dist/generic.js +14 -2
  22. package/dist/generic.js.map +1 -1
  23. package/dist/handlers/access-signals.d.ts +48 -0
  24. package/dist/handlers/access-signals.js +76 -0
  25. package/dist/handlers/access-signals.js.map +1 -0
  26. package/dist/handlers/approvals.d.ts +2 -0
  27. package/dist/handlers/approvals.js +418 -0
  28. package/dist/handlers/approvals.js.map +1 -0
  29. package/dist/handlers/authz-data.d.ts +2 -0
  30. package/dist/handlers/authz-data.js +627 -0
  31. package/dist/handlers/authz-data.js.map +1 -0
  32. package/dist/handlers/authz-layers.d.ts +229 -0
  33. package/dist/handlers/authz-layers.js +786 -0
  34. package/dist/handlers/authz-layers.js.map +1 -0
  35. package/dist/handlers/authz-state.d.ts +80 -0
  36. package/dist/handlers/authz-state.js +175 -0
  37. package/dist/handlers/authz-state.js.map +1 -0
  38. package/dist/handlers/authz.d.ts +2 -0
  39. package/dist/handlers/authz.js +410 -0
  40. package/dist/handlers/authz.js.map +1 -0
  41. package/dist/handlers/billing.d.ts +100 -0
  42. package/dist/handlers/billing.js +877 -0
  43. package/dist/handlers/billing.js.map +1 -0
  44. package/dist/handlers/cedar-ext.d.ts +35 -0
  45. package/dist/handlers/cedar-ext.js +174 -0
  46. package/dist/handlers/cedar-ext.js.map +1 -0
  47. package/dist/handlers/cedar.d.ts +146 -0
  48. package/dist/handlers/cedar.js +689 -0
  49. package/dist/handlers/cedar.js.map +1 -0
  50. package/dist/handlers/connections.d.ts +5 -0
  51. package/dist/handlers/connections.js +561 -0
  52. package/dist/handlers/connections.js.map +1 -0
  53. package/dist/handlers/control.js +6 -1
  54. package/dist/handlers/control.js.map +1 -1
  55. package/dist/handlers/device.d.ts +47 -0
  56. package/dist/handlers/device.js +665 -0
  57. package/dist/handlers/device.js.map +1 -0
  58. package/dist/handlers/emu3-misc.d.ts +38 -0
  59. package/dist/handlers/emu3-misc.js +1056 -0
  60. package/dist/handlers/emu3-misc.js.map +1 -0
  61. package/dist/handlers/emu4-actions-access.d.ts +46 -0
  62. package/dist/handlers/emu4-actions-access.js +107 -0
  63. package/dist/handlers/emu4-actions-access.js.map +1 -0
  64. package/dist/handlers/emu4-actions-catalog-extra.d.ts +3 -0
  65. package/dist/handlers/emu4-actions-catalog-extra.js +204 -0
  66. package/dist/handlers/emu4-actions-catalog-extra.js.map +1 -0
  67. package/dist/handlers/emu4-actions-catalog.d.ts +3 -0
  68. package/dist/handlers/emu4-actions-catalog.js +143 -0
  69. package/dist/handlers/emu4-actions-catalog.js.map +1 -0
  70. package/dist/handlers/emu4-actions-def.d.ts +50 -0
  71. package/dist/handlers/emu4-actions-def.js +250 -0
  72. package/dist/handlers/emu4-actions-def.js.map +1 -0
  73. package/dist/handlers/emu4-actions-sandbox.d.ts +36 -0
  74. package/dist/handlers/emu4-actions-sandbox.js +318 -0
  75. package/dist/handlers/emu4-actions-sandbox.js.map +1 -0
  76. package/dist/handlers/emu4-actions-typegen.d.ts +5 -0
  77. package/dist/handlers/emu4-actions-typegen.js +73 -0
  78. package/dist/handlers/emu4-actions-typegen.js.map +1 -0
  79. package/dist/handlers/emu4-actions.d.ts +2 -0
  80. package/dist/handlers/emu4-actions.js +506 -0
  81. package/dist/handlers/emu4-actions.js.map +1 -0
  82. package/dist/handlers/emu4-authz-trust.d.ts +40 -0
  83. package/dist/handlers/emu4-authz-trust.js +488 -0
  84. package/dist/handlers/emu4-authz-trust.js.map +1 -0
  85. package/dist/handlers/emu4-authz.d.ts +2 -0
  86. package/dist/handlers/emu4-authz.js +752 -0
  87. package/dist/handlers/emu4-authz.js.map +1 -0
  88. package/dist/handlers/emu4-billing-core.d.ts +23 -0
  89. package/dist/handlers/emu4-billing-core.js +22 -0
  90. package/dist/handlers/emu4-billing-core.js.map +1 -0
  91. package/dist/handlers/emu4-billing-x.d.ts +2 -0
  92. package/dist/handlers/emu4-billing-x.js +489 -0
  93. package/dist/handlers/emu4-billing-x.js.map +1 -0
  94. package/dist/handlers/emu4-billing.d.ts +14 -0
  95. package/dist/handlers/emu4-billing.js +846 -0
  96. package/dist/handlers/emu4-billing.js.map +1 -0
  97. package/dist/handlers/emu4-clones.d.ts +2 -0
  98. package/dist/handlers/emu4-clones.js +322 -0
  99. package/dist/handlers/emu4-clones.js.map +1 -0
  100. package/dist/handlers/emu4-compliance.d.ts +8 -0
  101. package/dist/handlers/emu4-compliance.js +39 -0
  102. package/dist/handlers/emu4-compliance.js.map +1 -0
  103. package/dist/handlers/emu4-config.d.ts +14 -0
  104. package/dist/handlers/emu4-config.js +148 -0
  105. package/dist/handlers/emu4-config.js.map +1 -0
  106. package/dist/handlers/emu4-cookies.d.ts +8 -0
  107. package/dist/handlers/emu4-cookies.js +248 -0
  108. package/dist/handlers/emu4-cookies.js.map +1 -0
  109. package/dist/handlers/emu4-erasure.d.ts +2 -0
  110. package/dist/handlers/emu4-erasure.js +587 -0
  111. package/dist/handlers/emu4-erasure.js.map +1 -0
  112. package/dist/handlers/emu4-federation.d.ts +8 -0
  113. package/dist/handlers/emu4-federation.js +18 -0
  114. package/dist/handlers/emu4-federation.js.map +1 -0
  115. package/dist/handlers/emu4-journey-math.d.ts +42 -0
  116. package/dist/handlers/emu4-journey-math.js +99 -0
  117. package/dist/handlers/emu4-journey-math.js.map +1 -0
  118. package/dist/handlers/emu4-messaging.d.ts +21 -0
  119. package/dist/handlers/emu4-messaging.js +595 -0
  120. package/dist/handlers/emu4-messaging.js.map +1 -0
  121. package/dist/handlers/emu4-minors.d.ts +7 -0
  122. package/dist/handlers/emu4-minors.js +408 -0
  123. package/dist/handlers/emu4-minors.js.map +1 -0
  124. package/dist/handlers/emu4-oauth-audit.d.ts +5 -0
  125. package/dist/handlers/emu4-oauth-audit.js +17 -0
  126. package/dist/handlers/emu4-oauth-audit.js.map +1 -0
  127. package/dist/handlers/emu4-oauth-auth.d.ts +83 -0
  128. package/dist/handlers/emu4-oauth-auth.js +363 -0
  129. package/dist/handlers/emu4-oauth-auth.js.map +1 -0
  130. package/dist/handlers/emu4-oauth-delivery.d.ts +68 -0
  131. package/dist/handlers/emu4-oauth-delivery.js +207 -0
  132. package/dist/handlers/emu4-oauth-delivery.js.map +1 -0
  133. package/dist/handlers/emu4-oauth-keys.d.ts +11 -0
  134. package/dist/handlers/emu4-oauth-keys.js +268 -0
  135. package/dist/handlers/emu4-oauth-keys.js.map +1 -0
  136. package/dist/handlers/emu4-oauth-pub.d.ts +36 -0
  137. package/dist/handlers/emu4-oauth-pub.js +420 -0
  138. package/dist/handlers/emu4-oauth-pub.js.map +1 -0
  139. package/dist/handlers/emu4-oauth.d.ts +10 -0
  140. package/dist/handlers/emu4-oauth.js +23 -0
  141. package/dist/handlers/emu4-oauth.js.map +1 -0
  142. package/dist/handlers/emu4-policies.d.ts +2 -0
  143. package/dist/handlers/emu4-policies.js +408 -0
  144. package/dist/handlers/emu4-policies.js.map +1 -0
  145. package/dist/handlers/emu4-region.d.ts +2 -0
  146. package/dist/handlers/emu4-region.js +189 -0
  147. package/dist/handlers/emu4-region.js.map +1 -0
  148. package/dist/handlers/emu4-saml.d.ts +12 -0
  149. package/dist/handlers/emu4-saml.js +532 -0
  150. package/dist/handlers/emu4-saml.js.map +1 -0
  151. package/dist/handlers/emu4-shared.d.ts +44 -0
  152. package/dist/handlers/emu4-shared.js +90 -0
  153. package/dist/handlers/emu4-shared.js.map +1 -0
  154. package/dist/handlers/emu4-snapshots.d.ts +38 -0
  155. package/dist/handlers/emu4-snapshots.js +231 -0
  156. package/dist/handlers/emu4-snapshots.js.map +1 -0
  157. package/dist/handlers/emu4-sns.d.ts +9 -0
  158. package/dist/handlers/emu4-sns.js +21 -0
  159. package/dist/handlers/emu4-sns.js.map +1 -0
  160. package/dist/handlers/emu4-trust-binding.d.ts +27 -0
  161. package/dist/handlers/emu4-trust-binding.js +344 -0
  162. package/dist/handlers/emu4-trust-binding.js.map +1 -0
  163. package/dist/handlers/emu4-trust.d.ts +35 -0
  164. package/dist/handlers/emu4-trust.js +543 -0
  165. package/dist/handlers/emu4-trust.js.map +1 -0
  166. package/dist/handlers/federation.d.ts +2 -0
  167. package/dist/handlers/federation.js +481 -0
  168. package/dist/handlers/federation.js.map +1 -0
  169. package/dist/handlers/fga-engine.d.ts +78 -0
  170. package/dist/handlers/fga-engine.js +663 -0
  171. package/dist/handlers/fga-engine.js.map +1 -0
  172. package/dist/handlers/governance.d.ts +2 -0
  173. package/dist/handlers/governance.js +460 -0
  174. package/dist/handlers/governance.js.map +1 -0
  175. package/dist/handlers/hooks.js +17 -1
  176. package/dist/handlers/hooks.js.map +1 -1
  177. package/dist/handlers/index.d.ts +5 -1
  178. package/dist/handlers/index.js +45 -3
  179. package/dist/handlers/index.js.map +1 -1
  180. package/dist/handlers/keys.js +6 -1
  181. package/dist/handlers/keys.js.map +1 -1
  182. package/dist/handlers/machines.js +61 -8
  183. package/dist/handlers/machines.js.map +1 -1
  184. package/dist/handlers/messaging.d.ts +6 -0
  185. package/dist/handlers/messaging.js +893 -0
  186. package/dist/handlers/messaging.js.map +1 -0
  187. package/dist/handlers/oauth-adv.d.ts +191 -0
  188. package/dist/handlers/oauth-adv.js +1305 -0
  189. package/dist/handlers/oauth-adv.js.map +1 -0
  190. package/dist/handlers/oauth-flows.d.ts +52 -0
  191. package/dist/handlers/oauth-flows.js +480 -0
  192. package/dist/handlers/oauth-flows.js.map +1 -0
  193. package/dist/handlers/oauth.d.ts +96 -0
  194. package/dist/handlers/oauth.js +793 -0
  195. package/dist/handlers/oauth.js.map +1 -0
  196. package/dist/handlers/orgs.js +6 -0
  197. package/dist/handlers/orgs.js.map +1 -1
  198. package/dist/handlers/passkeys.d.ts +3 -0
  199. package/dist/handlers/passkeys.js +293 -0
  200. package/dist/handlers/passkeys.js.map +1 -0
  201. package/dist/handlers/platform.d.ts +20 -0
  202. package/dist/handlers/platform.js +472 -0
  203. package/dist/handlers/platform.js.map +1 -0
  204. package/dist/handlers/round2.d.ts +8 -0
  205. package/dist/handlers/round2.js +372 -0
  206. package/dist/handlers/round2.js.map +1 -0
  207. package/dist/handlers/scim.d.ts +4 -0
  208. package/dist/handlers/scim.js +595 -0
  209. package/dist/handlers/scim.js.map +1 -0
  210. package/dist/handlers/sessions.d.ts +9 -3
  211. package/dist/handlers/sessions.js +76 -38
  212. package/dist/handlers/sessions.js.map +1 -1
  213. package/dist/handlers/support.d.ts +20 -0
  214. package/dist/handlers/support.js +62 -0
  215. package/dist/handlers/support.js.map +1 -0
  216. package/dist/handlers/users.js +7 -0
  217. package/dist/handlers/users.js.map +1 -1
  218. package/dist/handlers/workflows.d.ts +2 -0
  219. package/dist/handlers/workflows.js +428 -0
  220. package/dist/handlers/workflows.js.map +1 -0
  221. package/dist/index.d.ts +8 -0
  222. package/dist/index.js +23 -1
  223. package/dist/index.js.map +1 -1
  224. package/dist/jwe.d.ts +18 -0
  225. package/dist/jwe.js +101 -0
  226. package/dist/jwe.js.map +1 -0
  227. package/dist/jws.d.ts +41 -0
  228. package/dist/jws.js +135 -0
  229. package/dist/jws.js.map +1 -0
  230. package/dist/messages.d.ts +7 -0
  231. package/dist/messages.js +8 -4
  232. package/dist/messages.js.map +1 -1
  233. package/dist/messaging-callbacks.d.ts +100 -0
  234. package/dist/messaging-callbacks.js +767 -0
  235. package/dist/messaging-callbacks.js.map +1 -0
  236. package/dist/openapi.js +41 -1
  237. package/dist/openapi.js.map +1 -1
  238. package/dist/parity-bin.js +3 -1
  239. package/dist/parity-bin.js.map +1 -1
  240. package/dist/parity-emu3-authz.d.ts +3 -0
  241. package/dist/parity-emu3-authz.js +61 -0
  242. package/dist/parity-emu3-authz.js.map +1 -0
  243. package/dist/parity-emu3-billing.d.ts +3 -0
  244. package/dist/parity-emu3-billing.js +25 -0
  245. package/dist/parity-emu3-billing.js.map +1 -0
  246. package/dist/parity-emu3-messaging.d.ts +3 -0
  247. package/dist/parity-emu3-messaging.js +27 -0
  248. package/dist/parity-emu3-messaging.js.map +1 -0
  249. package/dist/parity-emu3-misc.d.ts +2 -0
  250. package/dist/parity-emu3-misc.js +63 -0
  251. package/dist/parity-emu3-misc.js.map +1 -0
  252. package/dist/parity-emu3-oauth.d.ts +2 -0
  253. package/dist/parity-emu3-oauth.js +39 -0
  254. package/dist/parity-emu3-oauth.js.map +1 -0
  255. package/dist/parity-emu4-actions.d.ts +2 -0
  256. package/dist/parity-emu4-actions.js +38 -0
  257. package/dist/parity-emu4-actions.js.map +1 -0
  258. package/dist/parity-emu4-authz.d.ts +3 -0
  259. package/dist/parity-emu4-authz.js +68 -0
  260. package/dist/parity-emu4-authz.js.map +1 -0
  261. package/dist/parity-emu4-billing.d.ts +6 -0
  262. package/dist/parity-emu4-billing.js +44 -0
  263. package/dist/parity-emu4-billing.js.map +1 -0
  264. package/dist/parity-emu4-compliance.d.ts +2 -0
  265. package/dist/parity-emu4-compliance.js +92 -0
  266. package/dist/parity-emu4-compliance.js.map +1 -0
  267. package/dist/parity-emu4-federation.d.ts +2 -0
  268. package/dist/parity-emu4-federation.js +33 -0
  269. package/dist/parity-emu4-federation.js.map +1 -0
  270. package/dist/parity-emu4-messaging.d.ts +3 -0
  271. package/dist/parity-emu4-messaging.js +42 -0
  272. package/dist/parity-emu4-messaging.js.map +1 -0
  273. package/dist/parity-emu4-oauth.d.ts +2 -0
  274. package/dist/parity-emu4-oauth.js +55 -0
  275. package/dist/parity-emu4-oauth.js.map +1 -0
  276. package/dist/parity-emu4-trust.d.ts +2 -0
  277. package/dist/parity-emu4-trust.js +41 -0
  278. package/dist/parity-emu4-trust.js.map +1 -0
  279. package/dist/parity-routes.d.ts +14 -0
  280. package/dist/parity-routes.js +439 -0
  281. package/dist/parity-routes.js.map +1 -0
  282. package/dist/parity.d.ts +10 -3
  283. package/dist/parity.js +14 -5
  284. package/dist/parity.js.map +1 -1
  285. package/dist/sns-cert.d.ts +9 -0
  286. package/dist/sns-cert.js +101 -0
  287. package/dist/sns-cert.js.map +1 -0
  288. package/dist/tokens.d.ts +85 -3
  289. package/dist/tokens.js +196 -24
  290. package/dist/tokens.js.map +1 -1
  291. package/dist/webauthn-virtual.d.ts +70 -0
  292. package/dist/webauthn-virtual.js +186 -0
  293. package/dist/webauthn-virtual.js.map +1 -0
  294. package/dist/webhook-ext.d.ts +16 -0
  295. package/dist/webhook-ext.js +218 -0
  296. package/dist/webhook-ext.js.map +1 -0
  297. package/dist/webhooks.d.ts +3 -0
  298. package/dist/webhooks.js +37 -3
  299. package/dist/webhooks.js.map +1 -1
  300. package/package.json +2 -2
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sessionMatches = exports.resetRound2Handlers = void 0;
4
+ exports.recordCaller = recordCaller;
5
+ exports.revokeSession = revokeSession;
6
+ exports.round2Handlers = round2Handlers;
7
+ const crypto_util_1 = require("../crypto-util");
8
+ const errors_1 = require("../errors");
9
+ const keys_1 = require("./keys");
10
+ const support_1 = require("./support");
11
+ const util_1 = require("./util");
12
+ const users_1 = require("./users");
13
+ /**
14
+ * Routes added by the second depth round for resources the engine models: API key rotation with overlap, key posture and
15
+ * caller analytics, the session revocation feed and signed status list, bulk revocation by filter, the session timeline,
16
+ * bulk user actions (run inline, so the job is already finished when it answers) and the deleted-address list.
17
+ */
18
+ const DAY = 86_400_000;
19
+ const MAX_BACK_MS = 86_400_000;
20
+ const states = new WeakMap();
21
+ const st = (e) => {
22
+ let s = states.get(e);
23
+ if (!s)
24
+ states.set(e, (s = { jobs: new Map(), bulk: new Map(), callers: new Map(), deletedAddresses: new Set() }));
25
+ return s;
26
+ };
27
+ const resetRound2Handlers = (e) => void states.delete(e);
28
+ exports.resetRound2Handlers = resetRound2Handlers;
29
+ /** Record who verified a key; the verify handler calls this so `callers` has something to show. */
30
+ function recordCaller(e, keyId, ip, userAgent) {
31
+ const list = st(e).callers.get(keyId) ?? [];
32
+ list.push({ ip, user_agent: userAgent, route: 'verify', at: e.clock.now() });
33
+ st(e).callers.set(keyId, list);
34
+ }
35
+ const isWildcard = (s) => s === '*' || s.endsWith(':*');
36
+ const postureIssues = (k, now, staleDays, graceDays, maxScopes) => {
37
+ const out = [];
38
+ if (k.last_used_at == null) {
39
+ if (now - k.created_at > graceDays * DAY)
40
+ out.push('never_used');
41
+ }
42
+ else if (now - k.last_used_at > staleDays * DAY)
43
+ out.push('stale');
44
+ const scopes = k.scopes ?? [];
45
+ if (scopes.some(isWildcard) || scopes.length > maxScopes)
46
+ out.push('over_scoped');
47
+ if (k.expires_at == null)
48
+ out.push('no_expiry');
49
+ if (!k.allowed_ips?.length)
50
+ out.push('no_ip_allowlist');
51
+ return out;
52
+ };
53
+ const liveKey = (k, now) => !k.revoked_at && (k.expires_at == null || k.expires_at > now);
54
+ const sessionMatches = (e, s, q) => {
55
+ const org = q('organization_id');
56
+ const user = q('user_id');
57
+ const active = q('active');
58
+ const after = q('created_after');
59
+ const before = q('created_before');
60
+ const country = q('country');
61
+ const ip = q('ip');
62
+ if (user && s.user_id !== user)
63
+ return false;
64
+ if (org && s.organization_id !== org)
65
+ return false;
66
+ if (active !== null && (s.status === 'active') !== (active === 'true'))
67
+ return false;
68
+ if (after && s.created_at < Date.parse(after))
69
+ return false;
70
+ if (before && s.created_at > Date.parse(before))
71
+ return false;
72
+ if (country && s.country !== country)
73
+ return false;
74
+ if (ip && s.ip !== ip)
75
+ return false;
76
+ void e;
77
+ return true;
78
+ };
79
+ exports.sessionMatches = sessionMatches;
80
+ function revokeSession(e, s, reason) {
81
+ if (s.status === 'revoked')
82
+ return;
83
+ s.status = 'revoked';
84
+ s.revoked_at = e.clock.now();
85
+ s.revoked_reason = reason;
86
+ e.webhooks.emit('session.revoked', { object: 'session', id: s.id, user_id: s.user_id, reason });
87
+ }
88
+ function round2Handlers() {
89
+ return [
90
+ // ── API keys ──
91
+ {
92
+ method: 'POST',
93
+ pattern: '/v1/api_keys/:id/rotate',
94
+ handler: (c) => {
95
+ const e = c.engine;
96
+ const old = e.db.apiKeys.get(c.params.id);
97
+ if (!old || old.revoked_at)
98
+ throw (0, errors_1.notFound)('API key');
99
+ const overlap = c.body.overlap_seconds === undefined ? 86_400 : c.body.overlap_seconds;
100
+ if (!Number.isInteger(overlap) || overlap < 0 || overlap > 604_800)
101
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'overlap_seconds must be an integer from 0 to 604800.', 'overlap_seconds');
102
+ const now = e.clock.now();
103
+ const prefix = String(old.prefix).split('_')[0] ?? 'ak';
104
+ const secret = e.tokens.secret(prefix);
105
+ const next = e.db.apiKeys.insert({ ...old, id: undefined, secret, prefix: secret.slice(0, prefix.length + 5), rotated_from_id: old.id, rotated_to_id: null, last_used_at: null, revoked_at: null, created_at: now });
106
+ old.rotated_to_id = next.id;
107
+ if (overlap === 0)
108
+ old.revoked_at = now;
109
+ else
110
+ old.expires_at = Math.min(old.expires_at ?? Infinity, now + overlap * 1000);
111
+ e.changed({ type: 'api_key.created', data: (0, keys_1.presentKey)(e, next), resource: 'api_key', id: next.id, op: 'create' });
112
+ e.changed({ type: 'api_key.updated', data: (0, keys_1.presentKey)(e, old), resource: 'api_key', id: old.id, op: 'update' });
113
+ e.webhooks.emit('api_key.rotated', { object: 'api_key_rotation', previous_key_id: old.id, key_id: next.id, overlap_seconds: overlap, previous_expires_at: old.revoked_at ? null : old.expires_at });
114
+ return { status: 201, body: { ...(0, keys_1.presentKey)(e, next), secret, previous_key: { id: old.id, prefix: old.prefix, expires_at: old.revoked_at ? null : old.expires_at, revoked: !!old.revoked_at } } };
115
+ },
116
+ },
117
+ {
118
+ method: 'GET',
119
+ pattern: '/v1/api_keys/posture',
120
+ handler: (c) => {
121
+ const e = c.engine;
122
+ const now = e.clock.now();
123
+ const num = (k, d) => Number(c.query.get(k) ?? d) || d;
124
+ const [stale, grace, maxScopes] = [num('stale_days', 90), num('never_used_days', 7), num('max_scopes', 20)];
125
+ const live = e.db.apiKeys.filter((k) => liveKey(k, now));
126
+ const issue = c.query.get('issue');
127
+ const summary = { never_used: 0, stale: 0, over_scoped: 0, no_expiry: 0, no_ip_allowlist: 0 };
128
+ let findings = live
129
+ .map((k) => ({ k, issues: postureIssues(k, now, stale, grace, maxScopes) }))
130
+ .filter((f) => f.issues.length)
131
+ .sort((a, b) => b.issues.length - a.issues.length || a.k.created_at - b.k.created_at);
132
+ for (const f of findings)
133
+ for (const i of f.issues)
134
+ summary[i] = (summary[i] ?? 0) + 1;
135
+ const totalFlagged = findings.length;
136
+ if (issue)
137
+ findings = findings.filter((f) => f.issues.includes(issue));
138
+ const limit = Math.min(Math.max(num('limit', 50), 1), 200);
139
+ const page = findings.slice(0, limit);
140
+ return {
141
+ body: {
142
+ object: 'api_key_posture',
143
+ generated_at: now,
144
+ thresholds: { stale_days: stale, never_used_days: grace, max_scopes: maxScopes },
145
+ totals: { live_keys: live.length, flagged_keys: totalFlagged },
146
+ summary,
147
+ truncated: false,
148
+ data: page.map(({ k, issues }) => ({ object: 'api_key_posture_finding', key_id: k.id, prefix: k.prefix, name: k.name ?? null, subject_type: k.subject_type, subject_id: k.subject_id, organization_id: k.organization_id ?? null, issues, last_used_at: k.last_used_at ?? null, expires_at: k.expires_at ?? null, created_at: k.created_at })),
149
+ has_more: findings.length > limit,
150
+ next_cursor: findings.length > limit ? page[page.length - 1].k.id : null,
151
+ },
152
+ };
153
+ },
154
+ },
155
+ {
156
+ method: 'GET',
157
+ pattern: '/v1/api_keys/:id/callers',
158
+ handler: (c) => {
159
+ const e = c.engine;
160
+ const k = e.db.apiKeys.get(c.params.id);
161
+ if (!k)
162
+ throw (0, errors_1.notFound)('API key');
163
+ const windowDays = Number(c.query.get('window_days') ?? 7) || 7;
164
+ const limit = Number(c.query.get('limit') ?? 10) || 10;
165
+ if (windowDays < 1 || windowDays > 35)
166
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'window_days must be an integer from 1 to 35.', 'window_days');
167
+ const since = e.clock.now() - windowDays * DAY;
168
+ const rows = (st(e).callers.get(k.id) ?? []).filter((r) => r.at >= since);
169
+ const top = (field) => {
170
+ const counts = new Map();
171
+ for (const r of rows)
172
+ counts.set(String(r[field] ?? '(unknown)'), (counts.get(String(r[field] ?? '(unknown)')) ?? 0) + 1);
173
+ return [...counts].sort((a, b) => b[1] - a[1]).slice(0, limit).map(([value, count]) => ({ value, count }));
174
+ };
175
+ return { body: { object: 'api_key_callers', key_id: k.id, window_days: windowDays, since_day: new Date(since).toISOString().slice(0, 10), live: liveKey(k, e.clock.now()), ip: top('ip'), user_agent: top('user_agent'), route: top('route') } };
176
+ },
177
+ },
178
+ // ── sessions ──
179
+ {
180
+ method: 'GET',
181
+ pattern: '/v1/sessions/revocations',
182
+ handler: (c) => {
183
+ const e = c.engine;
184
+ const now = e.clock.now();
185
+ const raw = c.query.get('after');
186
+ let from = now - 3_600_000;
187
+ let afterId = null;
188
+ if (raw) {
189
+ if (/^\d+$/.test(raw))
190
+ from = Number(raw);
191
+ else {
192
+ const [at, ...id] = raw.split(':');
193
+ if (!/^\d+$/.test(at ?? '') || !id.length)
194
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'after must be epoch milliseconds or a next_after from a previous page.', 'after');
195
+ from = Number(at);
196
+ afterId = id.join(':');
197
+ }
198
+ }
199
+ from = Math.max(from, now - MAX_BACK_MS);
200
+ const limit = Math.min(Math.max(Math.trunc(Number(c.query.get('limit') ?? 1000)) || 1000, 1), 5000);
201
+ const rows = e.db.sessions
202
+ .all()
203
+ .filter((s) => s.revoked_at && s.revoked_at >= from)
204
+ .filter((s) => (!c.query.get('user_id') || s.user_id === c.query.get('user_id')) && (!c.query.get('organization_id') || s.organization_id === c.query.get('organization_id')) && (!c.query.get('reason') || s.revoked_reason === c.query.get('reason')))
205
+ .sort((a, b) => a.revoked_at - b.revoked_at || (a.id < b.id ? -1 : 1))
206
+ .filter((s) => afterId === null || s.revoked_at > from || s.id > afterId);
207
+ const page = rows.slice(0, limit);
208
+ const last = page[page.length - 1];
209
+ return { headers: { 'cache-control': 'no-store' }, body: { object: 'list', data: page.map((s) => ({ sid: s.id, sub: s.user_id, revoked_at: s.revoked_at, reason: s.revoked_reason ?? null })), has_more: rows.length > limit, next_after: last ? `${last.revoked_at}:${last.id}` : null, server_time: now, window_start: from } };
210
+ },
211
+ },
212
+ {
213
+ method: 'GET',
214
+ pattern: '/v1/sessions/revocations/status-list',
215
+ handler: async (c) => {
216
+ const e = c.engine;
217
+ const windowSeconds = c.query.get('window_seconds') === null ? 3600 : Number(c.query.get('window_seconds'));
218
+ if (!Number.isInteger(windowSeconds) || windowSeconds < 60 || windowSeconds > MAX_BACK_MS / 1000)
219
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'window_seconds must be a whole number from 60 to 86400.', 'window_seconds');
220
+ const now = e.clock.now();
221
+ const since = now - windowSeconds * 1000;
222
+ // 8-byte truncated SHA-256 of each revoked sid, sorted so a verifier can binary-search.
223
+ const hashes = await Promise.all(e.db.sessions.all().filter((s) => s.revoked_at && s.revoked_at >= since).map(async (s) => (await (0, crypto_util_1.sha256)(s.id)).slice(0, 8)));
224
+ hashes.sort((a, b) => (0, crypto_util_1.bytesToB64url)(a).localeCompare((0, crypto_util_1.bytesToB64url)(b)));
225
+ const flat = new Uint8Array(hashes.length * 8);
226
+ hashes.forEach((h, i) => flat.set(h, i * 8));
227
+ const token = await e.tokens.signClaims({ sub: 'session-status-list', aud: 'atlas:session-status-list', token_use: 'session_status_list', since, window_seconds: windowSeconds, hash_bytes: 8, count: hashes.length, truncated: false, h: (0, crypto_util_1.bytesToB64url)(flat) }, 120);
228
+ return { headers: { 'cache-control': 'private, max-age=30' }, body: { object: 'session_status_list', token, issued_at: now, expires_at: now + 120_000, window_seconds: windowSeconds, count: hashes.length, truncated: false } };
229
+ },
230
+ },
231
+ {
232
+ method: 'GET',
233
+ pattern: '/v1/sessions/:id/events',
234
+ handler: (c) => {
235
+ const s = c.engine.db.sessions.get(c.params.id);
236
+ if (!s)
237
+ throw (0, errors_1.notFound)('Session');
238
+ const data = [{ id: `synth_created_${s.id}`, type: 'created', at: s.created_at, ip: s.ip ?? null, actor_type: null, actor_id: null, detail: { synthesized: true } }];
239
+ if (s.revoked_at)
240
+ data.push({ id: `synth_revoked_${s.id}`, type: 'revoked', at: s.revoked_at, ip: null, actor_type: null, actor_id: null, detail: { reason: s.revoked_reason ?? null, synthesized: true } });
241
+ return { body: { object: 'list', data, has_more: false, next_after: null } };
242
+ },
243
+ },
244
+ {
245
+ method: 'POST',
246
+ pattern: '/v1/sessions/revoke_by_filter',
247
+ handler: (c) => {
248
+ const e = c.engine;
249
+ const keys = ['user_id', 'organization_id', 'ip', 'country', 'device', 'risk_level', 'min_risk_score', 'created_after', 'created_before'];
250
+ const filter = Object.fromEntries(keys.filter((k) => c.body[k] !== undefined).map((k) => [k, c.body[k]]));
251
+ if (!Object.keys(filter).length)
252
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'Give at least one filter (user_id, organization_id, ip, country, device, risk_level, min_risk_score, created_after or created_before).');
253
+ const q = (k) => (filter[k] === undefined ? null : String(filter[k]));
254
+ const hit = e.db.sessions.filter((s) => s.status === 'active' && (0, exports.sessionMatches)(e, s, q));
255
+ if (c.body.dry_run === true)
256
+ return { body: { object: 'session_revoke_preview', dry_run: true, matched: hit.length, filter } };
257
+ for (const s of hit)
258
+ revokeSession(e, s, 'revoke_by_filter');
259
+ const now = e.clock.now();
260
+ const job = { object: 'session_revoke_job', id: e.db.newId('srjob'), status: 'completed', matched: hit.length, revoked: hit.length, filter, created_at: now, completed_at: now };
261
+ st(e).jobs.set(job.id, job);
262
+ return { status: 202, body: job };
263
+ },
264
+ },
265
+ { method: 'GET', pattern: '/v1/sessions/revoke_jobs', handler: (c) => ({ body: { object: 'list', data: [...st(c.engine).jobs.values()].reverse(), has_more: false } }) },
266
+ {
267
+ method: 'GET',
268
+ pattern: '/v1/sessions/revoke_jobs/:id',
269
+ handler: (c) => {
270
+ const j = st(c.engine).jobs.get(c.params.id ?? '');
271
+ if (!j)
272
+ throw (0, errors_1.notFound)('Job');
273
+ return { body: j };
274
+ },
275
+ },
276
+ // ── users ──
277
+ {
278
+ method: 'POST',
279
+ pattern: '/v1/users/bulk_actions',
280
+ handler: (c) => {
281
+ const e = c.engine;
282
+ const action = String((0, util_1.need)(c.body, 'action'));
283
+ const allowed = ['ban', 'unban', 'revoke_sessions', 'add_to_org', 'set_metadata', 'delete', 'require_action'];
284
+ if (!allowed.includes(action))
285
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', `action must be one of ${allowed.join(', ')}.`, 'action');
286
+ const ids = Array.isArray(c.body.user_ids) ? c.body.user_ids : undefined;
287
+ const params = c.body.params ?? {};
288
+ // A user on legal hold is never selected for deletion.
289
+ const targets = e.db.users.filter((u) => !u.deleted && (!ids || ids.includes(u.id)) && !(action === 'delete' && (0, support_1.activeHold)(e, u.id)));
290
+ if (action === 'delete' && c.body.dry_run !== true && typeof c.body.expected_count !== 'number')
291
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'A bulk delete needs expected_count: the matched count a dry run reported.', 'expected_count');
292
+ if (!targets.length)
293
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'No users match this selection.', 'filter');
294
+ if (action === 'delete' && typeof c.body.expected_count === 'number' && c.body.expected_count !== targets.length)
295
+ throw new errors_1.EmulatorError('CONFLICT', `expected_count ${c.body.expected_count} does not match the ${targets.length} users selected.`, 'expected_count');
296
+ if (c.body.dry_run === true)
297
+ return { body: { object: 'bulk_user_action_preview', dry_run: true, action, matched: targets.length } };
298
+ let ok = 0;
299
+ for (const u of targets) {
300
+ if (action === 'ban')
301
+ u.banned = true;
302
+ else if (action === 'unban')
303
+ u.banned = false;
304
+ else if (action === 'revoke_sessions')
305
+ e.db.sessions.filter((s) => s.user_id === u.id).forEach((s) => revokeSession(e, s, 'bulk_action'));
306
+ else if (action === 'set_metadata')
307
+ u.public_metadata = { ...(u.public_metadata ?? {}), ...(params.public_metadata ?? {}) };
308
+ else if (action === 'delete')
309
+ u.deleted = true;
310
+ else if (action === 'add_to_org' && params.organization_id) {
311
+ if (!e.db.memberships.find((m) => m.user_id === u.id && m.organization_id === params.organization_id))
312
+ e.db.memberships.insert({ organization_id: params.organization_id, user_id: u.id, role: params.role ?? 'org:member', role_source: 'direct', created_at: e.clock.now() });
313
+ }
314
+ u.updated_at = e.clock.now();
315
+ u.version = (u.version ?? 0) + 1;
316
+ e.changed({ type: action === 'delete' ? 'user.deleted' : 'user.updated', data: action === 'delete' ? { id: u.id, object: 'user', deleted: true } : (0, users_1.presentUser)(e, u), resource: 'user', id: u.id, op: action === 'delete' ? 'delete' : 'update' });
317
+ ok++;
318
+ }
319
+ const now = e.clock.now();
320
+ const job = { object: 'bulk_user_action', id: e.db.newId('bua'), action, status: 'completed', total: targets.length, processed: ok, succeeded: ok, failed: 0, skipped: 0, progress: 1, errors: [], cancel_requested: false, created_by: { type: 'api_key', id: null }, created_at: now, updated_at: now, completed_at: now };
321
+ st(e).bulk.set(job.id, job);
322
+ e.webhooks.emit('bulk_user_action.completed', job);
323
+ return { status: 202, body: job };
324
+ },
325
+ },
326
+ { method: 'GET', pattern: '/v1/users/bulk_actions', handler: (c) => ({ body: { object: 'list', data: [...st(c.engine).bulk.values()].reverse(), has_more: false, next_cursor: null } }) },
327
+ {
328
+ method: 'POST',
329
+ pattern: '/v1/users/bulk_actions/:id/cancel',
330
+ handler: (c) => {
331
+ const j = st(c.engine).bulk.get(c.params.id ?? '');
332
+ if (!j)
333
+ throw (0, errors_1.notFound)('Bulk action');
334
+ return { body: j }; // jobs run inline, so by the time you can cancel one it is already finished
335
+ },
336
+ },
337
+ {
338
+ method: 'GET',
339
+ pattern: '/v1/users/bulk_actions/:id',
340
+ handler: (c) => {
341
+ const j = st(c.engine).bulk.get(c.params.id ?? '');
342
+ if (!j)
343
+ throw (0, errors_1.notFound)('Job');
344
+ return { body: j };
345
+ },
346
+ },
347
+ {
348
+ method: 'POST',
349
+ pattern: '/v1/users/deleted_addresses',
350
+ handler: (c) => {
351
+ const addrs = Array.isArray(c.body.addresses) ? c.body.addresses : [];
352
+ if (!addrs.length || addrs.length > 5000)
353
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'addresses is a list of 1 to 5000 email addresses or E.164 phone numbers.', 'addresses');
354
+ const valid = addrs.filter((a) => typeof a === 'string' && (/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(a) || /^\+[1-9]\d{6,14}$/.test(a)));
355
+ const before = st(c.engine).deletedAddresses.size;
356
+ for (const a of valid)
357
+ st(c.engine).deletedAddresses.add(a.toLowerCase());
358
+ return { body: { object: 'deleted_address_import', received: addrs.length, added: st(c.engine).deletedAddresses.size - before, invalid: addrs.length - valid.length } };
359
+ },
360
+ },
361
+ {
362
+ method: 'POST',
363
+ pattern: '/v1/users/deleted_addresses/check',
364
+ handler: (c) => {
365
+ if (typeof c.body.address !== 'string')
366
+ throw new errors_1.EmulatorError('VALIDATION_FAILED', 'address is an email address or an E.164 phone number.', 'address');
367
+ return { body: { object: 'deleted_address_check', remembered: st(c.engine).deletedAddresses.has(c.body.address.toLowerCase()) } };
368
+ },
369
+ },
370
+ ];
371
+ }
372
+ //# sourceMappingURL=round2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round2.js","sourceRoot":"","sources":["../../src/handlers/round2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { RouteDef } from '../engine';
2
+ export declare const BULK_MAX_OPERATIONS = 100;
3
+ export declare const BULK_MAX_PAYLOAD = 1048576;
4
+ export declare function scimHandlers(): RouteDef[];