@osdk/create-app 2.1.1 → 2.1.3
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 +15 -0
- package/README.md +6 -5
- package/build/esm/{esm-ZDKAQEHX.js → esm-4DPBXZEZ.js} +38 -36
- package/build/esm/esm-4DPBXZEZ.js.map +1 -0
- package/build/esm/{esm-YVNV3MQG.js → esm-FLIEVJDR.js} +28 -20
- package/build/esm/esm-FLIEVJDR.js.map +1 -0
- package/build/esm/{esm-WPYEYT7F.js → esm-KGMIZCJU.js} +38 -36
- package/build/esm/esm-KGMIZCJU.js.map +1 -0
- package/build/esm/{esm-EXZTN5HA.js → esm-MDV2MRIM.js} +32 -32
- package/build/esm/esm-MDV2MRIM.js.map +1 -0
- package/build/esm/{esm-FZSV3C5D.js → esm-POH2FWFA.js} +51 -57
- package/build/esm/esm-POH2FWFA.js.map +1 -0
- package/build/esm/{esm-XWXVWZDN.js → esm-QRLMRHCZ.js} +28 -20
- package/build/esm/esm-QRLMRHCZ.js.map +1 -0
- package/build/esm/{esm-HA4JIHHL.js → esm-UU67MDJI.js} +28 -20
- package/build/esm/esm-UU67MDJI.js.map +1 -0
- package/build/esm/{esm-BFQ5RNHV.js → esm-V33IJKEW.js} +3 -3
- package/build/esm/{esm-BFQ5RNHV.js.map → esm-V33IJKEW.js.map} +1 -1
- package/build/esm/{esm-ZXMFAUNZ.js → esm-WQOG3NSJ.js} +28 -20
- package/build/esm/esm-WQOG3NSJ.js.map +1 -0
- package/build/esm/index.js +134 -65
- package/build/esm/index.js.map +1 -1
- package/build/types/cli.d.ts.map +1 -1
- package/build/types/generate/generateEnv.d.ts +4 -2
- package/build/types/generate/generateEnv.d.ts.map +1 -1
- package/build/types/prompts/promptOntologyRid.d.ts +3 -0
- package/build/types/prompts/promptOntologyRid.d.ts.map +1 -0
- package/build/types/prompts/promptOntologyRid.test.d.ts +1 -0
- package/build/types/prompts/promptOntologyRid.test.d.ts.map +1 -0
- package/build/types/prompts/promptScopes.test.d.ts +1 -0
- package/build/types/prompts/promptScopes.test.d.ts.map +1 -0
- package/build/types/prompts/promptTemplate.d.ts +2 -0
- package/build/types/prompts/promptTemplate.d.ts.map +1 -1
- package/build/types/run.d.ts +2 -1
- package/build/types/run.d.ts.map +1 -1
- package/package.json +11 -13
- package/build/esm/esm-4SFFV2ZK.js +0 -421
- package/build/esm/esm-4SFFV2ZK.js.map +0 -1
- package/build/esm/esm-EXZTN5HA.js.map +0 -1
- package/build/esm/esm-FZSV3C5D.js.map +0 -1
- package/build/esm/esm-HA4JIHHL.js.map +0 -1
- package/build/esm/esm-NFVUE2AE.js +0 -394
- package/build/esm/esm-NFVUE2AE.js.map +0 -1
- package/build/esm/esm-WPYEYT7F.js.map +0 -1
- package/build/esm/esm-XWXVWZDN.js.map +0 -1
- package/build/esm/esm-YVNV3MQG.js.map +0 -1
- package/build/esm/esm-ZDKAQEHX.js.map +0 -1
- package/build/esm/esm-ZXMFAUNZ.js.map +0 -1
|
@@ -75,6 +75,10 @@ dist-ssr
|
|
|
75
75
|
<meta charset="UTF-8" />
|
|
76
76
|
<link rel="icon" type="image/svg+xml" href="/react.svg" />
|
|
77
77
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
78
|
+
<meta name="osdk-clientId" content="%VITE_FOUNDRY_CLIENT_ID%" />
|
|
79
|
+
<meta name="osdk-redirectUrl" content="%VITE_FOUNDRY_REDIRECT_URL%" />
|
|
80
|
+
<meta name="osdk-foundryUrl" content="%VITE_FOUNDRY_API_URL%" />
|
|
81
|
+
<meta name="osdk-ontologyRid" content="%VITE_FOUNDRY_ONTOLOGY_RID%" />
|
|
78
82
|
<title>Ontology SDK + React</title>
|
|
79
83
|
</head>
|
|
80
84
|
<body>
|
|
@@ -333,22 +337,30 @@ export default Login;
|
|
|
333
337
|
type: "raw",
|
|
334
338
|
body: `import { FoundryClient, PublicClientAuth } from "{{osdkPackage}}";
|
|
335
339
|
|
|
336
|
-
|
|
337
|
-
const
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
function checkEnv(
|
|
344
|
-
value: string | undefined,
|
|
345
|
-
name: string,
|
|
346
|
-
): asserts value is string {
|
|
347
|
-
if (value == null) {
|
|
348
|
-
throw new Error(\`Missing environment variable: \${name}\`);
|
|
340
|
+
function getMetaTagContent(tagName: string): string {
|
|
341
|
+
const elements = document.querySelectorAll(\`meta[name="\${tagName}"]\`);
|
|
342
|
+
const element = elements.item(elements.length - 1);
|
|
343
|
+
const value = element ? element.getAttribute("content") : null;
|
|
344
|
+
if (value == null || value === "") {
|
|
345
|
+
throw new Error(\`Meta tag \${tagName} not found or empty\`);
|
|
349
346
|
}
|
|
347
|
+
if (value.match(/%.+%/)) {
|
|
348
|
+
throw new Error(\`Meta tag \${tagName} contains placeholder value. Please add \${value.replace(/%/g, "")} to your .env files\`);
|
|
349
|
+
}
|
|
350
|
+
return value;
|
|
350
351
|
}
|
|
351
352
|
|
|
353
|
+
const url = getMetaTagContent("osdk-foundryUrl");
|
|
354
|
+
const clientId = getMetaTagContent("osdk-clientId");
|
|
355
|
+
const redirectUrl = getMetaTagContent("osdk-redirectUrl");
|
|
356
|
+
{{#if scopes}}
|
|
357
|
+
const scopes = [
|
|
358
|
+
{{#each scopes}}
|
|
359
|
+
"{{this}}",
|
|
360
|
+
{{/each}}
|
|
361
|
+
];
|
|
362
|
+
{{/if}}
|
|
363
|
+
|
|
352
364
|
/**
|
|
353
365
|
* Initialize the client to interact with the Ontology SDK
|
|
354
366
|
*/
|
|
@@ -359,11 +371,7 @@ const client = new FoundryClient({
|
|
|
359
371
|
url,
|
|
360
372
|
redirectUrl,
|
|
361
373
|
{{#if scopes}}
|
|
362
|
-
scopes
|
|
363
|
-
{{#each scopes}}
|
|
364
|
-
"{{this}}",
|
|
365
|
-
{{/each}}
|
|
366
|
-
],
|
|
374
|
+
scopes,
|
|
367
375
|
{{/if}}
|
|
368
376
|
}),
|
|
369
377
|
});
|
|
@@ -449,5 +457,5 @@ export default defineConfig({
|
|
|
449
457
|
}]]);
|
|
450
458
|
|
|
451
459
|
export { files };
|
|
452
|
-
//# sourceMappingURL=esm-
|
|
453
|
-
//# sourceMappingURL=esm-
|
|
460
|
+
//# sourceMappingURL=esm-WQOG3NSJ.js.map
|
|
461
|
+
//# sourceMappingURL=esm-WQOG3NSJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../create-app.template.react/build/esm/generatedNoCheck/index.js"],"names":[],"mappings":"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","file":"esm-WQOG3NSJ.js","sourcesContent":["export const files = new Map([[\"README.md.hbs\", {\n type: \"raw\",\n body: `# {{project}}\n\nThis project was generated with [\\`@osdk/create-app\\`](https://www.npmjs.com/package/@osdk/create-app) and demonstrates using the Ontology SDK package \\`{{osdkPackage}}\\` with React on top of Vite. Check out the [Vite](https://vitejs.dev/guide/) docs for further configuration.\n\n## Developing\n\nRun the following command or equivalent with your preferred package manager to start a local development server on \\`http://localhost:8080\\`:\n\n\\`\\`\\`sh\nnpm run dev\n\\`\\`\\`\n\nDevelopment configuration is stored in \\`.env.development\\`.\n\n{{#if corsProxy}}\nIn order to make API requests to Foundry, a CORS proxy has been set up for local development which may be removed if the stack is configured to allow \\`http://localhost:8080\\` to load resources. The configured OAuth client must also allow \\`http://localhost:8080/auth/callback\\` as a redirect URL.\n{{else}}\nIn order to make API requests to Foundry, CORS must be configured for the stack to allow \\`http://localhost:8080\\` to load resources. If this has not been configured and you are unable to request this, you can alternatively generate your project again with \\`--corsProxy true\\` to use a proxy for API requests during local development. The configured OAuth client must also allow \\`http://localhost:8080/auth/callback\\` as a redirect URL.\n{{/if}}\n\n## Deploying\n\nRun the following command or equivalent with your preferred package manager to create a production build of your application:\n\n\\`\\`\\`sh\nnpm run build\n\\`\\`\\`\n\nProduction configuration is stored in \\`.env.production\\`.\n\nIf you did not fill in the URL your production application will be hosted on you will need to fill in the \\`VITE_FOUNDRY_REDIRECT_URL\\` in \\`.env.production\\`. A default test is included in \\`env.test.ts\\` to verify your production environment variables which you can enable by removing the skip condition or running tests with the environment variable set \\`VERIFY_ENV_PRODUCTION=true\\`.\n\nIn order to make API requests to Foundry, CORS must be configured for the stack to allow the production origin to load resources. This will be automatically done for you if you are using Foundry website hosting. The configured OAuth client must also allow the production origin auth callback as a redirect URL.\n\nA \\`foundry.config.json\\` file is included in the root of this project to make deploying to Foundry website hosting with [\\`@osdk/cli\\`](https://www.npmjs.com/package/@osdk/cli) easier. If you are not using Foundry website hosting for your application you may delete this file.\n`\n}], [\".gitignore\", {\n type: \"raw\",\n body: `# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n`\n}], [\"eslint.config.mjs\", {\n \"type\": \"base64\",\n \"body\": \"Ly8gQHRzLWNoZWNrCmltcG9ydCBlc2xpbnQgZnJvbSAiQGVzbGludC9qcyI7CmltcG9ydCB0c1BhcnNlciBmcm9tICJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyIjsKaW1wb3J0ICogYXMgaW1wb3J0UGx1Z2luIGZyb20gImVzbGludC1wbHVnaW4taW1wb3J0IjsKaW1wb3J0IGpzeEExMXlQbHVnaW4gZnJvbSAiZXNsaW50LXBsdWdpbi1qc3gtYTExeSI7CmltcG9ydCByZWFjdFBsdWdpbiBmcm9tICJlc2xpbnQtcGx1Z2luLXJlYWN0IjsKaW1wb3J0IHJlYWN0SG9va3NQbHVnaW4gZnJvbSAiZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rcyI7CmltcG9ydCByZWFjdFJlZnJlc2ggZnJvbSAiZXNsaW50LXBsdWdpbi1yZWFjdC1yZWZyZXNoIjsKaW1wb3J0IGdsb2JhbHMgZnJvbSAiZ2xvYmFscyI7CmltcG9ydCB0c2VzbGludCBmcm9tICJ0eXBlc2NyaXB0LWVzbGludCI7CgpleHBvcnQgZGVmYXVsdCB0c2VzbGludC5jb25maWcoewogIGZpbGVzOiBbImVzbGludC5jb25maWcubWpzIiwgInNyYy8qKi8qLntqcyxtanMsY2pzLHRzLGpzeCx0c3h9Il0sCiAgc2V0dGluZ3M6IHsKICAgIHJlYWN0OiB7CiAgICAgIHZlcnNpb246ICJkZXRlY3QiLAogICAgfSwKCiAgICAiaW1wb3J0L3Jlc29sdmVyIjogewogICAgICBub2RlOiB7CiAgICAgICAgZXh0ZW5zaW9uczogWyIuanMiLCAiLmpzeCIsICIudHMiLCAiLnRzeCJdLAogICAgICB9LAogICAgfSwKICB9LAogIGxhbmd1YWdlT3B0aW9uczogewogICAgZ2xvYmFsczogewogICAgICAuLi5nbG9iYWxzLmJyb3dzZXIsCiAgICB9LAoKICAgIHBhcnNlcjogdHNQYXJzZXIsCiAgfSwKICBleHRlbmRzOiBbCiAgICBlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZCwKICAgIC4uLnRzZXNsaW50LmNvbmZpZ3MucmVjb21tZW5kZWQsCiAgXSwKICBwbHVnaW5zOiB7CiAgICAicmVhY3QiOiAvKiogQHR5cGUgaW1wb3J0KCJlc2xpbnQiKS5FU0xpbnQuUGx1Z2luICovIChyZWFjdFBsdWdpbiksCiAgICAicmVhY3QtcmVmcmVzaCI6IHJlYWN0UmVmcmVzaCwKICAgICJyZWFjdC1ob29rcyI6CiAgICAgIC8qKiBAdHlwZSBpbXBvcnQoImVzbGludCIpLkVTTGludC5QbHVnaW4gKi8gKHJlYWN0SG9va3NQbHVnaW4pLAogICAgImpzeC1hMTF5IjoganN4QTExeVBsdWdpbiwKICAgICJpbXBvcnQiOiBpbXBvcnRQbHVnaW4sCiAgfSwKICBydWxlczogewogICAgLi4uKAogICAgICAvKiogQHR5cGUgaW1wb3J0KCJlc2xpbnQiKS5MaW50ZXIuUnVsZXNSZWNvcmQgKi8KICAgICAgKHJlYWN0UGx1Z2luLmNvbmZpZ3MuZmxhdD8ucmVjb21tZW5kZWQucnVsZXMpCiAgICApLAogICAgInJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzIjogImVycm9yIiwKICAgICJyZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMiOiAid2FybiIsCiAgICAuLi5qc3hBMTF5UGx1Z2luLmNvbmZpZ3MucmVjb21tZW5kZWQucnVsZXMsCiAgICAicmVhY3QtcmVmcmVzaC9vbmx5LWV4cG9ydC1jb21wb25lbnRzIjogWyJ3YXJuIiwgewogICAgICBhbGxvd0NvbnN0YW50RXhwb3J0OiB0cnVlLAogICAgfV0sCgogICAgImltcG9ydC9uYW1lZCI6ICJlcnJvciIsCiAgICAiaW1wb3J0L2RlZmF1bHQiOiAiZXJyb3IiLAogICAgImltcG9ydC9uYW1lc3BhY2UiOiAiZXJyb3IiLAogICAgImltcG9ydC9uby1kdXBsaWNhdGVzIjogImVycm9yIiwKICAgICJpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMiOiAiZXJyb3IiLAoKICAgICJyZWFjdC9yZWFjdC1pbi1qc3gtc2NvcGUiOiAib2ZmIiwKICB9LAp9KTsK\"\n}], [\"index.html\", {\n type: \"raw\",\n body: `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/react.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <meta name=\"osdk-clientId\" content=\"%VITE_FOUNDRY_CLIENT_ID%\" />\n <meta name=\"osdk-redirectUrl\" content=\"%VITE_FOUNDRY_REDIRECT_URL%\" />\n <meta name=\"osdk-foundryUrl\" content=\"%VITE_FOUNDRY_API_URL%\" />\n <meta name=\"osdk-ontologyRid\" content=\"%VITE_FOUNDRY_ONTOLOGY_RID%\" />\n <title>Ontology SDK + React</title>\n </head>\n <body>\n <div id=\"root-container\">\n <div id=\"root\"></div>\n </div>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n </body>\n</html>\n`\n}], [\"package.json.hbs\", {\n type: \"raw\",\n body: `{\n \"name\": \"{{project}}\",\n \"private\": true,\n \"version\": \"0.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vite\",\n \"build\": \"tsc && vite build\",\n \"lint\": \"eslint . --report-unused-disable-directives --max-warnings 0\",\n \"test\": \"vitest run\",\n \"preview\": \"vite preview\"\n },\n \"dependencies\": {\n \"{{osdkPackage}}\": \"latest\",\n \"react\": \"^18\",\n \"react-dom\": \"^18\",\n \"react-router-dom\": \"^6.23.1\"\n },\n \"devDependencies\": {\n \"@eslint/compat\": \"^1.2.1\",\n \"@eslint/js\": \"^9.13.0\",\n \"@types/react\": \"^18\",\n \"@types/react-dom\": \"^18\",\n \"@typescript-eslint/eslint-plugin\": \"^8.21.0\",\n \"@typescript-eslint/parser\": \"^8.21.0\",\n \"@vitejs/plugin-react\": \"^4.2.0\",\n \"eslint\": \"^9.19.0\",\n \"eslint-plugin-import\": \"^2.31.0\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.1\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.14\",\n \"globals\": \"^15.11.0\",\n \"typescript\": \"~5.5.4\",\n \"typescript-eslint\": \"^8.21.0\",\n \"vite\": \"^6.0.11\",\n \"vitest\": \"^3.0.5\"\n }\n}`\n}], [\"public/palantir.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjEwNzY4IDYuMDY0MDFDNC4xMDc2OCA4LjM3NzEgNS45NjcwMiAxMC4yNTI2IDguMjYwNTkgMTAuMjUyNkMxMC41NTQzIDEwLjI1MjYgMTIuNDEzOCA4LjM3NzEgMTIuNDEzOCA2LjA2NDAxQzEyLjQxMzggMy43NTA4IDEwLjU1NDMgMS44NzU1MyA4LjI2MDU5IDEuODc1NTNDNS45NjcwMiAxLjg3NTUzIDQuMTA3NjggMy43NTA4IDQuMTA3NjggNi4wNjQwMVpNOC4yNjA5MyAxMy45MjNMMTMuNjI5OSAxMS41ODQ4TDE0LjUyMTcgMTMuMzA5MUw4LjI2MDkzIDE2TDIgMTMuMzA5MUwyLjg5MjAxIDExLjU4NDhMOC4yNjA5MyAxMy45MjNaTTguMjYxMDEgMEM0Ljk0MzY3IDAgMi4yNTQ0MiAyLjcxMjI4IDIuMjU0NDIgNi4wNTgwM0MyLjI1NDQyIDkuNDAzNzggNC45NDM2NyAxMi4xMTU5IDguMjYxMDEgMTIuMTE1OUMxMS41NzgyIDEyLjExNTkgMTQuMjY3NiA5LjQwMzc4IDE0LjI2NzYgNi4wNTgwM0MxNC4yNjc2IDIuNzEyMjggMTEuNTc4MiAwIDguMjYxMDEgMFoiIGZpbGw9IiMxMTE0MTgiLz4KPC9zdmc+Cg==\"\n}], [\"public/react.svg\", {\n \"type\": \"base64\",\n \"body\": \"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBhcmlhLWhpZGRlbj0idHJ1ZSIgcm9sZT0iaW1nIiBjbGFzcz0iaWNvbmlmeSBpY29uaWZ5LS1sb2dvcyIgd2lkdGg9IjM1LjkzIiBoZWlnaHQ9IjMyIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB2aWV3Qm94PSIwIDAgMjU2IDIyOCI+PHBhdGggZmlsbD0iIzAwRDhGRiIgZD0iTTIxMC40ODMgNzMuODI0YTE3MS40OSAxNzEuNDkgMCAwIDAtOC4yNC0yLjU5N2MuNDY1LTEuOS44OTMtMy43NzcgMS4yNzMtNS42MjFjNi4yMzgtMzAuMjgxIDIuMTYtNTQuNjc2LTExLjc2OS02Mi43MDhjLTEzLjM1NS03LjctMzUuMTk2LjMyOS01Ny4yNTQgMTkuNTI2YTE3MS4yMyAxNzEuMjMgMCAwIDAtNi4zNzUgNS44NDhhMTU1Ljg2NiAxNTUuODY2IDAgMCAwLTQuMjQxLTMuOTE3QzEwMC43NTkgMy44MjkgNzcuNTg3LTQuODIyIDYzLjY3MyAzLjIzM0M1MC4zMyAxMC45NTcgNDYuMzc5IDMzLjg5IDUxLjk5NSA2Mi41ODhhMTcwLjk3NCAxNzAuOTc0IDAgMCAwIDEuODkyIDguNDhjLTMuMjguOTMyLTYuNDQ1IDEuOTI0LTkuNDc0IDIuOThDMTcuMzA5IDgzLjQ5OCAwIDk4LjMwNyAwIDExMy42NjhjMCAxNS44NjUgMTguNTgyIDMxLjc3OCA0Ni44MTIgNDEuNDI3YTE0NS41MiAxNDUuNTIgMCAwIDAgNi45MjEgMi4xNjVhMTY3LjQ2NyAxNjcuNDY3IDAgMCAwLTIuMDEgOS4xMzhjLTUuMzU0IDI4LjItMS4xNzMgNTAuNTkxIDEyLjEzNCA1OC4yNjZjMTMuNzQ0IDcuOTI2IDM2LjgxMi0uMjIgNTkuMjczLTE5Ljg1NWExNDUuNTY3IDE0NS41NjcgMCAwIDAgNS4zNDItNC45MjNhMTY4LjA2NCAxNjguMDY0IDAgMCAwIDYuOTIgNi4zMTRjMjEuNzU4IDE4LjcyMiA0My4yNDYgMjYuMjgyIDU2LjU0IDE4LjU4NmMxMy43MzEtNy45NDkgMTguMTk0LTMyLjAwMyAxMi40LTYxLjI2OGExNDUuMDE2IDE0NS4wMTYgMCAwIDAtMS41MzUtNi44NDJjMS42Mi0uNDggMy4yMS0uOTc0IDQuNzYtMS40ODhjMjkuMzQ4LTkuNzIzIDQ4LjQ0My0yNS40NDMgNDguNDQzLTQxLjUyYzAtMTUuNDE3LTE3Ljg2OC0zMC4zMjYtNDUuNTE3LTM5Ljg0NFptLTYuMzY1IDcwLjk4NGMtMS40LjQ2My0yLjgzNi45MS00LjMgMS4zNDVjLTMuMjQtMTAuMjU3LTcuNjEyLTIxLjE2My0xMi45NjMtMzIuNDMyYzUuMTA2LTExIDkuMzEtMjEuNzY3IDEyLjQ1OS0zMS45NTdjMi42MTkuNzU4IDUuMTYgMS41NTcgNy42MSAyLjRjMjMuNjkgOC4xNTYgMzguMTQgMjAuMjEzIDM4LjE0IDI5LjUwNGMwIDkuODk2LTE1LjYwNiAyMi43NDMtNDAuOTQ2IDMxLjE0Wm0tMTAuNTE0IDIwLjgzNGMyLjU2MiAxMi45NCAyLjkyNyAyNC42NCAxLjIzIDMzLjc4N2MtMS41MjQgOC4yMTktNC41OSAxMy42OTgtOC4zODIgMTUuODkzYy04LjA2NyA0LjY3LTI1LjMyLTEuNC00My45MjctMTcuNDEyYTE1Ni43MjYgMTU2LjcyNiAwIDAgMS02LjQzNy01Ljg3YzcuMjE0LTcuODg5IDE0LjQyMy0xNy4wNiAyMS40NTktMjcuMjQ2YzEyLjM3Ni0xLjA5OCAyNC4wNjgtMi44OTQgMzQuNjcxLTUuMzQ1YTEzNC4xNyAxMzQuMTcgMCAwIDEgMS4zODYgNi4xOTNaTTg3LjI3NiAyMTQuNTE1Yy03Ljg4MiAyLjc4My0xNC4xNiAyLjg2My0xNy45NTUuNjc1Yy04LjA3NS00LjY1Ny0xMS40MzItMjIuNjM2LTYuODUzLTQ2Ljc1MmExNTYuOTIzIDE1Ni45MjMgMCAwIDEgMS44NjktOC40OTljMTAuNDg2IDIuMzIgMjIuMDkzIDMuOTg4IDM0LjQ5OCA0Ljk5NGM3LjA4NCA5Ljk2NyAxNC41MDEgMTkuMTI4IDIxLjk3NiAyNy4xNWExMzQuNjY4IDEzNC42NjggMCAwIDEtNC44NzcgNC40OTJjLTkuOTMzIDguNjgyLTE5Ljg4NiAxNC44NDItMjguNjU4IDE3Ljk0Wk01MC4zNSAxNDQuNzQ3Yy0xMi40ODMtNC4yNjctMjIuNzkyLTkuODEyLTI5Ljg1OC0xNS44NjNjLTYuMzUtNS40MzctOS41NTUtMTAuODM2LTkuNTU1LTE1LjIxNmMwLTkuMzIyIDEzLjg5Ny0yMS4yMTIgMzcuMDc2LTI5LjI5M2MyLjgxMy0uOTggNS43NTctMS45MDUgOC44MTItMi43NzNjMy4yMDQgMTAuNDIgNy40MDYgMjEuMzE1IDEyLjQ3NyAzMi4zMzJjLTUuMTM3IDExLjE4LTkuMzk5IDIyLjI0OS0xMi42MzQgMzIuNzkyYTEzNC43MTggMTM0LjcxOCAwIDAgMS02LjMxOC0xLjk3OVptMTIuMzc4LTg0LjI2Yy00LjgxMS0yNC41ODctMS42MTYtNDMuMTM0IDYuNDI1LTQ3Ljc4OWM4LjU2NC00Ljk1OCAyNy41MDIgMi4xMTEgNDcuNDYzIDE5LjgzNWExNDQuMzE4IDE0NC4zMTggMCAwIDEgMy44NDEgMy41NDVjLTcuNDM4IDcuOTg3LTE0Ljc4NyAxNy4wOC0yMS44MDggMjYuOTg4Yy0xMi4wNCAxLjExNi0yMy41NjUgMi45MDgtMzQuMTYxIDUuMzA5YTE2MC4zNDIgMTYwLjM0MiAwIDAgMS0xLjc2LTcuODg3Wm0xMTAuNDI3IDI3LjI2OGEzNDcuOCAzNDcuOCAwIDAgMC03Ljc4NS0xMi44MDNjOC4xNjggMS4wMzMgMTUuOTk0IDIuNDA0IDIzLjM0MyA0LjA4Yy0yLjIwNiA3LjA3Mi00Ljk1NiAxNC40NjUtOC4xOTMgMjIuMDQ1YTM4MS4xNTEgMzgxLjE1MSAwIDAgMC03LjM2NS0xMy4zMjJabS00NS4wMzItNDMuODYxYzUuMDQ0IDUuNDY1IDEwLjA5NiAxMS41NjYgMTUuMDY1IDE4LjE4NmEzMjIuMDQgMzIyLjA0IDAgMCAwLTMwLjI1Ny0uMDA2YzQuOTc0LTYuNTU5IDEwLjA2OS0xMi42NTIgMTUuMTkyLTE4LjE4Wk04Mi44MDIgODcuODNhMzIzLjE2NyAzMjMuMTY3IDAgMCAwLTcuMjI3IDEzLjIzOGMtMy4xODQtNy41NTMtNS45MDktMTQuOTgtOC4xMzQtMjIuMTUyYzcuMzA0LTEuNjM0IDE1LjA5My0yLjk3IDIzLjIwOS0zLjk4NGEzMjEuNTI0IDMyMS41MjQgMCAwIDAtNy44NDggMTIuODk3Wm04LjA4MSA2NS4zNTJjLTguMzg1LS45MzYtMTYuMjkxLTIuMjAzLTIzLjU5My0zLjc5M2MyLjI2LTcuMyA1LjA0NS0xNC44ODUgOC4yOTgtMjIuNmEzMjEuMTg3IDMyMS4xODcgMCAwIDAgNy4yNTcgMTMuMjQ2YzIuNTk0IDQuNDggNS4yOCA4Ljg2OCA4LjAzOCAxMy4xNDdabTM3LjU0MiAzMS4wM2MtNS4xODQtNS41OTItMTAuMzU0LTExLjc3OS0xNS40MDMtMTguNDMzYzQuOTAyLjE5MiA5Ljg5OS4yOSAxNC45NzguMjljNS4yMTggMCAxMC4zNzYtLjExNyAxNS40NTMtLjM0M2MtNC45ODUgNi43NzQtMTAuMDE4IDEyLjk3LTE1LjAyOCAxOC40ODZabTUyLjE5OC01Ny44MTdjMy40MjIgNy44IDYuMzA2IDE1LjM0NSA4LjU5NiAyMi41MmMtNy40MjIgMS42OTQtMTUuNDM2IDMuMDU4LTIzLjg4IDQuMDcxYTM4Mi40MTcgMzgyLjQxNyAwIDAgMCA3Ljg1OS0xMy4wMjZhMzQ3LjQwMyAzNDcuNDAzIDAgMCAwIDcuNDI1LTEzLjU2NVptLTE2Ljg5OCA4LjEwMWEzNTguNTU3IDM1OC41NTcgMCAwIDEtMTIuMjgxIDE5LjgxNWEzMjkuNCAzMjkuNCAwIDAgMS0yMy40NDQuODIzYy03Ljk2NyAwLTE1LjcxNi0uMjQ4LTIzLjE3OC0uNzMyYTMxMC4yMDIgMzEwLjIwMiAwIDAgMS0xMi41MTMtMTkuODQ2aC4wMDFhMzA3LjQxIDMwNy40MSAwIDAgMS0xMC45MjMtMjAuNjI3YTMxMC4yNzggMzEwLjI3OCAwIDAgMSAxMC44OS0yMC42MzdsLS4wMDEuMDAxYTMwNy4zMTggMzA3LjMxOCAwIDAgMSAxMi40MTMtMTkuNzYxYzcuNjEzLS41NzYgMTUuNDItLjg3NiAyMy4zMS0uODc2SDEyOGM3LjkyNiAwIDE1Ljc0My4zMDMgMjMuMzU0Ljg4M2EzMjkuMzU3IDMyOS4zNTcgMCAwIDEgMTIuMzM1IDE5LjY5NWEzNTguNDg5IDM1OC40ODkgMCAwIDEgMTEuMDM2IDIwLjU0YTMyOS40NzIgMzI5LjQ3MiAwIDAgMS0xMSAyMC43MjJabTIyLjU2LTEyMi4xMjRjOC41NzIgNC45NDQgMTEuOTA2IDI0Ljg4MSA2LjUyIDUxLjAyNmMtLjM0NCAxLjY2OC0uNzMgMy4zNjctMS4xNSA1LjA5Yy0xMC42MjItMi40NTItMjIuMTU1LTQuMjc1LTM0LjIzLTUuNDA4Yy03LjAzNC0xMC4wMTctMTQuMzIzLTE5LjEyNC0yMS42NC0yNy4wMDhhMTYwLjc4OSAxNjAuNzg5IDAgMCAxIDUuODg4LTUuNGMxOC45LTE2LjQ0NyAzNi41NjQtMjIuOTQxIDQ0LjYxMi0xOC4zWk0xMjggOTAuODA4YzEyLjYyNSAwIDIyLjg2IDEwLjIzNSAyMi44NiAyMi44NnMtMTAuMjM1IDIyLjg2LTIyLjg2IDIyLjg2cy0yMi44Ni0xMC4yMzUtMjIuODYtMjIuODZzMTAuMjM1LTIyLjg2IDIyLjg2LTIyLjg2WiI+PC9wYXRoPjwvc3ZnPg==\"\n}], [\"src/AuthCallback.tsx\", {\n type: \"raw\",\n body: `import { useEffect, useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport client from \"./client\";\n\n/**\n * Component to render at \\`/auth/callback\\`\n * This calls signIn() again to save the token, and then navigates the user back to the home page.\n */\nfunction AuthCallback() {\n const [error, setError] = useState<string | undefined>(undefined);\n const navigate = useNavigate();\n\n // This effect conflicts with React 18 strict mode in development\n // https://react.dev/learn/synchronizing-with-effects#how-to-handle-the-effect-firing-twice-in-development\n useEffect(() => {\n client.auth\n .signIn()\n .then(() => navigate(\"/\", { replace: true }))\n .catch((e: unknown) => setError((e as Error).message ?? e));\n }, [navigate]);\n return <div>{error != null ? error : \"Authenticating…\"}</div>;\n}\n\nexport default AuthCallback;\n`\n}], [\"src/AuthenticatedRoute.tsx\", {\n type: \"raw\",\n body: `import { useEffect, useState } from \"react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\nimport client from \"./client\";\n\n/**\n * A component that can be used to wrap routes that require authentication.\n * Nested routes may assume that a valid token is present.\n */\nfunction AuthenticatedRoute() {\n const navigate = useNavigate();\n const [token, setToken] = useState(client.auth.token);\n useEffect(() => {\n if (client.auth.token == null || client.auth.token.isExpired) {\n client.auth\n .refresh()\n .then(() => {\n setToken(client.auth.token);\n })\n .catch(() => {\n // If we cannot refresh the token (i.e. the user is not logged in) we redirect to the login page\n navigate(\"/login\");\n });\n }\n }, [navigate]);\n\n if (token == null || token.isExpired) {\n return null;\n }\n\n return <Outlet />;\n}\n\nexport default AuthenticatedRoute;\n`\n}], [\"src/Home.module.css\", {\n \"type\": \"base64\",\n \"body\": \"Lm1ldGhvZHMgewogIHBhZGRpbmc6IDJlbTsKICBnYXA6IDJlbTsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgZmxleC13cmFwOiB3cmFwOwp9Cg==\"\n}], [\"src/Home.tsx.hbs\", {\n type: \"raw\",\n body: `import client from \"./client\";\nimport css from \"./Home.module.css\";\nimport Layout from \"./Layout\";\n\nfunction Home() {\n const objectApiNames = Object.keys(client.ontology.objects);\n const actionApiNames = Object.keys(client.ontology.actions);\n const queryApiNames = Object.keys(client.ontology.queries);\n\n return (\n <Layout>\n <h1>{{osdkPackage}}</h1>\n <p>\n Welcome to your Ontology SDK! Try using any of the following methods\n now.\n </p>\n <div className={css.methods}>\n <div>\n <h2>Objects ({objectApiNames.length})</h2>\n {objectApiNames.map((objectApiName) => (\n <pre key={objectApiName}>\n client.ontology.objects.{objectApiName}\n </pre>\n ))}\n </div>\n <div>\n <h2>Actions ({actionApiNames.length})</h2>\n {actionApiNames.map((actionApiName) => (\n <pre key={actionApiName}>\n client.ontology.actions.{actionApiName}\n </pre>\n ))}\n </div>\n <div>\n <h2>Queries ({queryApiNames.length})</h2>\n {queryApiNames.map((queryApiName) => (\n <pre key={queryApiName}>\n client.ontology.queries.{queryApiName}\n </pre>\n ))}\n </div>\n </div>\n </Layout>\n );\n}\n\nexport default Home;\n`\n}], [\"src/Layout.module.css\", {\n \"type\": \"base64\",\n \"body\": \"LmxvZ28gewogIGhlaWdodDogNmVtOwogIHBhZGRpbmc6IDEuNWVtOwogIHdpbGwtY2hhbmdlOiBmaWx0ZXI7CiAgdHJhbnNpdGlvbjogZmlsdGVyIDMwMG1zOwp9CgoubG9nbzpob3ZlciB7CiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMmVtICM2NDZjZmZhYSk7Cn0K\"\n}], [\"src/Layout.tsx\", {\n type: \"raw\",\n body: `import palantirLogo from \"/palantir.svg\";\nimport reactLogo from \"/react.svg\";\nimport React from \"react\";\nimport css from \"./Layout.module.css\";\n\ninterface LayoutProps {\n children?: React.ReactNode;\n}\n\nfunction Layout({ children }: LayoutProps) {\n return (\n <>\n <div>\n <a\n href=\"https://www.palantir.com/docs/foundry/ontology-sdk/overview/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <img src={palantirLogo} className={css.logo} alt=\"Palantir logo\" />\n </a>\n <a href=\"https://react.dev\" target=\"_blank\" rel=\"noreferrer\">\n <img src={reactLogo} className={css.logo} alt=\"React logo\" />\n </a>\n </div>\n {children}\n </>\n );\n}\n\nexport default Layout;\n`\n}], [\"src/Login.tsx\", {\n type: \"raw\",\n body: `import { useCallback, useState } from \"react\";\nimport { Navigate } from \"react-router-dom\";\nimport client from \"./client\";\nimport Layout from \"./Layout\";\n\nfunction Login() {\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const token = client.auth.token;\n\n const handleLogin = useCallback(async () => {\n setIsLoggingIn(true);\n try {\n // Initiate the OAuth flow, which will redirect the user to log into Foundry\n // Once the login has completed, the user will be redirected back to the route defined via the\n // FOUNDRY_REDIRECT_URL variable in .env.development\n await client.auth.signIn();\n } catch (e: unknown) {\n console.error(e);\n setError((e as Error).message ?? e);\n } finally {\n setIsLoggingIn(false);\n }\n }, []);\n\n // If the token exists but a user tries to load /login, redirect to the home page instead\n if (token != null) {\n return <Navigate to=\"/\" replace={true} />;\n }\n\n return (\n <Layout>\n <h1>Ontology SDK</h1>\n <button onClick={handleLogin}>\n {isLoggingIn ? \"Logging in…\" : \"Log in \"}\n </button>\n {error && <div>Unable to log in: {error}</div>}\n </Layout>\n );\n}\n\nexport default Login;\n`\n}], [\"src/client.ts.hbs\", {\n type: \"raw\",\n body: `import { FoundryClient, PublicClientAuth } from \"{{osdkPackage}}\";\n\nfunction getMetaTagContent(tagName: string): string {\n const elements = document.querySelectorAll(\\`meta[name=\"\\${tagName}\"]\\`);\n const element = elements.item(elements.length - 1);\n const value = element ? element.getAttribute(\"content\") : null;\n if (value == null || value === \"\") {\n throw new Error(\\`Meta tag \\${tagName} not found or empty\\`);\n }\n if (value.match(/%.+%/)) {\n throw new Error(\\`Meta tag \\${tagName} contains placeholder value. Please add \\${value.replace(/%/g, \"\")} to your .env files\\`);\n }\n return value;\n}\n\nconst url = getMetaTagContent(\"osdk-foundryUrl\");\nconst clientId = getMetaTagContent(\"osdk-clientId\");\nconst redirectUrl = getMetaTagContent(\"osdk-redirectUrl\");\n{{#if scopes}}\nconst scopes = [\n {{#each scopes}}\n \"{{this}}\",\n {{/each}}\n];\n{{/if}}\n\n/**\n * Initialize the client to interact with the Ontology SDK\n */\nconst client = new FoundryClient({\n url,\n auth: new PublicClientAuth({\n clientId,\n url,\n redirectUrl,\n {{#if scopes}}\n scopes,\n {{/if}}\n }),\n});\n\nexport default client;\n`\n}], [\"src/env.test.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgbG9hZEVudiB9IGZyb20gInZpdGUiOwppbXBvcnQgeyBleHBlY3QsIHRlc3QgfSBmcm9tICJ2aXRlc3QiOwoKY29uc3QgRU5WX1ZBUlMgPSBbCiAgIlZJVEVfRk9VTkRSWV9BUElfVVJMIiwKICAiVklURV9GT1VORFJZX0NMSUVOVF9JRCIsCiAgIlZJVEVfRk9VTkRSWV9SRURJUkVDVF9VUkwiLApdOwoKZm9yIChjb25zdCBlbnZWYXIgb2YgRU5WX1ZBUlMpIHsKICB0ZXN0LnNraXBJZihwcm9jZXNzLmVudi5WRVJJRllfRU5WX1BST0RVQ1RJT04gIT09ICJ0cnVlIikoCiAgICBgcHJvZHVjdGlvbiBlbnYgc2hvdWxkIGNvbnRhaW4gJHtlbnZWYXJ9YCwKICAgICgpID0+IHsKICAgICAgY29uc3QgZW52ID0gbG9hZEVudigicHJvZHVjdGlvbiIsIHByb2Nlc3MuY3dkKCkpOwogICAgICBleHBlY3QoZW52W2VudlZhcl0sIGAke2VudlZhcn0gc2hvdWxkIGJlIGRlZmluZWRgKS50b0JlRGVmaW5lZCgpOwogICAgICBleHBlY3QoCiAgICAgICAgZW52W2VudlZhcl0sCiAgICAgICAgYCR7ZW52VmFyfSBzaG91bGQgbm90IGNvbnRhaW4gcGxhY2Vob2xkZXIgdmFsdWVgLAogICAgICApLm5vdC50b01hdGNoKC88Lio+Lyk7CiAgICB9LAogICk7Cn0K\"\n}], [\"src/index.css\", {\n \"type\": \"base64\",\n \"body\": \"OnJvb3QgewogIGZvbnQtZmFtaWx5OiBJbnRlciwgc3lzdGVtLXVpLCBBdmVuaXIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBmb250LXdlaWdodDogNDAwOwoKICBjb2xvci1zY2hlbWU6IGxpZ2h0IGRhcms7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyk7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI0MjQyNDsKCiAgZm9udC1zeW50aGVzaXM6IG5vbmU7CiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwp9Cgojcm9vdC1jb250YWluZXIgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleDogMTsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9Cgojcm9vdCB7CiAgbWF4LXdpZHRoOiAxMjgwcHg7CiAgbWFyZ2luOiAwIGF1dG87CiAgcGFkZGluZzogMnJlbTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmEgewogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgY29sb3I6ICM2NDZjZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0Owp9CmE6aG92ZXIgewogIGNvbG9yOiAjNTM1YmYyOwp9Cgpib2R5IHsKICBtYXJnaW46IDA7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIG1pbi13aWR0aDogMzIwcHg7CiAgbWluLWhlaWdodDogMTAwdmg7Cn0KCmgxIHsKICBmb250LXNpemU6IDMuMmVtOwogIGxpbmUtaGVpZ2h0OiAxLjE7Cn0KCmJ1dHRvbiB7CiAgYm9yZGVyLXJhZGl1czogOHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIHBhZGRpbmc6IDAuNmVtIDEuMmVtOwogIGZvbnQtc2l6ZTogMWVtOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMWExYTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjVzOwp9CmJ1dHRvbjpob3ZlciB7CiAgYm9yZGVyLWNvbG9yOiAjNjQ2Y2ZmOwp9CmJ1dHRvbjpmb2N1cywKYnV0dG9uOmZvY3VzLXZpc2libGUgewogIG91dGxpbmU6IDRweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjsKfQoKQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHsKICA6cm9vdCB7CiAgICBjb2xvcjogIzIxMzU0NzsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgfQogIGE6aG92ZXIgewogICAgY29sb3I6ICM3NDdiZmY7CiAgfQogIGJ1dHRvbiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OwogIH0KfQo=\"\n}], [\"src/main.tsx\", {\n type: \"raw\",\n body: `import ReactDOM from \"react-dom/client\";\nimport { createBrowserRouter, RouterProvider } from \"react-router-dom\";\nimport AuthCallback from \"./AuthCallback\";\nimport AuthenticatedRoute from \"./AuthenticatedRoute\";\nimport Home from \"./Home\";\nimport Login from \"./Login\";\nimport \"./index.css\";\n\nconst router = createBrowserRouter(\n [\n {\n path: \"/\",\n element: <AuthenticatedRoute />,\n children: [\n {\n path: \"/\",\n element: <Home />,\n },\n ],\n },\n {\n path: \"/login\",\n element: <Login />,\n },\n {\n // This is the route defined in your application's redirect URL\n path: \"/auth/callback\",\n element: <AuthCallback />,\n },\n ],\n { basename: import.meta.env.BASE_URL },\n);\n\nReactDOM.createRoot(document.getElementById(\"root\")!).render(\n <RouterProvider router={router} />,\n);\n`\n}], [\"src/vite-env.d.ts\", {\n \"type\": \"base64\",\n \"body\": \"Ly8vIDxyZWZlcmVuY2UgdHlwZXM9InZpdGUvY2xpZW50IiAvPgo=\"\n}], [\"tsconfig.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAidGFyZ2V0IjogIkVTMjAyMCIsCiAgICAidXNlRGVmaW5lRm9yQ2xhc3NGaWVsZHMiOiB0cnVlLAogICAgImxpYiI6IFsiRVMyMDIwIiwgIkRPTSIsICJET00uSXRlcmFibGUiXSwKICAgICJtb2R1bGUiOiAiRVNOZXh0IiwKICAgICJza2lwTGliQ2hlY2siOiB0cnVlLAoKICAgIC8qIEJ1bmRsZXIgbW9kZSAqLwogICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCiAgICAiYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnMiOiB0cnVlLAogICAgInJlc29sdmVKc29uTW9kdWxlIjogdHJ1ZSwKICAgICJpc29sYXRlZE1vZHVsZXMiOiB0cnVlLAogICAgIm5vRW1pdCI6IHRydWUsCiAgICAianN4IjogInJlYWN0LWpzeCIsCgogICAgLyogTGludGluZyAqLwogICAgInN0cmljdCI6IHRydWUsCiAgICAibm9VbnVzZWRMb2NhbHMiOiB0cnVlLAogICAgIm5vVW51c2VkUGFyYW1ldGVycyI6IHRydWUsCiAgICAibm9GYWxsdGhyb3VnaENhc2VzSW5Td2l0Y2giOiB0cnVlCiAgfSwKICAiaW5jbHVkZSI6IFsic3JjIl0sCiAgInJlZmVyZW5jZXMiOiBbeyAicGF0aCI6ICIuL3RzY29uZmlnLm5vZGUuanNvbiIgfV0KfQo=\"\n}], [\"tsconfig.node.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAiY29tcG9zaXRlIjogdHJ1ZSwKICAgICJza2lwTGliQ2hlY2siOiB0cnVlLAogICAgIm1vZHVsZSI6ICJFU05leHQiLAogICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCiAgICAiYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0cyI6IHRydWUKICB9LAogICJpbmNsdWRlIjogWyJ2aXRlLmNvbmZpZy50cyJdCn0K\"\n}], [\"vite.config.ts.hbs\", {\n type: \"raw\",\n body: `import react from \"@vitejs/plugin-react\";\nimport { defineConfig } from \"vite\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [react()],\n server: {\n port: 8080,\n {{#if corsProxy}}\n proxy: {\n \"^(/multipass/api|/api)\": {\n target: \"{{foundryUrl}}\",\n changeOrigin: true,\n secure: true,\n },\n },\n {{/if}}\n },\n});\n`\n}]]);"]}
|
package/build/esm/index.js
CHANGED
|
@@ -129,6 +129,22 @@ ${italic("(Example: https://example.palantirfoundry.com)")}`, {
|
|
|
129
129
|
return foundryUrl.replace(/\/$/, "");
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
// src/prompts/promptOntologyRid.ts
|
|
133
|
+
async function promptOntologyRid({
|
|
134
|
+
ontology
|
|
135
|
+
}) {
|
|
136
|
+
while (ontology == null || !/^ri\.ontology\.[^.]+\.ontology\.[^.]+$/.test(ontology)) {
|
|
137
|
+
if (ontology != null) {
|
|
138
|
+
consola.fail("Please enter a valid Ontology resource identifier (rid)");
|
|
139
|
+
}
|
|
140
|
+
ontology = await consola.prompt(`Enter the Ontology resource identifier (rid) associated with your Developer Console:
|
|
141
|
+
${italic("(Example: ri.ontology.main.ontology.1df1ce4c-f9d2-0f78-a316-287f6ac80bb2)")}`, {
|
|
142
|
+
type: "text"
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return ontology;
|
|
146
|
+
}
|
|
147
|
+
|
|
132
148
|
// src/prompts/promptOsdkPackage.ts
|
|
133
149
|
async function promptOsdkPackage({
|
|
134
150
|
osdkPackage
|
|
@@ -221,18 +237,17 @@ var scopeNameRegex = /^[a-zA-Z-_:]+$/;
|
|
|
221
237
|
async function promptScopes({
|
|
222
238
|
scopes
|
|
223
239
|
}) {
|
|
224
|
-
if (scopes == null) {
|
|
225
|
-
return undefined;
|
|
226
|
-
}
|
|
227
240
|
while (true) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
241
|
+
if (scopes != null) {
|
|
242
|
+
const invalidScopes = scopes.filter((scope) => !scopeNameRegex.test(scope));
|
|
243
|
+
const allValidScopes = invalidScopes.length === 0;
|
|
244
|
+
if (allValidScopes) {
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
const joinedInvalidScopes = invalidScopes.join(", ");
|
|
248
|
+
consola.fail(`Scopes [ ${joinedInvalidScopes} ] are invalid. Scope names can only contain letters, hyphens, underscores, and colons`);
|
|
232
249
|
}
|
|
233
|
-
const
|
|
234
|
-
consola.fail(`Scopes [ ${joinedInvalidScopes} ] are invalid. Scope names can only contain letters, hyphens, underscores, and colons`);
|
|
235
|
-
const stringScopes = await consola.prompt("Scopes:", {
|
|
250
|
+
const stringScopes = await consola.prompt("Enter the scopes to request during OAuth:", {
|
|
236
251
|
type: "text",
|
|
237
252
|
placeholder: "api:read-data api:write-data",
|
|
238
253
|
default: "api:read-data api:write-data"
|
|
@@ -291,9 +306,10 @@ var TEMPLATES = [
|
|
|
291
306
|
label: "React",
|
|
292
307
|
envPrefix: "VITE_",
|
|
293
308
|
buildDirectory: "./dist",
|
|
309
|
+
hidden: false,
|
|
294
310
|
files: {
|
|
295
|
-
"1.x": getPackageFiles(import('./esm-
|
|
296
|
-
"2.x": getPackageFiles(import('./esm-
|
|
311
|
+
"1.x": getPackageFiles(import('./esm-WQOG3NSJ.js')),
|
|
312
|
+
"2.x": getPackageFiles(import('./esm-POH2FWFA.js'))
|
|
297
313
|
}
|
|
298
314
|
},
|
|
299
315
|
// Expo
|
|
@@ -302,8 +318,9 @@ var TEMPLATES = [
|
|
|
302
318
|
label: "Expo",
|
|
303
319
|
envPrefix: "EXPO_PUBLIC_",
|
|
304
320
|
buildDirectory: "./dist",
|
|
321
|
+
hidden: false,
|
|
305
322
|
files: {
|
|
306
|
-
"2.x": getPackageFiles(import('./esm-
|
|
323
|
+
"2.x": getPackageFiles(import('./esm-V33IJKEW.js'))
|
|
307
324
|
}
|
|
308
325
|
},
|
|
309
326
|
// Vue
|
|
@@ -312,20 +329,10 @@ var TEMPLATES = [
|
|
|
312
329
|
label: "Vue",
|
|
313
330
|
envPrefix: "VITE_",
|
|
314
331
|
buildDirectory: "./dist",
|
|
332
|
+
hidden: false,
|
|
315
333
|
files: {
|
|
316
|
-
"1.x": getPackageFiles(import('./esm-
|
|
317
|
-
"2.x": getPackageFiles(import('./esm-
|
|
318
|
-
}
|
|
319
|
-
},
|
|
320
|
-
// Next (static export)
|
|
321
|
-
{
|
|
322
|
-
id: "template-next-static-export",
|
|
323
|
-
label: "Next (static export)",
|
|
324
|
-
envPrefix: "NEXT_PUBLIC_",
|
|
325
|
-
buildDirectory: "./out",
|
|
326
|
-
files: {
|
|
327
|
-
"1.x": getPackageFiles(import('./esm-NFVUE2AE.js')),
|
|
328
|
-
"2.x": getPackageFiles(import('./esm-4SFFV2ZK.js'))
|
|
334
|
+
"1.x": getPackageFiles(import('./esm-UU67MDJI.js')),
|
|
335
|
+
"2.x": getPackageFiles(import('./esm-MDV2MRIM.js'))
|
|
329
336
|
}
|
|
330
337
|
},
|
|
331
338
|
// Tutorial: To do App
|
|
@@ -334,9 +341,10 @@ var TEMPLATES = [
|
|
|
334
341
|
label: "Tutorial: To do App",
|
|
335
342
|
envPrefix: "VITE_",
|
|
336
343
|
buildDirectory: "./dist",
|
|
344
|
+
hidden: true,
|
|
337
345
|
files: {
|
|
338
|
-
"1.x": getPackageFiles(import('./esm-
|
|
339
|
-
"2.x": getPackageFiles(import('./esm-
|
|
346
|
+
"1.x": getPackageFiles(import('./esm-QRLMRHCZ.js')),
|
|
347
|
+
"2.x": getPackageFiles(import('./esm-KGMIZCJU.js'))
|
|
340
348
|
}
|
|
341
349
|
},
|
|
342
350
|
// Tutorial: To do AIP App
|
|
@@ -345,30 +353,26 @@ var TEMPLATES = [
|
|
|
345
353
|
label: "Tutorial: To do AIP App",
|
|
346
354
|
envPrefix: "VITE_",
|
|
347
355
|
buildDirectory: "./dist",
|
|
356
|
+
hidden: true,
|
|
348
357
|
files: {
|
|
349
|
-
"1.x": getPackageFiles(import('./esm-
|
|
350
|
-
"2.x": getPackageFiles(import('./esm-
|
|
358
|
+
"1.x": getPackageFiles(import('./esm-FLIEVJDR.js')),
|
|
359
|
+
"2.x": getPackageFiles(import('./esm-4DPBXZEZ.js'))
|
|
351
360
|
}
|
|
352
361
|
}
|
|
353
362
|
];
|
|
354
363
|
|
|
355
364
|
// src/prompts/promptTemplate.ts
|
|
356
365
|
async function promptTemplate(parsed) {
|
|
357
|
-
|
|
366
|
+
const useBeta = parsed.beta ?? false;
|
|
358
367
|
let template = TEMPLATES.find((t) => t.id === parsed.template || t.id === `template-${parsed.template}`);
|
|
359
368
|
if (template == null) {
|
|
360
|
-
const availableTemplates =
|
|
361
|
-
if (availableTemplates.length === 0) {
|
|
362
|
-
throw new Error("No available templates found for the selected options.");
|
|
363
|
-
}
|
|
369
|
+
const availableTemplates = getAvailableTemplatesOrThrow(useBeta);
|
|
364
370
|
const templateId = await consola.prompt(parsed.template != null ? `The provided template ${green(parsed.template)} is invalid please select a framework:` : "Select a framework:", {
|
|
365
371
|
type: "select",
|
|
366
372
|
options: availableTemplates.map((template2) => ({
|
|
367
373
|
value: template2.id,
|
|
368
374
|
label: template2.label
|
|
369
375
|
}))
|
|
370
|
-
// Types for "select" are wrong the value is returned rather than the option object
|
|
371
|
-
// https://github.com/unjs/consola/pull/238
|
|
372
376
|
});
|
|
373
377
|
template = TEMPLATES.find((t) => t.id === templateId);
|
|
374
378
|
if (template == null) {
|
|
@@ -377,6 +381,13 @@ async function promptTemplate(parsed) {
|
|
|
377
381
|
}
|
|
378
382
|
return template;
|
|
379
383
|
}
|
|
384
|
+
function getAvailableTemplatesOrThrow(useBeta) {
|
|
385
|
+
const availableTemplates = TEMPLATES.filter((template) => !template.hidden && (useBeta ? template.isBeta === true : !template.isBeta));
|
|
386
|
+
if (availableTemplates.length === 0) {
|
|
387
|
+
throw new Error("No available templates found for the selected options.");
|
|
388
|
+
}
|
|
389
|
+
return availableTemplates;
|
|
390
|
+
}
|
|
380
391
|
|
|
381
392
|
// ../generator-utils/build/esm/changeVersionPrefix.js
|
|
382
393
|
function changeVersionPrefix(version, prefix) {
|
|
@@ -398,37 +409,87 @@ function generateEnvDevelopment({
|
|
|
398
409
|
envPrefix,
|
|
399
410
|
foundryUrl,
|
|
400
411
|
clientId,
|
|
401
|
-
corsProxy
|
|
412
|
+
corsProxy,
|
|
413
|
+
ontology
|
|
402
414
|
}) {
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
415
|
+
const foundryApiUrl = corsProxy ? "http://localhost:8080" : foundryUrl;
|
|
416
|
+
const applicationUrl = "http://localhost:8080";
|
|
417
|
+
return `# This env file is intended for developing on your local computer.
|
|
418
|
+
# To set up development in Foundry's Code Workspaces, see .env.code-workspaces.
|
|
419
|
+
# To deploy your application to production, see .env.production.
|
|
420
|
+
# Note that .env.code-workspaces is only present for projects that were set up
|
|
421
|
+
# using the "Bootstrap in Foundry" option in Developer Console.
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
# This URL is the URL your users will be redirected back to after signing in.
|
|
425
|
+
# This URL must exactly match one of the URLs listed in the "OAuth & scopes"
|
|
426
|
+
# page of Developer Console.
|
|
427
|
+
#
|
|
428
|
+
# If your application in development is not hosted on port 8080, you will need
|
|
429
|
+
# to change this URL here and in Developer Console.
|
|
430
|
+
|
|
431
|
+
${envPrefix}FOUNDRY_REDIRECT_URL=${applicationUrl}/auth/callback
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
# This URL is the Foundry host that your OSDK will use. It typically does not
|
|
435
|
+
# need to be changed.
|
|
436
|
+
|
|
437
|
+
${envPrefix}FOUNDRY_API_URL=${foundryApiUrl}
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
# This client ID must match the client ID given on the "OAuth & scopes" page of
|
|
441
|
+
# Developer Console. It typically does not need to be changed.
|
|
442
|
+
|
|
443
|
+
${envPrefix}FOUNDRY_CLIENT_ID=${clientId}
|
|
444
|
+
|
|
445
|
+
# This Ontology RID must match the Ontology RID your Developer Console is associated with.
|
|
446
|
+
# You can check the Ontology on the "Data Resources" page of Developer Console.
|
|
447
|
+
# It typically does not need to be changed.
|
|
448
|
+
|
|
449
|
+
${envPrefix}FOUNDRY_ONTOLOGY_RID=${ontology}
|
|
450
|
+
`;
|
|
409
451
|
}
|
|
410
452
|
function generateEnvProduction({
|
|
411
453
|
envPrefix,
|
|
412
454
|
foundryUrl,
|
|
413
455
|
applicationUrl,
|
|
414
|
-
clientId
|
|
415
|
-
|
|
416
|
-
return generateEnv({
|
|
417
|
-
envPrefix,
|
|
418
|
-
foundryUrl,
|
|
419
|
-
applicationUrl,
|
|
420
|
-
clientId
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
function generateEnv({
|
|
424
|
-
envPrefix,
|
|
425
|
-
foundryUrl,
|
|
426
|
-
applicationUrl,
|
|
427
|
-
clientId
|
|
456
|
+
clientId,
|
|
457
|
+
ontology
|
|
428
458
|
}) {
|
|
429
|
-
|
|
430
|
-
|
|
459
|
+
const applicationUrlOrDefault = applicationUrl ?? "<Fill in the domain at which you deploy your application>";
|
|
460
|
+
return `# This env file is intended for deploying your application to production.
|
|
461
|
+
# To set up development on your local computer, see .env.development.
|
|
462
|
+
# To set up development in Foundry's Code Workspaces, see .env.code-workspaces.
|
|
463
|
+
# Note that .env.code-workspaces is only present for projects that were set up
|
|
464
|
+
# using the "Bootstrap in Foundry" option in Developer Console.
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
# This URL is the URL your users will be redirected back to after signing in.
|
|
468
|
+
# This URL must exactly match one of the URLs listed in the "OAuth & scopes"
|
|
469
|
+
# page of Developer Console.
|
|
470
|
+
#
|
|
471
|
+
# If you change where your application is hosted, you will need to change this
|
|
472
|
+
# URL here and in Developer Console.
|
|
473
|
+
|
|
474
|
+
${applicationUrl == null ? "# " : ""}${envPrefix}FOUNDRY_REDIRECT_URL=${applicationUrlOrDefault}/auth/callback
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
# This URL is the Foundry host that your OSDK will use. It typically does not
|
|
478
|
+
# need to be changed.
|
|
479
|
+
|
|
480
|
+
${envPrefix}FOUNDRY_API_URL=${foundryUrl}
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
# This client ID must match the client ID given on the "OAuth & scopes" page of
|
|
484
|
+
# Developer Console. It typically does not need to be changed.
|
|
485
|
+
|
|
431
486
|
${envPrefix}FOUNDRY_CLIENT_ID=${clientId}
|
|
487
|
+
|
|
488
|
+
# This Ontology RID must match the Ontology RID your Developer Console is associated with.
|
|
489
|
+
# You can check the Ontology on the "Data Resources" page of Developer Console.
|
|
490
|
+
# It typically does not need to be changed.
|
|
491
|
+
|
|
492
|
+
${envPrefix}FOUNDRY_ONTOLOGY_RID=${ontology}
|
|
432
493
|
`;
|
|
433
494
|
}
|
|
434
495
|
|
|
@@ -473,6 +534,7 @@ async function run({
|
|
|
473
534
|
foundryUrl,
|
|
474
535
|
applicationUrl,
|
|
475
536
|
application,
|
|
537
|
+
ontology,
|
|
476
538
|
clientId,
|
|
477
539
|
osdkPackage,
|
|
478
540
|
osdkRegistryUrl,
|
|
@@ -519,7 +581,7 @@ async function run({
|
|
|
519
581
|
cwd: fileURLToPath(import.meta.url)
|
|
520
582
|
});
|
|
521
583
|
ourPackageJsonPath ? JSON.parse(fs2.readFileSync(ourPackageJsonPath, "utf-8")).version : undefined;
|
|
522
|
-
const clientVersion = "2.1.
|
|
584
|
+
const clientVersion = "2.1.3";
|
|
523
585
|
const templateContext = {
|
|
524
586
|
project,
|
|
525
587
|
foundryUrl,
|
|
@@ -558,14 +620,16 @@ async function run({
|
|
|
558
620
|
envPrefix: template.envPrefix,
|
|
559
621
|
foundryUrl,
|
|
560
622
|
clientId,
|
|
561
|
-
corsProxy
|
|
623
|
+
corsProxy,
|
|
624
|
+
ontology
|
|
562
625
|
});
|
|
563
626
|
fs2.writeFileSync(path2.join(root, ".env.development"), envDevelopment);
|
|
564
627
|
const envProduction = generateEnvProduction({
|
|
565
628
|
envPrefix: template.envPrefix,
|
|
566
629
|
foundryUrl,
|
|
567
630
|
applicationUrl,
|
|
568
|
-
clientId
|
|
631
|
+
clientId,
|
|
632
|
+
ontology
|
|
569
633
|
});
|
|
570
634
|
fs2.writeFileSync(path2.join(root, ".env.production"), envProduction);
|
|
571
635
|
const foundryConfigJson = generateFoundryConfigJson({
|
|
@@ -593,7 +657,7 @@ async function run({
|
|
|
593
657
|
|
|
594
658
|
// src/cli.ts
|
|
595
659
|
async function cli(args = process.argv) {
|
|
596
|
-
const base = yargs(hideBin(args)).version("2.1.
|
|
660
|
+
const base = yargs(hideBin(args)).version("2.1.3").wrap(Math.min(150, yargs().terminalWidth())).strict().help().command("$0 [project] [--<option>]", "Create a new OSDK application based on framework templates. Information may be provided through options to skip interactive prompts.", (yargs2) => yargs2.positional("project", {
|
|
597
661
|
type: "string",
|
|
598
662
|
describe: "Project name to create"
|
|
599
663
|
}).option("overwrite", {
|
|
@@ -621,6 +685,9 @@ async function cli(args = process.argv) {
|
|
|
621
685
|
}).option("application", {
|
|
622
686
|
type: "string",
|
|
623
687
|
describe: "Application resource identifier (rid)"
|
|
688
|
+
}).option("ontology", {
|
|
689
|
+
type: "string",
|
|
690
|
+
describe: "Ontology resource identifier (rid)"
|
|
624
691
|
}).option("clientId", {
|
|
625
692
|
type: "string",
|
|
626
693
|
describe: "OAuth client ID for application"
|
|
@@ -652,6 +719,7 @@ async function cli(args = process.argv) {
|
|
|
652
719
|
const foundryUrl = await promptFoundryUrl(parsed);
|
|
653
720
|
const applicationUrl = await promptApplicationUrl(parsed);
|
|
654
721
|
const application = await promptApplicationRid(parsed);
|
|
722
|
+
const ontology = await promptOntologyRid(parsed);
|
|
655
723
|
const clientId = await promptClientId(parsed);
|
|
656
724
|
const osdkPackage = await promptOsdkPackage(parsed);
|
|
657
725
|
const osdkRegistryUrl = await promptOsdkRegistryUrl(parsed);
|
|
@@ -669,7 +737,8 @@ async function cli(args = process.argv) {
|
|
|
669
737
|
osdkPackage,
|
|
670
738
|
osdkRegistryUrl,
|
|
671
739
|
corsProxy,
|
|
672
|
-
scopes
|
|
740
|
+
scopes,
|
|
741
|
+
ontology
|
|
673
742
|
});
|
|
674
743
|
}
|
|
675
744
|
|