@pikku/cli 0.10.1 → 0.11.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 (214) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +4 -3
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +5 -2
  3. package/.pikku/channel/pikku-channels-meta.gen.ts +1 -1
  4. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  5. package/.pikku/cli/pikku-cli-types.gen.ts +23 -1
  6. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +8 -116
  7. package/.pikku/cli/pikku-cli-wirings.gen.ts +2 -3
  8. package/.pikku/function/pikku-function-types.gen.ts +1 -1
  9. package/.pikku/function/pikku-functions-meta.gen.ts +265 -138
  10. package/.pikku/function/pikku-functions-meta.min.gen.ts +62 -32
  11. package/.pikku/function/pikku-functions.gen.ts +9 -1
  12. package/.pikku/http/pikku-http-types.gen.ts +1 -1
  13. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +5 -2
  14. package/.pikku/http/pikku-http-wirings-meta.gen.ts +1 -1
  15. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  16. package/.pikku/mcp/pikku-mcp-types.gen.ts +1 -1
  17. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +1 -1
  18. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  19. package/.pikku/pikku-bootstrap.gen.ts +4 -1
  20. package/.pikku/pikku-services.gen.ts +21 -12
  21. package/.pikku/pikku-types.gen.ts +1 -1
  22. package/.pikku/pikku-websocket.gen.ts +15 -1
  23. package/.pikku/queue/pikku-queue-types.gen.ts +1 -1
  24. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +5 -2
  25. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +7 -2
  26. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  27. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +27 -0
  28. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +13 -3
  29. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +26 -10
  30. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +15 -9
  31. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +1 -1
  32. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +1 -1
  33. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  34. package/.pikku/schemas/register.gen.ts +17 -5
  35. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  36. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  37. package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -0
  38. package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -0
  39. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  40. package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -0
  41. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +62 -0
  42. package/.pikku/workflow/pikku-workflow-types.gen.ts +92 -0
  43. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -0
  44. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +4 -0
  45. package/CHANGELOG.md +57 -0
  46. package/bin/pikku.ts +30 -21
  47. package/cli.schema.json +1 -1
  48. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +4 -3
  49. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  50. package/dist/.pikku/channel/pikku-channels-meta.gen.js +1 -1
  51. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  52. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  53. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +18 -1
  54. package/dist/.pikku/cli/pikku-cli-types.gen.js +20 -1
  55. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +8 -116
  56. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -2
  57. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -2
  58. package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
  59. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  60. package/dist/.pikku/function/pikku-functions-meta.gen.js +265 -138
  61. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +62 -32
  62. package/dist/.pikku/function/pikku-functions.gen.js +9 -1
  63. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  64. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  65. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  66. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  67. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  68. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  69. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  70. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +1 -1
  71. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  72. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  73. package/dist/.pikku/pikku-bootstrap.gen.d.ts +4 -1
  74. package/dist/.pikku/pikku-bootstrap.gen.js +4 -1
  75. package/dist/.pikku/pikku-services.gen.d.ts +15 -6
  76. package/dist/.pikku/pikku-services.gen.js +14 -2
  77. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  78. package/dist/.pikku/pikku-types.gen.js +1 -1
  79. package/dist/.pikku/pikku-websocket.gen.d.ts +15 -1
  80. package/dist/.pikku/pikku-websocket.gen.js +15 -1
  81. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  82. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  83. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +7 -2
  84. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  85. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  86. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +17 -0
  87. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +22 -0
  88. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +15 -9
  89. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  90. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  91. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +1 -1
  92. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  93. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  94. package/dist/.pikku/schemas/register.gen.js +9 -3
  95. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  96. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  97. package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -0
  98. package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +1 -0
  99. package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -0
  100. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  101. package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -0
  102. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +58 -0
  103. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +28 -0
  104. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +5 -0
  105. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +4 -0
  106. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +5 -0
  107. package/dist/bin/pikku.js +24 -19
  108. package/dist/src/cli.wiring.js +107 -99
  109. package/dist/src/functions/commands/all.js +51 -2
  110. package/dist/src/functions/commands/bootstrap.d.ts +1 -0
  111. package/dist/src/functions/commands/bootstrap.js +24 -0
  112. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +46 -2
  113. package/dist/src/functions/wirings/channels/serialize-channel-types.js +3 -2
  114. package/dist/src/functions/wirings/channels/serialize-websocket-wrapper.js +14 -0
  115. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
  116. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.js +20 -7
  117. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +32 -7
  118. package/dist/src/functions/wirings/cli/serialize-cli-types.js +22 -0
  119. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  120. package/dist/src/functions/wirings/functions/pikku-command-services.js +54 -26
  121. package/dist/src/functions/wirings/functions/schemas.js +2 -2
  122. package/dist/src/functions/wirings/http/pikku-command-openapi.js +1 -1
  123. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +3 -10
  124. package/dist/src/functions/wirings/queue/pikku-queue.js +9 -1
  125. package/dist/src/functions/wirings/queue/serialize-queue-map.d.ts +2 -2
  126. package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -2
  127. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -0
  128. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.js +23 -0
  129. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -0
  130. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.js +23 -0
  131. package/dist/src/functions/wirings/rpc/serialize-public-rpc.d.ts +4 -0
  132. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +30 -0
  133. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.d.ts +4 -0
  134. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +30 -0
  135. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +2 -2
  136. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +27 -3
  137. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +1 -0
  138. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +12 -0
  139. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +1 -0
  140. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +11 -0
  141. package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +1 -0
  142. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +55 -0
  143. package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +4 -0
  144. package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +79 -0
  145. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +2 -0
  146. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +10 -0
  147. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +4 -0
  148. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +95 -0
  149. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +4 -0
  150. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +60 -0
  151. package/dist/src/middleware/log-command-info-and-time.d.ts +1 -1
  152. package/dist/src/middleware/log-command-info-and-time.js +8 -5
  153. package/dist/src/services/cli-logger-forwarder.service.js +1 -1
  154. package/dist/src/services/cli-logger.service.d.ts +7 -2
  155. package/dist/src/services/cli-logger.service.js +17 -5
  156. package/dist/src/services.js +77 -12
  157. package/dist/src/utils/command-summary.d.ts +44 -0
  158. package/dist/src/utils/command-summary.js +74 -0
  159. package/dist/src/utils/file-writer.js +2 -2
  160. package/dist/src/utils/pikku-cli-config.js +48 -0
  161. package/dist/src/utils/schema-generator.d.ts +2 -2
  162. package/dist/src/utils/schema-generator.js +31 -10
  163. package/dist/tsconfig.tsbuildinfo +1 -1
  164. package/package.json +3 -4
  165. package/pikku.config.json +5 -2
  166. package/src/cli.wiring.ts +106 -101
  167. package/src/functions/commands/all.ts +66 -2
  168. package/src/functions/commands/bootstrap.ts +28 -0
  169. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +46 -2
  170. package/src/functions/wirings/channels/serialize-channel-types.ts +3 -2
  171. package/src/functions/wirings/channels/serialize-websocket-wrapper.ts +14 -0
  172. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
  173. package/src/functions/wirings/cli/serialize-channel-cli-client.ts +20 -7
  174. package/src/functions/wirings/cli/serialize-channel-cli.ts +40 -8
  175. package/src/functions/wirings/cli/serialize-cli-types.ts +22 -0
  176. package/src/functions/wirings/functions/pikku-command-services.ts +57 -28
  177. package/src/functions/wirings/functions/schemas.ts +4 -3
  178. package/src/functions/wirings/http/pikku-command-openapi.ts +2 -1
  179. package/src/functions/wirings/middleware/pikku-command-middleware.ts +11 -22
  180. package/src/functions/wirings/queue/pikku-queue.ts +10 -1
  181. package/src/functions/wirings/queue/serialize-queue-map.ts +3 -3
  182. package/src/functions/wirings/queue/serialize-queue-meta.ts +2 -2
  183. package/src/functions/wirings/rpc/pikku-command-public-rpc.ts +32 -0
  184. package/src/functions/wirings/rpc/pikku-command-remote-rpc.ts +35 -0
  185. package/src/functions/wirings/rpc/serialize-public-rpc.ts +30 -0
  186. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +30 -0
  187. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +2 -2
  188. package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +26 -3
  189. package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +24 -0
  190. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +22 -0
  191. package/src/functions/wirings/workflow/pikku-command-workflow.ts +123 -0
  192. package/src/functions/wirings/workflow/serialize-workflow-map.ts +123 -0
  193. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +16 -0
  194. package/src/functions/wirings/workflow/serialize-workflow-types.ts +95 -0
  195. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +60 -0
  196. package/src/middleware/log-command-info-and-time.ts +8 -5
  197. package/src/services/cli-logger-forwarder.service.ts +1 -1
  198. package/src/services/cli-logger.service.ts +21 -6
  199. package/src/services.ts +86 -11
  200. package/src/utils/command-summary.ts +103 -0
  201. package/src/utils/file-writer.ts +2 -2
  202. package/src/utils/pikku-cli-config.ts +68 -0
  203. package/src/utils/schema-generator.ts +30 -11
  204. package/types/application-types.d.ts +5 -1
  205. package/types/config.d.ts +61 -6
  206. package/.pikku/cli/pikku-cli-channel.gen.ts +0 -34
  207. package/.pikku/cli/pikku-cli-client.gen.ts +0 -43
  208. package/.pikku/cli/pikku-cli.gen.ts +0 -41
  209. package/dist/.pikku/cli/pikku-cli-channel.gen.js +0 -33
  210. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +0 -10
  211. package/dist/.pikku/cli/pikku-cli-client.gen.js +0 -34
  212. package/dist/.pikku/cli/pikku-cli.gen.d.ts +0 -10
  213. package/dist/.pikku/cli/pikku-cli.gen.js +0 -38
  214. /package/dist/.pikku/{cli/pikku-cli-channel.gen.d.ts → workflow/pikku-workflow-wirings-meta.gen.d.ts} +0 -0
@@ -1,35 +1,20 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  import { pikkuState } from '@pikku/core'
5
5
  pikkuState('function', 'meta', {
6
- "pikkuSchemas": {
7
- "pikkuFuncName": "pikkuSchemas",
8
- "inputSchemaName": null,
9
- "outputSchemaName": "PikkuSchemasOutput"
10
- },
11
- "pikkuFetch": {
12
- "pikkuFuncName": "pikkuFetch",
13
- "inputSchemaName": null,
14
- "outputSchemaName": null
15
- },
16
- "pikkuWebSocketTyped": {
17
- "pikkuFuncName": "pikkuWebSocketTyped",
6
+ "all": {
7
+ "pikkuFuncName": "all",
18
8
  "inputSchemaName": null,
19
9
  "outputSchemaName": null
20
10
  },
21
- "pikkuRPCClient": {
22
- "pikkuFuncName": "pikkuRPCClient",
11
+ "bootstrap": {
12
+ "pikkuFuncName": "bootstrap",
23
13
  "inputSchemaName": null,
24
14
  "outputSchemaName": null
25
15
  },
26
- "pikkuQueueService": {
27
- "pikkuFuncName": "pikkuQueueService",
28
- "inputSchemaName": null,
29
- "outputSchemaName": null
30
- },
31
- "pikkuOpenAPI": {
32
- "pikkuFuncName": "pikkuOpenAPI",
16
+ "watch": {
17
+ "pikkuFuncName": "watch",
33
18
  "inputSchemaName": null,
34
19
  "outputSchemaName": null
35
20
  },
@@ -38,16 +23,6 @@ pikkuState('function', 'meta', {
38
23
  "inputSchemaName": null,
39
24
  "outputSchemaName": null
40
25
  },
41
- "all": {
42
- "pikkuFuncName": "all",
43
- "inputSchemaName": null,
44
- "outputSchemaName": null
45
- },
46
- "watch": {
47
- "pikkuFuncName": "watch",
48
- "inputSchemaName": null,
49
- "outputSchemaName": null
50
- },
51
26
  "pikkuChannels": {
52
27
  "pikkuFuncName": "pikkuChannels",
53
28
  "inputSchemaName": null,
@@ -63,6 +38,11 @@ pikkuState('function', 'meta', {
63
38
  "inputSchemaName": null,
64
39
  "outputSchemaName": null
65
40
  },
41
+ "pikkuWebSocketTyped": {
42
+ "pikkuFuncName": "pikkuWebSocketTyped",
43
+ "inputSchemaName": null,
44
+ "outputSchemaName": null
45
+ },
66
46
  "pikkuCLIEntry": {
67
47
  "pikkuFuncName": "pikkuCLIEntry",
68
48
  "inputSchemaName": null,
@@ -78,6 +58,11 @@ pikkuState('function', 'meta', {
78
58
  "inputSchemaName": null,
79
59
  "outputSchemaName": "PikkuCLIOutput"
80
60
  },
61
+ "pikkuFetch": {
62
+ "pikkuFuncName": "pikkuFetch",
63
+ "inputSchemaName": null,
64
+ "outputSchemaName": null
65
+ },
81
66
  "pikkuFunctionTypesSplit": {
82
67
  "pikkuFuncName": "pikkuFunctionTypesSplit",
83
68
  "inputSchemaName": null,
@@ -98,6 +83,11 @@ pikkuState('function', 'meta', {
98
83
  "inputSchemaName": null,
99
84
  "outputSchemaName": null
100
85
  },
86
+ "pikkuSchemas": {
87
+ "pikkuFuncName": "pikkuSchemas",
88
+ "inputSchemaName": null,
89
+ "outputSchemaName": "PikkuSchemasOutput"
90
+ },
101
91
  "pikkuHTTPMap": {
102
92
  "pikkuFuncName": "pikkuHTTPMap",
103
93
  "inputSchemaName": null,
@@ -113,6 +103,11 @@ pikkuState('function', 'meta', {
113
103
  "inputSchemaName": null,
114
104
  "outputSchemaName": null
115
105
  },
106
+ "pikkuOpenAPI": {
107
+ "pikkuFuncName": "pikkuOpenAPI",
108
+ "inputSchemaName": null,
109
+ "outputSchemaName": null
110
+ },
116
111
  "pikkuMCPJSON": {
117
112
  "pikkuFuncName": "pikkuMCPJSON",
118
113
  "inputSchemaName": null,
@@ -143,6 +138,11 @@ pikkuState('function', 'meta', {
143
138
  "inputSchemaName": null,
144
139
  "outputSchemaName": null
145
140
  },
141
+ "pikkuQueueService": {
142
+ "pikkuFuncName": "pikkuQueueService",
143
+ "inputSchemaName": null,
144
+ "outputSchemaName": null
145
+ },
146
146
  "pikkuQueueTypes": {
147
147
  "pikkuFuncName": "pikkuQueueTypes",
148
148
  "inputSchemaName": null,
@@ -153,6 +153,21 @@ pikkuState('function', 'meta', {
153
153
  "inputSchemaName": null,
154
154
  "outputSchemaName": "PikkuQueueOutput"
155
155
  },
156
+ "pikkuPublicRPC": {
157
+ "pikkuFuncName": "pikkuPublicRPC",
158
+ "inputSchemaName": null,
159
+ "outputSchemaName": "PikkuPublicRPCOutput"
160
+ },
161
+ "pikkuRemoteRPC": {
162
+ "pikkuFuncName": "pikkuRemoteRPC",
163
+ "inputSchemaName": null,
164
+ "outputSchemaName": "PikkuRemoteRPCOutput"
165
+ },
166
+ "pikkuRPCClient": {
167
+ "pikkuFuncName": "pikkuRPCClient",
168
+ "inputSchemaName": null,
169
+ "outputSchemaName": null
170
+ },
156
171
  "pikkuRPCInternalMap": {
157
172
  "pikkuFuncName": "pikkuRPCInternalMap",
158
173
  "inputSchemaName": null,
@@ -177,5 +192,20 @@ pikkuState('function', 'meta', {
177
192
  "pikkuFuncName": "pikkuScheduler",
178
193
  "inputSchemaName": null,
179
194
  "outputSchemaName": "PikkuSchedulerOutput"
195
+ },
196
+ "pikkuWorkflowMap": {
197
+ "pikkuFuncName": "pikkuWorkflowMap",
198
+ "inputSchemaName": null,
199
+ "outputSchemaName": null
200
+ },
201
+ "pikkuWorkflowTypes": {
202
+ "pikkuFuncName": "pikkuWorkflowTypes",
203
+ "inputSchemaName": null,
204
+ "outputSchemaName": null
205
+ },
206
+ "pikkuWorkflow": {
207
+ "pikkuFuncName": "pikkuWorkflow",
208
+ "inputSchemaName": null,
209
+ "outputSchemaName": "PikkuWorkflowOutput"
180
210
  }
181
211
  })
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /* Import and register functions used by RPCs */
5
5
  import { addFunction } from '@pikku/core'
@@ -28,6 +28,7 @@ import { pikkuQueue } from '../../src/functions/wirings/queue/pikku-queue.js'
28
28
  import { pikkuQueueMap } from '../../src/functions/wirings/queue/pikku-queue-map.js'
29
29
  import { pikkuQueueService } from '../../src/functions/wirings/queue/pikku-command-queue-service.js'
30
30
  import { pikkuQueueTypes } from '../../src/functions/wirings/queue/pikku-command-queue-types.js'
31
+ import { pikkuRemoteRPC } from '../../src/functions/wirings/rpc/pikku-command-remote-rpc.js'
31
32
  import { pikkuRPC } from '../../src/functions/wirings/rpc/pikku-command-rpc.js'
32
33
  import { pikkuRPCClient } from '../../src/functions/wirings/rpc/pikku-command-rpc-client.js'
33
34
  import { pikkuRPCExposedMap } from '../../src/functions/wirings/rpc/pikku-command-rpc-map.js'
@@ -37,6 +38,9 @@ import { pikkuSchedulerTypes } from '../../src/functions/wirings/scheduler/pikku
37
38
  import { pikkuSchemas } from '../../src/functions/wirings/functions/schemas.js'
38
39
  import { pikkuServices } from '../../src/functions/wirings/functions/pikku-command-services.js'
39
40
  import { pikkuWebSocketTyped } from '../../src/functions/wirings/channels/pikku-command-websocket-typed.js'
41
+ import { pikkuWorkflow } from '../../src/functions/wirings/workflow/pikku-command-workflow.js'
42
+ import { pikkuWorkflowMap } from '../../src/functions/wirings/workflow/pikku-command-workflow-map.js'
43
+ import { pikkuWorkflowTypes } from '../../src/functions/wirings/workflow/pikku-command-workflow-types.js'
40
44
  import { watch } from '../../src/functions/commands/watch.js'
41
45
 
42
46
  addFunction('all', all)
@@ -64,6 +68,7 @@ addFunction('pikkuQueue', pikkuQueue)
64
68
  addFunction('pikkuQueueMap', pikkuQueueMap)
65
69
  addFunction('pikkuQueueService', pikkuQueueService)
66
70
  addFunction('pikkuQueueTypes', pikkuQueueTypes)
71
+ addFunction('pikkuRemoteRPC', pikkuRemoteRPC)
67
72
  addFunction('pikkuRPC', pikkuRPC)
68
73
  addFunction('pikkuRPCClient', pikkuRPCClient)
69
74
  addFunction('pikkuRPCExposedMap', pikkuRPCExposedMap)
@@ -73,4 +78,7 @@ addFunction('pikkuSchedulerTypes', pikkuSchedulerTypes)
73
78
  addFunction('pikkuSchemas', pikkuSchemas)
74
79
  addFunction('pikkuServices', pikkuServices)
75
80
  addFunction('pikkuWebSocketTyped', pikkuWebSocketTyped)
81
+ addFunction('pikkuWorkflow', pikkuWorkflow)
82
+ addFunction('pikkuWorkflowMap', pikkuWorkflowMap)
83
+ addFunction('pikkuWorkflowTypes', pikkuWorkflowTypes)
76
84
  addFunction('watch', watch)
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /**
5
5
  * HTTP-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /**
5
5
  * This provides the structure needed for typescript to be aware of routes and their return types
@@ -9,17 +9,20 @@
9
9
 
10
10
  // Custom types are those that are defined directly within generics
11
11
  // or are broken into simpler types
12
- export type PikkuSchemasOutput = false | true
13
12
  export type PikkuChannelsOutput = false | true
14
13
  export type PikkuCLIOutput = false | true
15
14
  export type PikkuFunctionsOutput = false | true
15
+ export type PikkuSchemasOutput = false | true
16
16
  export type PikkuHTTPOutput = false | true
17
17
  export type PikkuMCPOutput = false | true
18
18
  export type PikkuMiddlewareOutput = false | true
19
19
  export type PikkuPermissionsOutput = false | true
20
20
  export type PikkuQueueOutput = false | true
21
+ export type PikkuPublicRPCOutput = false | true
22
+ export type PikkuRemoteRPCOutput = false | true
21
23
  export type PikkuRPCOutput = false | true
22
24
  export type PikkuSchedulerOutput = false | true
25
+ export type PikkuWorkflowOutput = false | true
23
26
 
24
27
  // The '& {}' is a workaround for not directly refering to a type since it confuses typescript
25
28
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  import { pikkuState } from '@pikku/core'
5
5
  pikkuState('http', 'meta', {
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /* The files with an wireHTTP function call */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /**
5
5
  * MCP-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  import { pikkuState } from '@pikku/core'
5
5
  pikkuState('mcp', 'resourcesMeta', {})
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /* The files with an wireMCPResource or wireMCPTool function call */
@@ -1,10 +1,11 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  import './cli/pikku-cli-wirings-meta.gen.js'
5
5
  import './mcp/pikku-mcp-wirings-meta.gen.js'
6
6
  import './channel/pikku-channels-meta.gen.js'
7
7
  import './queue/pikku-queue-workers-wirings-meta.gen.js'
8
+ import './workflow/pikku-workflow-wirings-meta.gen.js'
8
9
  import './scheduler/pikku-schedulers-wirings-meta.gen.js'
9
10
  import './http/pikku-http-wirings-meta.gen.js'
10
11
  import './rpc/pikku-rpc-wirings-meta.internal.gen.js'
@@ -13,6 +14,8 @@ import './function/pikku-functions.gen.js'
13
14
  import './schemas/register.gen.js'
14
15
  import './http/pikku-http-wirings.gen.js'
15
16
  import './scheduler/pikku-schedulers-wirings.gen.js'
17
+ import './workflow/pikku-workflow-wirings.gen.js'
18
+ import './rpc/pikku-remote-rpc-workers.gen.js'
16
19
  import './queue/pikku-queue-workers-wirings.gen.js'
17
20
  import './channel/pikku-channels.gen.js'
18
21
  import './mcp/pikku-mcp-wirings.gen.js'
@@ -1,20 +1,29 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  import type { SingletonServices } from '../types/application-types.d.js'
5
5
  import type { Services } from '../types/application-types.d.js'
6
- import type { PikkuInteraction } from '@pikku/core'
7
6
 
8
- export const singletonServices = {
9
- 'config': true,
10
- 'getInspectorState': true,
11
- 'logger': true,
7
+ // Singleton services map: true if required, false if available but unused
8
+ export const requiredSingletonServices = {
9
+ 'config': true,
10
+ 'getInspectorState': false,
11
+ 'jwt': false,
12
+ 'logger': true,
13
+ 'queueService': false,
14
+ 'schedulerService': false,
15
+ 'schema': true,
16
+ 'variables': true,
17
+ 'workflowService': false,
12
18
  } as const
13
19
 
14
- // Singleton services (created once at startup)
15
- // Only includes services that are both required and available in SingletonServices
16
- export type RequiredSingletonServices = Pick<SingletonServices, Extract<keyof SingletonServices, 'config' | 'getInspectorState' | 'logger' | 'schema' | 'variables'>> & Partial<Omit<SingletonServices, 'config' | 'getInspectorState' | 'logger' | 'schema' | 'variables'>>
20
+ // Session services map: true if required, false if available but unused
21
+ export const requiredSessionServices = {
22
+ 'workflow': false,
23
+ 'workflowStep': false,
24
+ } as const
25
+
26
+ // Type exports
27
+ export type RequiredSingletonServices = Pick<SingletonServices, 'config' | 'logger' | 'schema' | 'variables'> & Partial<Omit<SingletonServices, 'config' | 'logger' | 'schema' | 'variables'>>
17
28
 
18
- // Session services (created per request, can access singleton services)
19
- // Omits singleton services and PikkuInteraction (mcp, rpc, http, channel)
20
- export type RequiredSessionServices = Omit<Services, keyof SingletonServices | keyof PikkuInteraction>
29
+ export type RequiredSessionServices = Partial<Services>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /**
5
5
  * Main type export hub - re-exports all wiring-specific types
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  import { CorePikkuWebsocket, CorePikkuRouteHandler } from '@pikku/websocket'
5
5
  import { ChannelDefaultHandlerOf, ChannelWiringHandlerOf, ChannelsMap } from './channel/pikku-channels-map.gen.d.js';
@@ -28,6 +28,20 @@ class PikkuWebSocketRoute<Channel extends keyof ChannelsMap, Route extends keyof
28
28
  }
29
29
  }
30
30
 
31
+ /**
32
+ * Type-safe WebSocket wrapper for Pikku channels.
33
+ *
34
+ * @example
35
+ * // Browser usage
36
+ * const ws = new WebSocket('ws://localhost:3000')
37
+ * const pikkuWS = new PikkuWebSocket<'events'>(ws)
38
+ *
39
+ * @example
40
+ * // Node.js usage
41
+ * import WebSocket from 'ws'
42
+ * const ws = new WebSocket('ws://localhost:3000')
43
+ * const pikkuWS = new PikkuWebSocket<'events'>(ws)
44
+ */
31
45
  export class PikkuWebSocket<Channel extends keyof ChannelsMap, EventHubTopics extends Record<string, any> = {}> extends CorePikkuWebsocket {
32
46
  /**
33
47
  * Send a message to a specific route and method.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /**
5
5
  * Queue-specific type definitions for tree-shaking optimization
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /**
5
5
  * This provides the structure needed for typescript to be aware of Queue workers and their input/output types
@@ -9,17 +9,20 @@
9
9
 
10
10
  // Custom types are those that are defined directly within generics
11
11
  // or are broken into simpler types
12
- export type PikkuSchemasOutput = false | true
13
12
  export type PikkuChannelsOutput = false | true
14
13
  export type PikkuCLIOutput = false | true
15
14
  export type PikkuFunctionsOutput = false | true
15
+ export type PikkuSchemasOutput = false | true
16
16
  export type PikkuHTTPOutput = false | true
17
17
  export type PikkuMCPOutput = false | true
18
18
  export type PikkuMiddlewareOutput = false | true
19
19
  export type PikkuPermissionsOutput = false | true
20
20
  export type PikkuQueueOutput = false | true
21
+ export type PikkuPublicRPCOutput = false | true
22
+ export type PikkuRemoteRPCOutput = false | true
21
23
  export type PikkuRPCOutput = false | true
22
24
  export type PikkuSchedulerOutput = false | true
25
+ export type PikkuWorkflowOutput = false | true
23
26
 
24
27
  import type { QueueJob } from '@pikku/core/queue'
25
28
 
@@ -1,5 +1,10 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  import { pikkuState } from '@pikku/core'
5
- pikkuState('queue', 'meta', {})
5
+ pikkuState('queue', 'meta', {
6
+ "pikku-remote-internal-rpc": {
7
+ "pikkuFuncName": "pikkuRemoteInternalRPC",
8
+ "queueName": "pikku-remote-internal-rpc"
9
+ }
10
+ })
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /* The files with an addQueueWorkers function call */
@@ -0,0 +1,27 @@
1
+ /**
2
+ * This file was generated by @pikku/cli@0.11.0
3
+ */
4
+ /**
5
+ * Auto-generated remote internal RPC queue worker and HTTP endpoint
6
+ * Do not edit manually - regenerate with 'npx pikku'
7
+ */
8
+ import { pikkuSessionlessFunc, wireQueueWorker } from '../pikku-types.gen.js'
9
+
10
+ /**
11
+ * Generic remote RPC worker that invokes any internal RPC by name
12
+ * This is used for executing internal RPCs via a queue or HTTP (e.g., scheduled tasks, background jobs, internal services)
13
+ */
14
+ export const pikkuRemoteInternalRPC = pikkuSessionlessFunc<
15
+ { rpcName: string, data?: any },
16
+ any
17
+ >({
18
+ func: async ({ rpc }, { rpcName, data }) => {
19
+ return await (rpc.invoke as any)(rpcName, data)
20
+ },
21
+ internal: true,
22
+ })
23
+
24
+ wireQueueWorker({
25
+ queueName: 'pikku-remote-internal-rpc',
26
+ func: pikkuRemoteInternalRPC,
27
+ })
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /**
5
5
  * This provides the structure needed for typescript to be aware of RPCs and their return types
@@ -9,17 +9,20 @@
9
9
 
10
10
  // Custom types are those that are defined directly within generics
11
11
  // or are broken into simpler types
12
- export type PikkuSchemasOutput = false | true
13
12
  export type PikkuChannelsOutput = false | true
14
13
  export type PikkuCLIOutput = false | true
15
14
  export type PikkuFunctionsOutput = false | true
15
+ export type PikkuSchemasOutput = false | true
16
16
  export type PikkuHTTPOutput = false | true
17
17
  export type PikkuMCPOutput = false | true
18
18
  export type PikkuMiddlewareOutput = false | true
19
19
  export type PikkuPermissionsOutput = false | true
20
20
  export type PikkuQueueOutput = false | true
21
+ export type PikkuPublicRPCOutput = false | true
22
+ export type PikkuRemoteRPCOutput = false | true
21
23
  export type PikkuRPCOutput = false | true
22
24
  export type PikkuSchedulerOutput = false | true
25
+ export type PikkuWorkflowOutput = false | true
23
26
 
24
27
  interface RPCHandler<I, O> {
25
28
  input: I;
@@ -38,10 +41,17 @@ export type RPCInvoke = <Name extends keyof RPCMap>(
38
41
  }
39
42
  ) => Promise<RPCMap[Name]['output']>
40
43
 
44
+ // Import WorkflowMap for workflow typing
45
+ import type { WorkflowMap } from '../workflow/pikku-workflow-map.gen.js'
46
+
41
47
  export type TypedPikkuRPC = {
42
48
  depth: number;
43
49
  global: boolean;
44
50
  invoke: RPCInvoke;
45
- invokeExposed: (name: string, data: any) => Promise<any>
51
+ invokeExposed: (name: string, data: any) => Promise<any>;
52
+ startWorkflow: <Name extends keyof WorkflowMap>(
53
+ name: Name,
54
+ input: WorkflowMap[Name]['input']
55
+ ) => Promise<{ runId: string }>;
46
56
  }
47
57
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.10.1
2
+ * This file was generated by @pikku/cli@0.11.0
3
3
  */
4
4
  /**
5
5
  * This provides the structure needed for typescript to be aware of RPCs and their return types
@@ -9,17 +9,20 @@
9
9
 
10
10
  // Custom types are those that are defined directly within generics
11
11
  // or are broken into simpler types
12
- export type PikkuSchemasOutput = false | true
13
12
  export type PikkuChannelsOutput = false | true
14
13
  export type PikkuCLIOutput = false | true
15
14
  export type PikkuFunctionsOutput = false | true
15
+ export type PikkuSchemasOutput = false | true
16
16
  export type PikkuHTTPOutput = false | true
17
17
  export type PikkuMCPOutput = false | true
18
18
  export type PikkuMiddlewareOutput = false | true
19
19
  export type PikkuPermissionsOutput = false | true
20
20
  export type PikkuQueueOutput = false | true
21
+ export type PikkuPublicRPCOutput = false | true
22
+ export type PikkuRemoteRPCOutput = false | true
21
23
  export type PikkuRPCOutput = false | true
22
24
  export type PikkuSchedulerOutput = false | true
25
+ export type PikkuWorkflowOutput = false | true
23
26
 
24
27
  interface RPCHandler<I, O> {
25
28
  input: I;
@@ -27,41 +30,47 @@ interface RPCHandler<I, O> {
27
30
  }
28
31
 
29
32
  export type RPCMap = {
30
- readonly 'pikkuSchemas': RPCHandler<null, PikkuSchemasOutput>,
31
- readonly 'pikkuFetch': RPCHandler<null, null>,
32
- readonly 'pikkuWebSocketTyped': RPCHandler<null, null>,
33
- readonly 'pikkuRPCClient': RPCHandler<null, null>,
34
- readonly 'pikkuQueueService': RPCHandler<null, null>,
35
- readonly 'pikkuOpenAPI': RPCHandler<null, null>,
36
- readonly 'pikkuNext': RPCHandler<null, null>,
37
33
  readonly 'all': RPCHandler<null, null>,
34
+ readonly 'bootstrap': RPCHandler<null, null>,
38
35
  readonly 'watch': RPCHandler<null, null>,
36
+ readonly 'pikkuNext': RPCHandler<null, null>,
39
37
  readonly 'pikkuChannels': RPCHandler<null, PikkuChannelsOutput>,
40
38
  readonly 'pikkuChannelTypes': RPCHandler<null, null>,
41
39
  readonly 'pikkuChannelsMap': RPCHandler<null, null>,
40
+ readonly 'pikkuWebSocketTyped': RPCHandler<null, null>,
42
41
  readonly 'pikkuCLIEntry': RPCHandler<null, null>,
43
42
  readonly 'pikkuCLITypes': RPCHandler<null, null>,
44
43
  readonly 'pikkuCLI': RPCHandler<null, PikkuCLIOutput>,
44
+ readonly 'pikkuFetch': RPCHandler<null, null>,
45
45
  readonly 'pikkuFunctionTypesSplit': RPCHandler<null, null>,
46
46
  readonly 'pikkuFunctionTypes': RPCHandler<null, null>,
47
47
  readonly 'pikkuFunctions': RPCHandler<null, PikkuFunctionsOutput>,
48
48
  readonly 'pikkuServices': RPCHandler<null, null>,
49
+ readonly 'pikkuSchemas': RPCHandler<null, PikkuSchemasOutput>,
49
50
  readonly 'pikkuHTTPMap': RPCHandler<null, null>,
50
51
  readonly 'pikkuHTTP': RPCHandler<null, PikkuHTTPOutput>,
51
52
  readonly 'pikkuHTTPTypes': RPCHandler<null, null>,
53
+ readonly 'pikkuOpenAPI': RPCHandler<null, null>,
52
54
  readonly 'pikkuMCPJSON': RPCHandler<null, null>,
53
55
  readonly 'pikkuMCPTypes': RPCHandler<null, null>,
54
56
  readonly 'pikkuMCP': RPCHandler<null, PikkuMCPOutput>,
55
57
  readonly 'pikkuMiddleware': RPCHandler<null, PikkuMiddlewareOutput>,
56
58
  readonly 'pikkuPermissions': RPCHandler<null, PikkuPermissionsOutput>,
57
59
  readonly 'pikkuQueueMap': RPCHandler<null, null>,
60
+ readonly 'pikkuQueueService': RPCHandler<null, null>,
58
61
  readonly 'pikkuQueueTypes': RPCHandler<null, null>,
59
62
  readonly 'pikkuQueue': RPCHandler<null, PikkuQueueOutput>,
63
+ readonly 'pikkuPublicRPC': RPCHandler<null, PikkuPublicRPCOutput>,
64
+ readonly 'pikkuRemoteRPC': RPCHandler<null, PikkuRemoteRPCOutput>,
65
+ readonly 'pikkuRPCClient': RPCHandler<null, null>,
60
66
  readonly 'pikkuRPCInternalMap': RPCHandler<null, null>,
61
67
  readonly 'pikkuRPCExposedMap': RPCHandler<null, null>,
62
68
  readonly 'pikkuRPC': RPCHandler<null, PikkuRPCOutput>,
63
69
  readonly 'pikkuSchedulerTypes': RPCHandler<null, null>,
64
70
  readonly 'pikkuScheduler': RPCHandler<null, PikkuSchedulerOutput>,
71
+ readonly 'pikkuWorkflowMap': RPCHandler<null, null>,
72
+ readonly 'pikkuWorkflowTypes': RPCHandler<null, null>,
73
+ readonly 'pikkuWorkflow': RPCHandler<null, PikkuWorkflowOutput>,
65
74
  };
66
75
 
67
76
 
@@ -73,10 +82,17 @@ export type RPCInvoke = <Name extends keyof RPCMap>(
73
82
  }
74
83
  ) => Promise<RPCMap[Name]['output']>
75
84
 
85
+ // Import WorkflowMap for workflow typing
86
+ import type { WorkflowMap } from '../workflow/pikku-workflow-map.gen.js'
87
+
76
88
  export type TypedPikkuRPC = {
77
89
  depth: number;
78
90
  global: boolean;
79
91
  invoke: RPCInvoke;
80
- invokeExposed: (name: string, data: any) => Promise<any>
92
+ invokeExposed: (name: string, data: any) => Promise<any>;
93
+ startWorkflow: <Name extends keyof WorkflowMap>(
94
+ name: Name,
95
+ input: WorkflowMap[Name]['input']
96
+ ) => Promise<{ runId: string }>;
81
97
  }
82
98