@quadnix/octo 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/README.md +108 -21
  2. package/dist/app.type.d.ts +141 -22
  3. package/dist/app.type.js.map +1 -1
  4. package/dist/decorators/model.decorator.d.ts +3 -5
  5. package/dist/decorators/model.decorator.js +1 -6
  6. package/dist/decorators/model.decorator.js.map +1 -1
  7. package/dist/decorators/on-event.decorator.d.ts +2 -2
  8. package/dist/decorators/on-event.decorator.js.map +1 -1
  9. package/dist/decorators/resource.decorator.d.ts +50 -1
  10. package/dist/decorators/resource.decorator.js +38 -1
  11. package/dist/decorators/resource.decorator.js.map +1 -1
  12. package/dist/errors/schema.error.d.ts +8 -1
  13. package/dist/errors/schema.error.js +5 -1
  14. package/dist/errors/schema.error.js.map +1 -1
  15. package/dist/errors/terraform.error.d.ts +4 -3
  16. package/dist/errors/terraform.error.js +4 -3
  17. package/dist/errors/terraform.error.js.map +1 -1
  18. package/dist/errors/transaction.error.d.ts +32 -2
  19. package/dist/errors/transaction.error.js +22 -0
  20. package/dist/errors/transaction.error.js.map +1 -1
  21. package/dist/events/action.event.d.ts +8 -2
  22. package/dist/events/action.event.js +2 -2
  23. package/dist/events/action.event.js.map +1 -1
  24. package/dist/events/command.event.d.ts +43 -0
  25. package/dist/events/command.event.js +33 -0
  26. package/dist/events/command.event.js.map +1 -0
  27. package/dist/events/event.model.d.ts +7 -5
  28. package/dist/events/event.model.js +5 -3
  29. package/dist/events/event.model.js.map +1 -1
  30. package/dist/events/hook/commit.hook.event.d.ts +1 -1
  31. package/dist/events/hook/commit.hook.event.js.map +1 -1
  32. package/dist/events/hook/hook.event.d.ts +1 -1
  33. package/dist/events/hook/hook.event.js.map +1 -1
  34. package/dist/events/hook/model.hook.event.d.ts +1 -1
  35. package/dist/events/hook/model.hook.event.js.map +1 -1
  36. package/dist/events/hook/resource.hook.event.d.ts +1 -1
  37. package/dist/events/hook/resource.hook.event.js.map +1 -1
  38. package/dist/events/index.d.ts +2 -0
  39. package/dist/events/index.js +2 -0
  40. package/dist/events/index.js.map +1 -1
  41. package/dist/events/mode-result.event.d.ts +1 -1
  42. package/dist/events/mode-result.event.js.map +1 -1
  43. package/dist/events/mode.event.d.ts +8 -4
  44. package/dist/events/mode.event.js.map +1 -1
  45. package/dist/events/module.event.d.ts +7 -3
  46. package/dist/events/module.event.js +3 -2
  47. package/dist/events/module.event.js.map +1 -1
  48. package/dist/events/registration.event.d.ts +1 -1
  49. package/dist/events/registration.event.js.map +1 -1
  50. package/dist/events/serialization.event.d.ts +1 -1
  51. package/dist/events/serialization.event.js.map +1 -1
  52. package/dist/events/state.event.d.ts +102 -0
  53. package/dist/events/state.event.js +69 -0
  54. package/dist/events/state.event.js.map +1 -0
  55. package/dist/events/terraform.event.d.ts +37 -1
  56. package/dist/events/terraform.event.js +24 -0
  57. package/dist/events/terraform.event.js.map +1 -1
  58. package/dist/events/transaction.event.d.ts +3 -3
  59. package/dist/events/transaction.event.js +1 -1
  60. package/dist/events/transaction.event.js.map +1 -1
  61. package/dist/functions/container/container.js +1 -1
  62. package/dist/functions/container/container.js.map +1 -1
  63. package/dist/functions/container/test-container.js +2 -2
  64. package/dist/functions/container/test-container.js.map +1 -1
  65. package/dist/functions/dependency/dependency.d.ts +9 -22
  66. package/dist/functions/dependency/dependency.js +5 -1
  67. package/dist/functions/dependency/dependency.js.map +1 -1
  68. package/dist/functions/diff/diff.d.ts +14 -7
  69. package/dist/functions/diff/diff.js.map +1 -1
  70. package/dist/functions/node/node-action.abstract.d.ts +8 -10
  71. package/dist/functions/node/node-action.abstract.js +10 -16
  72. package/dist/functions/node/node-action.abstract.js.map +1 -1
  73. package/dist/functions/node/node.abstract.js +21 -10
  74. package/dist/functions/node/node.abstract.js.map +1 -1
  75. package/dist/functions/node/node.interface.d.ts +2 -1
  76. package/dist/functions/schema/schema.js +1 -1
  77. package/dist/functions/schema/schema.js.map +1 -1
  78. package/dist/index.d.ts +8 -6
  79. package/dist/index.js +6 -4
  80. package/dist/index.js.map +1 -1
  81. package/dist/index.type.d.ts +5 -0
  82. package/dist/index.type.js +2 -0
  83. package/dist/index.type.js.map +1 -0
  84. package/dist/main.d.ts +4 -3
  85. package/dist/main.js +27 -11
  86. package/dist/main.js.map +1 -1
  87. package/dist/models/account/account.model.d.ts +6 -0
  88. package/dist/models/account/account.model.js +16 -0
  89. package/dist/models/account/account.model.js.map +1 -1
  90. package/dist/models/app/app.model.d.ts +0 -10
  91. package/dist/models/app/app.model.js +0 -30
  92. package/dist/models/app/app.model.js.map +1 -1
  93. package/dist/models/deployment/deployment.schema.d.ts +4 -0
  94. package/dist/models/deployment/deployment.schema.js +4 -0
  95. package/dist/models/deployment/deployment.schema.js.map +1 -1
  96. package/dist/models/environment/environment.model.d.ts +2 -2
  97. package/dist/models/environment/environment.model.js +2 -2
  98. package/dist/models/execution/execution.model.d.ts +1 -1
  99. package/dist/models/execution/execution.model.js +1 -1
  100. package/dist/models/image/image.model.d.ts +4 -3
  101. package/dist/models/image/image.model.js +7 -6
  102. package/dist/models/image/image.model.js.map +1 -1
  103. package/dist/models/model.abstract.js +1 -1
  104. package/dist/models/model.abstract.js.map +1 -1
  105. package/dist/models/pipeline/pipeline.model.d.ts +1 -1
  106. package/dist/models/pipeline/pipeline.model.js +1 -1
  107. package/dist/models/server/server.model.d.ts +2 -2
  108. package/dist/models/server/server.model.js +2 -2
  109. package/dist/models/service/service.model.d.ts +28 -11
  110. package/dist/models/service/service.model.js +56 -16
  111. package/dist/models/service/service.model.js.map +1 -1
  112. package/dist/models/service/service.schema.d.ts +46 -2
  113. package/dist/models/service/service.schema.js +54 -2
  114. package/dist/models/service/service.schema.js.map +1 -1
  115. package/dist/modes/commit.mode.d.ts +2 -2
  116. package/dist/modes/commit.mode.js +2 -2
  117. package/dist/modes/generate.mode.d.ts +2 -1
  118. package/dist/modes/generate.mode.js +3 -2
  119. package/dist/modes/generate.mode.js.map +1 -1
  120. package/dist/modes/run-action.mode.d.ts +1 -1
  121. package/dist/modes/run-action.mode.js +1 -1
  122. package/dist/modes/validate.mode.d.ts +24 -0
  123. package/dist/modes/validate.mode.js +89 -11
  124. package/dist/modes/validate.mode.js.map +1 -1
  125. package/dist/modules/module.container.d.ts +7 -1
  126. package/dist/modules/module.container.js +41 -5
  127. package/dist/modules/module.container.js.map +1 -1
  128. package/dist/modules/test-module.container.js +35 -83
  129. package/dist/modules/test-module.container.js.map +1 -1
  130. package/dist/overlays/overlay.abstract.js +1 -1
  131. package/dist/overlays/overlay.abstract.js.map +1 -1
  132. package/dist/resources/resource-action.interface.d.ts +4 -2
  133. package/dist/resources/resource.abstract.d.ts +50 -8
  134. package/dist/resources/resource.abstract.js +63 -32
  135. package/dist/resources/resource.abstract.js.map +1 -1
  136. package/dist/resources/resource.interface.d.ts +0 -2
  137. package/dist/resources/resource.schema.d.ts +11 -1
  138. package/dist/resources/resource.schema.js +11 -1
  139. package/dist/resources/resource.schema.js.map +1 -1
  140. package/dist/services/event/event.service.d.ts +2 -2
  141. package/dist/services/event/event.service.js.map +1 -1
  142. package/dist/services/input/input.service.d.ts +30 -2
  143. package/dist/services/input/input.service.js +71 -4
  144. package/dist/services/input/input.service.js.map +1 -1
  145. package/dist/services/serialization/model/model-serialization.service.d.ts +4 -6
  146. package/dist/services/serialization/model/model-serialization.service.js +20 -17
  147. package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
  148. package/dist/services/serialization/resource/resource-serialization.service.d.ts +7 -6
  149. package/dist/services/serialization/resource/resource-serialization.service.js +25 -12
  150. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
  151. package/dist/services/state-management/local.state-provider.d.ts +25 -9
  152. package/dist/services/state-management/local.state-provider.js +127 -21
  153. package/dist/services/state-management/local.state-provider.js.map +1 -1
  154. package/dist/services/state-management/remote.state-provider.d.ts +216 -0
  155. package/dist/services/state-management/remote.state-provider.js +645 -0
  156. package/dist/services/state-management/remote.state-provider.js.map +1 -0
  157. package/dist/services/state-management/state-management.service.d.ts +83 -40
  158. package/dist/services/state-management/state-management.service.js +130 -26
  159. package/dist/services/state-management/state-management.service.js.map +1 -1
  160. package/dist/services/state-management/state-provider.interface.d.ts +50 -9
  161. package/dist/services/state-management/state-provider.interface.js +14 -1
  162. package/dist/services/state-management/state-provider.interface.js.map +1 -1
  163. package/dist/services/state-management/terraform-state.service.d.ts +32 -9
  164. package/dist/services/state-management/terraform-state.service.js +64 -21
  165. package/dist/services/state-management/terraform-state.service.js.map +1 -1
  166. package/dist/services/state-management/test.state-provider.d.ts +11 -10
  167. package/dist/services/state-management/test.state-provider.js +35 -14
  168. package/dist/services/state-management/test.state-provider.js.map +1 -1
  169. package/dist/services/terraform/terraform.service.d.ts +57 -3
  170. package/dist/services/terraform/terraform.service.js +95 -8
  171. package/dist/services/terraform/terraform.service.js.map +1 -1
  172. package/dist/services/terraform/terraform.type.js +1 -1
  173. package/dist/services/terraform/terraform.type.js.map +1 -1
  174. package/dist/services/transaction/transaction.service.d.ts +29 -5
  175. package/dist/services/transaction/transaction.service.js +198 -34
  176. package/dist/services/transaction/transaction.service.js.map +1 -1
  177. package/dist/services/validation/validation.service.d.ts +2 -2
  178. package/dist/{functions → utilities}/diff/diff.utility.d.ts +2 -1
  179. package/dist/{functions → utilities}/diff/diff.utility.js +4 -3
  180. package/dist/utilities/diff/diff.utility.js.map +1 -0
  181. package/dist/utilities/file/file.utility.d.ts +6 -7
  182. package/dist/utilities/file/file.utility.js +13 -68
  183. package/dist/utilities/file/file.utility.js.map +1 -1
  184. package/dist/utilities/hcl/hcl.utility.d.ts +83 -16
  185. package/dist/utilities/hcl/hcl.utility.js +200 -27
  186. package/dist/utilities/hcl/hcl.utility.js.map +1 -1
  187. package/dist/utilities/http/http.utility.d.ts +57 -0
  188. package/dist/utilities/http/http.utility.js +98 -0
  189. package/dist/utilities/http/http.utility.js.map +1 -0
  190. package/dist/utilities/string/string.utility.d.ts +23 -3
  191. package/dist/utilities/string/string.utility.js +29 -3
  192. package/dist/utilities/string/string.utility.js.map +1 -1
  193. package/dist/utilities/terraform/terraform.utility.d.ts +70 -21
  194. package/dist/utilities/terraform/terraform.utility.js +255 -66
  195. package/dist/utilities/terraform/terraform.utility.js.map +1 -1
  196. package/dist/utilities/test-helpers/test-classes.d.ts +19 -0
  197. package/dist/utilities/test-helpers/test-classes.js +22 -0
  198. package/dist/utilities/test-helpers/test-classes.js.map +1 -1
  199. package/dist/utilities/test-helpers/test-models.d.ts +8 -1
  200. package/dist/utilities/test-helpers/test-models.js +25 -12
  201. package/dist/utilities/test-helpers/test-models.js.map +1 -1
  202. package/dist/utilities/test-helpers/test-modes.d.ts +1 -1
  203. package/dist/utilities/test-helpers/test-modes.js +36 -13
  204. package/dist/utilities/test-helpers/test-modes.js.map +1 -1
  205. package/dist/utilities/test-helpers/test-modules.d.ts +6 -0
  206. package/dist/utilities/test-helpers/test-modules.js +6 -0
  207. package/dist/utilities/test-helpers/test-modules.js.map +1 -1
  208. package/dist/utilities/test-helpers/test-overlays.d.ts +3 -1
  209. package/dist/utilities/test-helpers/test-overlays.js +8 -2
  210. package/dist/utilities/test-helpers/test-overlays.js.map +1 -1
  211. package/dist/utilities/test-helpers/test-resources.d.ts +4 -2
  212. package/dist/utilities/test-helpers/test-resources.js +22 -20
  213. package/dist/utilities/test-helpers/test-resources.js.map +1 -1
  214. package/package.json +7 -2
  215. package/dist/functions/diff/diff.utility.js.map +0 -1
  216. package/dist/services/state-management/file-app-lock.utility.d.ts +0 -43
  217. package/dist/services/state-management/file-app-lock.utility.js +0 -124
  218. package/dist/services/state-management/file-app-lock.utility.js.map +0 -1
  219. package/dist/services/state-management/local-encryption.state-provider.d.ts +0 -71
  220. package/dist/services/state-management/local-encryption.state-provider.js +0 -116
  221. package/dist/services/state-management/local-encryption.state-provider.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.state-provider.js","sourceRoot":"","sources":["../../../src/services/state-management/remote.state-provider.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,63 @@
1
1
  import type { ModelSerializedOutput, ResourceSerializedOutput, TerraformFolderOutput, TerraformResourceOutput } from '../../app.type.js';
2
- import type { IStateProvider } from './state-provider.interface.js';
2
+ import { type IStateProvider } from './state-provider.interface.js';
3
3
  /**
4
- * The `userData` persisted alongside the model graph in `models.json`.
4
+ * The `userData` written beside the model graph in `models.json`.
5
+ *
6
+ * @group Services/State Management
5
7
  */
6
- interface ModelStateUserData {
8
+ export type ModelStateUserData = {
7
9
  terraformFolders?: TerraformFolderOutput[];
8
10
  version?: number;
9
- }
11
+ };
10
12
  /**
11
- * The `userData` persisted alongside the resource graph in `resources-actual.json` /
13
+ * The `userData` written beside the resource graph in `resources-actual.json` and
12
14
  * `resources-old.json`.
15
+ *
16
+ * @group Services/State Management
13
17
  */
14
- interface ResourceStateUserData {
18
+ export type ResourceStateUserData = {
15
19
  terraformFolders?: TerraformFolderOutput[];
16
20
  terraformResources?: TerraformResourceOutput[];
17
21
  version?: number;
18
- }
22
+ };
19
23
  /**
20
- * What an external resource's action made of it, recorded the moment the action succeeded: the
21
- * inputs it was given, the properties it was asked for, and the response it produced.
24
+ * `models.json`: the model graph as it stands after the last commit.
22
25
  *
23
- * It exists only between that moment and the `commit` that folds it into the resource graph, and
24
- * while it exists it is the truth about that resource - octo state has not caught up yet.
26
+ * @group Services/State Management
25
27
  */
26
- interface ExternalResourceState {
27
- inputs: Record<string, unknown>;
28
- properties: Record<string, unknown>;
29
- response: Record<string, string>;
30
- }
28
+ export type ModelStateFile = {
29
+ data: ModelSerializedOutput;
30
+ userData: ModelStateUserData;
31
+ };
32
+ /**
33
+ * `resources-actual.json`, the resource graph as it stands after the last commit, and
34
+ * `resources-old.json`, the resource graph as intent described it on the last commit.
35
+ *
36
+ * @group Services/State Management
37
+ */
38
+ export type ResourceStateFile = {
39
+ data: ResourceSerializedOutput;
40
+ userData: ResourceStateUserData;
41
+ };
42
+ /**
43
+ * `resource-state-<resourceId>.json`, with each `/` of the id written as `.`: what an external
44
+ * resource's action made of it — the inputs it was given, the properties it was asked for, and the
45
+ * response it produced. It exists only between the action succeeding and the `commit` that folds it
46
+ * into the resource graph, and while it exists it is the truth about that resource.
47
+ *
48
+ * @group Services/State Management
49
+ */
50
+ export type ExternalResourceStateFile = {
51
+ inputs: {
52
+ [key: string]: unknown;
53
+ };
54
+ properties: {
55
+ [key: string]: unknown;
56
+ };
57
+ response: {
58
+ [key: string]: string;
59
+ };
60
+ };
31
61
  /**
32
62
  * Reads and writes Octo's state files through the configured {@link IStateProvider}.
33
63
  *
@@ -41,6 +71,11 @@ export declare class StateManagementService {
41
71
  * The resource graph as it stands after the last commit.
42
72
  */
43
73
  readonly actualResourceStateFileName: string;
74
+ /**
75
+ * The prefix of each record an external resource's action writes, until `commit` folds it into
76
+ * the resource graph.
77
+ */
78
+ readonly externalResourceStateFileNamePrefix: string;
44
79
  /**
45
80
  * The model graph as it stands after the last commit.
46
81
  */
@@ -49,7 +84,6 @@ export declare class StateManagementService {
49
84
  * The resource graph as intent described it on the last commit.
50
85
  */
51
86
  readonly oldResourceStateFileName: string;
52
- private readonly externalResourceStateFileNamePrefix;
53
87
  private readonly stateProvider;
54
88
  /**
55
89
  * @param stateProvider Where state is read from and written to.
@@ -61,10 +95,6 @@ export declare class StateManagementService {
61
95
  * @internal
62
96
  */
63
97
  deleteExternalResourceState(resourceId: string): Promise<void>;
64
- /**
65
- * Deletes a state file. Deleting one that is not there is not an error.
66
- */
67
- deleteState(stateFileName: string): Promise<void>;
68
98
  /**
69
99
  * The id of the lock currently held, or `undefined` when the app is unlocked.
70
100
  */
@@ -75,16 +105,13 @@ export declare class StateManagementService {
75
105
  *
76
106
  * @internal
77
107
  */
78
- getExternalResourceState(resourceId: string): Promise<ExternalResourceState | undefined>;
108
+ getExternalResourceState(resourceId: string): Promise<ExternalResourceStateFile | undefined>;
79
109
  /**
80
110
  * Reads the model graph. Returns an empty graph when no state exists yet.
81
111
  */
82
112
  getModelState(stateFileName: string, { freeze }?: {
83
113
  freeze?: boolean;
84
- }): Promise<{
85
- data: ModelSerializedOutput;
86
- userData: ModelStateUserData;
87
- }>;
114
+ }): Promise<ModelStateFile>;
88
115
  /**
89
116
  * The response of one resource: what an external resource's action published and `commit` has not
90
117
  * recorded yet, falling back to what the last commit recorded. Undefined when neither holds it.
@@ -97,13 +124,11 @@ export declare class StateManagementService {
97
124
  */
98
125
  getResourceState(stateFileName: string, { freeze }?: {
99
126
  freeze?: boolean;
100
- }): Promise<{
101
- data: ResourceSerializedOutput;
102
- userData: ResourceStateUserData;
103
- }>;
127
+ }): Promise<ResourceStateFile>;
104
128
  /**
105
129
  * Reads a state file as-is.
106
130
  *
131
+ * @param stateFileName The file's name in the state provider.
107
132
  * @param defaultValue Returned instead of throwing when the file does not exist.
108
133
  */
109
134
  getState(stateFileName: string, defaultValue?: any): Promise<Buffer>;
@@ -124,20 +149,32 @@ export declare class StateManagementService {
124
149
  */
125
150
  listExternalResourceStateIds(): Promise<string[]>;
126
151
  /**
127
- * Takes the app lock and returns its id.
152
+ * The names of the state files whose name starts with `prefix`. See {@link IStateProvider.listStates}.
153
+ */
154
+ listStates(prefix: string): Promise<string[]>;
155
+ /**
156
+ * Takes the app lock and returns its id. With `lockId`, resumes the run already holding it.
157
+ *
158
+ * A new lock is refused while the state holds a journal file of any command but `generate`,
159
+ * `validate` or `lock`: a run that finished without its journal being archived.
128
160
  *
129
- * @throws {@link TransactionError} When a lock is held, naming the id that holds it.
161
+ * @throws {@link AppLockError}
162
+ * * When a lock is held, naming the id that holds it.
163
+ * * When `lockId` is given and is not the lock held.
164
+ * * When the state holds journal files of an unfinished run.
130
165
  */
131
- lockApp(): Promise<{
132
- lockId: string;
133
- }>;
166
+ lockApp(lockId?: string): ReturnType<IStateProvider['lockApp']>;
167
+ /**
168
+ * Brings the state up to the newest a run may plan against. See {@link IStateProvider.refreshState}.
169
+ */
170
+ refreshState(): Promise<Awaited<ReturnType<IStateProvider['refreshState']>>>;
134
171
  /**
135
172
  * Records what an external resource's action made of it. The next run reads it back rather than
136
173
  * asking the resource graph, which does not learn any of this until `commit`.
137
174
  *
138
175
  * @internal
139
176
  */
140
- saveExternalResourceState(resourceId: string, state: ExternalResourceState): Promise<void>;
177
+ saveExternalResourceState(resourceId: string, state: ExternalResourceStateFile): Promise<void>;
141
178
  /**
142
179
  * @internal
143
180
  */
@@ -147,11 +184,18 @@ export declare class StateManagementService {
147
184
  */
148
185
  saveResourceState(stateFileName: string, data: ResourceSerializedOutput, userData: ResourceStateUserData): Promise<void>;
149
186
  /**
150
- * Writes a state file as-is.
187
+ * Writes state files as-is and as one change, copying each one given a `filePath` and deleting each
188
+ * one given no `data`. Listeners of {@link StateFilesSavingEvent} may add files to the change first.
151
189
  */
152
- saveState(stateFileName: string, data: Buffer): Promise<void>;
190
+ saveStates(stateFiles: Parameters<IStateProvider['saveStates']>[0]): Promise<void>;
153
191
  /**
154
- * Releases the app lock. Unlocking an app that is not locked is not an error.
192
+ * Releases the app lock, then archives the run's journal. Unlocking an app that is not locked is
193
+ * not an error.
194
+ *
195
+ * In order: listeners of {@link AppUnlockingEvent} write the last of the run, and a failure there
196
+ * keeps the lock held; the lock is released, which seals the run; every journal file moves to
197
+ * `archives/<lockId>/`, a cleanup on this machine whose failure is reported on stderr rather than
198
+ * thrown.
155
199
  *
156
200
  * @throws {@link TransactionError} With the message `Invalid lock ID!` when a different lock is held.
157
201
  */
@@ -171,4 +215,3 @@ export declare class StateManagementServiceFactory {
171
215
  */
172
216
  static create(stateProvider?: IStateProvider): Promise<StateManagementService>;
173
217
  }
174
- export {};
@@ -4,8 +4,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ import { createHash } from 'node:crypto';
7
8
  import { Factory } from '../../decorators/factory.decorator.js';
8
- import { TransactionError } from '../../errors/index.js';
9
+ import { AppLockError, TransactionError } from '../../errors/index.js';
10
+ import { AppLockRefusedEvent, AppLockTakenEvent, AppUnlockedEvent, AppUnlockingEvent, StateFilesSavedEvent, StateFilesSavingEvent, StateRefreshedEvent, } from '../../events/index.js';
11
+ import { EventService } from '../event/event.service.js';
12
+ import { JOURNAL_COMMANDS_BEFORE_LOCK, JOURNAL_STATE_FILE_NAME_PREFIX, } from './state-provider.interface.js';
9
13
  /**
10
14
  * Serializes one state file.
11
15
  *
@@ -13,8 +17,8 @@ import { TransactionError } from '../../errors/index.js';
13
17
  * reading the pull request that produced them sees which entries moved, and a merge conflict lands
14
18
  * on the entries that actually collide instead of on the whole file.
15
19
  */
16
- function serializeState(data, userData) {
17
- return Buffer.from(JSON.stringify({ data, userData }, null, 2));
20
+ function serializeState(stateFile) {
21
+ return Buffer.from(JSON.stringify(stateFile, null, 2));
18
22
  }
19
23
  /**
20
24
  * Reads and writes Octo's state files through the configured {@link IStateProvider}.
@@ -33,6 +37,11 @@ export class StateManagementService {
33
37
  * The resource graph as it stands after the last commit.
34
38
  */
35
39
  this.actualResourceStateFileName = 'resources-actual.json';
40
+ /**
41
+ * The prefix of each record an external resource's action writes, until `commit` folds it into
42
+ * the resource graph.
43
+ */
44
+ this.externalResourceStateFileNamePrefix = 'resource-state-';
36
45
  /**
37
46
  * The model graph as it stands after the last commit.
38
47
  */
@@ -41,7 +50,6 @@ export class StateManagementService {
41
50
  * The resource graph as intent described it on the last commit.
42
51
  */
43
52
  this.oldResourceStateFileName = 'resources-old.json';
44
- this.externalResourceStateFileNamePrefix = 'resource-state-';
45
53
  this.stateProvider = stateProvider;
46
54
  }
47
55
  /**
@@ -50,13 +58,7 @@ export class StateManagementService {
50
58
  * @internal
51
59
  */
52
60
  async deleteExternalResourceState(resourceId) {
53
- await this.deleteState(this.externalResourceStateFileName(resourceId));
54
- }
55
- /**
56
- * Deletes a state file. Deleting one that is not there is not an error.
57
- */
58
- async deleteState(stateFileName) {
59
- return this.stateProvider.deleteState(stateFileName);
61
+ await this.saveStates([{ data: undefined, stateFileName: this.externalResourceStateFileName(resourceId) }]);
60
62
  }
61
63
  /**
62
64
  * The id of the lock currently held, or `undefined` when the app is unlocked.
@@ -83,6 +85,7 @@ export class StateManagementService {
83
85
  anchors: [],
84
86
  dependencies: [],
85
87
  models: {},
88
+ modules: {},
86
89
  overlays: [],
87
90
  },
88
91
  userData: {},
@@ -148,6 +151,7 @@ export class StateManagementService {
148
151
  /**
149
152
  * Reads a state file as-is.
150
153
  *
154
+ * @param stateFileName The file's name in the state provider.
151
155
  * @param defaultValue Returned instead of throwing when the file does not exist.
152
156
  */
153
157
  async getState(stateFileName, defaultValue) {
@@ -184,15 +188,66 @@ export class StateManagementService {
184
188
  const stateFileNames = await this.stateProvider.listStates(this.externalResourceStateFileNamePrefix);
185
189
  return stateFileNames
186
190
  .filter((stateFileName) => stateFileName.endsWith('.json'))
187
- .map((stateFileName) => decodeURIComponent(stateFileName.slice(this.externalResourceStateFileNamePrefix.length, -'.json'.length)));
191
+ .map((stateFileName) => stateFileName.slice(this.externalResourceStateFileNamePrefix.length, -'.json'.length).replace(/\./g, '/'));
188
192
  }
189
193
  /**
190
- * Takes the app lock and returns its id.
194
+ * The names of the state files whose name starts with `prefix`. See {@link IStateProvider.listStates}.
195
+ */
196
+ async listStates(prefix) {
197
+ return this.stateProvider.listStates(prefix);
198
+ }
199
+ /**
200
+ * Takes the app lock and returns its id. With `lockId`, resumes the run already holding it.
191
201
  *
192
- * @throws {@link TransactionError} When a lock is held, naming the id that holds it.
202
+ * A new lock is refused while the state holds a journal file of any command but `generate`,
203
+ * `validate` or `lock`: a run that finished without its journal being archived.
204
+ *
205
+ * @throws {@link AppLockError}
206
+ * * When a lock is held, naming the id that holds it.
207
+ * * When `lockId` is given and is not the lock held.
208
+ * * When the state holds journal files of an unfinished run.
193
209
  */
194
- async lockApp() {
195
- return this.stateProvider.lockApp();
210
+ async lockApp(lockId) {
211
+ const eventService = EventService.getInstance();
212
+ let lock;
213
+ try {
214
+ // Refuse a new lock over journal files no lock owns.
215
+ if (!lockId && !(await this.stateProvider.getAppLock())) {
216
+ const unfinishedStateFileNames = (await this.stateProvider.listStates(JOURNAL_STATE_FILE_NAME_PREFIX)).filter((stateFileName) => !JOURNAL_COMMANDS_BEFORE_LOCK.includes(stateFileName.split('.')[2]));
217
+ if (unfinishedStateFileNames.length > 0) {
218
+ throw new AppLockError(`State holds the journal of a run that was never archived: ${unfinishedStateFileNames.join(', ')}! ` +
219
+ 'Move or delete these files, then lock again.', { reason: 'unfinished', stateFileNames: unfinishedStateFileNames });
220
+ }
221
+ }
222
+ lock = await this.stateProvider.lockApp(lockId);
223
+ }
224
+ catch (error) {
225
+ if (error instanceof AppLockError) {
226
+ await eventService.emitAndWait(new AppLockRefusedEvent(undefined, {
227
+ holder: error.holder,
228
+ newestCommitId: error.newestCommitId,
229
+ reason: error.reason,
230
+ refreshedCommitId: error.refreshedCommitId,
231
+ stateFileNames: error.stateFileNames,
232
+ }));
233
+ }
234
+ throw error;
235
+ }
236
+ await eventService.emitAndWait(new AppLockTakenEvent(undefined, {
237
+ commitId: lock.commitId,
238
+ lockId: lock.lockId,
239
+ resumed: !!lockId,
240
+ resumedFrom: lock.resumedFrom,
241
+ }));
242
+ return lock;
243
+ }
244
+ /**
245
+ * Brings the state up to the newest a run may plan against. See {@link IStateProvider.refreshState}.
246
+ */
247
+ async refreshState() {
248
+ const refreshed = await this.stateProvider.refreshState();
249
+ await EventService.getInstance().emitAndWait(new StateRefreshedEvent(undefined, refreshed));
250
+ return refreshed;
196
251
  }
197
252
  /**
198
253
  * Records what an external resource's action made of it. The next run reads it back rather than
@@ -201,40 +256,89 @@ export class StateManagementService {
201
256
  * @internal
202
257
  */
203
258
  async saveExternalResourceState(resourceId, state) {
204
- await this.saveState(this.externalResourceStateFileName(resourceId), Buffer.from(JSON.stringify(state)));
259
+ await this.saveStates([
260
+ { data: Buffer.from(JSON.stringify(state)), stateFileName: this.externalResourceStateFileName(resourceId) },
261
+ ]);
205
262
  }
206
263
  /**
207
264
  * @internal
208
265
  */
209
266
  async saveModelState(stateFileName, data, userData) {
210
- await this.saveState(stateFileName, serializeState(data, userData));
267
+ await this.saveStates([{ data: serializeState({ data, userData }), stateFileName }]);
211
268
  }
212
269
  /**
213
270
  * @internal
214
271
  */
215
272
  async saveResourceState(stateFileName, data, userData) {
216
- await this.saveState(stateFileName, serializeState(data, userData));
273
+ await this.saveStates([{ data: serializeState({ data, userData }), stateFileName }]);
217
274
  }
218
275
  /**
219
- * Writes a state file as-is.
276
+ * Writes state files as-is and as one change, copying each one given a `filePath` and deleting each
277
+ * one given no `data`. Listeners of {@link StateFilesSavingEvent} may add files to the change first.
220
278
  */
221
- async saveState(stateFileName, data) {
222
- return this.stateProvider.saveState(stateFileName, data);
279
+ async saveStates(stateFiles) {
280
+ const eventService = EventService.getInstance();
281
+ await eventService.emitAndWait(new StateFilesSavingEvent(undefined, { stateFiles }));
282
+ await this.stateProvider.saveStates(stateFiles);
283
+ eventService.emit(new StateFilesSavedEvent(undefined, {
284
+ stateFiles: stateFiles.map((stateFile) => 'filePath' in stateFile
285
+ ? { data: undefined, filePath: stateFile.filePath, md5: undefined, stateFileName: stateFile.stateFileName }
286
+ : {
287
+ data: stateFile.data,
288
+ md5: stateFile.data === undefined ? undefined : createHash('md5').update(stateFile.data).digest('hex'),
289
+ stateFileName: stateFile.stateFileName,
290
+ }),
291
+ }));
223
292
  }
224
293
  /**
225
- * Releases the app lock. Unlocking an app that is not locked is not an error.
294
+ * Releases the app lock, then archives the run's journal. Unlocking an app that is not locked is
295
+ * not an error.
296
+ *
297
+ * In order: listeners of {@link AppUnlockingEvent} write the last of the run, and a failure there
298
+ * keeps the lock held; the lock is released, which seals the run; every journal file moves to
299
+ * `archives/<lockId>/`, a cleanup on this machine whose failure is reported on stderr rather than
300
+ * thrown.
226
301
  *
227
302
  * @throws {@link TransactionError} With the message `Invalid lock ID!` when a different lock is held.
228
303
  */
229
304
  async unlockApp(lockId) {
230
- return this.stateProvider.unlockApp(lockId);
305
+ const eventService = EventService.getInstance();
306
+ await eventService.emitAndWait(new AppUnlockingEvent(undefined, { lockId }));
307
+ // Stop when no lock is held, and refuse to touch the journal of another.
308
+ const heldLockId = await this.stateProvider.getAppLock();
309
+ if (!heldLockId) {
310
+ return;
311
+ }
312
+ if (heldLockId !== lockId) {
313
+ throw new TransactionError('Invalid lock ID!');
314
+ }
315
+ await this.stateProvider.unlockApp(lockId);
316
+ // Archive the run's journal, names unchanged.
317
+ try {
318
+ const stateFiles = [];
319
+ for (const stateFileName of await this.stateProvider.listStates(JOURNAL_STATE_FILE_NAME_PREFIX)) {
320
+ stateFiles.push({
321
+ data: await this.stateProvider.getState(stateFileName),
322
+ stateFileName: `archives/${lockId}/${stateFileName}`,
323
+ }, { data: undefined, stateFileName });
324
+ }
325
+ if (stateFiles.length > 0) {
326
+ await this.saveStates(stateFiles);
327
+ }
328
+ }
329
+ catch (error) {
330
+ process.stderr.write(`Failed to archive the journal of lock "${lockId}": ${error?.message ?? String(error)}\n`);
331
+ }
332
+ await eventService.emitAndWait(new AppUnlockedEvent(undefined, { lockId }));
231
333
  }
232
334
  /**
233
335
  * @internal
234
336
  */
235
337
  externalResourceStateFileName(resourceId) {
236
- // A resource id is not a file name - it carries `/` where a resource is named after a path.
237
- return `${this.externalResourceStateFileNamePrefix}${encodeURIComponent(resourceId)}.json`;
338
+ // A resource id is not a file name - it carries `/` where a resource is named after a path, and
339
+ // a state file name is one thing in a directory, in an object store, and in a URL path segment.
340
+ // A resource id holds no `.`, so the separator stands in for the slash and reads back as one.
341
+ return `${this.externalResourceStateFileNamePrefix}${resourceId.replace(/\//g, '.')}.json`;
238
342
  }
239
343
  }
240
344
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"state-management.service.js","sourceRoot":"","sources":["../../../src/services/state-management/state-management.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-management.service.js","sourceRoot":"","sources":["../../../src/services/state-management/state-management.service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,17 @@
1
+ /**
2
+ * The prefix of the state files the journal writes. A remote state provider uploads them while the
3
+ * lock is held, and never replaces them when it refreshes.
4
+ *
5
+ * @internal
6
+ */
7
+ export declare const JOURNAL_STATE_FILE_NAME_PREFIX = "journal.";
8
+ /**
9
+ * The commands that run before a lock. Every other command runs under one, and its journal files
10
+ * belong to the lock held.
11
+ *
12
+ * @internal
13
+ */
14
+ export declare const JOURNAL_COMMANDS_BEFORE_LOCK: string[];
1
15
  /**
2
16
  * Where Octo's state files live.
3
17
  *
@@ -13,10 +27,6 @@
13
27
  * @see Techniques for [State Providers](/docs/techniques/state-providers).
14
28
  */
15
29
  export interface IStateProvider {
16
- /**
17
- * Deletes a state file. Deleting one that is not there is not an error.
18
- */
19
- deleteState(stateFileName: string): Promise<void>;
20
30
  /**
21
31
  * The id of the lock currently held, or `undefined` when the app is unlocked.
22
32
  */
@@ -47,17 +57,48 @@ export interface IStateProvider {
47
57
  /**
48
58
  * Takes the app lock and returns its id, which `apply` and `commit` must then present.
49
59
  *
50
- * The lock is taken atomically, so of two callers racing for it exactly one wins.
60
+ * The lock is taken atomically, so of two callers racing for it exactly one wins. With `lockId`,
61
+ * resumes the run already holding that lock instead, which is how a run that died is finished.
62
+ * `commitId` names the record the run writes into, where the provider keeps one.
63
+ *
64
+ * A provider sharing state names where a resume took the state directory from in `resumedFrom`:
65
+ * `directory`, the directory the lock was taken in, left as it was; `run`, what the run uploaded so
66
+ * far; `sealed`, the newest sealed state, because the run uploaded nothing.
51
67
  *
52
- * @throws {@link TransactionError} When a lock is held, naming the id that holds it.
68
+ * @throws {@link AppLockError} When a lock is held, naming the id that holds it. When `lockId` is
69
+ * given and is not the lock held.
53
70
  */
54
- lockApp(): Promise<{
71
+ lockApp(lockId?: string): Promise<{
72
+ commitId?: string;
55
73
  lockId: string;
74
+ resumedFrom?: 'directory' | 'run' | 'sealed';
56
75
  }>;
57
76
  /**
58
- * Writes a state file, overwriting whatever was there.
77
+ * Brings the state up to the newest a run may plan against. `generate` calls it before reading any.
78
+ *
79
+ * A provider whose state is always the newest does nothing here, and returns `replaced: false`.
80
+ * One that replaced the state files names the commit it replaced them with, and the one before.
81
+ */
82
+ refreshState(): Promise<{
83
+ commitId?: string;
84
+ previousCommitId?: string;
85
+ replaced: boolean;
86
+ }>;
87
+ /**
88
+ * Writes state files as one change, overwriting whatever was there. A file comes from `data`, or is
89
+ * copied from the file at `filePath` without being read into memory; one given `data: undefined` is
90
+ * deleted. Deleting one that is not there is not an error. A name holding `/` is the machine's own:
91
+ * a provider sharing state keeps it on the machine.
92
+ *
93
+ * A provider that pays per write makes one write of the whole change rather than one per file.
59
94
  */
60
- saveState(stateFileName: string, data: Buffer): Promise<void>;
95
+ saveStates(stateFiles: ({
96
+ data: Buffer | undefined;
97
+ stateFileName: string;
98
+ } | {
99
+ filePath: string;
100
+ stateFileName: string;
101
+ })[]): Promise<void>;
61
102
  /**
62
103
  * Releases the app lock. Unlocking an app that is not locked is not an error.
63
104
  *
@@ -1,2 +1,15 @@
1
- export {};
1
+ /**
2
+ * The prefix of the state files the journal writes. A remote state provider uploads them while the
3
+ * lock is held, and never replaces them when it refreshes.
4
+ *
5
+ * @internal
6
+ */
7
+ export const JOURNAL_STATE_FILE_NAME_PREFIX = 'journal.';
8
+ /**
9
+ * The commands that run before a lock. Every other command runs under one, and its journal files
10
+ * belong to the lock held.
11
+ *
12
+ * @internal
13
+ */
14
+ export const JOURNAL_COMMANDS_BEFORE_LOCK = ['generate', 'lock', 'validate'];
2
15
  //# sourceMappingURL=state-provider.interface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-provider.interface.js","sourceRoot":"","sources":["../../../src/services/state-management/state-provider.interface.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"state-provider.interface.js","sourceRoot":"","sources":["../../../src/services/state-management/state-provider.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,UAAU,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC"}