@myagentroam/node 0.9.9 → 0.9.11

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 (214) hide show
  1. package/dist/capabilities.js +2 -92
  2. package/dist/claude-agent-sdk.js +2 -330
  3. package/dist/claude-channel.js +2 -44
  4. package/dist/codex-app-server.js +2 -503
  5. package/dist/config.js +2 -56
  6. package/dist/connector/node-connector-options.js +2 -1
  7. package/dist/connector/node-operation-router.js +2 -22
  8. package/dist/connector.js +2 -845
  9. package/dist/control-outbound-scheduler.js +2 -154
  10. package/dist/database.js +2 -1418
  11. package/dist/event-buffer.js +2 -19
  12. package/dist/fake-runner.js +2 -129
  13. package/dist/health.js +2 -3
  14. package/dist/main.js +2 -54
  15. package/dist/migrations/v001.js +3 -144
  16. package/dist/migrations/v002.js +2 -143
  17. package/dist/migrations/v003.js +2 -44
  18. package/dist/migrations/v004.js +34 -30
  19. package/dist/native-jsonl-reader.js +2 -186
  20. package/dist/native-session-history.js +2 -1119
  21. package/dist/opencode-runtime.js +2 -80
  22. package/dist/opencode-server.js +2 -263
  23. package/dist/operational.js +2 -122
  24. package/dist/process-tree.js +2 -18
  25. package/dist/rotating-log.js +2 -67
  26. package/dist/runner/abstract-runner.js +2 -232
  27. package/dist/runner/claude/managed-run-controller.js +2 -345
  28. package/dist/runner/claude-code-runner.js +2 -303
  29. package/dist/runner/codex/composer-image-markers.js +2 -0
  30. package/dist/runner/codex/conversation-parser.js +2 -861
  31. package/dist/runner/codex/managed-run-controller.js +2 -460
  32. package/dist/runner/codex-runner.js +2 -628
  33. package/dist/runner/fake-test-runner.js +2 -47
  34. package/dist/runner/opencode/conversation-parser.js +2 -221
  35. package/dist/runner/opencode/managed-run-controller.js +2 -537
  36. package/dist/runner/opencode-runner.js +2 -448
  37. package/dist/runner/runner-registry.js +2 -90
  38. package/dist/runner-command-engine.js +2 -70
  39. package/dist/runner-profiles.js +2 -215
  40. package/dist/runner-usage.js +2 -190
  41. package/dist/runtime-command-detector.js +2 -73
  42. package/dist/runtime-state.js +2 -982
  43. package/dist/service/attachment-domain-state.js +2 -7
  44. package/dist/service/conversation-history-service.js +2 -457
  45. package/dist/service/conversation-segment-service.js +2 -162
  46. package/dist/service/external-session-resume-service.js +2 -118
  47. package/dist/service/fake-managed-run-service.js +2 -60
  48. package/dist/service/managed-runner-session-service.js +2 -35
  49. package/dist/service/mcp-installation-verifier.js +2 -87
  50. package/dist/service/mcp-node-operation-service.js +2 -90
  51. package/dist/service/mcp-package-installer.js +2 -136
  52. package/dist/service/native-session-projection-service.js +2 -280
  53. package/dist/service/native-session-watch-service.js +2 -383
  54. package/dist/service/node-connection-lifecycle-service.js +2 -84
  55. package/dist/service/node-control-channel.js +2 -85
  56. package/dist/service/node-control-message-service.js +2 -107
  57. package/dist/service/node-request-service.js +2 -52
  58. package/dist/service/node-run-event-bridge.js +2 -83
  59. package/dist/service/node-terminal-channel.js +2 -182
  60. package/dist/service/node-upgrade-coordinator.js +2 -137
  61. package/dist/service/node-workspace-coordinator.js +2 -70
  62. package/dist/service/recent-run-projection-service.js +2 -78
  63. package/dist/service/run-attachment-service.js +2 -194
  64. package/dist/service/run-domain-state.js +2 -4
  65. package/dist/service/run-event-service.js +2 -193
  66. package/dist/service/run-workbench-service.js +2 -104
  67. package/dist/service/runner-channel-message-service.js +2 -20
  68. package/dist/service/runner-interaction-service.js +2 -243
  69. package/dist/service/runner-service.js +2 -71
  70. package/dist/service/session-catalog-service.js +2 -224
  71. package/dist/service/session-command-service.js +2 -76
  72. package/dist/service/session-context-service.js +2 -101
  73. package/dist/service/session-domain-state.js +2 -9
  74. package/dist/service/session-identity-service.js +2 -86
  75. package/dist/service/session-lifecycle-service.js +2 -240
  76. package/dist/service/session-message-service.js +2 -173
  77. package/dist/service/session-presentation-service.js +2 -43
  78. package/dist/service/session-query-service.js +2 -82
  79. package/dist/service/skill-directory-service.js +2 -238
  80. package/dist/service/skill-install-service.js +2 -434
  81. package/dist/service/skill-node-operation-service.js +2 -206
  82. package/dist/service/terminal-relay-state.js +2 -3
  83. package/dist/service/terminal-service.js +2 -52
  84. package/dist/service/workbench-event-service.js +2 -19
  85. package/dist/service/workbench-manifest-service.js +2 -69
  86. package/dist/service/workspace-change-service.js +2 -86
  87. package/dist/service/workspace-content-search-service.js +2 -477
  88. package/dist/service/workspace-domain-state.js +2 -41
  89. package/dist/service/workspace-file-service.js +2 -122
  90. package/dist/service/workspace-git-exclude-service.js +2 -119
  91. package/dist/service/workspace-queue-workbench-service.js +2 -304
  92. package/dist/service/workspace-service.js +2 -69
  93. package/dist/service/workspace-session-service.js +2 -139
  94. package/dist/service/workspace-upload-service.js +2 -262
  95. package/dist/service/workspace-watch-service.js +2 -146
  96. package/dist/service/workspace-workbench-service.js +2 -405
  97. package/dist/service.js +2 -38
  98. package/dist/storage.js +2 -32
  99. package/dist/supervisor.js +2 -136
  100. package/dist/terminal.js +2 -416
  101. package/dist/util/node-operation-parsers.js +2 -382
  102. package/dist/util/personal-instructions.js +2 -31
  103. package/dist/util/runner-error.js +2 -52
  104. package/dist/util/runner-native-session-parsers.js +2 -490
  105. package/dist/util/safe-error.js +2 -5
  106. package/dist/util/secret-environment.js +2 -25
  107. package/dist/workspace.js +2 -1519
  108. package/package.json +3 -3
  109. package/dist/capabilities.d.ts +0 -12
  110. package/dist/claude-agent-sdk.d.ts +0 -92
  111. package/dist/claude-channel.d.ts +0 -28
  112. package/dist/codex-app-server.d.ts +0 -133
  113. package/dist/config.d.ts +0 -18
  114. package/dist/connector/node-connector-options.d.ts +0 -27
  115. package/dist/connector/node-operation-router.d.ts +0 -9
  116. package/dist/connector.d.ts +0 -94
  117. package/dist/control-outbound-scheduler.d.ts +0 -29
  118. package/dist/database.d.ts +0 -305
  119. package/dist/event-buffer.d.ts +0 -9
  120. package/dist/fake-runner.d.ts +0 -42
  121. package/dist/health.d.ts +0 -4
  122. package/dist/main.d.ts +0 -2
  123. package/dist/migrations/v001.d.ts +0 -3
  124. package/dist/migrations/v002.d.ts +0 -4
  125. package/dist/migrations/v003.d.ts +0 -4
  126. package/dist/migrations/v004.d.ts +0 -4
  127. package/dist/native-jsonl-reader.d.ts +0 -35
  128. package/dist/native-session-history.d.ts +0 -126
  129. package/dist/opencode-runtime.d.ts +0 -33
  130. package/dist/opencode-server.d.ts +0 -49
  131. package/dist/operational.d.ts +0 -39
  132. package/dist/process-tree.d.ts +0 -9
  133. package/dist/rotating-log.d.ts +0 -17
  134. package/dist/runner/abstract-runner.d.ts +0 -172
  135. package/dist/runner/claude/managed-run-controller.d.ts +0 -51
  136. package/dist/runner/claude-code-runner.d.ts +0 -72
  137. package/dist/runner/codex/conversation-parser.d.ts +0 -59
  138. package/dist/runner/codex/managed-run-controller.d.ts +0 -90
  139. package/dist/runner/codex-runner.d.ts +0 -103
  140. package/dist/runner/fake-test-runner.d.ts +0 -26
  141. package/dist/runner/opencode/conversation-parser.d.ts +0 -31
  142. package/dist/runner/opencode/managed-run-controller.d.ts +0 -82
  143. package/dist/runner/opencode-runner.d.ts +0 -71
  144. package/dist/runner/runner-registry.d.ts +0 -19
  145. package/dist/runner-command-engine.d.ts +0 -28
  146. package/dist/runner-profiles.d.ts +0 -15
  147. package/dist/runner-usage.d.ts +0 -33
  148. package/dist/runtime-command-detector.d.ts +0 -3
  149. package/dist/runtime-state.d.ts +0 -171
  150. package/dist/service/attachment-domain-state.d.ts +0 -7
  151. package/dist/service/conversation-history-service.d.ts +0 -43
  152. package/dist/service/conversation-segment-service.d.ts +0 -20
  153. package/dist/service/external-session-resume-service.d.ts +0 -34
  154. package/dist/service/fake-managed-run-service.d.ts +0 -28
  155. package/dist/service/managed-runner-session-service.d.ts +0 -12
  156. package/dist/service/mcp-installation-verifier.d.ts +0 -9
  157. package/dist/service/mcp-node-operation-service.d.ts +0 -11
  158. package/dist/service/mcp-package-installer.d.ts +0 -8
  159. package/dist/service/native-session-projection-service.d.ts +0 -52
  160. package/dist/service/native-session-watch-service.d.ts +0 -62
  161. package/dist/service/node-connection-lifecycle-service.d.ts +0 -36
  162. package/dist/service/node-control-channel.d.ts +0 -32
  163. package/dist/service/node-control-message-service.d.ts +0 -27
  164. package/dist/service/node-request-service.d.ts +0 -14
  165. package/dist/service/node-run-event-bridge.d.ts +0 -40
  166. package/dist/service/node-terminal-channel.d.ts +0 -29
  167. package/dist/service/node-upgrade-coordinator.d.ts +0 -29
  168. package/dist/service/node-workspace-coordinator.d.ts +0 -29
  169. package/dist/service/recent-run-projection-service.d.ts +0 -14
  170. package/dist/service/run-attachment-service.d.ts +0 -38
  171. package/dist/service/run-domain-state.d.ts +0 -4
  172. package/dist/service/run-event-service.d.ts +0 -33
  173. package/dist/service/run-workbench-service.d.ts +0 -25
  174. package/dist/service/runner-channel-message-service.d.ts +0 -13
  175. package/dist/service/runner-interaction-service.d.ts +0 -39
  176. package/dist/service/runner-service.d.ts +0 -46
  177. package/dist/service/session-catalog-service.d.ts +0 -45
  178. package/dist/service/session-command-service.d.ts +0 -24
  179. package/dist/service/session-context-service.d.ts +0 -35
  180. package/dist/service/session-domain-state.d.ts +0 -9
  181. package/dist/service/session-identity-service.d.ts +0 -24
  182. package/dist/service/session-lifecycle-service.d.ts +0 -31
  183. package/dist/service/session-message-service.d.ts +0 -33
  184. package/dist/service/session-presentation-service.d.ts +0 -34
  185. package/dist/service/session-query-service.d.ts +0 -35
  186. package/dist/service/skill-directory-service.d.ts +0 -20
  187. package/dist/service/skill-install-service.d.ts +0 -21
  188. package/dist/service/skill-node-operation-service.d.ts +0 -44
  189. package/dist/service/terminal-relay-state.d.ts +0 -6
  190. package/dist/service/terminal-service.d.ts +0 -12
  191. package/dist/service/workbench-event-service.d.ts +0 -9
  192. package/dist/service/workbench-manifest-service.d.ts +0 -90
  193. package/dist/service/workspace-change-service.d.ts +0 -9
  194. package/dist/service/workspace-content-search-service.d.ts +0 -14
  195. package/dist/service/workspace-domain-state.d.ts +0 -79
  196. package/dist/service/workspace-file-service.d.ts +0 -18
  197. package/dist/service/workspace-git-exclude-service.d.ts +0 -4
  198. package/dist/service/workspace-queue-workbench-service.d.ts +0 -86
  199. package/dist/service/workspace-service.d.ts +0 -15
  200. package/dist/service/workspace-session-service.d.ts +0 -23
  201. package/dist/service/workspace-upload-service.d.ts +0 -39
  202. package/dist/service/workspace-watch-service.d.ts +0 -23
  203. package/dist/service/workspace-workbench-service.d.ts +0 -58
  204. package/dist/service.d.ts +0 -4
  205. package/dist/storage.d.ts +0 -2
  206. package/dist/supervisor.d.ts +0 -1
  207. package/dist/terminal.d.ts +0 -133
  208. package/dist/util/node-operation-parsers.d.ts +0 -92
  209. package/dist/util/personal-instructions.d.ts +0 -2
  210. package/dist/util/runner-error.d.ts +0 -6
  211. package/dist/util/runner-native-session-parsers.d.ts +0 -74
  212. package/dist/util/safe-error.d.ts +0 -2
  213. package/dist/util/secret-environment.d.ts +0 -1
  214. package/dist/workspace.d.ts +0 -217
@@ -1,69 +1,2 @@
1
- import { rmdir } from 'node:fs/promises';
2
- import { createWorkspaceDirectory, inspectWorkspace, listWorkspaceDirectories } from '../workspace.js';
3
- import { ensureWorkspaceGitExclude } from './workspace-git-exclude-service.js';
4
- export class WorkspaceService {
5
- database;
6
- config;
7
- runtime;
8
- onRemoved;
9
- constructor(database, config, runtime, onRemoved) {
10
- this.database = database;
11
- this.config = config;
12
- this.runtime = runtime;
13
- this.onRemoved = onRemoved;
14
- }
15
- operations() {
16
- return {
17
- 'workspace.register': (data) => this.register(data),
18
- 'workspace.directories.list': (data) => this.listDirectories(data),
19
- 'workspace.remove': (data) => this.remove(data),
20
- 'workspace.list': () => ({ workspaces: this.database().listWorkspaces() })
21
- };
22
- }
23
- async register(data) {
24
- const input = data;
25
- if (typeof input.path !== 'string')
26
- throw new Error('WORKSPACE_INVALID');
27
- if (input.createDirectoryName !== undefined && typeof input.createDirectoryName !== 'string')
28
- throw new Error('WORKSPACE_DIRECTORY_NAME_INVALID');
29
- let createdPath;
30
- try {
31
- const path = typeof input.createDirectoryName === 'string'
32
- ? (createdPath = await createWorkspaceDirectory(input.path, input.createDirectoryName, this.config().allowedRoots))
33
- : input.path;
34
- const inspected = await inspectWorkspace(path, this.config().allowedRoots);
35
- await ensureWorkspaceGitExclude(inspected.path);
36
- return {
37
- workspace: this.database().saveWorkspace({
38
- path: inspected.path,
39
- kind: inspected.kind,
40
- gitSummary: inspected.gitSummary ?? null
41
- })
42
- };
43
- }
44
- catch (error) {
45
- if (createdPath !== undefined)
46
- await rmdir(createdPath).catch(() => undefined);
47
- throw error;
48
- }
49
- }
50
- async listDirectories(data) {
51
- const input = data;
52
- if (input.path !== undefined && typeof input.path !== 'string')
53
- throw new Error('WORKSPACE_DIRECTORY_INVALID');
54
- return {
55
- directory: await listWorkspaceDirectories(input.path, this.config().allowedRoots)
56
- };
57
- }
58
- remove(data) {
59
- const input = data;
60
- if (typeof input.workspaceId !== 'string')
61
- throw new Error('WORKSPACE_NOT_FOUND');
62
- if (this.runtime.hasActiveWorkspaceLease(input.workspaceId))
63
- throw new Error('WORKSPACE_BUSY');
64
- const workspace = this.database().removeWorkspace(input.workspaceId);
65
- this.runtime.removeWorkspace(input.workspaceId);
66
- this.onRemoved(workspace.id);
67
- return { workspace };
68
- }
69
- }
1
+ /* mar-release-protected */
2
+ const _0x1fc07c=_0x375d;function _0x311e(){const _0x5ef219=['mZu3EeXIzhDU','v09ss1nqqunfx0rjuKvdve9swv9oqu1fx0LovKfmsuq','BgLZDerPCMvJDg9YAwvZ','AgfZqwn0AxzLv29YA3nWywnLtgvHC2u','A2LUza','ntzKveHitfK','mtHiz05hq2m','ndC0mZCYt2nRELzA','B3bLCMf0Aw9UCW','BgLZDfDVCMTZCgfJzxm','CMvNAxn0zxi','mti2ntm2ug5vwurv','C3rYAw5N','v09ss1nqqunfx0jvu1K','D29YA3nWywnLswq','ywXSB3DLzfjVB3rZ','CMvTB3zL','mJi2wfbNEgro','y2f0y2G','B25szw1VDMvK','y3jLyxrLrgLYzwn0B3j5tMfTzq','CMvTB3zLv29YA3nWywnL','mtvVDej4t1G','v09ss1nqqunfx0LovKfmsuq','mJa2mdiWmvfttKPNAG','mJuYmtm5mhn2tgrjyG','C2f2zvDVCMTZCgfJzq','mZi1meHQy0nVDq','CNvUDgLTzq','z2L0u3vTBwfYEq','v09ss1nqqunfx05pvf9gt1vora','v09ss1nqqunfx0rjuKvdve9swv9jtLzbteLe','Cgf0Aa','mJa0D3jmDuvL','mtC5nJm3zw9nrfDu','y29UzMLN','ndC3nZeXm2jZsMzxsW','zgf0ywjHC2u'];_0x311e=function(){return _0x5ef219;};return _0x311e();}(function(_0x4d2e44,_0x4c8053){const _0x10eec7=_0x375d,_0xa07b71=_0x4d2e44();while(!![]){try{const _0x1b475a=-parseInt(_0x10eec7(0x1e0))/(0x8*-0x13a+-0x2163+0x2b34)*(-parseInt(_0x10eec7(0x1ea))/(-0xcbd*0x1+-0x3f+0xcfe))+parseInt(_0x10eec7(0x1cb))/(0x6*-0x124+0x3*0x7f3+-0x10fe)*(parseInt(_0x10eec7(0x1d4))/(-0x14c9+-0xff4+0x24c1))+parseInt(_0x10eec7(0x1e5))/(-0x3b*-0x1d+0xc*0x126+-0x1*0x1472)*(parseInt(_0x10eec7(0x1d6))/(-0xa30+0x3*0xcf5+-0x1ca9))+-parseInt(_0x10eec7(0x1cf))/(-0x4*0x175+0x20e0+0x1*-0x1b05)*(-parseInt(_0x10eec7(0x1da))/(0x9d*-0xb+0x21d2+-0x1b0b))+-parseInt(_0x10eec7(0x1d5))/(0x11*0x36+-0x610+0x1*0x283)*(-parseInt(_0x10eec7(0x1e8))/(0x507+0x1*0x1eb3+0x476*-0x8))+parseInt(_0x10eec7(0x1cd))/(-0x1f3c+0x1*0x1e6c+0xdb)+parseInt(_0x10eec7(0x1f0))/(-0x1875+0x23c7+0x3c2*-0x3)*(-parseInt(_0x10eec7(0x1e7))/(-0x2303+0x1828+0xae8));if(_0x1b475a===_0x4c8053)break;else _0xa07b71['push'](_0xa07b71['shift']());}catch(_0x1cfd78){_0xa07b71['push'](_0xa07b71['shift']());}}}(_0x311e,-0xe34c+0x27e5*0x7+0x3d*0x1ec6));function _0x375d(_0x364877,_0x5589bf){_0x364877=_0x364877-(0x5*-0x195+0x2137+-0x1*0x1783);const _0x3e308f=_0x311e();let _0xb3c036=_0x3e308f[_0x364877];if(_0x375d['nqVcID']===undefined){var _0x4808f3=function(_0x4706f2){const _0x21bbfd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x26d0ab='',_0x4426b0='';for(let _0x734484=-0xd9d+0x10*-0x3f+-0x118d*-0x1,_0x3ef9b7,_0x369442,_0x2c0c8c=0x10d7+-0xecd+-0x20a;_0x369442=_0x4706f2['charAt'](_0x2c0c8c++);~_0x369442&&(_0x3ef9b7=_0x734484%(-0xc*0x17+0x1239+0x1*-0x1121)?_0x3ef9b7*(0x2291+0x715*0x3+0x7f0*-0x7)+_0x369442:_0x369442,_0x734484++%(-0x2e*-0x6f+0x112d*0x1+0x7*-0x54d))?_0x26d0ab+=String['fromCharCode'](-0x10*-0x8b+-0x10c5+0x7*0x14c&_0x3ef9b7>>(-(0x233c+0x17d3+-0x3b0d)*_0x734484&0x1476+0xbcb+-0x25*0xdf)):-0x7ce+0x7*-0x49f+0x2827*0x1){_0x369442=_0x21bbfd['indexOf'](_0x369442);}for(let _0x211bbd=0x17*-0x172+0x1cb7*0x1+0x487,_0x41618c=_0x26d0ab['length'];_0x211bbd<_0x41618c;_0x211bbd++){_0x4426b0+='%'+('00'+_0x26d0ab['charCodeAt'](_0x211bbd)['toString'](-0x9c5+0x22f*0x1+-0x7a6*-0x1))['slice'](-(0x17ae*-0x1+-0x62+-0xc09*-0x2));}return decodeURIComponent(_0x4426b0);};_0x375d['JEZxhi']=_0x4808f3,_0x375d['eXFOMC']={},_0x375d['nqVcID']=!![];}const _0x3b030e=_0x3e308f[-0x221d+-0x23*0x24+0x2709*0x1];_0x375d['cYUCSv']!==_0x3b030e&&(_0x375d['eXFOMC']={},_0x375d['cYUCSv']=_0x3b030e);const _0x34f580=_0x375d['eXFOMC'][_0x364877];return _0x34f580===undefined?(_0xb3c036=_0x375d['JEZxhi'](_0xb3c036),_0x375d['eXFOMC'][_0x364877]=_0xb3c036):_0xb3c036=_0x34f580,_0xb3c036;}import{rmdir}from'node:fs/promises';import{createWorkspaceDirectory,inspectWorkspace,listWorkspaceDirectories}from'../workspace.js';import{ensureWorkspaceGitExclude}from'./workspace-git-exclude-service.js';export class WorkspaceService{[_0x1fc07c(0x1ce)];[_0x1fc07c(0x1cc)];[_0x1fc07c(0x1eb)];[_0x1fc07c(0x1e2)];constructor(_0x388591,_0x3fdf4c,_0x397aa1,_0xa6e266){const _0x2f4255=_0x1fc07c;this[_0x2f4255(0x1ce)]=_0x388591,this[_0x2f4255(0x1cc)]=_0x3fdf4c,this[_0x2f4255(0x1eb)]=_0x397aa1,this[_0x2f4255(0x1e2)]=_0xa6e266;}[_0x1fc07c(0x1d7)](){const _0x2a9192=_0x1fc07c;return{'workspace.register':_0x443e6d=>this[_0x2a9192(0x1d9)](_0x443e6d),'workspace.directories.list':_0x1d9f9a=>this[_0x2a9192(0x1d1)](_0x1d9f9a),'workspace.remove':_0x29e34c=>this[_0x2a9192(0x1df)](_0x29e34c),'workspace.list':()=>({'workspaces':this[_0x2a9192(0x1ce)]()[_0x2a9192(0x1d8)]()})};}async[_0x1fc07c(0x1d9)](_0x588b15){const _0x216e90=_0x1fc07c,_0x28a38b=_0x588b15;if(typeof _0x28a38b[_0x216e90(0x1ef)]!==_0x216e90(0x1db))throw new Error(_0x216e90(0x1e6));if(_0x28a38b[_0x216e90(0x1e3)]!==undefined&&typeof _0x28a38b[_0x216e90(0x1e3)]!==_0x216e90(0x1db))throw new Error(_0x216e90(0x1d0));let _0x2e5ee8;try{const _0x45ed8a=typeof _0x28a38b[_0x216e90(0x1e3)]===_0x216e90(0x1db)?_0x2e5ee8=await createWorkspaceDirectory(_0x28a38b[_0x216e90(0x1ef)],_0x28a38b[_0x216e90(0x1e3)],this[_0x216e90(0x1cc)]()[_0x216e90(0x1de)]):_0x28a38b[_0x216e90(0x1ef)],_0x5afbf3=await inspectWorkspace(_0x45ed8a,this[_0x216e90(0x1cc)]()[_0x216e90(0x1de)]);return await ensureWorkspaceGitExclude(_0x5afbf3[_0x216e90(0x1ef)]),{'workspace':this[_0x216e90(0x1ce)]()[_0x216e90(0x1e9)]({'path':_0x5afbf3[_0x216e90(0x1ef)],'kind':_0x5afbf3[_0x216e90(0x1d3)],'gitSummary':_0x5afbf3[_0x216e90(0x1ec)]??null})};}catch(_0x194eb1){if(_0x2e5ee8!==undefined)await rmdir(_0x2e5ee8)[_0x216e90(0x1e1)](()=>undefined);throw _0x194eb1;}}async[_0x1fc07c(0x1d1)](_0x47cf21){const _0x4e4c18=_0x1fc07c,_0x497a3b=_0x47cf21;if(_0x497a3b[_0x4e4c18(0x1ef)]!==undefined&&typeof _0x497a3b[_0x4e4c18(0x1ef)]!==_0x4e4c18(0x1db))throw new Error(_0x4e4c18(0x1ee));return{'directory':await listWorkspaceDirectories(_0x497a3b[_0x4e4c18(0x1ef)],this[_0x4e4c18(0x1cc)]()[_0x4e4c18(0x1de)])};}[_0x1fc07c(0x1df)](_0x378384){const _0x4488ac=_0x1fc07c,_0x59e0f3=_0x378384;if(typeof _0x59e0f3[_0x4488ac(0x1dd)]!==_0x4488ac(0x1db))throw new Error(_0x4488ac(0x1ed));if(this[_0x4488ac(0x1eb)][_0x4488ac(0x1d2)](_0x59e0f3[_0x4488ac(0x1dd)]))throw new Error(_0x4488ac(0x1dc));const _0x499eb7=this[_0x4488ac(0x1ce)]()[_0x4488ac(0x1e4)](_0x59e0f3[_0x4488ac(0x1dd)]);return this[_0x4488ac(0x1eb)][_0x4488ac(0x1e4)](_0x59e0f3[_0x4488ac(0x1dd)]),this[_0x4488ac(0x1e2)](_0x499eb7['id']),{'workspace':_0x499eb7};}}
@@ -1,139 +1,2 @@
1
- const WATCH_INTERVAL_MS = 30_000;
2
- const CACHE_TTL_MS = 15_000;
3
- const INITIAL_WAIT_MS = 500;
4
- export class WorkspaceSessionService {
5
- state;
6
- options;
7
- cacheGenerations = new Map();
8
- constructor(state, options) {
9
- this.state = state;
10
- this.options = options;
11
- }
12
- ensureWatch(workspaceId) {
13
- if (this.state.sessionWatchTimers.has(workspaceId))
14
- return;
15
- const timer = setInterval(() => void this.refreshWatch(workspaceId), WATCH_INTERVAL_MS);
16
- timer.unref();
17
- this.state.sessionWatchTimers.set(workspaceId, timer);
18
- void this.refreshWatch(workspaceId);
19
- }
20
- stopWatch(workspaceId) {
21
- const timer = this.state.sessionWatchTimers.get(workspaceId);
22
- if (timer !== undefined)
23
- clearInterval(timer);
24
- this.state.sessionWatchTimers.delete(workspaceId);
25
- this.state.sessionWatchSignatures.delete(workspaceId);
26
- this.state.sessionWatchReads.delete(workspaceId);
27
- }
28
- async cached(workspaceId) {
29
- const cached = this.state.sessionCache.get(workspaceId);
30
- if (cached !== undefined && cached.expiresAt > Date.now())
31
- return cached.sessions;
32
- let initialDiscoveryTimedOut = false;
33
- let discovery = this.state.sessionCacheReads.get(workspaceId);
34
- if (discovery === undefined) {
35
- const generation = this.cacheGenerations.get(workspaceId) ?? 0;
36
- const read = this.options
37
- .discover(workspaceId)
38
- .then((sessions) => {
39
- if ((this.cacheGenerations.get(workspaceId) ?? 0) !== generation)
40
- return sessions;
41
- const previous = this.state.sessionCache.get(workspaceId)?.sessions;
42
- this.state.sessionCache.set(workspaceId, {
43
- sessions,
44
- expiresAt: Date.now() + CACHE_TTL_MS
45
- });
46
- if (initialDiscoveryTimedOut ||
47
- (previous !== undefined && sessionSignature(previous) !== sessionSignature(sessions))) {
48
- const revision = (this.state.watchRevisions.get(workspaceId) ?? 0) + 1;
49
- this.state.watchRevisions.set(workspaceId, revision);
50
- this.options.emitRevision(workspaceId, revision);
51
- }
52
- return sessions;
53
- })
54
- .finally(() => {
55
- if (this.state.sessionCacheReads.get(workspaceId) === read)
56
- this.state.sessionCacheReads.delete(workspaceId);
57
- if (!this.state.sessionCacheReads.has(workspaceId) &&
58
- !this.state.sessionCache.has(workspaceId) &&
59
- (this.cacheGenerations.get(workspaceId) ?? 0) !== generation)
60
- this.cacheGenerations.delete(workspaceId);
61
- });
62
- discovery = read;
63
- this.state.sessionCacheReads.set(workspaceId, discovery);
64
- }
65
- if (cached !== undefined)
66
- return cached.sessions;
67
- const discovered = await within(discovery, INITIAL_WAIT_MS);
68
- if (discovered !== undefined)
69
- return discovered;
70
- initialDiscoveryTimedOut = true;
71
- this.options.onPending?.(workspaceId, INITIAL_WAIT_MS);
72
- return [];
73
- }
74
- clear() {
75
- for (const timer of this.state.sessionWatchTimers.values())
76
- clearInterval(timer);
77
- this.state.sessionWatchTimers.clear();
78
- this.state.sessionWatchSignatures.clear();
79
- this.state.sessionWatchReads.clear();
80
- for (const workspaceId of new Set([
81
- ...this.state.sessionCache.keys(),
82
- ...this.state.sessionCacheReads.keys()
83
- ]))
84
- this.bumpCacheGeneration(workspaceId);
85
- this.state.sessionCache.clear();
86
- this.state.sessionCacheReads.clear();
87
- }
88
- invalidate(workspaceId) {
89
- this.bumpCacheGeneration(workspaceId);
90
- this.state.sessionCache.delete(workspaceId);
91
- this.state.sessionCacheReads.delete(workspaceId);
92
- this.stopWatch(workspaceId);
93
- }
94
- bumpCacheGeneration(workspaceId) {
95
- this.cacheGenerations.set(workspaceId, (this.cacheGenerations.get(workspaceId) ?? 0) + 1);
96
- }
97
- async refreshWatch(workspaceId) {
98
- const current = this.state.sessionWatchReads.get(workspaceId);
99
- if (current !== undefined)
100
- return current;
101
- const refresh = this.performRefresh(workspaceId).finally(() => this.state.sessionWatchReads.delete(workspaceId));
102
- this.state.sessionWatchReads.set(workspaceId, refresh);
103
- return refresh;
104
- }
105
- async performRefresh(workspaceId) {
106
- if (!this.options.active(workspaceId))
107
- return this.stopWatch(workspaceId);
108
- try {
109
- const signature = JSON.stringify(await this.options.listPage(workspaceId));
110
- const previous = this.state.sessionWatchSignatures.get(workspaceId);
111
- this.state.sessionWatchSignatures.set(workspaceId, signature);
112
- if (previous === undefined || previous === signature)
113
- return;
114
- const revision = (this.state.watchRevisions.get(workspaceId) ?? 0) + 1;
115
- this.state.watchRevisions.set(workspaceId, revision);
116
- this.options.emitRevision(workspaceId, revision);
117
- }
118
- catch {
119
- // The bounded interval retries without fabricating session state.
120
- }
121
- }
122
- }
123
- function sessionSignature(sessions) {
124
- return JSON.stringify(sessions.map((session) => [
125
- session.id,
126
- session.runnerTitle,
127
- session.customTitle,
128
- session.lastActivityAt,
129
- session.pinnedAt,
130
- session.pinOrder,
131
- session.externalDiscovered
132
- ]));
133
- }
134
- async function within(promise, timeoutMs) {
135
- return Promise.race([
136
- promise,
137
- new Promise((resolve) => setTimeout(resolve, timeoutMs))
138
- ]);
139
- }
1
+ /* mar-release-protected */
2
+ function _0xfdbb(){const _0x469a32=['mMD5q0vnqq','mti5odG3nKfowvvfEq','zMLUywXSEq','C2vZC2LVBLDHDgnOuMvHzhm','C2v0','C2vZC2LVBLDHDgnOvgLTzxjZ','nta0mdmYnw1oz1HmDG','z2v0','C2vZC2LVBKnHy2HL','zxHWAxjLC0f0','zw5ZDxjLv2f0y2G','Aw52ywXPzgf0zq','y2fJAgvhzw5LCMf0Aw9UCW','C3rYAw5NAwz5','ywn0AxzL','yNvTCenHy2HLr2vUzxjHDgLVBG','nZuYndC5mKfbyMHxEa','mZuWu1bpEg5l','C2vZC2LVBNm','mJe2nda4ovz3BNHYwG','B3b0Aw9UCW','DMfSDwvZ','BgfZDefJDgL2Axr5qxq','CgvYzM9YBvjLzNjLC2G','zxH0zxjUywXeAxnJB3zLCMvK','D2f0y2HszxzPC2LVBNm','nde2mdr0BerbyLm','CgLUBMvKqxq','C3rHDgu','y3vZDg9TvgL0Bgu','BwfW','B25qzw5KAw5N','CMfJzq','DgHLBG','C2vZC2LVBLDHDgnOu2LNBMf0DxjLCW','C3rVCfDHDgnO','BM93','CNvUBMvYvgL0Bgu','A2v5CW','y2XLyxi','C2vZC2LVBKnHy2HLuMvHzhm','zw1PDfjLDMLZAw9U','CgLUt3jKzxi','CMvMCMvZAfDHDgnO','nJm3nZe3whbKy2jA','BgLZDfbHz2u','y2fJAgvK','zgLZy292zxi','Dw5Yzwy','AgfZ','mZq4odK1mJzsuwP3u0S','zgvSzxrL'];_0xfdbb=function(){return _0x469a32;};return _0xfdbb();}function _0xa942(_0x322280,_0xbe3799){_0x322280=_0x322280-(-0x269a+0x1cae+-0x104*-0xb);const _0x4e4928=_0xfdbb();let _0x2d7846=_0x4e4928[_0x322280];if(_0xa942['PYGlKC']===undefined){var _0x2d3a80=function(_0x3c27b0){const _0x1a517c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x9b4cd8='',_0x2cf874='';for(let _0x2e0343=0x1*0x23a3+0x301+-0x26a4,_0xe0aaa0,_0x4d5fa4,_0x583351=0x9cc+0x1e10+-0x27dc;_0x4d5fa4=_0x3c27b0['charAt'](_0x583351++);~_0x4d5fa4&&(_0xe0aaa0=_0x2e0343%(0x4d+0x1*0x257d+-0x25c6)?_0xe0aaa0*(-0x1a1*-0xf+-0x806+0x1*-0x1029)+_0x4d5fa4:_0x4d5fa4,_0x2e0343++%(-0x3d4+-0xf5f+-0x1*-0x1337))?_0x9b4cd8+=String['fromCharCode'](-0x5*0x456+-0x4c+0x16f9&_0xe0aaa0>>(-(-0xdfd*-0x2+-0x21+0x1*-0x1bd7)*_0x2e0343&-0x31e*-0x2+-0xc1*0x2d+0x1bb7)):-0xb1*0x16+0x145f+-0x529){_0x4d5fa4=_0x1a517c['indexOf'](_0x4d5fa4);}for(let _0x546c17=-0x147*-0x1c+-0x2706+0x1*0x342,_0x55830b=_0x9b4cd8['length'];_0x546c17<_0x55830b;_0x546c17++){_0x2cf874+='%'+('00'+_0x9b4cd8['charCodeAt'](_0x546c17)['toString'](0x651+0x1d6*0x1+-0x817))['slice'](-(-0xf0d+0x358+0xbb7));}return decodeURIComponent(_0x2cf874);};_0xa942['SQHXQp']=_0x2d3a80,_0xa942['fJFpBF']={},_0xa942['PYGlKC']=!![];}const _0x189938=_0x4e4928[0xb0c+-0x1*0x1dd1+0x1f*0x9b];_0xa942['xdnvVX']!==_0x189938&&(_0xa942['fJFpBF']={},_0xa942['xdnvVX']=_0x189938);const _0xf7e231=_0xa942['fJFpBF'][_0x322280];return _0xf7e231===undefined?(_0x2d7846=_0xa942['SQHXQp'](_0x2d7846),_0xa942['fJFpBF'][_0x322280]=_0x2d7846):_0x2d7846=_0xf7e231,_0x2d7846;}const _0x3971dc=_0xa942;(function(_0x48481b,_0x107e83){const _0x1bef3f=_0xa942,_0x3a8b77=_0x48481b();while(!![]){try{const _0x124647=-parseInt(_0x1bef3f(0x166))/(-0x21*-0xba+0x690*-0x4+0x247)*(parseInt(_0x1bef3f(0x16e))/(-0x2359+-0x41c+0x2777))+-parseInt(_0x1bef3f(0x14d))/(-0x8a9+0xcc4+0x1*-0x418)+-parseInt(_0x1bef3f(0x16f))/(0x506*0x6+-0x3dc*0x5+-0x3f*0x2c)+-parseInt(_0x1bef3f(0x140))/(-0x3a*0x9e+0x989*0x2+0x10bf)+parseInt(_0x1bef3f(0x154))/(0x20fc+0x1698+-0x223*0x1a)*(parseInt(_0x1bef3f(0x14b))/(0x1*0x15d3+-0x11f5+0x3d7*-0x1))+-parseInt(_0x1bef3f(0x14a))/(0x23b*-0x1+-0x2647+0x2*0x1445)+parseInt(_0x1bef3f(0x16c))/(0x2*0xe3e+-0x29*0xd+0x3*-0x8ca);if(_0x124647===_0x107e83)break;else _0x3a8b77['push'](_0x3a8b77['shift']());}catch(_0x2a0b33){_0x3a8b77['push'](_0x3a8b77['shift']());}}}(_0xfdbb,0x3dd9*0x14+-0x2cb44*0x6+0x14f2a7));const WATCH_INTERVAL_MS=0x360*-0x18+-0xc122+0x18752,CACHE_TTL_MS=-0x12*0x162+0x1*0xe6+0x5296,INITIAL_WAIT_MS=-0x1a1*-0xf+-0x806+0x1*-0xe75;export class WorkspaceSessionService{[_0x3971dc(0x156)];[_0x3971dc(0x14e)];[_0x3971dc(0x146)]=new Map();constructor(_0x322280,_0xbe3799){const _0x53c241=_0x3971dc;this[_0x53c241(0x156)]=_0x322280,this[_0x53c241(0x14e)]=_0xbe3799;}[_0x3971dc(0x144)](_0x4e4928){const _0x74dedd=_0x3971dc;if(this[_0x74dedd(0x156)][_0x74dedd(0x173)][_0x74dedd(0x16b)](_0x4e4928))return;const _0x2d7846=setInterval(()=>void this[_0x74dedd(0x165)](_0x4e4928),WATCH_INTERVAL_MS);_0x2d7846[_0x74dedd(0x16a)](),this[_0x74dedd(0x156)][_0x74dedd(0x173)][_0x74dedd(0x172)](_0x4e4928,_0x2d7846),void this[_0x74dedd(0x165)](_0x4e4928);}[_0x3971dc(0x15d)](_0x2d3a80){const _0x9880ed=_0x3971dc,_0x189938=this[_0x9880ed(0x156)][_0x9880ed(0x173)][_0x9880ed(0x141)](_0x2d3a80);if(_0x189938!==undefined)clearInterval(_0x189938);this[_0x9880ed(0x156)][_0x9880ed(0x173)][_0x9880ed(0x16d)](_0x2d3a80),this[_0x9880ed(0x156)][_0x9880ed(0x15c)][_0x9880ed(0x16d)](_0x2d3a80),this[_0x9880ed(0x156)][_0x9880ed(0x171)][_0x9880ed(0x16d)](_0x2d3a80);}async[_0x3971dc(0x168)](_0xf7e231){const _0x27ea14=_0x3971dc,_0x3c27b0=this[_0x27ea14(0x156)][_0x27ea14(0x142)][_0x27ea14(0x141)](_0xf7e231);if(_0x3c27b0!==undefined&&_0x3c27b0[_0x27ea14(0x143)]>Date[_0x27ea14(0x15e)]())return _0x3c27b0[_0x27ea14(0x14c)];let _0x1a517c=![],_0x9b4cd8=this[_0x27ea14(0x156)][_0x27ea14(0x162)][_0x27ea14(0x141)](_0xf7e231);if(_0x9b4cd8===undefined){const _0x2e0343=this[_0x27ea14(0x146)][_0x27ea14(0x141)](_0xf7e231)??-0x3d4+-0xf5f+-0x1*-0x1333,_0xe0aaa0=this[_0x27ea14(0x14e)][_0x27ea14(0x169)](_0xf7e231)[_0x27ea14(0x15b)](_0x4d5fa4=>{const _0x4d4ae1=_0x27ea14;if((this[_0x4d4ae1(0x146)][_0x4d4ae1(0x141)](_0xf7e231)??-0x5*0x456+-0x4c+0x15fa)!==_0x2e0343)return _0x4d5fa4;const _0x583351=this[_0x4d4ae1(0x156)][_0x4d4ae1(0x142)][_0x4d4ae1(0x141)](_0xf7e231)?.[_0x4d4ae1(0x14c)];this[_0x4d4ae1(0x156)][_0x4d4ae1(0x142)][_0x4d4ae1(0x172)](_0xf7e231,{'sessions':_0x4d5fa4,'expiresAt':Date[_0x4d4ae1(0x15e)]()+CACHE_TTL_MS});if(_0x1a517c||_0x583351!==undefined&&sessionSignature(_0x583351)!==sessionSignature(_0x4d5fa4)){const _0x546c17=(this[_0x4d4ae1(0x156)][_0x4d4ae1(0x153)][_0x4d4ae1(0x141)](_0xf7e231)??-0xdfd*-0x2+-0x21+0x1*-0x1bd9)+(-0x31e*-0x2+-0xc1*0x2d+0x1bb2);this[_0x4d4ae1(0x156)][_0x4d4ae1(0x153)][_0x4d4ae1(0x172)](_0xf7e231,_0x546c17),this[_0x4d4ae1(0x14e)][_0x4d4ae1(0x163)](_0xf7e231,_0x546c17);}return _0x4d5fa4;})[_0x27ea14(0x170)](()=>{const _0x424ef5=_0x27ea14;if(this[_0x424ef5(0x156)][_0x424ef5(0x162)][_0x424ef5(0x141)](_0xf7e231)===_0xe0aaa0)this[_0x424ef5(0x156)][_0x424ef5(0x162)][_0x424ef5(0x16d)](_0xf7e231);if(!this[_0x424ef5(0x156)][_0x424ef5(0x162)][_0x424ef5(0x16b)](_0xf7e231)&&!this[_0x424ef5(0x156)][_0x424ef5(0x142)][_0x424ef5(0x16b)](_0xf7e231)&&(this[_0x424ef5(0x146)][_0x424ef5(0x141)](_0xf7e231)??-0xb1*0x16+0x145f+-0x529)!==_0x2e0343)this[_0x424ef5(0x146)][_0x424ef5(0x16d)](_0xf7e231);});_0x9b4cd8=_0xe0aaa0,this[_0x27ea14(0x156)][_0x27ea14(0x162)][_0x27ea14(0x172)](_0xf7e231,_0x9b4cd8);}if(_0x3c27b0!==undefined)return _0x3c27b0[_0x27ea14(0x14c)];const _0x2cf874=await within(_0x9b4cd8,INITIAL_WAIT_MS);if(_0x2cf874!==undefined)return _0x2cf874;return _0x1a517c=!![],this[_0x27ea14(0x14e)][_0x27ea14(0x159)]?.(_0xf7e231,INITIAL_WAIT_MS),[];}[_0x3971dc(0x161)](){const _0x10b112=_0x3971dc;for(const _0x55830b of this[_0x10b112(0x156)][_0x10b112(0x173)][_0x10b112(0x14f)]())clearInterval(_0x55830b);this[_0x10b112(0x156)][_0x10b112(0x173)][_0x10b112(0x161)](),this[_0x10b112(0x156)][_0x10b112(0x15c)][_0x10b112(0x161)](),this[_0x10b112(0x156)][_0x10b112(0x171)][_0x10b112(0x161)]();for(const _0x2ed3ed of new Set([...this[_0x10b112(0x156)][_0x10b112(0x142)][_0x10b112(0x160)](),...this[_0x10b112(0x156)][_0x10b112(0x162)][_0x10b112(0x160)]()]))this[_0x10b112(0x149)](_0x2ed3ed);this[_0x10b112(0x156)][_0x10b112(0x142)][_0x10b112(0x161)](),this[_0x10b112(0x156)][_0x10b112(0x162)][_0x10b112(0x161)]();}[_0x3971dc(0x145)](_0x43b992){const _0x178802=_0x3971dc;this[_0x178802(0x149)](_0x43b992),this[_0x178802(0x156)][_0x178802(0x142)][_0x178802(0x16d)](_0x43b992),this[_0x178802(0x156)][_0x178802(0x162)][_0x178802(0x16d)](_0x43b992),this[_0x178802(0x15d)](_0x43b992);}[_0x3971dc(0x149)](_0x5358e8){const _0x19ca62=_0x3971dc;this[_0x19ca62(0x146)][_0x19ca62(0x172)](_0x5358e8,(this[_0x19ca62(0x146)][_0x19ca62(0x141)](_0x5358e8)??-0x147*-0x1c+-0x2706+0x1*0x342)+(0x651+0x1d6*0x1+-0x826));}async[_0x3971dc(0x165)](_0x29ec39){const _0x1a84b7=_0x3971dc,_0xc53e97=this[_0x1a84b7(0x156)][_0x1a84b7(0x171)][_0x1a84b7(0x141)](_0x29ec39);if(_0xc53e97!==undefined)return _0xc53e97;const _0x557125=this[_0x1a84b7(0x151)](_0x29ec39)[_0x1a84b7(0x170)](()=>this[_0x1a84b7(0x156)][_0x1a84b7(0x171)][_0x1a84b7(0x16d)](_0x29ec39));return this[_0x1a84b7(0x156)][_0x1a84b7(0x171)][_0x1a84b7(0x172)](_0x29ec39,_0x557125),_0x557125;}async[_0x3971dc(0x151)](_0x310603){const _0x21e0f5=_0x3971dc;if(!this[_0x21e0f5(0x14e)][_0x21e0f5(0x148)](_0x310603))return this[_0x21e0f5(0x15d)](_0x310603);try{const _0x4f0472=JSON[_0x21e0f5(0x147)](await this[_0x21e0f5(0x14e)][_0x21e0f5(0x167)](_0x310603)),_0x39d5e5=this[_0x21e0f5(0x156)][_0x21e0f5(0x15c)][_0x21e0f5(0x141)](_0x310603);this[_0x21e0f5(0x156)][_0x21e0f5(0x15c)][_0x21e0f5(0x172)](_0x310603,_0x4f0472);if(_0x39d5e5===undefined||_0x39d5e5===_0x4f0472)return;const _0x4d720b=(this[_0x21e0f5(0x156)][_0x21e0f5(0x153)][_0x21e0f5(0x141)](_0x310603)??-0xf0d+0x358+0xbb5)+(0xb0c+-0x1*0x1dd1+0x12*0x10b);this[_0x21e0f5(0x156)][_0x21e0f5(0x153)][_0x21e0f5(0x172)](_0x310603,_0x4d720b),this[_0x21e0f5(0x14e)][_0x21e0f5(0x163)](_0x310603,_0x4d720b);}catch{}}}function sessionSignature(_0x292978){const _0xdfaecd=_0x3971dc;return JSON[_0xdfaecd(0x147)](_0x292978[_0xdfaecd(0x158)](_0x6d0d58=>[_0x6d0d58['id'],_0x6d0d58[_0xdfaecd(0x15f)],_0x6d0d58[_0xdfaecd(0x157)],_0x6d0d58[_0xdfaecd(0x150)],_0x6d0d58[_0xdfaecd(0x155)],_0x6d0d58[_0xdfaecd(0x164)],_0x6d0d58[_0xdfaecd(0x152)]]));}async function within(_0x45aa51,_0x387b4d){const _0x32880c=_0x3971dc;return Promise[_0x32880c(0x15a)]([_0x45aa51,new Promise(_0xe2d345=>setTimeout(_0xe2d345,_0x387b4d))]);}
@@ -1,262 +1,2 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { lstat, mkdir, open, readFile, rename, rm } from 'node:fs/promises';
3
- import { dirname, join, resolve } from 'node:path';
4
- import { parseComposerAttachmentUpload, validComposerAttachmentName } from '../util/node-operation-parsers.js';
5
- import { preflightWorkspaceUpload, workspaceUploadTemporaryName } from '../workspace.js';
6
- const CHUNK_BYTES = 512 * 1024;
7
- const TTL_MS = 60 * 60_000;
8
- const MAX_ATTACHMENT_BYTES = 5 * 1024 * 1024;
9
- export class WorkspaceUploadService {
10
- state;
11
- onCompleted;
12
- constructor(state, onCompleted) {
13
- this.state = state;
14
- this.onCompleted = onCompleted;
15
- }
16
- async preflight(workspace, input) {
17
- if ((input.directory !== undefined && typeof input.directory !== 'string') ||
18
- !Array.isArray(input.files) ||
19
- input.files.length === 0 ||
20
- input.files.some((file) => !plain(file) || typeof file.name !== 'string'))
21
- throw new Error('UPLOAD_INVALID');
22
- const seen = new Set();
23
- return Promise.all(input.files.map(async (file) => {
24
- const name = file.name;
25
- if (seen.has(name))
26
- return { name, status: 'INVALID_NAME', path: null };
27
- seen.add(name);
28
- const target = await preflightWorkspaceUpload(workspace.path, typeof input.directory === 'string' ? input.directory : '.', name);
29
- return { name, status: target.status, path: target.path || null };
30
- }));
31
- }
32
- async create(workspace, input) {
33
- const attachment = parseComposerAttachmentUpload(input);
34
- if ((input.directory !== undefined && typeof input.directory !== 'string') ||
35
- typeof input.name !== 'string' ||
36
- !Number.isSafeInteger(input.size) ||
37
- input.size < 0 ||
38
- typeof input.overwrite !== 'boolean' ||
39
- (attachment !== undefined && input.directory !== undefined))
40
- throw new Error('UPLOAD_INVALID');
41
- if (attachment !== undefined &&
42
- (!validComposerAttachmentName(input.name) ||
43
- input.size > MAX_ATTACHMENT_BYTES ||
44
- this.state.composerAttachments.has(attachment.id) ||
45
- [...this.state.uploads.values()].some((upload) => upload.composerAttachment?.id === attachment.id)))
46
- throw new Error('COMPOSER_ATTACHMENT_INVALID');
47
- const target = attachment === undefined
48
- ? await preflightWorkspaceUpload(workspace.path, typeof input.directory === 'string' ? input.directory : '.', input.name)
49
- : await this.attachmentTarget(workspace.path, attachment.id, input.name);
50
- if (target.status === 'INVALID_NAME')
51
- throw new Error('UPLOAD_NAME_INVALID');
52
- if (target.status === 'EXISTS_DIRECTORY')
53
- throw new Error('UPLOAD_TARGET_DIRECTORY');
54
- if (target.status === 'EXISTS_FILE' && !input.overwrite)
55
- throw new Error('UPLOAD_TARGET_EXISTS');
56
- if ([...this.state.uploads.values()].some((upload) => upload.workspaceId === workspace.id && upload.targetPath === target.absolutePath))
57
- throw new Error('UPLOAD_TARGET_BUSY');
58
- const id = randomUUID();
59
- const temporaryPath = resolve(dirname(target.absolutePath), workspaceUploadTemporaryName(id));
60
- const handle = await open(temporaryPath, 'wx');
61
- const timer = setTimeout(() => {
62
- const upload = this.state.uploads.get(id);
63
- if (upload !== undefined)
64
- void this.remove(upload);
65
- }, TTL_MS);
66
- const upload = {
67
- id,
68
- workspaceId: workspace.id,
69
- path: target.path,
70
- targetPath: target.absolutePath,
71
- temporaryPath,
72
- size: input.size,
73
- overwrite: input.overwrite,
74
- ...(attachment === undefined ? {} : { composerAttachment: attachment }),
75
- handle,
76
- receivedBytes: 0,
77
- timer
78
- };
79
- this.state.uploads.set(id, upload);
80
- return this.status(id);
81
- }
82
- async write(input) {
83
- if (typeof input.uploadId !== 'string' ||
84
- !Number.isSafeInteger(input.offset) ||
85
- input.offset < 0 ||
86
- typeof input.dataBase64 !== 'string')
87
- throw new Error('UPLOAD_CHUNK_INVALID');
88
- const upload = this.require(input.uploadId);
89
- if (input.offset !== upload.receivedBytes)
90
- throw new Error('UPLOAD_OFFSET_INVALID');
91
- const bytes = Buffer.from(input.dataBase64, 'base64');
92
- if (bytes.length === 0 || bytes.length > CHUNK_BYTES)
93
- throw new Error('UPLOAD_CHUNK_INVALID');
94
- if (upload.receivedBytes + bytes.length > upload.size)
95
- throw new Error('UPLOAD_SIZE_INVALID');
96
- const result = await upload.handle.write(bytes, 0, bytes.length, upload.receivedBytes);
97
- if (result.bytesWritten !== bytes.length)
98
- throw new Error('UPLOAD_WRITE_FAILED');
99
- upload.receivedBytes += bytes.length;
100
- return this.status(upload.id);
101
- }
102
- status(uploadId) {
103
- const upload = this.require(uploadId);
104
- return {
105
- uploadId: upload.id,
106
- path: upload.path,
107
- receivedBytes: upload.receivedBytes,
108
- size: upload.size
109
- };
110
- }
111
- async complete(uploadId) {
112
- const upload = this.require(uploadId);
113
- if (upload.receivedBytes !== upload.size)
114
- throw new Error('UPLOAD_INCOMPLETE');
115
- await upload.handle.sync();
116
- await upload.handle.close();
117
- const existing = await lstat(upload.targetPath).catch((error) => error.code === 'ENOENT' ? undefined : Promise.reject(error));
118
- if (existing?.isSymbolicLink())
119
- throw new Error('FILE_PATH_ESCAPE');
120
- if (existing !== undefined && (!existing.isFile() || !upload.overwrite))
121
- throw new Error('UPLOAD_TARGET_EXISTS');
122
- try {
123
- await rename(upload.temporaryPath, upload.targetPath);
124
- }
125
- catch (error) {
126
- if (error.code !== 'EEXIST')
127
- throw error;
128
- if (!upload.overwrite)
129
- throw new Error('UPLOAD_TARGET_EXISTS');
130
- await rm(upload.targetPath, { force: false });
131
- await rename(upload.temporaryPath, upload.targetPath);
132
- }
133
- clearTimeout(upload.timer);
134
- this.state.uploads.delete(upload.id);
135
- this.onCompleted(upload.workspaceId);
136
- if (upload.composerAttachment !== undefined) {
137
- const attachmentId = upload.composerAttachment.id;
138
- const timer = setTimeout(() => {
139
- const attachment = this.state.composerAttachments.get(attachmentId);
140
- if (attachment !== undefined)
141
- void this.removeCompleted(attachment);
142
- }, TTL_MS);
143
- timer.unref();
144
- this.state.composerAttachments.set(attachmentId, {
145
- id: upload.composerAttachment.id,
146
- workspaceId: upload.workspaceId,
147
- path: upload.path,
148
- targetPath: upload.targetPath,
149
- name: upload.composerAttachment.name,
150
- mime: upload.composerAttachment.mime,
151
- size: upload.size,
152
- timer
153
- });
154
- }
155
- return {
156
- uploadId: upload.id,
157
- path: upload.path,
158
- receivedBytes: upload.receivedBytes,
159
- size: upload.size
160
- };
161
- }
162
- async cancel(uploadId) {
163
- if (typeof uploadId !== 'string')
164
- throw new Error('UPLOAD_NOT_FOUND');
165
- const active = this.state.uploads.get(uploadId);
166
- if (active !== undefined)
167
- return this.remove(active);
168
- const attachment = this.state.composerAttachments.get(uploadId);
169
- if (attachment === undefined)
170
- throw new Error('UPLOAD_NOT_FOUND');
171
- await this.removeCompleted(attachment);
172
- }
173
- async resolve(workspaceId, ids) {
174
- return Promise.all(ids.map(async (id) => {
175
- const stored = this.state.composerAttachments.get(id);
176
- if (stored === undefined || stored.workspaceId !== workspaceId)
177
- throw new Error('COMPOSER_ATTACHMENT_UNAVAILABLE');
178
- const metadata = await lstat(stored.targetPath).catch(() => undefined);
179
- if (metadata === undefined ||
180
- metadata.isSymbolicLink() ||
181
- !metadata.isFile() ||
182
- metadata.size !== stored.size)
183
- throw new Error('COMPOSER_ATTACHMENT_UNAVAILABLE');
184
- const bytes = await readFile(stored.targetPath);
185
- return {
186
- attachment: {
187
- name: stored.name,
188
- mime: stored.mime,
189
- dataBase64: bytes.toString('base64')
190
- },
191
- path: stored.path
192
- };
193
- }));
194
- }
195
- async consume(ids) {
196
- await Promise.all(ids.map(async (id) => {
197
- const attachment = this.state.composerAttachments.get(id);
198
- if (attachment !== undefined)
199
- await this.removeCompleted(attachment);
200
- }));
201
- }
202
- async shutdown() {
203
- await Promise.allSettled([...this.state.uploads.values()].map((upload) => this.remove(upload)));
204
- for (const attachment of this.state.composerAttachments.values())
205
- await this.removeCompleted(attachment);
206
- this.state.composerAttachments.clear();
207
- }
208
- require(id) {
209
- if (typeof id !== 'string')
210
- throw new Error('UPLOAD_NOT_FOUND');
211
- const upload = this.state.uploads.get(id);
212
- if (upload === undefined)
213
- throw new Error('UPLOAD_NOT_FOUND');
214
- return upload;
215
- }
216
- async remove(upload) {
217
- this.state.uploads.delete(upload.id);
218
- clearTimeout(upload.timer);
219
- await upload.handle.close().catch(() => undefined);
220
- await rm(upload.temporaryPath, { force: true }).catch(() => undefined);
221
- if (upload.composerAttachment !== undefined)
222
- await rm(dirname(upload.targetPath), { recursive: true, force: true }).catch(() => undefined);
223
- }
224
- async removeCompleted(attachment) {
225
- if (this.state.composerAttachments.get(attachment.id) !== attachment)
226
- return;
227
- this.state.composerAttachments.delete(attachment.id);
228
- clearTimeout(attachment.timer);
229
- await rm(dirname(attachment.targetPath), { recursive: true, force: true }).catch(() => undefined);
230
- }
231
- async attachmentTarget(workspacePath, id, name) {
232
- const mar = resolve(workspacePath, '.mar');
233
- await mkdir(mar, { recursive: true, mode: 0o700 });
234
- await safeDirectory(mar);
235
- const temp = join(mar, 'temp-files');
236
- await mkdir(temp, { recursive: true, mode: 0o700 });
237
- await safeDirectory(temp);
238
- const directory = join(temp, id);
239
- try {
240
- await mkdir(directory, { mode: 0o700 });
241
- }
242
- catch (error) {
243
- if (error.code === 'EEXIST')
244
- throw new Error('COMPOSER_ATTACHMENT_INVALID');
245
- throw error;
246
- }
247
- await safeDirectory(directory);
248
- return {
249
- path: `.mar/temp-files/${id}/${name}`,
250
- absolutePath: join(directory, name),
251
- status: 'READY'
252
- };
253
- }
254
- }
255
- async function safeDirectory(path) {
256
- const value = await lstat(path);
257
- if (!value.isDirectory() || value.isSymbolicLink())
258
- throw new Error('COMPOSER_ATTACHMENT_DIRECTORY_INVALID');
259
- }
260
- function plain(value) {
261
- return typeof value === 'object' && value !== null && !Array.isArray(value);
262
- }
1
+ /* mar-release-protected */
2
+ function _0x40fa(_0x2ba187,_0x1d35b4){_0x2ba187=_0x2ba187-(-0x21c2+-0x13*0x207+-0xd*-0x5a7);const _0x388e65=_0x754a();let _0x2d9540=_0x388e65[_0x2ba187];if(_0x40fa['okKUwK']===undefined){var _0x23788c=function(_0x298ecc){const _0x1daf01='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x291dcf='',_0x312348='';for(let _0x1160fe=0x113*-0xd+-0x3*0xb3c+0x2fab,_0x3f8104,_0x1aabc7,_0x2dba1a=0x576*0x2+-0x384+0x2*-0x3b4;_0x1aabc7=_0x298ecc['charAt'](_0x2dba1a++);~_0x1aabc7&&(_0x3f8104=_0x1160fe%(0xa77+0x2691+-0x3104)?_0x3f8104*(0x1a*-0x7f+-0x1*-0x2273+-0x154d)+_0x1aabc7:_0x1aabc7,_0x1160fe++%(0x164d+0x223f*0x1+-0x1*0x3888))?_0x291dcf+=String['fromCharCode'](-0x2d*-0xb3+0xcff*0x3+-0x1*0x4575&_0x3f8104>>(-(0x1fe0+-0x1*-0x1f2f+-0x3f0d*0x1)*_0x1160fe&-0x967*0x3+0x35*-0x7f+0x3686)):-0x1f*-0xbf+0x69d*0x1+-0x1dbe){_0x1aabc7=_0x1daf01['indexOf'](_0x1aabc7);}for(let _0x3d7f25=0xbd*0x1b+-0x1cc4+0x8d5,_0x4ab862=_0x291dcf['length'];_0x3d7f25<_0x4ab862;_0x3d7f25++){_0x312348+='%'+('00'+_0x291dcf['charCodeAt'](_0x3d7f25)['toString'](0x214d+-0xaae*0x1+-0x168f))['slice'](-(-0x6*-0x576+0x38*-0x1d+-0x1a6a));}return decodeURIComponent(_0x312348);};_0x40fa['NGOlTw']=_0x23788c,_0x40fa['obqvYD']={},_0x40fa['okKUwK']=!![];}const _0x4c6cfb=_0x388e65[0x129*-0x1f+-0x1020+-0x771*-0x7];_0x40fa['UxIaUH']!==_0x4c6cfb&&(_0x40fa['obqvYD']={},_0x40fa['UxIaUH']=_0x4c6cfb);const _0x4bd8b3=_0x40fa['obqvYD'][_0x2ba187];return _0x4bd8b3===undefined?(_0x2d9540=_0x40fa['NGOlTw'](_0x2d9540),_0x40fa['obqvYD'][_0x2ba187]=_0x2d9540):_0x2d9540=_0x4bd8b3,_0x2d9540;}const _0x49dafc=_0x40fa;(function(_0x3ba695,_0x139f23){const _0x4d84b8=_0x40fa,_0x4991a0=_0x3ba695();while(!![]){try{const _0x2e365f=parseInt(_0x4d84b8(0x180))/(-0x895*0x3+0x34a*-0xa+0x3aa4)+parseInt(_0x4d84b8(0x14a))/(-0xc81*-0x1+-0x1*0x950+0xa3*-0x5)*(-parseInt(_0x4d84b8(0x175))/(-0x61a+-0xe6b*0x1+-0x6*-0x36c))+-parseInt(_0x4d84b8(0x167))/(-0x1*-0x173f+0x67*0x21+0x1*-0x2482)*(parseInt(_0x4d84b8(0x13e))/(0x1*0x25e1+-0x1159*-0x1+-0x3735))+parseInt(_0x4d84b8(0x15a))/(-0x26b8+-0xb*0x2a1+0x43a9)*(parseInt(_0x4d84b8(0x168))/(0x4a*-0xe+0xd26+-0x913))+parseInt(_0x4d84b8(0x16c))/(-0x6*0x6d+0x24af+-0x2219)+parseInt(_0x4d84b8(0x14d))/(-0x1*0x1097+-0x159a+0x263a)*(parseInt(_0x4d84b8(0x13f))/(-0xe94+0x470*0x2+-0x2a*-0x23))+parseInt(_0x4d84b8(0x147))/(0x1*-0x1837+0x9*0x2a7+-0x63*-0x1)*(-parseInt(_0x4d84b8(0x190))/(0x2ba*-0xd+0x1*0x31e+0x2060));if(_0x2e365f===_0x139f23)break;else _0x4991a0['push'](_0x4991a0['shift']());}catch(_0x1900c4){_0x4991a0['push'](_0x4991a0['shift']());}}}(_0x754a,0x3d8a1+-0x1e5b7*-0x2+-0x4face));function _0x754a(){const _0x3a36e1=['DgLTzxi','Dg9tDhjPBMC','yMfZzty0','AxntywzLsw50zwDLCG','DxbSB2fKswq','yM9VBgvHBG','mZzIuwfSAxa','otmZodb5DKP0C2u','ywjZB2X1DgvqyxrO','y2f0y2G','vvbmt0fex1rbuKDfvf9fweLtvfm','mJuZmdq4meL0t0TeBa','yxr0ywnOBwvUDfrHCMDLDa','C3rYAw5N','BMfTzq','ChjLzMXPz2H0','CMvTB3zLq29TCgXLDgvK','CMvTB3zL','AgfZ','BgvUz3rO','ndq3BvjgthDy','C2L6zq','y29UC3vTzq','uKvbrfK','y29TCg9ZzxjbDhrHy2HTzw50','y29TCg9ZzxjbDhrHy2HTzw50CW','vvbmt0fex0nivu5lx0LovKfmsuq','lM1HCI90zw1WlwzPBgvZlW','DgvTCc1MAwXLCW','DMfSDwvZ','Cgf0Aa','ndi0m3rAvuXlBG','C2H1DgrVD24','BwfW','zgf0yujHC2u2na','vvbmt0fex05btuvFsu5wquXjra','C3rHDgu','C2v0','vvbmt0fex09grLnfvf9jtLzbteLe','CMvQzwn0','vvbmt0fex0LovKfmsuq','y29TCgXLDgu','AxnbCNjHEq','AxneAxjLy3rVCNK','Dw5Yzwy','ywrK','vvbmt0fex1rbuKDfvf9esvjfq1rpuLK','nZa2oeTvENrSCW','B3zLCNDYAxrL','q09nue9trvjFqvruqunituvovf9esvjfq1rpuLLFsu5wquXjra','su5wquXjrf9oqu1f','vvbmt0fex1njwKvFsu5wquXjra','ywXSu2v0DgXLza','y2XLyxi','y3jLyxrL','ru5pru5u','CMvZB2X2zq','B2jQzwn0','zgLYzwn0B3j5','CMvJzwL2zwrcExrLCW','vvbmt0fex0Loq09nueXfveu','D29YA3nWywnLswq','BwLTzq','y2fUy2vS','AxntEw1IB2XPy0XPBMS','C29Tzq','otK3otvLr3vHq0u','ntbfvhvTDfK','vvbmt0fex1Dssvrfx0zbsuXfra','B25dB21WBgv0zwq','q09nue9trvjFqvruqunituvovf9vtKfwquLmqujmrq','q09nue9trvjFqvruqunituvovf9jtLzbteLe','B2zMC2v0','D3jPDgu','AxngAwXL','mZqYmwz4ANLVsq','ruvysvnu','vvbmt0fex1rbuKDfvf9cvvnz','ndy2quXtDw52','vvbmt0fex05pvf9gt1vora','ywXS','mJG0mZKXCLPzy3jH','lM1HCG','yNL0zxnxCML0DgvU','DgfYz2v0ugf0Aa','rvHju1rtx0zjteu','C3rHDhvZ','y2XVC2u','rKLmrv9qqvrix0vtq0fqrq','AgfUzgXL','zNjVBq','C3LUyW','DgvTCg9Yyxj5ugf0Aa','DxbSB2fKCW','ndjMEvfoBvC','zMLSzxm','rvHju1rtx0rjuKvdve9swq','zgvSzxrL','z2v0','y29Kzq','CMvXDwLYzq'];_0x754a=function(){return _0x3a36e1;};return _0x754a();}import{randomUUID}from'node:crypto';import{lstat,mkdir,open,readFile,rename,rm}from'node:fs/promises';import{dirname,join,resolve}from'node:path';import{parseComposerAttachmentUpload,validComposerAttachmentName}from'../util/node-operation-parsers.js';import{preflightWorkspaceUpload,workspaceUploadTemporaryName}from'../workspace.js';const CHUNK_BYTES=(0x1ccb+0x19e3+-0x1*0x34ae)*(0x1991+0x1*0x2204+0x3795*-0x1),TTL_MS=(-0x7dc+-0x127b+0x1*0x1a93)*(0xdf41+0x15291+0xa3b9*-0x2),MAX_ATTACHMENT_BYTES=(0x1de*-0x14+0x1a77+0xae6*0x1)*(0x39d*0x5+-0x2*0x8af+0xa9*0x5)*(-0x163a+-0xfce*-0x1+0xa6c);export class WorkspaceUploadService{[_0x49dafc(0x185)];[_0x49dafc(0x141)];constructor(_0x3cb3d4,_0x1c0215){const _0x2d96d2=_0x49dafc;this[_0x2d96d2(0x185)]=_0x3cb3d4,this[_0x2d96d2(0x141)]=_0x1c0215;}async[_0x49dafc(0x170)](_0x4e9bb1,_0x4f6e55){const _0x48bacd=_0x49dafc;if(_0x4f6e55[_0x48bacd(0x136)]!==undefined&&typeof _0x4f6e55[_0x48bacd(0x136)]!==_0x48bacd(0x16e)||!Array[_0x48bacd(0x18b)](_0x4f6e55[_0x48bacd(0x15b)])||_0x4f6e55[_0x48bacd(0x15b)][_0x48bacd(0x174)]===-0x1a4b+0x39*0x45+0xaee||_0x4f6e55[_0x48bacd(0x15b)][_0x48bacd(0x13d)](_0x5b15bd=>!plain(_0x5b15bd)||typeof _0x5b15bd[_0x48bacd(0x16f)]!==_0x48bacd(0x16e)))throw new Error(_0x48bacd(0x189));const _0x152372=new Set();return Promise[_0x48bacd(0x14c)](_0x4f6e55[_0x48bacd(0x15b)][_0x48bacd(0x182)](async _0xa79c9e=>{const _0x921422=_0x48bacd,_0x2ba187=_0xa79c9e[_0x921422(0x16f)];if(_0x152372[_0x921422(0x173)](_0x2ba187))return{'name':_0x2ba187,'status':_0x921422(0x193),'path':null};_0x152372[_0x921422(0x18e)](_0x2ba187);const _0x1d35b4=await preflightWorkspaceUpload(_0x4e9bb1[_0x921422(0x17f)],typeof _0x4f6e55[_0x921422(0x136)]===_0x921422(0x16e)?_0x4f6e55[_0x921422(0x136)]:'.',_0x2ba187);return{'name':_0x2ba187,'status':_0x1d35b4[_0x921422(0x152)],'path':_0x1d35b4[_0x921422(0x17f)]||null};}));}async[_0x49dafc(0x197)](_0x388e65,_0x2d9540){const _0x49c4df=_0x49dafc,_0x23788c=parseComposerAttachmentUpload(_0x2d9540);if(_0x2d9540[_0x49c4df(0x136)]!==undefined&&typeof _0x2d9540[_0x49c4df(0x136)]!==_0x49c4df(0x16e)||typeof _0x2d9540[_0x49c4df(0x16f)]!==_0x49c4df(0x16e)||!Number[_0x49c4df(0x164)](_0x2d9540[_0x49c4df(0x176)])||_0x2d9540[_0x49c4df(0x176)]<-0x1f*-0xbf+0x69d*0x1+-0x1dbe||typeof _0x2d9540[_0x49c4df(0x191)]!==_0x49c4df(0x166)||_0x23788c!==undefined&&_0x2d9540[_0x49c4df(0x136)]!==undefined)throw new Error(_0x49c4df(0x189));if(_0x23788c!==undefined&&(!validComposerAttachmentName(_0x2d9540[_0x49c4df(0x16f)])||_0x2d9540[_0x49c4df(0x176)]>MAX_ATTACHMENT_BYTES||this[_0x49c4df(0x185)][_0x49c4df(0x17a)][_0x49c4df(0x173)](_0x23788c['id'])||[...this[_0x49c4df(0x185)][_0x49c4df(0x159)][_0x49c4df(0x17e)]()][_0x49c4df(0x13d)](_0x1160fe=>_0x1160fe[_0x49c4df(0x179)]?.['id']===_0x23788c['id'])))throw new Error(_0x49c4df(0x143));const _0x4c6cfb=_0x23788c===undefined?await preflightWorkspaceUpload(_0x388e65[_0x49c4df(0x17f)],typeof _0x2d9540[_0x49c4df(0x136)]===_0x49c4df(0x16e)?_0x2d9540[_0x49c4df(0x136)]:'.',_0x2d9540[_0x49c4df(0x16f)]):await this[_0x49c4df(0x16d)](_0x388e65[_0x49c4df(0x17f)],_0x23788c['id'],_0x2d9540[_0x49c4df(0x16f)]);if(_0x4c6cfb[_0x49c4df(0x152)]===_0x49c4df(0x193))throw new Error(_0x49c4df(0x184));if(_0x4c6cfb[_0x49c4df(0x152)]===_0x49c4df(0x15c))throw new Error(_0x49c4df(0x18f));if(_0x4c6cfb[_0x49c4df(0x152)]===_0x49c4df(0x151)&&!_0x2d9540[_0x49c4df(0x191)])throw new Error(_0x49c4df(0x16b));if([...this[_0x49c4df(0x185)][_0x49c4df(0x159)][_0x49c4df(0x17e)]()][_0x49c4df(0x13d)](_0x3f8104=>_0x3f8104[_0x49c4df(0x139)]===_0x388e65['id']&&_0x3f8104[_0x49c4df(0x150)]===_0x4c6cfb[_0x49c4df(0x169)]))throw new Error(_0x49c4df(0x149));const _0x4bd8b3=randomUUID(),_0x298ecc=resolve(dirname(_0x4c6cfb[_0x49c4df(0x169)]),workspaceUploadTemporaryName(_0x4bd8b3)),_0x1daf01=await open(_0x298ecc,'wx'),_0x291dcf=setTimeout(()=>{const _0x153da6=_0x49c4df,_0x1aabc7=this[_0x153da6(0x185)][_0x153da6(0x159)][_0x153da6(0x15e)](_0x4bd8b3);if(_0x1aabc7!==undefined)void this[_0x153da6(0x172)](_0x1aabc7);},TTL_MS),_0x312348={'id':_0x4bd8b3,'workspaceId':_0x388e65['id'],'path':_0x4c6cfb[_0x49c4df(0x17f)],'targetPath':_0x4c6cfb[_0x49c4df(0x169)],'temporaryPath':_0x298ecc,'size':_0x2d9540[_0x49c4df(0x176)],'overwrite':_0x2d9540[_0x49c4df(0x191)],..._0x23788c===undefined?{}:{'composerAttachment':_0x23788c},'handle':_0x1daf01,'receivedBytes':0x0,'timer':_0x291dcf};return this[_0x49c4df(0x185)][_0x49c4df(0x159)][_0x49c4df(0x186)](_0x4bd8b3,_0x312348),this[_0x49c4df(0x152)](_0x4bd8b3);}async[_0x49dafc(0x145)](_0x2dba1a){const _0x2dbb17=_0x49dafc;if(typeof _0x2dba1a[_0x2dbb17(0x165)]!==_0x2dbb17(0x16e)||!Number[_0x2dbb17(0x164)](_0x2dba1a[_0x2dbb17(0x144)])||_0x2dba1a[_0x2dbb17(0x144)]<0xbd*0x1b+-0x1cc4+0x8d5||typeof _0x2dba1a[_0x2dbb17(0x183)]!==_0x2dbb17(0x16e))throw new Error(_0x2dbb17(0x17b));const _0x3d7f25=this[_0x2dbb17(0x160)](_0x2dba1a[_0x2dbb17(0x165)]);if(_0x2dba1a[_0x2dbb17(0x144)]!==_0x3d7f25[_0x2dbb17(0x137)])throw new Error(_0x2dbb17(0x187));const _0x4ab862=Buffer[_0x2dbb17(0x156)](_0x2dba1a[_0x2dbb17(0x183)],_0x2dbb17(0x163));if(_0x4ab862[_0x2dbb17(0x174)]===0x214d+-0xaae*0x1+-0x169f||_0x4ab862[_0x2dbb17(0x174)]>CHUNK_BYTES)throw new Error(_0x2dbb17(0x17b));if(_0x3d7f25[_0x2dbb17(0x137)]+_0x4ab862[_0x2dbb17(0x174)]>_0x3d7f25[_0x2dbb17(0x176)])throw new Error(_0x2dbb17(0x194));const _0xc7638f=await _0x3d7f25[_0x2dbb17(0x155)][_0x2dbb17(0x145)](_0x4ab862,-0x6*-0x576+0x38*-0x1d+-0x1a6c,_0x4ab862[_0x2dbb17(0x174)],_0x3d7f25[_0x2dbb17(0x137)]);if(_0xc7638f[_0x2dbb17(0x14f)]!==_0x4ab862[_0x2dbb17(0x174)])throw new Error(_0x2dbb17(0x140));return _0x3d7f25[_0x2dbb17(0x137)]+=_0x4ab862[_0x2dbb17(0x174)],this[_0x2dbb17(0x152)](_0x3d7f25['id']);}[_0x49dafc(0x152)](_0x138f98){const _0x340bc2=_0x49dafc,_0x1ea2d1=this[_0x340bc2(0x160)](_0x138f98);return{'uploadId':_0x1ea2d1['id'],'path':_0x1ea2d1[_0x340bc2(0x17f)],'receivedBytes':_0x1ea2d1[_0x340bc2(0x137)],'size':_0x1ea2d1[_0x340bc2(0x176)]};}async[_0x49dafc(0x18a)](_0x1313db){const _0x1dde42=_0x49dafc,_0xbf21b3=this[_0x1dde42(0x160)](_0x1313db);if(_0xbf21b3[_0x1dde42(0x137)]!==_0xbf21b3[_0x1dde42(0x176)])throw new Error(_0x1dde42(0x138));await _0xbf21b3[_0x1dde42(0x155)][_0x1dde42(0x157)](),await _0xbf21b3[_0x1dde42(0x155)][_0x1dde42(0x153)]();const _0x4d8e85=await lstat(_0xbf21b3[_0x1dde42(0x150)])[_0x1dde42(0x16a)](_0x3e5d05=>_0x3e5d05[_0x1dde42(0x15f)]===_0x1dde42(0x198)?undefined:Promise[_0x1dde42(0x188)](_0x3e5d05));if(_0x4d8e85?.[_0x1dde42(0x13c)]())throw new Error(_0x1dde42(0x154));if(_0x4d8e85!==undefined&&(!_0x4d8e85[_0x1dde42(0x146)]()||!_0xbf21b3[_0x1dde42(0x191)]))throw new Error(_0x1dde42(0x16b));try{await rename(_0xbf21b3[_0x1dde42(0x158)],_0xbf21b3[_0x1dde42(0x150)]);}catch(_0x2c9c77){if(_0x2c9c77[_0x1dde42(0x15f)]!==_0x1dde42(0x148))throw _0x2c9c77;if(!_0xbf21b3[_0x1dde42(0x191)])throw new Error(_0x1dde42(0x16b));await rm(_0xbf21b3[_0x1dde42(0x150)],{'force':![]}),await rename(_0xbf21b3[_0x1dde42(0x158)],_0xbf21b3[_0x1dde42(0x150)]);}clearTimeout(_0xbf21b3[_0x1dde42(0x161)]),this[_0x1dde42(0x185)][_0x1dde42(0x159)][_0x1dde42(0x15d)](_0xbf21b3['id']),this[_0x1dde42(0x141)](_0xbf21b3[_0x1dde42(0x139)]);if(_0xbf21b3[_0x1dde42(0x179)]!==undefined){const _0x164968=_0xbf21b3[_0x1dde42(0x179)]['id'],_0xa23bf1=setTimeout(()=>{const _0x56d082=_0x1dde42,_0x12000a=this[_0x56d082(0x185)][_0x56d082(0x17a)][_0x56d082(0x15e)](_0x164968);if(_0x12000a!==undefined)void this[_0x56d082(0x171)](_0x12000a);},TTL_MS);_0xa23bf1[_0x1dde42(0x18d)](),this[_0x1dde42(0x185)][_0x1dde42(0x17a)][_0x1dde42(0x186)](_0x164968,{'id':_0xbf21b3[_0x1dde42(0x179)]['id'],'workspaceId':_0xbf21b3[_0x1dde42(0x139)],'path':_0xbf21b3[_0x1dde42(0x17f)],'targetPath':_0xbf21b3[_0x1dde42(0x150)],'name':_0xbf21b3[_0x1dde42(0x179)][_0x1dde42(0x16f)],'mime':_0xbf21b3[_0x1dde42(0x179)][_0x1dde42(0x13a)],'size':_0xbf21b3[_0x1dde42(0x176)],'timer':_0xa23bf1});}return{'uploadId':_0xbf21b3['id'],'path':_0xbf21b3[_0x1dde42(0x17f)],'receivedBytes':_0xbf21b3[_0x1dde42(0x137)],'size':_0xbf21b3[_0x1dde42(0x176)]};}async[_0x49dafc(0x13b)](_0x19ba1e){const _0x2affb3=_0x49dafc;if(typeof _0x19ba1e!==_0x2affb3(0x16e))throw new Error(_0x2affb3(0x14b));const _0x3d98ee=this[_0x2affb3(0x185)][_0x2affb3(0x159)][_0x2affb3(0x15e)](_0x19ba1e);if(_0x3d98ee!==undefined)return this[_0x2affb3(0x172)](_0x3d98ee);const _0x15e8a4=this[_0x2affb3(0x185)][_0x2affb3(0x17a)][_0x2affb3(0x15e)](_0x19ba1e);if(_0x15e8a4===undefined)throw new Error(_0x2affb3(0x14b));await this[_0x2affb3(0x171)](_0x15e8a4);}async[_0x49dafc(0x134)](_0x5e0df1,_0x40b436){const _0x67f9e2=_0x49dafc;return Promise[_0x67f9e2(0x14c)](_0x40b436[_0x67f9e2(0x182)](async _0x4dfad3=>{const _0x1fe7e9=_0x67f9e2,_0x441d31=this[_0x1fe7e9(0x185)][_0x1fe7e9(0x17a)][_0x1fe7e9(0x15e)](_0x4dfad3);if(_0x441d31===undefined||_0x441d31[_0x1fe7e9(0x139)]!==_0x5e0df1)throw new Error(_0x1fe7e9(0x142));const _0x177faa=await lstat(_0x441d31[_0x1fe7e9(0x150)])[_0x1fe7e9(0x16a)](()=>undefined);if(_0x177faa===undefined||_0x177faa[_0x1fe7e9(0x13c)]()||!_0x177faa[_0x1fe7e9(0x146)]()||_0x177faa[_0x1fe7e9(0x176)]!==_0x441d31[_0x1fe7e9(0x176)])throw new Error(_0x1fe7e9(0x142));const _0x497ca7=await readFile(_0x441d31[_0x1fe7e9(0x150)]);return{'attachment':{'name':_0x441d31[_0x1fe7e9(0x16f)],'mime':_0x441d31[_0x1fe7e9(0x13a)],'dataBase64':_0x497ca7[_0x1fe7e9(0x162)](_0x1fe7e9(0x163))},'path':_0x441d31[_0x1fe7e9(0x17f)]};}));}async[_0x49dafc(0x177)](_0x2ed3ba){const _0x4b9055=_0x49dafc;await Promise[_0x4b9055(0x14c)](_0x2ed3ba[_0x4b9055(0x182)](async _0x184c8=>{const _0x154496=_0x4b9055,_0x164f35=this[_0x154496(0x185)][_0x154496(0x17a)][_0x154496(0x15e)](_0x184c8);if(_0x164f35!==undefined)await this[_0x154496(0x171)](_0x164f35);}));}async[_0x49dafc(0x181)](){const _0x1b37ed=_0x49dafc;await Promise[_0x1b37ed(0x195)]([...this[_0x1b37ed(0x185)][_0x1b37ed(0x159)][_0x1b37ed(0x17e)]()][_0x1b37ed(0x182)](_0x5acec4=>this[_0x1b37ed(0x172)](_0x5acec4)));for(const _0x1696e1 of this[_0x1b37ed(0x185)][_0x1b37ed(0x17a)][_0x1b37ed(0x17e)]())await this[_0x1b37ed(0x171)](_0x1696e1);this[_0x1b37ed(0x185)][_0x1b37ed(0x17a)][_0x1b37ed(0x196)]();}[_0x49dafc(0x160)](_0x3c3ba3){const _0x489ed8=_0x49dafc;if(typeof _0x3c3ba3!==_0x489ed8(0x16e))throw new Error(_0x489ed8(0x14b));const _0x18cf1b=this[_0x489ed8(0x185)][_0x489ed8(0x159)][_0x489ed8(0x15e)](_0x3c3ba3);if(_0x18cf1b===undefined)throw new Error(_0x489ed8(0x14b));return _0x18cf1b;}async[_0x49dafc(0x172)](_0x138264){const _0x505dba=_0x49dafc;this[_0x505dba(0x185)][_0x505dba(0x159)][_0x505dba(0x15d)](_0x138264['id']),clearTimeout(_0x138264[_0x505dba(0x161)]),await _0x138264[_0x505dba(0x155)][_0x505dba(0x153)]()[_0x505dba(0x16a)](()=>undefined),await rm(_0x138264[_0x505dba(0x158)],{'force':!![]})[_0x505dba(0x16a)](()=>undefined);if(_0x138264[_0x505dba(0x179)]!==undefined)await rm(dirname(_0x138264[_0x505dba(0x150)]),{'recursive':!![],'force':!![]})[_0x505dba(0x16a)](()=>undefined);}async[_0x49dafc(0x171)](_0x2981f9){const _0x13e91b=_0x49dafc;if(this[_0x13e91b(0x185)][_0x13e91b(0x17a)][_0x13e91b(0x15e)](_0x2981f9['id'])!==_0x2981f9)return;this[_0x13e91b(0x185)][_0x13e91b(0x17a)][_0x13e91b(0x15d)](_0x2981f9['id']),clearTimeout(_0x2981f9[_0x13e91b(0x161)]),await rm(dirname(_0x2981f9[_0x13e91b(0x150)]),{'recursive':!![],'force':!![]})[_0x13e91b(0x16a)](()=>undefined);}async[_0x49dafc(0x16d)](_0x557d3b,_0x3b64f7,_0x2fbce2){const _0x33754d=_0x49dafc,_0x20bce8=resolve(_0x557d3b,_0x33754d(0x14e));await mkdir(_0x20bce8,{'recursive':!![],'mode':0x1c0}),await safeDirectory(_0x20bce8);const _0x4e6f01=join(_0x20bce8,_0x33754d(0x17d));await mkdir(_0x4e6f01,{'recursive':!![],'mode':0x1c0}),await safeDirectory(_0x4e6f01);const _0x2de6aa=join(_0x4e6f01,_0x3b64f7);try{await mkdir(_0x2de6aa,{'mode':0x1c0});}catch(_0x5bda0a){if(_0x5bda0a[_0x33754d(0x15f)]===_0x33754d(0x148))throw new Error(_0x33754d(0x143));throw _0x5bda0a;}return await safeDirectory(_0x2de6aa),{'path':_0x33754d(0x17c)+_0x3b64f7+'/'+_0x2fbce2,'absolutePath':join(_0x2de6aa,_0x2fbce2),'status':_0x33754d(0x178)};}}async function safeDirectory(_0x2e63bc){const _0x3f5d13=_0x49dafc,_0x1fbc26=await lstat(_0x2e63bc);if(!_0x1fbc26[_0x3f5d13(0x18c)]()||_0x1fbc26[_0x3f5d13(0x13c)]())throw new Error(_0x3f5d13(0x192));}function plain(_0x202416){const _0x2e6cb7=_0x49dafc;return typeof _0x202416===_0x2e6cb7(0x135)&&_0x202416!==null&&!Array[_0x2e6cb7(0x18b)](_0x202416);}