@goliapkg/smix 1.0.9 → 1.0.10

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.
@@ -14,6 +14,10 @@ export type HttpFetch = (input: string, init: {
14
14
  status: number;
15
15
  json(): Promise<unknown>;
16
16
  text(): Promise<string>;
17
+ /** v1.0.4 §D7 — optional; used to parse `X-Sim-Health` response header. */
18
+ headers?: {
19
+ get(name: string): string | null;
20
+ };
17
21
  }>;
18
22
  /**
19
23
  * SmixSimRuntime + SelectorResolver wrapper around the smix-runner HTTP
@@ -30,7 +34,40 @@ export declare class HttpSimRuntime implements SmixSimRuntime {
30
34
  * Pass directly to App constructor or Smix.launchApp.
31
35
  */
32
36
  readonly labelsResolver: LabelsResolver;
37
+ /**
38
+ * v1.0.3 — session id sent as `Session-Id` header on every request
39
+ * when non-null. Set via {@link setSessionId}; when set, the runner
40
+ * short-circuits per-request `.activate()` and reuses the cached
41
+ * XCUIApplication binding. Typically managed by the {@link Session}
42
+ * class — direct callers rarely need to touch this.
43
+ */
44
+ private sessionId;
45
+ /**
46
+ * v1.0.4 §D7 — setter installed by {@link Session.open} so this
47
+ * client can push `X-Sim-Health` header transitions back to the
48
+ * session's state machine. `null` when no session is open (legacy
49
+ * per-request path).
50
+ */
51
+ private sessionStateSetter;
52
+ /**
53
+ * v1.0.3 — public alias for the wrapped fetch implementation.
54
+ * Consumed by the {@link Session} class which drives `/session/*`
55
+ * routes through the same transport.
56
+ */
57
+ get fetch(): HttpFetch;
33
58
  constructor(baseUrl: string, fetchImpl?: HttpFetch);
59
+ /**
60
+ * v1.0.3 — attach / clear the `Session-Id` header on every subsequent
61
+ * request. Called by {@link Session.open} / {@link Session.close};
62
+ * consumers who manage sessions manually can call this directly.
63
+ */
64
+ setSessionId(id: string | null): void;
65
+ /**
66
+ * v1.0.4 §D7 — register a callback the client invokes on every
67
+ * response that carries `X-Sim-Health`. Session.open() wires this
68
+ * so consumers can subscribe via `session.on('state', ...)`.
69
+ */
70
+ attachSessionState(setter: (state: SessionState) => void): void;
34
71
  /**
35
72
  * v7.7 c1 — direct match-count via dedicated FFI fn (avoid allocating
36
73
  * the full ids list when callers only need count). Mirrors Rust
@@ -58,4 +95,6 @@ export declare class HttpSimRuntime implements SmixSimRuntime {
58
95
  synthesizeTapAtNormalized(nx: number, ny: number): Promise<void>;
59
96
  private post;
60
97
  }
98
+ /** v1.0.4 §D7 — re-export from Session.ts so this file's use compiles. */
99
+ export type SessionState = 'healthy' | 'degraded' | 'cycling' | 'dead';
61
100
  //# sourceMappingURL=HttpRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HttpRunner.d.ts","sourceRoot":"","sources":["../src/HttpRunner.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EACV,OAAO,EAEP,cAAc,EACd,cAAc,EACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7E;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAA;AAEhG;;;GAGG;AACH,qBAAa,cAAe,YAAW,cAAc;aAWjC,OAAO,EAAE,MAAM;aACf,SAAS,EAAE,SAAS;IAXtC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;gBAGrB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,SAAoD;IAYjF;;;;;OAKG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC;IAKjC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,KAAK,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAKjC,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKnC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,WAAW,CAAC,IAAI,EAAE;QACtB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,OAAO,CAAA;QACnB,aAAa,EAAE,OAAO,CAAA;QACtB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,GAAG,OAAO,CAAC,IAAI,CAAC;IAUX,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIxD,IAAI;CAkBnB"}
1
+ {"version":3,"file":"HttpRunner.d.ts","sourceRoot":"","sources":["../src/HttpRunner.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,29 @@ export class HttpSimRuntime {
44
44
  * Pass directly to App constructor or Smix.launchApp.
45
45
  */
46
46
  labelsResolver;
47
+ /**
48
+ * v1.0.3 — session id sent as `Session-Id` header on every request
49
+ * when non-null. Set via {@link setSessionId}; when set, the runner
50
+ * short-circuits per-request `.activate()` and reuses the cached
51
+ * XCUIApplication binding. Typically managed by the {@link Session}
52
+ * class — direct callers rarely need to touch this.
53
+ */
54
+ sessionId = null;
55
+ /**
56
+ * v1.0.4 §D7 — setter installed by {@link Session.open} so this
57
+ * client can push `X-Sim-Health` header transitions back to the
58
+ * session's state machine. `null` when no session is open (legacy
59
+ * per-request path).
60
+ */
61
+ sessionStateSetter = null;
62
+ /**
63
+ * v1.0.3 — public alias for the wrapped fetch implementation.
64
+ * Consumed by the {@link Session} class which drives `/session/*`
65
+ * routes through the same transport.
66
+ */
67
+ get fetch() {
68
+ return this.fetchImpl;
69
+ }
47
70
  constructor(baseUrl, fetchImpl = globalThis.fetch) {
48
71
  this.baseUrl = baseUrl;
49
72
  this.fetchImpl = fetchImpl;
@@ -56,6 +79,22 @@ export class HttpSimRuntime {
56
79
  return r.labels;
57
80
  };
58
81
  }
82
+ /**
83
+ * v1.0.3 — attach / clear the `Session-Id` header on every subsequent
84
+ * request. Called by {@link Session.open} / {@link Session.close};
85
+ * consumers who manage sessions manually can call this directly.
86
+ */
87
+ setSessionId(id) {
88
+ this.sessionId = id;
89
+ }
90
+ /**
91
+ * v1.0.4 §D7 — register a callback the client invokes on every
92
+ * response that carries `X-Sim-Health`. Session.open() wires this
93
+ * so consumers can subscribe via `session.on('state', ...)`.
94
+ */
95
+ attachSessionState(setter) {
96
+ this.sessionStateSetter = setter;
97
+ }
59
98
  /**
60
99
  * v7.7 c1 — direct match-count via dedicated FFI fn (avoid allocating
61
100
  * the full ids list when callers only need count). Mirrors Rust
@@ -116,11 +155,30 @@ export class HttpSimRuntime {
116
155
  }
117
156
  async post(path, body) {
118
157
  const url = `${this.baseUrl}${path}`;
158
+ const headers = {
159
+ 'content-type': 'application/json',
160
+ };
161
+ if (this.sessionId !== null) {
162
+ headers['session-id'] = this.sessionId;
163
+ }
119
164
  const resp = await this.fetchImpl(url, {
120
165
  method: 'POST',
121
- headers: { 'content-type': 'application/json' },
166
+ headers,
122
167
  body: JSON.stringify(body),
123
168
  });
169
+ // v1.0.4 §D7 — parse X-Sim-Health header and forward to the
170
+ // attached session state setter (if any). Runs BEFORE the
171
+ // ok-check so state transitions are visible on error paths too.
172
+ const simHealthHeader = resp.headers?.get?.('x-sim-health');
173
+ if (simHealthHeader && this.sessionStateSetter) {
174
+ const normalized = simHealthHeader.trim().toLowerCase();
175
+ if (normalized === 'healthy' ||
176
+ normalized === 'degraded' ||
177
+ normalized === 'cycling' ||
178
+ normalized === 'dead') {
179
+ this.sessionStateSetter(normalized);
180
+ }
181
+ }
124
182
  if (!resp.ok) {
125
183
  const text = await resp.text();
126
184
  throw new Error(`smix-runner ${path} → HTTP ${resp.status}: ${text}`);
@@ -1 +1 @@
1
- {"version":3,"file":"HttpRunner.js","sourceRoot":"","sources":["../src/HttpRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HttpRunner.js","sourceRoot":"","sources":["../src/HttpRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { HttpFetch } from './HttpRunner.js';
2
+ interface HttpRunnerLike {
3
+ readonly baseUrl: string;
4
+ readonly fetch: HttpFetch;
5
+ setSessionId(id: string | null): void;
6
+ /** v1.0.4 §D7 — optional hook so the client can push state
7
+ * transitions parsed from `X-Sim-Health` headers back to the
8
+ * Session. Legacy runners omit the header; state stays `healthy`. */
9
+ attachSessionState?(setter: (state: SessionState) => void): void;
10
+ }
11
+ export interface SessionOpenOptions {
12
+ /** If true, runner calls `.activate()` on the target once at open time. */
13
+ activate?: boolean;
14
+ }
15
+ /**
16
+ * v1.0.4 §D7 — session-scoped sim health classification observed via
17
+ * the runner's `X-Sim-Health` response header. Consumers subscribe
18
+ * via {@link Session.on}.
19
+ */
20
+ export type SessionState = 'healthy' | 'degraded' | 'cycling' | 'dead';
21
+ type StateListener = (state: SessionState) => void;
22
+ /**
23
+ * Runner-side session guard. Use `Session.open()` to acquire, always
24
+ * pair with `session.close()` in a `finally` block.
25
+ *
26
+ * While the Session is open, every runner request from the same
27
+ * `HttpRunnerClient` carries a `Session-Id` header. The runner
28
+ * short-circuits per-request `.activate()` and reuses the session's
29
+ * cached binding.
30
+ */
31
+ export declare class Session {
32
+ private readonly runner;
33
+ readonly sessionId: string;
34
+ readonly activatedOnce: boolean;
35
+ readonly serverTimeMs: number;
36
+ /** v1.0.4 §D7 — current classification; updated on every response
37
+ * that carries `X-Sim-Health`. */
38
+ private _state;
39
+ private readonly listeners;
40
+ private constructor();
41
+ static open(runner: HttpRunnerLike, bundleId: string, options?: SessionOpenOptions): Promise<Session>;
42
+ /** v1.0.4 §D7 — current sim-health classification. */
43
+ get state(): SessionState;
44
+ /** v1.0.4 §D7 — subscribe to state transitions. Returns an
45
+ * unsubscribe function. */
46
+ on(_event: 'state', listener: StateListener): () => void;
47
+ /** v1.0.5 §D1 — probe `/session/list` and return `true` iff this
48
+ * session's id is still known to the runner. Consumers wire this
49
+ * after a state transition to `cycling`/`dead` to decide whether
50
+ * to keep the session or reopen. */
51
+ stillValid(): Promise<boolean>;
52
+ /** v1.0.4 §D14 — instruct the runner to `terminate()` + `launch()`
53
+ * the session's cached `XCUIApplication` in place. Preserves the
54
+ * session id and XCUITest binding. Returns wall-clock ms. */
55
+ relaunchApp(): Promise<number>;
56
+ private updateState;
57
+ /**
58
+ * Ask the runner to re-issue `.activate()` on the session's cached
59
+ * binding. Subject to a runner-side 2 s rate limit per session; when
60
+ * rate-limited, returns `false` (no-op, session still healthy).
61
+ *
62
+ * Use when the client detects target-app drift (e.g. tree returned
63
+ * empty payload, foreground steal by system UI).
64
+ */
65
+ renewActivation(): Promise<boolean>;
66
+ /**
67
+ * Release the session. Sends `POST /session/close` (idempotent),
68
+ * clears the `Session-Id` header from the client. Subsequent client
69
+ * requests go via the legacy per-request rebind path (rate-limited).
70
+ */
71
+ close(): Promise<void>;
72
+ }
73
+ export {};
74
+ //# sourceMappingURL=Session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IACrC;;yEAEqE;IACrE,kBAAkB,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAA;CACjE;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAA;AAEtE,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;AAElD;;;;;;;;GAQG;AACH,qBAAa,OAAO;IAOhB,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,SAAS,EAAE,MAAM;aACjB,aAAa,EAAE,OAAO;aACtB,YAAY,EAAE,MAAM;IATtC;sCACkC;IAClC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IAErD,OAAO;WAOM,IAAI,CACf,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,OAAO,CAAC;IAkCnB,sDAAsD;IACtD,IAAI,KAAK,IAAI,YAAY,CAExB;IAED;+BAC2B;IAC3B,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAKxD;;;wCAGoC;IAC9B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBpC;;iEAE6D;IACvD,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAmBpC,OAAO,CAAC,WAAW;IAYnB;;;;;;;OAOG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBzC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}
@@ -0,0 +1,169 @@
1
+ // v1.0.3 — Session lifecycle wrapper.
2
+ //
3
+ // Session lifecycle addresses the runner-side "activation storm": pre-
4
+ // v1.0.2 runners called `.activate()` on every request whose
5
+ // `App-Activate: true` header was set, exhausting XCTest process
6
+ // arbitration on long-running gates. Sessions replace that with a
7
+ // one-shot lifecycle — open once, every subsequent request carries
8
+ // the `Session-Id` header, runner reuses its cached XCUIApplication
9
+ // binding, no per-request activation.
10
+ //
11
+ // Consumer flow:
12
+ //
13
+ // ```ts
14
+ // import { Smix, HttpRunnerClient, HttpSimRuntime, HttpSelectorResolver } from '@goliapkg/smix'
15
+ //
16
+ // const runner = new HttpRunnerClient('http://127.0.0.1:22087')
17
+ // const runtime = new HttpSimRuntime(runner)
18
+ // const resolver = new HttpSelectorResolver(runner)
19
+ // const session = await Session.open(runner, 'com.example.app', { activate: true })
20
+ // try {
21
+ // const app = await Smix.launchApp(bundleId('com.example.app'), runtime, resolver)
22
+ // // ... use `app` normally; every request carries Session-Id ...
23
+ // } finally {
24
+ // await session.close()
25
+ // }
26
+ // ```
27
+ /**
28
+ * Runner-side session guard. Use `Session.open()` to acquire, always
29
+ * pair with `session.close()` in a `finally` block.
30
+ *
31
+ * While the Session is open, every runner request from the same
32
+ * `HttpRunnerClient` carries a `Session-Id` header. The runner
33
+ * short-circuits per-request `.activate()` and reuses the session's
34
+ * cached binding.
35
+ */
36
+ export class Session {
37
+ runner;
38
+ sessionId;
39
+ activatedOnce;
40
+ serverTimeMs;
41
+ /** v1.0.4 §D7 — current classification; updated on every response
42
+ * that carries `X-Sim-Health`. */
43
+ _state = 'healthy';
44
+ listeners = new Set();
45
+ constructor(runner, sessionId, activatedOnce, serverTimeMs) {
46
+ this.runner = runner;
47
+ this.sessionId = sessionId;
48
+ this.activatedOnce = activatedOnce;
49
+ this.serverTimeMs = serverTimeMs;
50
+ }
51
+ static async open(runner, bundleId, options = {}) {
52
+ const activate = options.activate ?? false;
53
+ const res = await runner.fetch(`${runner.baseUrl}/session/open`, {
54
+ method: 'POST',
55
+ headers: { 'Content-Type': 'application/json' },
56
+ body: JSON.stringify({ bundleId, activate }),
57
+ });
58
+ if (!res.ok) {
59
+ const body = await res.text();
60
+ throw new Error(`Session.open ${bundleId}: HTTP ${res.status}: ${body}`);
61
+ }
62
+ const json = (await res.json());
63
+ if (typeof json.sessionId !== 'string' || json.sessionId.length === 0) {
64
+ throw new Error(`Session.open ${bundleId}: response missing sessionId`);
65
+ }
66
+ runner.setSessionId(json.sessionId);
67
+ const session = new Session(runner, json.sessionId, json.activatedOnce ?? false, json.serverTimeMs ?? 0);
68
+ // v1.0.4 §D7 — wire the runner's X-Sim-Health parse into this
69
+ // session's state machine. Legacy runner-clients without the
70
+ // attachSessionState hook keep working; the session's state stays
71
+ // 'healthy'.
72
+ runner.attachSessionState?.((next) => session.updateState(next));
73
+ return session;
74
+ }
75
+ /** v1.0.4 §D7 — current sim-health classification. */
76
+ get state() {
77
+ return this._state;
78
+ }
79
+ /** v1.0.4 §D7 — subscribe to state transitions. Returns an
80
+ * unsubscribe function. */
81
+ on(_event, listener) {
82
+ this.listeners.add(listener);
83
+ return () => this.listeners.delete(listener);
84
+ }
85
+ /** v1.0.5 §D1 — probe `/session/list` and return `true` iff this
86
+ * session's id is still known to the runner. Consumers wire this
87
+ * after a state transition to `cycling`/`dead` to decide whether
88
+ * to keep the session or reopen. */
89
+ async stillValid() {
90
+ const res = await this.runner.fetch(`${this.runner.baseUrl}/session/list`, {
91
+ method: 'POST',
92
+ headers: { 'Content-Type': 'application/json' },
93
+ body: '{}',
94
+ });
95
+ if (!res.ok)
96
+ return false;
97
+ const json = (await res.json());
98
+ return (json.sessions ?? []).some((s) => s.sessionId === this.sessionId);
99
+ }
100
+ /** v1.0.4 §D14 — instruct the runner to `terminate()` + `launch()`
101
+ * the session's cached `XCUIApplication` in place. Preserves the
102
+ * session id and XCUITest binding. Returns wall-clock ms. */
103
+ async relaunchApp() {
104
+ const res = await this.runner.fetch(`${this.runner.baseUrl}/session/relaunch-app`, {
105
+ method: 'POST',
106
+ headers: { 'Content-Type': 'application/json' },
107
+ body: JSON.stringify({ sessionId: this.sessionId }),
108
+ });
109
+ if (!res.ok) {
110
+ const body = await res.text();
111
+ throw new Error(`Session.relaunchApp ${this.sessionId}: HTTP ${res.status}: ${body}`);
112
+ }
113
+ const json = (await res.json());
114
+ return json.wallMs ?? 0;
115
+ }
116
+ updateState(next) {
117
+ if (next === this._state)
118
+ return;
119
+ this._state = next;
120
+ for (const listener of this.listeners) {
121
+ try {
122
+ listener(next);
123
+ }
124
+ catch {
125
+ // Consumer callbacks must not break the runner-response path.
126
+ }
127
+ }
128
+ }
129
+ /**
130
+ * Ask the runner to re-issue `.activate()` on the session's cached
131
+ * binding. Subject to a runner-side 2 s rate limit per session; when
132
+ * rate-limited, returns `false` (no-op, session still healthy).
133
+ *
134
+ * Use when the client detects target-app drift (e.g. tree returned
135
+ * empty payload, foreground steal by system UI).
136
+ */
137
+ async renewActivation() {
138
+ const res = await this.runner.fetch(`${this.runner.baseUrl}/session/renew-activation`, {
139
+ method: 'POST',
140
+ headers: { 'Content-Type': 'application/json' },
141
+ body: JSON.stringify({ sessionId: this.sessionId }),
142
+ });
143
+ if (!res.ok) {
144
+ const body = await res.text();
145
+ throw new Error(`Session.renewActivation ${this.sessionId}: HTTP ${res.status}: ${body}`);
146
+ }
147
+ const json = (await res.json());
148
+ return json.activated ?? false;
149
+ }
150
+ /**
151
+ * Release the session. Sends `POST /session/close` (idempotent),
152
+ * clears the `Session-Id` header from the client. Subsequent client
153
+ * requests go via the legacy per-request rebind path (rate-limited).
154
+ */
155
+ async close() {
156
+ try {
157
+ await this.runner.fetch(`${this.runner.baseUrl}/session/close`, {
158
+ method: 'POST',
159
+ headers: { 'Content-Type': 'application/json' },
160
+ body: JSON.stringify({ sessionId: this.sessionId }),
161
+ });
162
+ }
163
+ finally {
164
+ // Clear the client header regardless of runner-side outcome.
165
+ this.runner.setSessionId(null);
166
+ }
167
+ }
168
+ }
169
+ //# sourceMappingURL=Session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- // v7.5 c1 — SmixSimRuntime interface + MockSimRuntime impl.
1
+ // SmixSimRuntime interface + MockSimRuntime impl.
2
2
  //
3
- // Mirror Swift v7.2 + Kotlin v7.4 SimRuntime architecture. TS SDK
4
- // is HTTP-runner-friendly (per R-7.5-B decision):
5
- // - HttpSimRuntime (real, lives in src/HttpRunner.ts, v7.5 c3):
6
- // wraps smix-runner HTTP server via fetch (cross-platform iOS+Android).
3
+ // Mirrors the Swift and Kotlin SimRuntime architecture. The TS SDK is
4
+ // HTTP-runner-friendly:
5
+ // - HttpSimRuntime (real, lives in src/HttpRunner.ts): wraps the
6
+ // smix-runner HTTP server via fetch (cross-platform iOS+Android).
7
7
  // - MockSimRuntime (here): in-memory tree + event log for unit tests.
8
8
  //
9
- // Per iron rule §9 #13: this module ships only to test targets.
9
+ // This module is intended for test targets only.
10
10
  const EMPTY_DEFAULT = {
11
11
  rawType: 'other',
12
12
  bounds: { x: 0, y: 0, w: 393, h: 852 },
@@ -1 +1 @@
1
- {"version":3,"file":"SimRuntime.js","sourceRoot":"","sources":["../src/SimRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SimRuntime.js","sourceRoot":"","sources":["../src/SimRuntime.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,4 +8,5 @@ export { MockSimRuntime, type KeyName, type LaunchFreshCall, type SmixSimRuntime
8
8
  export { MockLabelsResolver, MockSelectorResolver, type LabelsResolver, type SelectorResolver, } from './SelectorResolver.js';
9
9
  export { HttpSimRuntime, type HttpFetch, } from './HttpRunner.js';
10
10
  export { findById, flatten, rectCenter, type A11yNode, type A11yRole, type Rect, } from './A11yNode.js';
11
+ export { Session, type SessionOpenOptions, } from './Session.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,GAAG,GACJ,MAAM,UAAU,CAAA;AAEjB,OAAO,EACL,OAAO,EACP,eAAe,EACf,aAAa,EACb,KAAK,EACL,KAAK,OAAO,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,OAAO,EACP,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,KAAK,SAAS,GACf,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,cAAc,EACd,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,EACd,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,IAAI,GACV,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,GAAG,GACJ,MAAM,UAAU,CAAA;AAEjB,OAAO,EACL,OAAO,EACP,eAAe,EACf,aAAa,EACb,KAAK,EACL,KAAK,OAAO,GACb,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,OAAO,EACP,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,KAAK,SAAS,GACf,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,cAAc,EACd,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,EACd,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,IAAI,GACV,MAAM,eAAe,CAAA;AAGtB,OAAO,EACL,OAAO,EACP,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAA"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- // v7.5 c1 — @smix/rn public API exports.
1
+ // @goliapkg/smix public API exports.
2
2
  //
3
- // Mirror Kotlin SDK + Swift SDK surface. Per iron rule §9 #13:
4
- // this package only ships to test harnesses (vitest / jest / Detox-like
5
- // runners) — never bundled into a production RN app.
3
+ // Mirrors Kotlin SDK + Swift SDK surface. This package is intended for
4
+ // test harnesses (vitest / jest / Detox-like runners) — it should not be
5
+ // bundled into a production RN app.
6
6
  export { App, } from './App.js';
7
7
  export { literal, patternFromJson, patternToJson, regex, } from './Pattern.js';
8
8
  export { encodeSelectorJson, Selector, selectorFromJsonValue, selectorToJsonValue, } from './Selector.js';
@@ -13,4 +13,6 @@ export { MockSimRuntime, } from './SimRuntime.js';
13
13
  export { MockLabelsResolver, MockSelectorResolver, } from './SelectorResolver.js';
14
14
  export { HttpSimRuntime, } from './HttpRunner.js';
15
15
  export { findById, flatten, rectCenter, } from './A11yNode.js';
16
+ // v1.0.3 — session lifecycle. Wraps runner-side `/session/*` routes.
17
+ export { Session, } from './Session.js';
16
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,+DAA+D;AAC/D,wEAAwE;AACxE,qDAAqD;AAErD,OAAO,EACL,GAAG,GACJ,MAAM,UAAU,CAAA;AAEjB,OAAO,EACL,OAAO,EACP,eAAe,EACf,aAAa,EACb,KAAK,GAEN,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,GAMpB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,kBAAkB,EAClB,aAAa,GAEd,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,OAAO,EACP,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,IAAI,GAEL,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,cAAc,GAKf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAGrB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,GAEf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,GAIX,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,EAAE;AACF,uEAAuE;AACvE,yEAAyE;AACzE,oCAAoC;AAEpC,OAAO,EACL,GAAG,GACJ,MAAM,UAAU,CAAA;AAEjB,OAAO,EACL,OAAO,EACP,eAAe,EACf,aAAa,EACb,KAAK,GAEN,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,GAMpB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,kBAAkB,EAClB,aAAa,GAEd,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,OAAO,EACP,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,IAAI,GAEL,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,cAAc,GAKf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAGrB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,GAEf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,QAAQ,EACR,OAAO,EACP,UAAU,GAIX,MAAM,eAAe,CAAA;AAEtB,qEAAqE;AACrE,OAAO,EACL,OAAO,GAER,MAAM,cAAc,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goliapkg/smix",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "Playwright-shape iOS Simulator / Android emulator UI automation SDK for React Native + Expo + Detox-compatible TypeScript test runners.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0 OR MIT",