@unibridge/sdk 0.5.0 → 0.9.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.
Files changed (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/dist/client.d.ts +6 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +59 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/commands/component/contract.d.ts +174 -0
  8. package/dist/commands/component/contract.d.ts.map +1 -0
  9. package/dist/commands/component/contract.js +142 -0
  10. package/dist/commands/component/contract.js.map +1 -0
  11. package/dist/commands/contracts.d.ts +9 -0
  12. package/dist/commands/contracts.d.ts.map +1 -0
  13. package/dist/commands/contracts.js +2 -0
  14. package/dist/commands/contracts.js.map +1 -0
  15. package/dist/commands/define.d.ts +19 -0
  16. package/dist/commands/define.d.ts.map +1 -0
  17. package/dist/commands/define.js +20 -0
  18. package/dist/commands/define.js.map +1 -0
  19. package/dist/commands/domain/contract.d.ts +10 -0
  20. package/dist/commands/domain/contract.d.ts.map +1 -0
  21. package/dist/commands/domain/contract.js +12 -0
  22. package/dist/commands/domain/contract.js.map +1 -0
  23. package/dist/commands/execute/contract.d.ts +4 -0
  24. package/dist/commands/execute/contract.d.ts.map +1 -0
  25. package/dist/commands/execute/contract.js +10 -0
  26. package/dist/commands/execute/contract.js.map +1 -0
  27. package/dist/commands/gameobject/contract.d.ts +320 -0
  28. package/dist/commands/gameobject/contract.d.ts.map +1 -0
  29. package/dist/commands/gameobject/contract.js +154 -0
  30. package/dist/commands/gameobject/contract.js.map +1 -0
  31. package/dist/commands/log/contract.d.ts +46 -0
  32. package/dist/commands/log/contract.d.ts.map +1 -0
  33. package/dist/commands/log/contract.js +31 -0
  34. package/dist/commands/log/contract.js.map +1 -0
  35. package/dist/commands/registry.d.ts +303 -0
  36. package/dist/commands/registry.d.ts.map +1 -0
  37. package/dist/commands/registry.js +10 -0
  38. package/dist/commands/registry.js.map +1 -0
  39. package/dist/commands/runtime.d.ts +7 -0
  40. package/dist/commands/runtime.d.ts.map +1 -0
  41. package/dist/commands/runtime.js +2 -0
  42. package/dist/commands/runtime.js.map +1 -0
  43. package/dist/commands/scene/contract.d.ts +127 -0
  44. package/dist/commands/scene/contract.d.ts.map +1 -0
  45. package/dist/commands/scene/contract.js +79 -0
  46. package/dist/commands/scene/contract.js.map +1 -0
  47. package/dist/commands/status/contract.d.ts +18 -0
  48. package/dist/commands/status/contract.d.ts.map +1 -0
  49. package/dist/commands/status/contract.js +16 -0
  50. package/dist/commands/status/contract.js.map +1 -0
  51. package/dist/commands/test/contract.d.ts +111 -0
  52. package/dist/commands/test/contract.d.ts.map +1 -0
  53. package/dist/commands/test/contract.js +71 -0
  54. package/dist/commands/test/contract.js.map +1 -0
  55. package/dist/connection.d.ts +37 -0
  56. package/dist/connection.d.ts.map +1 -0
  57. package/dist/connection.js +311 -0
  58. package/dist/connection.js.map +1 -0
  59. package/dist/hash.d.ts +4 -0
  60. package/dist/hash.d.ts.map +1 -0
  61. package/dist/hash.js +41 -0
  62. package/dist/hash.js.map +1 -0
  63. package/dist/index.d.ts +5 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +3 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/project.d.ts +6 -0
  68. package/dist/project.d.ts.map +1 -0
  69. package/dist/project.js +71 -0
  70. package/dist/project.js.map +1 -0
  71. package/dist/types.d.ts +55 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/package.json +31 -5
  76. package/src/client.ts +0 -76
  77. package/src/commands/contracts.ts +0 -4
  78. package/src/commands/define.ts +0 -56
  79. package/src/commands/domain/contract.ts +0 -15
  80. package/src/commands/execute/contract.ts +0 -12
  81. package/src/commands/registry.ts +0 -6
  82. package/src/commands/runtime.ts +0 -7
  83. package/src/commands/scene/contract.ts +0 -46
  84. package/src/commands/status/contract.ts +0 -19
  85. package/src/connection.test.ts +0 -330
  86. package/src/connection.ts +0 -382
  87. package/src/hash.test.ts +0 -48
  88. package/src/hash.ts +0 -50
  89. package/src/index.ts +0 -10
  90. package/src/project.test.ts +0 -93
  91. package/src/project.ts +0 -99
  92. package/src/types.ts +0 -64
  93. package/tsconfig.json +0 -16
@@ -0,0 +1,111 @@
1
+ import * as v from 'valibot';
2
+ import { type InferResult } from '../define.ts';
3
+ export declare const TestModeSchema: v.PicklistSchema<["edit", "play"], undefined>;
4
+ export declare const TestStatusSchema: v.PicklistSchema<["passed", "failed", "skipped", "inconclusive"], undefined>;
5
+ export declare const TestListQuerySchema: v.ObjectSchema<{
6
+ readonly mode: v.OptionalSchema<v.PicklistSchema<["edit", "play"], undefined>, undefined>;
7
+ readonly filter: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
8
+ readonly limit: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
9
+ readonly offset: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
10
+ }, undefined>;
11
+ export declare const TestRunQuerySchema: v.ObjectSchema<{
12
+ readonly mode: v.OptionalSchema<v.PicklistSchema<["edit", "play"], undefined>, undefined>;
13
+ readonly filter: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
14
+ readonly limit: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
15
+ readonly offset: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
16
+ }, undefined>;
17
+ declare const TestListItemSchema: v.ObjectSchema<{
18
+ readonly name: v.StringSchema<undefined>;
19
+ readonly fullName: v.StringSchema<undefined>;
20
+ readonly mode: v.PicklistSchema<["edit", "play"], undefined>;
21
+ readonly assembly: v.StringSchema<undefined>;
22
+ }, undefined>;
23
+ declare const TestRunItemSchema: v.ObjectSchema<{
24
+ readonly name: v.StringSchema<undefined>;
25
+ readonly fullName: v.StringSchema<undefined>;
26
+ readonly mode: v.PicklistSchema<["edit", "play"], undefined>;
27
+ readonly status: v.PicklistSchema<["passed", "failed", "skipped", "inconclusive"], undefined>;
28
+ readonly durationMs: v.NumberSchema<undefined>;
29
+ readonly message: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
30
+ readonly stackTrace: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
31
+ }, undefined>;
32
+ export declare const TestListResultSchema: v.ObjectSchema<{
33
+ readonly tests: v.ArraySchema<v.ObjectSchema<{
34
+ readonly name: v.StringSchema<undefined>;
35
+ readonly fullName: v.StringSchema<undefined>;
36
+ readonly mode: v.PicklistSchema<["edit", "play"], undefined>;
37
+ readonly assembly: v.StringSchema<undefined>;
38
+ }, undefined>, undefined>;
39
+ readonly total: v.NumberSchema<undefined>;
40
+ readonly limit: v.NumberSchema<undefined>;
41
+ readonly offset: v.NumberSchema<undefined>;
42
+ }, undefined>;
43
+ export declare const TestRunResultSchema: v.ObjectSchema<{
44
+ readonly tests: v.ArraySchema<v.ObjectSchema<{
45
+ readonly name: v.StringSchema<undefined>;
46
+ readonly fullName: v.StringSchema<undefined>;
47
+ readonly mode: v.PicklistSchema<["edit", "play"], undefined>;
48
+ readonly status: v.PicklistSchema<["passed", "failed", "skipped", "inconclusive"], undefined>;
49
+ readonly durationMs: v.NumberSchema<undefined>;
50
+ readonly message: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
51
+ readonly stackTrace: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
52
+ }, undefined>, undefined>;
53
+ readonly passed: v.NumberSchema<undefined>;
54
+ readonly failed: v.NumberSchema<undefined>;
55
+ readonly skipped: v.NumberSchema<undefined>;
56
+ readonly inconclusive: v.NumberSchema<undefined>;
57
+ readonly durationMs: v.NumberSchema<undefined>;
58
+ readonly total: v.NumberSchema<undefined>;
59
+ readonly limit: v.NumberSchema<undefined>;
60
+ readonly offset: v.NumberSchema<undefined>;
61
+ }, undefined>;
62
+ export declare const testListCommand: import("../define.ts").CommandDef<"testList", [query?: {
63
+ mode?: "edit" | "play" | undefined;
64
+ filter?: string | undefined;
65
+ limit?: number | undefined;
66
+ offset?: number | undefined;
67
+ } | undefined], {
68
+ tests: {
69
+ name: string;
70
+ fullName: string;
71
+ mode: "edit" | "play";
72
+ assembly: string;
73
+ }[];
74
+ total: number;
75
+ limit: number;
76
+ offset: number;
77
+ }>;
78
+ export declare const testRunCommand: import("../define.ts").CommandDef<"testRun", [query?: {
79
+ mode?: "edit" | "play" | undefined;
80
+ filter?: string | undefined;
81
+ limit?: number | undefined;
82
+ offset?: number | undefined;
83
+ } | undefined], {
84
+ tests: {
85
+ name: string;
86
+ fullName: string;
87
+ mode: "edit" | "play";
88
+ status: "passed" | "failed" | "skipped" | "inconclusive";
89
+ durationMs: number;
90
+ message?: string | null | undefined;
91
+ stackTrace?: string | null | undefined;
92
+ }[];
93
+ passed: number;
94
+ failed: number;
95
+ skipped: number;
96
+ inconclusive: number;
97
+ durationMs: number;
98
+ total: number;
99
+ limit: number;
100
+ offset: number;
101
+ }>;
102
+ export type TestMode = v.InferOutput<typeof TestModeSchema>;
103
+ export type TestStatus = v.InferOutput<typeof TestStatusSchema>;
104
+ export type TestListQuery = v.InferOutput<typeof TestListQuerySchema>;
105
+ export type TestRunQuery = v.InferOutput<typeof TestRunQuerySchema>;
106
+ export type TestListItem = v.InferOutput<typeof TestListItemSchema>;
107
+ export type TestRunItem = v.InferOutput<typeof TestRunItemSchema>;
108
+ export type TestListResult = InferResult<typeof testListCommand>;
109
+ export type TestRunResult = InferResult<typeof testRunCommand>;
110
+ export {};
111
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/commands/test/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE9D,eAAO,MAAM,cAAc,+CAA+B,CAAA;AAC1D,eAAO,MAAM,gBAAgB,8EAA8D,CAAA;AAE3F,eAAO,MAAM,mBAAmB;;;;;aAK9B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;aAK7B,CAAA;AAEF,QAAA,MAAM,kBAAkB;;;;;aAKtB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;;;aAQrB,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;aAK/B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;aAU9B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAU1B,CAAA;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;EAUzB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAA;AAC3D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,eAAe,CAAC,CAAA;AAChE,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,cAAc,CAAC,CAAA"}
@@ -0,0 +1,71 @@
1
+ import * as v from 'valibot';
2
+ import { defineCommand } from "../define.js";
3
+ export const TestModeSchema = v.picklist(['edit', 'play']);
4
+ export const TestStatusSchema = v.picklist(['passed', 'failed', 'skipped', 'inconclusive']);
5
+ export const TestListQuerySchema = v.object({
6
+ mode: v.optional(TestModeSchema),
7
+ filter: v.optional(v.string()),
8
+ limit: v.optional(v.number()),
9
+ offset: v.optional(v.number()),
10
+ });
11
+ export const TestRunQuerySchema = v.object({
12
+ mode: v.optional(TestModeSchema),
13
+ filter: v.optional(v.string()),
14
+ limit: v.optional(v.number()),
15
+ offset: v.optional(v.number()),
16
+ });
17
+ const TestListItemSchema = v.object({
18
+ name: v.string(),
19
+ fullName: v.string(),
20
+ mode: TestModeSchema,
21
+ assembly: v.string(),
22
+ });
23
+ const TestRunItemSchema = v.object({
24
+ name: v.string(),
25
+ fullName: v.string(),
26
+ mode: TestModeSchema,
27
+ status: TestStatusSchema,
28
+ durationMs: v.number(),
29
+ message: v.optional(v.nullable(v.string())),
30
+ stackTrace: v.optional(v.nullable(v.string())),
31
+ });
32
+ export const TestListResultSchema = v.object({
33
+ tests: v.array(TestListItemSchema),
34
+ total: v.number(),
35
+ limit: v.number(),
36
+ offset: v.number(),
37
+ });
38
+ export const TestRunResultSchema = v.object({
39
+ tests: v.array(TestRunItemSchema),
40
+ passed: v.number(),
41
+ failed: v.number(),
42
+ skipped: v.number(),
43
+ inconclusive: v.number(),
44
+ durationMs: v.number(),
45
+ total: v.number(),
46
+ limit: v.number(),
47
+ offset: v.number(),
48
+ });
49
+ export const testListCommand = defineCommand({
50
+ method: 'testList',
51
+ wire: 'test.list',
52
+ params: (query) => ({
53
+ mode: query?.mode,
54
+ filter: query?.filter,
55
+ limit: query?.limit,
56
+ offset: query?.offset,
57
+ }),
58
+ result: TestListResultSchema,
59
+ });
60
+ export const testRunCommand = defineCommand({
61
+ method: 'testRun',
62
+ wire: 'test.run',
63
+ params: (query) => ({
64
+ mode: query?.mode,
65
+ filter: query?.filter,
66
+ limit: query?.limit,
67
+ offset: query?.offset,
68
+ }),
69
+ result: TestRunResultSchema,
70
+ });
71
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/commands/test/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { CommandRequest, CommandResponse, ServerMetadata, TimeoutOptions } from './types.ts';
2
+ interface PipeConnectionOptions extends TimeoutOptions {
3
+ projectPath?: string;
4
+ }
5
+ export declare class PipeConnection {
6
+ private socket;
7
+ private connected;
8
+ private intentionalDisconnect;
9
+ private frameBuffer;
10
+ private pending;
11
+ private pipePathValue;
12
+ private connectInFlight;
13
+ private readonly connectTimeout;
14
+ private readonly commandTimeout;
15
+ private readonly reconnectTimeout;
16
+ private readonly projectPath;
17
+ private recoveryInFlight;
18
+ constructor(options?: PipeConnectionOptions);
19
+ connect(pipePath: string): Promise<void>;
20
+ send(request: CommandRequest): Promise<CommandResponse>;
21
+ disconnect(): void;
22
+ serverMetadata(): ServerMetadata | null;
23
+ private ensureConnected;
24
+ private connectWithRetry;
25
+ private connectOnce;
26
+ private attachSocketHandlers;
27
+ private parseFrames;
28
+ private writeFrame;
29
+ private validateProtocolVersion;
30
+ private requestPendingResults;
31
+ private tryRecoverPending;
32
+ private tryResolveRecoveredPayload;
33
+ private readResultFromDisk;
34
+ private deleteResultFile;
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAA;AAanB,UAAU,qBAAsB,SAAQ,cAAc;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,gBAAgB,CAA2B;gBAEvC,OAAO,GAAE,qBAA0B;IAOzC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAgC7D,UAAU,IAAI,IAAI;IAiBlB,cAAc,IAAI,cAAc,GAAG,IAAI;YAiBzB,eAAe;YAmBf,gBAAgB;IAmB9B,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,WAAW;IAkCnB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,0BAA0B;IA4ClC,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -0,0 +1,311 @@
1
+ import net from 'node:net';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { existsSync, readFileSync, unlinkSync } from 'node:fs';
4
+ import path from 'node:path';
5
+ import { stateDir } from "./hash.js";
6
+ const DEFAULT_CONNECT_TIMEOUT = 5_000;
7
+ const DEFAULT_COMMAND_TIMEOUT = 30_000;
8
+ const DEFAULT_RECONNECT_TIMEOUT = 30_000;
9
+ const EXPECTED_PROTOCOL_VERSION = 1;
10
+ export class PipeConnection {
11
+ socket;
12
+ connected = false;
13
+ intentionalDisconnect = false;
14
+ frameBuffer = Buffer.alloc(0);
15
+ pending = new Map();
16
+ pipePathValue;
17
+ connectInFlight;
18
+ connectTimeout;
19
+ commandTimeout;
20
+ reconnectTimeout;
21
+ projectPath;
22
+ recoveryInFlight;
23
+ constructor(options = {}) {
24
+ this.connectTimeout = options.connectTimeout ?? DEFAULT_CONNECT_TIMEOUT;
25
+ this.commandTimeout = options.commandTimeout ?? DEFAULT_COMMAND_TIMEOUT;
26
+ this.reconnectTimeout = options.reconnectTimeout ?? DEFAULT_RECONNECT_TIMEOUT;
27
+ this.projectPath = options.projectPath;
28
+ }
29
+ async connect(pipePath) {
30
+ this.pipePathValue = pipePath;
31
+ await this.ensureConnected(this.connectTimeout);
32
+ }
33
+ async send(request) {
34
+ if (!this.pipePathValue) {
35
+ throw new Error('Pipe path is not set. Call connect() before send().');
36
+ }
37
+ await this.ensureConnected(this.reconnectTimeout);
38
+ const timeout = this.commandTimeout;
39
+ return new Promise((resolve, reject) => {
40
+ const timer = setTimeout(() => {
41
+ this.pending.delete(request.id);
42
+ const fileResult = this.readResultFromDisk(request.id);
43
+ if (fileResult) {
44
+ resolve(fileResult);
45
+ return;
46
+ }
47
+ reject(new Error(`Command timeout (${Math.round(timeout / 1000)}s) — the command may have hung Unity's main thread`));
48
+ }, timeout);
49
+ this.pending.set(request.id, { resolve, reject, timer });
50
+ try {
51
+ this.writeFrame(request);
52
+ }
53
+ catch (error) {
54
+ clearTimeout(timer);
55
+ this.pending.delete(request.id);
56
+ reject(error);
57
+ }
58
+ });
59
+ }
60
+ disconnect() {
61
+ this.intentionalDisconnect = true;
62
+ this.connected = false;
63
+ if (this.socket) {
64
+ this.socket.destroy();
65
+ this.socket = undefined;
66
+ }
67
+ for (const [id, pending] of this.pending) {
68
+ clearTimeout(pending.timer);
69
+ pending.reject(new Error(`Connection closed before response for ${id}`));
70
+ }
71
+ this.pending.clear();
72
+ this.connectInFlight = undefined;
73
+ }
74
+ serverMetadata() {
75
+ if (!this.projectPath) {
76
+ return null;
77
+ }
78
+ const metadataPath = path.join(stateDir(this.projectPath), 'server.json');
79
+ if (!existsSync(metadataPath)) {
80
+ return null;
81
+ }
82
+ try {
83
+ return JSON.parse(readFileSync(metadataPath, 'utf-8'));
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ }
89
+ async ensureConnected(timeout) {
90
+ if (this.connected && this.socket && !this.socket.destroyed) {
91
+ return;
92
+ }
93
+ if (!this.pipePathValue) {
94
+ throw new Error('Pipe path is not set. Call connect() before send().');
95
+ }
96
+ if (!this.connectInFlight) {
97
+ this.connectInFlight = this.connectWithRetry(this.pipePathValue, timeout)
98
+ .finally(() => {
99
+ this.connectInFlight = undefined;
100
+ });
101
+ }
102
+ await this.connectInFlight;
103
+ }
104
+ async connectWithRetry(pipePath, timeout) {
105
+ const started = Date.now();
106
+ let delay = 200;
107
+ while (Date.now() - started < timeout) {
108
+ try {
109
+ await this.connectOnce(pipePath);
110
+ this.validateProtocolVersion();
111
+ this.requestPendingResults();
112
+ return;
113
+ }
114
+ catch {
115
+ await sleep(delay);
116
+ delay = Math.min(delay * 2, 5_000);
117
+ }
118
+ }
119
+ throw new Error(`Connect timeout (${Math.round(timeout / 1000)}s) — is Unity open with the unibridge plugin loaded?`);
120
+ }
121
+ connectOnce(pipePath) {
122
+ return new Promise((resolve, reject) => {
123
+ const socket = net.connect({ path: pipePath });
124
+ const onError = (error) => {
125
+ socket.removeListener('connect', onConnect);
126
+ reject(error);
127
+ };
128
+ const onConnect = () => {
129
+ socket.removeListener('error', onError);
130
+ this.socket = socket;
131
+ this.connected = true;
132
+ this.intentionalDisconnect = false;
133
+ this.attachSocketHandlers(socket);
134
+ resolve();
135
+ };
136
+ socket.once('error', onError);
137
+ socket.once('connect', onConnect);
138
+ });
139
+ }
140
+ attachSocketHandlers(socket) {
141
+ socket.on('data', (chunk) => {
142
+ if (typeof chunk !== 'string') {
143
+ this.frameBuffer = Buffer.concat([this.frameBuffer, chunk]);
144
+ }
145
+ this.parseFrames();
146
+ });
147
+ socket.on('close', () => {
148
+ if (!this.intentionalDisconnect) {
149
+ this.connected = false;
150
+ this.tryRecoverPending();
151
+ }
152
+ });
153
+ socket.on('error', () => {
154
+ this.connected = false;
155
+ this.tryRecoverPending();
156
+ });
157
+ }
158
+ parseFrames() {
159
+ while (this.frameBuffer.length >= 4) {
160
+ const messageLength = this.frameBuffer.readUInt32BE(0);
161
+ if (this.frameBuffer.length < 4 + messageLength) {
162
+ return;
163
+ }
164
+ const rawMessage = this.frameBuffer.subarray(4, 4 + messageLength);
165
+ this.frameBuffer = this.frameBuffer.subarray(4 + messageLength);
166
+ if (rawMessage.length === 0) {
167
+ continue;
168
+ }
169
+ let parsed;
170
+ try {
171
+ parsed = JSON.parse(rawMessage.toString());
172
+ }
173
+ catch {
174
+ continue;
175
+ }
176
+ const pending = this.pending.get(parsed.id);
177
+ if (pending) {
178
+ clearTimeout(pending.timer);
179
+ this.pending.delete(parsed.id);
180
+ this.deleteResultFile(parsed.id);
181
+ pending.resolve(parsed);
182
+ continue;
183
+ }
184
+ this.tryResolveRecoveredPayload(parsed);
185
+ }
186
+ }
187
+ writeFrame(payload) {
188
+ if (!this.socket || this.socket.destroyed) {
189
+ throw new Error('Connection is not active');
190
+ }
191
+ const body = Buffer.from(JSON.stringify(payload), 'utf-8');
192
+ const frame = Buffer.alloc(4 + body.length);
193
+ frame.writeUInt32BE(body.length, 0);
194
+ body.copy(frame, 4);
195
+ this.socket.write(frame);
196
+ }
197
+ validateProtocolVersion() {
198
+ const metadata = this.serverMetadata();
199
+ if (!metadata) {
200
+ return;
201
+ }
202
+ if (metadata.protocolVersion !== EXPECTED_PROTOCOL_VERSION) {
203
+ throw new Error(`Protocol version mismatch: SDK expects ${EXPECTED_PROTOCOL_VERSION}, Unity plugin is ${metadata.protocolVersion}`);
204
+ }
205
+ }
206
+ requestPendingResults() {
207
+ if (!this.socket || this.socket.destroyed || this.pending.size === 0) {
208
+ return;
209
+ }
210
+ this.writeFrame({
211
+ id: `recover-${randomUUID()}`,
212
+ command: 'recoverResults',
213
+ params: { ids: [...this.pending.keys()] },
214
+ });
215
+ }
216
+ tryRecoverPending() {
217
+ if (this.pending.size === 0 || this.recoveryInFlight) {
218
+ return;
219
+ }
220
+ this.recoveryInFlight = this.ensureConnected(this.reconnectTimeout)
221
+ .catch(() => {
222
+ // Per-request timeouts and file fallback will handle failure.
223
+ })
224
+ .finally(() => {
225
+ this.recoveryInFlight = undefined;
226
+ });
227
+ }
228
+ tryResolveRecoveredPayload(response) {
229
+ let payload = response.result;
230
+ if (typeof payload === 'string') {
231
+ try {
232
+ payload = JSON.parse(payload);
233
+ }
234
+ catch {
235
+ return;
236
+ }
237
+ }
238
+ if (!payload || typeof payload !== 'object' || !('results' in payload)) {
239
+ return;
240
+ }
241
+ const maybeResults = payload.results;
242
+ if (!Array.isArray(maybeResults)) {
243
+ return;
244
+ }
245
+ for (const item of maybeResults) {
246
+ if (!item || typeof item !== 'object' || !('id' in item) || typeof item.id !== 'string') {
247
+ continue;
248
+ }
249
+ const recoveredItem = item;
250
+ const pending = this.pending.get(recoveredItem.id);
251
+ if (!pending) {
252
+ continue;
253
+ }
254
+ const recovered = {
255
+ id: recoveredItem.id,
256
+ success: typeof recoveredItem.success === 'boolean' ? recoveredItem.success : false,
257
+ result: recoveredItem.result,
258
+ error: typeof recoveredItem.error === 'string' ? recoveredItem.error : undefined,
259
+ };
260
+ clearTimeout(pending.timer);
261
+ this.pending.delete(recoveredItem.id);
262
+ this.deleteResultFile(recoveredItem.id);
263
+ pending.resolve(recovered);
264
+ }
265
+ }
266
+ readResultFromDisk(requestId) {
267
+ if (!this.projectPath) {
268
+ return null;
269
+ }
270
+ const resultPath = path.join(stateDir(this.projectPath), 'results', `${requestId}.json`);
271
+ if (!existsSync(resultPath)) {
272
+ return null;
273
+ }
274
+ try {
275
+ const parsed = JSON.parse(readFileSync(resultPath, 'utf-8'));
276
+ if (typeof parsed.id !== 'string' || parsed.id !== requestId) {
277
+ return null;
278
+ }
279
+ const response = {
280
+ id: parsed.id,
281
+ success: Boolean(parsed.success),
282
+ result: parsed.result,
283
+ error: typeof parsed.error === 'string' ? parsed.error : undefined,
284
+ };
285
+ this.deleteResultFile(requestId);
286
+ return response;
287
+ }
288
+ catch {
289
+ return null;
290
+ }
291
+ }
292
+ deleteResultFile(requestId) {
293
+ if (!this.projectPath) {
294
+ return;
295
+ }
296
+ const resultPath = path.join(stateDir(this.projectPath), 'results', `${requestId}.json`);
297
+ if (!existsSync(resultPath)) {
298
+ return;
299
+ }
300
+ try {
301
+ unlinkSync(resultPath);
302
+ }
303
+ catch {
304
+ // Best-effort cleanup.
305
+ }
306
+ }
307
+ }
308
+ function sleep(ms) {
309
+ return new Promise((resolve) => setTimeout(resolve, ms));
310
+ }
311
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
package/dist/hash.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare function projectHash(projectPath: string): string;
2
+ export declare function stateDir(projectPath: string): string;
3
+ export declare function pipePath(projectPath: string): string;
4
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAyBA,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGvD;AAUD,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAOpD"}
package/dist/hash.js ADDED
@@ -0,0 +1,41 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { realpathSync } from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ function canonicalizeProjectPath(projectPath) {
6
+ const resolved = path.resolve(projectPath);
7
+ let canonical = resolved;
8
+ try {
9
+ canonical = realpathSync.native(resolved);
10
+ }
11
+ catch {
12
+ // Fall back to the resolved path when it does not exist yet.
13
+ }
14
+ canonical = canonical.replace(/\\/g, '/');
15
+ canonical = canonical.replace(/\/+$/g, '');
16
+ if (process.platform === 'win32') {
17
+ canonical = canonical.toLowerCase();
18
+ }
19
+ return canonical;
20
+ }
21
+ export function projectHash(projectPath) {
22
+ const canonical = canonicalizeProjectPath(projectPath);
23
+ return createHash('sha256').update(canonical).digest('hex').slice(0, 12);
24
+ }
25
+ function stateBaseDir() {
26
+ if (process.platform === 'win32') {
27
+ return path.join(os.tmpdir(), 'unibridge');
28
+ }
29
+ return '/tmp/unibridge';
30
+ }
31
+ export function stateDir(projectPath) {
32
+ return path.join(stateBaseDir(), projectHash(projectPath));
33
+ }
34
+ export function pipePath(projectPath) {
35
+ const hash = projectHash(projectPath);
36
+ if (process.platform === 'win32') {
37
+ return `\\\\.\\pipe\\unibridge-${hash}`;
38
+ }
39
+ return path.join(stateBaseDir(), hash, 'bridge.sock');
40
+ }
41
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,SAAS,uBAAuB,CAAC,WAAmB;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1C,IAAI,SAAS,GAAG,QAAQ,CAAA;IAExB,IAAI,CAAC;QACH,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;IAC/D,CAAC;IAED,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACzC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAE1C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;IACrC,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,MAAM,SAAS,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAA;IACtD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAC1E,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IACrC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,0BAA0B,IAAI,EAAE,CAAA;IACzC,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,CAAA;AACvD,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { init, findUnityProject, isPluginInstalled } from './project.ts';
2
+ export { createClient } from './client.ts';
3
+ export type * from './commands/contracts.ts';
4
+ export type { InitOptions, InitResult, CommandResponse, ClientOptions, UniBridgeClient, } from './types.ts';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,mBAAmB,yBAAyB,CAAA;AAC5C,YAAY,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { init, findUnityProject, isPluginInstalled } from "./project.js";
2
+ export { createClient } from "./client.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { InitOptions, InitResult } from './types.ts';
2
+ export declare function findUnityProject(startPath?: string): string;
3
+ export declare function parseUnityVersion(projectPath: string): string;
4
+ export declare function isPluginInstalled(projectPath: string): boolean;
5
+ export declare function init(options?: InitOptions): Promise<InitResult>;
6
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA8BzD,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,MAAc,GAAG,MAAM,CAkBlE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BzE"}