@atlasauth/emulator-core 0.2.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 (244) hide show
  1. package/dist/custom-html.d.ts +57 -0
  2. package/dist/custom-html.js +491 -0
  3. package/dist/custom-html.js.map +1 -0
  4. package/dist/engine.d.ts +1 -1
  5. package/dist/engine.js +4 -0
  6. package/dist/engine.js.map +1 -1
  7. package/dist/error-catalog.js +8 -0
  8. package/dist/error-catalog.js.map +1 -1
  9. package/dist/event-gate.js +60 -2
  10. package/dist/event-gate.js.map +1 -1
  11. package/dist/generic.js +5 -1
  12. package/dist/generic.js.map +1 -1
  13. package/dist/handlers/access-signals.d.ts +48 -0
  14. package/dist/handlers/access-signals.js +76 -0
  15. package/dist/handlers/access-signals.js.map +1 -0
  16. package/dist/handlers/approvals.js +54 -1
  17. package/dist/handlers/approvals.js.map +1 -1
  18. package/dist/handlers/authz-data.d.ts +2 -0
  19. package/dist/handlers/authz-data.js +627 -0
  20. package/dist/handlers/authz-data.js.map +1 -0
  21. package/dist/handlers/authz-layers.d.ts +229 -0
  22. package/dist/handlers/authz-layers.js +786 -0
  23. package/dist/handlers/authz-layers.js.map +1 -0
  24. package/dist/handlers/authz-state.d.ts +80 -0
  25. package/dist/handlers/authz-state.js +175 -0
  26. package/dist/handlers/authz-state.js.map +1 -0
  27. package/dist/handlers/authz.js +240 -177
  28. package/dist/handlers/authz.js.map +1 -1
  29. package/dist/handlers/billing.d.ts +99 -1
  30. package/dist/handlers/billing.js +556 -77
  31. package/dist/handlers/billing.js.map +1 -1
  32. package/dist/handlers/cedar-ext.d.ts +35 -0
  33. package/dist/handlers/cedar-ext.js +174 -0
  34. package/dist/handlers/cedar-ext.js.map +1 -0
  35. package/dist/handlers/cedar.d.ts +146 -0
  36. package/dist/handlers/cedar.js +689 -0
  37. package/dist/handlers/cedar.js.map +1 -0
  38. package/dist/handlers/connections.d.ts +4 -1
  39. package/dist/handlers/connections.js +267 -38
  40. package/dist/handlers/connections.js.map +1 -1
  41. package/dist/handlers/control.js +6 -1
  42. package/dist/handlers/control.js.map +1 -1
  43. package/dist/handlers/device.js +18 -1
  44. package/dist/handlers/device.js.map +1 -1
  45. package/dist/handlers/emu3-misc.d.ts +38 -0
  46. package/dist/handlers/emu3-misc.js +1056 -0
  47. package/dist/handlers/emu3-misc.js.map +1 -0
  48. package/dist/handlers/emu4-actions-access.d.ts +46 -0
  49. package/dist/handlers/emu4-actions-access.js +107 -0
  50. package/dist/handlers/emu4-actions-access.js.map +1 -0
  51. package/dist/handlers/emu4-actions-catalog-extra.d.ts +3 -0
  52. package/dist/handlers/emu4-actions-catalog-extra.js +204 -0
  53. package/dist/handlers/emu4-actions-catalog-extra.js.map +1 -0
  54. package/dist/handlers/emu4-actions-catalog.d.ts +3 -0
  55. package/dist/handlers/emu4-actions-catalog.js +143 -0
  56. package/dist/handlers/emu4-actions-catalog.js.map +1 -0
  57. package/dist/handlers/emu4-actions-def.d.ts +50 -0
  58. package/dist/handlers/emu4-actions-def.js +250 -0
  59. package/dist/handlers/emu4-actions-def.js.map +1 -0
  60. package/dist/handlers/emu4-actions-sandbox.d.ts +36 -0
  61. package/dist/handlers/emu4-actions-sandbox.js +318 -0
  62. package/dist/handlers/emu4-actions-sandbox.js.map +1 -0
  63. package/dist/handlers/emu4-actions-typegen.d.ts +5 -0
  64. package/dist/handlers/emu4-actions-typegen.js +73 -0
  65. package/dist/handlers/emu4-actions-typegen.js.map +1 -0
  66. package/dist/handlers/emu4-actions.d.ts +2 -0
  67. package/dist/handlers/emu4-actions.js +506 -0
  68. package/dist/handlers/emu4-actions.js.map +1 -0
  69. package/dist/handlers/emu4-authz-trust.d.ts +40 -0
  70. package/dist/handlers/emu4-authz-trust.js +488 -0
  71. package/dist/handlers/emu4-authz-trust.js.map +1 -0
  72. package/dist/handlers/emu4-authz.d.ts +2 -0
  73. package/dist/handlers/emu4-authz.js +752 -0
  74. package/dist/handlers/emu4-authz.js.map +1 -0
  75. package/dist/handlers/emu4-billing-core.d.ts +23 -0
  76. package/dist/handlers/emu4-billing-core.js +22 -0
  77. package/dist/handlers/emu4-billing-core.js.map +1 -0
  78. package/dist/handlers/emu4-billing-x.d.ts +2 -0
  79. package/dist/handlers/emu4-billing-x.js +489 -0
  80. package/dist/handlers/emu4-billing-x.js.map +1 -0
  81. package/dist/handlers/emu4-billing.d.ts +14 -0
  82. package/dist/handlers/emu4-billing.js +846 -0
  83. package/dist/handlers/emu4-billing.js.map +1 -0
  84. package/dist/handlers/emu4-clones.d.ts +2 -0
  85. package/dist/handlers/emu4-clones.js +322 -0
  86. package/dist/handlers/emu4-clones.js.map +1 -0
  87. package/dist/handlers/emu4-compliance.d.ts +8 -0
  88. package/dist/handlers/emu4-compliance.js +39 -0
  89. package/dist/handlers/emu4-compliance.js.map +1 -0
  90. package/dist/handlers/emu4-config.d.ts +14 -0
  91. package/dist/handlers/emu4-config.js +148 -0
  92. package/dist/handlers/emu4-config.js.map +1 -0
  93. package/dist/handlers/emu4-cookies.d.ts +8 -0
  94. package/dist/handlers/emu4-cookies.js +248 -0
  95. package/dist/handlers/emu4-cookies.js.map +1 -0
  96. package/dist/handlers/emu4-erasure.d.ts +2 -0
  97. package/dist/handlers/emu4-erasure.js +587 -0
  98. package/dist/handlers/emu4-erasure.js.map +1 -0
  99. package/dist/handlers/emu4-federation.d.ts +8 -0
  100. package/dist/handlers/emu4-federation.js +18 -0
  101. package/dist/handlers/emu4-federation.js.map +1 -0
  102. package/dist/handlers/emu4-journey-math.d.ts +42 -0
  103. package/dist/handlers/emu4-journey-math.js +99 -0
  104. package/dist/handlers/emu4-journey-math.js.map +1 -0
  105. package/dist/handlers/emu4-messaging.d.ts +21 -0
  106. package/dist/handlers/emu4-messaging.js +595 -0
  107. package/dist/handlers/emu4-messaging.js.map +1 -0
  108. package/dist/handlers/emu4-minors.d.ts +7 -0
  109. package/dist/handlers/emu4-minors.js +408 -0
  110. package/dist/handlers/emu4-minors.js.map +1 -0
  111. package/dist/handlers/emu4-oauth-audit.d.ts +5 -0
  112. package/dist/handlers/emu4-oauth-audit.js +17 -0
  113. package/dist/handlers/emu4-oauth-audit.js.map +1 -0
  114. package/dist/handlers/emu4-oauth-auth.d.ts +83 -0
  115. package/dist/handlers/emu4-oauth-auth.js +363 -0
  116. package/dist/handlers/emu4-oauth-auth.js.map +1 -0
  117. package/dist/handlers/emu4-oauth-delivery.d.ts +68 -0
  118. package/dist/handlers/emu4-oauth-delivery.js +207 -0
  119. package/dist/handlers/emu4-oauth-delivery.js.map +1 -0
  120. package/dist/handlers/emu4-oauth-keys.d.ts +11 -0
  121. package/dist/handlers/emu4-oauth-keys.js +268 -0
  122. package/dist/handlers/emu4-oauth-keys.js.map +1 -0
  123. package/dist/handlers/emu4-oauth-pub.d.ts +36 -0
  124. package/dist/handlers/emu4-oauth-pub.js +420 -0
  125. package/dist/handlers/emu4-oauth-pub.js.map +1 -0
  126. package/dist/handlers/emu4-oauth.d.ts +10 -0
  127. package/dist/handlers/emu4-oauth.js +23 -0
  128. package/dist/handlers/emu4-oauth.js.map +1 -0
  129. package/dist/handlers/emu4-policies.d.ts +2 -0
  130. package/dist/handlers/emu4-policies.js +408 -0
  131. package/dist/handlers/emu4-policies.js.map +1 -0
  132. package/dist/handlers/emu4-region.d.ts +2 -0
  133. package/dist/handlers/emu4-region.js +189 -0
  134. package/dist/handlers/emu4-region.js.map +1 -0
  135. package/dist/handlers/emu4-saml.d.ts +12 -0
  136. package/dist/handlers/emu4-saml.js +532 -0
  137. package/dist/handlers/emu4-saml.js.map +1 -0
  138. package/dist/handlers/emu4-shared.d.ts +44 -0
  139. package/dist/handlers/emu4-shared.js +90 -0
  140. package/dist/handlers/emu4-shared.js.map +1 -0
  141. package/dist/handlers/emu4-snapshots.d.ts +38 -0
  142. package/dist/handlers/emu4-snapshots.js +231 -0
  143. package/dist/handlers/emu4-snapshots.js.map +1 -0
  144. package/dist/handlers/emu4-sns.d.ts +9 -0
  145. package/dist/handlers/emu4-sns.js +21 -0
  146. package/dist/handlers/emu4-sns.js.map +1 -0
  147. package/dist/handlers/emu4-trust-binding.d.ts +27 -0
  148. package/dist/handlers/emu4-trust-binding.js +344 -0
  149. package/dist/handlers/emu4-trust-binding.js.map +1 -0
  150. package/dist/handlers/emu4-trust.d.ts +35 -0
  151. package/dist/handlers/emu4-trust.js +543 -0
  152. package/dist/handlers/emu4-trust.js.map +1 -0
  153. package/dist/handlers/fga-engine.d.ts +78 -0
  154. package/dist/handlers/fga-engine.js +663 -0
  155. package/dist/handlers/fga-engine.js.map +1 -0
  156. package/dist/handlers/hooks.js +13 -0
  157. package/dist/handlers/hooks.js.map +1 -1
  158. package/dist/handlers/index.js +14 -1
  159. package/dist/handlers/index.js.map +1 -1
  160. package/dist/handlers/machines.js +6 -0
  161. package/dist/handlers/machines.js.map +1 -1
  162. package/dist/handlers/messaging.d.ts +3 -1
  163. package/dist/handlers/messaging.js +455 -48
  164. package/dist/handlers/messaging.js.map +1 -1
  165. package/dist/handlers/oauth-adv.d.ts +191 -0
  166. package/dist/handlers/oauth-adv.js +1305 -0
  167. package/dist/handlers/oauth-adv.js.map +1 -0
  168. package/dist/handlers/oauth-flows.d.ts +25 -1
  169. package/dist/handlers/oauth-flows.js +111 -50
  170. package/dist/handlers/oauth-flows.js.map +1 -1
  171. package/dist/handlers/oauth.d.ts +24 -3
  172. package/dist/handlers/oauth.js +245 -60
  173. package/dist/handlers/oauth.js.map +1 -1
  174. package/dist/handlers/orgs.js +6 -0
  175. package/dist/handlers/orgs.js.map +1 -1
  176. package/dist/handlers/platform.d.ts +5 -0
  177. package/dist/handlers/platform.js +33 -15
  178. package/dist/handlers/platform.js.map +1 -1
  179. package/dist/handlers/scim.d.ts +2 -0
  180. package/dist/handlers/scim.js +198 -11
  181. package/dist/handlers/scim.js.map +1 -1
  182. package/dist/handlers/sessions.d.ts +2 -0
  183. package/dist/handlers/sessions.js +24 -16
  184. package/dist/handlers/sessions.js.map +1 -1
  185. package/dist/handlers/users.js +3 -0
  186. package/dist/handlers/users.js.map +1 -1
  187. package/dist/jwe.d.ts +18 -0
  188. package/dist/jwe.js +101 -0
  189. package/dist/jwe.js.map +1 -0
  190. package/dist/jws.js +2 -0
  191. package/dist/jws.js.map +1 -1
  192. package/dist/messaging-callbacks.d.ts +100 -0
  193. package/dist/messaging-callbacks.js +767 -0
  194. package/dist/messaging-callbacks.js.map +1 -0
  195. package/dist/openapi.js +41 -1
  196. package/dist/openapi.js.map +1 -1
  197. package/dist/parity-emu3-authz.d.ts +3 -0
  198. package/dist/parity-emu3-authz.js +61 -0
  199. package/dist/parity-emu3-authz.js.map +1 -0
  200. package/dist/parity-emu3-billing.d.ts +3 -0
  201. package/dist/parity-emu3-billing.js +25 -0
  202. package/dist/parity-emu3-billing.js.map +1 -0
  203. package/dist/parity-emu3-messaging.d.ts +3 -0
  204. package/dist/parity-emu3-messaging.js +27 -0
  205. package/dist/parity-emu3-messaging.js.map +1 -0
  206. package/dist/parity-emu3-misc.d.ts +2 -0
  207. package/dist/parity-emu3-misc.js +63 -0
  208. package/dist/parity-emu3-misc.js.map +1 -0
  209. package/dist/parity-emu3-oauth.d.ts +2 -0
  210. package/dist/parity-emu3-oauth.js +39 -0
  211. package/dist/parity-emu3-oauth.js.map +1 -0
  212. package/dist/parity-emu4-actions.d.ts +2 -0
  213. package/dist/parity-emu4-actions.js +38 -0
  214. package/dist/parity-emu4-actions.js.map +1 -0
  215. package/dist/parity-emu4-authz.d.ts +3 -0
  216. package/dist/parity-emu4-authz.js +68 -0
  217. package/dist/parity-emu4-authz.js.map +1 -0
  218. package/dist/parity-emu4-billing.d.ts +6 -0
  219. package/dist/parity-emu4-billing.js +44 -0
  220. package/dist/parity-emu4-billing.js.map +1 -0
  221. package/dist/parity-emu4-compliance.d.ts +2 -0
  222. package/dist/parity-emu4-compliance.js +92 -0
  223. package/dist/parity-emu4-compliance.js.map +1 -0
  224. package/dist/parity-emu4-federation.d.ts +2 -0
  225. package/dist/parity-emu4-federation.js +33 -0
  226. package/dist/parity-emu4-federation.js.map +1 -0
  227. package/dist/parity-emu4-messaging.d.ts +3 -0
  228. package/dist/parity-emu4-messaging.js +42 -0
  229. package/dist/parity-emu4-messaging.js.map +1 -0
  230. package/dist/parity-emu4-oauth.d.ts +2 -0
  231. package/dist/parity-emu4-oauth.js +55 -0
  232. package/dist/parity-emu4-oauth.js.map +1 -0
  233. package/dist/parity-emu4-trust.d.ts +2 -0
  234. package/dist/parity-emu4-trust.js +41 -0
  235. package/dist/parity-emu4-trust.js.map +1 -0
  236. package/dist/parity-routes.js +19 -1
  237. package/dist/parity-routes.js.map +1 -1
  238. package/dist/sns-cert.d.ts +9 -0
  239. package/dist/sns-cert.js +101 -0
  240. package/dist/sns-cert.js.map +1 -0
  241. package/dist/tokens.d.ts +69 -4
  242. package/dist/tokens.js +164 -38
  243. package/dist/tokens.js.map +1 -1
  244. package/package.json +2 -2
@@ -0,0 +1,420 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publisherSectorOf = exports.GOOGLE_ACCESS_TOKEN_TYPE = exports.PUBLISHER_SKIP_SCOPES = exports.MAX_PUBLISHER_APPS = exports.MAX_PUBLISHERS = void 0;
4
+ exports.homepageOnDomain = homepageOnDomain;
5
+ exports.publisherOf = publisherOf;
6
+ exports.publisherDecision = publisherDecision;
7
+ exports.googleTokenExchange = googleTokenExchange;
8
+ exports.emu4PublisherHandlers = emu4PublisherHandlers;
9
+ const errors_1 = require("../errors");
10
+ const store_1 = require("../store");
11
+ const oauth_1 = require("./oauth");
12
+ const oauth_flows_1 = require("./oauth-flows");
13
+ const sessions_1 = require("./sessions");
14
+ const emu4_oauth_audit_1 = require("./emu4-oauth-audit");
15
+ const support_1 = require("./support");
16
+ /**
17
+ * Verified OAuth publishers (`/v1/oauth_publishers`) and the Google access-token exchange, with the real rules.
18
+ *
19
+ * Publishers: a DNS TXT record (`_atlas-publisher.<domain>`, value `atlas-publisher-verification=...`) proves the
20
+ * domain; the emulator has no DNS, so `POST /__emulator/oauth/dns` plays the zone (a TXT record, or a transient
21
+ * lookup failure). Verified status is only ever set by `POST /v1/oauth_publishers/{id}/verify`.
22
+ *
23
+ * Google exchange: a first-party client trades a Google access token for an Atlas session at the token endpoint
24
+ * (`subject_token_type=urn:atlas:token-type:google_access_token`). The emulator has no Google; `POST
25
+ * /__emulator/google/tokens` registers the token Google would vouch for, and the checks Atlas makes against Google's
26
+ * tokeninfo and userinfo answers are the real ones.
27
+ */
28
+ exports.MAX_PUBLISHERS = 50;
29
+ exports.MAX_PUBLISHER_APPS = 200;
30
+ exports.PUBLISHER_SKIP_SCOPES = new Set(['openid', 'email', 'profile']);
31
+ exports.GOOGLE_ACCESS_TOKEN_TYPE = 'urn:atlas:token-type:google_access_token';
32
+ const SESSION_TOKEN_TYPE = 'urn:atlas:token-type:session';
33
+ const TOKEN_PREFIX = 'atlas-publisher-verification=';
34
+ const ps = (0, support_1.engineState)((e) => ({
35
+ publishers: new store_1.Table('oauth_publishers', e.clock.now, 'opub'),
36
+ dns: new Map(),
37
+ google: { cfg: { enabled: false, clientIds: [], hostedDomains: [], allowSignUp: false, atlasClientIds: [] }, tokens: new Map(), links: new Map() },
38
+ }));
39
+ const bad = (message, param) => new errors_1.EmulatorError('VALIDATION_FAILED', message, param);
40
+ const conflict = (message) => new errors_1.EmulatorError('CONFLICT', message);
41
+ const notFoundPub = () => new errors_1.EmulatorError('NOT_FOUND', 'Unknown publisher.');
42
+ const recordName = (domain) => `_atlas-publisher.${domain}`;
43
+ function parseDomain(raw) {
44
+ const domain = typeof raw === 'string' ? raw.trim().toLowerCase().replace(/\.$/, '') : '';
45
+ if (!/^(?!-)[a-z0-9-]{1,63}(?<!-)(\.(?!-)[a-z0-9-]{1,63}(?<!-))+$/.test(domain))
46
+ throw bad('domain must be a host name such as example.com.', 'domain');
47
+ return domain;
48
+ }
49
+ function nameOf(raw) {
50
+ if (typeof raw !== 'string' || raw.trim().length < 1 || raw.trim().length > 100)
51
+ throw bad('name must be 1 to 100 characters.', 'name');
52
+ return raw.trim();
53
+ }
54
+ function boolOf(raw, param) {
55
+ if (typeof raw !== 'boolean')
56
+ throw bad(`${param} must be true or false.`, param);
57
+ return raw;
58
+ }
59
+ /** Does an https homepage live on `domain` (or a subdomain of it)? */
60
+ function homepageOnDomain(url, domain) {
61
+ if (typeof url !== 'string' || !url)
62
+ return false;
63
+ try {
64
+ const u = new URL(url);
65
+ return u.protocol === 'https:' && (u.hostname.toLowerCase() === domain || u.hostname.toLowerCase().endsWith(`.${domain}`));
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ const liveClients = (e, publisherId) => e.db.oauthClients.filter((c) => !c.deleted && c.publisher_id === publisherId);
72
+ function publisherView(e, p) {
73
+ const verified = p.verified_at !== null;
74
+ return {
75
+ object: 'oauth_publisher',
76
+ id: p.id,
77
+ name: p.name,
78
+ domain: p.domain,
79
+ verified,
80
+ verified_at: p.verified_at,
81
+ last_checked_at: p.last_checked_at,
82
+ record_name: recordName(p.domain),
83
+ record_value: p.verification_token,
84
+ shared_sector: p.shared_sector,
85
+ sector_identifier: p.shared_sector && verified ? p.domain : null,
86
+ skip_consent: p.skip_consent,
87
+ client_ids: liveClients(e, p.id).map((c) => c.id),
88
+ created_at: p.created_at,
89
+ updated_at: p.updated_at,
90
+ };
91
+ }
92
+ const find = (e, id) => {
93
+ const p = ps(e).publishers.get(id);
94
+ if (!p)
95
+ throw notFoundPub();
96
+ return p;
97
+ };
98
+ function announce(e, id, action, current, before) {
99
+ (0, emu4_oauth_audit_1.recordAudit)(e, `oauth_publisher.${action}`, 'api_key', 'oauth_publisher', id, { before, after: current });
100
+ e.webhooks.emit('oauth_publisher.updated', { object: 'oauth_publisher', publisher: id, action, current, at: e.clock.now() });
101
+ }
102
+ /** The verified publisher an app belongs to, or undefined. */
103
+ function publisherOf(e, client) {
104
+ const p = client.publisher_id ? ps(e).publishers.get(client.publisher_id) : undefined;
105
+ return p && p.verified_at !== null && homepageOnDomain(client.homepage_url, p.domain) ? p : undefined;
106
+ }
107
+ /** The shared sector of the publisher an app belongs to (its subject settings are then the publisher's). */
108
+ const publisherSectorOf = (e, client) => {
109
+ const p = client.publisher_id ? ps(e).publishers.get(client.publisher_id) : undefined;
110
+ return p?.shared_sector ? p.domain : null;
111
+ };
112
+ exports.publisherSectorOf = publisherSectorOf;
113
+ /**
114
+ * The consent step for an app of a verified publisher: the name to show, and whether one consent covers the publisher's
115
+ * other apps (the publisher opted in, only openid/email/profile asked, and the user already consented to another
116
+ * enabled app of the publisher for at least those scopes).
117
+ */
118
+ function publisherDecision(e, client, userId, requested) {
119
+ const p = publisherOf(e, client);
120
+ if (!p)
121
+ return { publisherName: null, skipConsent: false };
122
+ if (!p.skip_consent || !requested.every((s) => exports.PUBLISHER_SKIP_SCOPES.has(s)))
123
+ return { publisherName: p.name, skipConsent: false };
124
+ const covered = liveClients(e, p.id).filter((s) => s.id !== client.id).some((s) => {
125
+ const held = (0, oauth_flows_1.heldConsent)(e, userId, s.id);
126
+ return !!held && requested.every((r) => held.has(r));
127
+ });
128
+ return { publisherName: p.name, skipConsent: covered };
129
+ }
130
+ // ── Google access-token exchange ───────────────────────────────────
131
+ const TOKEN_RE = /^[\x21-\x7e]{16,4096}$/;
132
+ const SUB_RE = /^[0-9A-Za-z_-]{1,255}$/;
133
+ const isTrue = (v) => v === true || v === 'true';
134
+ /** The real checks, in the real order, against what the stubbed Google answers (tokeninfo, then userinfo). */
135
+ function verifyGoogleToken(e, token) {
136
+ const g = ps(e).google;
137
+ const cfg = g.cfg;
138
+ if (!cfg.clientIds.length)
139
+ return { ok: false, reason: 'no_google_client_ids' };
140
+ if (!TOKEN_RE.test(token))
141
+ return { ok: false, reason: 'malformed_token' };
142
+ const rec = g.tokens.get(token);
143
+ if (!rec)
144
+ return { ok: false, reason: 'google_rejected_token' };
145
+ if (typeof rec.aud !== 'string' || !cfg.clientIds.includes(rec.aud))
146
+ return { ok: false, reason: 'audience_not_allowed' };
147
+ if (rec.azp !== undefined && (typeof rec.azp !== 'string' || !cfg.clientIds.includes(rec.azp)))
148
+ return { ok: false, reason: 'authorized_party_not_allowed' };
149
+ if (!(rec.issued_at + Number(rec.expires_in) * 1000 > e.clock.now()))
150
+ return { ok: false, reason: 'expired' };
151
+ if (typeof rec.sub !== 'string' || !SUB_RE.test(rec.sub))
152
+ return { ok: false, reason: 'no_subject' };
153
+ const scopes = typeof rec.scope === 'string' ? rec.scope.split(' ') : [];
154
+ if (!scopes.includes('openid') && !scopes.includes('https://www.googleapis.com/auth/userinfo.email'))
155
+ return { ok: false, reason: 'scope_missing' };
156
+ const email = typeof rec.email === 'string' ? rec.email.trim().toLowerCase() : '';
157
+ if (!email || !isTrue(rec.email_verified))
158
+ return { ok: false, reason: 'email_not_verified' };
159
+ if (cfg.hostedDomains.length) {
160
+ const hd = typeof rec.hd === 'string' ? rec.hd.toLowerCase() : '';
161
+ if (!hd || !cfg.hostedDomains.includes(hd) || !email.endsWith(`@${hd}`))
162
+ return { ok: false, reason: 'domain_not_allowed' };
163
+ }
164
+ return { ok: true, sub: rec.sub, email, user: rec };
165
+ }
166
+ /** The `urn:atlas:token-type:google_access_token` branch of the token-exchange grant. */
167
+ async function googleTokenExchange(c, client) {
168
+ const e = c.engine;
169
+ const g = ps(e).google;
170
+ const b = c.body;
171
+ const refuse = (status, error, description) => (0, oauth_1.fail)(status, error, description);
172
+ if (!g.cfg.enabled)
173
+ return refuse(400, 'invalid_request', 'The Google token exchange is not enabled for this instance.');
174
+ if (client.first_party !== true || !g.cfg.atlasClientIds.includes(client.id))
175
+ return refuse(403, 'unauthorized_client', 'This client may not exchange a Google access token for a session.');
176
+ if (b.requested_token_type !== undefined && b.requested_token_type !== SESSION_TOKEN_TYPE)
177
+ return refuse(400, 'invalid_request', `A Google access token can only be exchanged for a session (requested_token_type ${SESSION_TOKEN_TYPE}).`);
178
+ if (b.actor_token)
179
+ return refuse(400, 'invalid_request', 'A Google token exchange takes no actor_token.');
180
+ const checked = verifyGoogleToken(e, String(b.subject_token ?? ''));
181
+ // One generic answer for every Google-side refusal, so a caller cannot probe the configuration.
182
+ if (!checked.ok)
183
+ return refuse(400, 'invalid_grant', 'The Google access token was not accepted.');
184
+ const key = `google:${checked.sub}`;
185
+ let user = e.db.users.get(g.links.get(key));
186
+ if (!user || user.deleted) {
187
+ user = e.db.users.filter((u) => !u.deleted && u.emails.some((m) => m.verified === true && m.email_address.toLowerCase() === checked.email))[0];
188
+ if (!user && g.cfg.allowSignUp) {
189
+ const res = await e.handle(new Request(`${e.issuer}/v1/users`, { method: 'POST', headers: { 'content-type': 'application/json', authorization: `Bearer ${e.keys[0].key}` }, body: JSON.stringify({ email_address: checked.email, first_name: checked.user.given_name, last_name: checked.user.family_name, image_url: checked.user.picture }) }));
190
+ if (res.status === 201)
191
+ user = e.db.users.get((await res.json()).id);
192
+ }
193
+ if (!user)
194
+ return refuse(403, 'access_denied', 'No Atlas account matches this Google account.');
195
+ g.links.set(key, user.id);
196
+ }
197
+ if (user.banned || user.locked || user.deleted)
198
+ return refuse(403, 'access_denied', 'This account cannot sign in.');
199
+ const now = e.clock.now();
200
+ const session = e.db.sessions.insert({ user_id: user.id, organization_id: null, status: 'active', created_at: now, expires_at: now + 7 * 86_400_000, last_active_at: now, minted_via: 'google_token_exchange', client_id: client.id, ...(typeof b.device_name === 'string' && b.device_name ? { device_name: b.device_name.slice(0, 100) } : {}) });
201
+ const minted = await e.tokens.mintSession({ userId: user.id, sessionId: session.id, claims: { azp: client.id } });
202
+ return { body: { access_token: minted.jwt, issued_token_type: SESSION_TOKEN_TYPE, token_type: 'Bearer', expires_in: minted.expiresIn, refresh_token: (0, sessions_1.issueRefreshToken)(e, session.id), session_id: session.id }, headers: { 'cache-control': 'no-store', pragma: 'no-cache' } };
203
+ }
204
+ // ── routes ──────────────────────────────────────────────────────────
205
+ function emu4PublisherHandlers() {
206
+ const read = 'oauth_clients:read';
207
+ const write = 'oauth_clients:write';
208
+ return [
209
+ { method: 'GET', pattern: '/v1/oauth_publishers', scope: read, handler: (c) => ({ body: { object: 'list', data: ps(c.engine).publishers.all().reverse().map((p) => publisherView(c.engine, p)), has_more: false } }) },
210
+ {
211
+ method: 'POST',
212
+ pattern: '/v1/oauth_publishers',
213
+ scope: write,
214
+ handler: (c) => {
215
+ const e = c.engine;
216
+ const t = ps(e).publishers;
217
+ const domain = parseDomain(c.body.domain);
218
+ const name = nameOf(c.body.name);
219
+ const sharedSector = c.body.shared_sector === undefined ? false : boolOf(c.body.shared_sector, 'shared_sector');
220
+ const skipConsent = c.body.skip_consent === undefined ? false : boolOf(c.body.skip_consent, 'skip_consent');
221
+ if (sharedSector)
222
+ throw bad('shared_sector can only be turned on once the domain is verified. Create the publisher, verify it, then set shared_sector.', 'shared_sector');
223
+ if (t.size >= exports.MAX_PUBLISHERS)
224
+ throw bad(`An instance holds at most ${exports.MAX_PUBLISHERS} publishers.`, 'domain');
225
+ if (t.find((p) => p.domain === domain))
226
+ throw conflict(`A publisher for ${domain} already exists.`);
227
+ const now = e.clock.now();
228
+ const row = t.insert({ name, domain, verification_token: `${TOKEN_PREFIX}${(0, store_1.randomToken)(18)}`, verified_at: null, last_checked_at: null, shared_sector: false, skip_consent: skipConsent, created_at: now, updated_at: now });
229
+ const view = publisherView(e, row);
230
+ announce(e, row.id, 'created', view, null);
231
+ return { status: 201, body: view };
232
+ },
233
+ },
234
+ { method: 'GET', pattern: '/v1/oauth_publishers/:id', scope: read, handler: (c) => ({ body: publisherView(c.engine, find(c.engine, c.params.id)) }) },
235
+ {
236
+ method: 'PATCH',
237
+ pattern: '/v1/oauth_publishers/:id',
238
+ scope: write,
239
+ handler: (c) => {
240
+ const e = c.engine;
241
+ const p = find(e, c.params.id);
242
+ const patch = {};
243
+ if (c.body.name !== undefined)
244
+ patch.name = nameOf(c.body.name);
245
+ if (c.body.skip_consent !== undefined)
246
+ patch.skip_consent = boolOf(c.body.skip_consent, 'skip_consent');
247
+ if (c.body.shared_sector !== undefined) {
248
+ const on = boolOf(c.body.shared_sector, 'shared_sector');
249
+ if (on && p.verified_at === null)
250
+ throw bad('shared_sector needs a verified domain.', 'shared_sector');
251
+ if (!on && p.shared_sector && liveClients(e, p.id).length)
252
+ throw conflict("Detach the publisher's apps before turning shared_sector off: they keep the shared subject identifiers, and a publisher without the shared sector could no longer manage them.");
253
+ patch.shared_sector = on;
254
+ }
255
+ const before = publisherView(e, p);
256
+ if (Object.entries(patch).every(([k, v]) => p[k] === v))
257
+ return { body: before };
258
+ Object.assign(p, patch, { updated_at: e.clock.now() });
259
+ const view = publisherView(e, p);
260
+ announce(e, p.id, 'updated', view, before);
261
+ return { body: view };
262
+ },
263
+ },
264
+ {
265
+ method: 'DELETE',
266
+ pattern: '/v1/oauth_publishers/:id',
267
+ scope: write,
268
+ handler: (c) => {
269
+ const e = c.engine;
270
+ const p = find(e, c.params.id);
271
+ if (p.shared_sector && liveClients(e, p.id).length)
272
+ throw conflict("Detach the publisher's apps first: they share its subject identifiers.");
273
+ const before = publisherView(e, p);
274
+ for (const cl of e.db.oauthClients.all())
275
+ if (cl.publisher_id === p.id)
276
+ cl.publisher_id = null;
277
+ ps(e).publishers.delete(p.id);
278
+ announce(e, p.id, 'deleted', null, before);
279
+ return { body: { object: 'oauth_publisher', id: p.id, deleted: true } };
280
+ },
281
+ },
282
+ {
283
+ method: 'POST',
284
+ pattern: '/v1/oauth_publishers/:id/verify',
285
+ scope: write,
286
+ handler: (c) => {
287
+ const e = c.engine;
288
+ const p = find(e, c.params.id);
289
+ const zone = ps(e).dns.get(recordName(p.domain));
290
+ // NXDOMAIN / no data means the record is absent; any other failure says nothing, so a verified domain stays verified.
291
+ const lookupFailed = zone?.error != null && zone.error !== 'ENOTFOUND' && zone.error !== 'ENODATA';
292
+ const found = (zone && !zone.error ? zone.records : []).some((chunks) => chunks.join('') === p.verification_token);
293
+ const now = e.clock.now();
294
+ const wasVerified = p.verified_at !== null;
295
+ p.last_checked_at = now;
296
+ if (found && !wasVerified)
297
+ p.verified_at = now;
298
+ if (!found && !lookupFailed)
299
+ p.verified_at = null;
300
+ p.updated_at = now;
301
+ const view = { ...publisherView(e, p), record_found: found };
302
+ if ((p.verified_at !== null) !== wasVerified)
303
+ announce(e, p.id, 'verified', { verified: p.verified_at !== null }, { verified: wasVerified });
304
+ return { body: view };
305
+ },
306
+ },
307
+ {
308
+ method: 'PUT',
309
+ pattern: '/v1/oauth_publishers/:id/clients/:client_id',
310
+ scope: write,
311
+ handler: (c) => {
312
+ const e = c.engine;
313
+ const p = find(e, c.params.id);
314
+ if (p.verified_at === null)
315
+ throw bad("Verify the publisher's domain before attaching apps.", 'client_id');
316
+ const allowChange = c.body.allow_subject_change === undefined ? false : boolOf(c.body.allow_subject_change, 'allow_subject_change');
317
+ const client = e.db.oauthClients.get(c.params.client_id);
318
+ if (!client || client.deleted)
319
+ throw new errors_1.EmulatorError('NOT_FOUND', 'Unknown app.');
320
+ if (!homepageOnDomain(client.homepage_url, p.domain))
321
+ throw bad(`The app's homepage_url must be an https URL on ${p.domain}.`, 'client_id');
322
+ if (liveClients(e, p.id).length >= exports.MAX_PUBLISHER_APPS)
323
+ throw bad(`A publisher holds at most ${exports.MAX_PUBLISHER_APPS} apps.`, 'client_id');
324
+ if (client.publisher_id === p.id)
325
+ return { body: publisherView(e, p) };
326
+ const other = client.publisher_id ? ps(e).publishers.get(client.publisher_id) : undefined;
327
+ if (other)
328
+ throw conflict(`The app already belongs to the publisher for ${other.domain}. Detach it there first.`);
329
+ if (p.shared_sector) {
330
+ if (client.subject_type !== 'pairwise')
331
+ throw bad("A publisher with a shared sector takes pairwise apps only. Set the app's subject_type to pairwise first.", 'client_id');
332
+ if (client.sector_identifier && client.sector_identifier !== p.domain && !allowChange)
333
+ throw conflict(`Attaching this app moves its sector from ${client.sector_identifier} to ${p.domain}, which changes every user's subject identifier in it. Send allow_subject_change: true to confirm.`);
334
+ }
335
+ const before = publisherView(e, p);
336
+ client.publisher_id = p.id;
337
+ if (p.shared_sector && client.sector_identifier !== p.domain)
338
+ client.sector_identifier = p.domain;
339
+ const view = publisherView(e, p);
340
+ announce(e, p.id, 'client_attached', view, before);
341
+ return { body: view };
342
+ },
343
+ },
344
+ {
345
+ method: 'DELETE',
346
+ pattern: '/v1/oauth_publishers/:id/clients/:client_id',
347
+ scope: write,
348
+ handler: (c) => {
349
+ const e = c.engine;
350
+ const p = find(e, c.params.id);
351
+ const client = e.db.oauthClients.get(c.params.client_id);
352
+ if (!client || client.deleted)
353
+ throw new errors_1.EmulatorError('NOT_FOUND', 'Unknown app.');
354
+ if (client.publisher_id !== p.id)
355
+ throw new errors_1.EmulatorError('NOT_FOUND', 'That app does not belong to this publisher.');
356
+ const before = publisherView(e, p);
357
+ // A shared-sector app keeps the sector, so no subject identifier changes.
358
+ client.publisher_id = null;
359
+ const view = publisherView(e, p);
360
+ announce(e, p.id, 'client_detached', view, before);
361
+ return { body: view };
362
+ },
363
+ },
364
+ {
365
+ // The DNS zone: a TXT record (`records` is a list of strings or of string chunks), or `error` for a failed lookup (ENOTFOUND, ENODATA or anything else = transient).
366
+ method: 'POST',
367
+ pattern: '/__emulator/oauth/dns',
368
+ public: true,
369
+ handler: (c) => {
370
+ const name = c.body.name;
371
+ if (typeof name !== 'string' || !name)
372
+ throw bad('name is required.', 'name');
373
+ const raw = c.body.records ?? [];
374
+ if (!Array.isArray(raw))
375
+ throw bad('records must be a list of TXT values.', 'records');
376
+ ps(c.engine).dns.set(name.toLowerCase(), { records: raw.map((r) => (Array.isArray(r) ? r.map(String) : [String(r)])), error: typeof c.body.error === 'string' ? c.body.error : null });
377
+ return { status: 201, body: { ok: true } };
378
+ },
379
+ },
380
+ { method: 'DELETE', pattern: '/__emulator/oauth/dns', public: true, handler: (c) => (ps(c.engine).dns.delete(String(c.body.name ?? '').toLowerCase()), { body: { ok: true } }) },
381
+ {
382
+ method: 'POST',
383
+ pattern: '/__emulator/oauth/google_exchange',
384
+ public: true,
385
+ handler: (c) => {
386
+ const cfg = ps(c.engine).google.cfg;
387
+ const lists = [['client_ids', 'clientIds'], ['hosted_domains', 'hostedDomains'], ['atlas_client_ids', 'atlasClientIds']];
388
+ for (const [k, f] of lists) {
389
+ if (c.body[k] === undefined)
390
+ continue;
391
+ if (!Array.isArray(c.body[k]) || c.body[k].some((x) => typeof x !== 'string'))
392
+ throw bad(`${k} must be a list of strings.`, k);
393
+ cfg[f] = f === 'hostedDomains' ? c.body[k].map((x) => x.toLowerCase()) : c.body[k];
394
+ }
395
+ for (const [k, f] of [['enabled', 'enabled'], ['allow_sign_up', 'allowSignUp']]) {
396
+ if (c.body[k] === undefined)
397
+ continue;
398
+ if (typeof c.body[k] !== 'boolean')
399
+ throw bad(`${k} must be true or false.`, k);
400
+ cfg[f] = c.body[k];
401
+ }
402
+ return { body: { enabled: cfg.enabled, client_ids: cfg.clientIds, hosted_domains: cfg.hostedDomains, allow_sign_up: cfg.allowSignUp, atlas_client_ids: cfg.atlasClientIds } };
403
+ },
404
+ },
405
+ {
406
+ // Register the token Google would vouch for (its tokeninfo and userinfo answers).
407
+ method: 'POST',
408
+ pattern: '/__emulator/google/tokens',
409
+ public: true,
410
+ handler: (c) => {
411
+ const b = c.body;
412
+ const token = typeof b.token === 'string' && b.token ? b.token : `ya29.${(0, store_1.randomToken)(32)}`;
413
+ ps(c.engine).google.tokens.set(token, { aud: b.aud, azp: b.azp, sub: b.sub ?? (0, store_1.randomToken)(10), email: b.email, email_verified: b.email_verified ?? true, hd: b.hd, given_name: b.given_name, family_name: b.family_name, picture: b.picture, name: b.name, scope: typeof b.scope === 'string' ? b.scope : 'openid email profile', expires_in: typeof b.expires_in === 'number' ? b.expires_in : 3600, issued_at: c.engine.clock.now() });
414
+ return { status: 201, body: { access_token: token } };
415
+ },
416
+ },
417
+ { method: 'DELETE', pattern: '/__emulator/google/tokens/:token', public: true, handler: (c) => (ps(c.engine).google.tokens.delete(c.params.token ?? ''), { body: { ok: true } }) },
418
+ ];
419
+ }
420
+ //# sourceMappingURL=emu4-oauth-pub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emu4-oauth-pub.js","sourceRoot":"","sources":["../../src/handlers/emu4-oauth-pub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Engine, RouteDef } from '../engine';
2
+ /**
3
+ * Round-four OAuth routes: instance signing algorithms and the rotation schedule, request-object encryption,
4
+ * private_key_jwt client authentication, form_post and JARM response modes, retried back-channel logout and CIBA
5
+ * delivery, verified publishers, the Google access-token exchange and the registration extensions (software statements,
6
+ * pairwise subjects). Their wiring into the advanced provider lives in the modules they extend.
7
+ */
8
+ export declare function emu4OauthHandlers(): RouteDef[];
9
+ /** Everything the clock made due: the key rotation schedule, then delivery retries. Runs on every `time/advance`. */
10
+ export declare function runOAuthClockWork(e: Engine): Promise<void>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emu4OauthHandlers = emu4OauthHandlers;
4
+ exports.runOAuthClockWork = runOAuthClockWork;
5
+ const emu4_oauth_auth_1 = require("./emu4-oauth-auth");
6
+ const emu4_oauth_delivery_1 = require("./emu4-oauth-delivery");
7
+ const emu4_oauth_keys_1 = require("./emu4-oauth-keys");
8
+ const emu4_oauth_pub_1 = require("./emu4-oauth-pub");
9
+ /**
10
+ * Round-four OAuth routes: instance signing algorithms and the rotation schedule, request-object encryption,
11
+ * private_key_jwt client authentication, form_post and JARM response modes, retried back-channel logout and CIBA
12
+ * delivery, verified publishers, the Google access-token exchange and the registration extensions (software statements,
13
+ * pairwise subjects). Their wiring into the advanced provider lives in the modules they extend.
14
+ */
15
+ function emu4OauthHandlers() {
16
+ return [...(0, emu4_oauth_keys_1.signingKeyHandlers)(), ...(0, emu4_oauth_delivery_1.emu4DeliveryHandlers)(), ...(0, emu4_oauth_pub_1.emu4PublisherHandlers)(), ...(0, emu4_oauth_auth_1.emu4AuthHandlers)()];
17
+ }
18
+ /** Everything the clock made due: the key rotation schedule, then delivery retries. Runs on every `time/advance`. */
19
+ async function runOAuthClockWork(e) {
20
+ await (0, emu4_oauth_keys_1.runSigningSchedule)(e);
21
+ await (0, emu4_oauth_delivery_1.runDueDeliveries)(e);
22
+ }
23
+ //# sourceMappingURL=emu4-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emu4-oauth.js","sourceRoot":"","sources":["../../src/handlers/emu4-oauth.ts"],"names":[],"mappings":";;AAYA,8CAEC;AAGD,8CAGC;AAnBD,uDAAqD;AACrD,+DAA+E;AAC/E,uDAA2E;AAC3E,qDAAyD;AAEzD;;;;;GAKG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,CAAC,GAAG,IAAA,oCAAkB,GAAE,EAAE,GAAG,IAAA,0CAAoB,GAAE,EAAE,GAAG,IAAA,sCAAqB,GAAE,EAAE,GAAG,IAAA,kCAAgB,GAAE,CAAC,CAAC;AACjH,CAAC;AAED,qHAAqH;AAC9G,KAAK,UAAU,iBAAiB,CAAC,CAAS;IAC/C,MAAM,IAAA,oCAAkB,EAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAA,sCAAgB,EAAC,CAAC,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { RouteDef } from '../engine';
2
+ export declare function policyHandlers(): RouteDef[];