@diskd-ai/sdk 5.1.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 (299) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +1036 -0
  3. package/dist/agentHub/StreamProtocolFetcher.d.ts +55 -0
  4. package/dist/agentHub/StreamProtocolFetcher.d.ts.map +1 -0
  5. package/dist/agentHub/StreamProtocolFetcher.js +176 -0
  6. package/dist/agentHub/StreamProtocolFetcher.js.map +1 -0
  7. package/dist/agentHub/StreamProtocolHandler.d.ts +18 -0
  8. package/dist/agentHub/StreamProtocolHandler.d.ts.map +1 -0
  9. package/dist/agentHub/StreamProtocolHandler.js +63 -0
  10. package/dist/agentHub/StreamProtocolHandler.js.map +1 -0
  11. package/dist/agentHub/agentHub.d.ts +30 -0
  12. package/dist/agentHub/agentHub.d.ts.map +1 -0
  13. package/dist/agentHub/agentHub.js +200 -0
  14. package/dist/agentHub/agentHub.js.map +1 -0
  15. package/dist/agentHub/agentHubTypes.d.ts +110 -0
  16. package/dist/agentHub/agentHubTypes.d.ts.map +1 -0
  17. package/dist/agentHub/agentHubTypes.js +8 -0
  18. package/dist/agentHub/agentHubTypes.js.map +1 -0
  19. package/dist/agentHub/streamProtocolMap.d.ts +328 -0
  20. package/dist/agentHub/streamProtocolMap.d.ts.map +1 -0
  21. package/dist/agentHub/streamProtocolMap.js +8 -0
  22. package/dist/agentHub/streamProtocolMap.js.map +1 -0
  23. package/dist/auth/createApiKeyAuth.d.ts +11 -0
  24. package/dist/auth/createApiKeyAuth.d.ts.map +1 -0
  25. package/dist/auth/createApiKeyAuth.js +31 -0
  26. package/dist/auth/createApiKeyAuth.js.map +1 -0
  27. package/dist/auth/createAuth.d.ts +3 -0
  28. package/dist/auth/createAuth.d.ts.map +1 -0
  29. package/dist/auth/createAuth.js +128 -0
  30. package/dist/auth/createAuth.js.map +1 -0
  31. package/dist/auth/createAuthBrowser.d.ts +3 -0
  32. package/dist/auth/createAuthBrowser.d.ts.map +1 -0
  33. package/dist/auth/createAuthBrowser.js +104 -0
  34. package/dist/auth/createAuthBrowser.js.map +1 -0
  35. package/dist/auth/jwtClaims.d.ts +3 -0
  36. package/dist/auth/jwtClaims.d.ts.map +1 -0
  37. package/dist/auth/jwtClaims.js +23 -0
  38. package/dist/auth/jwtClaims.js.map +1 -0
  39. package/dist/auth/keyfile.d.ts +10 -0
  40. package/dist/auth/keyfile.d.ts.map +1 -0
  41. package/dist/auth/keyfile.js +28 -0
  42. package/dist/auth/keyfile.js.map +1 -0
  43. package/dist/auth/oidcDiscovery.d.ts +9 -0
  44. package/dist/auth/oidcDiscovery.d.ts.map +1 -0
  45. package/dist/auth/oidcDiscovery.js +27 -0
  46. package/dist/auth/oidcDiscovery.js.map +1 -0
  47. package/dist/auth/pkce.d.ts +4 -0
  48. package/dist/auth/pkce.d.ts.map +1 -0
  49. package/dist/auth/pkce.js +43 -0
  50. package/dist/auth/pkce.js.map +1 -0
  51. package/dist/auth/sessionStorage.d.ts +8 -0
  52. package/dist/auth/sessionStorage.d.ts.map +1 -0
  53. package/dist/auth/sessionStorage.js +8 -0
  54. package/dist/auth/sessionStorage.js.map +1 -0
  55. package/dist/auth/tokenRequests.d.ts +15 -0
  56. package/dist/auth/tokenRequests.d.ts.map +1 -0
  57. package/dist/auth/tokenRequests.js +89 -0
  58. package/dist/auth/tokenRequests.js.map +1 -0
  59. package/dist/auth/types.d.ts +35 -0
  60. package/dist/auth/types.d.ts.map +1 -0
  61. package/dist/auth/types.js +2 -0
  62. package/dist/auth/types.js.map +1 -0
  63. package/dist/auth/urlRuntime.d.ts +7 -0
  64. package/dist/auth/urlRuntime.d.ts.map +1 -0
  65. package/dist/auth/urlRuntime.js +17 -0
  66. package/dist/auth/urlRuntime.js.map +1 -0
  67. package/dist/browser/index.d.ts +8 -0
  68. package/dist/browser/index.d.ts.map +1 -0
  69. package/dist/browser/index.js +3 -0
  70. package/dist/browser/index.js.map +1 -0
  71. package/dist/calendar/calendar.d.ts +21 -0
  72. package/dist/calendar/calendar.d.ts.map +1 -0
  73. package/dist/calendar/calendar.js +105 -0
  74. package/dist/calendar/calendar.js.map +1 -0
  75. package/dist/calendar/calendarTypes.d.ts +191 -0
  76. package/dist/calendar/calendarTypes.d.ts.map +1 -0
  77. package/dist/calendar/calendarTypes.js +4 -0
  78. package/dist/calendar/calendarTypes.js.map +1 -0
  79. package/dist/contacts/contacts.d.ts +10 -0
  80. package/dist/contacts/contacts.d.ts.map +1 -0
  81. package/dist/contacts/contacts.js +86 -0
  82. package/dist/contacts/contacts.js.map +1 -0
  83. package/dist/contacts/contactsTypes.d.ts +81 -0
  84. package/dist/contacts/contactsTypes.d.ts.map +1 -0
  85. package/dist/contacts/contactsTypes.js +4 -0
  86. package/dist/contacts/contactsTypes.js.map +1 -0
  87. package/dist/drive/DriveRepository.d.ts +88 -0
  88. package/dist/drive/DriveRepository.d.ts.map +1 -0
  89. package/dist/drive/DriveRepository.js +156 -0
  90. package/dist/drive/DriveRepository.js.map +1 -0
  91. package/dist/drive/crontab.d.ts +7 -0
  92. package/dist/drive/crontab.d.ts.map +1 -0
  93. package/dist/drive/crontab.js +374 -0
  94. package/dist/drive/crontab.js.map +1 -0
  95. package/dist/drive/crontabTypes.d.ts +136 -0
  96. package/dist/drive/crontabTypes.d.ts.map +1 -0
  97. package/dist/drive/crontabTypes.js +2 -0
  98. package/dist/drive/crontabTypes.js.map +1 -0
  99. package/dist/drive/drive.d.ts +8 -0
  100. package/dist/drive/drive.d.ts.map +1 -0
  101. package/dist/drive/drive.js +711 -0
  102. package/dist/drive/drive.js.map +1 -0
  103. package/dist/drive/driveDb.d.ts +6 -0
  104. package/dist/drive/driveDb.d.ts.map +1 -0
  105. package/dist/drive/driveDb.js +220 -0
  106. package/dist/drive/driveDb.js.map +1 -0
  107. package/dist/drive/driveDbTypes.d.ts +138 -0
  108. package/dist/drive/driveDbTypes.d.ts.map +1 -0
  109. package/dist/drive/driveDbTypes.js +5 -0
  110. package/dist/drive/driveDbTypes.js.map +1 -0
  111. package/dist/drive/driveTypes.d.ts +322 -0
  112. package/dist/drive/driveTypes.d.ts.map +1 -0
  113. package/dist/drive/driveTypes.js +5 -0
  114. package/dist/drive/driveTypes.js.map +1 -0
  115. package/dist/drive/rpc.d.ts +14 -0
  116. package/dist/drive/rpc.d.ts.map +1 -0
  117. package/dist/drive/rpc.js +48 -0
  118. package/dist/drive/rpc.js.map +1 -0
  119. package/dist/drive/session.d.ts +7 -0
  120. package/dist/drive/session.d.ts.map +1 -0
  121. package/dist/drive/session.js +450 -0
  122. package/dist/drive/session.js.map +1 -0
  123. package/dist/drive/sessionBuilder.d.ts +33 -0
  124. package/dist/drive/sessionBuilder.d.ts.map +1 -0
  125. package/dist/drive/sessionBuilder.js +77 -0
  126. package/dist/drive/sessionBuilder.js.map +1 -0
  127. package/dist/drive/sessionObject.d.ts +57 -0
  128. package/dist/drive/sessionObject.d.ts.map +1 -0
  129. package/dist/drive/sessionObject.js +191 -0
  130. package/dist/drive/sessionObject.js.map +1 -0
  131. package/dist/drive/sessionTypes.d.ts +182 -0
  132. package/dist/drive/sessionTypes.d.ts.map +1 -0
  133. package/dist/drive/sessionTypes.js +2 -0
  134. package/dist/drive/sessionTypes.js.map +1 -0
  135. package/dist/drive/typeorm/DriveDriver.d.ts +27 -0
  136. package/dist/drive/typeorm/DriveDriver.d.ts.map +1 -0
  137. package/dist/drive/typeorm/DriveDriver.js +86 -0
  138. package/dist/drive/typeorm/DriveDriver.js.map +1 -0
  139. package/dist/drive/typeorm/DriveQueryRunner.d.ts +15 -0
  140. package/dist/drive/typeorm/DriveQueryRunner.d.ts.map +1 -0
  141. package/dist/drive/typeorm/DriveQueryRunner.js +76 -0
  142. package/dist/drive/typeorm/DriveQueryRunner.js.map +1 -0
  143. package/dist/drive/typeorm/createDriveDataSource.d.ts +3 -0
  144. package/dist/drive/typeorm/createDriveDataSource.d.ts.map +1 -0
  145. package/dist/drive/typeorm/createDriveDataSource.js +36 -0
  146. package/dist/drive/typeorm/createDriveDataSource.js.map +1 -0
  147. package/dist/drive/typeorm/datasourceTypes.d.ts +56 -0
  148. package/dist/drive/typeorm/datasourceTypes.d.ts.map +1 -0
  149. package/dist/drive/typeorm/datasourceTypes.js +5 -0
  150. package/dist/drive/typeorm/datasourceTypes.js.map +1 -0
  151. package/dist/drive/types.d.ts +48 -0
  152. package/dist/drive/types.d.ts.map +1 -0
  153. package/dist/drive/types.js +2 -0
  154. package/dist/drive/types.js.map +1 -0
  155. package/dist/env/apiKey.d.ts +2 -0
  156. package/dist/env/apiKey.d.ts.map +1 -0
  157. package/dist/env/apiKey.js +11 -0
  158. package/dist/env/apiKey.js.map +1 -0
  159. package/dist/env/baseUrl.d.ts +3 -0
  160. package/dist/env/baseUrl.d.ts.map +1 -0
  161. package/dist/env/baseUrl.js +31 -0
  162. package/dist/env/baseUrl.js.map +1 -0
  163. package/dist/inbox/inboxTypes.d.ts +34 -0
  164. package/dist/inbox/inboxTypes.d.ts.map +1 -0
  165. package/dist/inbox/inboxTypes.js +5 -0
  166. package/dist/inbox/inboxTypes.js.map +1 -0
  167. package/dist/index.d.ts +56 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +43 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/llmRouter/llmRouter.d.ts +23 -0
  172. package/dist/llmRouter/llmRouter.d.ts.map +1 -0
  173. package/dist/llmRouter/llmRouter.js +566 -0
  174. package/dist/llmRouter/llmRouter.js.map +1 -0
  175. package/dist/llmRouter/llmRouterTypes.d.ts +350 -0
  176. package/dist/llmRouter/llmRouterTypes.d.ts.map +1 -0
  177. package/dist/llmRouter/llmRouterTypes.js +5 -0
  178. package/dist/llmRouter/llmRouterTypes.js.map +1 -0
  179. package/dist/mcpHub/mcpHub.d.ts +23 -0
  180. package/dist/mcpHub/mcpHub.d.ts.map +1 -0
  181. package/dist/mcpHub/mcpHub.js +223 -0
  182. package/dist/mcpHub/mcpHub.js.map +1 -0
  183. package/dist/mcpHub/mcpHubTypes.d.ts +228 -0
  184. package/dist/mcpHub/mcpHubTypes.d.ts.map +1 -0
  185. package/dist/mcpHub/mcpHubTypes.js +5 -0
  186. package/dist/mcpHub/mcpHubTypes.js.map +1 -0
  187. package/dist/mcpTools/mcpTools.d.ts +31 -0
  188. package/dist/mcpTools/mcpTools.d.ts.map +1 -0
  189. package/dist/mcpTools/mcpTools.js +144 -0
  190. package/dist/mcpTools/mcpTools.js.map +1 -0
  191. package/dist/mcpTools/mcpToolsTypes.d.ts +45 -0
  192. package/dist/mcpTools/mcpToolsTypes.d.ts.map +1 -0
  193. package/dist/mcpTools/mcpToolsTypes.js +5 -0
  194. package/dist/mcpTools/mcpToolsTypes.js.map +1 -0
  195. package/dist/messagesStore/messagesStore.d.ts +22 -0
  196. package/dist/messagesStore/messagesStore.d.ts.map +1 -0
  197. package/dist/messagesStore/messagesStore.js +402 -0
  198. package/dist/messagesStore/messagesStore.js.map +1 -0
  199. package/dist/messagesStore/messagesStoreTypes.d.ts +327 -0
  200. package/dist/messagesStore/messagesStoreTypes.d.ts.map +1 -0
  201. package/dist/messagesStore/messagesStoreTypes.js +11 -0
  202. package/dist/messagesStore/messagesStoreTypes.js.map +1 -0
  203. package/dist/node/fastDns.d.ts +2 -0
  204. package/dist/node/fastDns.d.ts.map +1 -0
  205. package/dist/node/fastDns.js +119 -0
  206. package/dist/node/fastDns.js.map +1 -0
  207. package/dist/operatives/operatives.d.ts +22 -0
  208. package/dist/operatives/operatives.d.ts.map +1 -0
  209. package/dist/operatives/operatives.js +199 -0
  210. package/dist/operatives/operatives.js.map +1 -0
  211. package/dist/operatives/operativesTypes.d.ts +141 -0
  212. package/dist/operatives/operativesTypes.d.ts.map +1 -0
  213. package/dist/operatives/operativesTypes.js +6 -0
  214. package/dist/operatives/operativesTypes.js.map +1 -0
  215. package/dist/platformEvents/platformEvents.d.ts +14 -0
  216. package/dist/platformEvents/platformEvents.d.ts.map +1 -0
  217. package/dist/platformEvents/platformEvents.js +70 -0
  218. package/dist/platformEvents/platformEvents.js.map +1 -0
  219. package/dist/platformEvents/platformEventsTypes.d.ts +31 -0
  220. package/dist/platformEvents/platformEventsTypes.d.ts.map +1 -0
  221. package/dist/platformEvents/platformEventsTypes.js +8 -0
  222. package/dist/platformEvents/platformEventsTypes.js.map +1 -0
  223. package/dist/projects/projects.d.ts +19 -0
  224. package/dist/projects/projects.d.ts.map +1 -0
  225. package/dist/projects/projects.js +52 -0
  226. package/dist/projects/projects.js.map +1 -0
  227. package/dist/projects/projectsTypes.d.ts +47 -0
  228. package/dist/projects/projectsTypes.d.ts.map +1 -0
  229. package/dist/projects/projectsTypes.js +4 -0
  230. package/dist/projects/projectsTypes.js.map +1 -0
  231. package/dist/routineRuns/routineRuns.d.ts +19 -0
  232. package/dist/routineRuns/routineRuns.d.ts.map +1 -0
  233. package/dist/routineRuns/routineRuns.js +47 -0
  234. package/dist/routineRuns/routineRuns.js.map +1 -0
  235. package/dist/routineRuns/routineRunsTypes.d.ts +39 -0
  236. package/dist/routineRuns/routineRunsTypes.d.ts.map +1 -0
  237. package/dist/routineRuns/routineRunsTypes.js +4 -0
  238. package/dist/routineRuns/routineRunsTypes.js.map +1 -0
  239. package/dist/routines/routines.d.ts +19 -0
  240. package/dist/routines/routines.d.ts.map +1 -0
  241. package/dist/routines/routines.js +77 -0
  242. package/dist/routines/routines.js.map +1 -0
  243. package/dist/routines/routinesTypes.d.ts +106 -0
  244. package/dist/routines/routinesTypes.d.ts.map +1 -0
  245. package/dist/routines/routinesTypes.js +4 -0
  246. package/dist/routines/routinesTypes.js.map +1 -0
  247. package/dist/sdk/diskd.d.ts +3 -0
  248. package/dist/sdk/diskd.d.ts.map +1 -0
  249. package/dist/sdk/diskd.js +126 -0
  250. package/dist/sdk/diskd.js.map +1 -0
  251. package/dist/sdk/http.d.ts +13 -0
  252. package/dist/sdk/http.d.ts.map +1 -0
  253. package/dist/sdk/http.js +80 -0
  254. package/dist/sdk/http.js.map +1 -0
  255. package/dist/sdk/types.d.ts +115 -0
  256. package/dist/sdk/types.d.ts.map +1 -0
  257. package/dist/sdk/types.js +2 -0
  258. package/dist/sdk/types.js.map +1 -0
  259. package/dist/testing/auth.d.ts +8 -0
  260. package/dist/testing/auth.d.ts.map +1 -0
  261. package/dist/testing/auth.js +14 -0
  262. package/dist/testing/auth.js.map +1 -0
  263. package/dist/testing/fetchMock.d.ts +17 -0
  264. package/dist/testing/fetchMock.d.ts.map +1 -0
  265. package/dist/testing/fetchMock.js +46 -0
  266. package/dist/testing/fetchMock.js.map +1 -0
  267. package/dist/testing/index.d.ts +11 -0
  268. package/dist/testing/index.d.ts.map +1 -0
  269. package/dist/testing/index.js +11 -0
  270. package/dist/testing/index.js.map +1 -0
  271. package/dist/testing/integration.d.ts +33 -0
  272. package/dist/testing/integration.d.ts.map +1 -0
  273. package/dist/testing/integration.js +32 -0
  274. package/dist/testing/integration.js.map +1 -0
  275. package/dist/testing/jsonRpc.d.ts +9 -0
  276. package/dist/testing/jsonRpc.d.ts.map +1 -0
  277. package/dist/testing/jsonRpc.js +24 -0
  278. package/dist/testing/jsonRpc.js.map +1 -0
  279. package/dist/testing/rpcMock.d.ts +16 -0
  280. package/dist/testing/rpcMock.d.ts.map +1 -0
  281. package/dist/testing/rpcMock.js +28 -0
  282. package/dist/testing/rpcMock.js.map +1 -0
  283. package/dist/tgUserbot/tgUserbot.d.ts +23 -0
  284. package/dist/tgUserbot/tgUserbot.d.ts.map +1 -0
  285. package/dist/tgUserbot/tgUserbot.js +314 -0
  286. package/dist/tgUserbot/tgUserbot.js.map +1 -0
  287. package/dist/tgUserbot/tgUserbotTypes.d.ts +124 -0
  288. package/dist/tgUserbot/tgUserbotTypes.d.ts.map +1 -0
  289. package/dist/tgUserbot/tgUserbotTypes.js +5 -0
  290. package/dist/tgUserbot/tgUserbotTypes.js.map +1 -0
  291. package/dist/webNavigator/webNavigator.d.ts +22 -0
  292. package/dist/webNavigator/webNavigator.d.ts.map +1 -0
  293. package/dist/webNavigator/webNavigator.js +46 -0
  294. package/dist/webNavigator/webNavigator.js.map +1 -0
  295. package/dist/webNavigator/webNavigatorTypes.d.ts +133 -0
  296. package/dist/webNavigator/webNavigatorTypes.d.ts.map +1 -0
  297. package/dist/webNavigator/webNavigatorTypes.js +5 -0
  298. package/dist/webNavigator/webNavigatorTypes.js.map +1 -0
  299. package/package.json +90 -0
@@ -0,0 +1,88 @@
1
+ import type { DriveDbClient, DriveDbSchema, DriveDbType } from './driveDbTypes.js';
2
+ export type WhereClause = {
3
+ readonly [column: string]: unknown;
4
+ };
5
+ export type OrderByClause = {
6
+ readonly column: string;
7
+ readonly direction?: 'ASC' | 'DESC';
8
+ };
9
+ export type FindOptions = {
10
+ readonly where?: WhereClause;
11
+ readonly orderBy?: OrderByClause | readonly OrderByClause[];
12
+ readonly limit?: number;
13
+ readonly offset?: number;
14
+ };
15
+ export type UpdateOptions = {
16
+ readonly where: WhereClause;
17
+ readonly set: Readonly<Record<string, unknown>>;
18
+ };
19
+ export type DriveRepository = {
20
+ /** Table name this repository operates on. */
21
+ readonly table: string;
22
+ /** Insert one or more rows. */
23
+ readonly insert: (rows: readonly Readonly<Record<string, unknown>>[]) => Promise<{
24
+ readonly inserted: number;
25
+ }>;
26
+ /** Find rows matching criteria. */
27
+ readonly find: (options?: FindOptions) => Promise<readonly Readonly<Record<string, unknown>>[]>;
28
+ /** Find a single row matching criteria, or null. */
29
+ readonly findOne: (where: WhereClause) => Promise<Readonly<Record<string, unknown>> | null>;
30
+ /** Count rows matching criteria. */
31
+ readonly count: (where?: WhereClause) => Promise<number>;
32
+ /** Update rows matching criteria. */
33
+ readonly update: (options: UpdateOptions) => Promise<void>;
34
+ /** Delete rows matching criteria. */
35
+ readonly deleteRows: (where: WhereClause) => Promise<void>;
36
+ };
37
+ export type DriveDatabaseParams = {
38
+ readonly dbName: string;
39
+ readonly dbType?: DriveDbType;
40
+ readonly schema?: DriveDbSchema;
41
+ };
42
+ export type DriveDatabaseConfig = {
43
+ readonly db: DriveDbClient;
44
+ readonly dbName: string;
45
+ readonly dbType?: DriveDbType;
46
+ readonly schema?: DriveDbSchema;
47
+ };
48
+ export type DriveDatabase = {
49
+ /** Database name. */
50
+ readonly dbName: string;
51
+ /** Create the database (idempotent -- checkExists: true). */
52
+ readonly ensureCreated: () => Promise<{
53
+ readonly dbInode: string;
54
+ readonly fileId: string;
55
+ }>;
56
+ /** Recreate the database (drops if exists). */
57
+ readonly recreate: () => Promise<{
58
+ readonly dbInode: string;
59
+ readonly fileId: string;
60
+ }>;
61
+ /** Get a table-scoped repository with CRUD operations. */
62
+ readonly repository: (table: string) => DriveRepository;
63
+ /** Execute a raw SQL query with optional parameters. */
64
+ readonly query: (sql: string, parameters?: readonly unknown[]) => Promise<readonly Readonly<Record<string, unknown>>[]>;
65
+ /** Commit pending changes (flush WAL to S3). */
66
+ readonly commit: () => Promise<{
67
+ readonly commitId: string;
68
+ }>;
69
+ /** Rollback uncommitted changes (discard WAL, revert to last commit). */
70
+ readonly rollback: () => Promise<void>;
71
+ /** Get database metadata. */
72
+ readonly metadata: () => Promise<{
73
+ readonly inode: string;
74
+ readonly displayName: string;
75
+ readonly recordCount: number;
76
+ readonly sizeBytes: number;
77
+ }>;
78
+ /** Set external processing status. */
79
+ readonly setStatus: (status: string, error?: string) => Promise<void>;
80
+ /** Drop the database entirely. */
81
+ readonly drop: () => Promise<{
82
+ readonly deletedFromMetadata: boolean;
83
+ }>;
84
+ /** Access the underlying DriveDbClient for advanced operations. */
85
+ readonly raw: DriveDbClient;
86
+ };
87
+ export declare const createDriveDatabase: (config: DriveDatabaseConfig) => DriveDatabase;
88
+ //# sourceMappingURL=DriveRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DriveRepository.d.ts","sourceRoot":"","sources":["../../src/drive/DriveRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ // ---------------------------------------------------------------------------
2
+ // DriveDatabase + DriveRepository
3
+ // ---------------------------------------------------------------------------
4
+ //
5
+ // DriveDatabase -- database lifecycle (create, commit, drop, raw SQL, metadata)
6
+ // DriveRepository -- table-scoped CRUD (insert, find, findOne, count, update, delete)
7
+ //
8
+ // Usage:
9
+ // const db = diskd.os.database({
10
+ // auth,
11
+ // dbName: 'shop.workspace-123.main',
12
+ // schema: {
13
+ // users: { id: { type: 'TEXT', primaryKey: true }, name: { type: 'TEXT', notNull: true } },
14
+ // orders: { id: { type: 'TEXT', primaryKey: true }, user_id: { type: 'TEXT' } },
15
+ // },
16
+ // });
17
+ //
18
+ // await db.ensureCreated();
19
+ //
20
+ // const users = db.repository('users');
21
+ // await users.insert([{ id: 'u1', name: 'Alice' }]);
22
+ // const alice = await users.findOne({ id: 'u1' });
23
+ //
24
+ // await db.commit();
25
+ // ---------------------------------------------------------------------------
26
+ // ---------------------------------------------------------------------------
27
+ // SQL builder helpers (pure functions)
28
+ // ---------------------------------------------------------------------------
29
+ const buildWhereClause = (where) => {
30
+ const keys = Object.keys(where);
31
+ if (keys.length === 0)
32
+ return { sql: '', params: [] };
33
+ const conditions = [];
34
+ const params = [];
35
+ for (const key of keys) {
36
+ const value = where[key];
37
+ if (value === null) {
38
+ conditions.push(`${key} IS NULL`);
39
+ }
40
+ else {
41
+ conditions.push(`${key} = ?`);
42
+ params.push(value);
43
+ }
44
+ }
45
+ return { sql: ` WHERE ${conditions.join(' AND ')}`, params };
46
+ };
47
+ const buildOrderByClause = (orderBy) => {
48
+ const clauses = Array.isArray(orderBy) ? orderBy : [orderBy];
49
+ if (clauses.length === 0)
50
+ return '';
51
+ const parts = clauses.map((c) => `${c.column} ${c.direction ?? 'ASC'}`);
52
+ return ` ORDER BY ${parts.join(', ')}`;
53
+ };
54
+ const buildLimitOffset = (limit, offset) => {
55
+ let sql = '';
56
+ if (limit !== undefined)
57
+ sql += ` LIMIT ${limit}`;
58
+ if (offset !== undefined)
59
+ sql += ` OFFSET ${offset}`;
60
+ return sql;
61
+ };
62
+ // ---------------------------------------------------------------------------
63
+ // Repository factory (table-scoped)
64
+ // ---------------------------------------------------------------------------
65
+ const createRepository = (deps) => {
66
+ const { table, db, dbName, dbType, execQuery } = deps;
67
+ return {
68
+ table,
69
+ insert: async (rows) => {
70
+ const result = await db.insert({ name: dbName, table, rows, dbType });
71
+ return { inserted: result.inserted };
72
+ },
73
+ find: async (options) => {
74
+ const { where, orderBy, limit, offset } = options ?? {};
75
+ const w = where ? buildWhereClause(where) : { sql: '', params: [] };
76
+ const sql = `SELECT * FROM ${table}${w.sql}${orderBy ? buildOrderByClause(orderBy) : ''}${buildLimitOffset(limit, offset)}`;
77
+ return execQuery(sql, w.params.length > 0 ? w.params : undefined);
78
+ },
79
+ findOne: async (where) => {
80
+ const w = buildWhereClause(where);
81
+ const sql = `SELECT * FROM ${table}${w.sql} LIMIT 1`;
82
+ const rows = await execQuery(sql, w.params.length > 0 ? w.params : undefined);
83
+ return rows.length > 0 ? rows[0] : null;
84
+ },
85
+ count: async (where) => {
86
+ const w = where ? buildWhereClause(where) : { sql: '', params: [] };
87
+ const sql = `SELECT COUNT(*) AS cnt FROM ${table}${w.sql}`;
88
+ const rows = await execQuery(sql, w.params.length > 0 ? w.params : undefined);
89
+ return Number(rows[0]?.cnt ?? 0);
90
+ },
91
+ update: async (options) => {
92
+ const { where, set } = options;
93
+ const setCols = Object.keys(set);
94
+ if (setCols.length === 0)
95
+ return;
96
+ const setParts = setCols.map((col) => `${col} = ?`);
97
+ const setParams = setCols.map((col) => set[col]);
98
+ const w = buildWhereClause(where);
99
+ const sql = `UPDATE ${table} SET ${setParts.join(', ')}${w.sql}`;
100
+ await execQuery(sql, [...setParams, ...w.params]);
101
+ },
102
+ deleteRows: async (where) => {
103
+ const w = buildWhereClause(where);
104
+ const sql = `DELETE FROM ${table}${w.sql}`;
105
+ await execQuery(sql, w.params.length > 0 ? w.params : undefined);
106
+ },
107
+ };
108
+ };
109
+ // ---------------------------------------------------------------------------
110
+ // Database factory
111
+ // ---------------------------------------------------------------------------
112
+ export const createDriveDatabase = (config) => {
113
+ const { db, dbName, dbType, schema } = config;
114
+ const execQuery = async (sql, parameters) => {
115
+ const result = await db.query({ name: dbName, sql, parameters, dbType });
116
+ return result.rows;
117
+ };
118
+ return {
119
+ dbName,
120
+ ensureCreated: async () => {
121
+ const result = await db.create({ name: dbName, schema, checkExists: true, dbType });
122
+ return { dbInode: result.dbInode, fileId: result.fileId };
123
+ },
124
+ recreate: async () => {
125
+ const result = await db.create({ name: dbName, schema, recreate: true, dbType });
126
+ return { dbInode: result.dbInode, fileId: result.fileId };
127
+ },
128
+ repository: (table) => createRepository({ table, dbName, dbType, db, execQuery }),
129
+ query: execQuery,
130
+ commit: async () => {
131
+ const result = await db.commit({ name: dbName, dbType });
132
+ return { commitId: result.commitId };
133
+ },
134
+ rollback: async () => {
135
+ await db.rollback({ name: dbName, dbType });
136
+ },
137
+ metadata: async () => {
138
+ const result = await db.metadata({ name: dbName, dbType });
139
+ return {
140
+ inode: result.inode,
141
+ displayName: result.displayName,
142
+ recordCount: result.recordCount,
143
+ sizeBytes: result.sizeBytes,
144
+ };
145
+ },
146
+ setStatus: async (status, error) => {
147
+ await db.setStatus({ name: dbName, status, error, dbType });
148
+ },
149
+ drop: async () => {
150
+ const result = await db.drop({ name: dbName, dbType });
151
+ return { deletedFromMetadata: result.deletedFromMetadata };
152
+ },
153
+ raw: db,
154
+ };
155
+ };
156
+ //# sourceMappingURL=DriveRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DriveRepository.js","sourceRoot":"","sources":["../../src/drive/DriveRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { DriveCrontabClient } from './crontabTypes.js';
2
+ type RpcCall = (method: string, rpcParams: unknown) => Promise<unknown>;
3
+ export declare const createDriveCrontabClient: (params: {
4
+ readonly call: RpcCall;
5
+ }) => DriveCrontabClient;
6
+ export {};
7
+ //# sourceMappingURL=crontab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crontab.d.ts","sourceRoot":"","sources":["../../src/drive/crontab.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAuBnB,MAAM,mBAAmB,CAAC;AAG3B,KAAK,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AA2WxE,eAAO,MAAM,wBAAwB,GAAI,QAAQ;IAC/C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB,KAAG,kBAsGH,CAAC"}
@@ -0,0 +1,374 @@
1
+ const HTTP_METHODS = new Set(['DELETE', 'GET', 'POST', 'PUT']);
2
+ const PAYLOAD_KINDS = new Set(['json', 'path', 'uri']);
3
+ const isObject = (value) => typeof value === 'object' && value !== null;
4
+ const hasOwn = (obj, key) => Object.hasOwn(obj, key);
5
+ const readField = (obj, snakeKey, camelKey) => hasOwn(obj, snakeKey) ? obj[snakeKey] : obj[camelKey];
6
+ const readRequiredNonEmptyString = (obj, snakeKey, camelKey) => {
7
+ const value = readField(obj, snakeKey, camelKey);
8
+ if (typeof value !== 'string' || value.length === 0) {
9
+ throw new Error(`Invalid Drive crontab payload: '${snakeKey}' must be a non-empty string`);
10
+ }
11
+ return value;
12
+ };
13
+ const readNullableString = (obj, snakeKey, camelKey) => {
14
+ const value = readField(obj, snakeKey, camelKey);
15
+ if (value === undefined || value === null)
16
+ return null;
17
+ if (typeof value !== 'string') {
18
+ throw new Error(`Invalid Drive crontab payload: '${snakeKey}' must be a string or null`);
19
+ }
20
+ return value;
21
+ };
22
+ const readNullableNumber = (obj, snakeKey, camelKey) => {
23
+ const value = readField(obj, snakeKey, camelKey);
24
+ if (value === undefined || value === null)
25
+ return null;
26
+ if (typeof value !== 'number') {
27
+ throw new Error(`Invalid Drive crontab payload: '${snakeKey}' must be a number or null`);
28
+ }
29
+ return value;
30
+ };
31
+ const readRequiredNumber = (obj, snakeKey, camelKey) => {
32
+ const value = readField(obj, snakeKey, camelKey);
33
+ if (typeof value !== 'number') {
34
+ throw new Error(`Invalid Drive crontab payload: '${snakeKey}' must be a number`);
35
+ }
36
+ return value;
37
+ };
38
+ const readRequiredBoolean = (obj, snakeKey, camelKey) => {
39
+ const value = readField(obj, snakeKey, camelKey);
40
+ if (typeof value !== 'boolean') {
41
+ throw new Error(`Invalid Drive crontab payload: '${snakeKey}' must be a boolean`);
42
+ }
43
+ return value;
44
+ };
45
+ const readRequiredArray = (obj, snakeKey, camelKey) => {
46
+ const value = readField(obj, snakeKey, camelKey);
47
+ if (!Array.isArray(value)) {
48
+ throw new Error(`Invalid Drive crontab payload: '${snakeKey}' must be an array`);
49
+ }
50
+ return value;
51
+ };
52
+ const readRequiredHttpMethod = (obj, snakeKey, camelKey) => {
53
+ const value = readField(obj, snakeKey, camelKey);
54
+ if (typeof value !== 'string' || !HTTP_METHODS.has(value)) {
55
+ throw new Error(`Invalid Drive crontab payload: '${snakeKey}' must be a supported HTTP method`);
56
+ }
57
+ return value;
58
+ };
59
+ const readRequiredPayloadKind = (obj, snakeKey, camelKey) => {
60
+ const value = readField(obj, snakeKey, camelKey);
61
+ if (typeof value !== 'string' || !PAYLOAD_KINDS.has(value)) {
62
+ throw new Error(`Invalid Drive crontab payload: '${snakeKey}' must be a supported payload kind`);
63
+ }
64
+ return value;
65
+ };
66
+ const tryParseJsonObject = (value) => {
67
+ try {
68
+ const parsed = JSON.parse(value);
69
+ return isObject(parsed) && !Array.isArray(parsed) ? parsed : null;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ };
75
+ const isCrontabNotFoundError = (error) => {
76
+ if (!(error instanceof Error))
77
+ return false;
78
+ const jsonStart = error.message.indexOf('{');
79
+ if (jsonStart < 0)
80
+ return false;
81
+ const payload = tryParseJsonObject(error.message.slice(jsonStart));
82
+ if (!payload)
83
+ return false;
84
+ const data = payload.data;
85
+ if (!isObject(data) || Array.isArray(data))
86
+ return false;
87
+ return data.domain_code === 'CRONTAB_NOT_FOUND';
88
+ };
89
+ const decodeSchedule = (raw) => {
90
+ if (!isObject(raw) || Array.isArray(raw)) {
91
+ throw new Error('Invalid Drive crontab schedule: expected object');
92
+ }
93
+ return {
94
+ minute: readRequiredNonEmptyString(raw, 'minute', 'minute'),
95
+ hour: readRequiredNonEmptyString(raw, 'hour', 'hour'),
96
+ dayOfMonth: readRequiredNonEmptyString(raw, 'day_of_month', 'dayOfMonth'),
97
+ month: readRequiredNonEmptyString(raw, 'month', 'month'),
98
+ dayOfWeek: readRequiredNonEmptyString(raw, 'day_of_week', 'dayOfWeek'),
99
+ };
100
+ };
101
+ const encodeSchedule = (schedule) => ({
102
+ minute: schedule.minute,
103
+ hour: schedule.hour,
104
+ day_of_month: schedule.dayOfMonth,
105
+ month: schedule.month,
106
+ day_of_week: schedule.dayOfWeek,
107
+ });
108
+ const decodePayload = (raw) => {
109
+ if (!isObject(raw) || Array.isArray(raw)) {
110
+ throw new Error('Invalid Drive crontab payload: expected object');
111
+ }
112
+ const kind = readRequiredPayloadKind(raw, 'kind', 'kind');
113
+ if (kind === 'json') {
114
+ const value = readField(raw, 'value', 'value');
115
+ if (!isObject(value) && !Array.isArray(value)) {
116
+ throw new Error("Invalid Drive crontab payload: 'value' must be an object or array");
117
+ }
118
+ return {
119
+ kind: 'json',
120
+ value: value,
121
+ };
122
+ }
123
+ if (kind === 'path') {
124
+ return {
125
+ kind: 'path',
126
+ path: readRequiredNonEmptyString(raw, 'path', 'path'),
127
+ };
128
+ }
129
+ return {
130
+ kind: 'uri',
131
+ uri: readRequiredNonEmptyString(raw, 'uri', 'uri'),
132
+ };
133
+ };
134
+ const encodePayload = (payload) => {
135
+ if (payload.kind === 'json') {
136
+ return {
137
+ kind: 'json',
138
+ value: payload.value,
139
+ };
140
+ }
141
+ if (payload.kind === 'path') {
142
+ return {
143
+ kind: 'path',
144
+ path: payload.path,
145
+ };
146
+ }
147
+ return {
148
+ kind: 'uri',
149
+ uri: payload.uri,
150
+ };
151
+ };
152
+ const decodeRequest = (raw) => {
153
+ if (!isObject(raw) || Array.isArray(raw)) {
154
+ throw new Error('Invalid Drive crontab request: expected object');
155
+ }
156
+ const payloadRaw = readField(raw, 'payload', 'payload');
157
+ return {
158
+ method: readRequiredHttpMethod(raw, 'method', 'method'),
159
+ url: readRequiredNonEmptyString(raw, 'url', 'url'),
160
+ payload: payloadRaw === undefined || payloadRaw === null ? null : decodePayload(payloadRaw),
161
+ };
162
+ };
163
+ const encodeRequest = (request) => ({
164
+ method: request.method,
165
+ url: request.url,
166
+ ...(request.payload !== null ? { payload: encodePayload(request.payload) } : {}),
167
+ });
168
+ const decodeJob = (raw) => {
169
+ if (!isObject(raw) || Array.isArray(raw)) {
170
+ throw new Error('Invalid Drive crontab job: expected object');
171
+ }
172
+ const scheduleRaw = readField(raw, 'schedule', 'schedule');
173
+ const signalSubject = readNullableString(raw, 'signal_subject', 'signalSubject');
174
+ return {
175
+ jobId: readRequiredNonEmptyString(raw, 'job_id', 'jobId'),
176
+ enabled: readRequiredBoolean(raw, 'enabled', 'enabled'),
177
+ ...(scheduleRaw !== undefined && scheduleRaw !== null
178
+ ? { schedule: decodeSchedule(scheduleRaw) }
179
+ : {}),
180
+ ...(signalSubject !== null ? { signalSubject } : {}),
181
+ request: decodeRequest(readField(raw, 'request', 'request')),
182
+ };
183
+ };
184
+ const encodeJob = (job) => ({
185
+ job_id: job.jobId,
186
+ enabled: job.enabled,
187
+ ...(job.schedule !== undefined ? { schedule: encodeSchedule(job.schedule) } : {}),
188
+ ...(job.signalSubject !== undefined ? { signal_subject: job.signalSubject } : {}),
189
+ request: encodeRequest(job.request),
190
+ });
191
+ const decodeDocument = (raw) => {
192
+ if (!isObject(raw) || Array.isArray(raw)) {
193
+ throw new Error('Invalid Drive crontab document: expected object');
194
+ }
195
+ const version = readRequiredNumber(raw, 'version', 'version');
196
+ if (version !== 1) {
197
+ throw new Error("Invalid Drive crontab document: 'version' must be 1");
198
+ }
199
+ return {
200
+ version,
201
+ timezone: readNullableString(raw, 'timezone', 'timezone'),
202
+ jobs: readRequiredArray(raw, 'jobs', 'jobs').map(decodeJob),
203
+ };
204
+ };
205
+ const encodeDocument = (document) => ({
206
+ version: document.version,
207
+ timezone: document.timezone,
208
+ jobs: document.jobs.map(encodeJob),
209
+ });
210
+ const encodeScope = (scope) => {
211
+ if (scope.scopeType === 'workspace') {
212
+ return { scope_type: 'workspace' };
213
+ }
214
+ return {
215
+ scope_type: 'project',
216
+ project_id: scope.projectId,
217
+ };
218
+ };
219
+ const upsertJob = (jobs, job) => {
220
+ const existingIndex = jobs.findIndex((item) => item.jobId === job.jobId);
221
+ if (existingIndex < 0) {
222
+ return [...jobs, job];
223
+ }
224
+ return jobs.map((item, index) => (index === existingIndex ? job : item));
225
+ };
226
+ const decodeSaveResult = (raw) => {
227
+ if (!isObject(raw) || Array.isArray(raw))
228
+ throw new Error('Invalid drive/crontab/save result');
229
+ return {
230
+ jobCount: readRequiredNumber(raw, 'job_count', 'jobCount'),
231
+ nextRunAt: readNullableString(raw, 'next_run_at', 'nextRunAt'),
232
+ updatedAt: readRequiredNonEmptyString(raw, 'updated_at', 'updatedAt'),
233
+ };
234
+ };
235
+ const decodeGetResult = (raw) => {
236
+ if (!isObject(raw) || Array.isArray(raw))
237
+ throw new Error('Invalid drive/crontab/get result');
238
+ return {
239
+ document: decodeDocument(readField(raw, 'document', 'document')),
240
+ jobCount: readRequiredNumber(raw, 'job_count', 'jobCount'),
241
+ nextRunAt: readNullableString(raw, 'next_run_at', 'nextRunAt'),
242
+ updatedAt: readRequiredNonEmptyString(raw, 'updated_at', 'updatedAt'),
243
+ };
244
+ };
245
+ const decodeGetStatusResult = (raw) => {
246
+ if (!isObject(raw) || Array.isArray(raw))
247
+ throw new Error('Invalid drive/crontab/get-status result');
248
+ return {
249
+ jobCount: readRequiredNumber(raw, 'job_count', 'jobCount'),
250
+ nextRunAt: readNullableString(raw, 'next_run_at', 'nextRunAt'),
251
+ updatedAt: readRequiredNonEmptyString(raw, 'updated_at', 'updatedAt'),
252
+ };
253
+ };
254
+ const decodeListJobItem = (raw) => {
255
+ if (!isObject(raw) || Array.isArray(raw)) {
256
+ throw new Error('Invalid drive/crontab/list-jobs item');
257
+ }
258
+ const scheduleRaw = readField(raw, 'schedule', 'schedule');
259
+ const signalSubject = readNullableString(raw, 'signal_subject', 'signalSubject');
260
+ const nextRunAt = readNullableString(raw, 'next_run_at', 'nextRunAt');
261
+ return {
262
+ jobId: readRequiredNonEmptyString(raw, 'job_id', 'jobId'),
263
+ enabled: readRequiredBoolean(raw, 'enabled', 'enabled'),
264
+ ...(scheduleRaw !== undefined && scheduleRaw !== null
265
+ ? { schedule: decodeSchedule(scheduleRaw) }
266
+ : {}),
267
+ ...(signalSubject !== null ? { signalSubject } : {}),
268
+ method: readRequiredHttpMethod(raw, 'method', 'method'),
269
+ url: readRequiredNonEmptyString(raw, 'url', 'url'),
270
+ payloadSource: readRequiredPayloadKind(raw, 'payload_source', 'payloadSource'),
271
+ ...(nextRunAt !== null ? { nextRunAt } : {}),
272
+ lastRunAt: readNullableString(raw, 'last_run_at', 'lastRunAt'),
273
+ lastHttpStatus: readNullableNumber(raw, 'last_http_status', 'lastHttpStatus'),
274
+ lastErrorSummary: readNullableString(raw, 'last_error_summary', 'lastErrorSummary'),
275
+ };
276
+ };
277
+ const decodeListJobsResult = (raw) => {
278
+ if (!isObject(raw) || Array.isArray(raw))
279
+ throw new Error('Invalid drive/crontab/list-jobs result');
280
+ return {
281
+ items: readRequiredArray(raw, 'items', 'items').map(decodeListJobItem),
282
+ };
283
+ };
284
+ const decodeRunJobResult = (raw) => {
285
+ if (!isObject(raw) || Array.isArray(raw))
286
+ throw new Error('Invalid drive/crontab/run-job result');
287
+ return {
288
+ jobId: readRequiredNonEmptyString(raw, 'job_id', 'jobId'),
289
+ executedAt: readRequiredNonEmptyString(raw, 'executed_at', 'executedAt'),
290
+ lastHttpStatus: readNullableNumber(raw, 'last_http_status', 'lastHttpStatus'),
291
+ lastErrorSummary: readNullableString(raw, 'last_error_summary', 'lastErrorSummary'),
292
+ };
293
+ };
294
+ export const createDriveCrontabClient = (params) => {
295
+ const save = async (clientParams) => {
296
+ const result = await params.call('drive/crontab/save', {
297
+ scope: encodeScope(clientParams.scope),
298
+ document: encodeDocument(clientParams.document),
299
+ });
300
+ return decodeSaveResult(result);
301
+ };
302
+ const get = async (clientParams) => {
303
+ const result = await params.call('drive/crontab/get', {
304
+ scope: encodeScope(clientParams.scope),
305
+ });
306
+ return decodeGetResult(result);
307
+ };
308
+ const saveSingleJob = async (paramsForJob) => {
309
+ let currentDocument = null;
310
+ try {
311
+ currentDocument = (await get({ scope: paramsForJob.scope })).document;
312
+ }
313
+ catch (error) {
314
+ if (!isCrontabNotFoundError(error)) {
315
+ throw error;
316
+ }
317
+ }
318
+ const nextDocument = currentDocument ?? {
319
+ version: 1,
320
+ timezone: paramsForJob.timezone ?? null,
321
+ jobs: [],
322
+ };
323
+ return save({
324
+ scope: paramsForJob.scope,
325
+ document: {
326
+ version: nextDocument.version,
327
+ timezone: paramsForJob.timezone !== undefined ? paramsForJob.timezone : nextDocument.timezone,
328
+ jobs: upsertJob(nextDocument.jobs, paramsForJob.job),
329
+ },
330
+ });
331
+ };
332
+ return {
333
+ save,
334
+ get,
335
+ getStatus: async (clientParams) => {
336
+ const result = await params.call('drive/crontab/get-status', {
337
+ scope: encodeScope(clientParams.scope),
338
+ });
339
+ return decodeGetStatusResult(result);
340
+ },
341
+ createProjectJob: async (clientParams) => {
342
+ return saveSingleJob({
343
+ scope: {
344
+ scopeType: 'project',
345
+ projectId: clientParams.projectId,
346
+ },
347
+ job: clientParams.job,
348
+ timezone: clientParams.timezone,
349
+ });
350
+ },
351
+ createWorkspaceJob: async (clientParams) => {
352
+ return saveSingleJob({
353
+ scope: {
354
+ scopeType: 'workspace',
355
+ },
356
+ job: clientParams.job,
357
+ timezone: clientParams.timezone,
358
+ });
359
+ },
360
+ listJobs: async (clientParams) => {
361
+ const result = await params.call('drive/crontab/list-jobs', {
362
+ scope: encodeScope(clientParams.scope),
363
+ });
364
+ return decodeListJobsResult(result);
365
+ },
366
+ runJob: async (clientParams) => {
367
+ const result = await params.call('drive/crontab/run-job', {
368
+ job_id: clientParams.jobId,
369
+ });
370
+ return decodeRunJobResult(result);
371
+ },
372
+ };
373
+ };
374
+ //# sourceMappingURL=crontab.js.map