@bubblelab/bubble-core 0.1.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.
- package/LICENSE.txt +202 -0
- package/dist/bubble-bundle.d.ts +2021 -0
- package/dist/bubble-factory.d.ts +161 -0
- package/dist/bubble-factory.d.ts.map +1 -0
- package/dist/bubble-factory.js +426 -0
- package/dist/bubble-factory.js.map +1 -0
- package/dist/bubble-flow/bubble-flow-class.d.ts +19 -0
- package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -0
- package/dist/bubble-flow/bubble-flow-class.js +23 -0
- package/dist/bubble-flow/bubble-flow-class.js.map +1 -0
- package/dist/bubble-flow/sample/data-analyst-flow.d.ts +15 -0
- package/dist/bubble-flow/sample/data-analyst-flow.d.ts.map +1 -0
- package/dist/bubble-flow/sample/data-analyst-flow.js +63 -0
- package/dist/bubble-flow/sample/data-analyst-flow.js.map +1 -0
- package/dist/bubble-flow/sample/error-ts.d.ts +23 -0
- package/dist/bubble-flow/sample/error-ts.d.ts.map +1 -0
- package/dist/bubble-flow/sample/error-ts.js +31 -0
- package/dist/bubble-flow/sample/error-ts.js.map +1 -0
- package/dist/bubble-flow/sample/sanitytest.d.ts +10 -0
- package/dist/bubble-flow/sample/sanitytest.d.ts.map +1 -0
- package/dist/bubble-flow/sample/sanitytest.js +13 -0
- package/dist/bubble-flow/sample/sanitytest.js.map +1 -0
- package/dist/bubble-flow/sample/simple-webhook-2.d.ts +19 -0
- package/dist/bubble-flow/sample/simple-webhook-2.d.ts.map +1 -0
- package/dist/bubble-flow/sample/simple-webhook-2.js +23 -0
- package/dist/bubble-flow/sample/simple-webhook-2.js.map +1 -0
- package/dist/bubble-flow/sample/simple-webhook.d.ts +10 -0
- package/dist/bubble-flow/sample/simple-webhook.d.ts.map +1 -0
- package/dist/bubble-flow/sample/simple-webhook.js +18 -0
- package/dist/bubble-flow/sample/simple-webhook.js.map +1 -0
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts +29 -0
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts.map +1 -0
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.js +150 -0
- package/dist/bubble-flow/sample/simplified-data-analysis.flow.js.map +1 -0
- package/dist/bubble-flow/sample/slack-v0.1.d.ts +10 -0
- package/dist/bubble-flow/sample/slack-v0.1.d.ts.map +1 -0
- package/dist/bubble-flow/sample/slack-v0.1.js +59 -0
- package/dist/bubble-flow/sample/slack-v0.1.js.map +1 -0
- package/dist/bubble-flow/sample/slackagenttest.d.ts +10 -0
- package/dist/bubble-flow/sample/slackagenttest.d.ts.map +1 -0
- package/dist/bubble-flow/sample/slackagenttest.js +59 -0
- package/dist/bubble-flow/sample/slackagenttest.js.map +1 -0
- package/dist/bubble-trigger/index.d.ts +2 -0
- package/dist/bubble-trigger/index.d.ts.map +1 -0
- package/dist/bubble-trigger/index.js +2 -0
- package/dist/bubble-trigger/index.js.map +1 -0
- package/dist/bubble-trigger/types.d.ts +87 -0
- package/dist/bubble-trigger/types.d.ts.map +1 -0
- package/dist/bubble-trigger/types.js +14 -0
- package/dist/bubble-trigger/types.js.map +1 -0
- package/dist/bubbles/service-bubble/ai-agent.d.ts +428 -0
- package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/ai-agent.js +881 -0
- package/dist/bubbles/service-bubble/ai-agent.js.map +1 -0
- package/dist/bubbles/service-bubble/gmail.d.ts +3073 -0
- package/dist/bubbles/service-bubble/gmail.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/gmail.js +908 -0
- package/dist/bubbles/service-bubble/gmail.js.map +1 -0
- package/dist/bubbles/service-bubble/google-calendar.d.ts +3377 -0
- package/dist/bubbles/service-bubble/google-calendar.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-calendar.js +527 -0
- package/dist/bubbles/service-bubble/google-calendar.js.map +1 -0
- package/dist/bubbles/service-bubble/google-drive.d.ts +1152 -0
- package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-drive.js +943 -0
- package/dist/bubbles/service-bubble/google-drive.js.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets.d.ts +1811 -0
- package/dist/bubbles/service-bubble/google-sheets.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/google-sheets.js +904 -0
- package/dist/bubbles/service-bubble/google-sheets.js.map +1 -0
- package/dist/bubbles/service-bubble/hello-world.d.ts +74 -0
- package/dist/bubbles/service-bubble/hello-world.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/hello-world.js +67 -0
- package/dist/bubbles/service-bubble/hello-world.js.map +1 -0
- package/dist/bubbles/service-bubble/http.d.ts +134 -0
- package/dist/bubbles/service-bubble/http.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/http.js +184 -0
- package/dist/bubbles/service-bubble/http.js.map +1 -0
- package/dist/bubbles/service-bubble/postgresql.d.ts +180 -0
- package/dist/bubbles/service-bubble/postgresql.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/postgresql.js +448 -0
- package/dist/bubbles/service-bubble/postgresql.js.map +1 -0
- package/dist/bubbles/service-bubble/resend.d.ts +301 -0
- package/dist/bubbles/service-bubble/resend.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/resend.js +253 -0
- package/dist/bubbles/service-bubble/resend.js.map +1 -0
- package/dist/bubbles/service-bubble/slack.d.ts +5869 -0
- package/dist/bubbles/service-bubble/slack.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/slack.js +1536 -0
- package/dist/bubbles/service-bubble/slack.js.map +1 -0
- package/dist/bubbles/service-bubble/storage.d.ts +571 -0
- package/dist/bubbles/service-bubble/storage.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/storage.js +504 -0
- package/dist/bubbles/service-bubble/storage.js.map +1 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +308 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js +285 -0
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +416 -0
- package/dist/bubbles/tool-bubble/chart-js-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/chart-js-tool.js +570 -0
- package/dist/bubbles/tool-bubble/chart-js-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +99 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +645 -0
- package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts +112 -0
- package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/list-bubbles-tool.js +82 -0
- package/dist/bubbles/tool-bubble/list-bubbles-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +413 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.js +327 -0
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +122 -0
- package/dist/bubbles/tool-bubble/research-agent-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/research-agent-tool.js +343 -0
- package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +131 -0
- package/dist/bubbles/tool-bubble/sql-query-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/sql-query-tool.js +147 -0
- package/dist/bubbles/tool-bubble/sql-query-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/tool-template.d.ts +257 -0
- package/dist/bubbles/tool-bubble/tool-template.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/tool-template.js +238 -0
- package/dist/bubbles/tool-bubble/tool-template.js.map +1 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor-example.d.ts +8 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor-example.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor-example.js +65 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor-example.js.map +1 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor.tool.d.ts +125 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor.tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor.tool.js +169 -0
- package/dist/bubbles/tool-bubble/virtual-file-editor.tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +218 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.js +255 -0
- package/dist/bubbles/tool-bubble/web-crawl-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +134 -0
- package/dist/bubbles/tool-bubble/web-extract-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/web-extract-tool.js +175 -0
- package/dist/bubbles/tool-bubble/web-extract-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +228 -0
- package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/web-scrape-tool.js +214 -0
- package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -0
- package/dist/bubbles/tool-bubble/web-search-tool.d.ts +134 -0
- package/dist/bubbles/tool-bubble/web-search-tool.d.ts.map +1 -0
- package/dist/bubbles/tool-bubble/web-search-tool.js +155 -0
- package/dist/bubbles/tool-bubble/web-search-tool.js.map +1 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts +114 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js +777 -0
- package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.d.ts +97 -0
- package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.js +327 -0
- package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts +303 -0
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.js +297 -0
- package/dist/bubbles/workflow-bubble/database-analyzer.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.d.ts +157 -0
- package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.js +310 -0
- package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +543 -0
- package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/generate-document.workflow.js +628 -0
- package/dist/bubbles/workflow-bubble/generate-document.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +679 -0
- package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/parse-document.workflow.js +604 -0
- package/dist/bubbles/workflow-bubble/parse-document.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +1011 -0
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js +841 -0
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +883 -0
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js +781 -0
- package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +300 -0
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js +508 -0
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +731 -0
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.js +690 -0
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.js.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +401 -0
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js +382 -0
- package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js.map +1 -0
- package/dist/bubbles/workflow-bubble/workflow-template.d.ts +144 -0
- package/dist/bubbles/workflow-bubble/workflow-template.d.ts.map +1 -0
- package/dist/bubbles/workflow-bubble/workflow-template.js +124 -0
- package/dist/bubbles/workflow-bubble/workflow-template.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/BubbleLogger.d.ts +146 -0
- package/dist/logging/BubbleLogger.d.ts.map +1 -0
- package/dist/logging/BubbleLogger.js +472 -0
- package/dist/logging/BubbleLogger.js.map +1 -0
- package/dist/logging/StreamingBubbleLogger.d.ts +85 -0
- package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -0
- package/dist/logging/StreamingBubbleLogger.js +340 -0
- package/dist/logging/StreamingBubbleLogger.js.map +1 -0
- package/dist/types/ai-models.d.ts +4 -0
- package/dist/types/ai-models.d.ts.map +1 -0
- package/dist/types/ai-models.js +14 -0
- package/dist/types/ai-models.js.map +1 -0
- package/dist/types/available-tools.d.ts +4 -0
- package/dist/types/available-tools.d.ts.map +1 -0
- package/dist/types/available-tools.js +19 -0
- package/dist/types/available-tools.js.map +1 -0
- package/dist/types/base-bubble-class.d.ts +47 -0
- package/dist/types/base-bubble-class.d.ts.map +1 -0
- package/dist/types/base-bubble-class.js +212 -0
- package/dist/types/base-bubble-class.js.map +1 -0
- package/dist/types/bubble-errors.d.ts +44 -0
- package/dist/types/bubble-errors.d.ts.map +1 -0
- package/dist/types/bubble-errors.js +51 -0
- package/dist/types/bubble-errors.js.map +1 -0
- package/dist/types/bubble.d.ts +73 -0
- package/dist/types/bubble.d.ts.map +1 -0
- package/dist/types/bubble.js +2 -0
- package/dist/types/bubble.js.map +1 -0
- package/dist/types/credentials.d.ts +6 -0
- package/dist/types/credentials.d.ts.map +1 -0
- package/dist/types/credentials.js +6 -0
- package/dist/types/credentials.js.map +1 -0
- package/dist/types/service-bubble-class.d.ts +31 -0
- package/dist/types/service-bubble-class.d.ts.map +1 -0
- package/dist/types/service-bubble-class.js +36 -0
- package/dist/types/service-bubble-class.js.map +1 -0
- package/dist/types/streaming-events.d.ts +18 -0
- package/dist/types/streaming-events.d.ts.map +1 -0
- package/dist/types/streaming-events.js +5 -0
- package/dist/types/streaming-events.js.map +1 -0
- package/dist/types/tool-bubble-class.d.ts +19 -0
- package/dist/types/tool-bubble-class.d.ts.map +1 -0
- package/dist/types/tool-bubble-class.js +48 -0
- package/dist/types/tool-bubble-class.js.map +1 -0
- package/dist/types/workflow-bubble-class.d.ts +25 -0
- package/dist/types/workflow-bubble-class.d.ts.map +1 -0
- package/dist/types/workflow-bubble-class.js +30 -0
- package/dist/types/workflow-bubble-class.js.map +1 -0
- package/dist/utils/bubbleflow-parser.d.ts +32 -0
- package/dist/utils/bubbleflow-parser.d.ts.map +1 -0
- package/dist/utils/bubbleflow-parser.js +332 -0
- package/dist/utils/bubbleflow-parser.js.map +1 -0
- package/dist/utils/bubbleflow-validation.d.ts +9 -0
- package/dist/utils/bubbleflow-validation.d.ts.map +1 -0
- package/dist/utils/bubbleflow-validation.js +116 -0
- package/dist/utils/bubbleflow-validation.js.map +1 -0
- package/dist/utils/json-parsing.d.ts +20 -0
- package/dist/utils/json-parsing.d.ts.map +1 -0
- package/dist/utils/json-parsing.js +394 -0
- package/dist/utils/json-parsing.js.map +1 -0
- package/dist/utils/mock-data-generator.d.ts +43 -0
- package/dist/utils/mock-data-generator.d.ts.map +1 -0
- package/dist/utils/mock-data-generator.js +312 -0
- package/dist/utils/mock-data-generator.js.map +1 -0
- package/dist/utils/param-helper.d.ts +2 -0
- package/dist/utils/param-helper.d.ts.map +1 -0
- package/dist/utils/param-helper.js +5 -0
- package/dist/utils/param-helper.js.map +1 -0
- package/dist/utils/source-bubble-parser.d.ts +31 -0
- package/dist/utils/source-bubble-parser.d.ts.map +1 -0
- package/dist/utils/source-bubble-parser.js +231 -0
- package/dist/utils/source-bubble-parser.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/bubbles/service-bubble/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqJvB,CAAC;AAGH,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqFvB,CAAC;AAEH,KAAK,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAC1D,KAAK,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGzD,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,aAAa,CAAC,WAAW,CAAC,IACrE,OAAO,CAAC,aAAa,EAAE;IAAE,SAAS,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAE3C,qBAAa,aAAa,CACxB,CAAC,SAAS,aAAa,GAAG,aAAa,CACvC,SAAQ,aAAa,CACrB,CAAC,EACD,OAAO,CAAC,aAAa,EAAE;IAAE,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC,CACtD;IACC,MAAM,CAAC,QAAQ,CAAC,OAAO,mBAAmB;IAC1C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IAC7C,MAAM,CAAC,QAAQ,CAAC,UAAU,aAAa;IACvC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAuB;IAC7C,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAuB;IACnD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,0DACyB;IACzD,MAAM,CAAC,QAAQ,CAAC,eAAe,uWAQ7B;IACF,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ;IAE7B,OAAO,CAAC,QAAQ,CAAyB;gBAGvC,MAAM,GAAE,CAIF,EACN,OAAO,CAAC,EAAE,aAAa;IAKzB,SAAS,CAAC,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAShD,OAAO,CAAC,kBAAkB;IAkCb,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;cAK/B,aAAa,CAC3B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;QAAE,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC,CAAC;YAuCnD,YAAY;YAuDZ,OAAO;YA+CP,UAAU;YAqBV,UAAU;YA+BV,qBAAqB;CAyDpC"}
|
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { S3Client, PutObjectCommand, GetObjectCommand, DeleteObjectCommand, HeadObjectCommand, } from '@aws-sdk/client-s3';
|
|
3
|
+
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
4
|
+
import { ServiceBubble } from '../../types/service-bubble-class.js';
|
|
5
|
+
import { CredentialType } from '@bubblelab/shared-schemas';
|
|
6
|
+
// Base credentials schema that all operations share
|
|
7
|
+
const BaseCredentialsSchema = z
|
|
8
|
+
.record(z.nativeEnum(CredentialType), z.string())
|
|
9
|
+
.optional()
|
|
10
|
+
.describe('Object mapping credential types to values (injected at runtime)');
|
|
11
|
+
// Define the parameters schema for storage operations using discriminated union
|
|
12
|
+
const StorageParamsSchema = z.discriminatedUnion('operation', [
|
|
13
|
+
// Get upload URL operation
|
|
14
|
+
z.object({
|
|
15
|
+
operation: z
|
|
16
|
+
.literal('getUploadUrl')
|
|
17
|
+
.describe('Generate presigned upload URL'),
|
|
18
|
+
bucketName: z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1, 'Bucket name is required')
|
|
21
|
+
.describe('Name of the R2 bucket'),
|
|
22
|
+
fileName: z
|
|
23
|
+
.string()
|
|
24
|
+
.min(1, 'File name is required')
|
|
25
|
+
.describe('Original filename for the upload'),
|
|
26
|
+
accountId: z
|
|
27
|
+
.string()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Cloudflare Account ID - can be provided via credentials'),
|
|
30
|
+
region: z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.default('auto')
|
|
34
|
+
.describe('AWS region for R2 storage (defaults to auto)'),
|
|
35
|
+
expirationMinutes: z
|
|
36
|
+
.number()
|
|
37
|
+
.optional()
|
|
38
|
+
.default(60)
|
|
39
|
+
.describe('URL expiration time in minutes'),
|
|
40
|
+
contentType: z.string().optional().describe('Content type for uploads'),
|
|
41
|
+
userId: z.string().optional().describe('User ID for secure file isolation'),
|
|
42
|
+
credentials: BaseCredentialsSchema,
|
|
43
|
+
}),
|
|
44
|
+
// Get file operation
|
|
45
|
+
z.object({
|
|
46
|
+
operation: z.literal('getFile').describe('Generate presigned download URL'),
|
|
47
|
+
bucketName: z
|
|
48
|
+
.string()
|
|
49
|
+
.min(1, 'Bucket name is required')
|
|
50
|
+
.describe('Name of the R2 bucket'),
|
|
51
|
+
fileName: z
|
|
52
|
+
.string()
|
|
53
|
+
.min(1, 'File name is required')
|
|
54
|
+
.describe('Name of the file to retrieve'),
|
|
55
|
+
accountId: z
|
|
56
|
+
.string()
|
|
57
|
+
.optional()
|
|
58
|
+
.describe('Cloudflare Account ID - can be provided via credentials'),
|
|
59
|
+
region: z
|
|
60
|
+
.string()
|
|
61
|
+
.optional()
|
|
62
|
+
.default('auto')
|
|
63
|
+
.describe('AWS region for R2 storage (defaults to auto)'),
|
|
64
|
+
expirationMinutes: z
|
|
65
|
+
.number()
|
|
66
|
+
.optional()
|
|
67
|
+
.default(60)
|
|
68
|
+
.describe('URL expiration time in minutes'),
|
|
69
|
+
userId: z.string().optional().describe('User ID for secure file isolation'),
|
|
70
|
+
credentials: BaseCredentialsSchema,
|
|
71
|
+
}),
|
|
72
|
+
// Delete file operation
|
|
73
|
+
z.object({
|
|
74
|
+
operation: z.literal('deleteFile').describe('Delete file from bucket'),
|
|
75
|
+
bucketName: z
|
|
76
|
+
.string()
|
|
77
|
+
.min(1, 'Bucket name is required')
|
|
78
|
+
.describe('Name of the R2 bucket'),
|
|
79
|
+
fileName: z
|
|
80
|
+
.string()
|
|
81
|
+
.min(1, 'File name is required')
|
|
82
|
+
.describe('Name of the file to delete'),
|
|
83
|
+
accountId: z
|
|
84
|
+
.string()
|
|
85
|
+
.optional()
|
|
86
|
+
.describe('Cloudflare Account ID - can be provided via credentials'),
|
|
87
|
+
region: z
|
|
88
|
+
.string()
|
|
89
|
+
.optional()
|
|
90
|
+
.default('auto')
|
|
91
|
+
.describe('AWS region for R2 storage (defaults to auto)'),
|
|
92
|
+
credentials: BaseCredentialsSchema,
|
|
93
|
+
}),
|
|
94
|
+
// Update file operation
|
|
95
|
+
z.object({
|
|
96
|
+
operation: z.literal('updateFile').describe('Update/replace file content'),
|
|
97
|
+
bucketName: z
|
|
98
|
+
.string()
|
|
99
|
+
.min(1, 'Bucket name is required')
|
|
100
|
+
.describe('Name of the R2 bucket'),
|
|
101
|
+
fileName: z
|
|
102
|
+
.string()
|
|
103
|
+
.min(1, 'File name is required')
|
|
104
|
+
.describe('Name of the file to update'),
|
|
105
|
+
accountId: z
|
|
106
|
+
.string()
|
|
107
|
+
.optional()
|
|
108
|
+
.describe('Cloudflare Account ID - can be provided via credentials'),
|
|
109
|
+
region: z
|
|
110
|
+
.string()
|
|
111
|
+
.optional()
|
|
112
|
+
.default('auto')
|
|
113
|
+
.describe('AWS region for R2 storage (defaults to auto)'),
|
|
114
|
+
contentType: z.string().optional().describe('Content type for uploads'),
|
|
115
|
+
fileContent: z
|
|
116
|
+
.string()
|
|
117
|
+
.min(1, 'File content is required for updates')
|
|
118
|
+
.describe('Base64 encoded file content or raw text content'),
|
|
119
|
+
credentials: BaseCredentialsSchema,
|
|
120
|
+
}),
|
|
121
|
+
// Get multiple upload URLs operation
|
|
122
|
+
z.object({
|
|
123
|
+
operation: z
|
|
124
|
+
.literal('getMultipleUploadUrls')
|
|
125
|
+
.describe('Generate multiple presigned upload URLs for PDF + page images'),
|
|
126
|
+
bucketName: z
|
|
127
|
+
.string()
|
|
128
|
+
.min(1, 'Bucket name is required')
|
|
129
|
+
.describe('Name of the R2 bucket'),
|
|
130
|
+
pdfFileName: z
|
|
131
|
+
.string()
|
|
132
|
+
.min(1, 'PDF file name is required')
|
|
133
|
+
.describe('Original filename for the PDF'),
|
|
134
|
+
pageCount: z
|
|
135
|
+
.number()
|
|
136
|
+
.min(1, 'Page count must be at least 1')
|
|
137
|
+
.describe('Number of pages to generate upload URLs for'),
|
|
138
|
+
accountId: z
|
|
139
|
+
.string()
|
|
140
|
+
.optional()
|
|
141
|
+
.describe('Cloudflare Account ID - can be provided via credentials'),
|
|
142
|
+
region: z
|
|
143
|
+
.string()
|
|
144
|
+
.optional()
|
|
145
|
+
.default('auto')
|
|
146
|
+
.describe('AWS region for R2 storage (defaults to auto)'),
|
|
147
|
+
expirationMinutes: z
|
|
148
|
+
.number()
|
|
149
|
+
.optional()
|
|
150
|
+
.default(60)
|
|
151
|
+
.describe('URL expiration time in minutes'),
|
|
152
|
+
userId: z.string().optional().describe('User ID for secure file isolation'),
|
|
153
|
+
credentials: BaseCredentialsSchema,
|
|
154
|
+
}),
|
|
155
|
+
]);
|
|
156
|
+
// Define result schemas for different operations using discriminated union
|
|
157
|
+
const StorageResultSchema = z.discriminatedUnion('operation', [
|
|
158
|
+
// Get upload URL result
|
|
159
|
+
z.object({
|
|
160
|
+
operation: z
|
|
161
|
+
.literal('getUploadUrl')
|
|
162
|
+
.describe('Generate presigned upload URL'),
|
|
163
|
+
success: z.boolean().describe('Whether the operation was successful'),
|
|
164
|
+
uploadUrl: z.string().optional().describe('Presigned upload URL'),
|
|
165
|
+
fileName: z
|
|
166
|
+
.string()
|
|
167
|
+
.optional()
|
|
168
|
+
.describe('Secure filename generated for the upload'),
|
|
169
|
+
contentType: z.string().optional().describe('Content type of the file'),
|
|
170
|
+
error: z.string().describe('Error message if operation failed'),
|
|
171
|
+
}),
|
|
172
|
+
// Get file result
|
|
173
|
+
z.object({
|
|
174
|
+
operation: z.literal('getFile').describe('Generate presigned download URL'),
|
|
175
|
+
success: z.boolean().describe('Whether the operation was successful'),
|
|
176
|
+
downloadUrl: z.string().optional().describe('Presigned download URL'),
|
|
177
|
+
fileUrl: z.string().optional().describe('Direct file access URL'),
|
|
178
|
+
fileName: z.string().optional().describe('Name of the file'),
|
|
179
|
+
fileSize: z.number().optional().describe('File size in bytes'),
|
|
180
|
+
contentType: z.string().optional().describe('Content type of the file'),
|
|
181
|
+
lastModified: z
|
|
182
|
+
.string()
|
|
183
|
+
.optional()
|
|
184
|
+
.describe('Last modified timestamp in ISO format'),
|
|
185
|
+
error: z.string().describe('Error message if operation failed'),
|
|
186
|
+
}),
|
|
187
|
+
// Delete file result
|
|
188
|
+
z.object({
|
|
189
|
+
operation: z.literal('deleteFile').describe('Delete file from bucket'),
|
|
190
|
+
success: z.boolean().describe('Whether the operation was successful'),
|
|
191
|
+
fileName: z.string().optional().describe('Name of the deleted file'),
|
|
192
|
+
deleted: z
|
|
193
|
+
.boolean()
|
|
194
|
+
.optional()
|
|
195
|
+
.describe('Whether the file was successfully deleted'),
|
|
196
|
+
error: z.string().describe('Error message if operation failed'),
|
|
197
|
+
}),
|
|
198
|
+
// Update file result
|
|
199
|
+
z.object({
|
|
200
|
+
operation: z.literal('updateFile').describe('Update/replace file content'),
|
|
201
|
+
success: z.boolean().describe('Whether the operation was successful'),
|
|
202
|
+
fileName: z.string().optional().describe('Name of the updated file'),
|
|
203
|
+
updated: z
|
|
204
|
+
.boolean()
|
|
205
|
+
.optional()
|
|
206
|
+
.describe('Whether the file was successfully updated'),
|
|
207
|
+
contentType: z
|
|
208
|
+
.string()
|
|
209
|
+
.optional()
|
|
210
|
+
.describe('Content type of the updated file'),
|
|
211
|
+
error: z.string().describe('Error message if operation failed'),
|
|
212
|
+
}),
|
|
213
|
+
// Get multiple upload URLs result
|
|
214
|
+
z.object({
|
|
215
|
+
operation: z
|
|
216
|
+
.literal('getMultipleUploadUrls')
|
|
217
|
+
.describe('Generate multiple presigned upload URLs for PDF + page images'),
|
|
218
|
+
success: z.boolean().describe('Whether the operation was successful'),
|
|
219
|
+
pdfUploadUrl: z
|
|
220
|
+
.string()
|
|
221
|
+
.optional()
|
|
222
|
+
.describe('Presigned upload URL for PDF'),
|
|
223
|
+
pdfFileName: z.string().optional().describe('Secure filename for PDF'),
|
|
224
|
+
pageUploadUrls: z
|
|
225
|
+
.array(z.object({
|
|
226
|
+
pageNumber: z.number().describe('Page number (1-indexed)'),
|
|
227
|
+
uploadUrl: z.string().describe('Presigned upload URL for this page'),
|
|
228
|
+
fileName: z.string().describe('Secure filename for this page image'),
|
|
229
|
+
}))
|
|
230
|
+
.optional()
|
|
231
|
+
.describe('Array of upload URLs for page images'),
|
|
232
|
+
error: z.string().describe('Error message if operation failed'),
|
|
233
|
+
}),
|
|
234
|
+
]);
|
|
235
|
+
export class StorageBubble extends ServiceBubble {
|
|
236
|
+
static service = 'cloudflare-r2';
|
|
237
|
+
static authType = 'apikey';
|
|
238
|
+
static bubbleName = 'storage';
|
|
239
|
+
static type = 'service';
|
|
240
|
+
static schema = StorageParamsSchema;
|
|
241
|
+
static resultSchema = StorageResultSchema;
|
|
242
|
+
static shortDescription = 'Cloudflare R2 storage operations for file management';
|
|
243
|
+
static longDescription = `
|
|
244
|
+
A comprehensive storage bubble for Cloudflare R2 operations.
|
|
245
|
+
Use cases:
|
|
246
|
+
- Generate presigned upload URLs for client-side file uploads
|
|
247
|
+
- Get secure download URLs for file retrieval with authentication
|
|
248
|
+
- Delete files from R2 buckets
|
|
249
|
+
- Update/replace files in R2 buckets
|
|
250
|
+
- Manage file access with time-limited URLs
|
|
251
|
+
`;
|
|
252
|
+
static alias = 'r2';
|
|
253
|
+
s3Client = null;
|
|
254
|
+
constructor(params = {
|
|
255
|
+
operation: 'getUploadUrl',
|
|
256
|
+
bucketName: 'my-bucket',
|
|
257
|
+
fileName: 'example.txt',
|
|
258
|
+
}, context) {
|
|
259
|
+
super(params, context);
|
|
260
|
+
}
|
|
261
|
+
chooseCredential() {
|
|
262
|
+
// Look for R2 API key in credentials
|
|
263
|
+
const credentials = this.params.credentials;
|
|
264
|
+
if (credentials && credentials[CredentialType.CLOUDFLARE_R2_ACCESS_KEY]) {
|
|
265
|
+
return credentials[CredentialType.CLOUDFLARE_R2_ACCESS_KEY];
|
|
266
|
+
}
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
initializeS3Client() {
|
|
270
|
+
const accessKeyId = this.chooseCredential();
|
|
271
|
+
const secretAccessKey = this.params.credentials?.[CredentialType.CLOUDFLARE_R2_SECRET_KEY];
|
|
272
|
+
if (!accessKeyId || !secretAccessKey) {
|
|
273
|
+
throw new Error('R2 credentials not found. Need CLOUDFLARE_R2_ACCESS_KEY and CLOUDFLARE_R2_SECRET_KEY.');
|
|
274
|
+
}
|
|
275
|
+
// Get accountId from params or credentials
|
|
276
|
+
const accountId = this.params.accountId ||
|
|
277
|
+
this.params.credentials?.[CredentialType.CLOUDFLARE_R2_ACCOUNT_ID];
|
|
278
|
+
if (!accountId) {
|
|
279
|
+
throw new Error('Cloudflare Account ID is required. Provide via accountId parameter or CLOUDFLARE_R2_ACCOUNT_ID credential.');
|
|
280
|
+
}
|
|
281
|
+
const endpoint = `https://${accountId}.r2.cloudflarestorage.com`;
|
|
282
|
+
this.s3Client = new S3Client({
|
|
283
|
+
region: this.params.region,
|
|
284
|
+
endpoint,
|
|
285
|
+
credentials: {
|
|
286
|
+
accessKeyId,
|
|
287
|
+
secretAccessKey,
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
async testCredential() {
|
|
292
|
+
//TODO: Implement credential addition for multiple credentials
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
async performAction(context) {
|
|
296
|
+
void context;
|
|
297
|
+
const { operation } = this.params;
|
|
298
|
+
try {
|
|
299
|
+
this.initializeS3Client();
|
|
300
|
+
if (!this.s3Client) {
|
|
301
|
+
throw new Error('Failed to initialize S3 client');
|
|
302
|
+
}
|
|
303
|
+
const result = await (async () => {
|
|
304
|
+
switch (operation) {
|
|
305
|
+
case 'getUploadUrl':
|
|
306
|
+
return await this.getUploadUrl(this.params);
|
|
307
|
+
case 'getFile':
|
|
308
|
+
return await this.getFile(this.params);
|
|
309
|
+
case 'deleteFile':
|
|
310
|
+
return await this.deleteFile(this.params);
|
|
311
|
+
case 'updateFile':
|
|
312
|
+
return await this.updateFile(this.params);
|
|
313
|
+
case 'getMultipleUploadUrls':
|
|
314
|
+
return await this.getMultipleUploadUrls(this.params);
|
|
315
|
+
default:
|
|
316
|
+
throw new Error(`Unsupported operation: ${operation}`);
|
|
317
|
+
}
|
|
318
|
+
})();
|
|
319
|
+
return result;
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
return {
|
|
323
|
+
operation,
|
|
324
|
+
success: false,
|
|
325
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred',
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
async getUploadUrl(params) {
|
|
330
|
+
if (!this.s3Client) {
|
|
331
|
+
console.error('[StorageBubble] S3 client not initialized');
|
|
332
|
+
throw new Error('S3 client not initialized');
|
|
333
|
+
}
|
|
334
|
+
// Generate secure filename with timestamp and optional userId for isolation
|
|
335
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
336
|
+
const fileExtension = params.fileName.split('.').pop() || 'bin';
|
|
337
|
+
const baseName = params.fileName.replace(/\.[^/.]+$/, ''); // Remove extension
|
|
338
|
+
const sanitizedBaseName = baseName.replace(/[^a-zA-Z0-9-_]/g, '_');
|
|
339
|
+
// Include userId in path if available (from payload)
|
|
340
|
+
const userPrefix = params.userId ? `${params.userId}/` : '';
|
|
341
|
+
const secureFileName = `${userPrefix}${timestamp}-${sanitizedBaseName}.${fileExtension}`;
|
|
342
|
+
console.log('[StorageBubble] Generated secure filename:', {
|
|
343
|
+
original: params.fileName,
|
|
344
|
+
secure: secureFileName,
|
|
345
|
+
});
|
|
346
|
+
const command = new PutObjectCommand({
|
|
347
|
+
Bucket: params.bucketName,
|
|
348
|
+
Key: secureFileName, // Use secure filename as the S3 key
|
|
349
|
+
ContentType: params.contentType,
|
|
350
|
+
});
|
|
351
|
+
console.log('[StorageBubble] Generating signed URL...');
|
|
352
|
+
try {
|
|
353
|
+
const uploadUrl = await getSignedUrl(this.s3Client, command, {
|
|
354
|
+
expiresIn: params.expirationMinutes * 60, // Convert minutes to seconds
|
|
355
|
+
});
|
|
356
|
+
console.log('[StorageBubble] Upload URL generated successfully:', {
|
|
357
|
+
uploadUrl: uploadUrl.substring(0, 100) + '...',
|
|
358
|
+
secureFileName: secureFileName,
|
|
359
|
+
});
|
|
360
|
+
return {
|
|
361
|
+
operation: 'getUploadUrl',
|
|
362
|
+
success: true,
|
|
363
|
+
uploadUrl,
|
|
364
|
+
fileName: secureFileName, // Return the secure filename
|
|
365
|
+
contentType: params.contentType,
|
|
366
|
+
error: '',
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
catch (error) {
|
|
370
|
+
console.error('[StorageBubble] Failed to generate upload URL:', error);
|
|
371
|
+
throw error;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
async getFile(params) {
|
|
375
|
+
if (!this.s3Client)
|
|
376
|
+
throw new Error('S3 client not initialized');
|
|
377
|
+
const command = new GetObjectCommand({
|
|
378
|
+
Bucket: params.bucketName,
|
|
379
|
+
Key: params.fileName,
|
|
380
|
+
});
|
|
381
|
+
const downloadUrl = await getSignedUrl(this.s3Client, command, {
|
|
382
|
+
expiresIn: params.expirationMinutes * 60,
|
|
383
|
+
});
|
|
384
|
+
// Also get file metadata
|
|
385
|
+
try {
|
|
386
|
+
const headCommand = new HeadObjectCommand({
|
|
387
|
+
Bucket: params.bucketName,
|
|
388
|
+
Key: params.fileName,
|
|
389
|
+
});
|
|
390
|
+
const metadata = await this.s3Client.send(headCommand);
|
|
391
|
+
return {
|
|
392
|
+
operation: 'getFile',
|
|
393
|
+
success: true,
|
|
394
|
+
downloadUrl,
|
|
395
|
+
fileUrl: downloadUrl,
|
|
396
|
+
fileName: params.fileName,
|
|
397
|
+
fileSize: metadata.ContentLength,
|
|
398
|
+
contentType: metadata.ContentType,
|
|
399
|
+
lastModified: metadata.LastModified?.toISOString(),
|
|
400
|
+
error: '',
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
catch {
|
|
404
|
+
// If metadata fetch fails, still return the download URL
|
|
405
|
+
return {
|
|
406
|
+
operation: 'getFile',
|
|
407
|
+
success: true,
|
|
408
|
+
downloadUrl,
|
|
409
|
+
fileUrl: downloadUrl,
|
|
410
|
+
fileName: params.fileName,
|
|
411
|
+
error: '',
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
async deleteFile(params) {
|
|
416
|
+
if (!this.s3Client)
|
|
417
|
+
throw new Error('S3 client not initialized');
|
|
418
|
+
const command = new DeleteObjectCommand({
|
|
419
|
+
Bucket: params.bucketName,
|
|
420
|
+
Key: params.fileName,
|
|
421
|
+
});
|
|
422
|
+
await this.s3Client.send(command);
|
|
423
|
+
return {
|
|
424
|
+
operation: 'deleteFile',
|
|
425
|
+
success: true,
|
|
426
|
+
fileName: params.fileName,
|
|
427
|
+
deleted: true,
|
|
428
|
+
error: '',
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
async updateFile(params) {
|
|
432
|
+
if (!this.s3Client)
|
|
433
|
+
throw new Error('S3 client not initialized');
|
|
434
|
+
console.log('[StorageBubble] updateFile called with params:', {
|
|
435
|
+
bucketName: params.bucketName,
|
|
436
|
+
fileName: params.fileName,
|
|
437
|
+
contentType: params.contentType,
|
|
438
|
+
});
|
|
439
|
+
// For R2/S3, update is the same as upload - it replaces the entire object
|
|
440
|
+
const command = new PutObjectCommand({
|
|
441
|
+
Bucket: params.bucketName,
|
|
442
|
+
Key: params.fileName,
|
|
443
|
+
ContentType: params.contentType,
|
|
444
|
+
Body: params.fileContent,
|
|
445
|
+
});
|
|
446
|
+
await this.s3Client.send(command);
|
|
447
|
+
return {
|
|
448
|
+
operation: 'updateFile',
|
|
449
|
+
success: true,
|
|
450
|
+
fileName: params.fileName,
|
|
451
|
+
updated: true,
|
|
452
|
+
contentType: params.contentType,
|
|
453
|
+
error: '',
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
async getMultipleUploadUrls(params) {
|
|
457
|
+
if (!this.s3Client)
|
|
458
|
+
throw new Error('S3 client not initialized');
|
|
459
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
460
|
+
const userPrefix = params.userId ? `${params.userId}/` : '';
|
|
461
|
+
// Generate secure PDF filename
|
|
462
|
+
const pdfExtension = params.pdfFileName.split('.').pop() || 'pdf';
|
|
463
|
+
const pdfBaseName = params.pdfFileName
|
|
464
|
+
.replace(/\\.[^/.]+$/, '')
|
|
465
|
+
.replace(/[^a-zA-Z0-9-_]/g, '_');
|
|
466
|
+
const securePdfFileName = `${userPrefix}${timestamp}-${pdfBaseName}.${pdfExtension}`;
|
|
467
|
+
// Generate PDF upload URL
|
|
468
|
+
const pdfCommand = new PutObjectCommand({
|
|
469
|
+
Bucket: params.bucketName,
|
|
470
|
+
Key: securePdfFileName,
|
|
471
|
+
ContentType: 'application/pdf',
|
|
472
|
+
});
|
|
473
|
+
const pdfUploadUrl = await getSignedUrl(this.s3Client, pdfCommand, {
|
|
474
|
+
expiresIn: params.expirationMinutes * 60,
|
|
475
|
+
});
|
|
476
|
+
// Generate page image upload URLs
|
|
477
|
+
const pageUploadUrls = [];
|
|
478
|
+
for (let pageNum = 1; pageNum <= params.pageCount; pageNum++) {
|
|
479
|
+
const pageFileName = `${userPrefix}${timestamp}-${pdfBaseName}_page${pageNum}.jpeg`;
|
|
480
|
+
const pageCommand = new PutObjectCommand({
|
|
481
|
+
Bucket: params.bucketName,
|
|
482
|
+
Key: pageFileName,
|
|
483
|
+
ContentType: 'image/jpeg',
|
|
484
|
+
});
|
|
485
|
+
const pageUploadUrl = await getSignedUrl(this.s3Client, pageCommand, {
|
|
486
|
+
expiresIn: params.expirationMinutes * 60,
|
|
487
|
+
});
|
|
488
|
+
pageUploadUrls.push({
|
|
489
|
+
pageNumber: pageNum,
|
|
490
|
+
uploadUrl: pageUploadUrl,
|
|
491
|
+
fileName: pageFileName,
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
return {
|
|
495
|
+
operation: 'getMultipleUploadUrls',
|
|
496
|
+
success: true,
|
|
497
|
+
pdfUploadUrl,
|
|
498
|
+
pdfFileName: securePdfFileName,
|
|
499
|
+
pageUploadUrls,
|
|
500
|
+
error: '',
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/bubbles/service-bubble/storage.ts"],"names":[],"mappings":"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"}
|