@sigx/lynx-updates 0.6.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +4 -2
- package/dist/native.js.map +1 -1
- package/dist/provider/static-manifest.d.ts +41 -10
- package/dist/provider/static-manifest.d.ts.map +1 -1
- package/dist/provider/static-manifest.js +39 -5
- package/dist/provider/static-manifest.js.map +1 -1
- package/dist/types.d.ts +6 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -70,7 +70,7 @@ After a store update, all downloaded OTA updates are dropped automatically
|
|
|
70
70
|
|
|
71
71
|
Updates commit in two phases. A downloaded update is *pending* until the app
|
|
72
72
|
signals a healthy boot via `markReady()` — called automatically just after
|
|
73
|
-
`configure()` (set `autoMarkReady: false` to gate on your own signal, e.g.
|
|
73
|
+
`Updates.configure()` (set `autoMarkReady: false` to gate on your own signal, e.g.
|
|
74
74
|
first screen rendered). If the app crashes before `markReady()` on
|
|
75
75
|
`rollback.maxFailedLaunches` consecutive launches (default 2), the native
|
|
76
76
|
side deletes the update and reverts to the previous bundle. Detect it:
|
|
@@ -97,10 +97,47 @@ State machine: `idle → checking → up-to-date | available | incompatible`,
|
|
|
97
97
|
`available → downloading → ready → applying`; failures land in `error` and
|
|
98
98
|
every transition fires a typed `UpdatesEvent`.
|
|
99
99
|
|
|
100
|
+
## Self-hosted & authenticated backends
|
|
101
|
+
|
|
102
|
+
The built-in `StaticManifestProvider` works against more than a static CDN — you
|
|
103
|
+
don't need a custom backend just to point at a runtime-resolved host or attach a
|
|
104
|
+
short-lived token. Pass these on the provider shorthand (or to
|
|
105
|
+
`new StaticManifestProvider({ ... })`):
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
Updates.configure({
|
|
109
|
+
provider: {
|
|
110
|
+
// Host discovered after launch (sign-in, environment selection):
|
|
111
|
+
// a resolver runs before every check. Return a URL, or { url, headers }.
|
|
112
|
+
url: (ctx) => `${session.apiBase}/updates/${ctx.channel}/manifest.json`,
|
|
113
|
+
|
|
114
|
+
// Static headers, merged into BOTH the manifest fetch and the download.
|
|
115
|
+
headers: { Accept: 'application/json' },
|
|
116
|
+
|
|
117
|
+
// Per-request auth — inject (and refresh) a short-lived token. The
|
|
118
|
+
// returned headers are merged over `headers`. onBeforeCheck guards the
|
|
119
|
+
// manifest request; onBeforeDownload guards the bundle download.
|
|
120
|
+
onBeforeCheck: async (ctx) => ({ Authorization: `Bearer ${await auth.token()}` }),
|
|
121
|
+
onBeforeDownload: async (manifest, ctx) => ({ Authorization: `Bearer ${await auth.token()}` }),
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
- Relative `bundleUrl`s resolve against whatever URL the resolver returned for
|
|
127
|
+
that check, so per-environment hosts just work.
|
|
128
|
+
- The hooks run on **every** check/download — return a fresh token each time and
|
|
129
|
+
refresh inside the hook when it's near expiry.
|
|
130
|
+
|
|
131
|
+
**Replacing the provider at runtime.** `Updates.configure()` is idempotent: a
|
|
132
|
+
second call swaps the provider (and channel/mode) for subsequent checks without
|
|
133
|
+
re-running the launch check. Use it for a wholesale backend switch; for the
|
|
134
|
+
common "discover the host after sign-in" case prefer the `url` resolver above —
|
|
135
|
+
no re-wiring.
|
|
136
|
+
|
|
100
137
|
## Custom backends
|
|
101
138
|
|
|
102
139
|
The static-manifest provider is ~150 lines over `fetch`. Anything else —
|
|
103
|
-
|
|
140
|
+
signed manifests, staged rollout services, the Expo Updates protocol —
|
|
104
141
|
implements `UpdateProvider` in its own package, no core changes:
|
|
105
142
|
|
|
106
143
|
```ts
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Updates } from './updates.js';
|
|
2
2
|
export { useUpdates } from './use-updates.js';
|
|
3
|
-
export { StaticManifestProvider, validateUpdatesManifest, type StaticManifestDocument, type StaticManifestEntry, type StaticManifestProviderOptions, } from './provider/static-manifest.js';
|
|
3
|
+
export { StaticManifestProvider, validateUpdatesManifest, type ManifestEndpoint, type StaticManifestDocument, type StaticManifestEntry, type StaticManifestProviderOptions, } from './provider/static-manifest.js';
|
|
4
4
|
export { UpdatesError, type UpdatesErrorCode, type CurrentUpdateInfo, type DownloadProgress, type DownloadSpec, type UpdateCheckContext, type UpdateCheckResult, type UpdateManifest, type UpdateMode, type UpdatePlatform, type UpdateProvider, type UpdatesConfig, type UpdatesEvent, type UpdatesState, type UpdateStatus, } from './types.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,GACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,GACpB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,GACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACH,sBAAsB,EACtB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACH,sBAAsB,EACtB,uBAAuB,GAK1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACH,YAAY,GAef,MAAM,YAAY,CAAC"}
|
package/dist/native.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAgB,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAWrF,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,qEAAqE;AACrE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CASnD;AAED,wBAAgB,WAAW,IAAI,SAAS,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAgB,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAWrF,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,qEAAqE;AACrE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CASnD;AAED,wBAAgB,WAAW,IAAI,SAAS,GAAG,KAAK,CAQ/C;AAyCD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAyBnE;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAChC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,mEAAmE;AACnE,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE;AAED,yDAAyD;AACzD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAIrD;AAED,yDAAyD;AACzD,wBAAsB,wBAAwB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvF;AAED,2EAA2E;AAC3E,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIxD"}
|
package/dist/native.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* tests, app built without the package): reads return inert defaults,
|
|
8
8
|
* mutations reject with `native-unavailable`.
|
|
9
9
|
*/
|
|
10
|
-
import { callAsync, callSync, isModuleAvailable } from '@sigx/lynx-core';
|
|
10
|
+
import { callAsync, callSync, isModuleAvailable, Platform } from '@sigx/lynx-core';
|
|
11
11
|
import { UpdatesError } from './types.js';
|
|
12
12
|
const MODULE = 'Updates';
|
|
13
13
|
export function nativeAvailable() {
|
|
@@ -39,7 +39,9 @@ export function getPlatform() {
|
|
|
39
39
|
if (p === 'android' || p === 'ios')
|
|
40
40
|
return p;
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
// Native is authoritative; fall back to core's SystemInfo-based detection
|
|
43
|
+
// (web preview / tests / module absent). 'web' maps to 'android' here.
|
|
44
|
+
return Platform.OS === 'ios' ? 'ios' : 'android';
|
|
43
45
|
}
|
|
44
46
|
const EMBEDDED_INFO = {
|
|
45
47
|
updateId: null,
|
package/dist/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,21 @@
|
|
|
25
25
|
* `sigx updates:publish` emits this document; relative `bundleUrl`s resolve
|
|
26
26
|
* against the manifest URL so the output directory can be dropped onto any
|
|
27
27
|
* static host unchanged.
|
|
28
|
+
*
|
|
29
|
+
* Self-hosted / authenticated backends are supported without writing a custom
|
|
30
|
+
* provider: `url` may be an async resolver (compute the endpoint from runtime
|
|
31
|
+
* context discovered after launch — sign-in, environment selection), and
|
|
32
|
+
* `onBeforeCheck` / `onBeforeDownload` inject fresh per-request headers (a
|
|
33
|
+
* short-lived bearer token refreshed each call) on top of the static `headers`.
|
|
28
34
|
*/
|
|
29
|
-
import { type UpdateCheckContext, type UpdateCheckResult, type UpdateManifest, type UpdateProvider } from '../types.js';
|
|
35
|
+
import { type DownloadSpec, type UpdateCheckContext, type UpdateCheckResult, type UpdateManifest, type UpdateProvider } from '../types.js';
|
|
36
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
37
|
+
type HeadersMap = Record<string, string>;
|
|
38
|
+
/** A resolved manifest endpoint: the URL, optionally with endpoint-specific headers. */
|
|
39
|
+
export interface ManifestEndpoint {
|
|
40
|
+
url: string;
|
|
41
|
+
headers?: HeadersMap;
|
|
42
|
+
}
|
|
30
43
|
export interface StaticManifestEntry extends Omit<UpdateManifest, 'id' | 'mandatory'> {
|
|
31
44
|
id?: string;
|
|
32
45
|
mandatory?: boolean;
|
|
@@ -40,10 +53,29 @@ export interface StaticManifestDocument {
|
|
|
40
53
|
updates: StaticManifestEntry[];
|
|
41
54
|
}
|
|
42
55
|
export interface StaticManifestProviderOptions {
|
|
43
|
-
/**
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Manifest JSON location. Either:
|
|
58
|
+
* - a static absolute URL, or
|
|
59
|
+
* - an async resolver invoked before every check — return the URL (or
|
|
60
|
+
* `{ url, headers }`) computed from `ctx`. Use this when the backend host
|
|
61
|
+
* isn't known until after launch (sign-in, environment selection,
|
|
62
|
+
* per-deployment configuration). Relative `bundleUrl`s in the manifest
|
|
63
|
+
* resolve against whichever URL the resolver returned for that check.
|
|
64
|
+
*/
|
|
65
|
+
url: string | ((ctx: UpdateCheckContext) => MaybePromise<string | ManifestEndpoint>);
|
|
66
|
+
/** Static headers, merged into every manifest request AND bundle download. */
|
|
67
|
+
headers?: HeadersMap;
|
|
68
|
+
/**
|
|
69
|
+
* Per-check auth hook. Returned headers are merged over `headers` (and over
|
|
70
|
+
* any headers from the `url` resolver) for the manifest request — inject a
|
|
71
|
+
* fresh short-lived token here and refresh it inside the hook on expiry.
|
|
72
|
+
*/
|
|
73
|
+
onBeforeCheck?: (ctx: UpdateCheckContext) => MaybePromise<HeadersMap>;
|
|
74
|
+
/**
|
|
75
|
+
* Per-download auth hook. Returned headers are merged over `headers` for the
|
|
76
|
+
* bundle download (a separate, often longer-lived request than the check).
|
|
77
|
+
*/
|
|
78
|
+
onBeforeDownload?: (manifest: UpdateManifest, ctx: UpdateCheckContext) => MaybePromise<HeadersMap>;
|
|
47
79
|
/** Injectable fetch for tests. Defaults to `globalThis.fetch`. */
|
|
48
80
|
fetchImpl?: typeof globalThis.fetch;
|
|
49
81
|
}
|
|
@@ -56,11 +88,10 @@ export declare class StaticManifestProvider implements UpdateProvider {
|
|
|
56
88
|
private readonly options;
|
|
57
89
|
readonly name = "static-manifest";
|
|
58
90
|
constructor(options: StaticManifestProviderOptions);
|
|
91
|
+
/** Resolve the manifest URL (+ optional endpoint headers) for this check. */
|
|
92
|
+
private resolveEndpoint;
|
|
59
93
|
checkForUpdate(ctx: UpdateCheckContext): Promise<UpdateCheckResult>;
|
|
60
|
-
resolveDownload(manifest: UpdateManifest): Promise<
|
|
61
|
-
url: string;
|
|
62
|
-
sha256: string;
|
|
63
|
-
headers: Record<string, string> | undefined;
|
|
64
|
-
}>;
|
|
94
|
+
resolveDownload(manifest: UpdateManifest, ctx: UpdateCheckContext): Promise<DownloadSpec>;
|
|
65
95
|
}
|
|
96
|
+
export {};
|
|
66
97
|
//# sourceMappingURL=static-manifest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-manifest.d.ts","sourceRoot":"","sources":["../../src/provider/static-manifest.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"static-manifest.d.ts","sourceRoot":"","sources":["../../src/provider/static-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAEH,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACtB,MAAM,aAAa,CAAC;AAErB,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACtC,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzC,wFAAwF;AACxF,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW,CAAC;IACjF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,6BAA6B;IAC1C;;;;;;;;OAQG;IACH,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,kBAAkB,KAAK,YAAY,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACrF,8EAA8E;IAC9E,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,YAAY,CAAC,UAAU,CAAC,CAAC;IACtE;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,kBAAkB,KAAK,YAAY,CAAC,UAAU,CAAC,CAAC;IACnG,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAwC9D;AAmDD,qBAAa,sBAAuB,YAAW,cAAc;IAG7C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,IAAI,qBAAqB;IAElC,YAA6B,OAAO,EAAE,6BAA6B,EAAI;IAEvE,6EAA6E;YAC/D,eAAe;IAYvB,cAAc,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwDxE;IAEK,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAM9F;CACJ"}
|
|
@@ -25,6 +25,12 @@
|
|
|
25
25
|
* `sigx updates:publish` emits this document; relative `bundleUrl`s resolve
|
|
26
26
|
* against the manifest URL so the output directory can be dropped onto any
|
|
27
27
|
* static host unchanged.
|
|
28
|
+
*
|
|
29
|
+
* Self-hosted / authenticated backends are supported without writing a custom
|
|
30
|
+
* provider: `url` may be an async resolver (compute the endpoint from runtime
|
|
31
|
+
* context discovered after launch — sign-in, environment selection), and
|
|
32
|
+
* `onBeforeCheck` / `onBeforeDownload` inject fresh per-request headers (a
|
|
33
|
+
* short-lived bearer token refreshed each call) on top of the static `headers`.
|
|
28
34
|
*/
|
|
29
35
|
import { UpdatesError, } from '../types.js';
|
|
30
36
|
/**
|
|
@@ -98,6 +104,15 @@ function toManifest(entry, manifestUrl) {
|
|
|
98
104
|
metadata: entry.metadata,
|
|
99
105
|
};
|
|
100
106
|
}
|
|
107
|
+
/** Merge header maps left-to-right (later wins); undefined when the result is empty. */
|
|
108
|
+
function mergeHeaders(...parts) {
|
|
109
|
+
const out = {};
|
|
110
|
+
for (const part of parts) {
|
|
111
|
+
if (part)
|
|
112
|
+
Object.assign(out, part);
|
|
113
|
+
}
|
|
114
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
115
|
+
}
|
|
101
116
|
/** Newest entry wins: by createdAt when present, else last in array order. */
|
|
102
117
|
function newest(entries) {
|
|
103
118
|
if (entries.length === 0)
|
|
@@ -120,14 +135,33 @@ export class StaticManifestProvider {
|
|
|
120
135
|
this.options = options;
|
|
121
136
|
this.name = 'static-manifest';
|
|
122
137
|
}
|
|
138
|
+
/** Resolve the manifest URL (+ optional endpoint headers) for this check. */
|
|
139
|
+
async resolveEndpoint(ctx) {
|
|
140
|
+
const { url } = this.options;
|
|
141
|
+
const resolved = typeof url === 'function' ? await url(ctx) : url;
|
|
142
|
+
if (typeof resolved === 'string')
|
|
143
|
+
return { url: resolved };
|
|
144
|
+
if (resolved && typeof resolved === 'object' && typeof resolved.url === 'string') {
|
|
145
|
+
return resolved;
|
|
146
|
+
}
|
|
147
|
+
// A misbehaving resolver would otherwise throw an opaque TypeError —
|
|
148
|
+
// surface a clear, actionable error instead.
|
|
149
|
+
throw new UpdatesError('check-failed', 'Manifest `url` resolver must return a string or { url: string }');
|
|
150
|
+
}
|
|
123
151
|
async checkForUpdate(ctx) {
|
|
124
152
|
const fetchImpl = this.options.fetchImpl ?? globalThis.fetch;
|
|
125
153
|
if (typeof fetchImpl !== 'function') {
|
|
126
154
|
throw new UpdatesError('check-failed', 'No fetch implementation available — import @sigx/lynx (or @sigx/lynx-http) before checking for updates');
|
|
127
155
|
}
|
|
128
156
|
let doc;
|
|
157
|
+
// Assigned inside the try before any throw the catch re-raises, so it is
|
|
158
|
+
// always set by the time selection runs below.
|
|
159
|
+
let manifestUrl;
|
|
129
160
|
try {
|
|
130
|
-
const
|
|
161
|
+
const endpoint = await this.resolveEndpoint(ctx);
|
|
162
|
+
manifestUrl = endpoint.url;
|
|
163
|
+
const headers = mergeHeaders(this.options.headers, endpoint.headers, await this.options.onBeforeCheck?.(ctx));
|
|
164
|
+
const res = await fetchImpl(endpoint.url, { headers });
|
|
131
165
|
if (!res.ok) {
|
|
132
166
|
throw new UpdatesError('check-failed', `Manifest request failed: HTTP ${res.status}`);
|
|
133
167
|
}
|
|
@@ -148,7 +182,7 @@ export class StaticManifestProvider {
|
|
|
148
182
|
const compatible = candidates.filter((e) => e.runtimeVersion === ctx.runtimeVersion);
|
|
149
183
|
const best = newest(compatible);
|
|
150
184
|
if (best) {
|
|
151
|
-
const manifest = toManifest(best,
|
|
185
|
+
const manifest = toManifest(best, manifestUrl);
|
|
152
186
|
return manifest.id === ctx.currentUpdateId
|
|
153
187
|
? { type: 'up-to-date' }
|
|
154
188
|
: { type: 'update-available', manifest };
|
|
@@ -158,15 +192,15 @@ export class StaticManifestProvider {
|
|
|
158
192
|
// exists but needs a store update".
|
|
159
193
|
const incompatible = newest(candidates);
|
|
160
194
|
if (incompatible) {
|
|
161
|
-
return { type: 'incompatible', manifest: toManifest(incompatible,
|
|
195
|
+
return { type: 'incompatible', manifest: toManifest(incompatible, manifestUrl) };
|
|
162
196
|
}
|
|
163
197
|
return { type: 'up-to-date' };
|
|
164
198
|
}
|
|
165
|
-
async resolveDownload(manifest) {
|
|
199
|
+
async resolveDownload(manifest, ctx) {
|
|
166
200
|
return {
|
|
167
201
|
url: manifest.bundleUrl,
|
|
168
202
|
sha256: manifest.sha256,
|
|
169
|
-
headers: this.options.headers,
|
|
203
|
+
headers: mergeHeaders(this.options.headers, await this.options.onBeforeDownload?.(manifest, ctx)),
|
|
170
204
|
};
|
|
171
205
|
}
|
|
172
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-manifest.js","sourceRoot":"","sources":["../../src/provider/static-manifest.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"static-manifest.js","sourceRoot":"","sources":["../../src/provider/static-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Public types for `@sigx/lynx-updates` — the manifest shape, the pluggable
|
|
3
3
|
* `UpdateProvider` backend contract, and the reactive state machine.
|
|
4
4
|
*/
|
|
5
|
+
import type { StaticManifestProviderOptions } from './provider/static-manifest.js';
|
|
5
6
|
export type UpdatePlatform = 'android' | 'ios';
|
|
6
7
|
/** A single published update, as resolved by a provider. */
|
|
7
8
|
export interface UpdateManifest {
|
|
@@ -159,12 +160,11 @@ export type UpdateMode = 'silent' | 'immediate' | 'manual';
|
|
|
159
160
|
export interface UpdatesConfig {
|
|
160
161
|
/**
|
|
161
162
|
* Provider instance, or shorthand for the built-in static-manifest
|
|
162
|
-
* provider (`{ url }` → fetch that JSON manifest
|
|
163
|
+
* provider (`{ url }` → fetch that JSON manifest; the shorthand also
|
|
164
|
+
* accepts the async `url` resolver and `onBeforeCheck`/`onBeforeDownload`
|
|
165
|
+
* auth hooks — see {@link StaticManifestProviderOptions}).
|
|
163
166
|
*/
|
|
164
|
-
provider: UpdateProvider |
|
|
165
|
-
url: string;
|
|
166
|
-
headers?: Record<string, string>;
|
|
167
|
-
};
|
|
167
|
+
provider: UpdateProvider | StaticManifestProviderOptions;
|
|
168
168
|
/** Release channel. Default: the baked `__SIGX_UPDATES_CHANNEL__` define (usually 'production'). */
|
|
169
169
|
channel?: string;
|
|
170
170
|
/** Update mode. Default `'silent'`. */
|
|
@@ -179,7 +179,7 @@ export interface UpdatesConfig {
|
|
|
179
179
|
honorMandatory?: boolean;
|
|
180
180
|
/**
|
|
181
181
|
* true (default): `markReady()` is called automatically shortly after
|
|
182
|
-
* `configure()` — "JS booted" is the health bar for rollback. Set false
|
|
182
|
+
* `Updates.configure()` — "JS booted" is the health bar for rollback. Set false
|
|
183
183
|
* to gate on your own signal (first screen rendered, critical fetch OK)
|
|
184
184
|
* and call `Updates.markReady()` yourself.
|
|
185
185
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoNH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACnC,YACoB,IAAsB,EACtC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;oBAHC,IAAI;QAIpB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC/B,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sigx/lynx-updates",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "OTA bundle updates for sigx-lynx — pluggable backends, update modes, crash rollback",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"signalx-module.json"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@sigx/lynx-core": "^0.
|
|
23
|
-
"@sigx/lynx": "^0.
|
|
22
|
+
"@sigx/lynx-core": "^0.8.0",
|
|
23
|
+
"@sigx/lynx": "^0.8.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@typescript/native-preview": "7.0.0-dev.20260521.1",
|