@absolutejs/absolute 0.20.0-beta.91 → 0.20.0-beta.92

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/CHANGELOG.md CHANGED
@@ -6,6 +6,12 @@ This file is generated by `absolute-changelog` from the entries in
6
6
  `changelog/`. Edit an entry, not this file — and add new ones under
7
7
  `changelog/unreleased/`.
8
8
 
9
+ ## 0.20.0-beta.92 — 2026-09-13
10
+
11
+ ### Changed
12
+
13
+ - **Expo iOS now has an automated native observability gate for generated Swift compilation, trusted-relay redaction, restart-safe retry, acknowledgement, and deduplication.** (`expoNativeObservabilityRuntimeSource`)
14
+
9
15
  ## 0.20.0-beta.91 — 2026-09-13
10
16
 
11
17
  ### Added
package/changelog.json CHANGED
@@ -2,6 +2,19 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/absolute",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "kind": "changed",
9
+ "summary": "Expo iOS now has an automated native observability gate for generated Swift compilation, trusted-relay redaction, restart-safe retry, acknowledgement, and deduplication.",
10
+ "symbols": [
11
+ "expoNativeObservabilityRuntimeSource"
12
+ ]
13
+ }
14
+ ],
15
+ "date": "2026-09-13",
16
+ "version": "0.20.0-beta.92"
17
+ },
5
18
  {
6
19
  "changes": [
7
20
  {
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  var __require = import.meta.require;
3
3
 
4
- // .angular-partial-tmp-rATpjE/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-d8AfPq/src/core/streamingSlotRegistrar.ts
5
5
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
6
6
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
7
7
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  var __require = import.meta.require;
3
3
 
4
- // .angular-partial-tmp-rATpjE/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-d8AfPq/src/core/streamingSlotRegistrar.ts
5
5
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
6
6
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
7
7
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -48,7 +48,7 @@ var warnMissingStreamingSlotCollector = (primitiveName) => {
48
48
  getWarningController()?.maybeWarn(primitiveName);
49
49
  };
50
50
 
51
- // .angular-partial-tmp-rATpjE/src/core/streamingSlotRegistry.ts
51
+ // .angular-partial-tmp-d8AfPq/src/core/streamingSlotRegistry.ts
52
52
  var STREAMING_SLOT_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotAsyncLocalStorage");
53
53
  var isObjectRecord2 = (value) => Boolean(value) && typeof value === "object";
54
54
  var isAsyncLocalStorage = (value) => isObjectRecord2(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
@@ -12,7 +12,7 @@ import {
12
12
  createIslandRegistryDefinitionPlugin,
13
13
  finalizeAbsoluteMobileCompatibilityBuild,
14
14
  resolveServerBundleExternals
15
- } from "./index-jqdt7841.js";
15
+ } from "./index-751czk1b.js";
16
16
  import {
17
17
  loadIslandRegistryBuildInfo
18
18
  } from "./index-bzs19w3r.js";
@@ -36,7 +36,7 @@ import"./index-w5vswatm.js";
36
36
  import {
37
37
  normalizeAbsoluteMobileConfig
38
38
  } from "./index-rd2hbttb.js";
39
- import"./index-tame6e2c.js";
39
+ import"./index-8zrnvazp.js";
40
40
  import {
41
41
  ABSOLUTE_NATIVE_AUTH_CLIENTS_ENV,
42
42
  installAbsoluteMobileAuthEnvironment
@@ -1282,7 +1282,7 @@ var loadAbsoluteMobileDevModules = async () => {
1282
1282
  iosNativeWatcher
1283
1283
  ] = await Promise.all([
1284
1284
  import("./config-vy04mqce.js"),
1285
- import("./expoProject-dac8fqhq.js"),
1285
+ import("./expoProject-djc0vk7g.js"),
1286
1286
  import("./expoDevController-tr63cg78.js"),
1287
1287
  import("./nativeAuth-zx4tsb1f.js"),
1288
1288
  import("./androidEmulatorController-nybhzc6c.js"),
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  syncAbsoluteExpoWebAssets,
4
4
  writeAbsoluteExpoProject
5
- } from "./index-tame6e2c.js";
5
+ } from "./index-8zrnvazp.js";
6
6
  import"./index-ar4gz15x.js";
7
7
  import"./index-mywsk201.js";
8
8
  export {
@@ -10,7 +10,7 @@ import {
10
10
  resolveAbsoluteMobileUpdateRuntime,
11
11
  syncAbsoluteExpoWebAssets,
12
12
  writeAbsoluteExpoProject
13
- } from "./index-tame6e2c.js";
13
+ } from "./index-8zrnvazp.js";
14
14
 
15
15
  // src/build/islandRegistryTransform.ts
16
16
  import { basename } from "path";
@@ -998,6 +998,27 @@ public final class AbsoluteMobileObservabilityModule: Module, MXMetricManagerSub
998
998
  }
999
999
  }
1000
1000
  }
1001
+
1002
+ #if DEBUG
1003
+ AsyncFunction("enqueueForTesting") { (options: [String: String]) -> Bool in
1004
+ guard let testId = options["testId"],
1005
+ testId.range(of: "^[A-Za-z0-9._:-]{1,128}$", options: .regularExpression) != nil else { return false }
1006
+ let key = "absolute-native-observability-test-id"
1007
+ guard UserDefaults.standard.string(forKey: key) != testId else { return false }
1008
+ UserDefaults.standard.set(testId, forKey: key)
1009
+ Self.queue.sync {
1010
+ Self.enqueue(
1011
+ kind: "crash",
1012
+ occurredAt: Date().timeIntervalSince1970 * 1000,
1013
+ details: [
1014
+ "message": "token=mobile-observability-secret",
1015
+ "source": "absolutejs-conformance"
1016
+ ]
1017
+ )
1018
+ }
1019
+ return true
1020
+ }
1021
+ #endif
1001
1022
  }
1002
1023
 
1003
1024
  private static func root() -> URL? {
@@ -1281,6 +1302,7 @@ import { ABSOLUTE_MOBILE_MANIFEST } from './webAssets';
1281
1302
  type NativeObservabilityModule = {
1282
1303
  acknowledge(options: { ids: string[] }): Promise<void>;
1283
1304
  crashForTesting(options: { testId: string }): Promise<boolean>;
1305
+ enqueueForTesting(options: { testId: string }): Promise<boolean>;
1284
1306
  pending(): Promise<{ reports: unknown[] }>;
1285
1307
  };
1286
1308
  type NativeReport = { details: Record<string, unknown>; id: string; kind: string; occurredAt: number; platform: 'android' | 'ios' };
@@ -1342,6 +1364,12 @@ export const startAbsoluteExpoNativeObservability = () => {
1342
1364
  return drain();
1343
1365
  };
1344
1366
  export const crashAbsoluteExpoNativeObservabilityForTesting = (testId: string) => native.crashForTesting({ testId });
1367
+ export const enqueueAbsoluteExpoNativeObservabilityForTesting = async (testId: string) => {
1368
+ await drain();
1369
+ const enqueued = await native.enqueueForTesting({ testId });
1370
+ await drain();
1371
+ return enqueued;
1372
+ };
1345
1373
  `;
1346
1374
  var absoluteExpoNativeObservabilityFiles = (project) => new Map([
1347
1375
  [
@@ -6,7 +6,7 @@ import {
6
6
  createIslandRegistryDefinitionPlugin,
7
7
  finalizeAbsoluteMobileCompatibilityBuild,
8
8
  resolveServerBundleExternals
9
- } from "./index-jqdt7841.js";
9
+ } from "./index-751czk1b.js";
10
10
  import {
11
11
  loadIslandRegistryBuildInfo
12
12
  } from "./index-bzs19w3r.js";
package/dist/cli/index.js CHANGED
@@ -58,7 +58,7 @@ if (command === "dev") {
58
58
  }
59
59
  const positionalArgs = stripNamedArgs("--config", "--android-device", "--ios-device").filter((arg) => arg !== "--no-mobile" && arg !== "--eager");
60
60
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
61
- const { dev } = await import("./dev-aykeaa7b.js");
61
+ const { dev } = await import("./dev-perzmh2w.js");
62
62
  await dev(serverEntry, configPath, {
63
63
  androidDevice,
64
64
  eager: args.includes("--eager"),
@@ -71,7 +71,7 @@ if (command === "dev") {
71
71
  const configPath = parseNamedArg("--config");
72
72
  const positionalArgs = stripNamedArgs("--outdir", "--config").filter((arg) => arg !== "--prebuilt");
73
73
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
74
- const { start } = await import("./start-7jg0csqy.js");
74
+ const { start } = await import("./start-ef7tgbmf.js");
75
75
  await start(serverEntry, outdir, configPath, {
76
76
  prebuilt: args.includes("--prebuilt")
77
77
  });
@@ -81,7 +81,7 @@ if (command === "dev") {
81
81
  const configPath = parseNamedArg("--config");
82
82
  const positionalArgs = stripNamedArgs("--outdir", "--config");
83
83
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
84
- const { start } = await import("./start-7jg0csqy.js");
84
+ const { start } = await import("./start-ef7tgbmf.js");
85
85
  await start(serverEntry, outdir, configPath, { prepareOnly: true });
86
86
  } else if (command === "build") {
87
87
  sendTelemetryEvent("cli:command", { command });
@@ -197,13 +197,13 @@ if (command === "dev") {
197
197
  const configPath = parseNamedArg("--config");
198
198
  const positionalArgs = stripNamedArgs("--outdir", "--outfile", "--config");
199
199
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
200
- const { compile } = await import("./compile-5hchbcbd.js");
200
+ const { compile } = await import("./compile-vf61bv90.js");
201
201
  await compile(serverEntry, outdir, outfile, configPath);
202
202
  } else if (command === "mobile") {
203
203
  sendTelemetryEvent("cli:command", {
204
204
  command: `mobile:${workspaceCommand ?? "unknown"}`
205
205
  });
206
- const { runMobile } = await import("./mobile-bg1jy34n.js");
206
+ const { runMobile } = await import("./mobile-yk7qr9qg.js");
207
207
  try {
208
208
  await runMobile(args);
209
209
  } catch (error) {
@@ -7,12 +7,12 @@ import {
7
7
  } from "./index-9r7n9dqp.js";
8
8
  import {
9
9
  start
10
- } from "./index-39j0dhq7.js";
10
+ } from "./index-gxkmg2ss.js";
11
11
  import {
12
12
  ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,
13
13
  ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,
14
14
  resolveAbsoluteMobileRoute
15
- } from "./index-jqdt7841.js";
15
+ } from "./index-751czk1b.js";
16
16
  import"./index-bzs19w3r.js";
17
17
  import"./index-s2tazax7.js";
18
18
  import {
@@ -66,7 +66,7 @@ import {
66
66
  syncAbsoluteExpoWebAssets,
67
67
  unsignedAbsoluteMobileUpdate,
68
68
  writeAbsoluteExpoProject
69
- } from "./index-tame6e2c.js";
69
+ } from "./index-8zrnvazp.js";
70
70
  import {
71
71
  normalizeAbsoluteIosDeviceIdentifier
72
72
  } from "./index-j66p8hn5.js";
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  start
4
- } from "./index-39j0dhq7.js";
5
- import"./index-jqdt7841.js";
4
+ } from "./index-gxkmg2ss.js";
5
+ import"./index-751czk1b.js";
6
6
  import"./index-bzs19w3r.js";
7
7
  import"./index-s2tazax7.js";
8
8
  import"./index-fc9vxw56.js";
@@ -11,7 +11,7 @@ import"./index-06cmrcdq.js";
11
11
  import"./index-9kwmb3c0.js";
12
12
  import"./index-w5vswatm.js";
13
13
  import"./index-rd2hbttb.js";
14
- import"./index-tame6e2c.js";
14
+ import"./index-8zrnvazp.js";
15
15
  import"./index-ar4gz15x.js";
16
16
  import"./index-t84wxk1p.js";
17
17
  import"./index-wtfnv3n2.js";
@@ -27843,6 +27843,27 @@ public final class AbsoluteMobileObservabilityModule: Module, MXMetricManagerSub
27843
27843
  }
27844
27844
  }
27845
27845
  }
27846
+
27847
+ #if DEBUG
27848
+ AsyncFunction("enqueueForTesting") { (options: [String: String]) -> Bool in
27849
+ guard let testId = options["testId"],
27850
+ testId.range(of: "^[A-Za-z0-9._:-]{1,128}$", options: .regularExpression) != nil else { return false }
27851
+ let key = "absolute-native-observability-test-id"
27852
+ guard UserDefaults.standard.string(forKey: key) != testId else { return false }
27853
+ UserDefaults.standard.set(testId, forKey: key)
27854
+ Self.queue.sync {
27855
+ Self.enqueue(
27856
+ kind: "crash",
27857
+ occurredAt: Date().timeIntervalSince1970 * 1000,
27858
+ details: [
27859
+ "message": "token=mobile-observability-secret",
27860
+ "source": "absolutejs-conformance"
27861
+ ]
27862
+ )
27863
+ }
27864
+ return true
27865
+ }
27866
+ #endif
27846
27867
  }
27847
27868
 
27848
27869
  private static func root() -> URL? {
@@ -28126,6 +28147,7 @@ import { ABSOLUTE_MOBILE_MANIFEST } from './webAssets';
28126
28147
  type NativeObservabilityModule = {
28127
28148
  acknowledge(options: { ids: string[] }): Promise<void>;
28128
28149
  crashForTesting(options: { testId: string }): Promise<boolean>;
28150
+ enqueueForTesting(options: { testId: string }): Promise<boolean>;
28129
28151
  pending(): Promise<{ reports: unknown[] }>;
28130
28152
  };
28131
28153
  type NativeReport = { details: Record<string, unknown>; id: string; kind: string; occurredAt: number; platform: 'android' | 'ios' };
@@ -28187,6 +28209,12 @@ export const startAbsoluteExpoNativeObservability = () => {
28187
28209
  return drain();
28188
28210
  };
28189
28211
  export const crashAbsoluteExpoNativeObservabilityForTesting = (testId: string) => native.crashForTesting({ testId });
28212
+ export const enqueueAbsoluteExpoNativeObservabilityForTesting = async (testId: string) => {
28213
+ await drain();
28214
+ const enqueued = await native.enqueueForTesting({ testId });
28215
+ await drain();
28216
+ return enqueued;
28217
+ };
28190
28218
  `;
28191
28219
  var absoluteExpoNativeObservabilityFiles = (project) => new Map([
28192
28220
  [
@@ -40512,5 +40540,5 @@ export {
40512
40540
  writeAbsoluteMobileUpdateRegistry
40513
40541
  };
40514
40542
 
40515
- //# debugId=8D376EB1B818995C64756E2164756E21
40543
+ //# debugId=8F55062CC1F78A5264756E2164756E21
40516
40544
  //# sourceMappingURL=index.js.map