@liquidmetal-ai/raindrop 0.4.11 → 0.4.12

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 (55) hide show
  1. package/README.md +216 -64
  2. package/dist/base-command.d.ts +6 -0
  3. package/dist/base-command.d.ts.map +1 -1
  4. package/dist/base-command.js +16 -1
  5. package/dist/codegen.js +3 -3
  6. package/dist/codegen.test.js +6 -6
  7. package/dist/commands/bucket/create-credential.d.ts +25 -0
  8. package/dist/commands/bucket/create-credential.d.ts.map +1 -0
  9. package/dist/commands/bucket/create-credential.js +171 -0
  10. package/dist/commands/bucket/delete-credential.d.ts +24 -0
  11. package/dist/commands/bucket/delete-credential.d.ts.map +1 -0
  12. package/dist/commands/bucket/delete-credential.js +140 -0
  13. package/dist/commands/bucket/get-credential.d.ts +24 -0
  14. package/dist/commands/bucket/get-credential.d.ts.map +1 -0
  15. package/dist/commands/bucket/get-credential.js +149 -0
  16. package/dist/commands/bucket/list-credentials.d.ts +23 -0
  17. package/dist/commands/bucket/list-credentials.d.ts.map +1 -0
  18. package/dist/commands/bucket/list-credentials.js +146 -0
  19. package/dist/commands/build/branch.d.ts +1 -0
  20. package/dist/commands/build/branch.d.ts.map +1 -1
  21. package/dist/commands/build/branch.js +17 -0
  22. package/dist/commands/build/deploy.d.ts +1 -0
  23. package/dist/commands/build/deploy.d.ts.map +1 -1
  24. package/dist/commands/build/deploy.js +17 -0
  25. package/dist/commands/build/find.d.ts +2 -0
  26. package/dist/commands/build/find.d.ts.map +1 -1
  27. package/dist/commands/build/find.js +143 -16
  28. package/dist/commands/build/list.d.ts +6 -0
  29. package/dist/commands/build/list.d.ts.map +1 -1
  30. package/dist/commands/build/list.js +280 -99
  31. package/dist/commands/build/status.d.ts +0 -4
  32. package/dist/commands/build/status.d.ts.map +1 -1
  33. package/dist/commands/build/status.js +30 -80
  34. package/dist/commands/object/delete.d.ts.map +1 -1
  35. package/dist/commands/object/delete.js +10 -8
  36. package/dist/commands/object/get.d.ts.map +1 -1
  37. package/dist/commands/object/get.js +9 -8
  38. package/dist/commands/object/list.d.ts.map +1 -1
  39. package/dist/commands/object/list.js +8 -6
  40. package/dist/commands/object/put.d.ts.map +1 -1
  41. package/dist/commands/object/put.js +12 -10
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +4 -0
  45. package/dist/status.d.ts +21 -0
  46. package/dist/status.d.ts.map +1 -0
  47. package/dist/status.js +137 -0
  48. package/dist/tsconfig.tsbuildinfo +1 -1
  49. package/oclif.manifest.json +2185 -1170
  50. package/package.json +4 -3
  51. package/templates/db/node_modules/.bin/prisma +2 -2
  52. package/templates/db/node_modules/.bin/prisma-kysely +2 -2
  53. package/templates/db/node_modules/.bin/tsc +2 -2
  54. package/templates/db/node_modules/.bin/tsserver +2 -2
  55. package/templates/db/node_modules/.bin/zx +2 -2
@@ -6,6 +6,7 @@ import { SearchAgentService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1
6
6
  import { AnnotationService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/annotation_pb';
7
7
  import { EventStreamService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/events_pb';
8
8
  import { RiverjackService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/riverjack_pb';
9
+ import { S3CredentialService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/bucket_api_pb';
9
10
  import { Command, Interfaces } from '@oclif/core';
10
11
  import { Config } from './config.js';
11
12
  import { ServiceIdentity } from './index.js';
@@ -67,6 +68,11 @@ export declare abstract class BaseCommand<T extends typeof Command> extends Comm
67
68
  organizationId: string;
68
69
  userId: string;
69
70
  }>;
71
+ protected bucketApiService(baseUrl: string): Promise<{
72
+ client: StrictClient<typeof S3CredentialService>;
73
+ organizationId: string;
74
+ userId: string;
75
+ }>;
70
76
  protected rainbowAuthService(): Promise<{
71
77
  client: StrictClient<typeof RainbowAuthService>;
72
78
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,yDAAyD,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8DAA8D,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,8DAA8D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AAGjG,OAAO,EAAE,OAAO,EAAS,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,MAAM,EAA0B,MAAM,aAAa,CAAC;AAC7D,OAAO,EAML,eAAe,EAKhB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,OAAO,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvH,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,OAAO,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhF,8BAAsB,WAAW,CAAC,CAAC,SAAS,OAAO,OAAO,CAAE,SAAQ,OAAO;IACzE,MAAM,CAAC,YAAY;;;;;;;;MAsCjB;IAEF,MAAM,CAAC,SAAS,KAAM;IACtB,MAAM,CAAC,QAAQ,KAAM;IAErB,SAAS,CAAC,KAAK,EAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAclB,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;cAKvD,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAIrD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAK7B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAuB5C,SAAS,CAAC,SAAS,IAAI,MAAM;cAIb,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IA6BrD,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAChD,MAAM,EAAE,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;QAC5C,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;cAec,kBAAkB,IAAI,OAAO,CAAC;QAC5C,MAAM,EAAE,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC;QAChD,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;cAcc,aAAa,IAAI,OAAO,CAAC;QACvC,MAAM,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;QAC3C,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;cAkBc,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QACT,MAAM,EAAE,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;QAC/C,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;cAiBc,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9D,MAAM,EAAE,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC;QAChD,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;cAec,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QACT,MAAM,EAAE,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;QAC9C,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;cAiBc,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QACT,MAAM,EAAE,YAAY,CAAC,OAAO,mBAAmB,CAAC,CAAC;QACjD,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;cAgBc,kBAAkB,IAAI,OAAO,CAAC;QAC5C,MAAM,EAAE,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC;KACjD,CAAC;IAMI,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAWjD,GAAG,CAAC,OAAO,GAAE,MAAW,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAGhD"}
@@ -5,7 +5,7 @@ import { Command, Flags } from '@oclif/core';
5
5
  import * as fs from 'node:fs/promises';
6
6
  import path from 'node:path';
7
7
  import { loadConfig, saveConfig } from './config.js';
8
- import { catalogService, objectService, rainbowAuthService, searchAgentService, selectedOrganization, annotationService, eventStreamService, riverjackService, } from './index.js';
8
+ import { catalogService, objectService, rainbowAuthService, searchAgentService, selectedOrganization, annotationService, eventStreamService, riverjackService, bucketApiService, } from './index.js';
9
9
  export class BaseCommand extends Command {
10
10
  static HIDDEN_FLAGS = {
11
11
  config: Flags.string({
@@ -213,6 +213,21 @@ export class BaseCommand extends Command {
213
213
  });
214
214
  return result;
215
215
  }
216
+ async bucketApiService(baseUrl) {
217
+ const { client: rainbowAuth } = await this.rainbowAuthService();
218
+ const identity = await this.catalogIdentity();
219
+ const result = await bucketApiService({
220
+ rainbowAuth,
221
+ configDir: this.config.configDir,
222
+ identity: {
223
+ ...identity,
224
+ baseUrl,
225
+ },
226
+ logger: this,
227
+ enableSendVersion: this.flags.sendVersionMetadata === 'true',
228
+ });
229
+ return result;
230
+ }
216
231
  async rainbowAuthService() {
217
232
  const baseUrl = this.flags.rainbowAuthService;
218
233
  return rainbowAuthService(baseUrl);
package/dist/codegen.js CHANGED
@@ -277,9 +277,9 @@ export function gatherEnvForHandler(handler, app) {
277
277
  bindings[kebabCaseToConstantCase(valueOf(appSmartBucket.name))] = 'SmartBucket';
278
278
  types.add('SmartBucket');
279
279
  }
280
- for (const appAgentMemory of app.agentMemory) {
281
- bindings[kebabCaseToConstantCase(valueOf(appAgentMemory.name))] = 'AgentMemory';
282
- types.add('AgentMemory');
280
+ for (const appSmartMemory of app.smartMemory) {
281
+ bindings[kebabCaseToConstantCase(valueOf(appSmartMemory.name))] = 'SmartMemory';
282
+ types.add('SmartMemory');
283
283
  }
284
284
  for (const env of app.env) {
285
285
  bindings[kebabCaseToConstantCase(valueOf(env.name))] = 'string';
@@ -130,10 +130,10 @@ test('kebabCaseToCamelCase', () => {
130
130
  test('kebabCaseToUpperCamelCase', () => {
131
131
  expect(kebabCaseToUpperCamelCase('my-variable')).toEqual('MyVariable');
132
132
  });
133
- test('generates AgentMemory type bindings', async () => {
133
+ test('generates SmartMemory type bindings', async () => {
134
134
  const apps = await mustManifestFromString(`
135
135
  application "test-app" {
136
- agent_memory "user-memory" {}
136
+ smartmemory "user-memory" {}
137
137
 
138
138
  service "test-service" {}
139
139
  }
@@ -141,10 +141,10 @@ test('generates AgentMemory type bindings', async () => {
141
141
  const app = apps[0];
142
142
  const service = app.service[0];
143
143
  const generated = gatherEnvForHandler(service, app);
144
- // Should include AgentMemory import
145
- expect(generated).toMatch(/import\s+{[^}]*AgentMemory[^}]*}\s+from\s+'@liquidmetal-ai\/raindrop-framework'/);
146
- // Should include AgentMemory type binding with constant case naming
147
- expect(generated).toMatch(/USER_MEMORY:\s*AgentMemory/);
144
+ // Should include SmartMemory import
145
+ expect(generated).toMatch(/import\s+{[^}]*SmartMemory[^}]*}\s+from\s+'@liquidmetal-ai\/raindrop-framework'/);
146
+ // Should include SmartMemory type binding with constant case naming
147
+ expect(generated).toMatch(/USER_MEMORY:\s*SmartMemory/);
148
148
  });
149
149
  test('generates SmartBucket type bindings', async () => {
150
150
  const apps = await mustManifestFromString(`
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class CreateCredential extends BaseCommand<typeof CreateCredential> {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ bucket: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'expires-at': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ application: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ impersonate: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ manifest: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ rainbowAuthService: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
+ raindropCatalogService: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ rainbowAuthToken: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ rainbowOrganizationId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ rainbowUserId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ sendVersionMetadata: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
22
+ };
23
+ run(): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=create-credential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-credential.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/create-credential.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW,CAAC,OAAO,gBAAgB,CAAC;IAChF,MAAM,CAAC,WAAW,SAAwC;IAE1D,MAAM,CAAC,QAAQ,WAUb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;MAqDV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8G3B"}
@@ -0,0 +1,171 @@
1
+ import { toJsonString } from '@bufbuild/protobuf';
2
+ import { timestampDate, timestampFromDate } from '@bufbuild/protobuf/wkt';
3
+ import { valueOf } from '@liquidmetal-ai/drizzle/appify/build';
4
+ import { CreateCredentialResponseSchema } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/bucket_api_pb';
5
+ import { Flags } from '@oclif/core';
6
+ import { BaseCommand } from '../../base-command.js';
7
+ export default class CreateCredential extends BaseCommand {
8
+ static description = 'Create S3 credentials for a bucket';
9
+ static examples = [
10
+ `<%= config.bin %> bucket create-credential --bucket my-bucket --name "My API Key"
11
+ Create a new S3 credential for my-bucket
12
+ `,
13
+ `<%= config.bin %> bucket create-credential --bucket my-bucket --name "Temp Key" --expires-at "2024-12-31"
14
+ Create a credential that expires on Dec 31, 2024
15
+ `,
16
+ `<%= config.bin %> bucket create-credential --api-url https://bucket.example.com --name "Direct API Key"
17
+ Create a credential using a direct API URL
18
+ `,
19
+ ];
20
+ static flags = {
21
+ ...BaseCommand.HIDDEN_FLAGS,
22
+ bucket: Flags.string({
23
+ char: 'b',
24
+ description: 'bucket name',
25
+ required: false,
26
+ exclusive: ['api-url'],
27
+ }),
28
+ name: Flags.string({
29
+ char: 'n',
30
+ description: 'credential name',
31
+ required: true,
32
+ }),
33
+ 'expires-at': Flags.string({
34
+ description: 'expiration date (ISO 8601 format)',
35
+ required: false,
36
+ }),
37
+ 'api-url': Flags.string({
38
+ description: 'direct API URL (bypasses bucket discovery)',
39
+ required: false,
40
+ exclusive: ['bucket', 'application', 'version'],
41
+ }),
42
+ application: Flags.string({
43
+ char: 'a',
44
+ description: 'application name',
45
+ required: false,
46
+ exclusive: ['api-url'],
47
+ }),
48
+ version: Flags.string({
49
+ char: 'v',
50
+ description: 'application version',
51
+ required: false,
52
+ exclusive: ['api-url'],
53
+ }),
54
+ output: Flags.string({
55
+ char: 'o',
56
+ description: 'output format',
57
+ default: 'text',
58
+ options: ['text', 'json'],
59
+ }),
60
+ impersonate: Flags.string({
61
+ char: 'i',
62
+ description: 'impersonate organization',
63
+ required: false,
64
+ hidden: true,
65
+ }),
66
+ manifest: Flags.string({
67
+ char: 'M',
68
+ description: 'project manifest',
69
+ required: false,
70
+ default: 'raindrop.manifest',
71
+ hidden: true,
72
+ }),
73
+ };
74
+ async run() {
75
+ const { flags } = await this.parse(CreateCredential);
76
+ // Validate that we have either api-url or bucket
77
+ if (!flags['api-url'] && !flags.bucket) {
78
+ this.error('Either --api-url or --bucket must be specified');
79
+ }
80
+ let apiUrl;
81
+ let bucketName;
82
+ if (flags['api-url']) {
83
+ // Direct API URL provided, skip discovery
84
+ apiUrl = flags['api-url'];
85
+ }
86
+ else {
87
+ // Need to discover the bucket
88
+ bucketName = flags.bucket;
89
+ // Get application info from flags or config/manifest
90
+ let applicationName = flags.application;
91
+ let applicationVersionId = flags.version;
92
+ if (!applicationVersionId) {
93
+ const config = await this.loadConfig();
94
+ applicationVersionId = config.versionId;
95
+ }
96
+ if (!applicationName) {
97
+ const apps = await this.loadManifest();
98
+ const app = apps[0];
99
+ if (app === undefined) {
100
+ this.error('No application provided or found in manifest', { exit: 1 });
101
+ }
102
+ applicationName = valueOf(app.name);
103
+ }
104
+ // Query for the bucket module
105
+ const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
106
+ const organizationId = flags.impersonate ?? defaultOrganizationId;
107
+ const modulesResp = await catalogService.queryModules({
108
+ userId,
109
+ applicationName,
110
+ applicationVersionId,
111
+ organizationId,
112
+ moduleType: 'bucket',
113
+ });
114
+ // Find the specific bucket
115
+ const bucketModule = modulesResp.modules.find(m => m.name === bucketName && m.type === 'bucket');
116
+ if (!bucketModule) {
117
+ this.error(`Bucket '${bucketName}' not found in application ${applicationName}@${applicationVersionId}`);
118
+ }
119
+ // Extract the API URL from the bucket module
120
+ apiUrl = bucketModule.bucket?.s3?.apiUrl;
121
+ if (!apiUrl) {
122
+ this.error(`Bucket '${bucketName}' does not have an API URL configured`);
123
+ }
124
+ }
125
+ // Parse expires_at if provided
126
+ let expiresAt;
127
+ if (flags['expires-at']) {
128
+ const expiresDate = new Date(flags['expires-at']);
129
+ if (isNaN(expiresDate.getTime())) {
130
+ this.error('Invalid expiration date format. Use ISO 8601 format (e.g., 2024-12-31 or 2024-12-31T23:59:59Z)');
131
+ }
132
+ if (expiresDate <= new Date()) {
133
+ this.error('Expiration date must be in the future');
134
+ }
135
+ expiresAt = timestampFromDate(expiresDate);
136
+ }
137
+ // Create the S3 credential service client
138
+ const { client: credentialService } = await this.bucketApiService(apiUrl);
139
+ try {
140
+ const response = await credentialService.createCredential({
141
+ name: flags.name,
142
+ expiresAt,
143
+ });
144
+ // Output the result
145
+ if (flags.output === 'json') {
146
+ console.log(toJsonString(CreateCredentialResponseSchema, response, { prettySpaces: 2 }));
147
+ }
148
+ else {
149
+ const cred = response.credential;
150
+ if (!cred) {
151
+ this.error('No credential returned from service');
152
+ }
153
+ console.log(`Successfully created S3 credential${bucketName ? ` for bucket '${bucketName}'` : ''}`);
154
+ console.log(`\nAccess Key: ${cred.accessKey}`);
155
+ console.log(`Secret Key: ${cred.secretKey}`);
156
+ console.log(`Name: ${cred.name}`);
157
+ if (cred.createdAt) {
158
+ console.log(`Created: ${timestampDate(cred.createdAt).toISOString()}`);
159
+ }
160
+ if (cred.expiresAt) {
161
+ console.log(`Expires: ${timestampDate(cred.expiresAt).toISOString()}`);
162
+ }
163
+ console.log('\n⚠️ Save these credentials securely - the secret key cannot be retrieved again!');
164
+ }
165
+ }
166
+ catch (error) {
167
+ const err = error;
168
+ this.error(`Failed to create credential: ${err.message}`);
169
+ }
170
+ }
171
+ }
@@ -0,0 +1,24 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class DeleteCredential extends BaseCommand<typeof DeleteCredential> {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ bucket: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ 'access-key': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ application: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ impersonate: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ manifest: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ rainbowAuthService: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ raindropCatalogService: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ rainbowAuthToken: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ rainbowOrganizationId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ rainbowUserId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ sendVersionMetadata: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
21
+ };
22
+ run(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=delete-credential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-credential.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/delete-credential.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW,CAAC,OAAO,gBAAgB,CAAC;IAChF,MAAM,CAAC,WAAW,SAA6B;IAE/C,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MAgDV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqF3B"}
@@ -0,0 +1,140 @@
1
+ import { toJsonString } from '@bufbuild/protobuf';
2
+ import { valueOf } from '@liquidmetal-ai/drizzle/appify/build';
3
+ import { DeleteCredentialResponseSchema } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/bucket_api_pb';
4
+ import { Flags } from '@oclif/core';
5
+ import { BaseCommand } from '../../base-command.js';
6
+ export default class DeleteCredential extends BaseCommand {
7
+ static description = 'Delete an S3 credential';
8
+ static examples = [
9
+ `<%= config.bin %> bucket delete-credential --bucket my-bucket --access-key AKIAIOSFODNN7EXAMPLE
10
+ Delete a specific credential
11
+ `,
12
+ `<%= config.bin %> bucket delete-credential --api-url https://bucket.example.com --access-key AKIAIOSFODNN7EXAMPLE
13
+ Delete credential using a direct API URL
14
+ `,
15
+ ];
16
+ static flags = {
17
+ ...BaseCommand.HIDDEN_FLAGS,
18
+ bucket: Flags.string({
19
+ char: 'b',
20
+ description: 'bucket name',
21
+ required: false,
22
+ exclusive: ['api-url'],
23
+ }),
24
+ 'access-key': Flags.string({
25
+ description: 'access key of the credential to delete',
26
+ required: true,
27
+ }),
28
+ 'api-url': Flags.string({
29
+ description: 'direct API URL (bypasses bucket discovery)',
30
+ required: false,
31
+ exclusive: ['bucket', 'application', 'version'],
32
+ }),
33
+ application: Flags.string({
34
+ char: 'a',
35
+ description: 'application name',
36
+ required: false,
37
+ exclusive: ['api-url'],
38
+ }),
39
+ version: Flags.string({
40
+ char: 'v',
41
+ description: 'application version',
42
+ required: false,
43
+ exclusive: ['api-url'],
44
+ }),
45
+ output: Flags.string({
46
+ char: 'o',
47
+ description: 'output format',
48
+ default: 'text',
49
+ options: ['text', 'json'],
50
+ }),
51
+ impersonate: Flags.string({
52
+ char: 'i',
53
+ description: 'impersonate organization',
54
+ required: false,
55
+ hidden: true,
56
+ }),
57
+ manifest: Flags.string({
58
+ char: 'M',
59
+ description: 'project manifest',
60
+ required: false,
61
+ default: 'raindrop.manifest',
62
+ hidden: true,
63
+ }),
64
+ };
65
+ async run() {
66
+ const { flags } = await this.parse(DeleteCredential);
67
+ // Validate that we have either api-url or bucket
68
+ if (!flags['api-url'] && !flags.bucket) {
69
+ this.error('Either --api-url or --bucket must be specified');
70
+ }
71
+ let apiUrl;
72
+ let bucketName;
73
+ if (flags['api-url']) {
74
+ // Direct API URL provided, skip discovery
75
+ apiUrl = flags['api-url'];
76
+ }
77
+ else {
78
+ // Need to discover the bucket
79
+ bucketName = flags.bucket;
80
+ // Get application info from flags or config/manifest
81
+ let applicationName = flags.application;
82
+ let applicationVersionId = flags.version;
83
+ if (!applicationVersionId) {
84
+ const config = await this.loadConfig();
85
+ applicationVersionId = config.versionId;
86
+ }
87
+ if (!applicationName) {
88
+ const apps = await this.loadManifest();
89
+ const app = apps[0];
90
+ if (app === undefined) {
91
+ this.error('No application provided or found in manifest', { exit: 1 });
92
+ }
93
+ applicationName = valueOf(app.name);
94
+ }
95
+ // Query for the bucket module
96
+ const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
97
+ const organizationId = flags.impersonate ?? defaultOrganizationId;
98
+ const modulesResp = await catalogService.queryModules({
99
+ userId,
100
+ applicationName,
101
+ applicationVersionId,
102
+ organizationId,
103
+ moduleType: 'bucket',
104
+ });
105
+ // Find the specific bucket
106
+ const bucketModule = modulesResp.modules.find(m => m.name === bucketName && m.type === 'bucket');
107
+ if (!bucketModule) {
108
+ this.error(`Bucket '${bucketName}' not found in application ${applicationName}@${applicationVersionId}`);
109
+ }
110
+ // Extract the API URL from the bucket module
111
+ apiUrl = bucketModule.bucket?.s3?.apiUrl;
112
+ if (!apiUrl) {
113
+ this.error(`Bucket '${bucketName}' does not have an API URL configured`);
114
+ }
115
+ }
116
+ // Create the S3 credential service client
117
+ const { client: credentialService } = await this.bucketApiService(apiUrl);
118
+ try {
119
+ const response = await credentialService.deleteCredential({
120
+ accessKey: flags['access-key'],
121
+ });
122
+ // Output the result
123
+ if (flags.output === 'json') {
124
+ console.log(toJsonString(DeleteCredentialResponseSchema, response, { prettySpaces: 2 }));
125
+ }
126
+ else {
127
+ if (response.deleted) {
128
+ console.log(`Successfully deleted credential '${flags['access-key']}'${bucketName ? ` from bucket '${bucketName}'` : ''}`);
129
+ }
130
+ else {
131
+ console.log(`Credential '${flags['access-key']}' not found${bucketName ? ` in bucket '${bucketName}'` : ''}`);
132
+ }
133
+ }
134
+ }
135
+ catch (error) {
136
+ const err = error;
137
+ this.error(`Failed to delete credential: ${err.message}`);
138
+ }
139
+ }
140
+ }
@@ -0,0 +1,24 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class GetCredential extends BaseCommand<typeof GetCredential> {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ bucket: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ 'access-key': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ application: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ impersonate: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ manifest: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ rainbowAuthService: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ raindropCatalogService: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ rainbowAuthToken: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ rainbowOrganizationId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ rainbowUserId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ sendVersionMetadata: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
21
+ };
22
+ run(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=get-credential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-credential.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/get-credential.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW,CAAC,OAAO,aAAa,CAAC;IAC1E,MAAM,CAAC,WAAW,SAA6C;IAE/D,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MAgDV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+F3B"}