agl 1.0.17 → 21.0.2

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 (277) hide show
  1. package/.smartconfig.json +55 -0
  2. package/changelog.md +1026 -0
  3. package/cli.js +14 -0
  4. package/dist_serve/bundle.js +44778 -0
  5. package/dist_serve/index.html +13 -0
  6. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  7. package/dist_ts/00_commitinfo_data.js +9 -0
  8. package/dist_ts/classes.authmodels.d.ts +126 -0
  9. package/dist_ts/classes.authmodels.js +1422 -0
  10. package/dist_ts/classes.authstore.d.ts +160 -0
  11. package/dist_ts/classes.authstore.js +2483 -0
  12. package/dist_ts/classes.browserresourcehost.d.ts +85 -0
  13. package/dist_ts/classes.browserresourcehost.js +912 -0
  14. package/dist_ts/classes.cli.d.ts +21 -0
  15. package/dist_ts/classes.cli.js +1082 -0
  16. package/dist_ts/classes.config.d.ts +23 -0
  17. package/dist_ts/classes.config.js +267 -0
  18. package/dist_ts/classes.controller.d.ts +523 -0
  19. package/dist_ts/classes.controller.js +10611 -0
  20. package/dist_ts/classes.controllermanagement.d.ts +32 -0
  21. package/dist_ts/classes.controllermanagement.js +222 -0
  22. package/dist_ts/classes.draftmanager.d.ts +30 -0
  23. package/dist_ts/classes.draftmanager.js +179 -0
  24. package/dist_ts/classes.embeddeddb.d.ts +30 -0
  25. package/dist_ts/classes.embeddeddb.js +159 -0
  26. package/dist_ts/classes.flexframedtransport.d.ts +56 -0
  27. package/dist_ts/classes.flexframedtransport.js +275 -0
  28. package/dist_ts/classes.flexmodels.private.d.ts +231 -0
  29. package/dist_ts/classes.flexmodels.private.js +985 -0
  30. package/dist_ts/classes.flexmodels.public.d.ts +207 -0
  31. package/dist_ts/classes.flexmodels.public.js +885 -0
  32. package/dist_ts/classes.flexprojectionreader.d.ts +89 -0
  33. package/dist_ts/classes.flexprojectionreader.js +580 -0
  34. package/dist_ts/classes.flexservice.d.ts +196 -0
  35. package/dist_ts/classes.flexservice.js +3704 -0
  36. package/dist_ts/classes.flexstore.d.ts +174 -0
  37. package/dist_ts/classes.flexstore.js +3400 -0
  38. package/dist_ts/classes.flexsupervisor.d.ts +105 -0
  39. package/dist_ts/classes.flexsupervisor.js +1191 -0
  40. package/dist_ts/classes.gitreversion.d.ts +431 -0
  41. package/dist_ts/classes.gitreversion.js +10592 -0
  42. package/dist_ts/classes.harnessoperationmanager.d.ts +113 -0
  43. package/dist_ts/classes.harnessoperationmanager.js +602 -0
  44. package/dist_ts/classes.opencodeclient.d.ts +146 -0
  45. package/dist_ts/classes.opencodeclient.js +3003 -0
  46. package/dist_ts/classes.opencodesupervisor.d.ts +60 -0
  47. package/dist_ts/classes.opencodesupervisor.js +1003 -0
  48. package/dist_ts/classes.passkeymanager.d.ts +34 -0
  49. package/dist_ts/classes.passkeymanager.js +456 -0
  50. package/dist_ts/classes.processinspection.d.ts +50 -0
  51. package/dist_ts/classes.processinspection.js +484 -0
  52. package/dist_ts/classes.resourcecoordinator.d.ts +64 -0
  53. package/dist_ts/classes.resourcecoordinator.js +294 -0
  54. package/dist_ts/classes.sessionintelligencereader.d.ts +13 -0
  55. package/dist_ts/classes.sessionintelligencereader.js +40 -0
  56. package/dist_ts/classes.systemmetricssampler.d.ts +53 -0
  57. package/dist_ts/classes.systemmetricssampler.js +168 -0
  58. package/dist_ts/classes.terminalmanager.d.ts +95 -0
  59. package/dist_ts/classes.terminalmanager.js +981 -0
  60. package/dist_ts/classes.terminalresourcehost.d.ts +20 -0
  61. package/dist_ts/classes.terminalresourcehost.js +84 -0
  62. package/dist_ts/classes.upgradecoordinator.d.ts +244 -0
  63. package/dist_ts/classes.upgradecoordinator.js +2155 -0
  64. package/dist_ts/classes.upgradetransaction.d.ts +92 -0
  65. package/dist_ts/classes.upgradetransaction.js +2125 -0
  66. package/dist_ts/classes.uploadmanager.d.ts +24 -0
  67. package/dist_ts/classes.uploadmanager.js +210 -0
  68. package/dist_ts/classes.validation.d.ts +91 -0
  69. package/dist_ts/classes.validation.js +1087 -0
  70. package/dist_ts/flexharness.child.d.ts +1 -0
  71. package/dist_ts/flexharness.child.js +28 -0
  72. package/dist_ts/functions.canonicaldirectory.d.ts +21 -0
  73. package/dist_ts/functions.canonicaldirectory.js +144 -0
  74. package/dist_ts/functions.controllerdataroot.d.ts +15 -0
  75. package/dist_ts/functions.controllerdataroot.js +76 -0
  76. package/dist_ts/functions.embeddeddb.d.ts +2 -0
  77. package/dist_ts/functions.embeddeddb.js +21 -0
  78. package/dist_ts/functions.flexcredentialstore.d.ts +16 -0
  79. package/dist_ts/functions.flexcredentialstore.js +93 -0
  80. package/dist_ts/functions.opencodeauth.d.ts +3 -0
  81. package/dist_ts/functions.opencodeauth.js +31 -0
  82. package/dist_ts/functions.runtimeenvironment.d.ts +2 -0
  83. package/dist_ts/functions.runtimeenvironment.js +79 -0
  84. package/dist_ts/functions.upgradefollower.d.ts +3 -0
  85. package/dist_ts/functions.upgradefollower.js +95 -0
  86. package/dist_ts/index.d.ts +24 -0
  87. package/dist_ts/index.js +25 -0
  88. package/dist_ts/interfaces.auth.d.ts +181 -0
  89. package/dist_ts/interfaces.auth.js +82 -0
  90. package/dist_ts/interfaces.config.d.ts +34 -0
  91. package/dist_ts/interfaces.config.js +2 -0
  92. package/dist_ts/interfaces.flexipc.d.ts +939 -0
  93. package/dist_ts/interfaces.flexipc.js +1492 -0
  94. package/dist_ts/interfaces.gitreversion.d.ts +246 -0
  95. package/dist_ts/interfaces.gitreversion.js +2 -0
  96. package/dist_ts/interfaces.lifecycle.d.ts +37 -0
  97. package/dist_ts/interfaces.lifecycle.js +2 -0
  98. package/dist_ts/interfaces.opencode.d.ts +101 -0
  99. package/dist_ts/interfaces.opencode.js +3 -0
  100. package/dist_ts/interfaces.projects.d.ts +156 -0
  101. package/dist_ts/interfaces.projects.js +5 -0
  102. package/dist_ts/plugins.d.ts +36 -0
  103. package/dist_ts/plugins.js +40 -0
  104. package/dist_ts_interfaces/index.d.ts +2 -0
  105. package/dist_ts_interfaces/index.js +3 -0
  106. package/dist_ts_interfaces/interfaces.d.ts +747 -0
  107. package/dist_ts_interfaces/interfaces.js +47 -0
  108. package/dist_ts_interfaces/plugins.d.ts +4 -0
  109. package/dist_ts_interfaces/plugins.js +3 -0
  110. package/dist_ts_interfaces/requests.d.ts +806 -0
  111. package/dist_ts_interfaces/requests.js +2 -0
  112. package/dist_ts_migration/classes.documentmigrationrunner.d.ts +8 -0
  113. package/dist_ts_migration/classes.documentmigrationrunner.js +24 -0
  114. package/dist_ts_migration/classes.flexmigrationrunner.d.ts +11 -0
  115. package/dist_ts_migration/classes.flexmigrationrunner.js +25 -0
  116. package/dist_ts_migration/classes.flexpostharnessmigrationrunner.d.ts +10 -0
  117. package/dist_ts_migration/classes.flexpostharnessmigrationrunner.js +15 -0
  118. package/dist_ts_migration/classes.migrationrunner.d.ts +8 -0
  119. package/dist_ts_migration/classes.migrationrunner.js +34 -0
  120. package/dist_ts_migration/index.d.ts +12 -0
  121. package/dist_ts_migration/index.js +13 -0
  122. package/dist_ts_migration/v10_flexharnessv3migration.d.ts +11 -0
  123. package/dist_ts_migration/v10_flexharnessv3migration.js +23 -0
  124. package/dist_ts_migration/v13_flexprojectionorder.d.ts +11 -0
  125. package/dist_ts_migration/v13_flexprojectionorder.js +23 -0
  126. package/dist_ts_migration/v16_flexprovidercredentials.d.ts +22 -0
  127. package/dist_ts_migration/v16_flexprovidercredentials.js +149 -0
  128. package/dist_ts_migration/v18_resourcelayout.d.ts +22 -0
  129. package/dist_ts_migration/v18_resourcelayout.js +23 -0
  130. package/dist_ts_migration/v18_resourcelayoutmigration.d.ts +6 -0
  131. package/dist_ts_migration/v18_resourcelayoutmigration.js +61 -0
  132. package/dist_ts_migration/v19_flexprojectmanagement.d.ts +11 -0
  133. package/dist_ts_migration/v19_flexprojectmanagement.js +21 -0
  134. package/dist_ts_migration/v1_embeddeddatabaselocation.d.ts +28 -0
  135. package/dist_ts_migration/v1_embeddeddatabaselocation.js +415 -0
  136. package/dist_ts_migration/v22_projectfilesystemidentitymigration.d.ts +7 -0
  137. package/dist_ts_migration/v22_projectfilesystemidentitymigration.js +105 -0
  138. package/dist_ts_migration/v2_controllerdataroot.d.ts +130 -0
  139. package/dist_ts_migration/v2_controllerdataroot.js +1887 -0
  140. package/dist_ts_migration/v6_protocoldocumentmigration.d.ts +7 -0
  141. package/dist_ts_migration/v6_protocoldocumentmigration.js +100 -0
  142. package/dist_ts_migration/v6_protocoldocuments.d.ts +7 -0
  143. package/dist_ts_migration/v6_protocoldocuments.js +138 -0
  144. package/html/index.html +13 -0
  145. package/{LICENSE → license.md} +2 -2
  146. package/package.json +86 -48
  147. package/readme.md +480 -0
  148. package/readme.plan.md +188 -0
  149. package/ts/00_commitinfo_data.ts +8 -0
  150. package/ts/classes.authmodels.ts +1245 -0
  151. package/ts/classes.authstore.ts +3274 -0
  152. package/ts/classes.browserresourcehost.ts +1205 -0
  153. package/ts/classes.cli.ts +1254 -0
  154. package/ts/classes.config.ts +351 -0
  155. package/ts/classes.controller.ts +14426 -0
  156. package/ts/classes.controllermanagement.ts +330 -0
  157. package/ts/classes.draftmanager.ts +232 -0
  158. package/ts/classes.embeddeddb.ts +166 -0
  159. package/ts/classes.flexframedtransport.ts +283 -0
  160. package/ts/classes.flexmodels.private.ts +823 -0
  161. package/ts/classes.flexmodels.public.ts +732 -0
  162. package/ts/classes.flexprojectionreader.ts +816 -0
  163. package/ts/classes.flexservice.ts +4302 -0
  164. package/ts/classes.flexstore.ts +4565 -0
  165. package/ts/classes.flexsupervisor.ts +1453 -0
  166. package/ts/classes.gitreversion.ts +13353 -0
  167. package/ts/classes.harnessoperationmanager.ts +870 -0
  168. package/ts/classes.opencodeclient.ts +4110 -0
  169. package/ts/classes.opencodesupervisor.ts +1280 -0
  170. package/ts/classes.passkeymanager.ts +570 -0
  171. package/ts/classes.processinspection.ts +623 -0
  172. package/ts/classes.resourcecoordinator.ts +436 -0
  173. package/ts/classes.sessionintelligencereader.ts +52 -0
  174. package/ts/classes.systemmetricssampler.ts +215 -0
  175. package/ts/classes.terminalmanager.ts +1207 -0
  176. package/ts/classes.terminalresourcehost.ts +122 -0
  177. package/ts/classes.upgradecoordinator.ts +2675 -0
  178. package/ts/classes.upgradetransaction.ts +2900 -0
  179. package/ts/classes.uploadmanager.ts +240 -0
  180. package/ts/classes.validation.ts +1409 -0
  181. package/ts/flexharness.child.ts +35 -0
  182. package/ts/functions.canonicaldirectory.ts +213 -0
  183. package/ts/functions.controllerdataroot.ts +107 -0
  184. package/ts/functions.embeddeddb.ts +22 -0
  185. package/ts/functions.flexcredentialstore.ts +128 -0
  186. package/ts/functions.opencodeauth.ts +34 -0
  187. package/ts/functions.runtimeenvironment.ts +90 -0
  188. package/ts/functions.upgradefollower.ts +115 -0
  189. package/ts/index.ts +36 -6
  190. package/ts/interfaces.auth.ts +316 -0
  191. package/ts/interfaces.config.ts +37 -0
  192. package/ts/interfaces.flexipc.ts +2586 -0
  193. package/ts/interfaces.gitreversion.ts +336 -0
  194. package/ts/interfaces.lifecycle.ts +46 -0
  195. package/ts/interfaces.opencode.ts +153 -0
  196. package/ts/interfaces.projects.ts +182 -0
  197. package/ts/plugins.ts +64 -0
  198. package/ts_interfaces/index.ts +2 -0
  199. package/ts_interfaces/interfaces.ts +827 -0
  200. package/ts_interfaces/plugins.ts +15 -0
  201. package/ts_interfaces/requests.ts +1186 -0
  202. package/ts_migration/classes.documentmigrationrunner.ts +32 -0
  203. package/ts_migration/classes.flexmigrationrunner.ts +33 -0
  204. package/ts_migration/classes.flexpostharnessmigrationrunner.ts +22 -0
  205. package/ts_migration/classes.migrationrunner.ts +40 -0
  206. package/ts_migration/index.ts +12 -0
  207. package/ts_migration/v10_flexharnessv3migration.ts +35 -0
  208. package/ts_migration/v13_flexprojectionorder.ts +33 -0
  209. package/ts_migration/v16_flexprovidercredentials.ts +196 -0
  210. package/ts_migration/v18_resourcelayout.ts +55 -0
  211. package/ts_migration/v18_resourcelayoutmigration.ts +68 -0
  212. package/ts_migration/v19_flexprojectmanagement.ts +28 -0
  213. package/ts_migration/v1_embeddeddatabaselocation.ts +560 -0
  214. package/ts_migration/v22_projectfilesystemidentitymigration.ts +121 -0
  215. package/ts_migration/v2_controllerdataroot.ts +2349 -0
  216. package/ts_migration/v6_protocoldocumentmigration.ts +144 -0
  217. package/ts_migration/v6_protocoldocuments.ts +198 -0
  218. package/ts_web/00_commitinfo_data.ts +8 -0
  219. package/ts_web/classes.controllersocketclient.ts +517 -0
  220. package/ts_web/classes.sessiondraftsync.ts +390 -0
  221. package/ts_web/elements.harnesscontrollerapp.ts +11494 -0
  222. package/ts_web/index.ts +2 -0
  223. package/ts_web/plugins.ts +31 -0
  224. package/.gitlab-ci.yml +0 -71
  225. package/.npmignore +0 -5
  226. package/README.md +0 -40
  227. package/dist/cli.js +0 -2
  228. package/dist/index.d.ts +0 -0
  229. package/dist/index.js +0 -9
  230. package/dist/mod_bundle/index.d.ts +0 -1
  231. package/dist/mod_bundle/index.js +0 -18
  232. package/dist/mod_bundle/mod.plugins.d.ts +0 -4
  233. package/dist/mod_bundle/mod.plugins.js +0 -11
  234. package/dist/mod_install/index.d.ts +0 -4
  235. package/dist/mod_install/index.js +0 -21
  236. package/dist/mod_install/mod.plugins.d.ts +0 -1
  237. package/dist/mod_install/mod.plugins.js +0 -7
  238. package/dist/mod_standard/index.d.ts +0 -4
  239. package/dist/mod_standard/index.js +0 -21
  240. package/dist/mod_standard/mod.browser.d.ts +0 -6
  241. package/dist/mod_standard/mod.browser.js +0 -14
  242. package/dist/mod_standard/mod.clean.d.ts +0 -4
  243. package/dist/mod_standard/mod.clean.js +0 -12
  244. package/dist/mod_standard/mod.compile.d.ts +0 -4
  245. package/dist/mod_standard/mod.compile.js +0 -21
  246. package/dist/mod_standard/mod.plugins.d.ts +0 -8
  247. package/dist/mod_standard/mod.plugins.js +0 -19
  248. package/dist/mod_standard/mod.test.d.ts +0 -4
  249. package/dist/mod_standard/mod.test.js +0 -12
  250. package/dist/plr.cli.d.ts +0 -3
  251. package/dist/plr.cli.js +0 -57
  252. package/dist/plr.config.d.ts +0 -11
  253. package/dist/plr.config.js +0 -26
  254. package/dist/plr.mods.d.ts +0 -17
  255. package/dist/plr.mods.js +0 -17
  256. package/dist/plr.paths.d.ts +0 -19
  257. package/dist/plr.paths.js +0 -26
  258. package/dist/plr.plugins.d.ts +0 -8
  259. package/dist/plr.plugins.js +0 -16
  260. package/npmextra.json +0 -10
  261. package/ts/mod_bundle/index.ts +0 -20
  262. package/ts/mod_bundle/mod.plugins.ts +0 -9
  263. package/ts/mod_install/index.ts +0 -20
  264. package/ts/mod_install/mod.plugins.ts +0 -1
  265. package/ts/mod_standard/index.ts +0 -23
  266. package/ts/mod_standard/mod.browser.ts +0 -17
  267. package/ts/mod_standard/mod.clean.ts +0 -13
  268. package/ts/mod_standard/mod.compile.ts +0 -23
  269. package/ts/mod_standard/mod.plugins.ts +0 -17
  270. package/ts/mod_standard/mod.test.ts +0 -13
  271. package/ts/plr.cli.ts +0 -60
  272. package/ts/plr.config.ts +0 -36
  273. package/ts/plr.mods.ts +0 -25
  274. package/ts/plr.paths.ts +0 -29
  275. package/ts/plr.plugins.ts +0 -17
  276. package/tslint.json +0 -3
  277. package/yarn.lock +0 -3464
@@ -0,0 +1,1422 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import * as plugins from './plugins.js';
36
+ import { controllerAuditEventTypes, } from './interfaces.auth.js';
37
+ import { controllerFilesystemIdentityMaximumComponents, } from './interfaces.projects.js';
38
+ import { controllerRuntimeIdKey, } from '../dist_ts_interfaces/index.js';
39
+ const base64UrlPattern = /^[A-Za-z0-9_-]+$/;
40
+ const credentialTransports = new Set([
41
+ 'ble',
42
+ 'cable',
43
+ 'hybrid',
44
+ 'internal',
45
+ 'nfc',
46
+ 'smart-card',
47
+ 'usb',
48
+ ]);
49
+ const auditEventTypes = new Set(controllerAuditEventTypes);
50
+ const auditOutcomes = new Set(['attempted', 'succeeded', 'denied', 'failed']);
51
+ const auditRetentionSeconds = 90 * 24 * 60 * 60;
52
+ const isPlainObject = (valueArg) => typeof valueArg === 'object'
53
+ && valueArg !== null
54
+ && !Array.isArray(valueArg)
55
+ && (Object.getPrototypeOf(valueArg) === Object.prototype
56
+ || Object.getPrototypeOf(valueArg) === null);
57
+ const hasExactKeys = (valueArg, requiredKeysArg, optionalKeysArg = []) => {
58
+ const keys = Object.keys(valueArg);
59
+ return requiredKeysArg.every((key) => Object.hasOwn(valueArg, key))
60
+ && keys.every((key) => requiredKeysArg.includes(key) || optionalKeysArg.includes(key));
61
+ };
62
+ const isNonEmptyString = (valueArg) => typeof valueArg === 'string' && valueArg.length > 0;
63
+ const isRuntimeId = (valueArg, allowedHarnessIdsArg) => isPlainObject(valueArg)
64
+ && hasExactKeys(valueArg, ['harnessId', 'nativeId'])
65
+ && allowedHarnessIdsArg.includes(valueArg.harnessId)
66
+ && isNonEmptyString(valueArg.nativeId)
67
+ && Buffer.byteLength(valueArg.nativeId, 'utf8') <= 512;
68
+ const isBase64Url = (valueArg, byteLengthArg) => {
69
+ if (!isNonEmptyString(valueArg) || !base64UrlPattern.test(valueArg))
70
+ return false;
71
+ if (byteLengthArg === undefined)
72
+ return true;
73
+ try {
74
+ return Buffer.from(valueArg, 'base64url').byteLength === byteLengthArg;
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ };
80
+ const isValidDate = (valueArg) => valueArg instanceof Date && Number.isFinite(valueArg.getTime());
81
+ const isValidPort = (valueArg) => Number.isSafeInteger(valueArg) && valueArg >= 1 && valueArg <= 65535;
82
+ const isRuntimeConfig = (valueArg) => {
83
+ if (!isPlainObject(valueArg))
84
+ return false;
85
+ if (
86
+ // projectsRoot is optional only because pre-v2 documents lack it; once
87
+ // present it must be a canonical absolute path like the workspace.
88
+ !hasExactKeys(valueArg, [
89
+ 'controllerPort',
90
+ 'publicOrigin',
91
+ 'rpId',
92
+ 'workspaceDirectory',
93
+ 'opencodePort',
94
+ 'tlsMode',
95
+ ], ['projectsRoot'])
96
+ || (Object.hasOwn(valueArg, 'projectsRoot')
97
+ && (!isNonEmptyString(valueArg.projectsRoot)
98
+ || !plugins.path.isAbsolute(valueArg.projectsRoot)))
99
+ || !isValidPort(valueArg.controllerPort)
100
+ || !isValidPort(valueArg.opencodePort)
101
+ || valueArg.controllerPort === valueArg.opencodePort
102
+ || !isNonEmptyString(valueArg.publicOrigin)
103
+ || !isNonEmptyString(valueArg.rpId)
104
+ || !isNonEmptyString(valueArg.workspaceDirectory)
105
+ || !plugins.path.isAbsolute(valueArg.workspaceDirectory)
106
+ || !['local', 'proxy'].includes(valueArg.tlsMode)) {
107
+ return false;
108
+ }
109
+ try {
110
+ const origin = new URL(valueArg.publicOrigin);
111
+ const hostname = origin.hostname.toLowerCase().replace(/\.$/, '');
112
+ const rpId = valueArg.rpId.toLowerCase().replace(/\.$/, '');
113
+ if (origin.origin !== valueArg.publicOrigin
114
+ || (origin.protocol !== 'http:' && origin.protocol !== 'https:')
115
+ || origin.username.length > 0
116
+ || origin.password.length > 0
117
+ || origin.pathname !== '/'
118
+ || origin.search.length > 0
119
+ || origin.hash.length > 0
120
+ || valueArg.rpId !== rpId
121
+ || rpId.length === 0
122
+ || rpId.includes('/')
123
+ || rpId.includes(':')
124
+ || /\s/.test(rpId)
125
+ || (hostname !== rpId && !hostname.endsWith(`.${rpId}`))) {
126
+ return false;
127
+ }
128
+ if (valueArg.tlsMode === 'local') {
129
+ return origin.protocol === 'http:' && hostname === 'localhost';
130
+ }
131
+ return origin.protocol === 'https:';
132
+ }
133
+ catch {
134
+ return false;
135
+ }
136
+ };
137
+ const isSetupAuthorityState = (valueArg) => {
138
+ if (!isPlainObject(valueArg))
139
+ return false;
140
+ return hasExactKeys(valueArg, ['generation', 'hash', 'expiresAt'])
141
+ && isBase64Url(valueArg.generation, 32)
142
+ && isBase64Url(valueArg.hash, 32)
143
+ && isValidDate(valueArg.expiresAt);
144
+ };
145
+ const isStoredCredential = (valueArg) => {
146
+ if (!isPlainObject(valueArg))
147
+ return false;
148
+ return hasExactKeys(valueArg, [
149
+ 'id',
150
+ 'publicKey',
151
+ 'counter',
152
+ 'transports',
153
+ 'deviceType',
154
+ 'backedUp',
155
+ 'createdAt',
156
+ 'counterUpdateId',
157
+ ])
158
+ && isBase64Url(valueArg.id)
159
+ && isBase64Url(valueArg.publicKey)
160
+ && Number.isSafeInteger(valueArg.counter)
161
+ && valueArg.counter >= 0
162
+ && Array.isArray(valueArg.transports)
163
+ && valueArg.transports.every((entry) => credentialTransports.has(entry))
164
+ && (valueArg.deviceType === 'singleDevice' || valueArg.deviceType === 'multiDevice')
165
+ && typeof valueArg.backedUp === 'boolean'
166
+ && isValidDate(valueArg.createdAt)
167
+ && isBase64Url(valueArg.counterUpdateId, 32);
168
+ };
169
+ export const assertControllerAuthDocument = (valueArg) => {
170
+ if (!isPlainObject(valueArg))
171
+ throw new Error('Invalid controller authentication document.');
172
+ if (!hasExactKeys(valueArg, [
173
+ 'id',
174
+ 'config',
175
+ 'authState',
176
+ 'setup',
177
+ 'webauthnUserId',
178
+ 'credentials',
179
+ ])
180
+ || !isRuntimeConfig(valueArg.config)
181
+ || valueArg.id !== `controller:${valueArg.config.controllerPort}`
182
+ || !isBase64Url(valueArg.webauthnUserId, 32)
183
+ || !Array.isArray(valueArg.credentials)
184
+ || !valueArg.credentials.every(isStoredCredential)
185
+ || new Set(valueArg.credentials.map((credential) => credential.id)).size
186
+ !== valueArg.credentials.length) {
187
+ throw new Error('Invalid controller authentication document.');
188
+ }
189
+ if (valueArg.credentials.length === 0) {
190
+ if (valueArg.authState !== 'setupRequired'
191
+ || (valueArg.setup !== null && !isSetupAuthorityState(valueArg.setup))) {
192
+ throw new Error('Invalid controller setup state.');
193
+ }
194
+ return;
195
+ }
196
+ if (valueArg.authState !== 'ready' || valueArg.setup !== null) {
197
+ throw new Error('Invalid enrolled controller authentication state.');
198
+ }
199
+ };
200
+ const assertCeremonyStateFields = (valueArg) => {
201
+ if (valueArg.state === 'pending') {
202
+ return !Object.hasOwn(valueArg, 'consumedAt') && !Object.hasOwn(valueArg, 'consumedNonce');
203
+ }
204
+ return valueArg.state === 'consumed'
205
+ && isValidDate(valueArg.consumedAt)
206
+ && isBase64Url(valueArg.consumedNonce, 32);
207
+ };
208
+ export const assertWebAuthnCeremonyDocument = (valueArg) => {
209
+ if (!isPlainObject(valueArg))
210
+ throw new Error('Invalid WebAuthn ceremony document.');
211
+ const optionalKeys = valueArg.kind === 'setup'
212
+ ? ['consumedAt', 'consumedNonce']
213
+ : ['consumedAt', 'consumedNonce'];
214
+ const requiredKeys = [
215
+ 'id',
216
+ 'kind',
217
+ 'state',
218
+ 'peerId',
219
+ 'challenge',
220
+ 'origin',
221
+ 'rpId',
222
+ 'userId',
223
+ 'createdAt',
224
+ 'expiresAt',
225
+ ...(valueArg.kind === 'setup' ? ['setupGeneration', 'setupHash'] : []),
226
+ ];
227
+ if (!hasExactKeys(valueArg, requiredKeys, optionalKeys)
228
+ || !isBase64Url(valueArg.id, 32)
229
+ || (valueArg.kind !== 'setup' && valueArg.kind !== 'authentication')
230
+ || !isNonEmptyString(valueArg.peerId)
231
+ || valueArg.peerId.length > 512
232
+ || !isBase64Url(valueArg.challenge)
233
+ || !isNonEmptyString(valueArg.origin)
234
+ || !isNonEmptyString(valueArg.rpId)
235
+ || !isBase64Url(valueArg.userId, 32)
236
+ || !isValidDate(valueArg.createdAt)
237
+ || !isValidDate(valueArg.expiresAt)
238
+ || valueArg.expiresAt.getTime() <= valueArg.createdAt.getTime()
239
+ || !assertCeremonyStateFields(valueArg)) {
240
+ throw new Error('Invalid WebAuthn ceremony document.');
241
+ }
242
+ let origin;
243
+ try {
244
+ origin = new URL(valueArg.origin);
245
+ }
246
+ catch {
247
+ throw new Error('Invalid WebAuthn ceremony origin.');
248
+ }
249
+ const hostname = origin.hostname.toLowerCase().replace(/\.$/, '');
250
+ if (origin.origin !== valueArg.origin
251
+ || (origin.protocol !== 'http:' && origin.protocol !== 'https:')
252
+ || (hostname !== valueArg.rpId && !hostname.endsWith(`.${valueArg.rpId}`))) {
253
+ throw new Error('Invalid WebAuthn ceremony origin or RP ID.');
254
+ }
255
+ if (valueArg.kind === 'setup'
256
+ && (!isBase64Url(valueArg.setupGeneration, 32) || !isBase64Url(valueArg.setupHash, 32))) {
257
+ throw new Error('Invalid WebAuthn setup ceremony authority.');
258
+ }
259
+ };
260
+ export const assertControllerAuditEventDocument = (valueArg) => {
261
+ if (!isPlainObject(valueArg))
262
+ throw new Error('Invalid controller audit event.');
263
+ if (!hasExactKeys(valueArg, ['id', 'controllerId', 'timestamp', 'type', 'outcome'], ['operationId', 'peerId', 'credentialId', 'sessionId', 'requestId'])
264
+ || !isBase64Url(valueArg.id, 32)
265
+ || !isNonEmptyString(valueArg.controllerId)
266
+ || !/^controller:[1-9][0-9]{0,4}$/.test(valueArg.controllerId)
267
+ || Number(valueArg.controllerId.slice('controller:'.length)) > 65535
268
+ || !isValidDate(valueArg.timestamp)
269
+ || !auditEventTypes.has(valueArg.type)
270
+ || !auditOutcomes.has(valueArg.outcome)
271
+ || (Object.hasOwn(valueArg, 'operationId')
272
+ && !isBase64Url(valueArg.operationId, valueArg.type === 'resource.browser.operation' ? 18 : 24))) {
273
+ throw new Error('Invalid controller audit event.');
274
+ }
275
+ for (const optionalKey of [
276
+ 'peerId',
277
+ 'credentialId',
278
+ 'sessionId',
279
+ 'requestId',
280
+ ]) {
281
+ if (Object.hasOwn(valueArg, optionalKey)
282
+ && !(
283
+ // Protocol v5 audit rows are retained until TTL expiry; all new writes
284
+ // are qualified by IRecordAuditEventInput.
285
+ (isNonEmptyString(valueArg[optionalKey]) && valueArg[optionalKey].length <= 512)
286
+ || isRuntimeId(valueArg[optionalKey], ['opencode', 'flex', 'controller']))) {
287
+ throw new Error('Invalid controller audit event identifier.');
288
+ }
289
+ }
290
+ };
291
+ // A project name is a display path: relative to the projects root for
292
+ // directories inside it, else the absolute directory path. Absolute names may
293
+ // contain hidden (dot-prefixed) segments because they were typed explicitly;
294
+ // relative names stay restricted to visible directory names.
295
+ export const isProjectRelativePathName = (valueArg) => {
296
+ if (typeof valueArg !== 'string' || valueArg.length < 1 || valueArg.length > 4096) {
297
+ return false;
298
+ }
299
+ const absolute = valueArg.startsWith('/');
300
+ const segments = absolute ? valueArg.slice(1).split('/') : valueArg.split('/');
301
+ return segments.every((segment) => (segment.length > 0
302
+ && segment.length <= 255
303
+ && segment !== '.'
304
+ && segment !== '..'
305
+ && (absolute || !segment.startsWith('.'))
306
+ // eslint-disable-next-line no-control-regex
307
+ && !/[\x00-\x1f\x7f\\]/.test(segment)));
308
+ };
309
+ const controllerIdPattern = /^controller:[1-9][0-9]{0,4}$/;
310
+ const isControllerId = (valueArg) => isNonEmptyString(valueArg)
311
+ && controllerIdPattern.test(valueArg)
312
+ && Number(valueArg.slice('controller:'.length)) <= 65535;
313
+ const isFilesystemIdentityPart = (valueArg) => (typeof valueArg === 'string'
314
+ && /^(?:0|[1-9][0-9]{0,31})$/u.test(valueArg));
315
+ const isFilesystemIdentity = (valueArg, pathArg, targetTypeArg) => {
316
+ if (!isPlainObject(valueArg) || !hasExactKeys(valueArg, ['ancestry']))
317
+ return false;
318
+ if (!Array.isArray(valueArg.ancestry)
319
+ || valueArg.ancestry.length < 1
320
+ || valueArg.ancestry.length > controllerFilesystemIdentityMaximumComponents)
321
+ return false;
322
+ const root = plugins.path.parse(pathArg).root;
323
+ const relative = pathArg.slice(root.length);
324
+ const expectedLength = 1 + relative.split(plugins.path.sep).filter(Boolean).length;
325
+ const ancestry = valueArg.ancestry;
326
+ if (ancestry.length !== expectedLength)
327
+ return false;
328
+ return ancestry.every((component, index) => (isPlainObject(component)
329
+ && hasExactKeys(component, ['device', 'inode', 'type'])
330
+ && isFilesystemIdentityPart(component.device)
331
+ && isFilesystemIdentityPart(component.inode)
332
+ && component.type === (index === ancestry.length - 1 ? targetTypeArg : 'directory')));
333
+ };
334
+ export function assertControllerProjectDocument(valueArg) {
335
+ if (!isPlainObject(valueArg))
336
+ throw new Error('Invalid controller project document.');
337
+ if (!hasExactKeys(valueArg, ['id', 'controllerId', 'name', 'directory', 'directoryIdentityState', 'createdAt'], ['directoryIdentity', 'removalStartedAt', 'removedAt'])
338
+ || !isBase64Url(valueArg.id, 16)
339
+ || !isControllerId(valueArg.controllerId)
340
+ || !isProjectRelativePathName(valueArg.name)
341
+ || !isNonEmptyString(valueArg.directory)
342
+ || !plugins.path.isAbsolute(valueArg.directory)
343
+ || Buffer.byteLength(valueArg.directory, 'utf8') > 4096
344
+ || (valueArg.directoryIdentityState !== 'bound'
345
+ && valueArg.directoryIdentityState !== 'unbound')
346
+ || (valueArg.directoryIdentityState === 'bound'
347
+ && !isFilesystemIdentity(valueArg.directoryIdentity, valueArg.directory, 'directory'))
348
+ || (valueArg.directoryIdentityState === 'unbound'
349
+ && Object.hasOwn(valueArg, 'directoryIdentity'))
350
+ || !isValidDate(valueArg.createdAt)
351
+ || (Object.hasOwn(valueArg, 'removalStartedAt') && !isValidDate(valueArg.removalStartedAt))
352
+ || (Object.hasOwn(valueArg, 'removedAt') && !isValidDate(valueArg.removedAt))
353
+ || (Object.hasOwn(valueArg, 'removalStartedAt')
354
+ && Object.hasOwn(valueArg, 'removedAt'))) {
355
+ throw new Error('Invalid controller project document.');
356
+ }
357
+ }
358
+ const isModelChoice = (valueArg) => {
359
+ if (!isPlainObject(valueArg))
360
+ return false;
361
+ const hasValidVariant = !Object.hasOwn(valueArg, 'variant')
362
+ || (isNonEmptyString(valueArg.variant)
363
+ && valueArg.variant.length <= 64
364
+ && /^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(valueArg.variant));
365
+ if (!hasValidVariant
366
+ || !isNonEmptyString(valueArg.providerID)
367
+ || valueArg.providerID.length > 256
368
+ || !isNonEmptyString(valueArg.modelID)
369
+ || valueArg.modelID.length > 256) {
370
+ return false;
371
+ }
372
+ if (valueArg.harnessId === 'opencode') {
373
+ return hasExactKeys(valueArg, ['harnessId', 'providerID', 'modelID'], ['variant']);
374
+ }
375
+ return valueArg.harnessId === 'flex'
376
+ && hasExactKeys(valueArg, ['harnessId', 'providerConnectionId', 'providerID', 'modelID'], ['variant'])
377
+ && isNonEmptyString(valueArg.providerConnectionId)
378
+ && Buffer.byteLength(valueArg.providerConnectionId, 'utf8') <= 512;
379
+ };
380
+ export function assertControllerSettingsDocument(valueArg) {
381
+ if (!isPlainObject(valueArg))
382
+ throw new Error('Invalid controller settings document.');
383
+ if (!hasExactKeys(valueArg, ['id', 'controllerId', 'defaultModels'], ['autoAcceptPermissions', 'selectedOpenCodeProviderConnectionId'])
384
+ || !isControllerId(valueArg.controllerId)
385
+ || valueArg.id !== `${valueArg.controllerId}:settings`
386
+ || !Array.isArray(valueArg.defaultModels)
387
+ || valueArg.defaultModels.length > 2
388
+ || !valueArg.defaultModels.every(isModelChoice)
389
+ || new Set(valueArg.defaultModels.map((model) => model.harnessId)).size
390
+ !== valueArg.defaultModels.length
391
+ // Disabled is represented by an absent key, never by a stored false.
392
+ || (Object.hasOwn(valueArg, 'autoAcceptPermissions') && valueArg.autoAcceptPermissions !== true)
393
+ || (valueArg.selectedOpenCodeProviderConnectionId !== undefined && (!isNonEmptyString(valueArg.selectedOpenCodeProviderConnectionId)
394
+ || Buffer.byteLength(valueArg.selectedOpenCodeProviderConnectionId, 'utf8') > 512))) {
395
+ throw new Error('Invalid controller settings document.');
396
+ }
397
+ }
398
+ let ControllerAuthModel = (() => {
399
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_auth' }), plugins.smartdata.exactPersistence({
400
+ assertDocument: assertControllerAuthDocument,
401
+ })];
402
+ let _classDescriptor;
403
+ let _classExtraInitializers = [];
404
+ let _classThis;
405
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
406
+ let _id_decorators;
407
+ let _id_initializers = [];
408
+ let _id_extraInitializers = [];
409
+ let _config_decorators;
410
+ let _config_initializers = [];
411
+ let _config_extraInitializers = [];
412
+ let _authState_decorators;
413
+ let _authState_initializers = [];
414
+ let _authState_extraInitializers = [];
415
+ let _setup_decorators;
416
+ let _setup_initializers = [];
417
+ let _setup_extraInitializers = [];
418
+ let _webauthnUserId_decorators;
419
+ let _webauthnUserId_initializers = [];
420
+ let _webauthnUserId_extraInitializers = [];
421
+ let _credentials_decorators;
422
+ let _credentials_initializers = [];
423
+ let _credentials_extraInitializers = [];
424
+ var ControllerAuthModel = class extends _classSuper {
425
+ static { _classThis = this; }
426
+ static {
427
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
428
+ _id_decorators = [plugins.smartdata.unI()];
429
+ _config_decorators = [plugins.smartdata.svDb()];
430
+ _authState_decorators = [plugins.smartdata.svDb()];
431
+ _setup_decorators = [plugins.smartdata.svDb()];
432
+ _webauthnUserId_decorators = [plugins.smartdata.svDb()];
433
+ _credentials_decorators = [plugins.smartdata.svDb()];
434
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
435
+ __esDecorate(null, null, _config_decorators, { kind: "field", name: "config", static: false, private: false, access: { has: obj => "config" in obj, get: obj => obj.config, set: (obj, value) => { obj.config = value; } }, metadata: _metadata }, _config_initializers, _config_extraInitializers);
436
+ __esDecorate(null, null, _authState_decorators, { kind: "field", name: "authState", static: false, private: false, access: { has: obj => "authState" in obj, get: obj => obj.authState, set: (obj, value) => { obj.authState = value; } }, metadata: _metadata }, _authState_initializers, _authState_extraInitializers);
437
+ __esDecorate(null, null, _setup_decorators, { kind: "field", name: "setup", static: false, private: false, access: { has: obj => "setup" in obj, get: obj => obj.setup, set: (obj, value) => { obj.setup = value; } }, metadata: _metadata }, _setup_initializers, _setup_extraInitializers);
438
+ __esDecorate(null, null, _webauthnUserId_decorators, { kind: "field", name: "webauthnUserId", static: false, private: false, access: { has: obj => "webauthnUserId" in obj, get: obj => obj.webauthnUserId, set: (obj, value) => { obj.webauthnUserId = value; } }, metadata: _metadata }, _webauthnUserId_initializers, _webauthnUserId_extraInitializers);
439
+ __esDecorate(null, null, _credentials_decorators, { kind: "field", name: "credentials", static: false, private: false, access: { has: obj => "credentials" in obj, get: obj => obj.credentials, set: (obj, value) => { obj.credentials = value; } }, metadata: _metadata }, _credentials_initializers, _credentials_extraInitializers);
440
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
441
+ ControllerAuthModel = _classThis = _classDescriptor.value;
442
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
443
+ __runInitializers(_classThis, _classExtraInitializers);
444
+ }
445
+ id = __runInitializers(this, _id_initializers, void 0);
446
+ config = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _config_initializers, void 0));
447
+ authState = (__runInitializers(this, _config_extraInitializers), __runInitializers(this, _authState_initializers, void 0));
448
+ setup = (__runInitializers(this, _authState_extraInitializers), __runInitializers(this, _setup_initializers, void 0));
449
+ webauthnUserId = (__runInitializers(this, _setup_extraInitializers), __runInitializers(this, _webauthnUserId_initializers, void 0));
450
+ credentials = (__runInitializers(this, _webauthnUserId_extraInitializers), __runInitializers(this, _credentials_initializers, void 0));
451
+ constructor() {
452
+ super(...arguments);
453
+ __runInitializers(this, _credentials_extraInitializers);
454
+ }
455
+ };
456
+ return ControllerAuthModel = _classThis;
457
+ })();
458
+ export { ControllerAuthModel };
459
+ let WebAuthnCeremonyModel = (() => {
460
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_webauthn_ceremonies' }), plugins.smartdata.exactPersistence({
461
+ assertDocument: assertWebAuthnCeremonyDocument,
462
+ })];
463
+ let _classDescriptor;
464
+ let _classExtraInitializers = [];
465
+ let _classThis;
466
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
467
+ let _id_decorators;
468
+ let _id_initializers = [];
469
+ let _id_extraInitializers = [];
470
+ let _kind_decorators;
471
+ let _kind_initializers = [];
472
+ let _kind_extraInitializers = [];
473
+ let _state_decorators;
474
+ let _state_initializers = [];
475
+ let _state_extraInitializers = [];
476
+ let _peerId_decorators;
477
+ let _peerId_initializers = [];
478
+ let _peerId_extraInitializers = [];
479
+ let _challenge_decorators;
480
+ let _challenge_initializers = [];
481
+ let _challenge_extraInitializers = [];
482
+ let _origin_decorators;
483
+ let _origin_initializers = [];
484
+ let _origin_extraInitializers = [];
485
+ let _rpId_decorators;
486
+ let _rpId_initializers = [];
487
+ let _rpId_extraInitializers = [];
488
+ let _userId_decorators;
489
+ let _userId_initializers = [];
490
+ let _userId_extraInitializers = [];
491
+ let _setupGeneration_decorators;
492
+ let _setupGeneration_initializers = [];
493
+ let _setupGeneration_extraInitializers = [];
494
+ let _setupHash_decorators;
495
+ let _setupHash_initializers = [];
496
+ let _setupHash_extraInitializers = [];
497
+ let _createdAt_decorators;
498
+ let _createdAt_initializers = [];
499
+ let _createdAt_extraInitializers = [];
500
+ let _expiresAt_decorators;
501
+ let _expiresAt_initializers = [];
502
+ let _expiresAt_extraInitializers = [];
503
+ let _consumedAt_decorators;
504
+ let _consumedAt_initializers = [];
505
+ let _consumedAt_extraInitializers = [];
506
+ let _consumedNonce_decorators;
507
+ let _consumedNonce_initializers = [];
508
+ let _consumedNonce_extraInitializers = [];
509
+ var WebAuthnCeremonyModel = class extends _classSuper {
510
+ static { _classThis = this; }
511
+ static {
512
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
513
+ _id_decorators = [plugins.smartdata.unI()];
514
+ _kind_decorators = [plugins.smartdata.svDb()];
515
+ _state_decorators = [plugins.smartdata.svDb()];
516
+ _peerId_decorators = [plugins.smartdata.svDb()];
517
+ _challenge_decorators = [plugins.smartdata.svDb()];
518
+ _origin_decorators = [plugins.smartdata.svDb()];
519
+ _rpId_decorators = [plugins.smartdata.svDb()];
520
+ _userId_decorators = [plugins.smartdata.svDb()];
521
+ _setupGeneration_decorators = [plugins.smartdata.svDb()];
522
+ _setupHash_decorators = [plugins.smartdata.svDb()];
523
+ _createdAt_decorators = [plugins.smartdata.svDb()];
524
+ _expiresAt_decorators = [plugins.smartdata.index({ expireAfterSeconds: 0 })];
525
+ _consumedAt_decorators = [plugins.smartdata.svDb()];
526
+ _consumedNonce_decorators = [plugins.smartdata.svDb()];
527
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
528
+ __esDecorate(null, null, _kind_decorators, { kind: "field", name: "kind", static: false, private: false, access: { has: obj => "kind" in obj, get: obj => obj.kind, set: (obj, value) => { obj.kind = value; } }, metadata: _metadata }, _kind_initializers, _kind_extraInitializers);
529
+ __esDecorate(null, null, _state_decorators, { kind: "field", name: "state", static: false, private: false, access: { has: obj => "state" in obj, get: obj => obj.state, set: (obj, value) => { obj.state = value; } }, metadata: _metadata }, _state_initializers, _state_extraInitializers);
530
+ __esDecorate(null, null, _peerId_decorators, { kind: "field", name: "peerId", static: false, private: false, access: { has: obj => "peerId" in obj, get: obj => obj.peerId, set: (obj, value) => { obj.peerId = value; } }, metadata: _metadata }, _peerId_initializers, _peerId_extraInitializers);
531
+ __esDecorate(null, null, _challenge_decorators, { kind: "field", name: "challenge", static: false, private: false, access: { has: obj => "challenge" in obj, get: obj => obj.challenge, set: (obj, value) => { obj.challenge = value; } }, metadata: _metadata }, _challenge_initializers, _challenge_extraInitializers);
532
+ __esDecorate(null, null, _origin_decorators, { kind: "field", name: "origin", static: false, private: false, access: { has: obj => "origin" in obj, get: obj => obj.origin, set: (obj, value) => { obj.origin = value; } }, metadata: _metadata }, _origin_initializers, _origin_extraInitializers);
533
+ __esDecorate(null, null, _rpId_decorators, { kind: "field", name: "rpId", static: false, private: false, access: { has: obj => "rpId" in obj, get: obj => obj.rpId, set: (obj, value) => { obj.rpId = value; } }, metadata: _metadata }, _rpId_initializers, _rpId_extraInitializers);
534
+ __esDecorate(null, null, _userId_decorators, { kind: "field", name: "userId", static: false, private: false, access: { has: obj => "userId" in obj, get: obj => obj.userId, set: (obj, value) => { obj.userId = value; } }, metadata: _metadata }, _userId_initializers, _userId_extraInitializers);
535
+ __esDecorate(null, null, _setupGeneration_decorators, { kind: "field", name: "setupGeneration", static: false, private: false, access: { has: obj => "setupGeneration" in obj, get: obj => obj.setupGeneration, set: (obj, value) => { obj.setupGeneration = value; } }, metadata: _metadata }, _setupGeneration_initializers, _setupGeneration_extraInitializers);
536
+ __esDecorate(null, null, _setupHash_decorators, { kind: "field", name: "setupHash", static: false, private: false, access: { has: obj => "setupHash" in obj, get: obj => obj.setupHash, set: (obj, value) => { obj.setupHash = value; } }, metadata: _metadata }, _setupHash_initializers, _setupHash_extraInitializers);
537
+ __esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
538
+ __esDecorate(null, null, _expiresAt_decorators, { kind: "field", name: "expiresAt", static: false, private: false, access: { has: obj => "expiresAt" in obj, get: obj => obj.expiresAt, set: (obj, value) => { obj.expiresAt = value; } }, metadata: _metadata }, _expiresAt_initializers, _expiresAt_extraInitializers);
539
+ __esDecorate(null, null, _consumedAt_decorators, { kind: "field", name: "consumedAt", static: false, private: false, access: { has: obj => "consumedAt" in obj, get: obj => obj.consumedAt, set: (obj, value) => { obj.consumedAt = value; } }, metadata: _metadata }, _consumedAt_initializers, _consumedAt_extraInitializers);
540
+ __esDecorate(null, null, _consumedNonce_decorators, { kind: "field", name: "consumedNonce", static: false, private: false, access: { has: obj => "consumedNonce" in obj, get: obj => obj.consumedNonce, set: (obj, value) => { obj.consumedNonce = value; } }, metadata: _metadata }, _consumedNonce_initializers, _consumedNonce_extraInitializers);
541
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
542
+ WebAuthnCeremonyModel = _classThis = _classDescriptor.value;
543
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
544
+ __runInitializers(_classThis, _classExtraInitializers);
545
+ }
546
+ id = __runInitializers(this, _id_initializers, void 0);
547
+ kind = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _kind_initializers, void 0));
548
+ state = (__runInitializers(this, _kind_extraInitializers), __runInitializers(this, _state_initializers, void 0));
549
+ peerId = (__runInitializers(this, _state_extraInitializers), __runInitializers(this, _peerId_initializers, void 0));
550
+ challenge = (__runInitializers(this, _peerId_extraInitializers), __runInitializers(this, _challenge_initializers, void 0));
551
+ origin = (__runInitializers(this, _challenge_extraInitializers), __runInitializers(this, _origin_initializers, void 0));
552
+ rpId = (__runInitializers(this, _origin_extraInitializers), __runInitializers(this, _rpId_initializers, void 0));
553
+ userId = (__runInitializers(this, _rpId_extraInitializers), __runInitializers(this, _userId_initializers, void 0));
554
+ setupGeneration = (__runInitializers(this, _userId_extraInitializers), __runInitializers(this, _setupGeneration_initializers, void 0));
555
+ setupHash = (__runInitializers(this, _setupGeneration_extraInitializers), __runInitializers(this, _setupHash_initializers, void 0));
556
+ createdAt = (__runInitializers(this, _setupHash_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
557
+ expiresAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _expiresAt_initializers, void 0));
558
+ consumedAt = (__runInitializers(this, _expiresAt_extraInitializers), __runInitializers(this, _consumedAt_initializers, void 0));
559
+ consumedNonce = (__runInitializers(this, _consumedAt_extraInitializers), __runInitializers(this, _consumedNonce_initializers, void 0));
560
+ constructor() {
561
+ super(...arguments);
562
+ __runInitializers(this, _consumedNonce_extraInitializers);
563
+ }
564
+ };
565
+ return WebAuthnCeremonyModel = _classThis;
566
+ })();
567
+ export { WebAuthnCeremonyModel };
568
+ let ControllerProjectModel = (() => {
569
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_projects' }), plugins.smartdata.exactPersistence({
570
+ assertDocument: assertControllerProjectDocument,
571
+ })];
572
+ let _classDescriptor;
573
+ let _classExtraInitializers = [];
574
+ let _classThis;
575
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
576
+ let _id_decorators;
577
+ let _id_initializers = [];
578
+ let _id_extraInitializers = [];
579
+ let _controllerId_decorators;
580
+ let _controllerId_initializers = [];
581
+ let _controllerId_extraInitializers = [];
582
+ let _name_decorators;
583
+ let _name_initializers = [];
584
+ let _name_extraInitializers = [];
585
+ let _directory_decorators;
586
+ let _directory_initializers = [];
587
+ let _directory_extraInitializers = [];
588
+ let _directoryIdentityState_decorators;
589
+ let _directoryIdentityState_initializers = [];
590
+ let _directoryIdentityState_extraInitializers = [];
591
+ let _directoryIdentity_decorators;
592
+ let _directoryIdentity_initializers = [];
593
+ let _directoryIdentity_extraInitializers = [];
594
+ let _createdAt_decorators;
595
+ let _createdAt_initializers = [];
596
+ let _createdAt_extraInitializers = [];
597
+ let _removalStartedAt_decorators;
598
+ let _removalStartedAt_initializers = [];
599
+ let _removalStartedAt_extraInitializers = [];
600
+ let _removedAt_decorators;
601
+ let _removedAt_initializers = [];
602
+ let _removedAt_extraInitializers = [];
603
+ var ControllerProjectModel = class extends _classSuper {
604
+ static { _classThis = this; }
605
+ static {
606
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
607
+ _id_decorators = [plugins.smartdata.unI()];
608
+ _controllerId_decorators = [plugins.smartdata.svDb()];
609
+ _name_decorators = [plugins.smartdata.svDb()];
610
+ _directory_decorators = [plugins.smartdata.svDb()];
611
+ _directoryIdentityState_decorators = [plugins.smartdata.svDb()];
612
+ _directoryIdentity_decorators = [plugins.smartdata.svDb()];
613
+ _createdAt_decorators = [plugins.smartdata.svDb()];
614
+ _removalStartedAt_decorators = [plugins.smartdata.svDb()];
615
+ _removedAt_decorators = [plugins.smartdata.index({ expireAfterSeconds: 90 * 24 * 60 * 60 })];
616
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
617
+ __esDecorate(null, null, _controllerId_decorators, { kind: "field", name: "controllerId", static: false, private: false, access: { has: obj => "controllerId" in obj, get: obj => obj.controllerId, set: (obj, value) => { obj.controllerId = value; } }, metadata: _metadata }, _controllerId_initializers, _controllerId_extraInitializers);
618
+ __esDecorate(null, null, _name_decorators, { kind: "field", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
619
+ __esDecorate(null, null, _directory_decorators, { kind: "field", name: "directory", static: false, private: false, access: { has: obj => "directory" in obj, get: obj => obj.directory, set: (obj, value) => { obj.directory = value; } }, metadata: _metadata }, _directory_initializers, _directory_extraInitializers);
620
+ __esDecorate(null, null, _directoryIdentityState_decorators, { kind: "field", name: "directoryIdentityState", static: false, private: false, access: { has: obj => "directoryIdentityState" in obj, get: obj => obj.directoryIdentityState, set: (obj, value) => { obj.directoryIdentityState = value; } }, metadata: _metadata }, _directoryIdentityState_initializers, _directoryIdentityState_extraInitializers);
621
+ __esDecorate(null, null, _directoryIdentity_decorators, { kind: "field", name: "directoryIdentity", static: false, private: false, access: { has: obj => "directoryIdentity" in obj, get: obj => obj.directoryIdentity, set: (obj, value) => { obj.directoryIdentity = value; } }, metadata: _metadata }, _directoryIdentity_initializers, _directoryIdentity_extraInitializers);
622
+ __esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
623
+ __esDecorate(null, null, _removalStartedAt_decorators, { kind: "field", name: "removalStartedAt", static: false, private: false, access: { has: obj => "removalStartedAt" in obj, get: obj => obj.removalStartedAt, set: (obj, value) => { obj.removalStartedAt = value; } }, metadata: _metadata }, _removalStartedAt_initializers, _removalStartedAt_extraInitializers);
624
+ __esDecorate(null, null, _removedAt_decorators, { kind: "field", name: "removedAt", static: false, private: false, access: { has: obj => "removedAt" in obj, get: obj => obj.removedAt, set: (obj, value) => { obj.removedAt = value; } }, metadata: _metadata }, _removedAt_initializers, _removedAt_extraInitializers);
625
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
626
+ ControllerProjectModel = _classThis = _classDescriptor.value;
627
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
628
+ __runInitializers(_classThis, _classExtraInitializers);
629
+ }
630
+ id = __runInitializers(this, _id_initializers, void 0);
631
+ controllerId = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _controllerId_initializers, void 0));
632
+ // `name` shadows a base-class property; the initializer makes that explicit.
633
+ name = (__runInitializers(this, _controllerId_extraInitializers), __runInitializers(this, _name_initializers, ''));
634
+ directory = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _directory_initializers, void 0));
635
+ directoryIdentityState = (__runInitializers(this, _directory_extraInitializers), __runInitializers(this, _directoryIdentityState_initializers, void 0));
636
+ directoryIdentity = (__runInitializers(this, _directoryIdentityState_extraInitializers), __runInitializers(this, _directoryIdentity_initializers, void 0));
637
+ createdAt = (__runInitializers(this, _directoryIdentity_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
638
+ removalStartedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _removalStartedAt_initializers, void 0));
639
+ // Deregistered projects expire from the collection after 90 days; the
640
+ // directory on disk is never touched.
641
+ removedAt = (__runInitializers(this, _removalStartedAt_extraInitializers), __runInitializers(this, _removedAt_initializers, void 0));
642
+ constructor() {
643
+ super(...arguments);
644
+ __runInitializers(this, _removedAt_extraInitializers);
645
+ }
646
+ };
647
+ return ControllerProjectModel = _classThis;
648
+ })();
649
+ export { ControllerProjectModel };
650
+ let ControllerSettingsModel = (() => {
651
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_settings' }), plugins.smartdata.exactPersistence({
652
+ assertDocument: assertControllerSettingsDocument,
653
+ })];
654
+ let _classDescriptor;
655
+ let _classExtraInitializers = [];
656
+ let _classThis;
657
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
658
+ let _id_decorators;
659
+ let _id_initializers = [];
660
+ let _id_extraInitializers = [];
661
+ let _controllerId_decorators;
662
+ let _controllerId_initializers = [];
663
+ let _controllerId_extraInitializers = [];
664
+ let _defaultModels_decorators;
665
+ let _defaultModels_initializers = [];
666
+ let _defaultModels_extraInitializers = [];
667
+ let _autoAcceptPermissions_decorators;
668
+ let _autoAcceptPermissions_initializers = [];
669
+ let _autoAcceptPermissions_extraInitializers = [];
670
+ let _selectedOpenCodeProviderConnectionId_decorators;
671
+ let _selectedOpenCodeProviderConnectionId_initializers = [];
672
+ let _selectedOpenCodeProviderConnectionId_extraInitializers = [];
673
+ var ControllerSettingsModel = class extends _classSuper {
674
+ static { _classThis = this; }
675
+ static {
676
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
677
+ _id_decorators = [plugins.smartdata.unI()];
678
+ _controllerId_decorators = [plugins.smartdata.svDb()];
679
+ _defaultModels_decorators = [plugins.smartdata.svDb()];
680
+ _autoAcceptPermissions_decorators = [plugins.smartdata.svDb()];
681
+ _selectedOpenCodeProviderConnectionId_decorators = [plugins.smartdata.svDb()];
682
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
683
+ __esDecorate(null, null, _controllerId_decorators, { kind: "field", name: "controllerId", static: false, private: false, access: { has: obj => "controllerId" in obj, get: obj => obj.controllerId, set: (obj, value) => { obj.controllerId = value; } }, metadata: _metadata }, _controllerId_initializers, _controllerId_extraInitializers);
684
+ __esDecorate(null, null, _defaultModels_decorators, { kind: "field", name: "defaultModels", static: false, private: false, access: { has: obj => "defaultModels" in obj, get: obj => obj.defaultModels, set: (obj, value) => { obj.defaultModels = value; } }, metadata: _metadata }, _defaultModels_initializers, _defaultModels_extraInitializers);
685
+ __esDecorate(null, null, _autoAcceptPermissions_decorators, { kind: "field", name: "autoAcceptPermissions", static: false, private: false, access: { has: obj => "autoAcceptPermissions" in obj, get: obj => obj.autoAcceptPermissions, set: (obj, value) => { obj.autoAcceptPermissions = value; } }, metadata: _metadata }, _autoAcceptPermissions_initializers, _autoAcceptPermissions_extraInitializers);
686
+ __esDecorate(null, null, _selectedOpenCodeProviderConnectionId_decorators, { kind: "field", name: "selectedOpenCodeProviderConnectionId", static: false, private: false, access: { has: obj => "selectedOpenCodeProviderConnectionId" in obj, get: obj => obj.selectedOpenCodeProviderConnectionId, set: (obj, value) => { obj.selectedOpenCodeProviderConnectionId = value; } }, metadata: _metadata }, _selectedOpenCodeProviderConnectionId_initializers, _selectedOpenCodeProviderConnectionId_extraInitializers);
687
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
688
+ ControllerSettingsModel = _classThis = _classDescriptor.value;
689
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
690
+ __runInitializers(_classThis, _classExtraInitializers);
691
+ }
692
+ id = __runInitializers(this, _id_initializers, void 0);
693
+ controllerId = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _controllerId_initializers, void 0));
694
+ defaultModels = (__runInitializers(this, _controllerId_extraInitializers), __runInitializers(this, _defaultModels_initializers, void 0));
695
+ autoAcceptPermissions = (__runInitializers(this, _defaultModels_extraInitializers), __runInitializers(this, _autoAcceptPermissions_initializers, void 0));
696
+ selectedOpenCodeProviderConnectionId = (__runInitializers(this, _autoAcceptPermissions_extraInitializers), __runInitializers(this, _selectedOpenCodeProviderConnectionId_initializers, void 0));
697
+ constructor() {
698
+ super(...arguments);
699
+ __runInitializers(this, _selectedOpenCodeProviderConnectionId_extraInitializers);
700
+ }
701
+ };
702
+ return ControllerSettingsModel = _classThis;
703
+ })();
704
+ export { ControllerSettingsModel };
705
+ const maxSessionGroups = 64;
706
+ const maxSessionsPerGroup = 512;
707
+ const maxUngroupedSessions = 2048;
708
+ const groupIdentifierPattern = /^[A-Za-z0-9_-]{1,128}$/;
709
+ export const isSessionGroupList = (valueArg) => {
710
+ if (!Array.isArray(valueArg) || valueArg.length > maxSessionGroups)
711
+ return false;
712
+ const groupIds = new Set();
713
+ const memberIds = new Set();
714
+ for (const group of valueArg) {
715
+ if (!isPlainObject(group)
716
+ || !hasExactKeys(group, ['id', 'name', 'sessionIds'])
717
+ || !isNonEmptyString(group.id)
718
+ || !groupIdentifierPattern.test(group.id)
719
+ || groupIds.has(group.id)
720
+ || !isNonEmptyString(group.name)
721
+ || group.name.length > 128
722
+ // eslint-disable-next-line no-control-regex
723
+ || /[\x00-\x1f\x7f]/.test(group.name)
724
+ || !Array.isArray(group.sessionIds)
725
+ || group.sessionIds.length > maxSessionsPerGroup) {
726
+ return false;
727
+ }
728
+ groupIds.add(group.id);
729
+ for (const sessionId of group.sessionIds) {
730
+ if (!isRuntimeId(sessionId, ['opencode', 'flex'])
731
+ // A session belongs to at most one group; duplicates are invalid.
732
+ || memberIds.has(controllerRuntimeIdKey(sessionId))) {
733
+ return false;
734
+ }
735
+ memberIds.add(controllerRuntimeIdKey(sessionId));
736
+ }
737
+ }
738
+ return true;
739
+ };
740
+ export const isUngroupedSessionList = (valueArg, groupedSessionIdsArg = new Set()) => {
741
+ if (!Array.isArray(valueArg) || valueArg.length > maxUngroupedSessions)
742
+ return false;
743
+ const sessionIds = new Set();
744
+ for (const sessionId of valueArg) {
745
+ const key = isRuntimeId(sessionId, ['opencode', 'flex'])
746
+ ? controllerRuntimeIdKey(sessionId)
747
+ : undefined;
748
+ if (key === undefined
749
+ || groupedSessionIdsArg.has(key)
750
+ || sessionIds.has(key)) {
751
+ return false;
752
+ }
753
+ sessionIds.add(key);
754
+ }
755
+ return true;
756
+ };
757
+ export function assertControllerSessionGroupsDocument(valueArg) {
758
+ if (!isPlainObject(valueArg))
759
+ throw new Error('Invalid controller session groups document.');
760
+ if (!hasExactKeys(valueArg, ['id', 'controllerId', 'projectId', 'groups'], ['ungroupedSessionIds', 'revision'])
761
+ || !isControllerId(valueArg.controllerId)
762
+ || !isNonEmptyString(valueArg.projectId)
763
+ || !groupIdentifierPattern.test(valueArg.projectId)
764
+ || valueArg.id !== `${valueArg.controllerId}:groups:${valueArg.projectId}`
765
+ || !isSessionGroupList(valueArg.groups)) {
766
+ throw new Error('Invalid controller session groups document.');
767
+ }
768
+ const groupedSessionIds = new Set(valueArg.groups.flatMap((group) => group.sessionIds.map(controllerRuntimeIdKey)));
769
+ const hasUngroupedSessionIds = valueArg.ungroupedSessionIds !== undefined;
770
+ const hasRevision = valueArg.revision !== undefined;
771
+ if (hasUngroupedSessionIds !== hasRevision
772
+ ||
773
+ (hasRevision
774
+ && (!Number.isSafeInteger(valueArg.revision) || valueArg.revision < 0))
775
+ ||
776
+ hasUngroupedSessionIds
777
+ && !isUngroupedSessionList(valueArg.ungroupedSessionIds, groupedSessionIds)) {
778
+ throw new Error('Invalid controller session groups document.');
779
+ }
780
+ }
781
+ let ControllerSessionGroupsModel = (() => {
782
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_session_groups' }), plugins.smartdata.exactPersistence({
783
+ assertDocument: assertControllerSessionGroupsDocument,
784
+ })];
785
+ let _classDescriptor;
786
+ let _classExtraInitializers = [];
787
+ let _classThis;
788
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
789
+ let _id_decorators;
790
+ let _id_initializers = [];
791
+ let _id_extraInitializers = [];
792
+ let _controllerId_decorators;
793
+ let _controllerId_initializers = [];
794
+ let _controllerId_extraInitializers = [];
795
+ let _projectId_decorators;
796
+ let _projectId_initializers = [];
797
+ let _projectId_extraInitializers = [];
798
+ let _groups_decorators;
799
+ let _groups_initializers = [];
800
+ let _groups_extraInitializers = [];
801
+ let _ungroupedSessionIds_decorators;
802
+ let _ungroupedSessionIds_initializers = [];
803
+ let _ungroupedSessionIds_extraInitializers = [];
804
+ let _revision_decorators;
805
+ let _revision_initializers = [];
806
+ let _revision_extraInitializers = [];
807
+ var ControllerSessionGroupsModel = class extends _classSuper {
808
+ static { _classThis = this; }
809
+ static {
810
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
811
+ _id_decorators = [plugins.smartdata.unI()];
812
+ _controllerId_decorators = [plugins.smartdata.svDb()];
813
+ _projectId_decorators = [plugins.smartdata.svDb()];
814
+ _groups_decorators = [plugins.smartdata.svDb()];
815
+ _ungroupedSessionIds_decorators = [plugins.smartdata.svDb()];
816
+ _revision_decorators = [plugins.smartdata.svDb()];
817
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
818
+ __esDecorate(null, null, _controllerId_decorators, { kind: "field", name: "controllerId", static: false, private: false, access: { has: obj => "controllerId" in obj, get: obj => obj.controllerId, set: (obj, value) => { obj.controllerId = value; } }, metadata: _metadata }, _controllerId_initializers, _controllerId_extraInitializers);
819
+ __esDecorate(null, null, _projectId_decorators, { kind: "field", name: "projectId", static: false, private: false, access: { has: obj => "projectId" in obj, get: obj => obj.projectId, set: (obj, value) => { obj.projectId = value; } }, metadata: _metadata }, _projectId_initializers, _projectId_extraInitializers);
820
+ __esDecorate(null, null, _groups_decorators, { kind: "field", name: "groups", static: false, private: false, access: { has: obj => "groups" in obj, get: obj => obj.groups, set: (obj, value) => { obj.groups = value; } }, metadata: _metadata }, _groups_initializers, _groups_extraInitializers);
821
+ __esDecorate(null, null, _ungroupedSessionIds_decorators, { kind: "field", name: "ungroupedSessionIds", static: false, private: false, access: { has: obj => "ungroupedSessionIds" in obj, get: obj => obj.ungroupedSessionIds, set: (obj, value) => { obj.ungroupedSessionIds = value; } }, metadata: _metadata }, _ungroupedSessionIds_initializers, _ungroupedSessionIds_extraInitializers);
822
+ __esDecorate(null, null, _revision_decorators, { kind: "field", name: "revision", static: false, private: false, access: { has: obj => "revision" in obj, get: obj => obj.revision, set: (obj, value) => { obj.revision = value; } }, metadata: _metadata }, _revision_initializers, _revision_extraInitializers);
823
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
824
+ ControllerSessionGroupsModel = _classThis = _classDescriptor.value;
825
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
826
+ __runInitializers(_classThis, _classExtraInitializers);
827
+ }
828
+ id = __runInitializers(this, _id_initializers, void 0);
829
+ controllerId = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _controllerId_initializers, void 0));
830
+ projectId = (__runInitializers(this, _controllerId_extraInitializers), __runInitializers(this, _projectId_initializers, void 0));
831
+ groups = (__runInitializers(this, _projectId_extraInitializers), __runInitializers(this, _groups_initializers, void 0));
832
+ ungroupedSessionIds = (__runInitializers(this, _groups_extraInitializers), __runInitializers(this, _ungroupedSessionIds_initializers, void 0));
833
+ revision = (__runInitializers(this, _ungroupedSessionIds_extraInitializers), __runInitializers(this, _revision_initializers, void 0));
834
+ constructor() {
835
+ super(...arguments);
836
+ __runInitializers(this, _revision_extraInitializers);
837
+ }
838
+ };
839
+ return ControllerSessionGroupsModel = _classThis;
840
+ })();
841
+ export { ControllerSessionGroupsModel };
842
+ const resourceIdPattern = /^[A-Za-z0-9_-]{22}$/;
843
+ const resourceAuthorityPattern = /^[A-Za-z0-9_-]{43}$/;
844
+ export function assertControllerResourceDocument(valueArg) {
845
+ if (!isPlainObject(valueArg))
846
+ throw new Error('Invalid controller resource document.');
847
+ if (!hasExactKeys(valueArg, [
848
+ 'id',
849
+ 'controllerId',
850
+ 'projectId',
851
+ 'kind',
852
+ 'title',
853
+ 'attachmentAuthorityId',
854
+ 'attachmentRevision',
855
+ 'sessionId',
856
+ 'lifecycle',
857
+ 'createdAt',
858
+ 'updatedAt',
859
+ 'updateId',
860
+ ], ['pendingAttachment', 'terminal', 'retiringAt', 'retiredAt'])
861
+ || !resourceIdPattern.test(valueArg.id)
862
+ || !isControllerId(valueArg.controllerId)
863
+ || !isNonEmptyString(valueArg.projectId)
864
+ || !groupIdentifierPattern.test(valueArg.projectId)
865
+ || (valueArg.kind !== 'terminal' && valueArg.kind !== 'browser')
866
+ || !isNonEmptyString(valueArg.title)
867
+ || Buffer.byteLength(valueArg.title, 'utf8') > 256
868
+ // eslint-disable-next-line no-control-regex
869
+ || /[\x00-\x1f\x7f]/.test(valueArg.title)
870
+ || !resourceAuthorityPattern.test(valueArg.attachmentAuthorityId)
871
+ || !Number.isSafeInteger(valueArg.attachmentRevision)
872
+ || valueArg.attachmentRevision < 0
873
+ || (valueArg.sessionId !== null && !isRuntimeId(valueArg.sessionId, ['opencode', 'flex']))
874
+ || !['active', 'retiring', 'retired'].includes(valueArg.lifecycle)
875
+ || !isValidDate(valueArg.createdAt)
876
+ || !isValidDate(valueArg.updatedAt)
877
+ || valueArg.updatedAt.getTime() < valueArg.createdAt.getTime()
878
+ || !isBase64Url(valueArg.updateId, 32)) {
879
+ throw new Error('Invalid controller resource document.');
880
+ }
881
+ if (valueArg.pendingAttachment !== undefined) {
882
+ const pending = valueArg.pendingAttachment;
883
+ if (!isPlainObject(pending)
884
+ || !hasExactKeys(pending, [
885
+ 'operationId',
886
+ 'attachmentRevision',
887
+ 'sessionId',
888
+ 'requestedAt',
889
+ ])
890
+ || !isBase64Url(pending.operationId, 16)
891
+ || pending.attachmentRevision !== valueArg.attachmentRevision + 1
892
+ || (pending.sessionId !== null && !isRuntimeId(pending.sessionId, ['opencode', 'flex']))
893
+ || !isValidDate(pending.requestedAt)
894
+ || valueArg.lifecycle !== 'active') {
895
+ throw new Error('Invalid pending controller resource attachment.');
896
+ }
897
+ }
898
+ if (valueArg.kind === 'terminal') {
899
+ if (!isPlainObject(valueArg.terminal) || !hasExactKeys(valueArg.terminal, ['command', 'args', 'cwd'], ['stoppedAt', 'lastExitCode']) || !isNonEmptyString(valueArg.terminal.command)
900
+ || !plugins.path.isAbsolute(valueArg.terminal.command)
901
+ || !Array.isArray(valueArg.terminal.args)
902
+ || valueArg.terminal.args.length > 32
903
+ || valueArg.terminal.args.some((arg) => (typeof arg !== 'string' || Buffer.byteLength(arg, 'utf8') > 4096))
904
+ || !isNonEmptyString(valueArg.terminal.cwd)
905
+ || !plugins.path.isAbsolute(valueArg.terminal.cwd)
906
+ || (valueArg.terminal.stoppedAt !== undefined && !isValidDate(valueArg.terminal.stoppedAt))
907
+ || (valueArg.terminal.lastExitCode !== undefined
908
+ && (!Number.isSafeInteger(valueArg.terminal.lastExitCode)
909
+ || Math.abs(valueArg.terminal.lastExitCode) > 255))) {
910
+ throw new Error('Invalid controller terminal resource metadata.');
911
+ }
912
+ }
913
+ else if (valueArg.terminal !== undefined) {
914
+ throw new Error('Browser resources cannot retain terminal metadata.');
915
+ }
916
+ const hasRetiringAt = valueArg.retiringAt !== undefined;
917
+ const hasRetiredAt = valueArg.retiredAt !== undefined;
918
+ if ((hasRetiringAt && !isValidDate(valueArg.retiringAt))
919
+ || (hasRetiredAt && !isValidDate(valueArg.retiredAt))
920
+ || (valueArg.lifecycle === 'active' && (hasRetiringAt || hasRetiredAt))
921
+ || (valueArg.lifecycle === 'retiring' && (!hasRetiringAt || hasRetiredAt))
922
+ || (valueArg.lifecycle === 'retired' && (!hasRetiringAt || !hasRetiredAt))) {
923
+ throw new Error('Invalid controller resource lifecycle.');
924
+ }
925
+ }
926
+ let ControllerResourceModel = (() => {
927
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_resources' }), plugins.smartdata.exactPersistence({
928
+ assertDocument: assertControllerResourceDocument,
929
+ })];
930
+ let _classDescriptor;
931
+ let _classExtraInitializers = [];
932
+ let _classThis;
933
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
934
+ let _id_decorators;
935
+ let _id_initializers = [];
936
+ let _id_extraInitializers = [];
937
+ let _controllerId_decorators;
938
+ let _controllerId_initializers = [];
939
+ let _controllerId_extraInitializers = [];
940
+ let _projectId_decorators;
941
+ let _projectId_initializers = [];
942
+ let _projectId_extraInitializers = [];
943
+ let _kind_decorators;
944
+ let _kind_initializers = [];
945
+ let _kind_extraInitializers = [];
946
+ let _title_decorators;
947
+ let _title_initializers = [];
948
+ let _title_extraInitializers = [];
949
+ let _attachmentAuthorityId_decorators;
950
+ let _attachmentAuthorityId_initializers = [];
951
+ let _attachmentAuthorityId_extraInitializers = [];
952
+ let _attachmentRevision_decorators;
953
+ let _attachmentRevision_initializers = [];
954
+ let _attachmentRevision_extraInitializers = [];
955
+ let _sessionId_decorators;
956
+ let _sessionId_initializers = [];
957
+ let _sessionId_extraInitializers = [];
958
+ let _pendingAttachment_decorators;
959
+ let _pendingAttachment_initializers = [];
960
+ let _pendingAttachment_extraInitializers = [];
961
+ let _lifecycle_decorators;
962
+ let _lifecycle_initializers = [];
963
+ let _lifecycle_extraInitializers = [];
964
+ let _terminal_decorators;
965
+ let _terminal_initializers = [];
966
+ let _terminal_extraInitializers = [];
967
+ let _createdAt_decorators;
968
+ let _createdAt_initializers = [];
969
+ let _createdAt_extraInitializers = [];
970
+ let _updatedAt_decorators;
971
+ let _updatedAt_initializers = [];
972
+ let _updatedAt_extraInitializers = [];
973
+ let _retiringAt_decorators;
974
+ let _retiringAt_initializers = [];
975
+ let _retiringAt_extraInitializers = [];
976
+ let _retiredAt_decorators;
977
+ let _retiredAt_initializers = [];
978
+ let _retiredAt_extraInitializers = [];
979
+ let _updateId_decorators;
980
+ let _updateId_initializers = [];
981
+ let _updateId_extraInitializers = [];
982
+ var ControllerResourceModel = class extends _classSuper {
983
+ static { _classThis = this; }
984
+ static {
985
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
986
+ _id_decorators = [plugins.smartdata.unI()];
987
+ _controllerId_decorators = [plugins.smartdata.svDb()];
988
+ _projectId_decorators = [plugins.smartdata.svDb()];
989
+ _kind_decorators = [plugins.smartdata.svDb()];
990
+ _title_decorators = [plugins.smartdata.svDb()];
991
+ _attachmentAuthorityId_decorators = [plugins.smartdata.svDb()];
992
+ _attachmentRevision_decorators = [plugins.smartdata.svDb()];
993
+ _sessionId_decorators = [plugins.smartdata.svDb()];
994
+ _pendingAttachment_decorators = [plugins.smartdata.svDb()];
995
+ _lifecycle_decorators = [plugins.smartdata.svDb()];
996
+ _terminal_decorators = [plugins.smartdata.svDb()];
997
+ _createdAt_decorators = [plugins.smartdata.svDb()];
998
+ _updatedAt_decorators = [plugins.smartdata.svDb()];
999
+ _retiringAt_decorators = [plugins.smartdata.svDb()];
1000
+ _retiredAt_decorators = [plugins.smartdata.index({ expireAfterSeconds: 90 * 24 * 60 * 60 })];
1001
+ _updateId_decorators = [plugins.smartdata.svDb()];
1002
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
1003
+ __esDecorate(null, null, _controllerId_decorators, { kind: "field", name: "controllerId", static: false, private: false, access: { has: obj => "controllerId" in obj, get: obj => obj.controllerId, set: (obj, value) => { obj.controllerId = value; } }, metadata: _metadata }, _controllerId_initializers, _controllerId_extraInitializers);
1004
+ __esDecorate(null, null, _projectId_decorators, { kind: "field", name: "projectId", static: false, private: false, access: { has: obj => "projectId" in obj, get: obj => obj.projectId, set: (obj, value) => { obj.projectId = value; } }, metadata: _metadata }, _projectId_initializers, _projectId_extraInitializers);
1005
+ __esDecorate(null, null, _kind_decorators, { kind: "field", name: "kind", static: false, private: false, access: { has: obj => "kind" in obj, get: obj => obj.kind, set: (obj, value) => { obj.kind = value; } }, metadata: _metadata }, _kind_initializers, _kind_extraInitializers);
1006
+ __esDecorate(null, null, _title_decorators, { kind: "field", name: "title", static: false, private: false, access: { has: obj => "title" in obj, get: obj => obj.title, set: (obj, value) => { obj.title = value; } }, metadata: _metadata }, _title_initializers, _title_extraInitializers);
1007
+ __esDecorate(null, null, _attachmentAuthorityId_decorators, { kind: "field", name: "attachmentAuthorityId", static: false, private: false, access: { has: obj => "attachmentAuthorityId" in obj, get: obj => obj.attachmentAuthorityId, set: (obj, value) => { obj.attachmentAuthorityId = value; } }, metadata: _metadata }, _attachmentAuthorityId_initializers, _attachmentAuthorityId_extraInitializers);
1008
+ __esDecorate(null, null, _attachmentRevision_decorators, { kind: "field", name: "attachmentRevision", static: false, private: false, access: { has: obj => "attachmentRevision" in obj, get: obj => obj.attachmentRevision, set: (obj, value) => { obj.attachmentRevision = value; } }, metadata: _metadata }, _attachmentRevision_initializers, _attachmentRevision_extraInitializers);
1009
+ __esDecorate(null, null, _sessionId_decorators, { kind: "field", name: "sessionId", static: false, private: false, access: { has: obj => "sessionId" in obj, get: obj => obj.sessionId, set: (obj, value) => { obj.sessionId = value; } }, metadata: _metadata }, _sessionId_initializers, _sessionId_extraInitializers);
1010
+ __esDecorate(null, null, _pendingAttachment_decorators, { kind: "field", name: "pendingAttachment", static: false, private: false, access: { has: obj => "pendingAttachment" in obj, get: obj => obj.pendingAttachment, set: (obj, value) => { obj.pendingAttachment = value; } }, metadata: _metadata }, _pendingAttachment_initializers, _pendingAttachment_extraInitializers);
1011
+ __esDecorate(null, null, _lifecycle_decorators, { kind: "field", name: "lifecycle", static: false, private: false, access: { has: obj => "lifecycle" in obj, get: obj => obj.lifecycle, set: (obj, value) => { obj.lifecycle = value; } }, metadata: _metadata }, _lifecycle_initializers, _lifecycle_extraInitializers);
1012
+ __esDecorate(null, null, _terminal_decorators, { kind: "field", name: "terminal", static: false, private: false, access: { has: obj => "terminal" in obj, get: obj => obj.terminal, set: (obj, value) => { obj.terminal = value; } }, metadata: _metadata }, _terminal_initializers, _terminal_extraInitializers);
1013
+ __esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
1014
+ __esDecorate(null, null, _updatedAt_decorators, { kind: "field", name: "updatedAt", static: false, private: false, access: { has: obj => "updatedAt" in obj, get: obj => obj.updatedAt, set: (obj, value) => { obj.updatedAt = value; } }, metadata: _metadata }, _updatedAt_initializers, _updatedAt_extraInitializers);
1015
+ __esDecorate(null, null, _retiringAt_decorators, { kind: "field", name: "retiringAt", static: false, private: false, access: { has: obj => "retiringAt" in obj, get: obj => obj.retiringAt, set: (obj, value) => { obj.retiringAt = value; } }, metadata: _metadata }, _retiringAt_initializers, _retiringAt_extraInitializers);
1016
+ __esDecorate(null, null, _retiredAt_decorators, { kind: "field", name: "retiredAt", static: false, private: false, access: { has: obj => "retiredAt" in obj, get: obj => obj.retiredAt, set: (obj, value) => { obj.retiredAt = value; } }, metadata: _metadata }, _retiredAt_initializers, _retiredAt_extraInitializers);
1017
+ __esDecorate(null, null, _updateId_decorators, { kind: "field", name: "updateId", static: false, private: false, access: { has: obj => "updateId" in obj, get: obj => obj.updateId, set: (obj, value) => { obj.updateId = value; } }, metadata: _metadata }, _updateId_initializers, _updateId_extraInitializers);
1018
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
1019
+ ControllerResourceModel = _classThis = _classDescriptor.value;
1020
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1021
+ __runInitializers(_classThis, _classExtraInitializers);
1022
+ }
1023
+ id = __runInitializers(this, _id_initializers, void 0);
1024
+ controllerId = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _controllerId_initializers, void 0));
1025
+ projectId = (__runInitializers(this, _controllerId_extraInitializers), __runInitializers(this, _projectId_initializers, void 0));
1026
+ kind = (__runInitializers(this, _projectId_extraInitializers), __runInitializers(this, _kind_initializers, void 0));
1027
+ title = (__runInitializers(this, _kind_extraInitializers), __runInitializers(this, _title_initializers, ''));
1028
+ attachmentAuthorityId = (__runInitializers(this, _title_extraInitializers), __runInitializers(this, _attachmentAuthorityId_initializers, void 0));
1029
+ attachmentRevision = (__runInitializers(this, _attachmentAuthorityId_extraInitializers), __runInitializers(this, _attachmentRevision_initializers, void 0));
1030
+ sessionId = (__runInitializers(this, _attachmentRevision_extraInitializers), __runInitializers(this, _sessionId_initializers, void 0));
1031
+ pendingAttachment = (__runInitializers(this, _sessionId_extraInitializers), __runInitializers(this, _pendingAttachment_initializers, void 0));
1032
+ lifecycle = (__runInitializers(this, _pendingAttachment_extraInitializers), __runInitializers(this, _lifecycle_initializers, void 0));
1033
+ terminal = (__runInitializers(this, _lifecycle_extraInitializers), __runInitializers(this, _terminal_initializers, void 0));
1034
+ createdAt = (__runInitializers(this, _terminal_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
1035
+ updatedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _updatedAt_initializers, void 0));
1036
+ retiringAt = (__runInitializers(this, _updatedAt_extraInitializers), __runInitializers(this, _retiringAt_initializers, void 0));
1037
+ retiredAt = (__runInitializers(this, _retiringAt_extraInitializers), __runInitializers(this, _retiredAt_initializers, void 0));
1038
+ updateId = (__runInitializers(this, _retiredAt_extraInitializers), __runInitializers(this, _updateId_initializers, void 0));
1039
+ constructor() {
1040
+ super(...arguments);
1041
+ __runInitializers(this, _updateId_extraInitializers);
1042
+ }
1043
+ };
1044
+ return ControllerResourceModel = _classThis;
1045
+ })();
1046
+ export { ControllerResourceModel };
1047
+ const maxSessionStateExchanges = 8;
1048
+ const maxSessionStateExchangeBytes = 256 * 1024;
1049
+ export const controllerSessionStateId = (controllerIdArg, projectIdArg, sessionIdArg) => `sessionstate:v1:${plugins.crypto
1050
+ .createHash('sha256')
1051
+ .update(JSON.stringify([
1052
+ controllerIdArg,
1053
+ projectIdArg,
1054
+ sessionIdArg.harnessId,
1055
+ sessionIdArg.nativeId,
1056
+ ]))
1057
+ .digest('base64url')}`;
1058
+ export function assertControllerSessionStateDocument(valueArg) {
1059
+ if (!isPlainObject(valueArg))
1060
+ throw new Error('Invalid controller session state document.');
1061
+ if (!hasExactKeys(valueArg, [
1062
+ 'id',
1063
+ 'controllerId',
1064
+ 'projectId',
1065
+ 'sessionId',
1066
+ 'scratchpad',
1067
+ 'intelligenceExchanges',
1068
+ 'updateId',
1069
+ ], ['modelChoice', 'flexProjectManagement', 'deletedAt'])
1070
+ || !isControllerId(valueArg.controllerId)
1071
+ || !isNonEmptyString(valueArg.projectId)
1072
+ || !groupIdentifierPattern.test(valueArg.projectId)
1073
+ || !isRuntimeId(valueArg.sessionId, ['opencode', 'flex'])
1074
+ || (valueArg.modelChoice !== undefined && (!isModelChoice(valueArg.modelChoice)
1075
+ || valueArg.modelChoice.harnessId !== valueArg.sessionId.harnessId))
1076
+ || valueArg.id !== controllerSessionStateId(valueArg.controllerId, valueArg.projectId, valueArg.sessionId)
1077
+ || !isBase64Url(valueArg.updateId, 32)
1078
+ || (Object.hasOwn(valueArg, 'deletedAt') && !isValidDate(valueArg.deletedAt))
1079
+ || !isPlainObject(valueArg.scratchpad)
1080
+ || !hasExactKeys(valueArg.scratchpad, ['text', 'revision'], ['updatedAt', 'updatedBy'])
1081
+ || typeof valueArg.scratchpad.text !== 'string'
1082
+ || valueArg.scratchpad.text.length > 32_768
1083
+ || Buffer.byteLength(valueArg.scratchpad.text, 'utf8') > 128 * 1024
1084
+ || !Number.isSafeInteger(valueArg.scratchpad.revision)
1085
+ || valueArg.scratchpad.revision < 0) {
1086
+ throw new Error('Invalid controller session state document.');
1087
+ }
1088
+ const hasUpdatedAt = Object.hasOwn(valueArg.scratchpad, 'updatedAt');
1089
+ const hasUpdatedBy = Object.hasOwn(valueArg.scratchpad, 'updatedBy');
1090
+ if (hasUpdatedAt !== hasUpdatedBy
1091
+ || (hasUpdatedAt && !isValidDate(valueArg.scratchpad.updatedAt))
1092
+ || (hasUpdatedBy
1093
+ && valueArg.scratchpad.updatedBy !== 'user'
1094
+ && valueArg.scratchpad.updatedBy !== 'intelligence'
1095
+ && valueArg.scratchpad.updatedBy !== 'agent'
1096
+ && valueArg.scratchpad.updatedBy !== 'application')
1097
+ || (valueArg.scratchpad.revision === 0 && hasUpdatedAt)
1098
+ || (valueArg.scratchpad.revision > 0 && !hasUpdatedAt)
1099
+ || !Array.isArray(valueArg.intelligenceExchanges)
1100
+ || valueArg.intelligenceExchanges.length > maxSessionStateExchanges
1101
+ || Buffer.byteLength(JSON.stringify(valueArg.intelligenceExchanges), 'utf8')
1102
+ > maxSessionStateExchangeBytes) {
1103
+ throw new Error('Invalid controller session state document.');
1104
+ }
1105
+ const exchangeIds = new Set();
1106
+ for (const exchange of valueArg.intelligenceExchanges) {
1107
+ if (!isPlainObject(exchange)
1108
+ || !hasExactKeys(exchange, ['id', 'question', 'status', 'createdAt'], [
1109
+ 'answer',
1110
+ 'error',
1111
+ 'model',
1112
+ 'scratchpadConflict',
1113
+ 'scratchpadRevisionAtAdmission',
1114
+ 'temporarySessionId',
1115
+ 'completedAt',
1116
+ ])
1117
+ || !isBase64Url(exchange.id, 16)
1118
+ || exchangeIds.has(exchange.id)
1119
+ || !isNonEmptyString(exchange.question)
1120
+ || exchange.question.length > 8_192
1121
+ || Buffer.byteLength(exchange.question, 'utf8') > 32 * 1024
1122
+ || !['running', 'completed', 'error'].includes(exchange.status)
1123
+ || !isValidDate(exchange.createdAt)
1124
+ || (Object.hasOwn(exchange, 'completedAt') && !isValidDate(exchange.completedAt))
1125
+ || (Object.hasOwn(exchange, 'answer')
1126
+ && (typeof exchange.answer !== 'string'
1127
+ || exchange.answer.length > 32_768
1128
+ || Buffer.byteLength(exchange.answer, 'utf8') > 128 * 1024))
1129
+ || (Object.hasOwn(exchange, 'error')
1130
+ && (typeof exchange.error !== 'string'
1131
+ || exchange.error.length < 1
1132
+ || Buffer.byteLength(exchange.error, 'utf8') > 16 * 1024))
1133
+ || (Object.hasOwn(exchange, 'model')
1134
+ && (!isNonEmptyString(exchange.model)
1135
+ || Buffer.byteLength(exchange.model, 'utf8') > 512))
1136
+ || (Object.hasOwn(exchange, 'scratchpadConflict') && exchange.scratchpadConflict !== true)
1137
+ || (Object.hasOwn(exchange, 'scratchpadRevisionAtAdmission') && (!Number.isSafeInteger(exchange.scratchpadRevisionAtAdmission)
1138
+ || exchange.scratchpadRevisionAtAdmission < 0))
1139
+ || (Object.hasOwn(exchange, 'temporarySessionId') && (!isNonEmptyString(exchange.temporarySessionId)
1140
+ || Buffer.byteLength(exchange.temporarySessionId, 'utf8') > 512))) {
1141
+ throw new Error('Invalid controller session intelligence exchange.');
1142
+ }
1143
+ exchangeIds.add(exchange.id);
1144
+ if ((exchange.status === 'running' && (Object.hasOwn(exchange, 'answer')
1145
+ || Object.hasOwn(exchange, 'error')
1146
+ || Object.hasOwn(exchange, 'completedAt')
1147
+ || Object.hasOwn(exchange, 'scratchpadConflict')
1148
+ || !Number.isSafeInteger(exchange.scratchpadRevisionAtAdmission)))
1149
+ || (exchange.status === 'completed' && (typeof exchange.answer !== 'string'
1150
+ || !isValidDate(exchange.completedAt)
1151
+ || Object.hasOwn(exchange, 'error')
1152
+ || Object.hasOwn(exchange, 'scratchpadRevisionAtAdmission')))
1153
+ || (exchange.status === 'error' && (!isNonEmptyString(exchange.error)
1154
+ || !isValidDate(exchange.completedAt)
1155
+ || Object.hasOwn(exchange, 'answer')
1156
+ || Object.hasOwn(exchange, 'scratchpadConflict')
1157
+ || Object.hasOwn(exchange, 'scratchpadRevisionAtAdmission')))) {
1158
+ throw new Error('Invalid controller session intelligence exchange state.');
1159
+ }
1160
+ }
1161
+ if (valueArg.flexProjectManagement !== undefined) {
1162
+ const projectManagement = valueArg.flexProjectManagement;
1163
+ plugins.flexharness.assertFlexProjectManagementRecord(projectManagement);
1164
+ const isTombstone = 'deletedAt' in projectManagement;
1165
+ const deletedAt = valueArg.deletedAt;
1166
+ if (valueArg.sessionId.harnessId !== 'flex'
1167
+ || isTombstone !== (deletedAt !== undefined)
1168
+ || (!isTombstone
1169
+ && projectManagement.scratchpad !== valueArg.scratchpad.text)
1170
+ || (isTombstone
1171
+ && projectManagement.deletedAt !== deletedAt?.toISOString())) {
1172
+ throw new Error('Invalid controller Flex project-management state.');
1173
+ }
1174
+ }
1175
+ if (valueArg.deletedAt !== undefined
1176
+ && (valueArg.scratchpad.text !== ''
1177
+ || valueArg.intelligenceExchanges.length !== 0
1178
+ || valueArg.modelChoice !== undefined)) {
1179
+ throw new Error('Deleted controller session state must not retain content.');
1180
+ }
1181
+ }
1182
+ let ControllerSessionStateModel = (() => {
1183
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_session_states' }), plugins.smartdata.exactPersistence({
1184
+ assertDocument: assertControllerSessionStateDocument,
1185
+ })];
1186
+ let _classDescriptor;
1187
+ let _classExtraInitializers = [];
1188
+ let _classThis;
1189
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
1190
+ let _id_decorators;
1191
+ let _id_initializers = [];
1192
+ let _id_extraInitializers = [];
1193
+ let _controllerId_decorators;
1194
+ let _controllerId_initializers = [];
1195
+ let _controllerId_extraInitializers = [];
1196
+ let _projectId_decorators;
1197
+ let _projectId_initializers = [];
1198
+ let _projectId_extraInitializers = [];
1199
+ let _sessionId_decorators;
1200
+ let _sessionId_initializers = [];
1201
+ let _sessionId_extraInitializers = [];
1202
+ let _scratchpad_decorators;
1203
+ let _scratchpad_initializers = [];
1204
+ let _scratchpad_extraInitializers = [];
1205
+ let _intelligenceExchanges_decorators;
1206
+ let _intelligenceExchanges_initializers = [];
1207
+ let _intelligenceExchanges_extraInitializers = [];
1208
+ let _flexProjectManagement_decorators;
1209
+ let _flexProjectManagement_initializers = [];
1210
+ let _flexProjectManagement_extraInitializers = [];
1211
+ let _modelChoice_decorators;
1212
+ let _modelChoice_initializers = [];
1213
+ let _modelChoice_extraInitializers = [];
1214
+ let _updateId_decorators;
1215
+ let _updateId_initializers = [];
1216
+ let _updateId_extraInitializers = [];
1217
+ let _deletedAt_decorators;
1218
+ let _deletedAt_initializers = [];
1219
+ let _deletedAt_extraInitializers = [];
1220
+ var ControllerSessionStateModel = class extends _classSuper {
1221
+ static { _classThis = this; }
1222
+ static {
1223
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
1224
+ _id_decorators = [plugins.smartdata.unI()];
1225
+ _controllerId_decorators = [plugins.smartdata.svDb()];
1226
+ _projectId_decorators = [plugins.smartdata.svDb()];
1227
+ _sessionId_decorators = [plugins.smartdata.svDb()];
1228
+ _scratchpad_decorators = [plugins.smartdata.svDb()];
1229
+ _intelligenceExchanges_decorators = [plugins.smartdata.svDb()];
1230
+ _flexProjectManagement_decorators = [plugins.smartdata.svDb()];
1231
+ _modelChoice_decorators = [plugins.smartdata.svDb()];
1232
+ _updateId_decorators = [plugins.smartdata.svDb()];
1233
+ _deletedAt_decorators = [plugins.smartdata.index({ expireAfterSeconds: 30 * 24 * 60 * 60 })];
1234
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
1235
+ __esDecorate(null, null, _controllerId_decorators, { kind: "field", name: "controllerId", static: false, private: false, access: { has: obj => "controllerId" in obj, get: obj => obj.controllerId, set: (obj, value) => { obj.controllerId = value; } }, metadata: _metadata }, _controllerId_initializers, _controllerId_extraInitializers);
1236
+ __esDecorate(null, null, _projectId_decorators, { kind: "field", name: "projectId", static: false, private: false, access: { has: obj => "projectId" in obj, get: obj => obj.projectId, set: (obj, value) => { obj.projectId = value; } }, metadata: _metadata }, _projectId_initializers, _projectId_extraInitializers);
1237
+ __esDecorate(null, null, _sessionId_decorators, { kind: "field", name: "sessionId", static: false, private: false, access: { has: obj => "sessionId" in obj, get: obj => obj.sessionId, set: (obj, value) => { obj.sessionId = value; } }, metadata: _metadata }, _sessionId_initializers, _sessionId_extraInitializers);
1238
+ __esDecorate(null, null, _scratchpad_decorators, { kind: "field", name: "scratchpad", static: false, private: false, access: { has: obj => "scratchpad" in obj, get: obj => obj.scratchpad, set: (obj, value) => { obj.scratchpad = value; } }, metadata: _metadata }, _scratchpad_initializers, _scratchpad_extraInitializers);
1239
+ __esDecorate(null, null, _intelligenceExchanges_decorators, { kind: "field", name: "intelligenceExchanges", static: false, private: false, access: { has: obj => "intelligenceExchanges" in obj, get: obj => obj.intelligenceExchanges, set: (obj, value) => { obj.intelligenceExchanges = value; } }, metadata: _metadata }, _intelligenceExchanges_initializers, _intelligenceExchanges_extraInitializers);
1240
+ __esDecorate(null, null, _flexProjectManagement_decorators, { kind: "field", name: "flexProjectManagement", static: false, private: false, access: { has: obj => "flexProjectManagement" in obj, get: obj => obj.flexProjectManagement, set: (obj, value) => { obj.flexProjectManagement = value; } }, metadata: _metadata }, _flexProjectManagement_initializers, _flexProjectManagement_extraInitializers);
1241
+ __esDecorate(null, null, _modelChoice_decorators, { kind: "field", name: "modelChoice", static: false, private: false, access: { has: obj => "modelChoice" in obj, get: obj => obj.modelChoice, set: (obj, value) => { obj.modelChoice = value; } }, metadata: _metadata }, _modelChoice_initializers, _modelChoice_extraInitializers);
1242
+ __esDecorate(null, null, _updateId_decorators, { kind: "field", name: "updateId", static: false, private: false, access: { has: obj => "updateId" in obj, get: obj => obj.updateId, set: (obj, value) => { obj.updateId = value; } }, metadata: _metadata }, _updateId_initializers, _updateId_extraInitializers);
1243
+ __esDecorate(null, null, _deletedAt_decorators, { kind: "field", name: "deletedAt", static: false, private: false, access: { has: obj => "deletedAt" in obj, get: obj => obj.deletedAt, set: (obj, value) => { obj.deletedAt = value; } }, metadata: _metadata }, _deletedAt_initializers, _deletedAt_extraInitializers);
1244
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
1245
+ ControllerSessionStateModel = _classThis = _classDescriptor.value;
1246
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1247
+ __runInitializers(_classThis, _classExtraInitializers);
1248
+ }
1249
+ id = __runInitializers(this, _id_initializers, void 0);
1250
+ controllerId = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _controllerId_initializers, void 0));
1251
+ projectId = (__runInitializers(this, _controllerId_extraInitializers), __runInitializers(this, _projectId_initializers, void 0));
1252
+ sessionId = (__runInitializers(this, _projectId_extraInitializers), __runInitializers(this, _sessionId_initializers, void 0));
1253
+ scratchpad = (__runInitializers(this, _sessionId_extraInitializers), __runInitializers(this, _scratchpad_initializers, void 0));
1254
+ intelligenceExchanges = (__runInitializers(this, _scratchpad_extraInitializers), __runInitializers(this, _intelligenceExchanges_initializers, void 0));
1255
+ flexProjectManagement = (__runInitializers(this, _intelligenceExchanges_extraInitializers), __runInitializers(this, _flexProjectManagement_initializers, void 0));
1256
+ modelChoice = (__runInitializers(this, _flexProjectManagement_extraInitializers), __runInitializers(this, _modelChoice_initializers, void 0));
1257
+ updateId = (__runInitializers(this, _modelChoice_extraInitializers), __runInitializers(this, _updateId_initializers, void 0));
1258
+ deletedAt = (__runInitializers(this, _updateId_extraInitializers), __runInitializers(this, _deletedAt_initializers, void 0));
1259
+ constructor() {
1260
+ super(...arguments);
1261
+ __runInitializers(this, _deletedAt_extraInitializers);
1262
+ }
1263
+ };
1264
+ return ControllerSessionStateModel = _classThis;
1265
+ })();
1266
+ export { ControllerSessionStateModel };
1267
+ export const assertControllerTempPasswordDocument = (valueArg) => {
1268
+ if (!isPlainObject(valueArg))
1269
+ throw new Error('Invalid controller temp password document.');
1270
+ if (!hasExactKeys(valueArg, ['id', 'controllerId', 'secretHash', 'createdAt', 'expiresAt'])
1271
+ || !isNonEmptyString(valueArg.id)
1272
+ || valueArg.id.length > 512
1273
+ || !isNonEmptyString(valueArg.controllerId)
1274
+ || !/^controller:[1-9][0-9]{0,4}$/.test(valueArg.controllerId)
1275
+ || !isBase64Url(valueArg.secretHash, 32)
1276
+ || !isValidDate(valueArg.createdAt)
1277
+ || !isValidDate(valueArg.expiresAt)
1278
+ || valueArg.expiresAt.getTime() <= valueArg.createdAt.getTime()) {
1279
+ throw new Error('Invalid controller temp password document.');
1280
+ }
1281
+ };
1282
+ let ControllerTempPasswordModel = (() => {
1283
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_temp_passwords' }), plugins.smartdata.exactPersistence({
1284
+ assertDocument: assertControllerTempPasswordDocument,
1285
+ })];
1286
+ let _classDescriptor;
1287
+ let _classExtraInitializers = [];
1288
+ let _classThis;
1289
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
1290
+ let _id_decorators;
1291
+ let _id_initializers = [];
1292
+ let _id_extraInitializers = [];
1293
+ let _controllerId_decorators;
1294
+ let _controllerId_initializers = [];
1295
+ let _controllerId_extraInitializers = [];
1296
+ let _secretHash_decorators;
1297
+ let _secretHash_initializers = [];
1298
+ let _secretHash_extraInitializers = [];
1299
+ let _createdAt_decorators;
1300
+ let _createdAt_initializers = [];
1301
+ let _createdAt_extraInitializers = [];
1302
+ let _expiresAt_decorators;
1303
+ let _expiresAt_initializers = [];
1304
+ let _expiresAt_extraInitializers = [];
1305
+ var ControllerTempPasswordModel = class extends _classSuper {
1306
+ static { _classThis = this; }
1307
+ static {
1308
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
1309
+ _id_decorators = [plugins.smartdata.unI()];
1310
+ _controllerId_decorators = [plugins.smartdata.svDb()];
1311
+ _secretHash_decorators = [plugins.smartdata.svDb()];
1312
+ _createdAt_decorators = [plugins.smartdata.svDb()];
1313
+ _expiresAt_decorators = [plugins.smartdata.index({ expireAfterSeconds: 0 })];
1314
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
1315
+ __esDecorate(null, null, _controllerId_decorators, { kind: "field", name: "controllerId", static: false, private: false, access: { has: obj => "controllerId" in obj, get: obj => obj.controllerId, set: (obj, value) => { obj.controllerId = value; } }, metadata: _metadata }, _controllerId_initializers, _controllerId_extraInitializers);
1316
+ __esDecorate(null, null, _secretHash_decorators, { kind: "field", name: "secretHash", static: false, private: false, access: { has: obj => "secretHash" in obj, get: obj => obj.secretHash, set: (obj, value) => { obj.secretHash = value; } }, metadata: _metadata }, _secretHash_initializers, _secretHash_extraInitializers);
1317
+ __esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
1318
+ __esDecorate(null, null, _expiresAt_decorators, { kind: "field", name: "expiresAt", static: false, private: false, access: { has: obj => "expiresAt" in obj, get: obj => obj.expiresAt, set: (obj, value) => { obj.expiresAt = value; } }, metadata: _metadata }, _expiresAt_initializers, _expiresAt_extraInitializers);
1319
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
1320
+ ControllerTempPasswordModel = _classThis = _classDescriptor.value;
1321
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1322
+ __runInitializers(_classThis, _classExtraInitializers);
1323
+ }
1324
+ id = __runInitializers(this, _id_initializers, void 0);
1325
+ controllerId = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _controllerId_initializers, void 0));
1326
+ secretHash = (__runInitializers(this, _controllerId_extraInitializers), __runInitializers(this, _secretHash_initializers, void 0));
1327
+ createdAt = (__runInitializers(this, _secretHash_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
1328
+ expiresAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _expiresAt_initializers, void 0));
1329
+ constructor() {
1330
+ super(...arguments);
1331
+ __runInitializers(this, _expiresAt_extraInitializers);
1332
+ }
1333
+ };
1334
+ return ControllerTempPasswordModel = _classThis;
1335
+ })();
1336
+ export { ControllerTempPasswordModel };
1337
+ let ControllerAuditEventModel = (() => {
1338
+ let _classDecorators = [plugins.smartdata.managed({ collectionName: 'opencode_controller_audit' }), plugins.smartdata.exactPersistence({
1339
+ assertDocument: assertControllerAuditEventDocument,
1340
+ })];
1341
+ let _classDescriptor;
1342
+ let _classExtraInitializers = [];
1343
+ let _classThis;
1344
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
1345
+ let _id_decorators;
1346
+ let _id_initializers = [];
1347
+ let _id_extraInitializers = [];
1348
+ let _controllerId_decorators;
1349
+ let _controllerId_initializers = [];
1350
+ let _controllerId_extraInitializers = [];
1351
+ let _timestamp_decorators;
1352
+ let _timestamp_initializers = [];
1353
+ let _timestamp_extraInitializers = [];
1354
+ let _type_decorators;
1355
+ let _type_initializers = [];
1356
+ let _type_extraInitializers = [];
1357
+ let _outcome_decorators;
1358
+ let _outcome_initializers = [];
1359
+ let _outcome_extraInitializers = [];
1360
+ let _operationId_decorators;
1361
+ let _operationId_initializers = [];
1362
+ let _operationId_extraInitializers = [];
1363
+ let _peerId_decorators;
1364
+ let _peerId_initializers = [];
1365
+ let _peerId_extraInitializers = [];
1366
+ let _credentialId_decorators;
1367
+ let _credentialId_initializers = [];
1368
+ let _credentialId_extraInitializers = [];
1369
+ let _sessionId_decorators;
1370
+ let _sessionId_initializers = [];
1371
+ let _sessionId_extraInitializers = [];
1372
+ let _requestId_decorators;
1373
+ let _requestId_initializers = [];
1374
+ let _requestId_extraInitializers = [];
1375
+ var ControllerAuditEventModel = class extends _classSuper {
1376
+ static { _classThis = this; }
1377
+ static {
1378
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
1379
+ _id_decorators = [plugins.smartdata.unI()];
1380
+ _controllerId_decorators = [plugins.smartdata.svDb()];
1381
+ _timestamp_decorators = [plugins.smartdata.index({ expireAfterSeconds: auditRetentionSeconds })];
1382
+ _type_decorators = [plugins.smartdata.svDb()];
1383
+ _outcome_decorators = [plugins.smartdata.svDb()];
1384
+ _operationId_decorators = [plugins.smartdata.svDb()];
1385
+ _peerId_decorators = [plugins.smartdata.svDb()];
1386
+ _credentialId_decorators = [plugins.smartdata.svDb()];
1387
+ _sessionId_decorators = [plugins.smartdata.svDb()];
1388
+ _requestId_decorators = [plugins.smartdata.svDb()];
1389
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
1390
+ __esDecorate(null, null, _controllerId_decorators, { kind: "field", name: "controllerId", static: false, private: false, access: { has: obj => "controllerId" in obj, get: obj => obj.controllerId, set: (obj, value) => { obj.controllerId = value; } }, metadata: _metadata }, _controllerId_initializers, _controllerId_extraInitializers);
1391
+ __esDecorate(null, null, _timestamp_decorators, { kind: "field", name: "timestamp", static: false, private: false, access: { has: obj => "timestamp" in obj, get: obj => obj.timestamp, set: (obj, value) => { obj.timestamp = value; } }, metadata: _metadata }, _timestamp_initializers, _timestamp_extraInitializers);
1392
+ __esDecorate(null, null, _type_decorators, { kind: "field", name: "type", static: false, private: false, access: { has: obj => "type" in obj, get: obj => obj.type, set: (obj, value) => { obj.type = value; } }, metadata: _metadata }, _type_initializers, _type_extraInitializers);
1393
+ __esDecorate(null, null, _outcome_decorators, { kind: "field", name: "outcome", static: false, private: false, access: { has: obj => "outcome" in obj, get: obj => obj.outcome, set: (obj, value) => { obj.outcome = value; } }, metadata: _metadata }, _outcome_initializers, _outcome_extraInitializers);
1394
+ __esDecorate(null, null, _operationId_decorators, { kind: "field", name: "operationId", static: false, private: false, access: { has: obj => "operationId" in obj, get: obj => obj.operationId, set: (obj, value) => { obj.operationId = value; } }, metadata: _metadata }, _operationId_initializers, _operationId_extraInitializers);
1395
+ __esDecorate(null, null, _peerId_decorators, { kind: "field", name: "peerId", static: false, private: false, access: { has: obj => "peerId" in obj, get: obj => obj.peerId, set: (obj, value) => { obj.peerId = value; } }, metadata: _metadata }, _peerId_initializers, _peerId_extraInitializers);
1396
+ __esDecorate(null, null, _credentialId_decorators, { kind: "field", name: "credentialId", static: false, private: false, access: { has: obj => "credentialId" in obj, get: obj => obj.credentialId, set: (obj, value) => { obj.credentialId = value; } }, metadata: _metadata }, _credentialId_initializers, _credentialId_extraInitializers);
1397
+ __esDecorate(null, null, _sessionId_decorators, { kind: "field", name: "sessionId", static: false, private: false, access: { has: obj => "sessionId" in obj, get: obj => obj.sessionId, set: (obj, value) => { obj.sessionId = value; } }, metadata: _metadata }, _sessionId_initializers, _sessionId_extraInitializers);
1398
+ __esDecorate(null, null, _requestId_decorators, { kind: "field", name: "requestId", static: false, private: false, access: { has: obj => "requestId" in obj, get: obj => obj.requestId, set: (obj, value) => { obj.requestId = value; } }, metadata: _metadata }, _requestId_initializers, _requestId_extraInitializers);
1399
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
1400
+ ControllerAuditEventModel = _classThis = _classDescriptor.value;
1401
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1402
+ __runInitializers(_classThis, _classExtraInitializers);
1403
+ }
1404
+ id = __runInitializers(this, _id_initializers, void 0);
1405
+ controllerId = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _controllerId_initializers, void 0));
1406
+ timestamp = (__runInitializers(this, _controllerId_extraInitializers), __runInitializers(this, _timestamp_initializers, void 0));
1407
+ type = (__runInitializers(this, _timestamp_extraInitializers), __runInitializers(this, _type_initializers, void 0));
1408
+ outcome = (__runInitializers(this, _type_extraInitializers), __runInitializers(this, _outcome_initializers, void 0));
1409
+ operationId = (__runInitializers(this, _outcome_extraInitializers), __runInitializers(this, _operationId_initializers, void 0));
1410
+ peerId = (__runInitializers(this, _operationId_extraInitializers), __runInitializers(this, _peerId_initializers, void 0));
1411
+ credentialId = (__runInitializers(this, _peerId_extraInitializers), __runInitializers(this, _credentialId_initializers, void 0));
1412
+ sessionId = (__runInitializers(this, _credentialId_extraInitializers), __runInitializers(this, _sessionId_initializers, void 0));
1413
+ requestId = (__runInitializers(this, _sessionId_extraInitializers), __runInitializers(this, _requestId_initializers, void 0));
1414
+ constructor() {
1415
+ super(...arguments);
1416
+ __runInitializers(this, _requestId_extraInitializers);
1417
+ }
1418
+ };
1419
+ return ControllerAuditEventModel = _classThis;
1420
+ })();
1421
+ export { ControllerAuditEventModel };
1422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hdXRobW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY2xhc3Nlcy5hdXRobW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQ0wseUJBQXlCLEdBTzFCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLDZDQUE2QyxHQU85QyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxzQkFBc0IsR0FNdkIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQzVDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkMsS0FBSztJQUNMLE9BQU87SUFDUCxRQUFRO0lBQ1IsVUFBVTtJQUNWLEtBQUs7SUFDTCxZQUFZO0lBQ1osS0FBSztDQUNOLENBQUMsQ0FBQztBQUNILE1BQU0sZUFBZSxHQUF3QixJQUFJLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2hGLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUM5RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVoRCxNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQWlCLEVBQXVDLEVBQUUsQ0FDL0UsT0FBTyxRQUFRLEtBQUssUUFBUTtPQUN6QixRQUFRLEtBQUssSUFBSTtPQUNqQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO09BQ3hCLENBQ0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUztXQUNqRCxN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