diff --git a/src/lib/components/Composite.svelte b/src/lib/components/Composite.svelte
index 773bde4..c6d9501 100644
--- a/src/lib/components/Composite.svelte
+++ b/src/lib/components/Composite.svelte
@@ -1,6 +1,7 @@
{#each componentsData.children as component (component.id)}
- {#await getComponent(component.componentName) then Component}
+ {#await Promise.all( [getComponent(component.componentName), getServiceProps(component)] ) then [Component, loadedServices]}
{#if Component}
-
+
{
+ acc[component.services[idx]] = currFn;
+ return acc;
+ }, {})}
+ />
{#if component.actions}
@@ -88,7 +116,6 @@
{/if}
-
{#if component.children && component.children.length}
{/if}
diff --git a/src/lib/components/GoogleAuth.svelte b/src/lib/components/GoogleAuth.svelte
index d27a920..c34f706 100644
--- a/src/lib/components/GoogleAuth.svelte
+++ b/src/lib/components/GoogleAuth.svelte
@@ -5,7 +5,7 @@
import { ProviderType } from '@lit-protocol/constants';
import { LitAccessControlConditionResource, LitAbility } from '@lit-protocol/auth-helpers';
import { createMessage } from '$lib/services/messages';
- import { setupLitProvider } from '$lib/services/provider/setupLitProvider';
+ // import { setupLitProvider } from '$lib/services/provider/setupLitProvider.ts';
const redirectUri = 'http://localhost:5173/';
let view = 'sign_in';
@@ -17,9 +17,12 @@
let sessionSigs;
let isLoading = false;
+ export let setupLitProvider;
+
let provider;
onMount(async () => {
+ provider = await setupLitProvider.setupLitProvider();
isLoading = true;
console.log('Component mounted.');
createMessage({
@@ -29,9 +32,6 @@
});
try {
- // Globally set the provider during the component's mount
- provider = await setupLitProvider();
-
console.log('Checking if isSignInRedirect...');
if (!authMethod && isSignInRedirect(redirectUri)) {
console.log('Redirect detected, handling...');
diff --git a/src/lib/components/HelloEarth/HelloEarth.svelte b/src/lib/components/HelloEarth/HelloEarth.svelte
index f9ef1e3..f789709 100644
--- a/src/lib/components/HelloEarth/HelloEarth.svelte
+++ b/src/lib/components/HelloEarth/HelloEarth.svelte
@@ -2,9 +2,19 @@
export let id;
import { getComponentStore } from '$lib/stores/componentStores.ts';
+ import { onMount } from 'svelte';
const store = getComponentStore(id);
$: console.log('store:', $store);
+
+ export let setupLitProvider;
+
+ let provider;
+
+ onMount(async () => {
+ provider = await setupLitProvider.setupLitProvider();
+ console.log('provider ' + JSON.stringify(provider));
+ });
Hello Earth {JSON.stringify($store)}
diff --git a/src/lib/servicesLoader.ts b/src/lib/servicesLoader.ts
new file mode 100644
index 0000000..64cb6f0
--- /dev/null
+++ b/src/lib/servicesLoader.ts
@@ -0,0 +1,10 @@
+import serviceNames from 'virtual:services-list';
+
+const services = {};
+
+serviceNames.forEach(path => {
+ const name = path.split('/').pop().replace('.ts', ''); // Extract just the file name from the path without .ts
+ services[name] = () => import(/* @vite-ignore */ `/src/lib/services/${path}`);
+});
+
+export default services;
\ No newline at end of file
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 71a8073..c8cc7c7 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -6,7 +6,8 @@
grid-template-areas:
"auth",
"login",
- "play"
+ "play",
+ "hello"
grid-template-rows: auto 1fr 1fr;
`,
children: [
@@ -26,9 +27,10 @@
}
},
{
- id: 'login1',
+ id: 'hello',
componentName: 'GoogleAuth',
- slot: 'login'
+ slot: 'hello',
+ services: ['setupLitProvider']
}
]
};
diff --git a/vite.config.ts b/vite.config.ts
index d148f65..326f53b 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -19,6 +19,21 @@ function getRecursiveSvelteFiles(dir) {
return files;
}
+function getRecursiveServiceFiles(dir) {
+ const dirents = fs.readdirSync(dir, { withFileTypes: true });
+ const files = Array.from(dirents).flatMap((dirent) => {
+ const res = resolve(dir, dirent.name);
+ if (dirent.isDirectory()) {
+ return getRecursiveServiceFiles(res);
+ } else if (res.endsWith('.ts')) {
+ return [res];
+ } else {
+ return [];
+ }
+ });
+ return files;
+}
+
export default defineConfig({
plugins: [
sveltekit(),
@@ -45,6 +60,30 @@ export default defineConfig({
}
return null;
}
+ },
+ {
+ name: 'services-resolver',
+ resolveId(source) {
+ if (source === 'virtual:services-list') return source;
+ return null;
+ },
+ load(id) {
+ if (id === 'virtual:services-list') {
+ const servicesDir = resolve(__dirname, 'src/lib/services');
+ const serviceFiles = getRecursiveServiceFiles(servicesDir);
+
+ const services = serviceFiles.map(file =>
+ file
+ .replace(servicesDir, '')
+ .replace(/\.ts$/, '')
+ .replace(/\\/g, '/') // Fix Windows path separators
+ .slice(1) // Remove leading "/"
+ );
+
+ return `export default ${JSON.stringify(services)};`;
+ }
+ return null;
+ }
}
],
test: {