@webiny/app-sdk-playground 6.1.0 → 6.2.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/package.json +10 -10
- package/plugins/declarations/languages.d.ts +1 -0
- package/plugins/declarations/languages.js +22 -0
- package/plugins/declarations/languages.js.map +1 -0
- package/plugins/sdkGlobalDeclaration.d.ts +1 -1
- package/plugins/sdkGlobalDeclaration.js +8 -2
- package/plugins/sdkGlobalDeclaration.js.map +1 -1
- package/plugins/useCodeExecution.d.ts +1 -1
- package/plugins/useCodeExecution.js +8 -10
- package/plugins/useCodeExecution.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-sdk-playground",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@monaco-editor/react": "4.7.0",
|
|
14
|
-
"@webiny/admin-ui": "6.
|
|
15
|
-
"@webiny/app": "6.
|
|
16
|
-
"@webiny/app-admin": "6.
|
|
17
|
-
"@webiny/icons": "6.
|
|
18
|
-
"@webiny/sdk": "6.
|
|
14
|
+
"@webiny/admin-ui": "6.2.0",
|
|
15
|
+
"@webiny/app": "6.2.0",
|
|
16
|
+
"@webiny/app-admin": "6.2.0",
|
|
17
|
+
"@webiny/icons": "6.2.0",
|
|
18
|
+
"@webiny/sdk": "6.2.0",
|
|
19
19
|
"monaco-editor": "0.53.0",
|
|
20
|
-
"react": "18.
|
|
21
|
-
"react-dom": "18.
|
|
20
|
+
"react": "18.3.1",
|
|
21
|
+
"react-dom": "18.3.1"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@webiny/build-tools": "6.
|
|
24
|
+
"@webiny/build-tools": "6.2.0",
|
|
25
25
|
"rimraf": "6.1.3",
|
|
26
26
|
"typescript": "5.9.3"
|
|
27
27
|
},
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"access": "public",
|
|
30
30
|
"directory": "dist"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "3d3148358b6febbc857371930871743bec3b3939"
|
|
33
33
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LANGUAGES_DECLARATIONS = "\ninterface SdkLanguage {\n /** Unique language entry ID. */\n id: string;\n /** BCP 47 language code (e.g. \"en-US\", \"fr-FR\"). */\n code: string;\n /** Human-readable language name. */\n name: string;\n /** Text direction. */\n direction?: \"ltr\" | \"rtl\";\n /** Whether this is the default language. */\n isDefault?: boolean;\n}\n\ninterface SdkLanguages {\n /** List all enabled languages. */\n listLanguages(): Promise<SdkResult<SdkLanguage[], SdkError>>;\n}\n";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Languages SDK type declarations.
|
|
2
|
+
export const LANGUAGES_DECLARATIONS = `
|
|
3
|
+
interface SdkLanguage {
|
|
4
|
+
/** Unique language entry ID. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** BCP 47 language code (e.g. "en-US", "fr-FR"). */
|
|
7
|
+
code: string;
|
|
8
|
+
/** Human-readable language name. */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Text direction. */
|
|
11
|
+
direction?: "ltr" | "rtl";
|
|
12
|
+
/** Whether this is the default language. */
|
|
13
|
+
isDefault?: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface SdkLanguages {
|
|
17
|
+
/** List all enabled languages. */
|
|
18
|
+
listLanguages(): Promise<SdkResult<SdkLanguage[], SdkError>>;
|
|
19
|
+
}
|
|
20
|
+
`;
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=languages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LANGUAGES_DECLARATIONS"],"sources":["languages.ts"],"sourcesContent":["// Languages SDK type declarations.\nexport const LANGUAGES_DECLARATIONS = `\ninterface SdkLanguage {\n /** Unique language entry ID. */\n id: string;\n /** BCP 47 language code (e.g. \"en-US\", \"fr-FR\"). */\n code: string;\n /** Human-readable language name. */\n name: string;\n /** Text direction. */\n direction?: \"ltr\" | \"rtl\";\n /** Whether this is the default language. */\n isDefault?: boolean;\n}\n\ninterface SdkLanguages {\n /** List all enabled languages. */\n listLanguages(): Promise<SdkResult<SdkLanguage[], SdkError>>;\n}\n`;\n"],"mappings":"AAAA;AACA,OAAO,MAAMA,sBAAsB,GAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SDK_GLOBAL_DECLARATION = "\n\ninterface SdkIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n\ninterface SdkResult<TValue, TError = unknown> {\n isOk(): boolean;\n isFail(): boolean;\n readonly value: TValue;\n readonly error: TError;\n}\n\ndeclare class SdkBaseError extends Error {\n readonly code: string;\n readonly message: string;\n}\n\ndeclare class SdkHttpError extends SdkBaseError {\n readonly code: \"HTTP_ERROR\";\n readonly data: { status: number };\n}\n\ndeclare class SdkGraphQLError extends SdkBaseError {\n readonly code: \"GRAPHQL_ERROR\";\n readonly data: { code?: string };\n}\n\ndeclare class SdkNetworkError extends SdkBaseError {\n readonly code: \"NETWORK_ERROR\";\n}\n\ntype SdkError = SdkHttpError | SdkGraphQLError | SdkNetworkError;\n\n\n\ntype SdkEntryStatus = \"published\" | \"unpublished\" | \"draft\";\n\ninterface SdkEntryValues {\n [key: string]: any;\n}\n\ninterface SdkEntryData<TValues extends SdkEntryValues = SdkEntryValues> {\n id?: string;\n entryId?: string;\n status?: SdkEntryStatus;\n createdOn?: string;\n modifiedOn?: string | null;\n savedOn?: string;\n deletedOn?: string | null;\n restoredOn?: string | null;\n createdBy?: SdkIdentity;\n modifiedBy?: SdkIdentity;\n savedBy?: SdkIdentity;\n firstPublishedOn?: string;\n lastPublishedOn?: string;\n firstPublishedBy?: SdkIdentity;\n lastPublishedBy?: SdkIdentity;\n revisionCreatedOn?: string;\n revisionModifiedOn?: string | null;\n revisionSavedOn?: string;\n revisionCreatedBy?: SdkIdentity;\n revisionModifiedBy?: SdkIdentity | null;\n revisionSavedBy?: SdkIdentity;\n revisionFirstPublishedOn?: string;\n revisionLastPublishedOn?: string;\n revisionFirstPublishedBy?: SdkIdentity;\n revisionLastPublishedBy?: SdkIdentity;\n location?: { folderId?: string | null };\n values?: TValues;\n}\n\ninterface SdkListEntriesResult<TValues extends SdkEntryValues = SdkEntryValues> {\n data: SdkEntryData<TValues>[];\n meta: {\n cursor: string | null;\n hasMoreItems: boolean;\n totalCount: number;\n };\n}\n\ninterface SdkGetEntryParams {\n /** The model ID to query. */\n modelId: string;\n where: {\n /** Revision ID, e.g. \"abc#0001\". */\n id?: string;\n /** Entry ID, e.g. \"abc\". */\n entryId?: string;\n /** Filter by entry field values. */\n values?: Record<string, unknown>;\n };\n /** Fields to include in the response. Use \"values.fieldName\" for entry values. */\n fields: string[];\n /** When true, returns unpublished/draft content. Defaults to false. */\n preview?: boolean;\n}\n\ninterface SdkListEntriesParams {\n /** The model ID to query. */\n modelId: string;\n /** Filter conditions. */\n where?: Record<string, unknown>;\n /** Sort order per field, e.g. { createdOn: \"desc\" }. */\n sort?: Record<string, \"asc\" | \"desc\">;\n /** Maximum number of entries to return. Defaults to 10. */\n limit?: number;\n /** Pagination cursor from a previous response. */\n after?: string;\n /** Full-text search term to filter entries across searchable fields. */\n search?: string;\n /** Fields to include in the response. Use \"values.fieldName\" for entry values. */\n fields: string[];\n /** When true, returns unpublished/draft content. Defaults to false. */\n preview?: boolean;\n}\n\ninterface SdkCreateEntryData<TValues extends SdkEntryValues = SdkEntryValues> {\n values: TValues | undefined;\n status?: SdkEntryStatus;\n location?: { folderId?: string | null };\n}\n\ninterface SdkCreateEntryParams<TValues extends SdkEntryValues = SdkEntryValues> {\n /** The model ID. */\n modelId: string;\n /** The entry data to create. */\n data: SdkCreateEntryData<TValues>;\n /** Fields to include in the response. */\n fields: string[];\n}\n\ninterface SdkUpdateEntryData<TValues extends SdkEntryValues = SdkEntryValues> {\n values?: Partial<TValues>;\n location?: { folderId?: string | null };\n}\n\ninterface SdkUpdateEntryRevisionParams<TValues extends SdkEntryValues = SdkEntryValues> {\n /** The model ID. */\n modelId: string;\n /** The revision ID, e.g. \"abc#0001\". */\n revisionId: string;\n /** The fields to update. */\n data: SdkUpdateEntryData<TValues>;\n /** Fields to include in the response. */\n fields: string[];\n}\n\ninterface SdkDeleteEntryRevisionParams {\n /** The model ID. */\n modelId: string;\n /** The revision ID, e.g. \"abc#0001\". */\n revisionId: string;\n /** When true, permanently deletes the entry. Defaults to false. */\n permanent?: boolean;\n}\n\ninterface SdkPublishEntryRevisionParams {\n /** The model ID. */\n modelId: string;\n /** The revision ID, e.g. \"abc#0001\". */\n revisionId: string;\n /** Fields to include in the response. */\n fields: string[];\n}\n\ninterface SdkUnpublishEntryRevisionParams {\n /** The model ID. */\n modelId: string;\n /** The revision ID, e.g. \"abc#0001\". */\n revisionId: string;\n /** Fields to include in the response. */\n fields: string[];\n}\n\ninterface SdkCms {\n /** Get a single entry by ID or field values. */\n getEntry<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkGetEntryParams\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n\n /** List entries with optional filtering, sorting, and pagination. */\n listEntries<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkListEntriesParams\n ): Promise<SdkResult<SdkListEntriesResult<TValues>, SdkError>>;\n\n /** Create a new entry. */\n createEntry<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkCreateEntryParams<TValues>\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n\n /** Update an existing entry revision. */\n updateEntryRevision<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkUpdateEntryRevisionParams<TValues>\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n\n /** Delete an entry revision. */\n deleteEntryRevision(\n params: SdkDeleteEntryRevisionParams\n ): Promise<SdkResult<boolean, SdkError>>;\n\n /** Publish an entry revision. */\n publishEntryRevision<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkPublishEntryRevisionParams\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n\n /** Unpublish an entry revision. */\n unpublishEntryRevision<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkUnpublishEntryRevisionParams\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n}\n\n\n\ninterface SdkCreateTenantInput {\n /** Custom tenant ID. If not provided, one will be generated automatically. */\n id?: string;\n /** Display name for the tenant. */\n name: string;\n /** Tenant description. */\n description?: string;\n}\n\ninterface SdkCreateTenantParams {\n /** The tenant data to create. */\n data: SdkCreateTenantInput;\n}\n\ninterface SdkInstallTenantParams {\n /** ID of the tenant to install. */\n tenantId: string;\n}\n\ninterface SdkDisableTenantParams {\n /** ID of the tenant to disable. */\n tenantId: string;\n}\n\ninterface SdkEnableTenantParams {\n /** ID of the tenant to enable. */\n tenantId: string;\n}\n\ninterface SdkTenant {\n /** Unique tenant identifier. */\n id: string;\n /** Tenant configuration values. */\n values: Record<string, unknown>;\n}\n\ninterface SdkTenantManager {\n /** Return the current tenant for the authenticated context. */\n getCurrentTenant(): Promise<SdkResult<SdkTenant, SdkError>>;\n\n /** Create a new tenant in the system. */\n createTenant(params: SdkCreateTenantParams): Promise<SdkResult<boolean, SdkError>>;\n\n /** Install and provision a tenant with default settings and configurations. */\n installTenant(params: SdkInstallTenantParams): Promise<SdkResult<boolean, SdkError>>;\n\n /** Disable a tenant, preventing access to its resources. */\n disableTenant(params: SdkDisableTenantParams): Promise<SdkResult<boolean, SdkError>>;\n\n /** Re-enable a previously disabled tenant. */\n enableTenant(params: SdkEnableTenantParams): Promise<SdkResult<boolean, SdkError>>;\n}\n\n\n\ninterface SdkFmIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n\ninterface SdkFmLocation {\n folderId: string;\n}\n\ninterface SdkFmFile_Metadata {\n image?: {\n width?: number;\n height?: number;\n format?: string;\n orientation?: number;\n };\n exif?: Record<string, any>;\n iptc?: Record<string, any>;\n [key: string]: any;\n}\n\ntype SdkFmFile_AccessControl = {\n type: \"public\" | \"private-authenticated\";\n};\n\ninterface SdkFmFile {\n id: string;\n createdOn: string;\n modifiedOn?: string;\n savedOn: string;\n createdBy: SdkFmIdentity;\n modifiedBy?: SdkFmIdentity;\n savedBy: SdkFmIdentity;\n location: SdkFmLocation;\n src?: string;\n name?: string;\n key?: string;\n type?: string;\n size?: number;\n metadata?: SdkFmFile_Metadata;\n tags?: string[];\n accessControl?: SdkFmFile_AccessControl;\n [key: string]: any;\n}\n\ninterface SdkFmTag {\n tag: string;\n count: number;\n}\n\ninterface SdkUploadProgress {\n sent: number;\n total: number;\n percentage: number;\n}\n\ntype SdkBatchUploadStrategy = \"fail-fast\" | \"continue\";\n\ninterface SdkGetFileParams {\n /** ID of the file to get. */\n id: string;\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n}\n\ninterface SdkListFilesParams {\n /** Search query. */\n search?: string;\n /** Filter conditions. */\n where?: {\n location?: {\n folderId?: string;\n folderId_in?: string[];\n };\n name?: string;\n name_contains?: string;\n type?: string;\n type_in?: string[];\n tags?: string[];\n tags_in?: string[];\n };\n /** Maximum number of items to return. */\n limit?: number;\n /** Cursor for pagination. */\n after?: string;\n /** Sort order. */\n sort?: (\"savedOn_ASC\" | \"savedOn_DESC\" | \"createdOn_ASC\" | \"createdOn_DESC\" | \"name_ASC\" | \"name_DESC\" | \"size_ASC\" | \"size_DESC\")[];\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n}\n\ninterface SdkListFilesResult {\n data: SdkFmFile[];\n meta: {\n cursor: string | null;\n hasMoreItems: boolean;\n totalCount: number;\n };\n}\n\ninterface SdkCreateFileParams {\n /** Optional: The actual file content to upload (Buffer in Node.js, File/Blob in browser). */\n file?: any;\n /** The file metadata. */\n data: {\n id?: string;\n name?: string;\n key?: string;\n keyPrefix?: string;\n type?: string;\n size?: number;\n tags?: string[];\n location?: { folderId: string };\n [key: string]: any;\n };\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n /** Optional: Progress callback. */\n onProgress?: (progress: SdkUploadProgress) => void;\n /** Optional: Threshold in MB for multi-part upload (default: 100). */\n multiPartThreshold?: number;\n /** Optional: AbortSignal for cancellation. */\n signal?: AbortSignal;\n}\n\ninterface SdkCreateFilesParams {\n /** Array of files with their data. */\n files: Array<{\n file?: any;\n data: {\n id?: string;\n name?: string;\n key?: string;\n keyPrefix?: string;\n type?: string;\n size?: number;\n tags?: string[];\n location?: { folderId: string };\n [key: string]: any;\n };\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n onProgress?: (progress: SdkUploadProgress) => void;\n }>;\n /** Optional: Threshold in MB for multi-part upload (default: 100). */\n multiPartThreshold?: number;\n /** Optional: Number of concurrent uploads (default: 5). */\n concurrency?: number;\n /** Optional: Batch upload strategy (default: \"fail-fast\"). */\n strategy?: SdkBatchUploadStrategy;\n /** Optional: AbortSignal for cancellation. */\n signal?: AbortSignal;\n}\n\ninterface SdkCreateFilesResult {\n successful: SdkFmFile[];\n failed: Array<{\n data: any;\n error: Error;\n }>;\n}\n\ninterface SdkUpdateFileParams {\n /** ID of the file to update. */\n id: string;\n /** The file data to update. */\n data: {\n name?: string;\n tags?: string[];\n location?: { folderId: string };\n [key: string]: any;\n };\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n}\n\ninterface SdkDeleteFileParams {\n /** ID of the file to delete. */\n id: string;\n}\n\ninterface SdkListTagsParams {\n /** Filter conditions. */\n where?: {\n createdBy?: string;\n tags_startsWith?: string;\n tags_not_startsWith?: string;\n };\n}\n\ninterface SdkFileManager {\n /** Get a single file by ID. */\n getFile(params: SdkGetFileParams): Promise<SdkResult<SdkFmFile, SdkError>>;\n\n /** List files with optional filtering, sorting, and pagination. */\n listFiles(params: SdkListFilesParams): Promise<SdkResult<SdkListFilesResult, SdkError>>;\n\n /** \n * Create a new file. If 'file' is provided, uploads to S3 first.\n * If no 'file' is provided, only creates metadata record.\n */\n createFile(params: SdkCreateFileParams): Promise<SdkResult<SdkFmFile, SdkError>>;\n\n /** \n * Create multiple files. If 'file' is provided for each, uploads to S3 first.\n * Supports batch upload with configurable concurrency and error handling strategy.\n */\n createFiles(params: SdkCreateFilesParams): Promise<SdkResult<SdkCreateFilesResult, SdkError>>;\n\n /** Update a file's metadata. */\n updateFile(params: SdkUpdateFileParams): Promise<SdkResult<SdkFmFile, SdkError>>;\n\n /** Delete a file. */\n deleteFile(params: SdkDeleteFileParams): Promise<SdkResult<boolean, SdkError>>;\n\n /** List tags with optional filtering. */\n listTags(params?: SdkListTagsParams): Promise<SdkResult<SdkFmTag[], SdkError>>;\n}\n\n\n// ============================================================================\n// MAIN SDK INTERFACE\n// ============================================================================\n\ninterface SdkWebiny {\n /** CMS operations: list, get, create, update, delete, publish entries. */\n readonly cms: SdkCms;\n \n /** Tenant Manager operations: create, install, disable, enable tenants. */\n readonly tenantManager: SdkTenantManager;\n \n /** File Manager operations: upload, list, get, update, delete files. */\n readonly fileManager: SdkFileManager;\n}\n\ndeclare const sdk: SdkWebiny;\ndeclare interface Window { sdk: SdkWebiny; }\n";
|
|
1
|
+
export declare const SDK_GLOBAL_DECLARATION = "\n\ninterface SdkIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n\ninterface SdkResult<TValue, TError = unknown> {\n isOk(): boolean;\n isFail(): boolean;\n readonly value: TValue;\n readonly error: TError;\n}\n\ndeclare class SdkBaseError extends Error {\n readonly code: string;\n readonly message: string;\n}\n\ndeclare class SdkHttpError extends SdkBaseError {\n readonly code: \"HTTP_ERROR\";\n readonly data: { status: number };\n}\n\ndeclare class SdkGraphQLError extends SdkBaseError {\n readonly code: \"GRAPHQL_ERROR\";\n readonly data: { code?: string };\n}\n\ndeclare class SdkNetworkError extends SdkBaseError {\n readonly code: \"NETWORK_ERROR\";\n}\n\ntype SdkError = SdkHttpError | SdkGraphQLError | SdkNetworkError;\n\n\n\ntype SdkEntryStatus = \"published\" | \"unpublished\" | \"draft\";\n\ninterface SdkEntryValues {\n [key: string]: any;\n}\n\ninterface SdkEntryData<TValues extends SdkEntryValues = SdkEntryValues> {\n id?: string;\n entryId?: string;\n status?: SdkEntryStatus;\n createdOn?: string;\n modifiedOn?: string | null;\n savedOn?: string;\n deletedOn?: string | null;\n restoredOn?: string | null;\n createdBy?: SdkIdentity;\n modifiedBy?: SdkIdentity;\n savedBy?: SdkIdentity;\n firstPublishedOn?: string;\n lastPublishedOn?: string;\n firstPublishedBy?: SdkIdentity;\n lastPublishedBy?: SdkIdentity;\n revisionCreatedOn?: string;\n revisionModifiedOn?: string | null;\n revisionSavedOn?: string;\n revisionCreatedBy?: SdkIdentity;\n revisionModifiedBy?: SdkIdentity | null;\n revisionSavedBy?: SdkIdentity;\n revisionFirstPublishedOn?: string;\n revisionLastPublishedOn?: string;\n revisionFirstPublishedBy?: SdkIdentity;\n revisionLastPublishedBy?: SdkIdentity;\n location?: { folderId?: string | null };\n values?: TValues;\n}\n\ninterface SdkListEntriesResult<TValues extends SdkEntryValues = SdkEntryValues> {\n data: SdkEntryData<TValues>[];\n meta: {\n cursor: string | null;\n hasMoreItems: boolean;\n totalCount: number;\n };\n}\n\ninterface SdkGetEntryParams {\n /** The model ID to query. */\n modelId: string;\n where: {\n /** Revision ID, e.g. \"abc#0001\". */\n id?: string;\n /** Entry ID, e.g. \"abc\". */\n entryId?: string;\n /** Filter by entry field values. */\n values?: Record<string, unknown>;\n };\n /** Fields to include in the response. Use \"values.fieldName\" for entry values. */\n fields: string[];\n /** When true, returns unpublished/draft content. Defaults to false. */\n preview?: boolean;\n}\n\ninterface SdkListEntriesParams {\n /** The model ID to query. */\n modelId: string;\n /** Filter conditions. */\n where?: Record<string, unknown>;\n /** Sort order per field, e.g. { createdOn: \"desc\" }. */\n sort?: Record<string, \"asc\" | \"desc\">;\n /** Maximum number of entries to return. Defaults to 10. */\n limit?: number;\n /** Pagination cursor from a previous response. */\n after?: string;\n /** Full-text search term to filter entries across searchable fields. */\n search?: string;\n /** Fields to include in the response. Use \"values.fieldName\" for entry values. */\n fields: string[];\n /** When true, returns unpublished/draft content. Defaults to false. */\n preview?: boolean;\n}\n\ninterface SdkCreateEntryData<TValues extends SdkEntryValues = SdkEntryValues> {\n values: TValues | undefined;\n status?: SdkEntryStatus;\n location?: { folderId?: string | null };\n}\n\ninterface SdkCreateEntryParams<TValues extends SdkEntryValues = SdkEntryValues> {\n /** The model ID. */\n modelId: string;\n /** The entry data to create. */\n data: SdkCreateEntryData<TValues>;\n /** Fields to include in the response. */\n fields: string[];\n}\n\ninterface SdkUpdateEntryData<TValues extends SdkEntryValues = SdkEntryValues> {\n values?: Partial<TValues>;\n location?: { folderId?: string | null };\n}\n\ninterface SdkUpdateEntryRevisionParams<TValues extends SdkEntryValues = SdkEntryValues> {\n /** The model ID. */\n modelId: string;\n /** The revision ID, e.g. \"abc#0001\". */\n revisionId: string;\n /** The fields to update. */\n data: SdkUpdateEntryData<TValues>;\n /** Fields to include in the response. */\n fields: string[];\n}\n\ninterface SdkDeleteEntryRevisionParams {\n /** The model ID. */\n modelId: string;\n /** The revision ID, e.g. \"abc#0001\". */\n revisionId: string;\n /** When true, permanently deletes the entry. Defaults to false. */\n permanent?: boolean;\n}\n\ninterface SdkPublishEntryRevisionParams {\n /** The model ID. */\n modelId: string;\n /** The revision ID, e.g. \"abc#0001\". */\n revisionId: string;\n /** Fields to include in the response. */\n fields: string[];\n}\n\ninterface SdkUnpublishEntryRevisionParams {\n /** The model ID. */\n modelId: string;\n /** The revision ID, e.g. \"abc#0001\". */\n revisionId: string;\n /** Fields to include in the response. */\n fields: string[];\n}\n\ninterface SdkCms {\n /** Get a single entry by ID or field values. */\n getEntry<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkGetEntryParams\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n\n /** List entries with optional filtering, sorting, and pagination. */\n listEntries<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkListEntriesParams\n ): Promise<SdkResult<SdkListEntriesResult<TValues>, SdkError>>;\n\n /** Create a new entry. */\n createEntry<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkCreateEntryParams<TValues>\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n\n /** Update an existing entry revision. */\n updateEntryRevision<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkUpdateEntryRevisionParams<TValues>\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n\n /** Delete an entry revision. */\n deleteEntryRevision(\n params: SdkDeleteEntryRevisionParams\n ): Promise<SdkResult<boolean, SdkError>>;\n\n /** Publish an entry revision. */\n publishEntryRevision<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkPublishEntryRevisionParams\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n\n /** Unpublish an entry revision. */\n unpublishEntryRevision<TValues extends SdkEntryValues = SdkEntryValues>(\n params: SdkUnpublishEntryRevisionParams\n ): Promise<SdkResult<SdkEntryData<TValues>, SdkError>>;\n}\n\n\n\ninterface SdkCreateTenantInput {\n /** Custom tenant ID. If not provided, one will be generated automatically. */\n id?: string;\n /** Display name for the tenant. */\n name: string;\n /** Tenant description. */\n description?: string;\n}\n\ninterface SdkCreateTenantParams {\n /** The tenant data to create. */\n data: SdkCreateTenantInput;\n}\n\ninterface SdkInstallTenantParams {\n /** ID of the tenant to install. */\n tenantId: string;\n}\n\ninterface SdkDisableTenantParams {\n /** ID of the tenant to disable. */\n tenantId: string;\n}\n\ninterface SdkEnableTenantParams {\n /** ID of the tenant to enable. */\n tenantId: string;\n}\n\ninterface SdkTenant {\n /** Unique tenant identifier. */\n id: string;\n /** Tenant configuration values. */\n values: Record<string, unknown>;\n}\n\ninterface SdkTenantManager {\n /** Return the current tenant for the authenticated context. */\n getCurrentTenant(): Promise<SdkResult<SdkTenant, SdkError>>;\n\n /** Create a new tenant in the system. */\n createTenant(params: SdkCreateTenantParams): Promise<SdkResult<boolean, SdkError>>;\n\n /** Install and provision a tenant with default settings and configurations. */\n installTenant(params: SdkInstallTenantParams): Promise<SdkResult<boolean, SdkError>>;\n\n /** Disable a tenant, preventing access to its resources. */\n disableTenant(params: SdkDisableTenantParams): Promise<SdkResult<boolean, SdkError>>;\n\n /** Re-enable a previously disabled tenant. */\n enableTenant(params: SdkEnableTenantParams): Promise<SdkResult<boolean, SdkError>>;\n}\n\n\n\ninterface SdkFmIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n\ninterface SdkFmLocation {\n folderId: string;\n}\n\ninterface SdkFmFile_Metadata {\n image?: {\n width?: number;\n height?: number;\n format?: string;\n orientation?: number;\n };\n exif?: Record<string, any>;\n iptc?: Record<string, any>;\n [key: string]: any;\n}\n\ntype SdkFmFile_AccessControl = {\n type: \"public\" | \"private-authenticated\";\n};\n\ninterface SdkFmFile {\n id: string;\n createdOn: string;\n modifiedOn?: string;\n savedOn: string;\n createdBy: SdkFmIdentity;\n modifiedBy?: SdkFmIdentity;\n savedBy: SdkFmIdentity;\n location: SdkFmLocation;\n src?: string;\n name?: string;\n key?: string;\n type?: string;\n size?: number;\n metadata?: SdkFmFile_Metadata;\n tags?: string[];\n accessControl?: SdkFmFile_AccessControl;\n [key: string]: any;\n}\n\ninterface SdkFmTag {\n tag: string;\n count: number;\n}\n\ninterface SdkUploadProgress {\n sent: number;\n total: number;\n percentage: number;\n}\n\ntype SdkBatchUploadStrategy = \"fail-fast\" | \"continue\";\n\ninterface SdkGetFileParams {\n /** ID of the file to get. */\n id: string;\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n}\n\ninterface SdkListFilesParams {\n /** Search query. */\n search?: string;\n /** Filter conditions. */\n where?: {\n location?: {\n folderId?: string;\n folderId_in?: string[];\n };\n name?: string;\n name_contains?: string;\n type?: string;\n type_in?: string[];\n tags?: string[];\n tags_in?: string[];\n };\n /** Maximum number of items to return. */\n limit?: number;\n /** Cursor for pagination. */\n after?: string;\n /** Sort order. */\n sort?: (\"savedOn_ASC\" | \"savedOn_DESC\" | \"createdOn_ASC\" | \"createdOn_DESC\" | \"name_ASC\" | \"name_DESC\" | \"size_ASC\" | \"size_DESC\")[];\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n}\n\ninterface SdkListFilesResult {\n data: SdkFmFile[];\n meta: {\n cursor: string | null;\n hasMoreItems: boolean;\n totalCount: number;\n };\n}\n\ninterface SdkCreateFileParams {\n /** Optional: The actual file content to upload (Buffer in Node.js, File/Blob in browser). */\n file?: any;\n /** The file metadata. */\n data: {\n id?: string;\n name?: string;\n key?: string;\n keyPrefix?: string;\n type?: string;\n size?: number;\n tags?: string[];\n location?: { folderId: string };\n [key: string]: any;\n };\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n /** Optional: Progress callback. */\n onProgress?: (progress: SdkUploadProgress) => void;\n /** Optional: Threshold in MB for multi-part upload (default: 100). */\n multiPartThreshold?: number;\n /** Optional: AbortSignal for cancellation. */\n signal?: AbortSignal;\n}\n\ninterface SdkCreateFilesParams {\n /** Array of files with their data. */\n files: Array<{\n file?: any;\n data: {\n id?: string;\n name?: string;\n key?: string;\n keyPrefix?: string;\n type?: string;\n size?: number;\n tags?: string[];\n location?: { folderId: string };\n [key: string]: any;\n };\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n onProgress?: (progress: SdkUploadProgress) => void;\n }>;\n /** Optional: Threshold in MB for multi-part upload (default: 100). */\n multiPartThreshold?: number;\n /** Optional: Number of concurrent uploads (default: 5). */\n concurrency?: number;\n /** Optional: Batch upload strategy (default: \"fail-fast\"). */\n strategy?: SdkBatchUploadStrategy;\n /** Optional: AbortSignal for cancellation. */\n signal?: AbortSignal;\n}\n\ninterface SdkCreateFilesResult {\n successful: SdkFmFile[];\n failed: Array<{\n data: any;\n error: Error;\n }>;\n}\n\ninterface SdkUpdateFileParams {\n /** ID of the file to update. */\n id: string;\n /** The file data to update. */\n data: {\n name?: string;\n tags?: string[];\n location?: { folderId: string };\n [key: string]: any;\n };\n /** Fields to select (dot notation supported, e.g., \"location.folderId\", \"createdBy.displayName\"). */\n fields: string[];\n}\n\ninterface SdkDeleteFileParams {\n /** ID of the file to delete. */\n id: string;\n}\n\ninterface SdkListTagsParams {\n /** Filter conditions. */\n where?: {\n createdBy?: string;\n tags_startsWith?: string;\n tags_not_startsWith?: string;\n };\n}\n\ninterface SdkFileManager {\n /** Get a single file by ID. */\n getFile(params: SdkGetFileParams): Promise<SdkResult<SdkFmFile, SdkError>>;\n\n /** List files with optional filtering, sorting, and pagination. */\n listFiles(params: SdkListFilesParams): Promise<SdkResult<SdkListFilesResult, SdkError>>;\n\n /** \n * Create a new file. If 'file' is provided, uploads to S3 first.\n * If no 'file' is provided, only creates metadata record.\n */\n createFile(params: SdkCreateFileParams): Promise<SdkResult<SdkFmFile, SdkError>>;\n\n /** \n * Create multiple files. If 'file' is provided for each, uploads to S3 first.\n * Supports batch upload with configurable concurrency and error handling strategy.\n */\n createFiles(params: SdkCreateFilesParams): Promise<SdkResult<SdkCreateFilesResult, SdkError>>;\n\n /** Update a file's metadata. */\n updateFile(params: SdkUpdateFileParams): Promise<SdkResult<SdkFmFile, SdkError>>;\n\n /** Delete a file. */\n deleteFile(params: SdkDeleteFileParams): Promise<SdkResult<boolean, SdkError>>;\n\n /** List tags with optional filtering. */\n listTags(params?: SdkListTagsParams): Promise<SdkResult<SdkFmTag[], SdkError>>;\n}\n\n\n\ninterface SdkLanguage {\n /** Unique language entry ID. */\n id: string;\n /** BCP 47 language code (e.g. \"en-US\", \"fr-FR\"). */\n code: string;\n /** Human-readable language name. */\n name: string;\n /** Text direction. */\n direction?: \"ltr\" | \"rtl\";\n /** Whether this is the default language. */\n isDefault?: boolean;\n}\n\ninterface SdkLanguages {\n /** List all enabled languages. */\n listLanguages(): Promise<SdkResult<SdkLanguage[], SdkError>>;\n}\n\n\n// ============================================================================\n// MAIN SDK INTERFACE\n// ============================================================================\n\ninterface SdkWebiny {\n /** CMS operations: list, get, create, update, delete, publish entries. */\n readonly cms: SdkCms;\n\n /** Tenant Manager operations: create, install, disable, enable tenants. */\n readonly tenantManager: SdkTenantManager;\n\n /** File Manager operations: upload, list, get, update, delete files. */\n readonly fileManager: SdkFileManager;\n\n /** Languages operations: list enabled languages. */\n readonly languages: SdkLanguages;\n}\n\ndeclare const sdk: SdkWebiny;\ndeclare interface Window { sdk: SdkWebiny; }\n";
|
|
@@ -14,6 +14,7 @@ import { COMMON_DECLARATIONS } from "./declarations/common.js";
|
|
|
14
14
|
import { CMS_DECLARATIONS } from "./declarations/cms.js";
|
|
15
15
|
import { TENANT_MANAGER_DECLARATIONS } from "./declarations/tenantManager.js";
|
|
16
16
|
import { FILE_MANAGER_DECLARATIONS } from "./declarations/fileManager.js";
|
|
17
|
+
import { LANGUAGES_DECLARATIONS } from "./declarations/languages.js";
|
|
17
18
|
export const SDK_GLOBAL_DECLARATION = `
|
|
18
19
|
${COMMON_DECLARATIONS}
|
|
19
20
|
|
|
@@ -23,6 +24,8 @@ ${TENANT_MANAGER_DECLARATIONS}
|
|
|
23
24
|
|
|
24
25
|
${FILE_MANAGER_DECLARATIONS}
|
|
25
26
|
|
|
27
|
+
${LANGUAGES_DECLARATIONS}
|
|
28
|
+
|
|
26
29
|
// ============================================================================
|
|
27
30
|
// MAIN SDK INTERFACE
|
|
28
31
|
// ============================================================================
|
|
@@ -30,12 +33,15 @@ ${FILE_MANAGER_DECLARATIONS}
|
|
|
30
33
|
interface SdkWebiny {
|
|
31
34
|
/** CMS operations: list, get, create, update, delete, publish entries. */
|
|
32
35
|
readonly cms: SdkCms;
|
|
33
|
-
|
|
36
|
+
|
|
34
37
|
/** Tenant Manager operations: create, install, disable, enable tenants. */
|
|
35
38
|
readonly tenantManager: SdkTenantManager;
|
|
36
|
-
|
|
39
|
+
|
|
37
40
|
/** File Manager operations: upload, list, get, update, delete files. */
|
|
38
41
|
readonly fileManager: SdkFileManager;
|
|
42
|
+
|
|
43
|
+
/** Languages operations: list enabled languages. */
|
|
44
|
+
readonly languages: SdkLanguages;
|
|
39
45
|
}
|
|
40
46
|
|
|
41
47
|
declare const sdk: SdkWebiny;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["COMMON_DECLARATIONS","CMS_DECLARATIONS","TENANT_MANAGER_DECLARATIONS","FILE_MANAGER_DECLARATIONS","SDK_GLOBAL_DECLARATION"],"sources":["sdkGlobalDeclaration.ts"],"sourcesContent":["// Global ambient declaration injected into Monaco's TypeScript language service.\n//\n// NOTE: This file contains TypeScript type declarations as a string literal.\n// In the future, this can be auto-generated from a real .d.ts file.\n//\n// RULES (do not break these):\n// 1. This string must contain NO top-level `import` or `export` statements.\n// Any import/export makes TypeScript treat the file as a module, scoping\n// all declarations locally instead of globally.\n// 2. All types must be declared inline — no cross-file references.\n// 3. Register this with addExtraLib using a \"file:///\" URI.\n\nimport { COMMON_DECLARATIONS } from \"./declarations/common.js\";\nimport { CMS_DECLARATIONS } from \"./declarations/cms.js\";\nimport { TENANT_MANAGER_DECLARATIONS } from \"./declarations/tenantManager.js\";\nimport { FILE_MANAGER_DECLARATIONS } from \"./declarations/fileManager.js\";\n\nexport const SDK_GLOBAL_DECLARATION = `\n${COMMON_DECLARATIONS}\n\n${CMS_DECLARATIONS}\n\n${TENANT_MANAGER_DECLARATIONS}\n\n${FILE_MANAGER_DECLARATIONS}\n\n// ============================================================================\n// MAIN SDK INTERFACE\n// ============================================================================\n\ninterface SdkWebiny {\n /** CMS operations: list, get, create, update, delete, publish entries. */\n readonly cms: SdkCms;\n
|
|
1
|
+
{"version":3,"names":["COMMON_DECLARATIONS","CMS_DECLARATIONS","TENANT_MANAGER_DECLARATIONS","FILE_MANAGER_DECLARATIONS","LANGUAGES_DECLARATIONS","SDK_GLOBAL_DECLARATION"],"sources":["sdkGlobalDeclaration.ts"],"sourcesContent":["// Global ambient declaration injected into Monaco's TypeScript language service.\n//\n// NOTE: This file contains TypeScript type declarations as a string literal.\n// In the future, this can be auto-generated from a real .d.ts file.\n//\n// RULES (do not break these):\n// 1. This string must contain NO top-level `import` or `export` statements.\n// Any import/export makes TypeScript treat the file as a module, scoping\n// all declarations locally instead of globally.\n// 2. All types must be declared inline — no cross-file references.\n// 3. Register this with addExtraLib using a \"file:///\" URI.\n\nimport { COMMON_DECLARATIONS } from \"./declarations/common.js\";\nimport { CMS_DECLARATIONS } from \"./declarations/cms.js\";\nimport { TENANT_MANAGER_DECLARATIONS } from \"./declarations/tenantManager.js\";\nimport { FILE_MANAGER_DECLARATIONS } from \"./declarations/fileManager.js\";\nimport { LANGUAGES_DECLARATIONS } from \"./declarations/languages.js\";\n\nexport const SDK_GLOBAL_DECLARATION = `\n${COMMON_DECLARATIONS}\n\n${CMS_DECLARATIONS}\n\n${TENANT_MANAGER_DECLARATIONS}\n\n${FILE_MANAGER_DECLARATIONS}\n\n${LANGUAGES_DECLARATIONS}\n\n// ============================================================================\n// MAIN SDK INTERFACE\n// ============================================================================\n\ninterface SdkWebiny {\n /** CMS operations: list, get, create, update, delete, publish entries. */\n readonly cms: SdkCms;\n\n /** Tenant Manager operations: create, install, disable, enable tenants. */\n readonly tenantManager: SdkTenantManager;\n\n /** File Manager operations: upload, list, get, update, delete files. */\n readonly fileManager: SdkFileManager;\n\n /** Languages operations: list enabled languages. */\n readonly languages: SdkLanguages;\n}\n\ndeclare const sdk: SdkWebiny;\ndeclare interface Window { sdk: SdkWebiny; }\n`;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,mBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAASC,2BAA2B;AACpC,SAASC,yBAAyB;AAClC,SAASC,sBAAsB;AAE/B,OAAO,MAAMC,sBAAsB,GAAG;AACtC,EAAEL,mBAAmB;AACrB;AACA,EAAEC,gBAAgB;AAClB;AACA,EAAEC,2BAA2B;AAC7B;AACA,EAAEC,yBAAyB;AAC3B;AACA,EAAEC,sBAAsB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MutableRefObject } from "react";
|
|
2
1
|
import type { editor } from "monaco-editor";
|
|
2
|
+
import type { MutableRefObject } from "react";
|
|
3
3
|
import type { ConsoleMessage } from "./types.js";
|
|
4
4
|
export declare function useCodeExecution(code: string, editorRef: MutableRefObject<editor.IStandaloneCodeEditor | null>): {
|
|
5
5
|
output: ConsoleMessage[];
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { useCallback, useState } from "react";
|
|
2
1
|
import { useSnackbar, useTenantContext } from "@webiny/app-admin";
|
|
2
|
+
import { AuthenticationContextFeature } from "@webiny/app-admin/features/security/AuthenticationContext/feature.js";
|
|
3
|
+
import { useFeature } from "@webiny/app";
|
|
3
4
|
import { config as appConfig } from "@webiny/app/config.js";
|
|
4
5
|
import { Webiny } from "@webiny/sdk";
|
|
6
|
+
import { useCallback, useState } from "react";
|
|
5
7
|
import { createCustomConsole } from "./consoleCapture.js";
|
|
6
8
|
export function useCodeExecution(code, editorRef) {
|
|
7
9
|
const [output, setOutput] = useState([]);
|
|
@@ -12,6 +14,9 @@ export function useCodeExecution(code, editorRef) {
|
|
|
12
14
|
const {
|
|
13
15
|
tenant
|
|
14
16
|
} = useTenantContext();
|
|
17
|
+
const {
|
|
18
|
+
authenticationContext
|
|
19
|
+
} = useFeature(AuthenticationContextFeature);
|
|
15
20
|
const handleRun = useCallback(async () => {
|
|
16
21
|
const apiUrl = appConfig.getKey("API_URL", process.env.REACT_APP_API_URL);
|
|
17
22
|
if (!apiUrl) {
|
|
@@ -26,17 +31,10 @@ export function useCodeExecution(code, editorRef) {
|
|
|
26
31
|
// Create custom console for capturing output.
|
|
27
32
|
const customConsole = createCustomConsole(messages, setOutput);
|
|
28
33
|
try {
|
|
29
|
-
// Create SDK instance with current tenant and API endpoint.
|
|
30
|
-
// Note: The SDK will use cookie-based authentication (credentials: "include")
|
|
31
|
-
// when running in the browser, as the admin app sets up the necessary cookies.
|
|
32
34
|
const sdk = new Webiny({
|
|
33
35
|
endpoint: apiUrl,
|
|
34
36
|
tenant: tenant || undefined,
|
|
35
|
-
|
|
36
|
-
// Add any additional headers if needed.
|
|
37
|
-
// The Authorization header with Bearer token is handled via cookies
|
|
38
|
-
// when running within the admin app context.
|
|
39
|
-
}
|
|
37
|
+
token: () => authenticationContext.getIdToken()
|
|
40
38
|
});
|
|
41
39
|
|
|
42
40
|
// Wrap code in async function to allow top-level await.
|
|
@@ -68,7 +66,7 @@ export function useCodeExecution(code, editorRef) {
|
|
|
68
66
|
} finally {
|
|
69
67
|
setIsRunning(false);
|
|
70
68
|
}
|
|
71
|
-
}, [code, editorRef, showSnackbar, tenant]);
|
|
69
|
+
}, [code, editorRef, showSnackbar, tenant, authenticationContext]);
|
|
72
70
|
return {
|
|
73
71
|
output,
|
|
74
72
|
isRunning,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["useSnackbar","useTenantContext","AuthenticationContextFeature","useFeature","config","appConfig","Webiny","useCallback","useState","createCustomConsole","useCodeExecution","code","editorRef","output","setOutput","isRunning","setIsRunning","showSnackbar","tenant","authenticationContext","handleRun","apiUrl","getKey","process","env","REACT_APP_API_URL","currentCode","current","getValue","messages","customConsole","sdk","endpoint","undefined","token","getIdToken","wrappedCode","fn","Function","result","then","error"],"sources":["useCodeExecution.ts"],"sourcesContent":["import { useSnackbar, useTenantContext } from \"@webiny/app-admin\";\nimport { AuthenticationContextFeature } from \"@webiny/app-admin/features/security/AuthenticationContext/feature.js\";\nimport { useFeature } from \"@webiny/app\";\nimport { config as appConfig } from \"@webiny/app/config.js\";\nimport { Webiny } from \"@webiny/sdk\";\nimport type { editor } from \"monaco-editor\";\nimport type { MutableRefObject } from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { createCustomConsole } from \"./consoleCapture.js\";\nimport type { ConsoleMessage } from \"./types.js\";\n\nexport function useCodeExecution(\n code: string,\n editorRef: MutableRefObject<editor.IStandaloneCodeEditor | null>\n) {\n const [output, setOutput] = useState<ConsoleMessage[]>([]);\n const [isRunning, setIsRunning] = useState(false);\n const { showSnackbar } = useSnackbar();\n const { tenant } = useTenantContext();\n const { authenticationContext } = useFeature(AuthenticationContextFeature);\n\n const handleRun = useCallback(async () => {\n const apiUrl = appConfig.getKey(\"API_URL\", process.env.REACT_APP_API_URL) as string;\n if (!apiUrl) {\n showSnackbar(\"API URL is not configured\");\n return;\n }\n\n const currentCode = editorRef.current?.getValue() || code;\n setIsRunning(true);\n setOutput([]);\n\n const messages: ConsoleMessage[] = [];\n\n // Create custom console for capturing output.\n const customConsole = createCustomConsole(messages, setOutput);\n\n try {\n const sdk = new Webiny({\n endpoint: apiUrl,\n tenant: tenant || undefined,\n token: () => authenticationContext.getIdToken() as Promise<string>\n });\n\n // Wrap code in async function to allow top-level await.\n const wrappedCode = `\n (async () => {\n try {\n ${currentCode}\n } catch (error) {\n console.error(\"Runtime error:\", error);\n throw error;\n }\n })()\n `;\n\n // Create function with injected dependencies.\n const fn = new Function(\"console\", \"sdk\", \"window\", wrappedCode);\n\n // Execute with custom console and SDK.\n const result = fn(customConsole, sdk, { sdk });\n\n // Handle async results.\n if (result && typeof result.then === \"function\") {\n await result;\n }\n } catch (error) {\n customConsole.error(\"Execution error:\", error);\n } finally {\n setIsRunning(false);\n }\n }, [code, editorRef, showSnackbar, tenant, authenticationContext]);\n\n return {\n output,\n isRunning,\n handleRun\n };\n}\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,gBAAgB,QAAQ,mBAAmB;AACjE,SAASC,4BAA4B,QAAQ,sEAAsE;AACnH,SAASC,UAAU,QAAQ,aAAa;AACxC,SAASC,MAAM,IAAIC,SAAS,QAAQ,uBAAuB;AAC3D,SAASC,MAAM,QAAQ,aAAa;AAGpC,SAASC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAC7C,SAASC,mBAAmB;AAG5B,OAAO,SAASC,gBAAgBA,CAC5BC,IAAY,EACZC,SAAgE,EAClE;EACE,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGN,QAAQ,CAAmB,EAAE,CAAC;EAC1D,MAAM,CAACO,SAAS,EAAEC,YAAY,CAAC,GAAGR,QAAQ,CAAC,KAAK,CAAC;EACjD,MAAM;IAAES;EAAa,CAAC,GAAGjB,WAAW,CAAC,CAAC;EACtC,MAAM;IAAEkB;EAAO,CAAC,GAAGjB,gBAAgB,CAAC,CAAC;EACrC,MAAM;IAAEkB;EAAsB,CAAC,GAAGhB,UAAU,CAACD,4BAA4B,CAAC;EAE1E,MAAMkB,SAAS,GAAGb,WAAW,CAAC,YAAY;IACtC,MAAMc,MAAM,GAAGhB,SAAS,CAACiB,MAAM,CAAC,SAAS,EAAEC,OAAO,CAACC,GAAG,CAACC,iBAAiB,CAAW;IACnF,IAAI,CAACJ,MAAM,EAAE;MACTJ,YAAY,CAAC,2BAA2B,CAAC;MACzC;IACJ;IAEA,MAAMS,WAAW,GAAGd,SAAS,CAACe,OAAO,EAAEC,QAAQ,CAAC,CAAC,IAAIjB,IAAI;IACzDK,YAAY,CAAC,IAAI,CAAC;IAClBF,SAAS,CAAC,EAAE,CAAC;IAEb,MAAMe,QAA0B,GAAG,EAAE;;IAErC;IACA,MAAMC,aAAa,GAAGrB,mBAAmB,CAACoB,QAAQ,EAAEf,SAAS,CAAC;IAE9D,IAAI;MACA,MAAMiB,GAAG,GAAG,IAAIzB,MAAM,CAAC;QACnB0B,QAAQ,EAAEX,MAAM;QAChBH,MAAM,EAAEA,MAAM,IAAIe,SAAS;QAC3BC,KAAK,EAAEA,CAAA,KAAMf,qBAAqB,CAACgB,UAAU,CAAC;MAClD,CAAC,CAAC;;MAEF;MACA,MAAMC,WAAW,GAAG;AAChC;AACA;AACA,0BAA0BV,WAAW;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa;;MAED;MACA,MAAMW,EAAE,GAAG,IAAIC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAEF,WAAW,CAAC;;MAEhE;MACA,MAAMG,MAAM,GAAGF,EAAE,CAACP,aAAa,EAAEC,GAAG,EAAE;QAAEA;MAAI,CAAC,CAAC;;MAE9C;MACA,IAAIQ,MAAM,IAAI,OAAOA,MAAM,CAACC,IAAI,KAAK,UAAU,EAAE;QAC7C,MAAMD,MAAM;MAChB;IACJ,CAAC,CAAC,OAAOE,KAAK,EAAE;MACZX,aAAa,CAACW,KAAK,CAAC,kBAAkB,EAAEA,KAAK,CAAC;IAClD,CAAC,SAAS;MACNzB,YAAY,CAAC,KAAK,CAAC;IACvB;EACJ,CAAC,EAAE,CAACL,IAAI,EAAEC,SAAS,EAAEK,YAAY,EAAEC,MAAM,EAAEC,qBAAqB,CAAC,CAAC;EAElE,OAAO;IACHN,MAAM;IACNE,SAAS;IACTK;EACJ,CAAC;AACL","ignoreList":[]}
|