@hraness/suite-accounts 0.9.20 → 0.9.22

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/README.md CHANGED
@@ -17,6 +17,17 @@ links, and entitlements. Installing this package does not let a product
17
17
  register itself or pick its own issuer, JWKS endpoint, resource, callback,
18
18
  client ID, wire version, or trust algorithm.
19
19
 
20
+ ## Choose an integration task
21
+
22
+ For a new sign-in integration, [bind a registered client](#bind-a-registered-client) before choosing runtime imports from the [interface map](#interface-map). You need an Accounts registration; installing the package does not create one.
23
+
24
+ - [Trust path](#follow-the-trust-path): see what stays in the browser and what your server verifies.
25
+ - [Identity protocol](#use-the-identity-protocol): parse data without mistaking parsing for signature verification.
26
+ - [Public profiles](#public-profile-v2-contracts): validate revision-bound updates and use the optional React editor.
27
+ - [Fresh authentication](#fresh-authentication-for-server-owned-actions): request recent authentication separately from ordinary sign-in.
28
+ - [Frozen v1 compatibility](#frozen-v1-protocol-compatibility): distinguish historical parsing from current registrations.
29
+ - [Questions before integration](#questions-before-integration): check registration, authorization, and billing responsibilities.
30
+
20
31
  ## Install
21
32
 
22
33
  Pin the immutable release:
@@ -24,7 +35,7 @@ Pin the immutable release:
24
35
  ```json
25
36
  {
26
37
  "dependencies": {
27
- "@hraness/suite-accounts": "github:hraness/suite-accounts#v0.9.20"
38
+ "@hraness/suite-accounts": "github:hraness/suite-accounts#v0.9.22"
28
39
  }
29
40
  }
30
41
  ```
@@ -334,11 +345,13 @@ Create it on the product server and bind it to a durable, short-lived action;
334
345
  do not copy browser parameters, personal data or credentials into it.
335
346
  `expiresAtMs` must be a safe integer after server time and no more than 10
336
347
  minutes ahead. `authenticationNotBeforeMs`, when present, must be a
337
- non-negative safe integer and maps to a positive OIDC `max_age`: the provider
338
- may satisfy the login prompt with a live session authenticated at or after
339
- that instant. Omit it to force a fresh interactive sign-in every time. The
340
- request still uses the exact registered start URL, method
341
- and same-origin rules. The context is encrypted in the transaction cookie and
348
+ non-negative safe integer. It sets the OIDC `max_age` request parameter to
349
+ `max(0, ceil((startedAtMs - authenticationNotBeforeMs) / 1000))`; omitting it
350
+ sends `max_age=0`. Completion still rejects authentication before the
351
+ transaction start's whole-second boundary, so this option does not enable reuse
352
+ of an earlier session.
353
+
354
+ The request uses the exact registered start URL, method, and same-origin rules. The context is encrypted in the transaction cookie and
342
355
  is not added to the authorization URL, continuation HTML or browser session.
343
356
 
344
357
  The fresh transaction uses a separate version. Ordinary `callback()` and
@@ -371,11 +384,7 @@ response may leave a consumed OAuth code; reconcile durable product state and
371
384
  start a new transaction instead of assuming the code can be replayed. Ordinary
372
385
  login, session access and refresh cannot produce fresh completion evidence.
373
386
 
374
- The SDK requests `prompt=login` with `max_age=0` by default, then independently
375
- checks the signed result. An optional `authenticationNotBeforeMs` input maps to
376
- a positive `max_age`, letting the provider satisfy the prompt with a recent
377
- live session instead of another interactive sign-in; the same verified
378
- `auth_time` evidence is still returned for the product's own freshness check.
387
+ The SDK requests `prompt=login` and independently checks the signed result.
379
388
  Request parameters alone are insufficient evidence. See
380
389
  [OIDC authentication-time validation](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation).
381
390
  Before you enable privileged actions, verify how the live Accounts service
@@ -397,9 +406,12 @@ New registration remains an Accounts service change followed by a package
397
406
  release and an exact factory binding. Retired client identifiers and routes are
398
407
  rejected by current APIs.
399
408
 
409
+ The former aicharts browser client and its device-code grant are retired.
410
+ The site remains a public benchmark reference.
411
+
400
412
  The published v1 browser refresh-lock and session-notification channel strings
401
- also remain unchanged in version 0.1. Existing tabs therefore coordinate
402
- across a rolling package migration without a browser namespace cutover.
413
+ retain their original values. Existing tabs therefore coordinate across a
414
+ rolling package migration without a browser namespace cutover.
403
415
 
404
416
  The compatibility registry is intentionally closed. It must not gain runtime
405
417
  mutation, remote discovery, environment overrides, or caller-supplied trust
@@ -407,15 +419,12 @@ values.
407
419
 
408
420
  ## Releases
409
421
 
410
- Pin the immutable `v0.9.20` release for this package version. Each release is
411
- an immutable Git tag, and [`CHANGELOG.md`](CHANGELOG.md) lists what each one
412
- changed.
422
+ Each release is an immutable Git tag. [`CHANGELOG.md`](CHANGELOG.md) lists the
423
+ changes and migration notes for each version.
413
424
 
414
- Deterministic tests exercise valid registrations and readable failures.
415
- Property tests cover foreign-value parsers, ordering, and round trips. The
416
- package smoke installs built entries into clean Bundler and NodeNext consumers
417
- with React 18.3.1 and 19.2.3, then builds the client entries in a clean Next.js
418
- 16.2 webpack consumer.
425
+ When a pull request that bumps the `package.json` version merges and CI passes
426
+ on `main`, the matching `v<version>` tag is created automatically. Pushing the
427
+ tag by hand still works.
419
428
 
420
429
  ## Service boundary
421
430
 
@@ -458,6 +467,7 @@ and product gates before the callback is enabled in production.
458
467
  ```sh
459
468
  bun install --frozen-lockfile --ignore-scripts
460
469
  bun run check
470
+ bun run browser:install
461
471
  bun run test:browser
462
472
  bun pm pack --dry-run --ignore-scripts
463
473
  ```
@@ -476,10 +486,13 @@ styles at compact and wide widths, native focus and readonly controls, vertical
476
486
  writing, hydration, pending saves, conflict revisions, validation errors, and
477
487
  save failures. It also verifies that a real cross-site callback ends before the
478
488
  nonce-locked continuation starts a same-origin session request. Only the save
479
- transport and callback provider are synthetic. The script uses an installed
480
- browser without downloading one; set `CHROMIUM_EXECUTABLE_PATH` to select its
481
- executable. It prints the retained temporary profile evidence directory and
482
- closes its own browsers and loopback servers. Branch and release verification
489
+ transport and callback provider are synthetic. Install the Chromium revision pinned by `playwright-core` with
490
+ `bun run browser:install` before running these checks. An explicit
491
+ `CHROMIUM_EXECUTABLE_PATH` may select a separately provisioned Chrome for Testing;
492
+ the installed Chrome app is rejected, including through a symlink. Checks report
493
+ the resolved executable and version, mute audio, and disable `PaintHolding` and
494
+ `MacAppCodeSignClone` while preserving other browser flags. They print the
495
+ temporary evidence directory and close their browsers and loopback servers. Branch and release verification
483
496
  both require this browser check.
484
497
 
485
498
  The public-profile browser fixture uses the same built optional entry. It
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -380,6 +379,9 @@ function getPublicConsumer(consumer) {
380
379
  return isSuiteAccountsCurrentConsumerId(consumer) ? getSuiteAccountsCurrentConsumer(consumer) : getSuiteAccountsConsumer(consumer);
381
380
  }
382
381
  function parseSuiteAccountsPublicConfig(consumer, environment) {
382
+ if (!isSuiteAccountsCurrentConsumerId(consumer) && !isSuiteAccountsRegisteredConsumerId(consumer)) {
383
+ throw new Error("The Suite Accounts consumer is not registered.");
384
+ }
383
385
  const missing = SUITE_ACCOUNTS_PUBLIC_ENVIRONMENT_KEYS.filter((name) => {
384
386
  const value = environment[name];
385
387
  return typeof value !== "string" || value.trim() === "";
@@ -395,9 +397,6 @@ function parseSuiteAccountsPublicConfig(consumer, environment) {
395
397
  const convex = parseOrigin(deployment.url, "NEXT_PUBLIC_ACCOUNTS_CONVEX_URL");
396
398
  const loopback = [site, convex, convexSite].map((url) => LOOPBACK_HOSTS.has(url.hostname));
397
399
  if (loopback.every(Boolean)) {
398
- if (consumer === "aicharts") {
399
- throw new Error("AI Charts authentication requires its registered production origin.");
400
- }
401
400
  if (deployment.transport !== "local" || site.hostname !== convex.hostname || site.hostname !== convexSite.hostname) {
402
401
  throw new Error("Local consumer and Accounts endpoints must use the same loopback host.");
403
402
  }
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
package/dist/index.js CHANGED
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -985,6 +984,9 @@ function getPublicConsumer(consumer) {
985
984
  return isSuiteAccountsCurrentConsumerId(consumer) ? getSuiteAccountsCurrentConsumer(consumer) : getSuiteAccountsConsumer(consumer);
986
985
  }
987
986
  function parseSuiteAccountsPublicConfig(consumer, environment) {
987
+ if (!isSuiteAccountsCurrentConsumerId(consumer) && !isSuiteAccountsRegisteredConsumerId(consumer)) {
988
+ throw new Error("The Suite Accounts consumer is not registered.");
989
+ }
988
990
  const missing = SUITE_ACCOUNTS_PUBLIC_ENVIRONMENT_KEYS.filter((name) => {
989
991
  const value = environment[name];
990
992
  return typeof value !== "string" || value.trim() === "";
@@ -1000,9 +1002,6 @@ function parseSuiteAccountsPublicConfig(consumer, environment) {
1000
1002
  const convex = parseOrigin(deployment.url, "NEXT_PUBLIC_ACCOUNTS_CONVEX_URL");
1001
1003
  const loopback = [site, convex, convexSite].map((url) => LOOPBACK_HOSTS.has(url.hostname));
1002
1004
  if (loopback.every(Boolean)) {
1003
- if (consumer === "aicharts") {
1004
- throw new Error("AI Charts authentication requires its registered production origin.");
1005
- }
1006
1005
  if (deployment.transport !== "local" || site.hostname !== convex.hostname || site.hostname !== convexSite.hostname) {
1007
1006
  throw new Error("Local consumer and Accounts endpoints must use the same loopback host.");
1008
1007
  }
package/dist/oidc-rp.js CHANGED
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -153,13 +153,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
153
153
  "oh-computer",
154
154
  "sponge",
155
155
  "peopleblade",
156
- "aicharts",
157
156
  "hraness",
158
157
  "soulscrape",
159
158
  "platonik",
160
159
  "ghostget",
161
160
  "alt",
162
- "algal"
161
+ "algal",
162
+ "textmock"
163
163
  ]);
164
164
  function currentOidcSite(id, displayName, productionSiteUrl) {
165
165
  return {
@@ -178,13 +178,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
178
178
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
179
179
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
180
180
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
181
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
182
181
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
183
182
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
184
183
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
185
184
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
186
185
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
187
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
186
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
187
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
188
188
  });
189
189
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
190
190
  "accounts",
@@ -212,7 +212,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
212
212
  "oh-computer",
213
213
  "sponge",
214
214
  "peopleblade",
215
- "aicharts",
216
215
  "hraness",
217
216
  "soulscrape",
218
217
  "platonik",
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -380,6 +379,9 @@ function getPublicConsumer(consumer) {
380
379
  return isSuiteAccountsCurrentConsumerId(consumer) ? getSuiteAccountsCurrentConsumer(consumer) : getSuiteAccountsConsumer(consumer);
381
380
  }
382
381
  function parseSuiteAccountsPublicConfig(consumer, environment) {
382
+ if (!isSuiteAccountsCurrentConsumerId(consumer) && !isSuiteAccountsRegisteredConsumerId(consumer)) {
383
+ throw new Error("The Suite Accounts consumer is not registered.");
384
+ }
383
385
  const missing = SUITE_ACCOUNTS_PUBLIC_ENVIRONMENT_KEYS.filter((name) => {
384
386
  const value = environment[name];
385
387
  return typeof value !== "string" || value.trim() === "";
@@ -395,9 +397,6 @@ function parseSuiteAccountsPublicConfig(consumer, environment) {
395
397
  const convex = parseOrigin(deployment.url, "NEXT_PUBLIC_ACCOUNTS_CONVEX_URL");
396
398
  const loopback = [site, convex, convexSite].map((url) => LOOPBACK_HOSTS.has(url.hostname));
397
399
  if (loopback.every(Boolean)) {
398
- if (consumer === "aicharts") {
399
- throw new Error("AI Charts authentication requires its registered production origin.");
400
- }
401
400
  if (deployment.transport !== "local" || site.hostname !== convex.hostname || site.hostname !== convexSite.hostname) {
402
401
  throw new Error("Local consumer and Accounts endpoints must use the same loopback host.");
403
402
  }
package/dist/registry.js CHANGED
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
@@ -1 +1 @@
1
- {"buildTools":[],"compiler":{"compilerContractVersion":"hraness-stylex-compiler-v1","css":{"filename":"stylex.css","layerPrelude":"complete-finite","targets":{"chrome":7143424,"firefox":7536640,"ios_saf":1049600,"safari":1049600},"topLevelLayers":["base","components"]},"schemaVersion":1,"serializer":{"enableLTRRTLComments":false,"useLayers":{"before":["components.hraness-ui.legacy.base","components.hraness-ui.legacy"],"prefix":"components.hraness-ui"}},"tools":{"babelCore":"7.29.7","lightningcss":"1.33.0","stylex":"0.19.0","stylexBabelCompatibility":{"entry":"lib/index.js","patchId":"stylex-0.19.0-token-parser-explicit-eof-v1","patchSha256":"4d17ac835421e037788f800035cfe91ee4fdce384ce97529d572015ea4318295","patchedSourceBytes":418119,"patchedSourceSha256":"32dfd685bf0ccc18c922ac6906cb911b05b081cc00c0fa6e100818d211abd1ba","sourceBytes":418079,"sourceSha256":"f880cd6733b91557647f1f894dbcbef7102199a112d1e8a6689fcf7b94f736c3"}},"transform":{"classNamePrefix":"x","dev":false,"enableMediaQueryOrder":true,"importSources":["@stylexjs/stylex"],"logicalRoot":"<graph-root>","moduleResolution":"commonJS","propertyValidationMode":"throw","sourceType":"unambiguous","styleResolution":"property-specificity","sxPropName":false,"treeshakeCompensation":true}},"compilerFoundation":"compiler-foundation.css","compilerSha256":"9ac2c8448ec8f198047e824ce27a97657e05025918c01c204aa0399f94641049","kind":"hraness-stylex-package-manifest","package":{"name":"@hraness/suite-accounts","version":"0.9.20"},"rules":[["x1aazh3f",{"ltr":".x1aazh3f{font-variant:inherit}","rtl":null},2000],["x1e6avla",{"ltr":".x1e6avla{border-radius:999px}","rtl":null},2000],["x1rcpt3j",{"ltr":".x1rcpt3j{gap:.45rem}","rtl":null},2000],["x1y0btm7",{"ltr":".x1y0btm7{border-style:solid}","rtl":null},2000],["x1y4qj14",{"ltr":".x1y4qj14{background-position:0% 0%}","rtl":null},2000],["x5goj4r",{"ltr":".x5goj4r{border-radius:.35rem}","rtl":null},2000],["x5m0csh",{"ltr":".x5m0csh{gap:.65rem}","rtl":null},2000],["x73f2yu",{"ltr":".x73f2yu{gap:.35rem}","rtl":null},2000],["x8fetqu",{"ltr":".x8fetqu{gap:1rem}","rtl":null},2000],["x9ox504",{"ltr":".x9ox504{border-color:var(--suite-profile-button-background,currentColor)}","rtl":null},2000],["xc342km",{"ltr":".xc342km{border-width:0}","rtl":null},2000],["xmkeg23",{"ltr":".xmkeg23{border-width:1px}","rtl":null},2000],["xxut2h2",{"ltr":".xxut2h2{border-color:var(--suite-profile-line,currentColor)}","rtl":null},2000],["x103pssi",{"ltr":".x103pssi{background-size:auto auto}","rtl":null},3000],["x10rt0pk",{"ltr":".x10rt0pk{font-feature-settings:inherit}","rtl":null},3000],["x12koezg",{"ltr":".x12koezg{background-origin:padding-box}","rtl":null},3000],["x15bjb6t",{"ltr":".x15bjb6t{line-height:inherit}","rtl":null},3000],["x182nak8",{"ltr":".x182nak8{background-repeat:repeat}","rtl":null},3000],["x18o3ruo",{"ltr":".x18o3ruo{background-image:none}","rtl":null},3000],["x18sabzy",{"ltr":".x18sabzy{border-image-source:none}","rtl":null},3000],["x1c7drp3",{"ltr":".x1c7drp3{accent-color:var(--suite-profile-focus,currentColor)}","rtl":null},3000],["x1e53mt7",{"ltr":".x1e53mt7{border-image-outset:0}","rtl":null},3000],["x1evy7pa",{"ltr":".x1evy7pa{line-height:1.5}","rtl":null},3000],["x1fdtg7e",{"ltr":".x1fdtg7e{background-attachment:scroll}","rtl":null},3000],["x1heor9g",{"ltr":".x1heor9g{color:inherit}","rtl":null},3000],["x1iyjqo2",{"ltr":".x1iyjqo2{flex-grow:1}","rtl":null},3000],["x1jfjhf8",{"ltr":".x1jfjhf8{background-color:var(--suite-profile-button-background,currentColor)}","rtl":null},3000],["x1jleocg",{"ltr":".x1jleocg{border-image-slice:100%}","rtl":null},3000],["x1lliihq",{"ltr":".x1lliihq{display:block}","rtl":null},3000],["x1lqcxt8",{"ltr":".x1lqcxt8{justify-self:start}","rtl":null},3000],["x1nrrp6k",{"ltr":".x1nrrp6k{font-size:.9rem}","rtl":null},3000],["x1pd3egz",{"ltr":".x1pd3egz{font-weight:inherit}","rtl":null},3000],["x1pjjote",{"ltr":".x1pjjote{border-image-width:1}","rtl":null},3000],["x1qlqyl8",{"ltr":".x1qlqyl8{font-size:inherit}","rtl":null},3000],["x1qzg9v8",{"ltr":".x1qzg9v8{font-size:.85rem}","rtl":null},3000],["x1rcybi7",{"ltr":".x1rcybi7{font-language-override:inherit}","rtl":null},3000],["x1t137rt",{"ltr":".x1t137rt{outline-style:none}","rtl":null},3000],["x1t35e8",{"ltr":".x1t35e8{font-style:inherit}","rtl":null},3000],["x1u7o2vf",{"ltr":".x1u7o2vf{background-clip:border-box}","rtl":null},3000],["x1w9dvvm",{"ltr":".x1w9dvvm{background-color:var(--suite-profile-input-background,transparent)}","rtl":null},3000],["x1xh6y1q",{"ltr":".x1xh6y1q{font-stretch:inherit}","rtl":null},3000],["x1xlr1w8",{"ltr":".x1xlr1w8{font-weight:700}","rtl":null},3000],["x1ypdohk",{"ltr":".x1ypdohk{cursor:pointer}","rtl":null},3000],["x288g5",{"ltr":".x288g5{resize:vertical}","rtl":null},3000],["x2lah0s",{"ltr":".x2lah0s{flex-shrink:0}","rtl":null},3000],["x37zpob",{"ltr":".x37zpob{line-height:1.4}","rtl":null},3000],["x5ee4ez",{"ltr":".x5ee4ez{color:var(--suite-profile-muted,currentColor)}","rtl":null},3000],["x61gc8y",{"ltr":".x61gc8y{font-optical-sizing:inherit}","rtl":null},3000],["x6s0dn4",{"ltr":".x6s0dn4{align-items:center}","rtl":null},3000],["x78zum5",{"ltr":".x78zum5{display:flex}","rtl":null},3000],["xd4aj15",{"ltr":".xd4aj15{font-size-adjust:inherit}","rtl":null},3000],["xd5ouml",{"ltr":".xd5ouml{color:var(--suite-profile-error,#a83232)}","rtl":null},3000],["xf9vgkq",{"ltr":".xf9vgkq{opacity:.72}","rtl":null},3000],["xgkqhyc",{"ltr":".xgkqhyc{border-image-repeat:stretch}","rtl":null},3000],["xj0a0fe",{"ltr":".xj0a0fe{overflow-wrap:anywhere}","rtl":null},3000],["xjb2p0i",{"ltr":".xjb2p0i{font-family:inherit}","rtl":null},3000],["xjbqb8w",{"ltr":".xjbqb8w{background-color:transparent}","rtl":null},3000],["xkyhvkk",{"ltr":".xkyhvkk{font-variation-settings:inherit}","rtl":null},3000],["xo1l8bm",{"ltr":".xo1l8bm{font-weight:400}","rtl":null},3000],["xrvj5dj",{"ltr":".xrvj5dj{display:grid}","rtl":null},3000],["xs83m0k",{"ltr":".xs83m0k{flex-shrink:1}","rtl":null},3000],["xt0e3qv",{"ltr":".xt0e3qv{cursor:default}","rtl":null},3000],["xuxw1ft",{"ltr":".xuxw1ft{white-space:nowrap}","rtl":null},3000],["xvmqkbn",{"ltr":".xvmqkbn{font-kerning:inherit}","rtl":null},3000],["xz46ci",{"ltr":".xz46ci{color:var(--suite-profile-button-foreground,Canvas)}","rtl":null},3000],["x14xc8xn",{"ltr":".x14xc8xn:focus-within{outline-style:solid}","rtl":null},3040],["x16gxa91",{"ltr":".x16gxa91:focus-within{outline-width:2px}","rtl":null},3040],["x1fanpfn",{"ltr":".x1fanpfn:focus-within{outline-offset:2px}","rtl":null},3040],["x1p4mulw",{"ltr":".x1p4mulw:focus-within{outline-color:var(--suite-profile-focus,currentColor)}","rtl":null},3040],["x784prv",{"ltr":".x784prv:focus-visible{outline-width:2px}","rtl":null},3040],["x7s97pk",{"ltr":".x7s97pk:focus-visible{outline-offset:2px}","rtl":null},3040],["x9v5kkp",{"ltr":".x9v5kkp:focus-visible{outline-style:solid}","rtl":null},3040],["xo8l03z",{"ltr":".xo8l03z:focus-visible{outline-color:var(--suite-profile-focus,currentColor)}","rtl":null},3040],["xc4xxb1",{"ltr":".xc4xxb1:has(:disabled){opacity:.6}","rtl":null},3045],["xfqoyci",{"ltr":".xfqoyci:disabled{opacity:.6}","rtl":null},3092],["xjb0foi",{"ltr":".xjb0foi:disabled{cursor:wait}","rtl":null},3092],["x13zjp5t",{"ltr":".x13zjp5t{margin-left:.5rem}","rtl":null},4000],["x15u6esi",{"ltr":".x15u6esi{padding-left:.5rem}","rtl":null},4000],["x15y8ph0",{"ltr":".x15y8ph0{padding-top:.7rem}","rtl":null},4000],["x178xt8z",{"ltr":".x178xt8z{border-top-width:1px}","rtl":null},4000],["x18d9i69",{"ltr":".x18d9i69{padding-bottom:0}","rtl":null},4000],["x19hwnzc",{"ltr":".x19hwnzc{min-width:2rem}","rtl":null},4000],["x1b58sdr",{"ltr":".x1b58sdr{padding-top:.5rem}","rtl":null},4000],["x1flg24d",{"ltr":".x1flg24d{padding-top:.65rem}","rtl":null},4000],["x1iul6r4",{"ltr":".x1iul6r4{padding-top:.25rem}","rtl":null},4000],["x1mjqqkp",{"ltr":".x1mjqqkp{margin-top:.5rem}","rtl":null},4000],["x1q57ora",{"ltr":".x1q57ora{padding-top:.75rem}","rtl":null},4000],["x1qhh985",{"ltr":".x1qhh985{border-bottom-width:0}","rtl":null},4000],["x1uhho1l",{"ltr":".x1uhho1l{padding-left:0}","rtl":null},4000],["x1xpa7k",{"ltr":".x1xpa7k{padding-right:0}","rtl":null},4000],["x1yf7rl7",{"ltr":".x1yf7rl7{margin-right:0}","rtl":null},4000],["x33uob6",{"ltr":".x33uob6{padding-right:.75rem}","rtl":null},4000],["x4odjur",{"ltr":".x4odjur{padding-bottom:.65rem}","rtl":null},4000],["x52dz5p",{"ltr":".x52dz5p{padding-right:1rem}","rtl":null},4000],["x79ra4s",{"ltr":".x79ra4s{padding-left:.75rem}","rtl":null},4000],["x9dzeaa",{"ltr":".x9dzeaa{padding-left:1rem}","rtl":null},4000],["xat24cr",{"ltr":".xat24cr{margin-bottom:0}","rtl":null},4000],["xdddoky",{"ltr":".xdddoky{height:1.05rem}","rtl":null},4000],["xdj266r",{"ltr":".xdj266r{margin-top:0}","rtl":null},4000],["xes99ow",{"ltr":".xes99ow{padding-bottom:.25rem}","rtl":null},4000],["xeuugli",{"ltr":".xeuugli{min-width:0}","rtl":null},4000],["xf6x3ch",{"ltr":".xf6x3ch{width:1.05rem}","rtl":null},4000],["xgbkey0",{"ltr":".xgbkey0{min-height:2.75rem}","rtl":null},4000],["xgfja2r",{"ltr":".xgfja2r{border-right-width:0}","rtl":null},4000],["xh8yej3",{"ltr":".xh8yej3{width:100%}","rtl":null},4000],["xhbfen4",{"ltr":".xhbfen4{margin-bottom:.5rem}","rtl":null},4000],["xhdxxi3",{"ltr":".xhdxxi3{height:1.1rem}","rtl":null},4000],["xj3b58b",{"ltr":".xj3b58b{margin-left:0}","rtl":null},4000],["xmh2cwo",{"ltr":".xmh2cwo{width:1.1rem}","rtl":null},4000],["xvgi8cs",{"ltr":".xvgi8cs{padding-bottom:.7rem}","rtl":null},4000],["xyj58a3",{"ltr":".xyj58a3{border-left-width:0}","rtl":null},4000]],"rulesSha256":"31d7dc6f52eff49071378eef338d3387292c4c85c462a6602bc4d5f421fc818a","runtime":[{"bytes":72027,"path":"dist/profile-form.js","sha256":"c5879ae36fb2779677ee4a553b1e606624f07ee30ffc0454fbfe0bac0284c619"}],"schemaVersion":1,"standaloneCss":{"bytes":5493,"path":"dist/stylex.css","sha256":"e52f05b747b1bc28882df95109a7156d8b0517489de315f3cc5119ccc0d84104"},"standaloneSerializer":{"before":["components.hraness-suite-accounts.legacy"],"prefix":"components.hraness-suite-accounts"},"stylesheets":[{"bytes":83,"path":"compiler-foundation.css","sha256":"71172943d9ba5c6194bddf8a8f41c3bd35eb77919a20660019b12e9c2f8849e7"},{"bytes":30,"path":"src/profile-form.css","sha256":"4d4716e779cb53a65a4789db3b4c1340593a3d63d562bab16be8ec704157586c"}]}
1
+ {"buildTools":[],"compiler":{"compilerContractVersion":"hraness-stylex-compiler-v1","css":{"filename":"stylex.css","layerPrelude":"complete-finite","targets":{"chrome":7143424,"firefox":7536640,"ios_saf":1049600,"safari":1049600},"topLevelLayers":["base","components"]},"schemaVersion":1,"serializer":{"enableLTRRTLComments":false,"useLayers":{"before":["components.hraness-ui.legacy.base","components.hraness-ui.legacy"],"prefix":"components.hraness-ui"}},"tools":{"babelCore":"7.29.7","lightningcss":"1.33.0","stylex":"0.19.0","stylexBabelCompatibility":{"entry":"lib/index.js","patchId":"stylex-0.19.0-token-parser-explicit-eof-v1","patchSha256":"4d17ac835421e037788f800035cfe91ee4fdce384ce97529d572015ea4318295","patchedSourceBytes":418119,"patchedSourceSha256":"32dfd685bf0ccc18c922ac6906cb911b05b081cc00c0fa6e100818d211abd1ba","sourceBytes":418079,"sourceSha256":"f880cd6733b91557647f1f894dbcbef7102199a112d1e8a6689fcf7b94f736c3"}},"transform":{"classNamePrefix":"x","dev":false,"enableMediaQueryOrder":true,"importSources":["@stylexjs/stylex"],"logicalRoot":"<graph-root>","moduleResolution":"commonJS","propertyValidationMode":"throw","sourceType":"unambiguous","styleResolution":"property-specificity","sxPropName":false,"treeshakeCompensation":true}},"compilerFoundation":"compiler-foundation.css","compilerSha256":"9ac2c8448ec8f198047e824ce27a97657e05025918c01c204aa0399f94641049","kind":"hraness-stylex-package-manifest","package":{"name":"@hraness/suite-accounts","version":"0.9.22"},"rules":[["x1aazh3f",{"ltr":".x1aazh3f{font-variant:inherit}","rtl":null},2000],["x1e6avla",{"ltr":".x1e6avla{border-radius:999px}","rtl":null},2000],["x1rcpt3j",{"ltr":".x1rcpt3j{gap:.45rem}","rtl":null},2000],["x1y0btm7",{"ltr":".x1y0btm7{border-style:solid}","rtl":null},2000],["x1y4qj14",{"ltr":".x1y4qj14{background-position:0% 0%}","rtl":null},2000],["x5goj4r",{"ltr":".x5goj4r{border-radius:.35rem}","rtl":null},2000],["x5m0csh",{"ltr":".x5m0csh{gap:.65rem}","rtl":null},2000],["x73f2yu",{"ltr":".x73f2yu{gap:.35rem}","rtl":null},2000],["x8fetqu",{"ltr":".x8fetqu{gap:1rem}","rtl":null},2000],["x9ox504",{"ltr":".x9ox504{border-color:var(--suite-profile-button-background,currentColor)}","rtl":null},2000],["xc342km",{"ltr":".xc342km{border-width:0}","rtl":null},2000],["xmkeg23",{"ltr":".xmkeg23{border-width:1px}","rtl":null},2000],["xxut2h2",{"ltr":".xxut2h2{border-color:var(--suite-profile-line,currentColor)}","rtl":null},2000],["x103pssi",{"ltr":".x103pssi{background-size:auto auto}","rtl":null},3000],["x10rt0pk",{"ltr":".x10rt0pk{font-feature-settings:inherit}","rtl":null},3000],["x12koezg",{"ltr":".x12koezg{background-origin:padding-box}","rtl":null},3000],["x15bjb6t",{"ltr":".x15bjb6t{line-height:inherit}","rtl":null},3000],["x182nak8",{"ltr":".x182nak8{background-repeat:repeat}","rtl":null},3000],["x18o3ruo",{"ltr":".x18o3ruo{background-image:none}","rtl":null},3000],["x18sabzy",{"ltr":".x18sabzy{border-image-source:none}","rtl":null},3000],["x1c7drp3",{"ltr":".x1c7drp3{accent-color:var(--suite-profile-focus,currentColor)}","rtl":null},3000],["x1e53mt7",{"ltr":".x1e53mt7{border-image-outset:0}","rtl":null},3000],["x1evy7pa",{"ltr":".x1evy7pa{line-height:1.5}","rtl":null},3000],["x1fdtg7e",{"ltr":".x1fdtg7e{background-attachment:scroll}","rtl":null},3000],["x1heor9g",{"ltr":".x1heor9g{color:inherit}","rtl":null},3000],["x1iyjqo2",{"ltr":".x1iyjqo2{flex-grow:1}","rtl":null},3000],["x1jfjhf8",{"ltr":".x1jfjhf8{background-color:var(--suite-profile-button-background,currentColor)}","rtl":null},3000],["x1jleocg",{"ltr":".x1jleocg{border-image-slice:100%}","rtl":null},3000],["x1lliihq",{"ltr":".x1lliihq{display:block}","rtl":null},3000],["x1lqcxt8",{"ltr":".x1lqcxt8{justify-self:start}","rtl":null},3000],["x1nrrp6k",{"ltr":".x1nrrp6k{font-size:.9rem}","rtl":null},3000],["x1pd3egz",{"ltr":".x1pd3egz{font-weight:inherit}","rtl":null},3000],["x1pjjote",{"ltr":".x1pjjote{border-image-width:1}","rtl":null},3000],["x1qlqyl8",{"ltr":".x1qlqyl8{font-size:inherit}","rtl":null},3000],["x1qzg9v8",{"ltr":".x1qzg9v8{font-size:.85rem}","rtl":null},3000],["x1rcybi7",{"ltr":".x1rcybi7{font-language-override:inherit}","rtl":null},3000],["x1t137rt",{"ltr":".x1t137rt{outline-style:none}","rtl":null},3000],["x1t35e8",{"ltr":".x1t35e8{font-style:inherit}","rtl":null},3000],["x1u7o2vf",{"ltr":".x1u7o2vf{background-clip:border-box}","rtl":null},3000],["x1w9dvvm",{"ltr":".x1w9dvvm{background-color:var(--suite-profile-input-background,transparent)}","rtl":null},3000],["x1xh6y1q",{"ltr":".x1xh6y1q{font-stretch:inherit}","rtl":null},3000],["x1xlr1w8",{"ltr":".x1xlr1w8{font-weight:700}","rtl":null},3000],["x1ypdohk",{"ltr":".x1ypdohk{cursor:pointer}","rtl":null},3000],["x288g5",{"ltr":".x288g5{resize:vertical}","rtl":null},3000],["x2lah0s",{"ltr":".x2lah0s{flex-shrink:0}","rtl":null},3000],["x37zpob",{"ltr":".x37zpob{line-height:1.4}","rtl":null},3000],["x5ee4ez",{"ltr":".x5ee4ez{color:var(--suite-profile-muted,currentColor)}","rtl":null},3000],["x61gc8y",{"ltr":".x61gc8y{font-optical-sizing:inherit}","rtl":null},3000],["x6s0dn4",{"ltr":".x6s0dn4{align-items:center}","rtl":null},3000],["x78zum5",{"ltr":".x78zum5{display:flex}","rtl":null},3000],["xd4aj15",{"ltr":".xd4aj15{font-size-adjust:inherit}","rtl":null},3000],["xd5ouml",{"ltr":".xd5ouml{color:var(--suite-profile-error,#a83232)}","rtl":null},3000],["xf9vgkq",{"ltr":".xf9vgkq{opacity:.72}","rtl":null},3000],["xgkqhyc",{"ltr":".xgkqhyc{border-image-repeat:stretch}","rtl":null},3000],["xj0a0fe",{"ltr":".xj0a0fe{overflow-wrap:anywhere}","rtl":null},3000],["xjb2p0i",{"ltr":".xjb2p0i{font-family:inherit}","rtl":null},3000],["xjbqb8w",{"ltr":".xjbqb8w{background-color:transparent}","rtl":null},3000],["xkyhvkk",{"ltr":".xkyhvkk{font-variation-settings:inherit}","rtl":null},3000],["xo1l8bm",{"ltr":".xo1l8bm{font-weight:400}","rtl":null},3000],["xrvj5dj",{"ltr":".xrvj5dj{display:grid}","rtl":null},3000],["xs83m0k",{"ltr":".xs83m0k{flex-shrink:1}","rtl":null},3000],["xt0e3qv",{"ltr":".xt0e3qv{cursor:default}","rtl":null},3000],["xuxw1ft",{"ltr":".xuxw1ft{white-space:nowrap}","rtl":null},3000],["xvmqkbn",{"ltr":".xvmqkbn{font-kerning:inherit}","rtl":null},3000],["xz46ci",{"ltr":".xz46ci{color:var(--suite-profile-button-foreground,Canvas)}","rtl":null},3000],["x14xc8xn",{"ltr":".x14xc8xn:focus-within{outline-style:solid}","rtl":null},3040],["x16gxa91",{"ltr":".x16gxa91:focus-within{outline-width:2px}","rtl":null},3040],["x1fanpfn",{"ltr":".x1fanpfn:focus-within{outline-offset:2px}","rtl":null},3040],["x1p4mulw",{"ltr":".x1p4mulw:focus-within{outline-color:var(--suite-profile-focus,currentColor)}","rtl":null},3040],["x784prv",{"ltr":".x784prv:focus-visible{outline-width:2px}","rtl":null},3040],["x7s97pk",{"ltr":".x7s97pk:focus-visible{outline-offset:2px}","rtl":null},3040],["x9v5kkp",{"ltr":".x9v5kkp:focus-visible{outline-style:solid}","rtl":null},3040],["xo8l03z",{"ltr":".xo8l03z:focus-visible{outline-color:var(--suite-profile-focus,currentColor)}","rtl":null},3040],["xc4xxb1",{"ltr":".xc4xxb1:has(:disabled){opacity:.6}","rtl":null},3045],["xfqoyci",{"ltr":".xfqoyci:disabled{opacity:.6}","rtl":null},3092],["xjb0foi",{"ltr":".xjb0foi:disabled{cursor:wait}","rtl":null},3092],["x13zjp5t",{"ltr":".x13zjp5t{margin-left:.5rem}","rtl":null},4000],["x15u6esi",{"ltr":".x15u6esi{padding-left:.5rem}","rtl":null},4000],["x15y8ph0",{"ltr":".x15y8ph0{padding-top:.7rem}","rtl":null},4000],["x178xt8z",{"ltr":".x178xt8z{border-top-width:1px}","rtl":null},4000],["x18d9i69",{"ltr":".x18d9i69{padding-bottom:0}","rtl":null},4000],["x19hwnzc",{"ltr":".x19hwnzc{min-width:2rem}","rtl":null},4000],["x1b58sdr",{"ltr":".x1b58sdr{padding-top:.5rem}","rtl":null},4000],["x1flg24d",{"ltr":".x1flg24d{padding-top:.65rem}","rtl":null},4000],["x1iul6r4",{"ltr":".x1iul6r4{padding-top:.25rem}","rtl":null},4000],["x1mjqqkp",{"ltr":".x1mjqqkp{margin-top:.5rem}","rtl":null},4000],["x1q57ora",{"ltr":".x1q57ora{padding-top:.75rem}","rtl":null},4000],["x1qhh985",{"ltr":".x1qhh985{border-bottom-width:0}","rtl":null},4000],["x1uhho1l",{"ltr":".x1uhho1l{padding-left:0}","rtl":null},4000],["x1xpa7k",{"ltr":".x1xpa7k{padding-right:0}","rtl":null},4000],["x1yf7rl7",{"ltr":".x1yf7rl7{margin-right:0}","rtl":null},4000],["x33uob6",{"ltr":".x33uob6{padding-right:.75rem}","rtl":null},4000],["x4odjur",{"ltr":".x4odjur{padding-bottom:.65rem}","rtl":null},4000],["x52dz5p",{"ltr":".x52dz5p{padding-right:1rem}","rtl":null},4000],["x79ra4s",{"ltr":".x79ra4s{padding-left:.75rem}","rtl":null},4000],["x9dzeaa",{"ltr":".x9dzeaa{padding-left:1rem}","rtl":null},4000],["xat24cr",{"ltr":".xat24cr{margin-bottom:0}","rtl":null},4000],["xdddoky",{"ltr":".xdddoky{height:1.05rem}","rtl":null},4000],["xdj266r",{"ltr":".xdj266r{margin-top:0}","rtl":null},4000],["xes99ow",{"ltr":".xes99ow{padding-bottom:.25rem}","rtl":null},4000],["xeuugli",{"ltr":".xeuugli{min-width:0}","rtl":null},4000],["xf6x3ch",{"ltr":".xf6x3ch{width:1.05rem}","rtl":null},4000],["xgbkey0",{"ltr":".xgbkey0{min-height:2.75rem}","rtl":null},4000],["xgfja2r",{"ltr":".xgfja2r{border-right-width:0}","rtl":null},4000],["xh8yej3",{"ltr":".xh8yej3{width:100%}","rtl":null},4000],["xhbfen4",{"ltr":".xhbfen4{margin-bottom:.5rem}","rtl":null},4000],["xhdxxi3",{"ltr":".xhdxxi3{height:1.1rem}","rtl":null},4000],["xj3b58b",{"ltr":".xj3b58b{margin-left:0}","rtl":null},4000],["xmh2cwo",{"ltr":".xmh2cwo{width:1.1rem}","rtl":null},4000],["xvgi8cs",{"ltr":".xvgi8cs{padding-bottom:.7rem}","rtl":null},4000],["xyj58a3",{"ltr":".xyj58a3{border-left-width:0}","rtl":null},4000]],"rulesSha256":"31d7dc6f52eff49071378eef338d3387292c4c85c462a6602bc4d5f421fc818a","runtime":[{"bytes":72013,"path":"dist/profile-form.js","sha256":"2ae54d2952af61a086318931776f1dbb02bab9067b8783401733e1f27b0e1d18"}],"schemaVersion":1,"standaloneCss":{"bytes":5493,"path":"dist/stylex.css","sha256":"e52f05b747b1bc28882df95109a7156d8b0517489de315f3cc5119ccc0d84104"},"standaloneSerializer":{"before":["components.hraness-suite-accounts.legacy"],"prefix":"components.hraness-suite-accounts"},"stylesheets":[{"bytes":83,"path":"compiler-foundation.css","sha256":"71172943d9ba5c6194bddf8a8f41c3bd35eb77919a20660019b12e9c2f8849e7"},{"bytes":30,"path":"src/profile-form.css","sha256":"4d4716e779cb53a65a4789db3b4c1340593a3d63d562bab16be8ec704157586c"}]}
package/dist/urls.js CHANGED
@@ -152,13 +152,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
152
152
  "oh-computer",
153
153
  "sponge",
154
154
  "peopleblade",
155
- "aicharts",
156
155
  "hraness",
157
156
  "soulscrape",
158
157
  "platonik",
159
158
  "ghostget",
160
159
  "alt",
161
- "algal"
160
+ "algal",
161
+ "textmock"
162
162
  ]);
163
163
  function currentOidcSite(id, displayName, productionSiteUrl) {
164
164
  return {
@@ -177,13 +177,13 @@ var SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
177
177
  "oh-computer": SUITE_ACCOUNTS_CONSUMERS["oh-computer"],
178
178
  sponge: currentOidcSite("sponge", "Sponge", SUITE_ACCOUNTS_CURRENT_ORIGIN_OVERRIDES.sponge.production.siteUrl),
179
179
  peopleblade: currentOidcSite("peopleblade", "PeopleBlade", "https://peopleblade.com"),
180
- aicharts: currentOidcSite("aicharts", "AI Charts", "https://aicharts.io"),
181
180
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
182
181
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
183
182
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
184
183
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
185
184
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
186
- algal: currentOidcSite("algal", "Algal", "https://algal.cloud")
185
+ algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
186
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com")
187
187
  });
188
188
  var SUITE_ACCOUNTS_ACTIVE_CONSUMER_IDS = deepFreeze([
189
189
  "accounts",
@@ -211,7 +211,6 @@ var SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS = deepFreeze([
211
211
  "oh-computer",
212
212
  "sponge",
213
213
  "peopleblade",
214
- "aicharts",
215
214
  "hraness",
216
215
  "soulscrape",
217
216
  "platonik",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hraness/suite-accounts",
3
- "version": "0.9.20",
3
+ "version": "0.9.22",
4
4
  "description": "Validated client and protocol boundaries for Hraness Accounts.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -195,16 +195,18 @@
195
195
  "LICENSE"
196
196
  ],
197
197
  "scripts": {
198
- "kb:refresh": "bunx --bun github:hraness/kb#v0.15.2 refresh --root kb",
199
- "kb:check:lane": "bunx --bun github:hraness/kb#v0.15.2 check --root kb --no-catalog",
200
- "kb:check": "bunx --bun github:hraness/kb#v0.15.2 check --root kb && bunx --bun github:hraness/kb#v0.15.2 agents check --root kb --repo .",
201
- "kb:catalog": "bunx --bun github:hraness/kb#v0.15.2 catalog --root kb",
198
+ "kb:refresh": "bunx --bun --package https://github.com/hraness/wordcell/releases/download/v0.24.0/hraness-wordcell-0.24.0.tgz wordcell refresh --root kb",
199
+ "kb:check:lane": "bunx --bun --package https://github.com/hraness/wordcell/releases/download/v0.24.0/hraness-wordcell-0.24.0.tgz wordcell check --root kb --no-catalog",
200
+ "kb:check": "bunx --bun --package https://github.com/hraness/wordcell/releases/download/v0.24.0/hraness-wordcell-0.24.0.tgz wordcell check --root kb && bunx --bun --package https://github.com/hraness/wordcell/releases/download/v0.24.0/hraness-wordcell-0.24.0.tgz wordcell agents check --root kb --repo .",
201
+ "kb:catalog": "bunx --bun --package https://github.com/hraness/wordcell/releases/download/v0.24.0/hraness-wordcell-0.24.0.tgz wordcell catalog --root kb",
202
+ "kb:search": "bunx --bun --package https://github.com/hraness/wordcell/releases/download/v0.24.0/hraness-wordcell-0.24.0.tgz wordcell search --root kb --mode exact --selected-passage",
202
203
  "build": "bun run ./scripts/build.ts",
203
204
  "lint": "eslint src scripts",
204
205
  "typecheck": "tsc --noEmit",
205
206
  "test": "bun test --preload ./scripts/register-stylex-test-transform.ts ./src",
206
207
  "test:property": "bun test ./src/*.property.test.ts ./src/identity/*.property.test.ts",
207
208
  "test:package": "bun run ./scripts/package-smoke.ts",
209
+ "browser:install": "bun x --no-install playwright-core install --with-deps chromium",
208
210
  "test:browser": "bun run test:browser:profile && bun run test:browser:public-profile && bun run test:browser:oidc",
209
211
  "test:browser:oidc": "bun run ./scripts/oidc-navigation-browser.ts",
210
212
  "test:browser:profile": "bun run ./scripts/profile-form-browser.ts",
@@ -8,7 +8,7 @@
8
8
  "name": "@hraness/suite-accounts",
9
9
  "path": ".",
10
10
  "visibility": "public",
11
- "version": "0.9.20"
11
+ "version": "0.9.22"
12
12
  }
13
13
  ],
14
14
  "dependencies": [
@@ -7,6 +7,7 @@ import {
7
7
  getSuiteAccountsConsumer,
8
8
  getSuiteAccountsDeployment,
9
9
  isSuiteAccountsCurrentConsumerId,
10
+ isSuiteAccountsRegisteredConsumerId,
10
11
  type SuiteAccountsAuthConfiguration,
11
12
  type SuiteAccountsCurrentConsumerId,
12
13
  type SuiteAccountsEnvironment,
@@ -159,6 +160,9 @@ export function parseSuiteAccountsPublicConfig(
159
160
  consumer: SuiteAccountsPublicConsumerId,
160
161
  environment: SuiteAccountsPublicEnvironment,
161
162
  ): Exclude<SuiteAccountsPublicConfig, { kind: "invalid" }> {
163
+ if (!isSuiteAccountsCurrentConsumerId(consumer) && !isSuiteAccountsRegisteredConsumerId(consumer)) {
164
+ throw new Error("The Suite Accounts consumer is not registered.");
165
+ }
162
166
  const missing = SUITE_ACCOUNTS_PUBLIC_ENVIRONMENT_KEYS.filter((name) => {
163
167
  const value = environment[name];
164
168
  return typeof value !== "string" || value.trim() === "";
@@ -191,13 +195,6 @@ export function parseSuiteAccountsPublicConfig(
191
195
  LOOPBACK_HOSTS.has(url.hostname)
192
196
  );
193
197
  if (loopback.every(Boolean)) {
194
- // This new registration has no local trust surface. Preserve existing
195
- // consumers' released loopback behavior below.
196
- if (consumer === "aicharts") {
197
- throw new Error(
198
- "AI Charts authentication requires its registered production origin.",
199
- );
200
- }
201
198
  if (
202
199
  deployment.transport !== "local"
203
200
  || site.hostname !== convex.hostname
package/src/registry.ts CHANGED
@@ -220,13 +220,13 @@ export const SUITE_ACCOUNTS_CURRENT_CONSUMER_IDS = deepFreeze([
220
220
  "oh-computer",
221
221
  "sponge",
222
222
  "peopleblade",
223
- "aicharts",
224
223
  "hraness",
225
224
  "soulscrape",
226
225
  "platonik",
227
226
  "ghostget",
228
227
  "alt",
229
228
  "algal",
229
+ "textmock",
230
230
  ] as const);
231
231
 
232
232
  export type SuiteAccountsCurrentConsumerId =
@@ -276,17 +276,13 @@ export const SUITE_ACCOUNTS_CURRENT_CONSUMERS = deepFreeze({
276
276
  "PeopleBlade",
277
277
  "https://peopleblade.com",
278
278
  ),
279
- aicharts: currentOidcSite(
280
- "aicharts",
281
- "AI Charts",
282
- "https://aicharts.io",
283
- ),
284
279
  hraness: currentOidcSite("hraness", "Hraness", "https://hraness.com"),
285
280
  soulscrape: currentOidcSite("soulscrape", "Soulscrape", "https://soulscrape.com"),
286
281
  platonik: currentOidcSite("platonik", "Platonik", "https://platonik.space"),
287
282
  ghostget: currentOidcSite("ghostget", "Ghostget", "https://ghostget.com"),
288
283
  alt: currentOidcSite("alt", "Alt", "https://alt.dog"),
289
284
  algal: currentOidcSite("algal", "Algal", "https://algal.cloud"),
285
+ textmock: currentOidcSite("textmock", "Textmock", "https://textmock.com"),
290
286
  } as const satisfies Readonly<
291
287
  Record<
292
288
  SuiteAccountsCurrentConsumerId,
@@ -391,7 +387,6 @@ export const SUITE_ACCOUNTS_CURRENT_BROWSER_DEVICE_CODE_CONSUMER_IDS =
391
387
  "oh-computer",
392
388
  "sponge",
393
389
  "peopleblade",
394
- "aicharts",
395
390
  "hraness",
396
391
  "soulscrape",
397
392
  "platonik",