@forge/bridge 5.7.0-next.8 → 5.7.0-next.9-experimental-04e7c02
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/CHANGELOG.md +29 -0
- package/out/adf-renderer/adf-renderer.d.ts +37 -0
- package/out/adf-renderer/adf-renderer.d.ts.map +1 -0
- package/out/adf-renderer/adf-renderer.js +187 -0
- package/out/adf-renderer/index.d.ts +2 -0
- package/out/adf-renderer/index.d.ts.map +1 -0
- package/out/adf-renderer/index.js +7 -0
- package/out/index.d.ts +1 -0
- package/out/index.d.ts.map +1 -1
- package/out/index.js +1 -0
- package/out/object-store/download.d.ts +4 -4
- package/out/object-store/download.d.ts.map +1 -1
- package/out/object-store/download.js +13 -13
- package/out/object-store/getMetadata.d.ts +6 -0
- package/out/object-store/getMetadata.d.ts.map +1 -0
- package/out/object-store/getMetadata.js +25 -0
- package/out/object-store/types.d.ts +10 -5
- package/out/object-store/types.d.ts.map +1 -1
- package/out/object-store/upload.d.ts +3 -3
- package/out/object-store/upload.d.ts.map +1 -1
- package/out/object-store/upload.js +8 -8
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# @forge/bridge
|
|
2
2
|
|
|
3
|
+
## 5.7.0-next.9-experimental-04e7c02
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- be6eab0: Add OS upload bridge method
|
|
8
|
+
- 6e14850: Added FOS download bridge method
|
|
9
|
+
- 30c8262: Add FAUS wrapper web component
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- a03c9c5: Adds new bridge method objectStore.getMetadata
|
|
14
|
+
- 94243f1: Split development and contribution guidelines
|
|
15
|
+
- d9e48cd: minor update to tsconfig
|
|
16
|
+
- Updated dependencies [b3792e4]
|
|
17
|
+
- Updated dependencies [fae0e71]
|
|
18
|
+
- Updated dependencies [0ea6722]
|
|
19
|
+
- Updated dependencies [4718346]
|
|
20
|
+
- Updated dependencies [94243f1]
|
|
21
|
+
- Updated dependencies [0ef937d]
|
|
22
|
+
- Updated dependencies [dcd46a4]
|
|
23
|
+
- @forge/manifest@10.8.0-next.5-experimental-04e7c02
|
|
24
|
+
- @forge/resolver@1.7.1-next.0-experimental-04e7c02
|
|
25
|
+
|
|
26
|
+
## 5.7.0-next.9
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- a03c9c5: Adds new bridge method objectStore.getMetadata
|
|
31
|
+
|
|
3
32
|
## 5.7.0-next.8
|
|
4
33
|
|
|
5
34
|
### Minor Changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DocNode } from '@atlaskit/adf-schema';
|
|
2
|
+
export interface AdfPostMessageData {
|
|
3
|
+
type: 'adf-document';
|
|
4
|
+
document: DocNode;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
source: 'forge-adf-renderer';
|
|
7
|
+
}
|
|
8
|
+
export declare class ForgeADFRenderer extends HTMLElement {
|
|
9
|
+
private _adfDocument;
|
|
10
|
+
private _isConnected;
|
|
11
|
+
private iframe;
|
|
12
|
+
private origin;
|
|
13
|
+
constructor();
|
|
14
|
+
static get observedAttributes(): string[];
|
|
15
|
+
get adfDocument(): DocNode | null;
|
|
16
|
+
set adfDocument(document: DocNode | null);
|
|
17
|
+
private attachShadowDOM;
|
|
18
|
+
private createShadowDOMContent;
|
|
19
|
+
private getComponentStyles;
|
|
20
|
+
private getHTMLTemplate;
|
|
21
|
+
private cacheDOMReferences;
|
|
22
|
+
connectedCallback(): void;
|
|
23
|
+
attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
|
|
24
|
+
private handleAdfDocumentChange;
|
|
25
|
+
private setupIframe;
|
|
26
|
+
private passAdfToIframe;
|
|
27
|
+
private handleError;
|
|
28
|
+
private showErrorState;
|
|
29
|
+
private getErrorTemplate;
|
|
30
|
+
}
|
|
31
|
+
export declare function registerAdfRenderer(): void;
|
|
32
|
+
export declare const createAdfRendererIframeProps: (adfDocument: DocNode, iframeId?: string) => {
|
|
33
|
+
id: string;
|
|
34
|
+
src: string;
|
|
35
|
+
onLoad: () => void;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=adf-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adf-renderer.d.ts","sourceRoot":"","sources":["../../src/adf-renderer/adf-renderer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAA6C;;IAY3D,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAKD,IAAI,WAAW,IAAI,OAAO,GAAG,IAAI,CAEhC;IAKD,IAAI,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAEvC;IAKD,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,kBAAkB;IAS1B,iBAAiB,IAAI,IAAI;IAQzB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAwB/F,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;CAOzB;AAMD,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED,eAAO,MAAM,4BAA4B,gBAAiB,OAAO,aAAa,MAAM;;;;CAwBnF,CAAC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAdfRendererIframeProps = exports.registerAdfRenderer = exports.ForgeADFRenderer = void 0;
|
|
4
|
+
class ForgeADFRenderer extends HTMLElement {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this._adfDocument = null;
|
|
8
|
+
this._isConnected = false;
|
|
9
|
+
this.iframe = null;
|
|
10
|
+
this.origin = new URL(document.referrer).origin;
|
|
11
|
+
this.attachShadowDOM();
|
|
12
|
+
}
|
|
13
|
+
static get observedAttributes() {
|
|
14
|
+
return ['adf-document', 'width', 'height'];
|
|
15
|
+
}
|
|
16
|
+
get adfDocument() {
|
|
17
|
+
return this._adfDocument;
|
|
18
|
+
}
|
|
19
|
+
set adfDocument(document) {
|
|
20
|
+
this.handleAdfDocumentChange(document);
|
|
21
|
+
}
|
|
22
|
+
attachShadowDOM() {
|
|
23
|
+
this.attachShadow({ mode: 'open' });
|
|
24
|
+
this.createShadowDOMContent();
|
|
25
|
+
this.cacheDOMReferences();
|
|
26
|
+
}
|
|
27
|
+
createShadowDOMContent() {
|
|
28
|
+
if (!this.shadowRoot)
|
|
29
|
+
return;
|
|
30
|
+
const styles = this.getComponentStyles();
|
|
31
|
+
const template = this.getHTMLTemplate();
|
|
32
|
+
this.shadowRoot.innerHTML = `${styles}${template}`;
|
|
33
|
+
}
|
|
34
|
+
getComponentStyles() {
|
|
35
|
+
return `
|
|
36
|
+
<style>
|
|
37
|
+
:host {
|
|
38
|
+
display: block;
|
|
39
|
+
width: 100%;
|
|
40
|
+
height: 400px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
iframe {
|
|
44
|
+
width: 100%;
|
|
45
|
+
height: 100%;
|
|
46
|
+
border: 1px solid #dfe1e6;
|
|
47
|
+
border-radius: 3px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.error {
|
|
51
|
+
color: #de350b;
|
|
52
|
+
background: #ffebe6;
|
|
53
|
+
border: 1px solid #ff8f73;
|
|
54
|
+
border-radius: 3px;
|
|
55
|
+
padding: 12px;
|
|
56
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
getHTMLTemplate() {
|
|
62
|
+
const iframeSrc = `${this.origin}/forge-apps/adf-renderer`;
|
|
63
|
+
return `
|
|
64
|
+
<iframe id="forge-adf-renderer-iframe"
|
|
65
|
+
src="${iframeSrc}"
|
|
66
|
+
frameborder="0"
|
|
67
|
+
allowfullscreen>
|
|
68
|
+
</iframe>
|
|
69
|
+
`;
|
|
70
|
+
}
|
|
71
|
+
cacheDOMReferences() {
|
|
72
|
+
if (!this.shadowRoot)
|
|
73
|
+
return;
|
|
74
|
+
this.iframe = this.shadowRoot.getElementById('forge-adf-renderer-iframe');
|
|
75
|
+
}
|
|
76
|
+
connectedCallback() {
|
|
77
|
+
this._isConnected = true;
|
|
78
|
+
this.setupIframe();
|
|
79
|
+
}
|
|
80
|
+
attributeChangedCallback(name, _oldValue, newValue) {
|
|
81
|
+
if (!this._isConnected)
|
|
82
|
+
return;
|
|
83
|
+
switch (name) {
|
|
84
|
+
case 'adf-document':
|
|
85
|
+
try {
|
|
86
|
+
const parsedDocument = newValue ? JSON.parse(newValue) : null;
|
|
87
|
+
this.handleAdfDocumentChange(parsedDocument);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
this.handleError(new Error(`Invalid ADF document: ${error.message}`));
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
case 'width':
|
|
94
|
+
this.style.width = newValue || '100%';
|
|
95
|
+
break;
|
|
96
|
+
case 'height':
|
|
97
|
+
this.style.height = newValue || '400px';
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
handleAdfDocumentChange(document) {
|
|
102
|
+
try {
|
|
103
|
+
this._adfDocument = document;
|
|
104
|
+
this.passAdfToIframe();
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
this.handleError(error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
setupIframe() {
|
|
111
|
+
if (!this.iframe)
|
|
112
|
+
return;
|
|
113
|
+
try {
|
|
114
|
+
this.iframe.onload = () => {
|
|
115
|
+
this.passAdfToIframe();
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
this.handleError(error);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
passAdfToIframe() {
|
|
123
|
+
if (!this.iframe || !this.iframe.contentWindow)
|
|
124
|
+
return;
|
|
125
|
+
try {
|
|
126
|
+
const iframeWindow = this.iframe.contentWindow;
|
|
127
|
+
if (this._adfDocument) {
|
|
128
|
+
const message = {
|
|
129
|
+
type: 'adf-document',
|
|
130
|
+
document: this._adfDocument,
|
|
131
|
+
timestamp: Date.now(),
|
|
132
|
+
source: 'forge-adf-renderer'
|
|
133
|
+
};
|
|
134
|
+
iframeWindow.postMessage(message, this.origin);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
handleError(error) {
|
|
141
|
+
this.showErrorState(error);
|
|
142
|
+
}
|
|
143
|
+
showErrorState(error) {
|
|
144
|
+
if (!this.shadowRoot)
|
|
145
|
+
return;
|
|
146
|
+
const styles = this.getComponentStyles();
|
|
147
|
+
const errorTemplate = this.getErrorTemplate(error.message);
|
|
148
|
+
this.shadowRoot.innerHTML = `${styles}${errorTemplate}`;
|
|
149
|
+
}
|
|
150
|
+
getErrorTemplate(message) {
|
|
151
|
+
return `
|
|
152
|
+
<div class="error">
|
|
153
|
+
<strong>Error:</strong> ${message}
|
|
154
|
+
</div>
|
|
155
|
+
`;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.ForgeADFRenderer = ForgeADFRenderer;
|
|
159
|
+
function registerAdfRenderer() {
|
|
160
|
+
if (!customElements.get('forge-adf-renderer')) {
|
|
161
|
+
customElements.define('forge-adf-renderer', ForgeADFRenderer);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.registerAdfRenderer = registerAdfRenderer;
|
|
165
|
+
const createAdfRendererIframeProps = (adfDocument, iframeId) => {
|
|
166
|
+
const origin = new URL(document.referrer).origin;
|
|
167
|
+
const src = `${origin}/forge-apps/forge-adf-renderer`;
|
|
168
|
+
const guid = crypto.randomUUID();
|
|
169
|
+
const id = iframeId || `forge-adf-renderer-iframe-${guid}`;
|
|
170
|
+
const onLoad = () => {
|
|
171
|
+
var _a;
|
|
172
|
+
const iframe = document.getElementById(id);
|
|
173
|
+
const message = {
|
|
174
|
+
type: 'adf-document',
|
|
175
|
+
document: adfDocument,
|
|
176
|
+
timestamp: Date.now(),
|
|
177
|
+
source: 'forge-adf-renderer'
|
|
178
|
+
};
|
|
179
|
+
(_a = iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, origin);
|
|
180
|
+
};
|
|
181
|
+
return {
|
|
182
|
+
id,
|
|
183
|
+
src,
|
|
184
|
+
onLoad
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
exports.createAdfRendererIframeProps = createAdfRendererIframeProps;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adf-renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAdfRendererIframeProps = exports.registerAdfRenderer = exports.ForgeADFRenderer = void 0;
|
|
4
|
+
var adf_renderer_1 = require("./adf-renderer");
|
|
5
|
+
Object.defineProperty(exports, "ForgeADFRenderer", { enumerable: true, get: function () { return adf_renderer_1.ForgeADFRenderer; } });
|
|
6
|
+
Object.defineProperty(exports, "registerAdfRenderer", { enumerable: true, get: function () { return adf_renderer_1.registerAdfRenderer; } });
|
|
7
|
+
Object.defineProperty(exports, "createAdfRendererIframeProps", { enumerable: true, get: function () { return adf_renderer_1.createAdfRendererIframeProps; } });
|
package/out/index.d.ts
CHANGED
package/out/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
package/out/index.js
CHANGED
|
@@ -15,3 +15,4 @@ tslib_1.__exportStar(require("./events"), exports);
|
|
|
15
15
|
tslib_1.__exportStar(require("./realtime"), exports);
|
|
16
16
|
exports.i18n = tslib_1.__importStar(require("./i18n"));
|
|
17
17
|
tslib_1.__exportStar(require("./featureFlags"), exports);
|
|
18
|
+
tslib_1.__exportStar(require("./adf-renderer"), exports);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { DownloadResult
|
|
2
|
-
export declare const download: ({
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type { DownloadResult } from './types';
|
|
2
|
+
export declare const download: ({ functionKey, keys }: {
|
|
3
|
+
functionKey: string;
|
|
4
|
+
keys: string[];
|
|
5
5
|
}) => Promise<DownloadResult[]>;
|
|
6
6
|
//# sourceMappingURL=download.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/object-store/download.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAsB,
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/object-store/download.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AAUlE,eAAO,MAAM,QAAQ;iBAIN,MAAM;UACb,MAAM,EAAE;MACZ,QAAQ,cAAc,EAAE,CAqD3B,CAAC"}
|
|
@@ -3,20 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.download = void 0;
|
|
4
4
|
const invoke_1 = require("../invoke");
|
|
5
5
|
const errors_1 = require("../errors");
|
|
6
|
-
const download = async ({
|
|
7
|
-
if (!
|
|
8
|
-
throw new errors_1.BridgeAPIError('
|
|
6
|
+
const download = async ({ functionKey, keys }) => {
|
|
7
|
+
if (!functionKey || functionKey.length === 0) {
|
|
8
|
+
throw new errors_1.BridgeAPIError('functionKey is required to filter and generate download URLs');
|
|
9
9
|
}
|
|
10
|
-
if (!Array.isArray(
|
|
11
|
-
throw new errors_1.BridgeAPIError('
|
|
10
|
+
if (!Array.isArray(keys) || keys.length === 0) {
|
|
11
|
+
throw new errors_1.BridgeAPIError('keys array is required and must not be empty');
|
|
12
12
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
13
|
+
const downloadUrlsTokeys = (await (0, invoke_1.invoke)(functionKey, {
|
|
14
|
+
keys
|
|
15
15
|
}));
|
|
16
|
-
if (!
|
|
17
|
-
throw new errors_1.BridgeAPIError('Invalid response from
|
|
16
|
+
if (!downloadUrlsTokeys || typeof downloadUrlsTokeys !== 'object') {
|
|
17
|
+
throw new errors_1.BridgeAPIError('Invalid response from functionKey');
|
|
18
18
|
}
|
|
19
|
-
const downloadPromises = Object.entries(
|
|
19
|
+
const downloadPromises = Object.entries(downloadUrlsTokeys).map(async ([downloadUrl, key]) => {
|
|
20
20
|
try {
|
|
21
21
|
const response = await fetch(downloadUrl, {
|
|
22
22
|
method: 'GET'
|
|
@@ -24,7 +24,7 @@ const download = async ({ filterAndGenerateDownloadUrls, objectKeys }) => {
|
|
|
24
24
|
if (!response.ok) {
|
|
25
25
|
return {
|
|
26
26
|
success: false,
|
|
27
|
-
|
|
27
|
+
key: key,
|
|
28
28
|
status: response.status,
|
|
29
29
|
error: `Download failed with status ${response.status}`
|
|
30
30
|
};
|
|
@@ -32,7 +32,7 @@ const download = async ({ filterAndGenerateDownloadUrls, objectKeys }) => {
|
|
|
32
32
|
const blob = await response.blob();
|
|
33
33
|
return {
|
|
34
34
|
success: true,
|
|
35
|
-
|
|
35
|
+
key: key,
|
|
36
36
|
blob,
|
|
37
37
|
status: response.status
|
|
38
38
|
};
|
|
@@ -40,7 +40,7 @@ const download = async ({ filterAndGenerateDownloadUrls, objectKeys }) => {
|
|
|
40
40
|
catch (error) {
|
|
41
41
|
return {
|
|
42
42
|
success: false,
|
|
43
|
-
|
|
43
|
+
key: key,
|
|
44
44
|
status: 503,
|
|
45
45
|
error: error instanceof Error ? error.message : 'Download failed'
|
|
46
46
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMetadata.d.ts","sourceRoot":"","sources":["../../src/object-store/getMetadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAUjD,eAAO,MAAM,WAAW;iBAIT,MAAM;UACb,MAAM,EAAE;MACZ,QAAQ,iBAAiB,EAAE,CAyB9B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMetadata = void 0;
|
|
4
|
+
const invoke_1 = require("../invoke");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const getMetadata = async ({ functionKey, keys }) => {
|
|
7
|
+
if (!functionKey || functionKey.length === 0) {
|
|
8
|
+
throw new errors_1.BridgeAPIError('functionKey is required to filter and generate object metadata');
|
|
9
|
+
}
|
|
10
|
+
if (!Array.isArray(keys) || keys.length === 0) {
|
|
11
|
+
throw new errors_1.BridgeAPIError('keys array is required and must not be empty');
|
|
12
|
+
}
|
|
13
|
+
const results = await Promise.all(keys.map(async (key) => {
|
|
14
|
+
const result = (await (0, invoke_1.invoke)(functionKey, { key }));
|
|
15
|
+
if (!result || typeof result !== 'object') {
|
|
16
|
+
return {
|
|
17
|
+
key: key,
|
|
18
|
+
error: 'Invalid response from functionKey'
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}));
|
|
23
|
+
return results;
|
|
24
|
+
};
|
|
25
|
+
exports.getMetadata = getMetadata;
|
|
@@ -3,9 +3,6 @@ export declare type ObjectMetadata = {
|
|
|
3
3
|
checksum: string;
|
|
4
4
|
checksumType: string;
|
|
5
5
|
};
|
|
6
|
-
export declare type FilterAndGenerateUrls = {
|
|
7
|
-
function: string;
|
|
8
|
-
};
|
|
9
6
|
export declare type FileMetadata = ObjectMetadata & {
|
|
10
7
|
key: string;
|
|
11
8
|
ttlSeconds?: number;
|
|
@@ -13,13 +10,13 @@ export declare type FileMetadata = ObjectMetadata & {
|
|
|
13
10
|
};
|
|
14
11
|
export declare type UploadResult = {
|
|
15
12
|
success: boolean;
|
|
16
|
-
|
|
13
|
+
key: string;
|
|
17
14
|
status?: number;
|
|
18
15
|
error?: string;
|
|
19
16
|
};
|
|
20
17
|
export declare type DownloadResult = {
|
|
21
18
|
success: boolean;
|
|
22
|
-
|
|
19
|
+
key: string;
|
|
23
20
|
blob?: Blob;
|
|
24
21
|
status?: number;
|
|
25
22
|
error?: string;
|
|
@@ -30,4 +27,12 @@ export declare type PresignedURLMapping = {
|
|
|
30
27
|
export declare type DownloadURLMapping = {
|
|
31
28
|
[url: string]: string;
|
|
32
29
|
};
|
|
30
|
+
export declare type GetMetadataResult = {
|
|
31
|
+
key: string;
|
|
32
|
+
checksum?: string;
|
|
33
|
+
size?: number;
|
|
34
|
+
createdAt?: string;
|
|
35
|
+
currentVersion?: string;
|
|
36
|
+
error?: string;
|
|
37
|
+
};
|
|
33
38
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/object-store/types.ts"],"names":[],"mappings":"AAAA,oBAAY,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,oBAAY,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/object-store/types.ts"],"names":[],"mappings":"AAAA,oBAAY,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,oBAAY,YAAY,GAAG,cAAc,GAAG;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,mBAAmB,GAAG;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC;CAC7B,CAAC;AAEF,oBAAY,kBAAkB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAE3D,oBAAY,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const upload: ({
|
|
3
|
-
|
|
1
|
+
import type { UploadResult } from './types';
|
|
2
|
+
export declare const upload: ({ functionKey, objects }: {
|
|
3
|
+
functionKey: string;
|
|
4
4
|
objects: Blob[];
|
|
5
5
|
}) => Promise<UploadResult[]>;
|
|
6
6
|
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/object-store/upload.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuC,
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/object-store/upload.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuC,YAAY,EAAE,MAAM,SAAS,CAAC;AA8BjF,eAAO,MAAM,MAAM;iBAIJ,MAAM;aACV,IAAI,EAAE;MACb,QAAQ,YAAY,EAAE,CAkEzB,CAAC"}
|
|
@@ -16,19 +16,19 @@ const getObjectMetadata = async (blob) => {
|
|
|
16
16
|
checksumType
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
const upload = async ({
|
|
20
|
-
if (!
|
|
21
|
-
throw new errors_1.BridgeAPIError('
|
|
19
|
+
const upload = async ({ functionKey, objects }) => {
|
|
20
|
+
if (!functionKey || functionKey.length === 0) {
|
|
21
|
+
throw new errors_1.BridgeAPIError('functionKey is required to filter and generate presigned URLs');
|
|
22
22
|
}
|
|
23
23
|
if (!Array.isArray(objects) || objects.length === 0) {
|
|
24
24
|
throw new errors_1.BridgeAPIError('objects array is required and must not be empty');
|
|
25
25
|
}
|
|
26
26
|
const allObjectMetadata = await Promise.all(objects.map((obj) => getObjectMetadata(obj)));
|
|
27
|
-
const presignedURLsToObjectMetadata = (await (0, invoke_1.invoke)(
|
|
27
|
+
const presignedURLsToObjectMetadata = (await (0, invoke_1.invoke)(functionKey, {
|
|
28
28
|
allObjectMetadata
|
|
29
29
|
}));
|
|
30
30
|
if (!presignedURLsToObjectMetadata || typeof presignedURLsToObjectMetadata !== 'object') {
|
|
31
|
-
throw new errors_1.BridgeAPIError('Invalid response from
|
|
31
|
+
throw new errors_1.BridgeAPIError('Invalid response from functionKey');
|
|
32
32
|
}
|
|
33
33
|
const checksumToBlobMap = new Map();
|
|
34
34
|
objects.forEach((blob, index) => {
|
|
@@ -41,7 +41,7 @@ const upload = async ({ filterAndGenerateUrls, objects }) => {
|
|
|
41
41
|
if (!object) {
|
|
42
42
|
return {
|
|
43
43
|
success: false,
|
|
44
|
-
|
|
44
|
+
key: key,
|
|
45
45
|
error: `Blob not found for checksum ${checksum}`
|
|
46
46
|
};
|
|
47
47
|
}
|
|
@@ -56,7 +56,7 @@ const upload = async ({ filterAndGenerateUrls, objects }) => {
|
|
|
56
56
|
});
|
|
57
57
|
return {
|
|
58
58
|
success: response.ok,
|
|
59
|
-
|
|
59
|
+
key: key,
|
|
60
60
|
status: response.status,
|
|
61
61
|
error: response.ok ? undefined : `Upload failed with status ${response.status}`
|
|
62
62
|
};
|
|
@@ -64,7 +64,7 @@ const upload = async ({ filterAndGenerateUrls, objects }) => {
|
|
|
64
64
|
catch (error) {
|
|
65
65
|
return {
|
|
66
66
|
success: false,
|
|
67
|
-
|
|
67
|
+
key: key,
|
|
68
68
|
status: 503,
|
|
69
69
|
error: error instanceof Error ? error.message : 'Upload failed'
|
|
70
70
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/bridge",
|
|
3
|
-
"version": "5.7.0-next.
|
|
3
|
+
"version": "5.7.0-next.9-experimental-04e7c02",
|
|
4
4
|
"description": "Forge bridge API for custom UI apps",
|
|
5
5
|
"author": "Atlassian",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
@@ -13,12 +13,13 @@
|
|
|
13
13
|
"compile": "tsc -b -v"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
+
"@atlaskit/adf-schema": "^48.0.0",
|
|
16
17
|
"@atlaskit/tokens": "^1.58.0",
|
|
17
18
|
"@forge/i18n": "0.0.7",
|
|
18
|
-
"@forge/resolver": "1.7.1-next.0",
|
|
19
|
+
"@forge/resolver": "1.7.1-next.0-experimental-04e7c02",
|
|
19
20
|
"@statsig/js-client": "3.18.2",
|
|
20
21
|
"@types/history": "^4.7.11",
|
|
21
|
-
"@forge/manifest": "10.8.0-next.5"
|
|
22
|
+
"@forge/manifest": "10.8.0-next.5-experimental-04e7c02"
|
|
22
23
|
},
|
|
23
24
|
"devDependencies": {
|
|
24
25
|
"history": "5.3.0",
|