@absolutejs/absolute 0.20.0-beta.6 → 0.20.0-beta.60

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 (179) hide show
  1. package/README.md +205 -0
  2. package/dist/angular/browser.js +392 -405
  3. package/dist/angular/browser.js.map +3 -3
  4. package/dist/angular/components/core/streamingSlotRegistrar.js +7 -7
  5. package/dist/angular/components/core/streamingSlotRegistry.js +4 -4
  6. package/dist/angular/index.js +379 -321
  7. package/dist/angular/index.js.map +8 -7
  8. package/dist/angular/server.js +133 -61
  9. package/dist/angular/server.js.map +8 -7
  10. package/dist/build.js +2336 -1347
  11. package/dist/build.js.map +22 -17
  12. package/dist/cli/config/client.js +12 -12
  13. package/dist/cli/config/server.js +1140 -1091
  14. package/dist/cli/index.js +9621 -2093
  15. package/dist/client/chunks/angularPatch-arh4sr68.js +157 -0
  16. package/dist/client/chunks/angularPatch-arh4sr68.js.map +10 -0
  17. package/dist/client/chunks/index-5py90ctf.js +87 -0
  18. package/dist/client/chunks/index-5py90ctf.js.map +10 -0
  19. package/dist/client/chunks/index-m35nbkdp.js +374 -0
  20. package/dist/client/chunks/index-m35nbkdp.js.map +12 -0
  21. package/dist/client/chunks/index-qxjc7kc5.js +12 -0
  22. package/dist/client/chunks/index-qxjc7kc5.js.map +9 -0
  23. package/dist/client/chunks/islands-xj2n8nwf.js +281 -0
  24. package/dist/client/chunks/islands-xj2n8nwf.js.map +14 -0
  25. package/dist/client/chunks/react-pdg4325x.js +65 -0
  26. package/dist/client/chunks/react-pdg4325x.js.map +10 -0
  27. package/dist/client/chunks/svelte-s0c964kb.js +19 -0
  28. package/dist/client/chunks/svelte-s0c964kb.js.map +10 -0
  29. package/dist/client/chunks/vue-rdskrnyg.js +24 -0
  30. package/dist/client/chunks/vue-rdskrnyg.js.map +10 -0
  31. package/dist/client/index.js +73 -841
  32. package/dist/client/index.js.map +7 -20
  33. package/dist/core/streamingSlotRegistrar.js +15 -13
  34. package/dist/core/streamingSlotRegistrar.js.map +2 -2
  35. package/dist/core/streamingSlotRegistry.js +11 -9
  36. package/dist/core/streamingSlotRegistry.js.map +2 -2
  37. package/dist/dev/client/hmrClient.ts +35 -3
  38. package/dist/dev/client/hmrTiming.ts +6 -0
  39. package/dist/dev/client/syncDevtools.ts +237 -0
  40. package/dist/dev/serverBootstrap.js +28 -0
  41. package/dist/image-client/imageClient.js +7 -7
  42. package/dist/index.js +3748 -2361
  43. package/dist/index.js.map +38 -30
  44. package/dist/islands/browser.js +11 -25
  45. package/dist/islands/browser.js.map +2 -2
  46. package/dist/islands/index.js +55 -52
  47. package/dist/islands/index.js.map +5 -4
  48. package/dist/mobile/browser.js +429 -20
  49. package/dist/mobile/browser.js.map +8 -5
  50. package/dist/mobile/index.js +10626 -3132
  51. package/dist/mobile/index.js.map +47 -18
  52. package/dist/mobile/remoteMacAgentEntry.js +1374 -14
  53. package/dist/mobile/shellAuth.js +36 -0
  54. package/dist/mobile/shellBootstrap.js +1800 -0
  55. package/dist/mobile/shellExpoAuth.js +163 -0
  56. package/dist/mobile/shellExpoDevices.js +77 -0
  57. package/dist/mobile/shellExpoSync.js +104 -0
  58. package/dist/mobile/shellSync.js +184 -0
  59. package/dist/mobile/shellUpdate.js +456 -0
  60. package/dist/mobile/uiPrimitives.js +264 -0
  61. package/dist/react/browser.js +17 -59
  62. package/dist/react/browser.js.map +2 -2
  63. package/dist/react/components/browser/index.js +107 -107
  64. package/dist/react/components/index.js +118 -116
  65. package/dist/react/components/index.js.map +2 -2
  66. package/dist/react/hooks/index.js +11 -25
  67. package/dist/react/hooks/index.js.map +2 -2
  68. package/dist/react/index.js +110 -67
  69. package/dist/react/index.js.map +8 -7
  70. package/dist/react/jsxDevRuntimeCompat.js +11 -9
  71. package/dist/react/jsxDevRuntimeCompat.js.map +2 -2
  72. package/dist/react/jsxRuntimeCompat.js +11 -9
  73. package/dist/react/jsxRuntimeCompat.js.map +2 -2
  74. package/dist/react/router/browser.js +9 -7
  75. package/dist/react/router/browser.js.map +2 -2
  76. package/dist/react/router/index.js +9 -7
  77. package/dist/react/router/index.js.map +2 -2
  78. package/dist/react/server.js +67 -11
  79. package/dist/react/server.js.map +7 -6
  80. package/dist/src/build/pwa.d.ts +16 -0
  81. package/dist/src/cli/config/server.d.ts +1 -1
  82. package/dist/src/cli/instanceStatus.d.ts +1 -0
  83. package/dist/src/cli/scripts/dev.d.ts +2 -0
  84. package/dist/src/client/browserTranslation.d.ts +19 -0
  85. package/dist/src/client/index.d.ts +1 -0
  86. package/dist/src/core/browserTranslation.d.ts +6 -0
  87. package/dist/src/core/devBuild.d.ts +1 -0
  88. package/dist/src/core/prepare.d.ts +376 -0
  89. package/dist/src/dev/clientManager.d.ts +1 -0
  90. package/dist/src/dev/devCert.d.ts +6 -4
  91. package/dist/src/dev/serverEntryCopies.d.ts +3 -0
  92. package/dist/src/ember/browser.d.ts +0 -16
  93. package/dist/src/mobile/adaptiveShell.d.ts +27 -0
  94. package/dist/src/mobile/androidEmulatorController.d.ts +8 -1
  95. package/dist/src/mobile/androidRelease.d.ts +9 -2
  96. package/dist/src/mobile/androidTestReport.d.ts +14 -0
  97. package/dist/src/mobile/androidUpgradeConformance.d.ts +47 -0
  98. package/dist/src/mobile/androidWebView.d.ts +1 -0
  99. package/dist/src/mobile/browser.d.ts +2 -0
  100. package/dist/src/mobile/capacitorBundle.d.ts +18 -0
  101. package/dist/src/mobile/ciWorkflow.d.ts +26 -0
  102. package/dist/src/mobile/config.d.ts +9 -1
  103. package/dist/src/mobile/devDeviceAdapter.d.ts +3 -0
  104. package/dist/src/mobile/deviceCapabilities.d.ts +49 -0
  105. package/dist/src/mobile/expoBridge.d.ts +91 -0
  106. package/dist/src/mobile/expoDevController.d.ts +56 -0
  107. package/dist/src/mobile/expoProject.d.ts +16 -0
  108. package/dist/src/mobile/index.d.ts +23 -0
  109. package/dist/src/mobile/iosDeviceAcceptance.d.ts +32 -0
  110. package/dist/src/mobile/iosPhysicalDeviceTransport.d.ts +16 -0
  111. package/dist/src/mobile/iosRelease.d.ts +63 -3
  112. package/dist/src/mobile/iosSimulatorController.d.ts +20 -2
  113. package/dist/src/mobile/iosTestReport.d.ts +24 -0
  114. package/dist/src/mobile/mobileBundleInspection.d.ts +63 -0
  115. package/dist/src/mobile/mobileInspect.d.ts +142 -0
  116. package/dist/src/mobile/mobilePreview.d.ts +174 -0
  117. package/dist/src/mobile/mobilePreviewClient.d.ts +1 -0
  118. package/dist/src/mobile/nativeAuth.d.ts +6 -0
  119. package/dist/src/mobile/nativeBackgroundSync.d.ts +4 -0
  120. package/dist/src/mobile/nativeDeviceCapabilities.d.ts +6 -0
  121. package/dist/src/mobile/nativeRoute.d.ts +13 -0
  122. package/dist/src/mobile/nativeTestReport.d.ts +91 -0
  123. package/dist/src/mobile/nativeUpdates.d.ts +4 -0
  124. package/dist/src/mobile/navigationLifecycle.d.ts +36 -0
  125. package/dist/src/mobile/navigationState.d.ts +53 -0
  126. package/dist/src/mobile/pageProtocol.d.ts +2 -0
  127. package/dist/src/mobile/releaseDoctor.d.ts +23 -1
  128. package/dist/src/mobile/remoteMacProtocol.d.ts +134 -1
  129. package/dist/src/mobile/remoteMacWire.d.ts +1 -1
  130. package/dist/src/mobile/shellAuth.d.ts +8 -1
  131. package/dist/src/mobile/shellBootstrap.d.ts +15 -2
  132. package/dist/src/mobile/shellExpoAuth.d.ts +12 -0
  133. package/dist/src/mobile/shellExpoDevices.d.ts +3 -0
  134. package/dist/src/mobile/shellExpoSync.d.ts +18 -0
  135. package/dist/src/mobile/shellHttp.d.ts +2 -0
  136. package/dist/src/mobile/shellPush.d.ts +11 -0
  137. package/dist/src/mobile/shellSync.d.ts +46 -1
  138. package/dist/src/mobile/shellUpdate.d.ts +2 -0
  139. package/dist/src/mobile/syncRemediation.d.ts +10 -0
  140. package/dist/src/mobile/syncSchema.d.ts +9 -0
  141. package/dist/src/mobile/transport.d.ts +14 -0
  142. package/dist/src/mobile/uiPrimitives.d.ts +37 -0
  143. package/dist/src/mobile/updateClient.d.ts +40 -0
  144. package/dist/src/mobile/updateProtocol.d.ts +51 -0
  145. package/dist/src/mobile/updatePublisher.d.ts +66 -0
  146. package/dist/src/mobile/updateRollout.d.ts +16 -0
  147. package/dist/src/mobile/updateRuntime.d.ts +27 -0
  148. package/dist/src/mobile/updateSigning.d.ts +20 -0
  149. package/dist/src/plugins/hmr.d.ts +3 -0
  150. package/dist/src/plugins/imageOptimizer.d.ts +1 -1
  151. package/dist/src/react/hooks/useMediaQuery.d.ts +1 -1
  152. package/dist/src/utils/imageProcessing.d.ts +3 -0
  153. package/dist/src/utils/loadConfig.d.ts +1 -0
  154. package/dist/src/utils/logger.d.ts +1 -0
  155. package/dist/src/utils/startupBanner.d.ts +1 -0
  156. package/dist/src/utils/userAgentFunctions.d.ts +1 -1
  157. package/dist/src/vue/browser.d.ts +1 -0
  158. package/dist/src/vue/browserTranslation.d.ts +5 -0
  159. package/dist/src/vue/index.d.ts +1 -0
  160. package/dist/svelte/browser.js +12 -26
  161. package/dist/svelte/browser.js.map +2 -2
  162. package/dist/svelte/index.js +104 -61
  163. package/dist/svelte/index.js.map +8 -7
  164. package/dist/svelte/server.js +84 -28
  165. package/dist/svelte/server.js.map +7 -6
  166. package/dist/types/build.d.ts +62 -3
  167. package/dist/types/cli.d.ts +1 -0
  168. package/dist/types/messages.d.ts +1 -1
  169. package/dist/vue/browser.js +116 -56
  170. package/dist/vue/browser.js.map +5 -3
  171. package/dist/vue/components/Image.js +9 -7
  172. package/dist/vue/components/Image.js.map +2 -2
  173. package/dist/vue/components/index.js +11 -9
  174. package/dist/vue/components/index.js.map +2 -2
  175. package/dist/vue/index.js +211 -94
  176. package/dist/vue/index.js.map +10 -7
  177. package/dist/vue/server.js +69 -13
  178. package/dist/vue/server.js.map +7 -6
  179. package/package.json +40 -14
@@ -4,10 +4,32 @@ export type AbsoluteMobileReleaseCheck = {
4
4
  id: string;
5
5
  path?: string;
6
6
  remediation?: string;
7
- status: 'fail' | 'pass';
7
+ status: 'fail' | 'pass' | 'warn';
8
8
  };
9
9
  export type AbsoluteMobileReleaseDoctorResult = {
10
10
  checks: AbsoluteMobileReleaseCheck[];
11
11
  ready: boolean;
12
12
  };
13
+ export declare const ABSOLUTE_MOBILE_COMPLIANCE_REPORT_FORMAT: 1;
14
+ export type AbsoluteMobileComplianceReport = {
15
+ app: {
16
+ appId: string;
17
+ engine: 'capacitor' | 'expo';
18
+ platforms: string[];
19
+ productionOrigin: string;
20
+ };
21
+ checks: Array<{
22
+ id: string;
23
+ status: AbsoluteMobileReleaseCheck['status'];
24
+ }>;
25
+ format: typeof ABSOLUTE_MOBILE_COMPLIANCE_REPORT_FORMAT;
26
+ manualReview: string[];
27
+ ready: boolean;
28
+ summary: {
29
+ failed: number;
30
+ passed: number;
31
+ warnings: number;
32
+ };
33
+ };
34
+ export declare const createAbsoluteMobileComplianceReport: (config: NormalizedAbsoluteMobileConfig, result: AbsoluteMobileReleaseDoctorResult) => AbsoluteMobileComplianceReport;
13
35
  export declare const inspectAbsoluteMobileRelease: (config: NormalizedAbsoluteMobileConfig, projectRoot: string) => Promise<AbsoluteMobileReleaseDoctorResult>;
@@ -1,6 +1,8 @@
1
1
  import type { FileSink } from 'bun';
2
2
  import type { NormalizedAbsoluteMobileConfig } from './config';
3
+ import { installAbsoluteIosRelease, type AbsoluteIosReleaseMetadata } from './iosRelease';
3
4
  import type { AbsoluteIosDevPhaseTiming, AbsoluteIosDevSession, AbsoluteIosDevState, AbsoluteIosNativeLogEntry } from './iosSimulatorController';
5
+ import type { AbsoluteExpoDevPhaseTiming, AbsoluteExpoDevSession, AbsoluteExpoDevState } from './expoDevController';
4
6
  export { ABSOLUTE_REMOTE_MAC_EVENT_PREFIX, ABSOLUTE_REMOTE_MAC_PROTOCOL_VERSION } from './remoteMacWire';
5
7
  export type AbsoluteRemoteMacProfile = {
6
8
  bunPath: string;
@@ -28,6 +30,11 @@ export type AbsoluteRemoteIosDevProject = {
28
30
  xcodebuild: string;
29
31
  xcrun: string;
30
32
  };
33
+ export type AbsoluteRemoteExpoIosDevProject = AbsoluteRemoteIosDevProject & {
34
+ config: NormalizedAbsoluteMobileConfig & {
35
+ engine: 'expo';
36
+ };
37
+ };
31
38
  export type AbsoluteIosDevelopmentProject = AbsoluteRemoteIosDevProject | (import('./iosSimulatorController').AbsoluteIosDevProject & {
32
39
  remote?: false;
33
40
  });
@@ -49,7 +56,9 @@ export type AbsoluteRemoteMacTransport = {
49
56
  };
50
57
  };
51
58
  export type AbsoluteRemoteIosOptions = {
59
+ certificateAuthorityPath?: string;
52
60
  https?: boolean;
61
+ deviceIdentifier?: string;
53
62
  log?: (message: string) => void;
54
63
  nativeLog?: (entry: AbsoluteIosNativeLogEntry) => void;
55
64
  onPhaseTiming?: (timing: AbsoluteIosDevPhaseTiming) => void;
@@ -57,6 +66,26 @@ export type AbsoluteRemoteIosOptions = {
57
66
  port: number;
58
67
  project: AbsoluteRemoteIosDevProject;
59
68
  signal?: AbortSignal;
69
+ serverHost?: string;
70
+ installAgent?: (project: AbsoluteRemoteIosDevProject) => Promise<{
71
+ remotePath: string;
72
+ uploaded?: boolean;
73
+ }>;
74
+ syncProject?: (project: AbsoluteRemoteIosDevProject) => Promise<void>;
75
+ transport?: AbsoluteRemoteMacTransport;
76
+ };
77
+ export type AbsoluteRemoteExpoIosOptions = {
78
+ certificateAuthorityPath?: string;
79
+ deviceIdentifier?: string;
80
+ https?: boolean;
81
+ log?: (message: string) => void;
82
+ metroPort: number;
83
+ onPhaseTiming?: (timing: AbsoluteExpoDevPhaseTiming) => void;
84
+ onStateChange?: (state: AbsoluteExpoDevState) => void;
85
+ port: number;
86
+ project: AbsoluteRemoteExpoIosDevProject;
87
+ serverHost?: string;
88
+ signal?: AbortSignal;
60
89
  installAgent?: (project: AbsoluteRemoteIosDevProject) => Promise<{
61
90
  remotePath: string;
62
91
  uploaded?: boolean;
@@ -64,11 +93,55 @@ export type AbsoluteRemoteIosOptions = {
64
93
  syncProject?: (project: AbsoluteRemoteIosDevProject) => Promise<void>;
65
94
  transport?: AbsoluteRemoteMacTransport;
66
95
  };
96
+ export type BuildAbsoluteRemoteIosReleaseOptions = {
97
+ acquireLease?: (project: AbsoluteRemoteIosDevProject, signal?: AbortSignal) => Promise<AbsoluteRemoteMacLease>;
98
+ allowUnsigned?: boolean;
99
+ developmentTeam?: string;
100
+ installAgent?: (project: AbsoluteRemoteIosDevProject) => Promise<{
101
+ remotePath: string;
102
+ uploaded?: boolean;
103
+ }>;
104
+ log?: (message: string) => void;
105
+ onPhaseTiming?: (timing: {
106
+ durationMs: number;
107
+ phase: string;
108
+ }) => void;
109
+ outputDirectory?: string;
110
+ prepareBuildNumber?: (buildIdentity: string) => Promise<number>;
111
+ project: AbsoluteRemoteIosDevProject;
112
+ retrieveRelease?: (project: AbsoluteRemoteIosDevProject, metadata: AbsoluteIosReleaseMetadata, outputDirectory?: string) => Promise<Awaited<ReturnType<typeof installAbsoluteIosRelease>>>;
113
+ syncReleaseInputs?: (project: AbsoluteRemoteIosDevProject) => Promise<void>;
114
+ syncProject?: (project: AbsoluteRemoteIosDevProject) => Promise<void>;
115
+ signal?: AbortSignal;
116
+ transport?: Pick<AbsoluteRemoteMacTransport, 'capture' | 'spawn'>;
117
+ };
118
+ export type AbsoluteRemoteMacLease = {
119
+ heartbeat: () => Promise<void>;
120
+ path: string;
121
+ recovered: boolean;
122
+ release: () => Promise<void>;
123
+ token: string;
124
+ };
125
+ export type AbsoluteRemoteMacWorkspaceInspection = {
126
+ agentCount: number;
127
+ bytes: number;
128
+ leaseCount: number;
129
+ profile: string;
130
+ projectCount: number;
131
+ workspaceRoot: string;
132
+ };
67
133
  export declare const validateAbsoluteRemoteMacProfileName: (name: string) => string;
68
134
  export declare const validateAbsoluteSshDestination: (destination: string) => string;
69
135
  export declare const absoluteRemoteMacSshBase: (profile: Pick<AbsoluteRemoteMacProfile, "destination" | "port">, options?: {
70
136
  acceptNew?: boolean;
71
137
  }) => string[];
138
+ /** Run a non-interactive command on an already paired Mac.
139
+ *
140
+ * Arguments are quoted independently before crossing SSH. This is intended for
141
+ * small, read-only inspections and lifecycle commands that do not need the
142
+ * long-running remote development agent.
143
+ */
144
+ export declare const captureAbsoluteRemoteMacCommand: (profile: AbsoluteRemoteMacProfile, command: string[], transport?: Pick<AbsoluteRemoteMacTransport, "capture">) => Promise<AbsoluteRemoteMacCommandResult>;
72
145
  export declare const getAbsoluteRemoteMacProfile: (name?: string, profilePath?: string) => Promise<AbsoluteRemoteMacProfile | undefined>;
73
146
  export declare const inspectAbsoluteRemoteMac: (destination: string, options?: {
74
147
  acceptNew?: boolean;
@@ -80,6 +153,7 @@ export declare const inspectAbsoluteRemoteMac: (destination: string, options?: {
80
153
  os: string;
81
154
  xcodeVersion: string;
82
155
  }>;
156
+ export declare const inspectAbsoluteRemoteMacLanHost: (profile: AbsoluteRemoteMacProfile, transport?: Pick<AbsoluteRemoteMacTransport, "capture">) => Promise<string>;
83
157
  export declare const listAbsoluteRemoteMacProfiles: (profilePath?: string) => Promise<{
84
158
  defaultProfile: string | undefined;
85
159
  profiles: AbsoluteRemoteMacProfile[];
@@ -93,7 +167,29 @@ export declare const pairAbsoluteRemoteMac: (options: {
93
167
  workspaceRoot?: string;
94
168
  }) => Promise<AbsoluteRemoteMacProfile>;
95
169
  export declare const removeAbsoluteRemoteMacProfile: (name: string, profilePath?: string) => Promise<boolean>;
170
+ export declare const createAbsoluteRemoteExpoIosDevProject: (config: NormalizedAbsoluteMobileConfig, projectRoot: string, profile: AbsoluteRemoteMacProfile) => AbsoluteRemoteExpoIosDevProject;
96
171
  export declare const createAbsoluteRemoteIosDevProject: (config: NormalizedAbsoluteMobileConfig, projectRoot: string, profile: AbsoluteRemoteMacProfile) => AbsoluteRemoteIosDevProject;
172
+ /** Acquire the project-scoped release lease before changing shared remote state.
173
+ *
174
+ * `mkdir` and the stale-directory rename are atomic on the Remote Mac. The
175
+ * random token prevents an expired owner from touching or releasing a newer
176
+ * owner's lease after a delayed SSH command completes.
177
+ */
178
+ export declare const acquireAbsoluteRemoteMacReleaseLease: (project: AbsoluteRemoteIosDevProject, options?: {
179
+ signal?: AbortSignal;
180
+ staleSeconds?: number;
181
+ transport?: Pick<AbsoluteRemoteMacTransport, "capture">;
182
+ }) => Promise<AbsoluteRemoteMacLease>;
183
+ declare const inspectAbsoluteRemoteMacWorkspace: (profile: AbsoluteRemoteMacProfile, transport?: Pick<AbsoluteRemoteMacTransport, "capture">) => Promise<AbsoluteRemoteMacWorkspaceInspection>;
184
+ /** Remove only abandoned staging directories. Project dependency/native caches,
185
+ * immutable releases, and active leases are deliberately retained.
186
+ */
187
+ declare const cleanAbsoluteRemoteMacWorkspace: (profile: AbsoluteRemoteMacProfile, transport?: Pick<AbsoluteRemoteMacTransport, "capture">) => Promise<{
188
+ profile: string;
189
+ removed: number;
190
+ workspaceRoot: string;
191
+ }>;
192
+ export { cleanAbsoluteRemoteMacWorkspace, inspectAbsoluteRemoteMacWorkspace };
97
193
  export declare const installAbsoluteRemoteMacAgent: (project: AbsoluteRemoteIosDevProject) => Promise<{
98
194
  remotePath: string;
99
195
  uploaded: boolean;
@@ -110,5 +206,42 @@ export declare const absoluteRemoteProjectSyncCommands: (project: AbsoluteRemote
110
206
  remote: string[];
111
207
  tar: string[];
112
208
  };
113
- export declare const syncAbsoluteRemoteMacProject: (project: AbsoluteRemoteIosDevProject) => Promise<void>;
209
+ export declare const syncAbsoluteRemoteMacProject: (project: AbsoluteRemoteIosDevProject, options?: {
210
+ signal?: AbortSignal;
211
+ }) => Promise<void>;
212
+ export declare const absoluteRemoteReleaseInputSyncCommands: (project: AbsoluteRemoteIosDevProject) => {
213
+ remote: string[];
214
+ tar: string[];
215
+ };
216
+ export declare const syncAbsoluteRemoteMacReleaseInputs: (project: AbsoluteRemoteIosDevProject, options?: {
217
+ signal?: AbortSignal;
218
+ }) => Promise<void>;
219
+ export declare const buildAbsoluteRemoteIosRelease: (options: BuildAbsoluteRemoteIosReleaseOptions) => Promise<{
220
+ timings: {
221
+ 'remote-agent': number;
222
+ 'remote-release-download': number;
223
+ 'remote-release-lease': number;
224
+ 'remote-release-sync': number;
225
+ total: number;
226
+ };
227
+ artifactPath: string;
228
+ metadata: {
229
+ artifact: "App.ipa";
230
+ sha256: string;
231
+ type: "ipa";
232
+ format: typeof import("./iosRelease").ABSOLUTE_IOS_RELEASE_FORMAT;
233
+ bytes: number;
234
+ runtime: string;
235
+ releaseId: string;
236
+ appBuild: string;
237
+ appId: string;
238
+ platform: "ios";
239
+ buildNumber?: number | undefined;
240
+ engine: "capacitor" | "expo";
241
+ marketingVersion: string;
242
+ signed: boolean;
243
+ };
244
+ releaseRoot: string;
245
+ }>;
246
+ export declare const startAbsoluteRemoteExpoIosDevSession: (options: AbsoluteRemoteExpoIosOptions) => Promise<AbsoluteExpoDevSession>;
114
247
  export declare const startAbsoluteRemoteIosDevSession: (options: AbsoluteRemoteIosOptions) => Promise<AbsoluteIosDevSession>;
@@ -1,2 +1,2 @@
1
1
  export declare const ABSOLUTE_REMOTE_MAC_EVENT_PREFIX = "ABSOLUTE_REMOTE_MAC\t";
2
- export declare const ABSOLUTE_REMOTE_MAC_PROTOCOL_VERSION = 1;
2
+ export declare const ABSOLUTE_REMOTE_MAC_PROTOCOL_VERSION = 3;
@@ -1,8 +1,15 @@
1
+ import { type MobileAuthPrincipal } from '@absolutejs/auth/client/mobile';
1
2
  import type { AbsoluteMobileAuthManifest } from './nativeAuth';
2
3
  import type { AbsoluteMobileFetch } from './transport';
3
4
  export type AbsoluteMobileShellAuth = {
5
+ clientId: string;
4
6
  fetch: AbsoluteMobileFetch;
7
+ onPrincipalChange: (listener: (principal: MobileAuthPrincipal | null) => void) => () => void;
8
+ principal: MobileAuthPrincipal | null;
5
9
  redirectUri: string;
10
+ issuer: string;
6
11
  socketTicket: (audience?: string) => Promise<string>;
7
12
  };
8
- export declare const createAbsoluteMobileShellAuth: (config: AbsoluteMobileAuthManifest) => Promise<AbsoluteMobileShellAuth>;
13
+ export declare const createAbsoluteMobileShellAuth: (config: AbsoluteMobileAuthManifest, options?: {
14
+ beforeSignOut?: () => Promise<void> | void;
15
+ }) => Promise<AbsoluteMobileShellAuth>;
@@ -1,11 +1,24 @@
1
1
  import { type AbsoluteMobileFetch, type AbsoluteMobileClientManifest } from './transport';
2
2
  export type AbsoluteMobileShellAuthRuntime = {
3
+ clientId: string;
3
4
  fetch: AbsoluteMobileFetch;
5
+ onPrincipalChange: (listener: (principal: AbsoluteMobileShellPrincipal | null) => void) => () => void;
6
+ principal: AbsoluteMobileShellPrincipal | null;
4
7
  redirectUri: string;
8
+ issuer: string;
5
9
  socketTicket: (audience?: string) => Promise<string>;
6
10
  };
11
+ export type AbsoluteMobileShellPrincipal = {
12
+ namespace: string;
13
+ };
7
14
  export type AbsoluteMobileShellOptions = {
8
- createAuth?: (config: NonNullable<AbsoluteMobileClientManifest['auth']>) => Promise<AbsoluteMobileShellAuthRuntime>;
9
- installSync?: (auth: AbsoluteMobileShellAuthRuntime) => void;
15
+ createFetch?: (manifest: AbsoluteMobileClientManifest) => AbsoluteMobileFetch;
16
+ createAuth?: (config: NonNullable<AbsoluteMobileClientManifest['auth']>, options?: {
17
+ beforeSignOut?: () => Promise<void> | void;
18
+ }) => Promise<AbsoluteMobileShellAuthRuntime>;
19
+ beforeSignOut?: () => Promise<void> | void;
20
+ connectPush?: (auth: AbsoluteMobileShellAuthRuntime) => void;
21
+ installSync?: (auth: AbsoluteMobileShellAuthRuntime, config: NonNullable<AbsoluteMobileClientManifest['sync']>) => void | (() => void);
22
+ installUpdates?: (manifest: AbsoluteMobileClientManifest) => Promise<void>;
10
23
  };
11
24
  export declare const startAbsoluteMobileShell: (options?: AbsoluteMobileShellOptions) => Promise<void>;
@@ -0,0 +1,12 @@
1
+ import { type MobileAuthPrincipal } from '@absolutejs/auth/client/mobile';
2
+ import type { AbsoluteMobileAuthManifest } from './nativeAuth';
3
+ import type { AbsoluteMobileFetch } from './transport';
4
+ export declare const createAbsoluteExpoShellAuth: (config: AbsoluteMobileAuthManifest) => Promise<{
5
+ clientId: string;
6
+ fetch: AbsoluteMobileFetch;
7
+ issuer: string;
8
+ principal: Pick<MobileAuthPrincipal, "namespace"> | null;
9
+ redirectUri: string;
10
+ onPrincipalChange: (listener: (principal: Pick<MobileAuthPrincipal, "namespace"> | null) => void) => () => boolean;
11
+ socketTicket: () => Promise<never>;
12
+ }>;
@@ -0,0 +1,3 @@
1
+ export declare const createAbsoluteExpoBridgeFetch: () => (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
2
+ /** Installs the provider-neutral adapter backed by the generated native host. */
3
+ export declare const installAbsoluteExpoWebDeviceAdapter: (capabilities?: readonly string[]) => () => void;
@@ -0,0 +1,18 @@
1
+ import { type AbsoluteExpoSyncBridgeProvider } from '@absolutejs/sync-expo/client';
2
+ import type { SyncClientStatus } from '@absolutejs/sync/client';
3
+ import type { AbsoluteMobileShellAuthRuntime } from './shellBootstrap';
4
+ import type { AbsoluteMobileClientManifest } from './transport';
5
+ type ExpoBridge = AbsoluteExpoSyncBridgeProvider & {
6
+ on(event: 'sync.socket' | 'sync.wake', listener: (payload: Record<string, unknown>) => void): () => void;
7
+ };
8
+ export type AbsoluteExpoShellSyncOptions = {
9
+ provider?: ExpoBridge;
10
+ reload?: () => void;
11
+ reportStatus?: (status: SyncClientStatus) => void;
12
+ };
13
+ /**
14
+ * Gives unchanged WebView page clients native-owned SQLite and sockets. Auth
15
+ * namespaces and socket tickets never cross into page-controlled JavaScript.
16
+ */
17
+ export declare const installAbsoluteExpoShellSync: (auth: AbsoluteMobileShellAuthRuntime, config?: NonNullable<AbsoluteMobileClientManifest["sync"]>, options?: AbsoluteExpoShellSyncOptions) => () => void;
18
+ export {};
@@ -0,0 +1,2 @@
1
+ import { type AbsoluteHttpFetch } from '@absolutejs/http';
2
+ export declare const installAbsoluteMobileShellHttp: (origin: string, fetch?: AbsoluteHttpFetch) => () => void;
@@ -0,0 +1,11 @@
1
+ import { secureStorage, type DevicePushNotificationsCapability } from '@absolutejs/devices';
2
+ import type { CapacitorPushNotificationsOptions } from '@absolutejs/devices-capacitor/push-notifications';
3
+ import type { AbsoluteMobileShellAuthRuntime } from './shellBootstrap';
4
+ export declare const ABSOLUTE_PUSH_ROUTE: "/auth/push";
5
+ export declare const createAbsoluteMobileShellPush: ({ storage }?: {
6
+ storage?: Pick<typeof secureStorage, "get" | "remove" | "set">;
7
+ }) => {
8
+ capabilityOptions: CapacitorPushNotificationsOptions;
9
+ beforeSignOut: () => Promise<void>;
10
+ connect: (nextAuth: AbsoluteMobileShellAuthRuntime, nextCapability: DevicePushNotificationsCapability) => void;
11
+ };
@@ -1,2 +1,47 @@
1
+ import { configureCapacitorBackgroundSync, type CapacitorSyncLifecycleOptions, type CapacitorSyncLocalStoreOptions } from '@absolutejs/sync-capacitor';
2
+ import type { SyncClientStatus, SyncLocalStore, SyncLocalStoreSchemaStatus } from '@absolutejs/sync/client';
1
3
  import type { AbsoluteMobileShellAuthRuntime } from './shellBootstrap';
2
- export declare const installAbsoluteMobileShellSync: (auth: AbsoluteMobileShellAuthRuntime) => void;
4
+ import type { AbsoluteMobileClientManifest } from './transport';
5
+ export type AbsoluteMobileShellSyncOptions = {
6
+ createStore?: (options?: CapacitorSyncLocalStoreOptions) => SyncLocalStore;
7
+ installLifecycle?: (options: CapacitorSyncLifecycleOptions) => Promise<() => void>;
8
+ reload?: () => void;
9
+ reportStatus?: (status: SyncClientStatus) => void;
10
+ reportSchemaState?: (state: AbsoluteMobileSyncSchemaState) => void;
11
+ configureBackground?: typeof configureCapacitorBackgroundSync;
12
+ clearBackground?: () => Promise<void>;
13
+ };
14
+ export declare const ABSOLUTE_MOBILE_SYNC_SCHEMA_EVENT = "absolute:sync-schema";
15
+ export declare const ABSOLUTE_MOBILE_SYNC_SCHEMA_STATE_KEY = "absolutejs.mobile.sync.schema-state";
16
+ export declare const ABSOLUTE_MOBILE_SYNC_STATUS_EVENT = "absolute:sync-status";
17
+ export type AbsoluteMobileSyncSchemaFailureCode = 'INVALID_PLAN' | 'MIGRATION_MISSING' | 'SCHEMA_TOO_NEW' | 'SCHEMA_TOO_OLD' | 'UNKNOWN';
18
+ export type AbsoluteMobileSyncSchemaState = {
19
+ state: 'preparing';
20
+ } | SyncLocalStoreSchemaStatus | {
21
+ code: AbsoluteMobileSyncSchemaFailureCode;
22
+ state: 'failed';
23
+ storedVersion?: number;
24
+ targetVersion?: number;
25
+ };
26
+ export declare const readAbsoluteMobileSyncSchemaState: () => SyncLocalStoreSchemaStatus | {
27
+ code: AbsoluteMobileSyncSchemaFailureCode;
28
+ state: "failed";
29
+ storedVersion?: number;
30
+ targetVersion?: number;
31
+ } | {
32
+ state: any;
33
+ minimumCompatibleVersion?: undefined;
34
+ storedVersion?: undefined;
35
+ targetVersion?: undefined;
36
+ } | {
37
+ minimumCompatibleVersion: number;
38
+ state: any;
39
+ storedVersion: number;
40
+ targetVersion: number;
41
+ } | undefined;
42
+ /**
43
+ * Provisions unchanged Sync clients with native durability, Auth isolation, and
44
+ * foreground/connectivity reconnects. An identity change reloads the shell so
45
+ * no page-held client can retain the previous account's in-memory rows.
46
+ */
47
+ export declare const installAbsoluteMobileShellSync: (auth: AbsoluteMobileShellAuthRuntime, config?: NonNullable<AbsoluteMobileClientManifest["sync"]>, options?: AbsoluteMobileShellSyncOptions) => () => void;
@@ -0,0 +1,2 @@
1
+ import type { AbsoluteMobileClientManifest } from './transport';
2
+ export declare const installAbsoluteMobileShellUpdates: (manifest: AbsoluteMobileClientManifest) => Promise<void>;
@@ -0,0 +1,10 @@
1
+ import { type SyncRuntimeInspection } from '@absolutejs/sync/client/runtime';
2
+ export type AbsoluteMobileSyncRemediation = {
3
+ discard: (operationId: string) => Promise<void>;
4
+ inspect: () => Promise<SyncRuntimeInspection>;
5
+ rebase: (operationId: string, args: unknown) => Promise<string>;
6
+ retry: (operationId: string) => Promise<void>;
7
+ };
8
+ /** Install the native shell's framework-neutral, redacted remediation bridge. */
9
+ export declare const getAbsoluteMobileSyncRemediation: () => AbsoluteMobileSyncRemediation | undefined;
10
+ export declare const installAbsoluteMobileSyncRemediation: (bridge?: AbsoluteMobileSyncRemediation) => () => void;
@@ -0,0 +1,9 @@
1
+ import { type SyncLocalStoreSchemaBundle } from '@absolutejs/sync/client';
2
+ export type AbsoluteSyncSchemaDiscovery = {
3
+ components: SyncLocalStoreSchemaBundle['components'];
4
+ sources: {
5
+ id: string;
6
+ manifestPath: string;
7
+ }[];
8
+ };
9
+ export declare const discoverAbsoluteSyncSchema: (projectRoot: string) => AbsoluteSyncSchemaDiscovery;
@@ -1,6 +1,7 @@
1
1
  import { type AbsoluteMobilePageActivationOptions } from './client';
2
2
  import type { AbsoluteMobileCompatibilityPage, AbsoluteMobileCompatibilityRoute } from './releaseArtifact';
3
3
  import type { AbsoluteMobileAuthManifest } from './nativeAuth';
4
+ import type { SyncLocalStoreSchemaBundle } from '@absolutejs/sync/client';
4
5
  export declare const ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT: 1;
5
6
  export type AbsoluteMobileFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
6
7
  export type AbsoluteMobileClientPage = AbsoluteMobileCompatibilityPage & {
@@ -14,19 +15,32 @@ export type AbsoluteMobileClientManifest = {
14
15
  appName: string;
15
16
  deepLinkHosts: string[];
16
17
  deepLinkScheme?: string;
18
+ deviceCapabilities: string[];
17
19
  entry: string;
18
20
  format: typeof ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT;
21
+ nativeRuntime: string;
19
22
  pages: AbsoluteMobileClientPage[];
20
23
  productionOrigin: string;
21
24
  routes: AbsoluteMobileCompatibilityRoute[];
22
25
  runtime: string;
26
+ updates?: {
27
+ channel: string;
28
+ manifestUrl: string;
29
+ publicKeys: Record<string, string>;
30
+ };
23
31
  sync?: {
24
32
  socketTickets: true;
33
+ background: {
34
+ endpoint: string;
35
+ intervalMinutes: number;
36
+ };
37
+ storageSchema: SyncLocalStoreSchemaBundle;
25
38
  };
26
39
  };
27
40
  export type AbsoluteMobileTransportOptions = {
28
41
  fetch?: AbsoluteMobileFetch;
29
42
  headers?: HeadersInit;
43
+ signal?: AbortSignal;
30
44
  };
31
45
  export declare const createAbsoluteMobilePageRequest: (manifest: AbsoluteMobileClientManifest, path: string, options?: AbsoluteMobileTransportOptions) => Request;
32
46
  export declare const fetchAbsoluteMobilePage: (manifest: AbsoluteMobileClientManifest, path: string, options?: AbsoluteMobileTransportOptions) => Promise<unknown>;
@@ -0,0 +1,37 @@
1
+ export type AbsoluteMobileNavigationDirection = 'back' | 'forward' | 'replace';
2
+ export type AbsoluteMobileNavigationDetail = {
3
+ direction: AbsoluteMobileNavigationDirection;
4
+ from: string;
5
+ to: string;
6
+ };
7
+ export type AbsoluteMobileSheetDetail = {
8
+ id: string;
9
+ open: boolean;
10
+ };
11
+ export type AbsoluteMobileLinkIntent = {
12
+ kind: 'back';
13
+ } | {
14
+ kind: 'external';
15
+ } | {
16
+ kind: 'navigate';
17
+ replace: boolean;
18
+ };
19
+ declare global {
20
+ interface WindowEventMap {
21
+ 'absolute:back-request': CustomEvent;
22
+ 'absolute:navigation-change': CustomEvent<AbsoluteMobileNavigationDetail>;
23
+ 'absolute:sheet-change': CustomEvent<AbsoluteMobileSheetDetail>;
24
+ }
25
+ }
26
+ export type AbsoluteMobileUiPrimitives = {
27
+ dispose(): void;
28
+ navigate(detail: AbsoluteMobileNavigationDetail): void;
29
+ refreshDocument(path?: string): void;
30
+ requestBack(): boolean;
31
+ };
32
+ export declare const closeAbsoluteMobileSheet: (target: HTMLDialogElement | string) => boolean;
33
+ export declare const openAbsoluteMobileSheet: (target: HTMLDialogElement | string, opener?: HTMLElement) => boolean;
34
+ export declare const readAbsoluteMobileLinkIntent: (anchor: HTMLAnchorElement) => AbsoluteMobileLinkIntent;
35
+ export declare const requestAbsoluteMobileBack: () => boolean;
36
+ /** Installs optional semantic-HTML mobile layout and interaction primitives. */
37
+ export declare const installAbsoluteMobileUiPrimitives: () => AbsoluteMobileUiPrimitives;
@@ -0,0 +1,40 @@
1
+ import { type AbsoluteMobileUpdateFile, type AbsoluteMobileUpdateManifest } from './updateProtocol';
2
+ export type AbsoluteMobileUpdateClientConfig = {
3
+ appId: string;
4
+ channel: string;
5
+ currentReleaseId: string;
6
+ installationId: string;
7
+ manifestUrl: string;
8
+ runtimeFingerprint: string;
9
+ };
10
+ export type AbsoluteMobileUpdateStore = {
11
+ abort(releaseId: string): Promise<void>;
12
+ activate(releaseId: string): Promise<void>;
13
+ begin(manifest: AbsoluteMobileUpdateManifest): Promise<void>;
14
+ commit(manifest: AbsoluteMobileUpdateManifest): Promise<void>;
15
+ write(file: AbsoluteMobileUpdateFile, contents: Uint8Array): Promise<void>;
16
+ };
17
+ export type AbsoluteMobileUpdateVerifier = {
18
+ digest(contents: Uint8Array): Promise<string>;
19
+ verify(manifest: AbsoluteMobileUpdateManifest): Promise<boolean>;
20
+ };
21
+ export type AbsoluteMobileUpdateClientOptions = {
22
+ config: AbsoluteMobileUpdateClientConfig;
23
+ fetch?: typeof globalThis.fetch;
24
+ store: AbsoluteMobileUpdateStore;
25
+ verifier: AbsoluteMobileUpdateVerifier;
26
+ };
27
+ export type AbsoluteMobileUpdateCheckResult = {
28
+ kind: 'current';
29
+ } | {
30
+ kind: 'downloaded';
31
+ manifest: AbsoluteMobileUpdateManifest;
32
+ } | {
33
+ kind: 'update-available';
34
+ manifest: AbsoluteMobileUpdateManifest;
35
+ };
36
+ export declare const createAbsoluteMobileUpdateClient: (options: AbsoluteMobileUpdateClientOptions) => {
37
+ check: (download?: boolean) => Promise<AbsoluteMobileUpdateCheckResult>;
38
+ activate: (releaseId: string) => Promise<void>;
39
+ download: () => Promise<AbsoluteMobileUpdateCheckResult>;
40
+ };
@@ -0,0 +1,51 @@
1
+ export declare const ABSOLUTE_MOBILE_UPDATE_FORMAT: 1;
2
+ export declare const ABSOLUTE_MOBILE_UPDATE_MAX_FILE_BYTES: number;
3
+ export declare const ABSOLUTE_MOBILE_UPDATE_MAX_FILES = 10000;
4
+ export declare const ABSOLUTE_MOBILE_UPDATE_MAX_TOTAL_BYTES: number;
5
+ export declare const ABSOLUTE_MOBILE_UPDATE_SIGNATURE_ALGORITHM: "ecdsa-p256-sha256";
6
+ export type AbsoluteMobileUpdateClassification = 'bug-fix' | 'content' | 'security';
7
+ export type AbsoluteMobileUpdateFile = {
8
+ bytes: number;
9
+ path: string;
10
+ sha256: string;
11
+ };
12
+ export type AbsoluteMobileUnsignedUpdateManifest = {
13
+ appId: string;
14
+ channel: string;
15
+ classification: AbsoluteMobileUpdateClassification;
16
+ createdAt: string;
17
+ files: AbsoluteMobileUpdateFile[];
18
+ format: typeof ABSOLUTE_MOBILE_UPDATE_FORMAT;
19
+ /** A content identity for the complete update, excluding its signature. */
20
+ releaseId: string;
21
+ /** Locks an update to the native plugins, bridge, Auth, and local-data ABI. */
22
+ runtimeFingerprint: string;
23
+ /** Store-policy attestation. Feature/primary-purpose changes require a store build. */
24
+ withinSubmittedPurpose: true;
25
+ };
26
+ export type AbsoluteMobileUpdateManifest = AbsoluteMobileUnsignedUpdateManifest & {
27
+ signature: {
28
+ algorithm: typeof ABSOLUTE_MOBILE_UPDATE_SIGNATURE_ALGORITHM;
29
+ keyId: string;
30
+ value: string;
31
+ };
32
+ };
33
+ export declare const absoluteMobileUpdateSigningPayload: (manifest: AbsoluteMobileUnsignedUpdateManifest) => Uint8Array<ArrayBuffer>;
34
+ export declare const canonicalizeAbsoluteMobileUpdate: (value: unknown) => string;
35
+ export declare const normalizeAbsoluteMobileUpdatePath: (value: unknown) => string;
36
+ export declare const parseAbsoluteMobileUnsignedUpdateManifest: (value: unknown) => AbsoluteMobileUnsignedUpdateManifest;
37
+ export declare const parseAbsoluteMobileUpdateManifest: (value: unknown) => AbsoluteMobileUpdateManifest;
38
+ export declare const unsignedAbsoluteMobileUpdate: (manifest: AbsoluteMobileUpdateManifest) => {
39
+ appId: string;
40
+ channel: string;
41
+ classification: AbsoluteMobileUpdateClassification;
42
+ createdAt: string;
43
+ files: AbsoluteMobileUpdateFile[];
44
+ format: typeof ABSOLUTE_MOBILE_UPDATE_FORMAT;
45
+ /** A content identity for the complete update, excluding its signature. */
46
+ releaseId: string;
47
+ /** Locks an update to the native plugins, bridge, Auth, and local-data ABI. */
48
+ runtimeFingerprint: string;
49
+ /** Store-policy attestation. Feature/primary-purpose changes require a store build. */
50
+ withinSubmittedPurpose: true;
51
+ };
@@ -0,0 +1,66 @@
1
+ import { readAbsoluteMobileUpdate } from './updateSigning';
2
+ export type AbsoluteMobileUpdatePublication = {
3
+ appId: string;
4
+ channel: string;
5
+ releaseId: string;
6
+ reused: boolean;
7
+ rollout: number;
8
+ stage: 'published';
9
+ };
10
+ export type AbsoluteMobileUpdatePromotion = {
11
+ appId: string;
12
+ channel: string;
13
+ releaseId: string;
14
+ rollout: number;
15
+ stage: 'promoted';
16
+ };
17
+ export type AbsoluteMobileUpdateRollback = {
18
+ appId: string;
19
+ channel: string;
20
+ releaseId?: string;
21
+ stage: 'rolled-back';
22
+ };
23
+ export type AbsoluteMobileUpdatePublisher = {
24
+ publishUpdate(options: {
25
+ manifest: Awaited<ReturnType<typeof readAbsoluteMobileUpdate>>;
26
+ releaseDirectory: string;
27
+ rollout: number;
28
+ signal?: AbortSignal;
29
+ }): Promise<AbsoluteMobileUpdatePublication>;
30
+ promoteUpdate(options: {
31
+ appId: string;
32
+ channel: string;
33
+ releaseId: string;
34
+ rollout: number;
35
+ signal?: AbortSignal;
36
+ }): Promise<AbsoluteMobileUpdatePromotion>;
37
+ rollbackUpdate(options: {
38
+ appId: string;
39
+ channel: string;
40
+ releaseId?: string;
41
+ signal?: AbortSignal;
42
+ }): Promise<AbsoluteMobileUpdateRollback>;
43
+ };
44
+ export declare const loadAbsoluteMobileUpdatePublisher: (projectRoot: string, requestedModulePath: string) => Promise<AbsoluteMobileUpdatePublisher>;
45
+ export declare const promoteAbsoluteMobileUpdate: (options: {
46
+ appId: string;
47
+ channel: string;
48
+ publisher: AbsoluteMobileUpdatePublisher;
49
+ releaseId: string;
50
+ rollout: number;
51
+ signal?: AbortSignal;
52
+ }) => Promise<AbsoluteMobileUpdatePromotion>;
53
+ export declare const publishAbsoluteMobileUpdate: (options: {
54
+ projectRoot: string;
55
+ publisher: AbsoluteMobileUpdatePublisher;
56
+ releaseDirectory: string;
57
+ rollout: number;
58
+ signal?: AbortSignal;
59
+ }) => Promise<AbsoluteMobileUpdatePublication>;
60
+ export declare const rollbackAbsoluteMobileUpdate: (options: {
61
+ appId: string;
62
+ channel: string;
63
+ publisher: AbsoluteMobileUpdatePublisher;
64
+ releaseId?: string;
65
+ signal?: AbortSignal;
66
+ }) => Promise<AbsoluteMobileUpdateRollback>;