@scaleflex/uploader 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.
Files changed (96) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/LICENSE +50 -0
  3. package/README.md +123 -0
  4. package/dist/auth/auth.service.d.ts +25 -0
  5. package/dist/auth/auth.service.d.ts.map +1 -0
  6. package/dist/auth/auth.types.d.ts +24 -0
  7. package/dist/auth/auth.types.d.ts.map +1 -0
  8. package/dist/auth/index.d.ts +3 -0
  9. package/dist/auth/index.d.ts.map +1 -0
  10. package/dist/components/actions-bar.d.ts +17 -0
  11. package/dist/components/actions-bar.d.ts.map +1 -0
  12. package/dist/components/camera-dialog.d.ts +27 -0
  13. package/dist/components/camera-dialog.d.ts.map +1 -0
  14. package/dist/components/drop-zone.d.ts +28 -0
  15. package/dist/components/drop-zone.d.ts.map +1 -0
  16. package/dist/components/file-item.d.ts +12 -0
  17. package/dist/components/file-item.d.ts.map +1 -0
  18. package/dist/components/file-list.d.ts +8 -0
  19. package/dist/components/file-list.d.ts.map +1 -0
  20. package/dist/components/import-divider.d.ts +6 -0
  21. package/dist/components/import-divider.d.ts.map +1 -0
  22. package/dist/components/index.d.ts +9 -0
  23. package/dist/components/index.d.ts.map +1 -0
  24. package/dist/components/provider-browser.d.ts +48 -0
  25. package/dist/components/provider-browser.d.ts.map +1 -0
  26. package/dist/components/screen-cast-dialog.d.ts +29 -0
  27. package/dist/components/screen-cast-dialog.d.ts.map +1 -0
  28. package/dist/components/search-provider-browser.d.ts +36 -0
  29. package/dist/components/search-provider-browser.d.ts.map +1 -0
  30. package/dist/components/source-pills.d.ts +11 -0
  31. package/dist/components/source-pills.d.ts.map +1 -0
  32. package/dist/components/success-card.d.ts +10 -0
  33. package/dist/components/success-card.d.ts.map +1 -0
  34. package/dist/components/url-dialog.d.ts +25 -0
  35. package/dist/components/url-dialog.d.ts.map +1 -0
  36. package/dist/connectors/companion-client.d.ts +58 -0
  37. package/dist/connectors/companion-client.d.ts.map +1 -0
  38. package/dist/connectors/connector.types.d.ts +56 -0
  39. package/dist/connectors/connector.types.d.ts.map +1 -0
  40. package/dist/connectors/index.d.ts +5 -0
  41. package/dist/connectors/index.d.ts.map +1 -0
  42. package/dist/connectors/provider-registry.d.ts +8 -0
  43. package/dist/connectors/provider-registry.d.ts.map +1 -0
  44. package/dist/connectors/token-store.d.ts +10 -0
  45. package/dist/connectors/token-store.d.ts.map +1 -0
  46. package/dist/controllers/store.controller.d.ts +14 -0
  47. package/dist/controllers/store.controller.d.ts.map +1 -0
  48. package/dist/define.cjs +1 -0
  49. package/dist/define.d.ts +2 -0
  50. package/dist/define.d.ts.map +1 -0
  51. package/dist/define.js +15 -0
  52. package/dist/engine/companion-upload.d.ts +23 -0
  53. package/dist/engine/companion-upload.d.ts.map +1 -0
  54. package/dist/engine/index.d.ts +2 -0
  55. package/dist/engine/index.d.ts.map +1 -0
  56. package/dist/engine/upload-engine.d.ts +56 -0
  57. package/dist/engine/upload-engine.d.ts.map +1 -0
  58. package/dist/engine/xhr-upload.d.ts +25 -0
  59. package/dist/engine/xhr-upload.d.ts.map +1 -0
  60. package/dist/events/event-bus.d.ts +38 -0
  61. package/dist/events/event-bus.d.ts.map +1 -0
  62. package/dist/events/public-events.d.ts +23 -0
  63. package/dist/events/public-events.d.ts.map +1 -0
  64. package/dist/index.cjs +1 -0
  65. package/dist/index.d.ts +17 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +21 -0
  68. package/dist/provider-browser-C-S_MPrC.js +832 -0
  69. package/dist/provider-browser-CmCwv0ph.cjs +581 -0
  70. package/dist/react.cjs +1 -0
  71. package/dist/react.d.ts +33 -0
  72. package/dist/react.d.ts.map +1 -0
  73. package/dist/react.js +125 -0
  74. package/dist/search-provider-browser-DxmLznEB.cjs +390 -0
  75. package/dist/search-provider-browser-jCOer2Y9.js +537 -0
  76. package/dist/sfx-uploader-BVDK-9xi.cjs +2029 -0
  77. package/dist/sfx-uploader-C2lWIRnU.js +3789 -0
  78. package/dist/sfx-uploader.d.ts +131 -0
  79. package/dist/sfx-uploader.d.ts.map +1 -0
  80. package/dist/store/helpers.d.ts +16 -0
  81. package/dist/store/helpers.d.ts.map +1 -0
  82. package/dist/store/index.d.ts +7 -0
  83. package/dist/store/index.d.ts.map +1 -0
  84. package/dist/store/store.d.ts +14 -0
  85. package/dist/store/store.d.ts.map +1 -0
  86. package/dist/store/store.types.d.ts +77 -0
  87. package/dist/store/store.types.d.ts.map +1 -0
  88. package/dist/test-utils.d.ts +5 -0
  89. package/dist/test-utils.d.ts.map +1 -0
  90. package/dist/types/source.types.d.ts +12 -0
  91. package/dist/types/source.types.d.ts.map +1 -0
  92. package/dist/utils/file-utils.d.ts +14 -0
  93. package/dist/utils/file-utils.d.ts.map +1 -0
  94. package/dist/utils/validate.d.ts +6 -0
  95. package/dist/utils/validate.d.ts.map +1 -0
  96. package/package.json +72 -0
@@ -0,0 +1,58 @@
1
+ import { ProviderId, CompanionListResponse, CompanionSearchResponse } from './connector.types';
2
+ /**
3
+ * Build the OAuth connect URL that should be opened in a popup.
4
+ */
5
+ export declare function getAuthUrl(companionUrl: string, provider: ProviderId): string;
6
+ /**
7
+ * List files/folders in a directory.
8
+ * Note: directory path is NOT encoded — v5 passes it raw and Companion expects it that way.
9
+ */
10
+ export declare function listFiles(companionUrl: string, provider: ProviderId, token: string, directory?: string): Promise<CompanionListResponse>;
11
+ /**
12
+ * Load the next page of results using the nextPagePath from a previous response.
13
+ */
14
+ export declare function listNextPage(companionUrl: string, token: string, nextPagePath: string): Promise<CompanionListResponse>;
15
+ /**
16
+ * Search a search-based provider (e.g. Unsplash).
17
+ * GET /search/{provider}/list?q={query}&{nextPageQuery}
18
+ */
19
+ export declare function searchProvider(companionUrl: string, provider: ProviderId, query: string, nextPageQuery?: string): Promise<CompanionSearchResponse>;
20
+ /**
21
+ * Tell Companion to download the file from the provider and upload it to
22
+ * the Scaleflex endpoint. Returns a socket token for WebSocket progress.
23
+ *
24
+ * This is ASYNC on Companion's side — it returns immediately with a token.
25
+ * The actual upload progress and completion come via WebSocket.
26
+ */
27
+ export declare function uploadRemoteFile(companionUrl: string, provider: ProviderId, token: string, requestPath: string, body: {
28
+ fileId: string;
29
+ endpoint: string;
30
+ headers: Record<string, string>;
31
+ size?: number;
32
+ metadata?: Record<string, unknown>;
33
+ httpMethod?: string;
34
+ useFormData?: boolean;
35
+ fieldname?: string;
36
+ },
37
+ /** Search providers use /search/{provider}/get/ instead of /{provider}/get/ */
38
+ isSearchProvider?: boolean): Promise<{
39
+ token: string;
40
+ }>;
41
+ /**
42
+ * Revoke the provider's OAuth token on Companion.
43
+ * Caller should also call removeToken() to clear local storage.
44
+ */
45
+ export declare function logout(companionUrl: string, provider: ProviderId, token: string): Promise<{
46
+ ok: boolean;
47
+ revoked: boolean;
48
+ }>;
49
+ /**
50
+ * Convert a Companion HTTP URL to a WebSocket URL.
51
+ * e.g. https://eu-on-24001.connector.filerobot.com → wss://eu-on-24001.connector.filerobot.com
52
+ */
53
+ export declare function getSocketHost(companionUrl: string): string;
54
+ /** Thrown when Companion returns 401 — the OAuth token has expired. */
55
+ export declare class AuthExpiredError extends Error {
56
+ constructor();
57
+ }
58
+ //# sourceMappingURL=companion-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companion-client.d.ts","sourceRoot":"","sources":["../../src/connectors/companion-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAiCpG;;GAEG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,CAK7E;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,SAAK,GACb,OAAO,CAAC,qBAAqB,CAAC,CAmBhC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,uBAAuB,CAAC,CAqBlC;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,+EAA+E;AAC/E,gBAAgB,UAAQ,GACvB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B5B;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAC1B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAc5C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,uEAAuE;AACvE,qBAAa,gBAAiB,SAAQ,KAAK;;CAK1C"}
@@ -0,0 +1,56 @@
1
+ import { SourceDef } from '../types/source.types';
2
+ export type ProviderId = 'google-drive' | 'dropbox' | 'onedrive' | 'box' | 'instagram' | 'facebook' | 'unsplash';
3
+ /** Connector configuration passed via UploaderConfig. */
4
+ export interface ConnectorConfig {
5
+ companionUrl: string;
6
+ providers: ProviderId[];
7
+ customSources?: SourceDef[];
8
+ }
9
+ /** A file or folder item returned by Companion's list endpoint. */
10
+ export interface CompanionItem {
11
+ id: string;
12
+ name: string;
13
+ mimeType: string;
14
+ isFolder: boolean;
15
+ thumbnail: string | null;
16
+ size: number;
17
+ requestPath: string;
18
+ }
19
+ /** Response from GET /{provider}/list/{directory}. */
20
+ export interface CompanionListResponse {
21
+ items: CompanionItem[];
22
+ nextPagePath: string | null;
23
+ username: string | null;
24
+ }
25
+ /** A search result item (e.g. Unsplash). */
26
+ export interface CompanionSearchItem {
27
+ id: string;
28
+ name: string;
29
+ mimeType: string;
30
+ thumbnail: string | null;
31
+ size: number;
32
+ requestPath: string;
33
+ author?: {
34
+ name?: string;
35
+ url?: string;
36
+ };
37
+ }
38
+ /** Response from GET /search/{provider}/list?q={query}. */
39
+ export interface CompanionSearchResponse {
40
+ items: CompanionSearchItem[];
41
+ searchedFor: string;
42
+ nextPageQuery: string | null;
43
+ }
44
+ /** Metadata for a remote file selected from a connector, used for Companion proxy upload. */
45
+ export interface RemoteFileInfo {
46
+ companionUrl: string;
47
+ provider: ProviderId;
48
+ token: string;
49
+ requestPath: string;
50
+ fileId: string;
51
+ name: string;
52
+ mimeType: string;
53
+ size: number;
54
+ thumbnail: string | null;
55
+ }
56
+ //# sourceMappingURL=connector.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.types.d.ts","sourceRoot":"","sources":["../../src/connectors/connector.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,SAAS,GACT,UAAU,GACV,KAAK,GACL,WAAW,GACX,UAAU,GACV,UAAU,CAAC;AAEf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,6FAA6F;AAC7F,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
@@ -0,0 +1,5 @@
1
+ export type { ProviderId, ConnectorConfig, CompanionItem, CompanionListResponse, CompanionSearchItem, CompanionSearchResponse, RemoteFileInfo, } from './connector.types';
2
+ export { getProviderSources } from './provider-registry';
3
+ export { getAuthUrl, listFiles, listNextPage, searchProvider, uploadRemoteFile, logout, getSocketHost, AuthExpiredError, } from './companion-client';
4
+ export { getToken, setToken, removeToken, listenForAuthToken } from './token-store';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,MAAM,EACN,aAAa,EACb,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { SourceDef } from '../types/source.types';
2
+ import { ProviderId } from './connector.types';
3
+ /**
4
+ * Get SourceDef entries for the given provider IDs,
5
+ * ready to merge with CORE_SOURCES for source-pills.
6
+ */
7
+ export declare function getProviderSources(providers: ProviderId[]): SourceDef[];
8
+ //# sourceMappingURL=provider-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/connectors/provider-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgDpD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAIvE"}
@@ -0,0 +1,10 @@
1
+ import { ProviderId } from './connector.types';
2
+ export declare function getToken(provider: ProviderId): string | null;
3
+ export declare function setToken(provider: ProviderId, token: string): void;
4
+ export declare function removeToken(provider: ProviderId): void;
5
+ /**
6
+ * Listen for the OAuth token sent from the Companion popup via postMessage.
7
+ * Returns a cleanup function to remove the listener.
8
+ */
9
+ export declare function listenForAuthToken(expectedOrigin: string, onToken: (token: string) => void): () => void;
10
+ //# sourceMappingURL=token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../src/connectors/token-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAM5D;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMlE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAMtD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,MAAM,IAAI,CAaZ"}
@@ -0,0 +1,14 @@
1
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
2
+ import { Store } from '../store/store';
3
+ import { UploaderState } from '../store/store.types';
4
+ export declare class StoreController implements ReactiveController {
5
+ private host;
6
+ private store;
7
+ private unsubscribe?;
8
+ constructor(host: ReactiveControllerHost, store: Store<UploaderState>);
9
+ get state(): UploaderState;
10
+ setState(partial: Partial<UploaderState>): void;
11
+ hostConnected(): void;
12
+ hostDisconnected(): void;
13
+ }
14
+ //# sourceMappingURL=store.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/store.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,eAAgB,YAAW,kBAAkB;IACxD,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,WAAW,CAAC,CAAa;gBAErB,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAMrE,IAAI,KAAK,IAAI,aAAa,CAEzB;IAED,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAI/C,aAAa,IAAI,IAAI;IAMrB,gBAAgB,IAAI,IAAI;CAGzB"}
@@ -0,0 +1 @@
1
+ "use strict";const e=require("./sfx-uploader-BVDK-9xi.cjs"),s=(f,i)=>{typeof customElements<"u"&&!customElements.get(f)&&customElements.define(f,i)};s("sfx-uploader",e.SfxUploader);s("sfx-drop-zone",e.SfxDropZone);s("sfx-import-divider",e.SfxImportDivider);s("sfx-source-pills",e.SfxSourcePills);s("sfx-file-list",e.SfxFileList);s("sfx-file-item",e.SfxFileItem);s("sfx-success-card",e.SfxSuccessCard);s("sfx-actions-bar",e.SfxActionsBar);s("sfx-url-dialog",e.SfxUrlDialog);s("sfx-camera-dialog",e.SfxCameraDialog);s("sfx-screen-cast-dialog",e.SfxScreenCastDialog);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":""}
package/dist/define.js ADDED
@@ -0,0 +1,15 @@
1
+ import { g as f, a as i, d as o, e as r, c as l, b as x, f as t, S as c, n as d, o as S, p as m } from "./sfx-uploader-C2lWIRnU.js";
2
+ const s = (e, a) => {
3
+ typeof customElements < "u" && !customElements.get(e) && customElements.define(e, a);
4
+ };
5
+ s("sfx-uploader", f);
6
+ s("sfx-drop-zone", i);
7
+ s("sfx-import-divider", o);
8
+ s("sfx-source-pills", r);
9
+ s("sfx-file-list", l);
10
+ s("sfx-file-item", x);
11
+ s("sfx-success-card", t);
12
+ s("sfx-actions-bar", c);
13
+ s("sfx-url-dialog", d);
14
+ s("sfx-camera-dialog", S);
15
+ s("sfx-screen-cast-dialog", m);
@@ -0,0 +1,23 @@
1
+ import { UploadFile, UploadResponse } from '../store/store.types';
2
+ import { AuthHeaders } from '../auth/auth.types';
3
+ import { XhrUploadHandle } from './xhr-upload';
4
+ export interface CompanionUploadOptions {
5
+ apiBase: string;
6
+ authHeaders: AuthHeaders;
7
+ folder: string;
8
+ onProgress: (bytesUploaded: number, bytesTotal: number) => void;
9
+ onComplete: (response: UploadResponse) => void;
10
+ onError: (error: Error) => void;
11
+ }
12
+ /**
13
+ * Upload a file via the Companion proxy: Companion downloads from the
14
+ * cloud provider and uploads to Scaleflex on our behalf.
15
+ *
16
+ * Flow:
17
+ * 1. POST to Companion /{provider}/get/{requestPath} with Scaleflex endpoint info
18
+ * 2. Companion returns immediately with { token } (async upload)
19
+ * 3. Connect to WebSocket at wss://{companionHost}/api/{token}
20
+ * 4. Receive 'progress', 'success', 'error' events via WebSocket
21
+ */
22
+ export declare function companionUploadFile(uploadFile: UploadFile, opts: CompanionUploadOptions): XhrUploadHandle;
23
+ //# sourceMappingURL=companion-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companion-upload.d.ts","sourceRoot":"","sources":["../../src/engine/companion-upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,UAAU,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,sBAAsB,GAC3B,eAAe,CAmJjB"}
@@ -0,0 +1,2 @@
1
+ export { UploadEngine, type UploadEngineConfig } from './upload-engine';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { Store } from '../store/store';
2
+ import { UploaderState } from '../store/store.types';
3
+ import { AuthHeaders } from '../auth/auth.types';
4
+ export interface UploadEngineConfig {
5
+ apiBase: string;
6
+ authHeaders: AuthHeaders;
7
+ }
8
+ export declare class UploadEngine {
9
+ private store;
10
+ private config;
11
+ private activeUploads;
12
+ private retryTimers;
13
+ private unsubscribe;
14
+ constructor(store: Store<UploaderState>, config: UploadEngineConfig);
15
+ /**
16
+ * Start processing the queue. Subscribes to store changes to
17
+ * automatically pick up newly queued files.
18
+ */
19
+ start(): void;
20
+ /**
21
+ * Upload all queued files. Transitions idle files → queued, then processes.
22
+ */
23
+ uploadAll(): void;
24
+ /**
25
+ * Retry a single failed/errored file.
26
+ */
27
+ retryFile(fileId: string): void;
28
+ /**
29
+ * Retry all failed/errored files.
30
+ */
31
+ retryAll(): void;
32
+ /**
33
+ * Cancel a single file upload.
34
+ */
35
+ cancelFile(fileId: string): void;
36
+ /**
37
+ * Cancel all active/queued uploads.
38
+ */
39
+ cancelAll(): void;
40
+ /**
41
+ * Update auth config (e.g. after SASS key renewal).
42
+ */
43
+ updateConfig(patch: Partial<UploadEngineConfig>): void;
44
+ /**
45
+ * Clean up: abort all uploads, clear timers, unsubscribe.
46
+ */
47
+ destroy(): void;
48
+ private processQueue;
49
+ private startUpload;
50
+ private handleComplete;
51
+ private handleError;
52
+ private abortUpload;
53
+ private updateTotalProgress;
54
+ private checkAllComplete;
55
+ }
56
+ //# sourceMappingURL=upload-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-engine.d.ts","sourceRoot":"","sources":["../../src/engine/upload-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,WAAW,CAAoD;IACvE,OAAO,CAAC,WAAW,CAA6B;gBAEpC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,kBAAkB;IAKnE;;;OAGG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,SAAS,IAAI,IAAI;IAiBjB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAc/B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAgBhB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC;;OAEG;IACH,SAAS,IAAI,IAAI;IAWjB;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAItD;;OAEG;IACH,OAAO,IAAI,IAAI;IAcf,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,WAAW;IA2CnB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;CAazB"}
@@ -0,0 +1,25 @@
1
+ import { UploadFile, UploadResponse } from '../store/store.types';
2
+ import { AuthHeaders } from '../auth/auth.types';
3
+ export interface XhrUploadOptions {
4
+ apiBase: string;
5
+ authHeaders: AuthHeaders;
6
+ folder: string;
7
+ onProgress: (bytesUploaded: number, bytesTotal: number) => void;
8
+ onComplete: (response: UploadResponse) => void;
9
+ onError: (error: Error) => void;
10
+ }
11
+ export interface XhrUploadHandle {
12
+ abort: () => void;
13
+ }
14
+ /**
15
+ * Upload a local File to Scaleflex /v4/files via XHR.
16
+ * Returns a handle with an abort method.
17
+ */
18
+ export declare function xhrUploadFile(uploadFile: UploadFile, opts: XhrUploadOptions): XhrUploadHandle;
19
+ /**
20
+ * Upload a remote URL to Scaleflex /v4/files/upload_url.
21
+ */
22
+ export declare function xhrUploadUrl(uploadFile: UploadFile, opts: Omit<XhrUploadOptions, 'onProgress'> & {
23
+ onProgress?: never;
24
+ }): XhrUploadHandle;
25
+ //# sourceMappingURL=xhr-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhr-upload.d.ts","sourceRoot":"","sources":["../../src/engine/xhr-upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,UAAU,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,gBAAgB,GACrB,eAAe,CAgFjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GAClE,eAAe,CA8DjB"}
@@ -0,0 +1,38 @@
1
+ type Handler<T = unknown> = (payload: T) => void;
2
+ export declare class EventBus<EventMap extends {} = Record<string, unknown>> {
3
+ private handlers;
4
+ on<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): void;
5
+ off<K extends keyof EventMap>(event: K, handler: Handler<EventMap[K]>): void;
6
+ emit<K extends keyof EventMap>(event: K, payload: EventMap[K]): void;
7
+ destroy(): void;
8
+ }
9
+ export interface InternalEventMap {
10
+ 'drop-zone-enter': void;
11
+ 'drop-zone-leave': void;
12
+ 'drop-zone-drop': {
13
+ files: File[];
14
+ };
15
+ 'file-item-remove': {
16
+ fileId: string;
17
+ };
18
+ 'file-item-retry': {
19
+ fileId: string;
20
+ };
21
+ 'source-pill-click': {
22
+ source: string;
23
+ };
24
+ 'upload-more': void;
25
+ 'clear-all': void;
26
+ }
27
+ export declare const InternalEvents: {
28
+ readonly DROP_ZONE_ENTER: "drop-zone-enter";
29
+ readonly DROP_ZONE_LEAVE: "drop-zone-leave";
30
+ readonly DROP_ZONE_DROP: "drop-zone-drop";
31
+ readonly FILE_ITEM_REMOVE: "file-item-remove";
32
+ readonly FILE_ITEM_RETRY: "file-item-retry";
33
+ readonly SOURCE_PILL_CLICK: "source-pill-click";
34
+ readonly UPLOAD_MORE: "upload-more";
35
+ readonly CLEAR_ALL: "clear-all";
36
+ };
37
+ export {};
38
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AAEjD,qBAAa,QAAQ,CAAC,QAAQ,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,OAAO,CAAC,QAAQ,CAAgD;IAEhE,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAS3E,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAI5E,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAIpE,OAAO,IAAI,IAAI;CAGhB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,IAAI,CAAC;IACxB,iBAAiB,EAAE,IAAI,CAAC;IACxB,gBAAgB,EAAE;QAAE,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IACpC,kBAAkB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,iBAAiB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,mBAAmB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,aAAa,EAAE,IAAI,CAAC;IACpB,WAAW,EAAE,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,cAAc;;;;;;;;;CASgC,CAAC"}
@@ -0,0 +1,23 @@
1
+ export declare const PublicEvents: {
2
+ readonly FILE_ADDED: "sfx-file-added";
3
+ readonly FILE_REMOVED: "sfx-file-removed";
4
+ readonly FILE_REJECTED: "sfx-file-rejected";
5
+ readonly UPLOAD_STARTED: "sfx-upload-started";
6
+ readonly UPLOAD_PROGRESS: "sfx-upload-progress";
7
+ readonly UPLOAD_COMPLETE: "sfx-upload-complete";
8
+ readonly UPLOAD_ERROR: "sfx-upload-error";
9
+ readonly UPLOAD_RETRY: "sfx-upload-retry";
10
+ readonly ALL_COMPLETE: "sfx-all-complete";
11
+ readonly TOTAL_PROGRESS: "sfx-total-progress";
12
+ readonly BEFORE_UPLOAD: "sfx-before-upload";
13
+ readonly OPEN: "sfx-open";
14
+ readonly CLOSE: "sfx-close";
15
+ readonly CANCEL: "sfx-cancel";
16
+ readonly SOURCE_CHANGE: "sfx-source-change";
17
+ readonly COMPLETE_ACTION: "sfx-complete-action";
18
+ readonly CONNECTOR_AUTH: "sfx-connector-auth";
19
+ readonly CONNECTOR_FILES_ADDED: "sfx-connector-files-added";
20
+ readonly FILE_PREVIEW: "sfx-file-preview";
21
+ readonly FILL_METADATA: "sfx-fill-metadata";
22
+ };
23
+ //# sourceMappingURL=public-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-events.d.ts","sourceRoot":"","sources":["../../src/events/public-events.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;CAqBf,CAAC"}
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./sfx-uploader-BVDK-9xi.cjs");exports.CORE_SOURCES=e.CORE_SOURCES;exports.PublicEvents=e.PublicEvents;exports.SfxActionsBar=e.SfxActionsBar;exports.SfxDropZone=e.SfxDropZone;exports.SfxFileItem=e.SfxFileItem;exports.SfxFileList=e.SfxFileList;exports.SfxImportDivider=e.SfxImportDivider;exports.SfxSourcePills=e.SfxSourcePills;exports.SfxSuccessCard=e.SfxSuccessCard;exports.SfxUploader=e.SfxUploader;exports.Store=e.Store;exports.UploadEngine=e.UploadEngine;exports.buildAuthHeaders=e.buildAuthHeaders;exports.createStore=e.createStore;exports.exchangeSassKey=e.exchangeSassKey;exports.getApiBase=e.getApiBase;exports.getProviderSources=e.getProviderSources;exports.resolveAuth=e.resolveAuth;
@@ -0,0 +1,17 @@
1
+ export { SfxUploader, type UploaderConfig, type UploaderCallbacks } from './sfx-uploader';
2
+ export { createStore, Store } from './store';
3
+ export { UploadEngine, type UploadEngineConfig } from './engine';
4
+ export { PublicEvents } from './events/public-events';
5
+ export type { UploaderState, UploadFile, FileStatus, UploadResponse, QueueConfig, RetryConfig, UploadRestrictions, } from './store';
6
+ export type { AuthConfig, SecurityTemplateAuth, SassKeyAuth, SessionAuth, AuthHeaders, } from './auth';
7
+ export { resolveAuth, exchangeSassKey, getApiBase, buildAuthHeaders } from './auth';
8
+ export type { ProviderId, ConnectorConfig, RemoteFileInfo } from './connectors';
9
+ export { getProviderSources } from './connectors';
10
+ export { SfxDropZone } from './components/drop-zone';
11
+ export { SfxImportDivider } from './components/import-divider';
12
+ export { SfxSourcePills, CORE_SOURCES, type SourceDef, type UploaderHandle } from './components/source-pills';
13
+ export { SfxFileList } from './components/file-list';
14
+ export { SfxFileItem } from './components/file-item';
15
+ export { SfxSuccessCard } from './components/success-card';
16
+ export { SfxActionsBar, type UploadButtonState } from './components/actions-bar';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAGpF,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ import { C as e, P as r, S, a as o, b as i, c as t, d as f, e as l, f as x, g as c, h as d, U as u, i as n, j as p, k as g, l as h, m, r as v } from "./sfx-uploader-C2lWIRnU.js";
2
+ export {
3
+ e as CORE_SOURCES,
4
+ r as PublicEvents,
5
+ S as SfxActionsBar,
6
+ o as SfxDropZone,
7
+ i as SfxFileItem,
8
+ t as SfxFileList,
9
+ f as SfxImportDivider,
10
+ l as SfxSourcePills,
11
+ x as SfxSuccessCard,
12
+ c as SfxUploader,
13
+ d as Store,
14
+ u as UploadEngine,
15
+ n as buildAuthHeaders,
16
+ p as createStore,
17
+ g as exchangeSassKey,
18
+ h as getApiBase,
19
+ m as getProviderSources,
20
+ v as resolveAuth
21
+ };