From 83ae443d88be3fd1469099953b56ac3e499b81f0 Mon Sep 17 00:00:00 2001 From: Nikolai Dorofeev Date: Tue, 5 Mar 2024 10:21:50 +0300 Subject: [PATCH] D frontend (#8) * Update environment and metadata * Delete template files * Update package.json scripts * Update build and prepare scripts * Add TonConnect component to Home page * Add wallet functionality to useTonConnect * Move ton connections to Pinia store * Add @esbuild-plugins/node-globals-polyfill dependency * Refactor TonConnectStore to use reactive properties * Header draft * Fix theme switch and ton connect UI * Syncronyze tonConnect theme with website theme * Update colors in App.vue * Layout draft * Remove unused DBtn import in DFooter.vue * lintfix * Refactor TonConnectStore and DSidebar components * Polyfill buffer in build * Master contract store * Make blogs NFT items * Fix fees in test fixtures and contracts * Refactor test setup in DSocialNetworkMaster and DSocialNetworkBlog specs * Fix create post fee validation and restrict post creation to owner only * Add transfer tests * Group tests * Rename contracts hooks and handle royalty params on transfer * Optimize hooks * Move contracts to packages * Refactor masterContractStore to use dynamic master contract addresses * Refactor DPost * Create markdown converters * Remove unused import and update link in DFooter.vue * Create text for the main page * Generate user avatar by wallet * Update UserAvatar.vue to use thumbs collection * Init sidebar navigation * Create blog form * useOpenedContract * Replace deprecated ton packages * Workaround for @ton/ton incompatibility with Vue https://github.com/ton-core/ton/issues/26 * Fix @ton/core patch https://github.com/ton-core/ton/issues/26 * Fix sidebar toggle in Layout.vue and DSidebar.vue * Error: Unsupported item type: tvm.stackEntrySlice * My blogs draft * Add redirect rule to netlify.toml --- .github/workflows/test.yaml | 5 +- apps/d.d0rich.me/.env.example | 1 + apps/d.d0rich.me/env.d.ts | 8 + apps/d.d0rich.me/index.html | 21 +- apps/d.d0rich.me/netlify.toml | 5 + apps/d.d0rich.me/package.json | 23 +- apps/d.d0rich.me/postcss.config.js | 6 + .../public/tonconnect-manifest.json | 5 + .../public/tonconnect-testnet-manifest.json | 5 + apps/d.d0rich.me/src/App.vue | 93 +- apps/d.d0rich.me/src/assets/base.css | 74 - apps/d.d0rich.me/src/assets/logo.svg | 1 - apps/d.d0rich.me/src/assets/main.css | 35 - apps/d.d0rich.me/src/assets/tailwind.css | 3 + .../d.d0rich.me/src/components/HelloWorld.vue | 42 - .../d.d0rich.me/src/components/TheWelcome.vue | 121 - .../src/components/WelcomeItem.vue | 87 - .../components/__tests__/HelloWorld.spec.ts | 11 - .../src/components/icons/IconCommunity.vue | 12 - .../components/icons/IconDocumentation.vue | 12 - .../src/components/icons/IconEcosystem.vue | 12 - .../src/components/icons/IconSupport.vue | 12 - .../src/components/icons/IconTooling.vue | 19 - .../src/entities/blog/model/Blog.ts | 3 + .../src/entities/blog/model/DBlog.ts | 6 - .../src/entities/blog/ui/BlogAvatar.vue | 23 + .../src/entities/blog/ui/BlogPreviewCard.vue | 61 + .../src/entities/master/model/DMaster.ts | 6 - .../src/entities/post/model/DPost.ts | 61 - .../src/entities/post/model/PostOffChain.ts | 8 + .../src/entities/post/model/PostOnChain.ts | 3 + .../src/entities/post/model/index.ts | 2 + .../post/utils/convertPostToOnChain.ts | 38 + .../entities/post/utils/getPostFromOnChain.ts | 13 + .../src/entities/post/utils/symbols.ts | 6 + .../src/entities/user/ui/UserAvatar.vue | 23 + .../master/stores/masterContractStore.ts | 39 + .../src/features/theme/stores/themeStore.ts | 59 + .../src/features/theme/ui/ThemeSwitch.vue | 36 + .../composables/useContractProvider.ts | 15 + .../composables/useOpenedContract.ts | 12 + .../tonconnect/stores/tonConnectStore.ts | 132 + .../src/features/tonconnect/ui/TonConnect.vue | 38 + apps/d.d0rich.me/src/layout/Layout.vue | 30 + .../src/layout/components/DFooter.vue | 33 + .../src/layout/components/DHeader.vue | 50 + .../src/layout/components/DSidebar.vue | 40 + apps/d.d0rich.me/src/main.ts | 3 +- apps/d.d0rich.me/src/pages/CreateBlog.vue | 149 + apps/d.d0rich.me/src/pages/Home.vue | 68 + apps/d.d0rich.me/src/pages/MyBlogs.vue | 92 + apps/d.d0rich.me/src/router/index.ts | 16 +- .../src/shared/composables/useAppConfig.ts | 9 + .../src/shared/unified/md-to-html.ts | 9 + .../src/shared/unified/md-to-plain-text.ts | 4 + .../src/shared/utils/dateformat.ts | 27 + apps/d.d0rich.me/src/stores/counter.ts | 12 - apps/d.d0rich.me/src/views/AboutView.vue | 15 - apps/d.d0rich.me/src/views/HomeView.vue | 9 - apps/d.d0rich.me/src/widgets/SidebarMenu.vue | 63 + apps/d.d0rich.me/tailwind.config.js | 23 + apps/d.d0rich.me/vite.config.ts | 9 +- contracts/build-scripts/new-imports.ts | 22 - .../contracts/d_social_network_master.tact | 65 - contracts/tests/DSocialNetworkBlog.spec.ts | 149 - contracts/tests/DSocialNetworkMaster.spec.ts | 69 - contracts/tests/DSocialNetworkPost.spec.ts | 180 - ignore-builds-master.mjs | 4 +- package-lock.json | 3180 +++++++++++++++-- package.json | 16 +- packages/esprit-design/package.json | 3 +- .../src/components/content/DQuote.vue | 2 +- .../esprit-design/src/composables/router.ts | 27 +- .../ton-contracts}/.gitignore | 0 .../ton-contracts}/.prettierignore | 0 .../ton-contracts}/README.md | 0 .../build-scripts/new-imports.ts | 21 + .../build-scripts/patch-wrappers-imports.mjs | 0 .../contracts/d_social_network_blog.tact | 94 +- .../contracts/d_social_network_master.tact | 77 + .../contracts/d_social_network_post.tact | 0 .../contracts/imports/stdlib.fc | 0 .../contracts/lib/messages_nft.tact | 0 .../contracts/lib/native_dict.tact | 0 .../contracts/lib/tep64_serialization.tact | 0 .../contracts/lib/trait_accounting.tact | 0 .../contracts/lib/trait_nft_collection.tact | 8 +- ...rait_nft_collection_royalty_extention.tact | 0 .../contracts/lib/trait_nft_item.tact | 22 +- .../contracts/lib/trait_personal_fees.tact | 0 .../lib/trait_storage_controller.tact | 4 + .../ton-contracts}/contracts/messages_d.tact | 10 - .../ton-contracts}/jest.config.ts | 0 .../ton-contracts}/package.json | 16 +- .../scripts/deployDSocialNetworkMaster.ts | 4 +- .../scripts/deployTestSocialNetwork.ts | 16 +- .../tests/DSocialNetworkBlog.spec.ts | 379 ++ .../tests/DSocialNetworkMaster.spec.ts | 123 + .../tests/DSocialNetworkPost.spec.ts | 279 ++ .../ton-contracts}/tsconfig.json | 0 .../utils/onchain-metadata-parser/dict.ts | 2 +- .../onchain-metadata-parser/nftContent.ts | 2 +- .../utils/onchain-metadata-parser/parse.ts | 4 +- .../utils/stub-post-serialization.ts | 2 +- .../ton-contracts}/utils/test-fixtures.ts | 24 +- .../wrappers/DSocialNetworkBlog.compile.ts | 2 +- .../wrappers/DSocialNetworkBlog.ts | 0 .../wrappers/DSocialNetworkMaster.compile.ts | 2 +- .../wrappers/DSocialNetworkMaster.ts | 0 .../wrappers/DSocialNetworkPost.compile.ts | 2 +- .../wrappers/DSocialNetworkPost.ts | 0 patches/@ton+ton+13.9.0.patch | 160 + turbo.json | 17 +- 113 files changed, 5367 insertions(+), 1478 deletions(-) create mode 100644 apps/d.d0rich.me/.env.example create mode 100644 apps/d.d0rich.me/postcss.config.js create mode 100644 apps/d.d0rich.me/public/tonconnect-manifest.json create mode 100644 apps/d.d0rich.me/public/tonconnect-testnet-manifest.json delete mode 100644 apps/d.d0rich.me/src/assets/base.css delete mode 100644 apps/d.d0rich.me/src/assets/logo.svg delete mode 100644 apps/d.d0rich.me/src/assets/main.css create mode 100644 apps/d.d0rich.me/src/assets/tailwind.css delete mode 100644 apps/d.d0rich.me/src/components/HelloWorld.vue delete mode 100644 apps/d.d0rich.me/src/components/TheWelcome.vue delete mode 100644 apps/d.d0rich.me/src/components/WelcomeItem.vue delete mode 100644 apps/d.d0rich.me/src/components/__tests__/HelloWorld.spec.ts delete mode 100644 apps/d.d0rich.me/src/components/icons/IconCommunity.vue delete mode 100644 apps/d.d0rich.me/src/components/icons/IconDocumentation.vue delete mode 100644 apps/d.d0rich.me/src/components/icons/IconEcosystem.vue delete mode 100644 apps/d.d0rich.me/src/components/icons/IconSupport.vue delete mode 100644 apps/d.d0rich.me/src/components/icons/IconTooling.vue create mode 100644 apps/d.d0rich.me/src/entities/blog/model/Blog.ts delete mode 100644 apps/d.d0rich.me/src/entities/blog/model/DBlog.ts create mode 100644 apps/d.d0rich.me/src/entities/blog/ui/BlogAvatar.vue create mode 100644 apps/d.d0rich.me/src/entities/blog/ui/BlogPreviewCard.vue delete mode 100644 apps/d.d0rich.me/src/entities/master/model/DMaster.ts delete mode 100644 apps/d.d0rich.me/src/entities/post/model/DPost.ts create mode 100644 apps/d.d0rich.me/src/entities/post/model/PostOffChain.ts create mode 100644 apps/d.d0rich.me/src/entities/post/model/PostOnChain.ts create mode 100644 apps/d.d0rich.me/src/entities/post/model/index.ts create mode 100644 apps/d.d0rich.me/src/entities/post/utils/convertPostToOnChain.ts create mode 100644 apps/d.d0rich.me/src/entities/post/utils/getPostFromOnChain.ts create mode 100644 apps/d.d0rich.me/src/entities/post/utils/symbols.ts create mode 100644 apps/d.d0rich.me/src/entities/user/ui/UserAvatar.vue create mode 100644 apps/d.d0rich.me/src/features/master/stores/masterContractStore.ts create mode 100644 apps/d.d0rich.me/src/features/theme/stores/themeStore.ts create mode 100644 apps/d.d0rich.me/src/features/theme/ui/ThemeSwitch.vue create mode 100644 apps/d.d0rich.me/src/features/tonconnect/composables/useContractProvider.ts create mode 100644 apps/d.d0rich.me/src/features/tonconnect/composables/useOpenedContract.ts create mode 100644 apps/d.d0rich.me/src/features/tonconnect/stores/tonConnectStore.ts create mode 100644 apps/d.d0rich.me/src/features/tonconnect/ui/TonConnect.vue create mode 100644 apps/d.d0rich.me/src/layout/Layout.vue create mode 100644 apps/d.d0rich.me/src/layout/components/DFooter.vue create mode 100644 apps/d.d0rich.me/src/layout/components/DHeader.vue create mode 100644 apps/d.d0rich.me/src/layout/components/DSidebar.vue create mode 100644 apps/d.d0rich.me/src/pages/CreateBlog.vue create mode 100644 apps/d.d0rich.me/src/pages/Home.vue create mode 100644 apps/d.d0rich.me/src/pages/MyBlogs.vue create mode 100644 apps/d.d0rich.me/src/shared/composables/useAppConfig.ts create mode 100644 apps/d.d0rich.me/src/shared/unified/md-to-html.ts create mode 100644 apps/d.d0rich.me/src/shared/unified/md-to-plain-text.ts create mode 100644 apps/d.d0rich.me/src/shared/utils/dateformat.ts delete mode 100644 apps/d.d0rich.me/src/stores/counter.ts delete mode 100644 apps/d.d0rich.me/src/views/AboutView.vue delete mode 100644 apps/d.d0rich.me/src/views/HomeView.vue create mode 100644 apps/d.d0rich.me/src/widgets/SidebarMenu.vue create mode 100644 apps/d.d0rich.me/tailwind.config.js delete mode 100644 contracts/build-scripts/new-imports.ts delete mode 100644 contracts/contracts/d_social_network_master.tact delete mode 100644 contracts/tests/DSocialNetworkBlog.spec.ts delete mode 100644 contracts/tests/DSocialNetworkMaster.spec.ts delete mode 100644 contracts/tests/DSocialNetworkPost.spec.ts rename {contracts => packages/ton-contracts}/.gitignore (100%) rename {contracts => packages/ton-contracts}/.prettierignore (100%) rename {contracts => packages/ton-contracts}/README.md (100%) create mode 100644 packages/ton-contracts/build-scripts/new-imports.ts rename {contracts => packages/ton-contracts}/build-scripts/patch-wrappers-imports.mjs (100%) rename {contracts => packages/ton-contracts}/contracts/d_social_network_blog.tact (52%) create mode 100644 packages/ton-contracts/contracts/d_social_network_master.tact rename {contracts => packages/ton-contracts}/contracts/d_social_network_post.tact (100%) rename {contracts => packages/ton-contracts}/contracts/imports/stdlib.fc (100%) rename {contracts => packages/ton-contracts}/contracts/lib/messages_nft.tact (100%) rename {contracts => packages/ton-contracts}/contracts/lib/native_dict.tact (100%) rename {contracts => packages/ton-contracts}/contracts/lib/tep64_serialization.tact (100%) rename {contracts => packages/ton-contracts}/contracts/lib/trait_accounting.tact (100%) rename {contracts => packages/ton-contracts}/contracts/lib/trait_nft_collection.tact (95%) rename {contracts => packages/ton-contracts}/contracts/lib/trait_nft_collection_royalty_extention.tact (100%) rename {contracts => packages/ton-contracts}/contracts/lib/trait_nft_item.tact (85%) rename {contracts => packages/ton-contracts}/contracts/lib/trait_personal_fees.tact (100%) rename {contracts => packages/ton-contracts}/contracts/lib/trait_storage_controller.tact (94%) rename {contracts => packages/ton-contracts}/contracts/messages_d.tact (71%) rename {contracts => packages/ton-contracts}/jest.config.ts (100%) rename {contracts => packages/ton-contracts}/package.json (57%) rename {contracts => packages/ton-contracts}/scripts/deployDSocialNetworkMaster.ts (83%) rename {contracts => packages/ton-contracts}/scripts/deployTestSocialNetwork.ts (86%) create mode 100644 packages/ton-contracts/tests/DSocialNetworkBlog.spec.ts create mode 100644 packages/ton-contracts/tests/DSocialNetworkMaster.spec.ts create mode 100644 packages/ton-contracts/tests/DSocialNetworkPost.spec.ts rename {contracts => packages/ton-contracts}/tsconfig.json (100%) rename {contracts => packages/ton-contracts}/utils/onchain-metadata-parser/dict.ts (93%) rename {contracts => packages/ton-contracts}/utils/onchain-metadata-parser/nftContent.ts (99%) rename {contracts => packages/ton-contracts}/utils/onchain-metadata-parser/parse.ts (91%) rename {contracts => packages/ton-contracts}/utils/stub-post-serialization.ts (97%) rename {contracts => packages/ton-contracts}/utils/test-fixtures.ts (51%) rename {contracts => packages/ton-contracts}/wrappers/DSocialNetworkBlog.compile.ts (65%) rename {contracts => packages/ton-contracts}/wrappers/DSocialNetworkBlog.ts (100%) rename {contracts => packages/ton-contracts}/wrappers/DSocialNetworkMaster.compile.ts (65%) rename {contracts => packages/ton-contracts}/wrappers/DSocialNetworkMaster.ts (100%) rename {contracts => packages/ton-contracts}/wrappers/DSocialNetworkPost.compile.ts (65%) rename {contracts => packages/ton-contracts}/wrappers/DSocialNetworkPost.ts (100%) create mode 100644 patches/@ton+ton+13.9.0.patch diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7f9bd8af..5a64deca 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -22,8 +22,11 @@ jobs: - name: Installing packages run: npm ci + - name: Prepare + run: npm run prepare:all + - name: Build - run: npm run build + run: npm run build:all - name: Lint run: npm run lint diff --git a/apps/d.d0rich.me/.env.example b/apps/d.d0rich.me/.env.example new file mode 100644 index 00000000..45e3d24c --- /dev/null +++ b/apps/d.d0rich.me/.env.example @@ -0,0 +1 @@ +VITE_TON_NETWORK=TESTNET diff --git a/apps/d.d0rich.me/env.d.ts b/apps/d.d0rich.me/env.d.ts index 11f02fe2..0e2e911b 100644 --- a/apps/d.d0rich.me/env.d.ts +++ b/apps/d.d0rich.me/env.d.ts @@ -1 +1,9 @@ /// + +interface ImportMetaEnv { + readonly VITE_TON_NETWORK: 'TESTNET' | 'MAINNET' +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/apps/d.d0rich.me/index.html b/apps/d.d0rich.me/index.html index 62a22ed0..2ccf1642 100644 --- a/apps/d.d0rich.me/index.html +++ b/apps/d.d0rich.me/index.html @@ -2,10 +2,27 @@ + + + + + + + - - Vite App + + + + + + D - Blogs on TON Blockchain
diff --git a/apps/d.d0rich.me/netlify.toml b/apps/d.d0rich.me/netlify.toml index dc389995..9da245b3 100644 --- a/apps/d.d0rich.me/netlify.toml +++ b/apps/d.d0rich.me/netlify.toml @@ -1,2 +1,7 @@ [build] ignore = "node apps/d.d0rich.me/ignore-build.mjs" + +[[redirects]] + from = "/*" + to = "/index.html" + status = 200 diff --git a/apps/d.d0rich.me/package.json b/apps/d.d0rich.me/package.json index b8b898cc..fc99240b 100644 --- a/apps/d.d0rich.me/package.json +++ b/apps/d.d0rich.me/package.json @@ -11,22 +11,43 @@ "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false" }, "dependencies": { - "@d0rich/contracts": "*", + "@d0rich/esprit-design": "*", + "@d0rich/ton-contracts": "*", + "@dicebear/collection": "^7.0.1", + "@dicebear/core": "^7.0.1", + "@orbs-network/ton-access": "^2.3.3", + "@ton/core": "^0.53.0", + "@ton/ton": "^13.9.0", + "@tonconnect/ui": "^2.0.0-beta.6", + "@vueuse/core": "^10.6.1", + "consola": "^3.2.3", + "dateformat": "^5.0.3", "pinia": "^2.1.7", + "rehype-stringify": "^10.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "strip-markdown": "^6.0.0", + "unified": "^11.0.4", "vue": "^3.3.4", "vue-router": "^4.2.5" }, "devDependencies": { + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/typography": "^0.5.10", "@tsconfig/node18": "^18.2.2", "@types/jsdom": "^21.1.3", "@types/node": "^18.18.5", "@vitejs/plugin-vue": "^4.4.0", "@vue/test-utils": "^2.4.1", "@vue/tsconfig": "^0.4.0", + "autoprefixer": "^10.4.16", "jsdom": "^22.1.0", "npm-run-all2": "^6.1.1", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.5", "typescript": "~5.2.0", "vite": "^4.4.11", + "vite-plugin-node-polyfills": "^0.16.0", "vitest": "^0.34.6", "vue-tsc": "^1.8.19" } diff --git a/apps/d.d0rich.me/postcss.config.js b/apps/d.d0rich.me/postcss.config.js new file mode 100644 index 00000000..85f717cc --- /dev/null +++ b/apps/d.d0rich.me/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +} diff --git a/apps/d.d0rich.me/public/tonconnect-manifest.json b/apps/d.d0rich.me/public/tonconnect-manifest.json new file mode 100644 index 00000000..a1606ed0 --- /dev/null +++ b/apps/d.d0rich.me/public/tonconnect-manifest.json @@ -0,0 +1,5 @@ +{ + "url": "https://d.d0rich.me", + "name": "D", + "iconUrl": "https://d.d0rich.me/android-chrome-192x192.png" +} diff --git a/apps/d.d0rich.me/public/tonconnect-testnet-manifest.json b/apps/d.d0rich.me/public/tonconnect-testnet-manifest.json new file mode 100644 index 00000000..1cd33e4f --- /dev/null +++ b/apps/d.d0rich.me/public/tonconnect-testnet-manifest.json @@ -0,0 +1,5 @@ +{ + "url": "https://testnet.d.d0rich.me", + "name": "D", + "iconUrl": "https://testnet.d.d0rich.me/android-chrome-192x192.png" +} diff --git a/apps/d.d0rich.me/src/App.vue b/apps/d.d0rich.me/src/App.vue index ffc5b607..6f6ad881 100644 --- a/apps/d.d0rich.me/src/App.vue +++ b/apps/d.d0rich.me/src/App.vue @@ -1,91 +1,18 @@ - diff --git a/apps/d.d0rich.me/src/assets/base.css b/apps/d.d0rich.me/src/assets/base.css deleted file mode 100644 index fc15cc49..00000000 --- a/apps/d.d0rich.me/src/assets/base.css +++ /dev/null @@ -1,74 +0,0 @@ -/* color palette from */ -:root { - --vt-c-white: #ffffff; - --vt-c-white-soft: #f8f8f8; - --vt-c-white-mute: #f2f2f2; - - --vt-c-black: #181818; - --vt-c-black-soft: #222222; - --vt-c-black-mute: #282828; - - --vt-c-indigo: #2c3e50; - - --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); - --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); - --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); - --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); - - --vt-c-text-light-1: var(--vt-c-indigo); - --vt-c-text-light-2: rgba(60, 60, 60, 0.66); - --vt-c-text-dark-1: var(--vt-c-white); - --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); -} - -/* semantic color variables for this project */ -:root { - --color-background: var(--vt-c-white); - --color-background-soft: var(--vt-c-white-soft); - --color-background-mute: var(--vt-c-white-mute); - - --color-border: var(--vt-c-divider-light-2); - --color-border-hover: var(--vt-c-divider-light-1); - - --color-heading: var(--vt-c-text-light-1); - --color-text: var(--vt-c-text-light-1); - - --section-gap: 160px; -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--vt-c-black); - --color-background-soft: var(--vt-c-black-soft); - --color-background-mute: var(--vt-c-black-mute); - - --color-border: var(--vt-c-divider-dark-2); - --color-border-hover: var(--vt-c-divider-dark-1); - - --color-heading: var(--vt-c-text-dark-1); - --color-text: var(--vt-c-text-dark-2); - } -} - -*, -*::before, -*::after { - box-sizing: border-box; - margin: 0; - font-weight: normal; -} - -body { - min-height: 100vh; - color: var(--color-text); - background: var(--color-background); - transition: color 0.5s, background-color 0.5s; - line-height: 1.6; - font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, - Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - font-size: 15px; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} diff --git a/apps/d.d0rich.me/src/assets/logo.svg b/apps/d.d0rich.me/src/assets/logo.svg deleted file mode 100644 index 75656603..00000000 --- a/apps/d.d0rich.me/src/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/d.d0rich.me/src/assets/main.css b/apps/d.d0rich.me/src/assets/main.css deleted file mode 100644 index e8667cd4..00000000 --- a/apps/d.d0rich.me/src/assets/main.css +++ /dev/null @@ -1,35 +0,0 @@ -@import './base.css'; - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - - font-weight: normal; -} - -a, -.green { - text-decoration: none; - color: hsla(160, 100%, 37%, 1); - transition: 0.4s; -} - -@media (hover: hover) { - a:hover { - background-color: hsla(160, 100%, 37%, 0.2); - } -} - -@media (min-width: 1024px) { - body { - display: flex; - place-items: center; - } - - #app { - display: grid; - grid-template-columns: 1fr 1fr; - padding: 0 2rem; - } -} diff --git a/apps/d.d0rich.me/src/assets/tailwind.css b/apps/d.d0rich.me/src/assets/tailwind.css new file mode 100644 index 00000000..b5c61c95 --- /dev/null +++ b/apps/d.d0rich.me/src/assets/tailwind.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/apps/d.d0rich.me/src/components/HelloWorld.vue b/apps/d.d0rich.me/src/components/HelloWorld.vue deleted file mode 100644 index a1dfe161..00000000 --- a/apps/d.d0rich.me/src/components/HelloWorld.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - - - diff --git a/apps/d.d0rich.me/src/components/TheWelcome.vue b/apps/d.d0rich.me/src/components/TheWelcome.vue deleted file mode 100644 index 235d35b8..00000000 --- a/apps/d.d0rich.me/src/components/TheWelcome.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - diff --git a/apps/d.d0rich.me/src/components/WelcomeItem.vue b/apps/d.d0rich.me/src/components/WelcomeItem.vue deleted file mode 100644 index 6d7086ae..00000000 --- a/apps/d.d0rich.me/src/components/WelcomeItem.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - diff --git a/apps/d.d0rich.me/src/components/__tests__/HelloWorld.spec.ts b/apps/d.d0rich.me/src/components/__tests__/HelloWorld.spec.ts deleted file mode 100644 index 25332020..00000000 --- a/apps/d.d0rich.me/src/components/__tests__/HelloWorld.spec.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { describe, it, expect } from 'vitest' - -import { mount } from '@vue/test-utils' -import HelloWorld from '../HelloWorld.vue' - -describe('HelloWorld', () => { - it('renders properly', () => { - const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } }) - expect(wrapper.text()).toContain('Hello Vitest') - }) -}) diff --git a/apps/d.d0rich.me/src/components/icons/IconCommunity.vue b/apps/d.d0rich.me/src/components/icons/IconCommunity.vue deleted file mode 100644 index ea8ddefb..00000000 --- a/apps/d.d0rich.me/src/components/icons/IconCommunity.vue +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/apps/d.d0rich.me/src/components/icons/IconDocumentation.vue b/apps/d.d0rich.me/src/components/icons/IconDocumentation.vue deleted file mode 100644 index 63a85340..00000000 --- a/apps/d.d0rich.me/src/components/icons/IconDocumentation.vue +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/apps/d.d0rich.me/src/components/icons/IconEcosystem.vue b/apps/d.d0rich.me/src/components/icons/IconEcosystem.vue deleted file mode 100644 index 385a2029..00000000 --- a/apps/d.d0rich.me/src/components/icons/IconEcosystem.vue +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/apps/d.d0rich.me/src/components/icons/IconSupport.vue b/apps/d.d0rich.me/src/components/icons/IconSupport.vue deleted file mode 100644 index 7db961e4..00000000 --- a/apps/d.d0rich.me/src/components/icons/IconSupport.vue +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/apps/d.d0rich.me/src/components/icons/IconTooling.vue b/apps/d.d0rich.me/src/components/icons/IconTooling.vue deleted file mode 100644 index 660598d7..00000000 --- a/apps/d.d0rich.me/src/components/icons/IconTooling.vue +++ /dev/null @@ -1,19 +0,0 @@ - - diff --git a/apps/d.d0rich.me/src/entities/blog/model/Blog.ts b/apps/d.d0rich.me/src/entities/blog/model/Blog.ts new file mode 100644 index 00000000..3469953a --- /dev/null +++ b/apps/d.d0rich.me/src/entities/blog/model/Blog.ts @@ -0,0 +1,3 @@ +import type { NftCollectionMetadata } from '@d0rich/ton-contracts/wrappers/DSocialNetworkBlog' + +export interface Blog extends Omit {} diff --git a/apps/d.d0rich.me/src/entities/blog/model/DBlog.ts b/apps/d.d0rich.me/src/entities/blog/model/DBlog.ts deleted file mode 100644 index b7d3438f..00000000 --- a/apps/d.d0rich.me/src/entities/blog/model/DBlog.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { DSocialNetworkBlog } from '@d0rich/contracts/wrappers/DSocialNetworkBlog' - -export class DBlog { - // eslint-disable-next-line no-useless-constructor - constructor(public readonly contract: DSocialNetworkBlog) {} -} diff --git a/apps/d.d0rich.me/src/entities/blog/ui/BlogAvatar.vue b/apps/d.d0rich.me/src/entities/blog/ui/BlogAvatar.vue new file mode 100644 index 00000000..64782725 --- /dev/null +++ b/apps/d.d0rich.me/src/entities/blog/ui/BlogAvatar.vue @@ -0,0 +1,23 @@ + + + diff --git a/apps/d.d0rich.me/src/entities/blog/ui/BlogPreviewCard.vue b/apps/d.d0rich.me/src/entities/blog/ui/BlogPreviewCard.vue new file mode 100644 index 00000000..e1c1ace8 --- /dev/null +++ b/apps/d.d0rich.me/src/entities/blog/ui/BlogPreviewCard.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/apps/d.d0rich.me/src/entities/master/model/DMaster.ts b/apps/d.d0rich.me/src/entities/master/model/DMaster.ts deleted file mode 100644 index 941324b3..00000000 --- a/apps/d.d0rich.me/src/entities/master/model/DMaster.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { DSocialNetworkMaster } from '@d0rich/contracts/wrappers/DSocialNetworkMaster' - -export class DMaster { - // eslint-disable-next-line no-useless-constructor - constructor(public readonly contract: DSocialNetworkMaster) {} -} diff --git a/apps/d.d0rich.me/src/entities/post/model/DPost.ts b/apps/d.d0rich.me/src/entities/post/model/DPost.ts deleted file mode 100644 index 9e31e27f..00000000 --- a/apps/d.d0rich.me/src/entities/post/model/DPost.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Address } from 'ton-core' -import { - DSocialNetworkPost, - type NftMetadata -} from '@d0rich/contracts/wrappers/DSocialNetworkPost' - -export type DPostModel = { - url: string - date: Date - author: Address - contentMd: string -} - -/** Start of text symbol */ -const stxChar = String.fromCharCode(2) -/** End of text symbol */ -const etxChar = String.fromCharCode(3) - -export class DPost { - model?: DPostModel - - // eslint-disable-next-line no-useless-constructor - constructor(public readonly contract: DSocialNetworkPost) {} - - static serializePostData(model: DPostModel): NftMetadata { - const name = `Post on D from ${model.date.toLocaleDateString( - 'de-DE' - )} by ${model.author.toRawString()}` - const stringBuilder: string[] = [] - stringBuilder.push(`Posted: ${model.date.toLocaleDateString('de-DE')}`) - stringBuilder.push(`Author: ${model.author.toString()}`) - stringBuilder.push(`See on D: ${model.url}`) - stringBuilder.push('') - // TODO: Convert markdown to plain text - stringBuilder.push(model.contentMd) - stringBuilder.push('', '', '') - stringBuilder.push('===== Technical information =====') - stringBuilder.push( - `${stxChar}${JSON.stringify({ - url: model.url, - date: model.date.toISOString(), - author: model.author.toRawString(), - contentMd: model.contentMd - })}${etxChar}` - ) - return { - $$type: 'NftMetadata', - image: 'https://d.d0rich.me/metadata/.jpg', - name, - description: stringBuilder.join('\n') - } - } - - static deserializePostData(metadata: NftMetadata): DPostModel { - const modelJSON = metadata.description.split(etxChar)[0].split(stxChar)[1] - const model: DPostModel = JSON.parse(modelJSON) - model.date = new Date(model.date) - model.author = Address.parseRaw(model.author as unknown as string) - return model - } -} diff --git a/apps/d.d0rich.me/src/entities/post/model/PostOffChain.ts b/apps/d.d0rich.me/src/entities/post/model/PostOffChain.ts new file mode 100644 index 00000000..8407143c --- /dev/null +++ b/apps/d.d0rich.me/src/entities/post/model/PostOffChain.ts @@ -0,0 +1,8 @@ +import type { Address } from '@ton/core' + +export type PostOffChain = { + url: string + date: Date + author: Address + contentMd: string +} diff --git a/apps/d.d0rich.me/src/entities/post/model/PostOnChain.ts b/apps/d.d0rich.me/src/entities/post/model/PostOnChain.ts new file mode 100644 index 00000000..726e3b04 --- /dev/null +++ b/apps/d.d0rich.me/src/entities/post/model/PostOnChain.ts @@ -0,0 +1,3 @@ +import type { NftMetadata } from '@d0rich/ton-contracts/wrappers/DSocialNetworkPost' + +export type PostOnChain = NftMetadata diff --git a/apps/d.d0rich.me/src/entities/post/model/index.ts b/apps/d.d0rich.me/src/entities/post/model/index.ts new file mode 100644 index 00000000..360ac540 --- /dev/null +++ b/apps/d.d0rich.me/src/entities/post/model/index.ts @@ -0,0 +1,2 @@ +export * from './PostOffChain' +export * from './PostOnChain' diff --git a/apps/d.d0rich.me/src/entities/post/utils/convertPostToOnChain.ts b/apps/d.d0rich.me/src/entities/post/utils/convertPostToOnChain.ts new file mode 100644 index 00000000..22a44e86 --- /dev/null +++ b/apps/d.d0rich.me/src/entities/post/utils/convertPostToOnChain.ts @@ -0,0 +1,38 @@ +import type { PostOnChain, PostOffChain } from '../model' +import { useAppConfig } from '../../../shared/composables/useAppConfig' +import { mdToPlainTextProcessor } from '../../../shared/unified/md-to-plain-text' +import { etxChar, stxChar } from './symbols' + +const config = useAppConfig() + +export function convertPostToOnChain(model: PostOffChain): PostOnChain { + const name = `Post on D from ${model.date.toLocaleDateString( + 'de-DE' + )} by ${model.author.toString()}` + const stringBuilder: string[] = [] + stringBuilder.push(`Posted: ${model.date.toLocaleDateString('de-DE')}`) + stringBuilder.push(`Author: ${model.author.toString()}`) + stringBuilder.push(`See on D: ${model.url}`) + stringBuilder.push('') + stringBuilder.push( + mdToPlainTextProcessor.processSync(model.contentMd).toString() + ) + stringBuilder.push('', '', '') + stringBuilder.push('===== Technical information =====') + stringBuilder.push( + `${stxChar}${JSON.stringify({ + url: model.url, + date: model.date.toISOString(), + author: model.author.toRawString(), + contentMd: model.contentMd + })}${etxChar}` + ) + return { + $$type: 'NftMetadata', + image: `https://${ + config.network === 'TESTNET' ? 'testnet.' : '' + }d.d0rich.me/metadata/covers/post.jpg`, + name, + description: stringBuilder.join('\n') + } +} diff --git a/apps/d.d0rich.me/src/entities/post/utils/getPostFromOnChain.ts b/apps/d.d0rich.me/src/entities/post/utils/getPostFromOnChain.ts new file mode 100644 index 00000000..983b7da9 --- /dev/null +++ b/apps/d.d0rich.me/src/entities/post/utils/getPostFromOnChain.ts @@ -0,0 +1,13 @@ +import { Address } from '@ton/core/dist/address/Address' +import type { PostOnChain, PostOffChain } from '../model' +import { etxChar, stxChar } from './symbols' + +export function getPostFromOnChain(metadata: PostOnChain): PostOffChain { + const modelJSON = metadata.description.split(etxChar)[0].split(stxChar)[1] + const model: Record = JSON.parse(modelJSON) + return { + ...model, + date: new Date(model.date), + author: Address.parseRaw(model.author) + } +} diff --git a/apps/d.d0rich.me/src/entities/post/utils/symbols.ts b/apps/d.d0rich.me/src/entities/post/utils/symbols.ts new file mode 100644 index 00000000..4ffab777 --- /dev/null +++ b/apps/d.d0rich.me/src/entities/post/utils/symbols.ts @@ -0,0 +1,6 @@ +/** Start of text symbol */ +const stxChar = String.fromCharCode(2) +/** End of text symbol */ +const etxChar = String.fromCharCode(3) + +export { stxChar, etxChar } diff --git a/apps/d.d0rich.me/src/entities/user/ui/UserAvatar.vue b/apps/d.d0rich.me/src/entities/user/ui/UserAvatar.vue new file mode 100644 index 00000000..a47b9301 --- /dev/null +++ b/apps/d.d0rich.me/src/entities/user/ui/UserAvatar.vue @@ -0,0 +1,23 @@ + + + diff --git a/apps/d.d0rich.me/src/features/master/stores/masterContractStore.ts b/apps/d.d0rich.me/src/features/master/stores/masterContractStore.ts new file mode 100644 index 00000000..47648d9b --- /dev/null +++ b/apps/d.d0rich.me/src/features/master/stores/masterContractStore.ts @@ -0,0 +1,39 @@ +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' +import { Address } from '@ton/core/dist/address/Address' +import { DSocialNetworkMaster } from '@d0rich/ton-contracts/wrappers/DSocialNetworkMaster' +import { useAppConfig } from '../../../shared/composables/useAppConfig' + +const mainnetMasterContracts = [ + 'EQDQdnigA1y4tf8FXuYJMR_qW_nOaOikW-cXQTlsGZFao50R' +] +const testnetMasterContracts = [ + 'EQDQdnigA1y4tf8FXuYJMR_qW_nOaOikW-cXQTlsGZFao50R' +] + +export const useMasterContractStore = defineStore('master-contract', () => { + const appConfig = useAppConfig() + const masterContractsReleases = ref( + appConfig.network === 'MAINNET' + ? mainnetMasterContracts + : testnetMasterContracts + ) + const allContracts = computed(() => + masterContractsReleases.value.map(masterContractFromAddress) + ) + const latestContract = computed(() => allContracts.value[0]) + const contractAddress = ref(latestContract.value.address.toString()) + + return { + latestContract, + allContracts, + contractAddress + } +}) + +function masterContractFromAddress(address: string | Address) { + if (typeof address === 'string') { + address = Address.parse(address) + } + return DSocialNetworkMaster.fromAddress(address) +} diff --git a/apps/d.d0rich.me/src/features/theme/stores/themeStore.ts b/apps/d.d0rich.me/src/features/theme/stores/themeStore.ts new file mode 100644 index 00000000..81a3d8ed --- /dev/null +++ b/apps/d.d0rich.me/src/features/theme/stores/themeStore.ts @@ -0,0 +1,59 @@ +import { defineStore } from 'pinia' +import { ref, watch, computed } from 'vue' + +export type ColorMode = 'light' | 'dark' | 'system' +export type ExplicitColorMode = 'light' | 'dark' + +export const useThemeStore = defineStore('theme', () => { + const theme = ref('system') + const systemTheme = ref(getSystemTheme()) + const explicitTheme = computed(() => + getExplicitTheme(theme.value) + ) + + if (window.matchMedia) { + window + .matchMedia('(prefers-color-scheme: dark)') + .addEventListener('change', (event) => { + systemTheme.value = event.matches ? 'dark' : 'light' + }) + } + + setThemeInHtml(theme.value) + + watch(theme, (newTheme) => { + setThemeInHtml(newTheme) + }) + + function getExplicitTheme(theme: ColorMode): ExplicitColorMode { + return theme === 'system' ? systemTheme.value : theme + } + + function getSystemTheme(): ExplicitColorMode { + if (!window.matchMedia) { + return 'light' + } + return window.matchMedia('(prefers-color-scheme: dark)').matches + ? 'dark' + : 'light' + } + + function setThemeInHtml(newTheme: ColorMode) { + const newThemeExplicit = getExplicitTheme(newTheme) + const classToRemove = newThemeExplicit === 'light' ? 'dark' : 'light' + const classToAdd = newThemeExplicit === 'light' ? 'light' : 'dark' + document.documentElement.classList.add(classToAdd) + document.documentElement.classList.remove(classToRemove) + } + + function setTheme(newTheme: ColorMode) { + theme.value = newTheme + } + + return { + theme, + explicitTheme, + systemTheme, + setTheme + } +}) diff --git a/apps/d.d0rich.me/src/features/theme/ui/ThemeSwitch.vue b/apps/d.d0rich.me/src/features/theme/ui/ThemeSwitch.vue new file mode 100644 index 00000000..43847c94 --- /dev/null +++ b/apps/d.d0rich.me/src/features/theme/ui/ThemeSwitch.vue @@ -0,0 +1,36 @@ + + + +../stores/themeStore diff --git a/apps/d.d0rich.me/src/features/tonconnect/composables/useContractProvider.ts b/apps/d.d0rich.me/src/features/tonconnect/composables/useContractProvider.ts new file mode 100644 index 00000000..39170de8 --- /dev/null +++ b/apps/d.d0rich.me/src/features/tonconnect/composables/useContractProvider.ts @@ -0,0 +1,15 @@ +import { computed, type ComputedRef } from 'vue' +import type { ContractProvider, Contract } from '@ton/core' +import { useTonConnectStore } from '../stores/tonConnectStore' + +export function useContractProvider( + contract: Contract +): ComputedRef { + const tonConnect = useTonConnectStore() + return computed(() => { + return ( + tonConnect.tonClient?.provider(contract.address, contract.init ?? null) ?? + null + ) + }) +} diff --git a/apps/d.d0rich.me/src/features/tonconnect/composables/useOpenedContract.ts b/apps/d.d0rich.me/src/features/tonconnect/composables/useOpenedContract.ts new file mode 100644 index 00000000..e005a8ce --- /dev/null +++ b/apps/d.d0rich.me/src/features/tonconnect/composables/useOpenedContract.ts @@ -0,0 +1,12 @@ +import { computed, type ComputedRef } from 'vue' +import type { OpenedContract, Contract } from '@ton/core' +import { useTonConnectStore } from '../stores/tonConnectStore' + +export function useOpenedContract( + contract: T +): ComputedRef | null> { + const tonConnect = useTonConnectStore() + return computed(() => { + return tonConnect.tonClient?.open(contract) ?? null + }) +} diff --git a/apps/d.d0rich.me/src/features/tonconnect/stores/tonConnectStore.ts b/apps/d.d0rich.me/src/features/tonconnect/stores/tonConnectStore.ts new file mode 100644 index 00000000..eca64847 --- /dev/null +++ b/apps/d.d0rich.me/src/features/tonconnect/stores/tonConnectStore.ts @@ -0,0 +1,132 @@ +import { defineStore } from 'pinia' +import { ref, computed, watch } from 'vue' +import type { SenderArguments, Sender } from '@ton/core' +import { Address } from '@ton/core/dist/address/Address' +import { CHAIN } from '@tonconnect/protocol' +import { TonConnectUI } from '@tonconnect/ui' +import { getHttpEndpoint, type Network } from '@orbs-network/ton-access' +import { TonClient } from '@ton/ton/dist/client/TonClient' +import { useAppConfig } from '@/shared/composables/useAppConfig' + +export const useTonConnectStore = defineStore('ton-connect', () => { + const config = useAppConfig() + + // State + const tonConnect = ref( + new TonConnectUI({ + manifestUrl: + window.location.origin + + '/tonconnect' + + (config.network === 'TESTNET' ? '-testnet' : '') + + '-manifest.json', + language: 'en', + uiPreferences: { + borderRadius: 'none' + } + }) + ) + const buttonRootId = ref(null) + + const wallet = ref(tonConnect.value.wallet) + + const cancelWalletSubscription = tonConnect.value.onStatusChange( + (status) => (wallet.value = status) + ) + + const walletAddress = computed(() => wallet.value?.account.address ?? null) + const currentNetwork = computed(() => { + const chain = wallet.value?.account.chain + if (chain === CHAIN.MAINNET) return 'mainnet' + if (chain === CHAIN.TESTNET) return 'testnet' + return undefined + }) + + const tonClient = ref(null) + + const stopRefreshingTonClient = watch(currentNetwork, async (network) => { + if (!network) { + tonClient.value = new TonClient({ + endpoint: await getHttpEndpoint({ + network: config.network === 'MAINNET' ? 'mainnet' : 'testnet' + }) + }) + return + } + tonClient.value = new TonClient({ + endpoint: await getHttpEndpoint({ network }) + }) + }) + + return { + tonConnect, + tonClient, + isConnected: computed(() => !!wallet.value?.account.address), + wallet: walletAddress, + network: currentNetwork, + sendTransaction, + setOptions, + setRenderRoot, + cleanupSubscriptions: cleanup, + sender: computed(() => { + return { + send: async (args) => { + await sendTransaction(args) + }, + address: walletAddress.value + ? Address.parse(walletAddress.value) + : undefined + } + }) + } + + // Actions + + function sendTransaction(args: SenderArguments) { + return tonConnect.value.sendTransaction({ + messages: [ + { + address: args.to.toString(), + amount: args.value.toString(), + payload: args.body?.toBoc().toString('base64') + } + ], + validUntil: Date.now() + 5 * 60 * 1000 // 5 minutes for user to approve + }) + } + + /** + * Cancel all subscriptions for TonConnectUI + */ + function cleanup() { + cancelWalletSubscription() + stopRefreshingTonClient() + } + + /** + * Define styles for the TonConnectUI button + * @param options UI options of TonConnectUI + */ + function setOptions( + options: Omit< + InstanceType['uiOptions'], + 'buttonRootId' + > + ) { + tonConnect.value.uiOptions = { + ...options, + buttonRootId: buttonRootId.value + } + } + + /** + * Set buttonRootId element and makes button render in it + * @param rootId id of the element where the button will be rendered + */ + function setRenderRoot(rootId: string | null) { + buttonRootId.value = rootId + tonConnect.value.uiOptions = { + ...tonConnect.value.uiOptions, + buttonRootId: rootId + } + } +}) diff --git a/apps/d.d0rich.me/src/features/tonconnect/ui/TonConnect.vue b/apps/d.d0rich.me/src/features/tonconnect/ui/TonConnect.vue new file mode 100644 index 00000000..8a58372e --- /dev/null +++ b/apps/d.d0rich.me/src/features/tonconnect/ui/TonConnect.vue @@ -0,0 +1,38 @@ + + + diff --git a/apps/d.d0rich.me/src/layout/Layout.vue b/apps/d.d0rich.me/src/layout/Layout.vue new file mode 100644 index 00000000..4e498c7f --- /dev/null +++ b/apps/d.d0rich.me/src/layout/Layout.vue @@ -0,0 +1,30 @@ + + + diff --git a/apps/d.d0rich.me/src/layout/components/DFooter.vue b/apps/d.d0rich.me/src/layout/components/DFooter.vue new file mode 100644 index 00000000..f31eb657 --- /dev/null +++ b/apps/d.d0rich.me/src/layout/components/DFooter.vue @@ -0,0 +1,33 @@ + + + diff --git a/apps/d.d0rich.me/src/layout/components/DHeader.vue b/apps/d.d0rich.me/src/layout/components/DHeader.vue new file mode 100644 index 00000000..c07788cc --- /dev/null +++ b/apps/d.d0rich.me/src/layout/components/DHeader.vue @@ -0,0 +1,50 @@ + + + diff --git a/apps/d.d0rich.me/src/layout/components/DSidebar.vue b/apps/d.d0rich.me/src/layout/components/DSidebar.vue new file mode 100644 index 00000000..82de9e11 --- /dev/null +++ b/apps/d.d0rich.me/src/layout/components/DSidebar.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/apps/d.d0rich.me/src/main.ts b/apps/d.d0rich.me/src/main.ts index 5dcad83c..dd6750a7 100644 --- a/apps/d.d0rich.me/src/main.ts +++ b/apps/d.d0rich.me/src/main.ts @@ -1,4 +1,5 @@ -import './assets/main.css' +import './assets/tailwind.css' +import '@d0rich/esprit-design/style.css' import { createApp } from 'vue' import { createPinia } from 'pinia' diff --git a/apps/d.d0rich.me/src/pages/CreateBlog.vue b/apps/d.d0rich.me/src/pages/CreateBlog.vue new file mode 100644 index 00000000..2288328f --- /dev/null +++ b/apps/d.d0rich.me/src/pages/CreateBlog.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/apps/d.d0rich.me/src/pages/Home.vue b/apps/d.d0rich.me/src/pages/Home.vue new file mode 100644 index 00000000..c9c1b5d8 --- /dev/null +++ b/apps/d.d0rich.me/src/pages/Home.vue @@ -0,0 +1,68 @@ + + + diff --git a/apps/d.d0rich.me/src/pages/MyBlogs.vue b/apps/d.d0rich.me/src/pages/MyBlogs.vue new file mode 100644 index 00000000..3e5522bb --- /dev/null +++ b/apps/d.d0rich.me/src/pages/MyBlogs.vue @@ -0,0 +1,92 @@ + + + diff --git a/apps/d.d0rich.me/src/router/index.ts b/apps/d.d0rich.me/src/router/index.ts index a49ae507..f5307d25 100644 --- a/apps/d.d0rich.me/src/router/index.ts +++ b/apps/d.d0rich.me/src/router/index.ts @@ -1,21 +1,19 @@ import { createRouter, createWebHistory } from 'vue-router' -import HomeView from '../views/HomeView.vue' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { path: '/', - name: 'home', - component: HomeView + component: () => import('../pages/Home.vue') }, { - path: '/about', - name: 'about', - // route level code-splitting - // this generates a separate chunk (About.[hash].js) for this route - // which is lazy-loaded when the route is visited. - component: () => import('../views/AboutView.vue') + path: '/my-blogs', + component: () => import('../pages/MyBlogs.vue') + }, + { + path: '/my-blogs/create', + component: () => import('../pages/CreateBlog.vue') } ] }) diff --git a/apps/d.d0rich.me/src/shared/composables/useAppConfig.ts b/apps/d.d0rich.me/src/shared/composables/useAppConfig.ts new file mode 100644 index 00000000..656fef4e --- /dev/null +++ b/apps/d.d0rich.me/src/shared/composables/useAppConfig.ts @@ -0,0 +1,9 @@ +const staticConfig = { + network: import.meta.env.VITE_TON_NETWORK ?? 'TESTNET' +} + +Object.freeze(staticConfig) + +export const useAppConfig = () => { + return staticConfig +} diff --git a/apps/d.d0rich.me/src/shared/unified/md-to-html.ts b/apps/d.d0rich.me/src/shared/unified/md-to-html.ts new file mode 100644 index 00000000..2e182efc --- /dev/null +++ b/apps/d.d0rich.me/src/shared/unified/md-to-html.ts @@ -0,0 +1,9 @@ +import rehypeStringify from 'rehype-stringify' +import remarkParse from 'remark-parse' +import remarkRehype from 'remark-rehype' +import { unified } from 'unified' + +export const mdToHtmlProcessor = unified() + .use(remarkParse) + .use(remarkRehype) + .use(rehypeStringify) diff --git a/apps/d.d0rich.me/src/shared/unified/md-to-plain-text.ts b/apps/d.d0rich.me/src/shared/unified/md-to-plain-text.ts new file mode 100644 index 00000000..2cf858a1 --- /dev/null +++ b/apps/d.d0rich.me/src/shared/unified/md-to-plain-text.ts @@ -0,0 +1,4 @@ +import { unified } from 'unified' +import strip from 'strip-markdown' + +export const mdToPlainTextProcessor = unified().use(strip) diff --git a/apps/d.d0rich.me/src/shared/utils/dateformat.ts b/apps/d.d0rich.me/src/shared/utils/dateformat.ts new file mode 100644 index 00000000..3f681801 --- /dev/null +++ b/apps/d.d0rich.me/src/shared/utils/dateformat.ts @@ -0,0 +1,27 @@ +import dateFormat from 'dateformat' + +export function dateToMonthYear(date: Date | string = new Date()) { + return dateFormat(date, 'mmm yyyy') +} + +export function dateToDayMonthYear(date: Date | string = new Date()) { + return dateFormat(date, 'dd mmm yyyy') +} + +export function monthDiff(d1: Date, d2: Date) { + let months + months = (d2.getFullYear() - d1.getFullYear()) * 12 + months -= d1.getMonth() + months += d2.getMonth() + return months <= 0 ? 0 : months +} + +export function formatYearMonthDateDiff(d1: Date, d2: Date) { + const allMonths = monthDiff(d1, d2) + 1 + const months = allMonths % 12 + const fullYears = (allMonths - months) / 12 + const yearsPart = + fullYears > 0 ? `${fullYears} year${fullYears > 1 ? 's' : ''}` : '' + const monthPart = months > 0 ? `${months} month${months > 1 ? 's' : ''}` : '' + return (yearsPart + ' ' + monthPart).trim() +} diff --git a/apps/d.d0rich.me/src/stores/counter.ts b/apps/d.d0rich.me/src/stores/counter.ts deleted file mode 100644 index b6757ba5..00000000 --- a/apps/d.d0rich.me/src/stores/counter.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ref, computed } from 'vue' -import { defineStore } from 'pinia' - -export const useCounterStore = defineStore('counter', () => { - const count = ref(0) - const doubleCount = computed(() => count.value * 2) - function increment() { - count.value++ - } - - return { count, doubleCount, increment } -}) diff --git a/apps/d.d0rich.me/src/views/AboutView.vue b/apps/d.d0rich.me/src/views/AboutView.vue deleted file mode 100644 index 756ad2a1..00000000 --- a/apps/d.d0rich.me/src/views/AboutView.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/apps/d.d0rich.me/src/views/HomeView.vue b/apps/d.d0rich.me/src/views/HomeView.vue deleted file mode 100644 index d5c0217e..00000000 --- a/apps/d.d0rich.me/src/views/HomeView.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/d.d0rich.me/src/widgets/SidebarMenu.vue b/apps/d.d0rich.me/src/widgets/SidebarMenu.vue new file mode 100644 index 00000000..bd78f6a1 --- /dev/null +++ b/apps/d.d0rich.me/src/widgets/SidebarMenu.vue @@ -0,0 +1,63 @@ + + + diff --git a/apps/d.d0rich.me/tailwind.config.js b/apps/d.d0rich.me/tailwind.config.js new file mode 100644 index 00000000..82069a3e --- /dev/null +++ b/apps/d.d0rich.me/tailwind.config.js @@ -0,0 +1,23 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + presets: [require('@d0rich/esprit-design/tailwind.config')], + content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], + theme: { + extend: { + typography: { + DEFAULT: { + css: { + maxWidth: '100ch' // add required value here + } + } + } + } + }, + plugins: [ + require('@tailwindcss/typography'), + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('@tailwindcss/forms')({ + strategy: 'class' + }) + ] +} diff --git a/apps/d.d0rich.me/vite.config.ts b/apps/d.d0rich.me/vite.config.ts index de5cb31c..430fe90b 100644 --- a/apps/d.d0rich.me/vite.config.ts +++ b/apps/d.d0rich.me/vite.config.ts @@ -1,11 +1,18 @@ import { fileURLToPath, URL } from 'node:url' import { defineConfig } from 'vite' +import { nodePolyfills } from 'vite-plugin-node-polyfills' import vue from '@vitejs/plugin-vue' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [vue()], + plugins: [ + vue(), + nodePolyfills({ + // TON libs use inside Node.js Buffer + include: ['buffer'] + }) + ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) diff --git a/contracts/build-scripts/new-imports.ts b/contracts/build-scripts/new-imports.ts deleted file mode 100644 index f3f3d8bf..00000000 --- a/contracts/build-scripts/new-imports.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -import type { - TupleItem, - ContractProvider, - Sender, - Contract, - ContractABI, - ABIType, - ABIGetter, - ABIReceiver, - DictionaryValue -} from 'ton-core' - -import { Cell } from 'ton-core/dist/boc/Cell' -import { Slice } from 'ton-core/dist/boc/Slice' -import { Address } from 'ton-core/dist/address/Address' -import { Builder, beginCell } from 'ton-core/dist/boc/Builder' -import { ComputeError } from 'ton-core/dist/contract/ComputeError' -import { contractAddress } from 'ton-core/dist/address/contractAddress' -import { TupleReader } from 'ton-core/dist/tuple/reader' -import { TupleBuilder } from 'ton-core/dist/tuple/builder' -import { Dictionary } from 'ton-core/dist/dict/Dictionary' diff --git a/contracts/contracts/d_social_network_master.tact b/contracts/contracts/d_social_network_master.tact deleted file mode 100644 index 9c33034f..00000000 --- a/contracts/contracts/d_social_network_master.tact +++ /dev/null @@ -1,65 +0,0 @@ -import "@stdlib/deploy"; -import "@stdlib/ownable"; -import "./lib/trait_accounting.tact"; -import "./lib/trait_personal_fees.tact"; -import "./lib/trait_storage_controller.tact"; -import "./messages_d.tact"; -import "./d_social_network_blog.tact"; - -contract DSocialNetworkMaster with Deployable, OwnableTransferable, Accounting, PersonalFees, StorageController { - version: String = "v1"; - owner: Address; - personal_fees_destination: Address; - next_blog_index: Int as uint32 = 0; - - const CREATE_POST_FEE: Int = ton("0.5"); - - init() { - let ctx: Context = context(); - self.owner = ctx.sender; - self.personal_fees_destination = ctx.sender; - } - - get fun get_version(): String { - return self.version; - } - - get fun get_blogs_count(): Int { - return self.next_blog_index; - } - - get fun get_blog_address_by_index(item_index: Int): Address?{ - let initCode: StateInit = self.getBlogInit(item_index); - return contractAddress(initCode); - } - - receive(msg: CreateBlog) { - require(self.next_blog_index >= 0, "non-sequential blog id"); - let ctx: Context = context(); - require(ctx.value + ton("0.05") >= self.CREATE_POST_FEE, "not enough funds to create a blog"); - let blog_init: StateInit = self.getBlogInit(self.next_blog_index); - send(SendParameters{ - to: contractAddress(blog_init), - value: self.calculateSendAmountToHoldFeeFromRecieved(self.CREATE_POST_FEE), - bounce: false, - mode: SendIgnoreErrors, - body: InitializeBlog { - query_id: 0, - owner: ctx.sender, - collection_content: msg.blog_metadata - }.toCell(), - code: blog_init.code, - data: blog_init.data - }); - self.next_blog_index = self.next_blog_index + 1; - - let sb: StringBuilder = beginString(); - sb.append("D Blog Created: "); - sb.append(msg.blog_metadata.name); - self.sendRemainingValueAsPersonalFee(sb.toString()); - } - - fun getBlogInit(account_id: Int): StateInit { - return initOf DSocialNetworkBlog(account_id, myAddress(), self.personal_fees_destination); - } -} diff --git a/contracts/tests/DSocialNetworkBlog.spec.ts b/contracts/tests/DSocialNetworkBlog.spec.ts deleted file mode 100644 index d4492543..00000000 --- a/contracts/tests/DSocialNetworkBlog.spec.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { Blockchain, SandboxContract } from '@ton-community/sandbox' -import { toNano } from 'ton-core' -import { DSocialNetworkMaster } from '../wrappers/DSocialNetworkMaster' -import { - DSocialNetworkBlog, - EditBlogMetadata, - MintNft -} from '../wrappers/DSocialNetworkBlog' -import '@ton-community/test-utils' -import { - getTestPostModel, - registerTestAccountMessage -} from '../utils/test-fixtures' -import { serializePostData } from '../utils/stub-post-serialization' - -describe('DSocialNetworkMaster', () => { - let blockchain: Blockchain - let deployer: Awaited> - let dMaster: SandboxContract - let dBlog: SandboxContract - - beforeEach(async () => { - blockchain = await Blockchain.create() - dMaster = blockchain.openContract(await DSocialNetworkMaster.fromInit()) - deployer = await blockchain.treasury('deployer') - const deployResult = await dMaster.send( - deployer.getSender(), - { value: toNano('0.1') }, - { - $$type: 'Deploy', - queryId: 0n - } - ) - - expect(deployResult.transactions).toHaveTransaction({ - from: deployer.address, - to: dMaster.address, - deploy: true, - success: true - }) - - const registerResult = await dMaster.send( - deployer.getSender(), - { value: toNano('1') }, - registerTestAccountMessage - ) - - const blogAddress = await dMaster.getGetBlogAddressByIndex(0n) - - expect(blogAddress).not.toBeNull() - - expect(registerResult.transactions).toHaveTransaction({ - from: dMaster.address, - to: blogAddress!, - success: true - }) - - expect(await dMaster.getGetBlogsCount()).toBe(1n) - - dBlog = blockchain.openContract( - DSocialNetworkBlog.fromAddress(blogAddress!) - ) - }) - - it('deployer shoud be owner of the account', async () => { - const owner = await dBlog.getOwner() - - expect(owner.toRawString()).toEqual(deployer.address.toRawString()) - }) - - it('should create post', async () => { - const testPostModel = getTestPostModel( - deployer.address, - (await dBlog.getGetNftAddressByIndex(await dBlog.getGetNextItemIndex()))!, - dBlog.address - ) - - const createTestPostMessage: MintNft = { - $$type: 'MintNft', - query_id: 0n, - individual_content: serializePostData(testPostModel) - } - - const createPostResult = await dBlog.send( - deployer.getSender(), - { value: toNano('0.2') }, - createTestPostMessage - ) - - const postAddress = await dBlog.getGetNftAddressByIndex(0n) - - expect(postAddress).not.toBeNull() - - // Should top up post balance - expect(createPostResult.transactions).toHaveTransaction({ - from: dBlog.address, - to: postAddress!, - success: true - }) - - // Should return excesses to owner - expect(createPostResult.transactions).toHaveTransaction({ - from: postAddress!, - to: deployer.address, - success: true - }) - - expect(await dBlog.getGetNextItemIndex()).toBe(1n) - }) - - it('Should edit blog metadata correctly', async () => { - const editBlogMetadataMessage: EditBlogMetadata = { - $$type: 'EditBlogMetadata', - query_id: 0n, - new_metadata: { - $$type: 'NftCollectionMetadata', - name: 'New blog name', - description: 'New blog description', - image: 'New blog avatar' - } - } - - const editBlogMetadataResult = await dBlog.send( - deployer.getSender(), - { value: toNano('0.2') }, - editBlogMetadataMessage - ) - - // Should pay for changes - expect(editBlogMetadataResult.transactions).toHaveTransaction({ - from: deployer.address, - to: dBlog.address, - success: true - }) - - // Should return excesses - expect(editBlogMetadataResult.transactions).toHaveTransaction({ - from: dBlog.address, - to: deployer.address, - success: true - }) - - const newMetadata = await dBlog.getGetBlogInfo() - - expect(newMetadata.collection_content).toEqual( - editBlogMetadataMessage.new_metadata - ) - }) -}) diff --git a/contracts/tests/DSocialNetworkMaster.spec.ts b/contracts/tests/DSocialNetworkMaster.spec.ts deleted file mode 100644 index acd7ed69..00000000 --- a/contracts/tests/DSocialNetworkMaster.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Blockchain, SandboxContract } from '@ton-community/sandbox' -import { toNano } from 'ton-core' -import { DSocialNetworkMaster } from '../wrappers/DSocialNetworkMaster' -import { DSocialNetworkBlog } from '../wrappers/DSocialNetworkBlog' -import '@ton-community/test-utils' -import { registerTestAccountMessage } from '../utils/test-fixtures' - -describe('DSocialNetworkMaster', () => { - let blockchain: Blockchain - let deployer: Awaited> - let dMaster: SandboxContract - - beforeEach(async () => { - blockchain = await Blockchain.create() - dMaster = blockchain.openContract(await DSocialNetworkMaster.fromInit()) - deployer = await blockchain.treasury('deployer') - const deployResult = await dMaster.send( - deployer.getSender(), - { value: toNano('0.1') }, - { - $$type: 'Deploy', - queryId: 0n - } - ) - - expect(deployResult.transactions).toHaveTransaction({ - from: deployer.address, - to: dMaster.address, - deploy: true, - success: true - }) - }) - - it('deployer shoud be owner', async () => { - const owner = await dMaster.getOwner() - - expect(owner.toRawString()).toEqual(deployer.address.toRawString()) - }) - - it('Create blog', async () => { - const createBlogResult = await dMaster.send( - deployer.getSender(), - { value: toNano('1') }, - registerTestAccountMessage - ) - - const blogAddress = await dMaster.getGetBlogAddressByIndex(0n) - - expect(blogAddress).not.toBeNull() - - // Should top up blog balance - expect(createBlogResult.transactions).toHaveTransaction({ - from: dMaster.address, - to: blogAddress!, - success: true - }) - - // Should return excesses - expect(createBlogResult.transactions).toHaveTransaction({ - from: blogAddress!, - to: deployer.address, - success: true - }) - - expect(await dMaster.getGetBlogsCount()).toBe(1n) - - blockchain.openContract(DSocialNetworkBlog.fromAddress(blogAddress!)) - }) -}) diff --git a/contracts/tests/DSocialNetworkPost.spec.ts b/contracts/tests/DSocialNetworkPost.spec.ts deleted file mode 100644 index bc9e572d..00000000 --- a/contracts/tests/DSocialNetworkPost.spec.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { Blockchain, SandboxContract } from '@ton-community/sandbox' -import { toNano } from 'ton-core' -import { DSocialNetworkMaster } from '../wrappers/DSocialNetworkMaster' -import { - DSocialNetworkBlog, - MintNft, - NftMetadata -} from '../wrappers/DSocialNetworkBlog' -import '@ton-community/test-utils' -import { DSocialNetworkPost } from '../wrappers/DSocialNetworkPost' -import { - getTestPostModel, - registerTestAccountMessage -} from '../utils/test-fixtures' -import { parse } from '../utils/onchain-metadata-parser/parse' -import { - deserializePostData, - serializePostData, - stringifyPostModel, - type DPostModel -} from '../utils/stub-post-serialization' - -describe('DSocialNetworkMaster', () => { - let blockchain: Blockchain - let deployer: Awaited> - let dMaster: SandboxContract - let dBlog: SandboxContract - let testPostModel: DPostModel - let dPost: SandboxContract - - beforeEach(async () => { - blockchain = await Blockchain.create() - dMaster = blockchain.openContract(await DSocialNetworkMaster.fromInit()) - deployer = await blockchain.treasury('deployer') - const deployResult = await dMaster.send( - deployer.getSender(), - { value: toNano('0.1') }, - { - $$type: 'Deploy', - queryId: 0n - } - ) - - expect(deployResult.transactions).toHaveTransaction({ - from: deployer.address, - to: dMaster.address, - deploy: true, - success: true - }) - - const registerResult = await dMaster.send( - deployer.getSender(), - { value: toNano('1') }, - registerTestAccountMessage - ) - - const blogAddress = await dMaster.getGetBlogAddressByIndex(0n) - - expect(blogAddress).not.toBeNull() - - expect(registerResult.transactions).toHaveTransaction({ - from: dMaster.address, - to: blogAddress!, - success: true - }) - - expect(await dMaster.getGetBlogsCount()).toBe(1n) - - dBlog = blockchain.openContract( - DSocialNetworkBlog.fromAddress(blogAddress!) - ) - - testPostModel = getTestPostModel( - deployer.address, - (await dBlog.getGetNftAddressByIndex(await dBlog.getGetNextItemIndex()))!, - dBlog.address - ) - - const createTestPostMessage: MintNft = { - $$type: 'MintNft', - query_id: 0n, - individual_content: serializePostData(testPostModel) - } - - const createPostResult = await dBlog.send( - deployer.getSender(), - { value: toNano('0.2') }, - createTestPostMessage - ) - - const postAddress = await dBlog.getGetNftAddressByIndex(0n) - - expect(postAddress).not.toBeNull() - - expect(createPostResult.transactions).toHaveTransaction({ - from: dBlog.address, - to: postAddress!, - success: true - }) - - expect(await dBlog.getGetNextItemIndex()).toBe(1n) - - dPost = blockchain.openContract( - DSocialNetworkPost.fromAddress(postAddress!) - ) - }) - - it('Deployer shoud be owner of the post', async () => { - const owner = await dPost.getOwner() - - expect(owner.toRawString()).toEqual(deployer.address.toRawString()) - }) - - it('Post model should be serialized correctly', () => { - const serializedModel = serializePostData(testPostModel) - const deserializedPostData = deserializePostData(serializedModel) - expect(stringifyPostModel(testPostModel)).toEqual( - stringifyPostModel(deserializedPostData) - ) - }) - - it('Post should be readable', async () => { - const getNftDataRes = await dPost.getGetNftData() - await dBlog.getGetNftContent( - getNftDataRes.index, - getNftDataRes.individual_content - ) - }) - - it('Post NFT data shoud be parsed correctly', async () => { - const postMetadata = await dPost.getGetPostInfo() - const parsedPostMetadata = await parse( - blockchain, - dPost.address, - dBlog.address - ) - expect(parsedPostMetadata).toEqual({ - image: postMetadata.nft_content.image, - name: postMetadata.nft_content.name, - description: postMetadata.nft_content.description - }) - }) - - it('Post should be editable', async () => { - const newPostMetadata: NftMetadata = { - $$type: 'NftMetadata', - name: 'New post name', - description: 'New post description', - image: 'New post cover' - } - - const editPostResult = await dPost.send( - deployer.getSender(), - { value: toNano('0.1') }, - { - $$type: 'EditBlogPost', - query_id: 0n, - new_metadata: newPostMetadata - } - ) - - // Should top up post balance - expect(editPostResult.transactions).toHaveTransaction({ - from: deployer.address, - to: dPost.address, - success: true - }) - - // Should return excesses to owner - expect(editPostResult.transactions).toHaveTransaction({ - from: dPost.address, - to: deployer.address, - success: true - }) - - const postMetadata = await dPost.getGetPostInfo() - - expect(postMetadata.nft_content).toEqual(newPostMetadata) - }) -}) diff --git a/ignore-builds-master.mjs b/ignore-builds-master.mjs index dd9e609a..111801ec 100644 --- a/ignore-builds-master.mjs +++ b/ignore-builds-master.mjs @@ -16,7 +16,9 @@ const isDD0richMeChanged = changesList.includes('apps/d.d0rich.me') // Contracts -const areContractsChanged = changesList.includes('contracts/contracts') +const areContractsChanged = changesList.includes( + 'packages/ton-contracts/contracts' +) // Packages const isNuxtContentMermaidChanged = changesList.includes( diff --git a/package-lock.json b/package-lock.json index 3bba52a9..da86469b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,10 +5,10 @@ "packages": { "": { "name": "esprit", + "hasInstallScript": true, "workspaces": [ "apps/*", - "packages/*", - "contracts" + "packages/*" ], "devDependencies": { "@changesets/cli": "^2.26.2", @@ -23,6 +23,7 @@ "eslint-plugin-unicorn": "^49.0.0", "eslint-plugin-vitest": "^0.1.4", "jest": "^29.5.0", + "patch-package": "^8.0.0", "playwright": "^1.32.1", "prettier": "^2.8.4", "ts-jest": "^29.0.5", @@ -36,22 +37,43 @@ "apps/d.d0rich.me": { "version": "0.0.0", "dependencies": { - "@d0rich/contracts": "*", + "@d0rich/esprit-design": "*", + "@d0rich/ton-contracts": "*", + "@dicebear/collection": "^7.0.1", + "@dicebear/core": "^7.0.1", + "@orbs-network/ton-access": "^2.3.3", + "@ton/core": "^0.53.0", + "@ton/ton": "^13.9.0", + "@tonconnect/ui": "^2.0.0-beta.6", + "@vueuse/core": "^10.6.1", + "consola": "^3.2.3", + "dateformat": "^5.0.3", "pinia": "^2.1.7", + "rehype-stringify": "^10.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "strip-markdown": "^6.0.0", + "unified": "^11.0.4", "vue": "^3.3.4", "vue-router": "^4.2.5" }, "devDependencies": { + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/typography": "^0.5.10", "@tsconfig/node18": "^18.2.2", "@types/jsdom": "^21.1.3", "@types/node": "^18.18.5", "@vitejs/plugin-vue": "^4.4.0", "@vue/test-utils": "^2.4.1", "@vue/tsconfig": "^0.4.0", + "autoprefixer": "^10.4.16", "jsdom": "^22.1.0", "npm-run-all2": "^6.1.1", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.5", "typescript": "~5.2.0", "vite": "^4.4.11", + "vite-plugin-node-polyfills": "^0.16.0", "vitest": "^0.34.6", "vue-tsc": "^1.8.19" } @@ -145,6 +167,101 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "apps/d.d0rich.me/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/d.d0rich.me/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "apps/d.d0rich.me/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "apps/d.d0rich.me/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "apps/d.d0rich.me/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, "apps/d.d0rich.me/node_modules/p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", @@ -224,6 +341,37 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "apps/d.d0rich.me/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/d.d0rich.me/node_modules/remark-rehype": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.0.0.tgz", + "integrity": "sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "apps/d.d0rich.me/node_modules/tinypool": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", @@ -233,6 +381,33 @@ "node": ">=14.0.0" } }, + "apps/d.d0rich.me/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/d.d0rich.me/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "apps/d.d0rich.me/node_modules/vite-node": { "version": "0.34.6", "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", @@ -417,6 +592,7 @@ "contracts": { "name": "@d0rich/contracts", "version": "0.0.1", + "extraneous": true, "devDependencies": { "@ton-community/blueprint": "^0.12.0", "@ton-community/sandbox": "^0.11.0", @@ -442,15 +618,6 @@ "ton-crypto": "^3.2.0" } }, - "contracts/node_modules/@types/node": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", - "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "devOptional": true, @@ -2150,10 +2317,6 @@ "postcss-selector-parser": "^6.0.13" } }, - "node_modules/@d0rich/contracts": { - "resolved": "contracts", - "link": true - }, "node_modules/@d0rich/esprit-design": { "resolved": "packages/esprit-design", "link": true @@ -2166,6 +2329,399 @@ "resolved": "packages/nuxt-design-system", "link": true }, + "node_modules/@d0rich/ton-contracts": { + "resolved": "packages/ton-contracts", + "link": true + }, + "node_modules/@dicebear/adventurer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/adventurer/-/adventurer-7.0.1.tgz", + "integrity": "sha512-eqbHHAQO8HjG8YNMl8xgklxphC7HvfDtqVr1rkJWP98e7r2AdQpu0cPYIOZPV4uv9gxl1ncaErQjdjvIvFRGiA==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/adventurer-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/adventurer-neutral/-/adventurer-neutral-7.0.1.tgz", + "integrity": "sha512-dZfyaUFS8qQv7Lv+OXNTHVkercDCh+VqGSJU8jIf3FFbtFbFF79FXZJwJ8V3+pr0xKcZWa8i+8hXLtU3gqZ18g==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/avataaars": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/avataaars/-/avataaars-7.0.1.tgz", + "integrity": "sha512-U7JJLDFJsbVyQl3j1SqtTxi5h+I5JXL8CGfwAOPtQTnk/tKQFXM9WF/zdHegtxbxYAxQaYJtyprdwTJHx5ELnw==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/avataaars-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/avataaars-neutral/-/avataaars-neutral-7.0.1.tgz", + "integrity": "sha512-e3XwK3xup4ifJ/BUNjR5rcrw9982SC75UTJlPsKuuOM/Lwx3MtUe3+dqeDSyYbrC7KoWespX70oDZK1+2dBQFw==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/big-ears": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/big-ears/-/big-ears-7.0.1.tgz", + "integrity": "sha512-ITI0IQCwdn5s5/kUrNdO488TQvZdiCljnzKpqbQ1hqfsxZ0C+eZs+cudZ0bqLftYxM+WBvmaJwrh3pXNAz1h+w==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/big-ears-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/big-ears-neutral/-/big-ears-neutral-7.0.1.tgz", + "integrity": "sha512-2QK9HVmApoGFLi3ONW9mh0Tk/PPyHx9rvzUvcT5H/mb80ooBqIVMPYYq4rVlGVP6wAtsNHdoxzzlKja0DG+vvQ==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/big-smile": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/big-smile/-/big-smile-7.0.1.tgz", + "integrity": "sha512-hVAhUMZ0LUhMFvtmUDR8GU7v2ufl5pOcVPiVSC3oV8nyywFp7s1ZqYGhi6rBCEG3qsMR54JfMFWkjV88j4Yrmg==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/bottts": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/bottts/-/bottts-7.0.1.tgz", + "integrity": "sha512-k0adSvnT9+gFDO7/Cmts9TM3CSWYrZrxZe1WpELjTvwe4QOqdn3LgrYR9JXU/2hRz3GaXtP02SHNd85CkadYVw==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/bottts-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/bottts-neutral/-/bottts-neutral-7.0.1.tgz", + "integrity": "sha512-1T1NEKAEvqyGlUprkO1Q1btITZnMBiCP5YeCy6wYyM7qJsPVDSySsjASJ1j/+IZFi8ePgWReFIbigFiHdo7iLA==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/collection": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/collection/-/collection-7.0.1.tgz", + "integrity": "sha512-Y5xzjU2hiklYUkqsSr5VBpVPG++iUUTm1UDJLPM+iXg3lMF3PQuifXoaAxcuoBvvnKfJKNHf5wP1Bq6nRUl4NA==", + "dependencies": { + "@dicebear/adventurer": "7.0.1", + "@dicebear/adventurer-neutral": "7.0.1", + "@dicebear/avataaars": "7.0.1", + "@dicebear/avataaars-neutral": "7.0.1", + "@dicebear/big-ears": "7.0.1", + "@dicebear/big-ears-neutral": "7.0.1", + "@dicebear/big-smile": "7.0.1", + "@dicebear/bottts": "7.0.1", + "@dicebear/bottts-neutral": "7.0.1", + "@dicebear/croodles": "7.0.1", + "@dicebear/croodles-neutral": "7.0.1", + "@dicebear/fun-emoji": "7.0.1", + "@dicebear/icons": "7.0.1", + "@dicebear/identicon": "7.0.1", + "@dicebear/initials": "7.0.1", + "@dicebear/lorelei": "7.0.1", + "@dicebear/lorelei-neutral": "7.0.1", + "@dicebear/micah": "7.0.1", + "@dicebear/miniavs": "7.0.1", + "@dicebear/notionists": "7.0.1", + "@dicebear/notionists-neutral": "7.0.1", + "@dicebear/open-peeps": "7.0.1", + "@dicebear/personas": "7.0.1", + "@dicebear/pixel-art": "7.0.1", + "@dicebear/pixel-art-neutral": "7.0.1", + "@dicebear/rings": "7.0.1", + "@dicebear/shapes": "7.0.1", + "@dicebear/thumbs": "7.0.1" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/converter": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/converter/-/converter-7.0.1.tgz", + "integrity": "sha512-CEIF6ZKi1FAE9kW10FvuPUjA6HLi+LcuB/GRFct/Bv28llzTel9xwbmfOEa1aIM8Nnp8BuT4U7tBIytksf+ptw==", + "dependencies": { + "@types/json-schema": "^7.0.11", + "tmp-promise": "^3.0.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@resvg/resvg-js": "^2.4.1", + "exiftool-vendored": "^22.0.0", + "sharp": "^0.32.1" + }, + "peerDependenciesMeta": { + "@resvg/resvg-js": { + "optional": true + }, + "exiftool-vendored": { + "optional": true + }, + "sharp": { + "optional": true + } + } + }, + "node_modules/@dicebear/core": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/core/-/core-7.0.1.tgz", + "integrity": "sha512-jaJG693c+myLocgG3kKXdHa+WJ+S6OcD31SEr9Oby7hhOzALQYD+LcJ15oBWwI7SLHJcGPYTOLyx2eDr8YhXCQ==", + "dependencies": { + "@dicebear/converter": "7.0.1", + "@types/json-schema": "^7.0.11" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@dicebear/croodles": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/croodles/-/croodles-7.0.1.tgz", + "integrity": "sha512-uauBTUvKFvsiaT+LWYKCEboEeOJy2Pk055nsdczi13UgHHfj+Qvy0/ky/uzYn+WC/1gewqQ6w/yS1WfpgPtIpg==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/croodles-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/croodles-neutral/-/croodles-neutral-7.0.1.tgz", + "integrity": "sha512-u09YylowZcbSAVyKJ4I8BCo1ehluqg3onYCclx++8mOWcEo+XGsGKIeN7osayaflNY/qtA9Jt2JsPgiS8KpQ5A==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/fun-emoji": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/fun-emoji/-/fun-emoji-7.0.1.tgz", + "integrity": "sha512-oJj5sb4rakro4e0lZTCkcKkiClHxDWr6+NWTwoU5L1HYRkXV6ngk4s7xSdOrYBQpYjLhdu+Lpx1VHYNpLUu2vg==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/icons": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/icons/-/icons-7.0.1.tgz", + "integrity": "sha512-juHS4feScGCz4YdiwjxR60RJ2G7Z6W+tdUqNHN9ufMvY/FpJTfrQvzvrJfJfc84QZwIrqI/96WV3JIBEIO2AwQ==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/identicon": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/identicon/-/identicon-7.0.1.tgz", + "integrity": "sha512-9W9pqqhvpMsZmOkjuLwlw0iift56A3VFq7eNpJPB1mm6gytfqgxozgOVLDFgug9VXgUVI2Jrk/XnXGIFVIeVQA==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/initials": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/initials/-/initials-7.0.1.tgz", + "integrity": "sha512-zCI6fky4odM5ezl/GlhcSdnu+oNfmBbIghFB5NzgB/wV5nHmw2okONRC+Mgmxv8P8EpFb9z5hEOnh8xwW8htow==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/lorelei": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/lorelei/-/lorelei-7.0.1.tgz", + "integrity": "sha512-3pyI2JF70PlqZUZEs5pVxmQWDJ2/bWmGG/iFtwsEh9HivtF8Zon4Er0NrsEoiKDvScyY4VGwl4LyUBc8JvNb9w==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/lorelei-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/lorelei-neutral/-/lorelei-neutral-7.0.1.tgz", + "integrity": "sha512-4XaqE5v1dhE4TYrKSGG/VNUFqA31ADlqOnr6bd27E5MnaJLlY8ZAm3sue7EI9kEJ/i5KYov+Q4uS7JNDA5+cag==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/micah": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/micah/-/micah-7.0.1.tgz", + "integrity": "sha512-zHnEewRaREZGNTqnlZiSoha/wNFxEsVQ3E5QYpe9KB3rcLW4CVUgFAHjb449vniG6NfsAWzyAkOfhy4N6Zzw0g==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/miniavs": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/miniavs/-/miniavs-7.0.1.tgz", + "integrity": "sha512-v0n2JT0N1I7vAGoi4NQ98IKtn4JgjwD2Gkqq7l5QAy0jzl1v289FfTng0cOrthroMGBQ5jPS0wUyI0TluoFZRw==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/notionists": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/notionists/-/notionists-7.0.1.tgz", + "integrity": "sha512-uEYBywouoUmvWtWARyeqAoQWX1DpvKL33dVxZ5K/ulYd/nXu9WHeFCPaP4tqE5II1XPS4khwneimFN6F1HA5NQ==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/notionists-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/notionists-neutral/-/notionists-neutral-7.0.1.tgz", + "integrity": "sha512-jRA7u2UU1I9EXzqBZL3vwI/V7pdDT60yB3bBjyD5J4TznT7bMwt7qEm1eV31U37mn3H+LTFiPD9/4G6whiU3nQ==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/open-peeps": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/open-peeps/-/open-peeps-7.0.1.tgz", + "integrity": "sha512-z1gXzd7XXLzSZpOrDPZmnJDXySCUEKmunRdRuWBSRrfIcVkgStZM0y8uuSrs3LpR8U2xcNJN9yO2wNRRWKmFEw==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/personas": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/personas/-/personas-7.0.1.tgz", + "integrity": "sha512-6/nsrN7JIlMqdH7UwhrACVoCEM3IVHkpMq2I0A1JbhmYp240TI8kM5xYSF0KRdOyAPbyDH/TEB8Uld4LKE+3wQ==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/pixel-art": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/pixel-art/-/pixel-art-7.0.1.tgz", + "integrity": "sha512-9f17Ze4533CbHp23E+gRSSZdCUAB5/PieRq6/ZtVOnPI/PfglhhKMKSxQIm/H267gE2Y+VVhHpUTwGlbAgh1Lg==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/pixel-art-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/pixel-art-neutral/-/pixel-art-neutral-7.0.1.tgz", + "integrity": "sha512-+9RS0ohGDbPu+W2eGGk3LyzvFbM5qsuhCQR4qO7YIcvmODyNFPJ7eW9g/MHFVPLQXq60SCEUF5CEKY0xs4baUQ==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/rings": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/rings/-/rings-7.0.1.tgz", + "integrity": "sha512-6wsLE4kbkBGeaaEA/afIV0eNYYfIVXo60XgApJA7JdcwyvdTa9LE5Wcp2VBEsZYXdsT9Ml7BC4er/QyMqCayUw==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/shapes": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/shapes/-/shapes-7.0.1.tgz", + "integrity": "sha512-/ol+SazDlJYYe5pYaqKcnYDBjux+2Ny57hIrkHhonV0z4ny3Pq6c4Lq+hN3MnTBpKJszCXLrSP3uCbSQpjnkOg==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, + "node_modules/@dicebear/thumbs": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/thumbs/-/thumbs-7.0.1.tgz", + "integrity": "sha512-eQYVJ8NN9buPfbd2Va0fY8sHRq9n1d7FJt/dL9xwimRGlpWh9lqS6gcHazuSHhSgnRHsHLANEiyboIcyhWh2Hg==", + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^7.0.0" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -5080,7 +5636,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/@orbs-network/ton-access/-/ton-access-2.3.3.tgz", "integrity": "sha512-b1miCPts7wBG9JKYgzXIRZQm/LMy5Uk1mNK8NzlcXHL3HRHJkkFbuYJGuj3IkWCiIicW3Ipp4sYnn3Fwo4oB0g==", - "dev": true, "dependencies": { "isomorphic-fetch": "^3.0.0" } @@ -5905,6 +6460,18 @@ "ton-crypto": "^3.2.0" } }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz", + "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==", + "dev": true, + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + } + }, "node_modules/@tailwindcss/typography": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", @@ -5931,39 +6498,6 @@ "node": ">=4" } }, - "node_modules/@ton-community/blueprint": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@ton-community/blueprint/-/blueprint-0.12.0.tgz", - "integrity": "sha512-QytcjOQCKtmaseEuEeuBGiKuQ649nwXGw4U3aGw7zz/SOd3SidMoTKAK3KE2VL84L8WRlw9HZx6wumJUkWPF7Q==", - "dev": true, - "dependencies": { - "@orbs-network/ton-access": "^2.3.3", - "@tact-lang/compiler": "^1.1.3", - "@ton-community/func-js": "^0.6.2", - "@tonconnect/sdk": "^2.1.3", - "arg": "^5.0.2", - "chalk": "^4.1.0", - "dotenv": "^16.1.4", - "inquirer": "^8.2.5", - "qrcode-terminal": "^0.12.0", - "ton-x": "^2.1.0", - "ts-node": "^10.9.1" - }, - "bin": { - "blueprint": "dist/cli/cli.js" - }, - "peerDependencies": { - "ton": ">=13.4.1", - "ton-core": ">=0.48.0", - "ton-crypto": ">=3.2.0" - } - }, - "node_modules/@ton-community/blueprint/node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, "node_modules/@ton-community/func-js": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/@ton-community/func-js/-/func-js-0.6.2.tgz", @@ -5989,28 +6523,90 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, - "node_modules/@ton-community/sandbox": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@ton-community/sandbox/-/sandbox-0.11.0.tgz", - "integrity": "sha512-3tlSprRBTSu9m0tJTC3cl4MXQep1vfNMPqk9+JAXSRJu9ToEvIUVpqO6MQNkbz9LkKDuOEBs5vyqT37DlKKcWw==", + "node_modules/@ton/blueprint": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@ton/blueprint/-/blueprint-0.14.0.tgz", + "integrity": "sha512-xBMKulfpKDVIjfBRhbrms++QSPl0/jxwOZU4mrF7WjaoaNoCK0hIT9p8X+rWFmYUZsLSSbt2jUd/KYgS0dRbKw==", "dev": true, + "dependencies": { + "@orbs-network/ton-access": "^2.3.3", + "@tact-lang/compiler": "^1.1.3", + "@ton-community/func-js": "^0.6.2", + "@tonconnect/sdk": "^2.1.3", + "arg": "^5.0.2", + "chalk": "^4.1.0", + "dotenv": "^16.1.4", + "inquirer": "^8.2.5", + "qrcode-terminal": "^0.12.0", + "ton-x": "^2.1.0", + "ts-node": "^10.9.1" + }, + "bin": { + "blueprint": "dist/cli/cli.js" + }, "peerDependencies": { - "ton-core": ">=0.48.0", - "ton-crypto": ">=3.2.0" + "@ton/core": ">=0.49.2", + "@ton/crypto": ">=3.2.0", + "@ton/ton": ">=13.4.1" } }, - "node_modules/@ton-community/test-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@ton-community/test-utils/-/test-utils-0.3.0.tgz", - "integrity": "sha512-eCw1c6a0TcKwiYEA4fmzPq+7dJtUx0UFYu+UEoRznIxEOcpEb8Ssjb9yMeiJEzbtUVMCkhEtpztdKt75ngDRWg==", + "node_modules/@ton/blueprint/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/@ton/core": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@ton/core/-/core-0.53.0.tgz", + "integrity": "sha512-tB5RxXFS6Z/ivmsqMn/eebEZmkWXIAz+hS1PDZXhbBkcvnBTknZ12g2AFrZtXyuvpm8O6SbL15UI/3NgkyIWzQ==", + "dependencies": { + "symbol.inspect": "1.0.1" + }, + "peerDependencies": { + "@ton/crypto": ">=3.2.0" + } + }, + "node_modules/@ton/crypto": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ton/crypto/-/crypto-3.2.0.tgz", + "integrity": "sha512-50RkwReEuV2FkxSZ8ht/x9+n0ZGtwRKGsJ0ay4I/HFhkYVG/awIIBQeH0W4j8d5lADdO5h01UtX8PJ8AjiejjA==", + "dependencies": { + "@ton/crypto-primitives": "2.0.0", + "jssha": "3.2.0", + "tweetnacl": "1.0.3" + } + }, + "node_modules/@ton/crypto-primitives": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ton/crypto-primitives/-/crypto-primitives-2.0.0.tgz", + "integrity": "sha512-wttiNClmGbI6Dfy/8oyNnsIV0b/qYkCJz4Gn4eP62lJZzMtVQ94Ko7nikDX1EfYHkLI1xpOitWpW+8ZuG6XtDg==", + "dependencies": { + "jssha": "3.2.0" + } + }, + "node_modules/@ton/sandbox": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@ton/sandbox/-/sandbox-0.13.1.tgz", + "integrity": "sha512-8OpTc1AkA47zHqCh681jgAMY9TBUzWITvLLtRTT5L5CKgL5jPpJfL1QLiqosqzvkAXTJe3FY3fwYWjVq3kyS5w==", + "dev": true, + "peerDependencies": { + "@ton/core": ">=0.49.2", + "@ton/crypto": ">=3.2.0" + } + }, + "node_modules/@ton/test-utils": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@ton/test-utils/-/test-utils-0.4.2.tgz", + "integrity": "sha512-fthY8Nrlmy8jnOl/vx6yjeKzzu62ZXMe7ej9Xg7rb4d3511V7dVQK+nw4YLSW5+dD/6WT03dFuNZXnuMYy5fHw==", "dev": true, "dependencies": { "node-inspect-extracted": "^2.0.0" }, "peerDependencies": { "@jest/globals": "*", - "chai": "*", - "ton-core": ">=0.36.1" + "@ton/core": ">=0.49.2", + "chai": "*" }, "peerDependenciesMeta": { "@jest/globals": { @@ -6021,6 +6617,22 @@ } } }, + "node_modules/@ton/ton": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@ton/ton/-/ton-13.9.0.tgz", + "integrity": "sha512-bvDn9vv0rNsN/OH84Q4DKH3N21AD0MvTxXmnS0wPEOoU38F4mltXmA7an2SjaSgd9kAlsOSHa0EirkTie+Zitw==", + "dependencies": { + "axios": "^0.25.0", + "dataloader": "^2.0.0", + "symbol.inspect": "1.0.1", + "teslabot": "^1.3.0", + "zod": "^3.21.4" + }, + "peerDependencies": { + "@ton/core": ">=0.53.0", + "@ton/crypto": ">=3.2.0" + } + }, "node_modules/@tonconnect/isomorphic-eventsource": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@tonconnect/isomorphic-eventsource/-/isomorphic-eventsource-0.0.1.tgz", @@ -6043,7 +6655,6 @@ "version": "2.2.6", "resolved": "https://registry.npmjs.org/@tonconnect/protocol/-/protocol-2.2.6.tgz", "integrity": "sha512-kyoDz5EqgsycYP+A+JbVsAUYHNT059BCrK+m0pqxykMODwpziuSAXfwAZmHcg8v7NB9VKYbdFY55xKeXOuEd0w==", - "dev": true, "dependencies": { "tweetnacl": "^1.0.3", "tweetnacl-util": "^0.15.1" @@ -6060,6 +6671,43 @@ "@tonconnect/protocol": "^2.2.5" } }, + "node_modules/@tonconnect/ui": { + "version": "2.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tonconnect/ui/-/ui-2.0.0-beta.6.tgz", + "integrity": "sha512-qgQXCjP0qR9vPuqohZ2wHnpK4LBGqtizFqCx7AO/Xu3XWMmJI9bXSI5rZ7EpKVpW8AvrSD/5X1yC7FIcanj0Kg==", + "dependencies": { + "@tonconnect/sdk": "^3.0.0-beta.3", + "classnames": "^2.3.2", + "deepmerge": "^4.2.2", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/@tonconnect/ui/node_modules/@tonconnect/isomorphic-eventsource": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@tonconnect/isomorphic-eventsource/-/isomorphic-eventsource-0.0.2.tgz", + "integrity": "sha512-B4UoIjPi0QkvIzZH5fV3BQLWrqSYABdrzZQSI9sJA9aA+iC0ohOzFwVVGXanlxeDAy1bcvPbb29f6sVUk0UnnQ==", + "dependencies": { + "eventsource": "^2.0.2" + } + }, + "node_modules/@tonconnect/ui/node_modules/@tonconnect/isomorphic-fetch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@tonconnect/isomorphic-fetch/-/isomorphic-fetch-0.0.3.tgz", + "integrity": "sha512-jIg5nTrDwnite4fXao3dD83eCpTvInTjZon/rZZrIftIegh4XxyVb5G2mpMqXrVGk1e8SVXm3Kj5OtfMplQs0w==", + "dependencies": { + "node-fetch": "^2.6.9" + } + }, + "node_modules/@tonconnect/ui/node_modules/@tonconnect/sdk": { + "version": "3.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@tonconnect/sdk/-/sdk-3.0.0-beta.3.tgz", + "integrity": "sha512-W2g75EZnD+HtG5r5VH4t3OYoFNQEgS03k6QeRU7n/jvR1maMvxHAdWIw1gOwwDP966Gh6plTxPSNOCDjS6onMg==", + "dependencies": { + "@tonconnect/isomorphic-eventsource": "^0.0.2", + "@tonconnect/isomorphic-fetch": "^0.0.3", + "@tonconnect/protocol": "^2.2.6" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -6472,9 +7120,9 @@ "integrity": "sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==" }, "node_modules/@types/web-bluetooth": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz", - "integrity": "sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==" + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" }, "node_modules/@types/yargs": { "version": "17.0.31", @@ -7247,13 +7895,13 @@ "dev": true }, "node_modules/@vueuse/core": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.5.0.tgz", - "integrity": "sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz", + "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==", "dependencies": { - "@types/web-bluetooth": "^0.0.18", - "@vueuse/metadata": "10.5.0", - "@vueuse/shared": "10.5.0", + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.6.1", + "@vueuse/shared": "10.6.1", "vue-demi": ">=0.14.6" }, "funding": { @@ -7300,17 +7948,17 @@ } }, "node_modules/@vueuse/metadata": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.5.0.tgz", - "integrity": "sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz", + "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==", "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.5.0.tgz", - "integrity": "sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz", + "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==", "dependencies": { "vue-demi": ">=0.14.6" }, @@ -7501,6 +8149,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "peer": true }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -7906,6 +8560,24 @@ "node": ">=0.10.0" } }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -8036,7 +8708,6 @@ "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dev": true, "dependencies": { "follow-redirects": "^1.14.7" } @@ -8272,6 +8943,12 @@ "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", "dev": true }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -8309,6 +8986,97 @@ "wcwidth": "^1.0.1" } }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, "node_modules/browserslist": { "version": "4.22.1", "funding": [ @@ -8405,6 +9173,37 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/buffer-polyfill": { + "name": "buffer", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, "node_modules/builtin-modules": { "version": "3.3.0", "license": "MIT", @@ -8415,6 +9214,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, "node_modules/builtins": { "version": "5.0.1", "dev": true, @@ -8784,6 +9589,16 @@ "node": ">=8" } }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/citty": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.4.tgz", @@ -8798,6 +9613,11 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, "node_modules/clean-regexp": { "version": "1.0.0", "dev": true, @@ -8879,9 +9699,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "engines": { "node": ">=6" @@ -9112,6 +9932,12 @@ "node": "^14.18.0 || >=16.10.0" } }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -9127,6 +9953,12 @@ "upper-case": "^2.0.2" } }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -9219,6 +10051,49 @@ "node": ">= 12.0.0" } }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -9264,6 +10139,28 @@ "node": ">= 8" } }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, "node_modules/css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -10105,8 +11002,7 @@ "node_modules/dataloader": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", - "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", - "dev": true + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==" }, "node_modules/date-time": { "version": "3.1.0", @@ -10365,6 +11261,16 @@ "node": ">=6" } }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/design.d0rich.me": { "resolved": "apps/design.d0rich.me", "link": true @@ -10465,6 +11371,23 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "license": "MIT", @@ -10504,6 +11427,18 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/domain-browser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -10689,6 +11624,27 @@ "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==", "dev": true }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -11785,7 +12741,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "peer": true, "engines": { "node": ">=0.8.x" } @@ -11794,11 +12749,20 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "dev": true, "engines": { "node": ">=12.0.0" } }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "node_modules/execa": { "version": "5.1.1", "license": "MIT", @@ -12051,6 +13015,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/find-yarn-workspace-root2": { "version": "1.2.16", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", @@ -12091,7 +13064,6 @@ "version": "1.15.3", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "dev": true, "funding": [ { "type": "individual", @@ -12729,11 +13701,35 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/hash-sum": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.0", "license": "MIT", @@ -13163,6 +14159,17 @@ "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "dev": true }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", @@ -13289,6 +14296,12 @@ "node": ">= 0.12.0" } }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, "node_modules/https-proxy-agent": { "version": "7.0.2", "license": "MIT", @@ -14185,12 +15198,20 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dev": true, "dependencies": { "node-fetch": "^2.6.1", "whatwg-fetch": "^3.4.1" } }, + "node_modules/isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -15436,6 +16457,24 @@ "version": "0.4.1", "license": "MIT" }, + "node_modules/json-stable-stringify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.0.tgz", + "integrity": "sha512-zfA+5SuwYN2VWqN1/5HZaDzQKLJHaBVMZIIM+wuYjdptkaQsqzDdqjqf+lZZJUuJq1aanHiY8LhH8LmH+qBYJA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "devOptional": true, @@ -15466,6 +16505,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -15491,7 +16539,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/jssha/-/jssha-3.2.0.tgz", "integrity": "sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==", - "dev": true, "engines": { "node": "*" } @@ -15549,6 +16596,15 @@ "node": ">=0.10.0" } }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -16194,6 +17250,17 @@ "node": ">=8" } }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "node_modules/mdast-util-definitions": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", @@ -18587,6 +19654,25 @@ "node": ">=8.6" } }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -18632,6 +19718,27 @@ "node": ">=4" } }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, "node_modules/minimatch": { "version": "3.1.2", "license": "ISC", @@ -19639,6 +20746,62 @@ "version": "2.0.13", "license": "MIT" }, + "node_modules/node-stdlib-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", + "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", + "dev": true, + "dependencies": { + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.11.0", + "domain-browser": "^4.22.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, "node_modules/non-layered-tidy-tree-layout": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", @@ -20541,6 +21704,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -20641,6 +21810,12 @@ "node": ">= 14" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -20660,6 +21835,19 @@ "node": ">=6" } }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, "node_modules/parse-entities": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", @@ -20750,6 +21938,112 @@ "tslib": "^2.0.3" } }, + "node_modules/patch-package": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", + "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-package/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -20848,6 +22142,22 @@ "node": "*" } }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -21973,6 +23283,15 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -22089,6 +23408,26 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -22211,6 +23550,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -22314,6 +23662,16 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -22818,6 +24176,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-emoji": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", @@ -23477,6 +24849,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "node_modules/robust-predicates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", @@ -23865,11 +25247,30 @@ "node": ">= 0.4" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "license": "MIT", @@ -24383,6 +25784,28 @@ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==" }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, "node_modules/stream-transform": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", @@ -24603,6 +26026,18 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/strip-markdown": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-markdown/-/strip-markdown-6.0.0.tgz", + "integrity": "sha512-mSa8FtUoX3ExJYDkjPUTC14xaBAn4Ik5GPQD45G5E2egAmeV3kHgVSTfIoSDggbF6Pk9stahVgqsLCNExv6jHw==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/style-dictionary-esm": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/style-dictionary-esm/-/style-dictionary-esm-1.8.4.tgz", @@ -24820,8 +26255,7 @@ "node_modules/symbol.inspect": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol.inspect/-/symbol.inspect-1.0.1.tgz", - "integrity": "sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==", - "dev": true + "integrity": "sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==" }, "node_modules/tailwind-config-viewer": { "version": "1.7.3", @@ -25086,8 +26520,7 @@ "node_modules/teslabot": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/teslabot/-/teslabot-1.5.0.tgz", - "integrity": "sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==", - "dev": true + "integrity": "sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==" }, "node_modules/test-exclude": { "version": "6.0.0", @@ -25140,6 +26573,18 @@ "node": ">=4" } }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", @@ -25185,6 +26630,25 @@ "node": ">=0.6.0" } }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmp-promise/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -25216,23 +26680,6 @@ "node": ">=0.6" } }, - "node_modules/ton": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/ton/-/ton-13.6.1.tgz", - "integrity": "sha512-CZlFsmO+l+uPSI2zgnUd8zCS5XuWnUSFRVUjRGl5X5fKXYnjaVba4vMaIyFTJwel+uEMnolGMSlNP8DAa9mfVg==", - "dev": true, - "dependencies": { - "axios": "^0.25.0", - "dataloader": "^2.0.0", - "symbol.inspect": "1.0.1", - "teslabot": "^1.3.0", - "zod": "^3.21.4" - }, - "peerDependencies": { - "ton-core": ">=0.51.0", - "ton-crypto": ">=3.2.0" - } - }, "node_modules/ton-core": { "version": "0.51.0", "resolved": "https://registry.npmjs.org/ton-core/-/ton-core-0.51.0.tgz", @@ -25555,6 +27002,12 @@ "dev": true, "license": "0BSD" }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, "node_modules/tty-table": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.3.tgz", @@ -25682,14 +27135,12 @@ "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "node_modules/tweetnacl-util": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" }, "node_modules/type-check": { "version": "0.4.0", @@ -25813,6 +27264,28 @@ "node": ">=14.17" } }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/ufo": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", @@ -26867,6 +28340,16 @@ "punycode": "^2.1.0" } }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -26877,6 +28360,12 @@ "requires-port": "^1.0.0" } }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, "node_modules/urlpattern-polyfill": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", @@ -27244,6 +28733,24 @@ } } }, + "node_modules/vite-plugin-node-polyfills": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.16.0.tgz", + "integrity": "sha512-uj1ymOmk7TliMxiivmXokpMY5gVMBpFPSZPLQSCv/LjkJGGKwyLjpbFL64dbYZEdFSUQ3tM7pbrxNh25yvhqOA==", + "dev": true, + "dependencies": { + "@rollup/plugin-inject": "^5.0.5", + "buffer-polyfill": "npm:buffer@^6.0.3", + "node-stdlib-browser": "^1.2.0", + "process": "^0.11.10" + }, + "funding": { + "url": "https://github.com/sponsors/davidmyersdev" + }, + "peerDependencies": { + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/vitest": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.30.1.tgz", @@ -27323,6 +28830,12 @@ } } }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, "node_modules/vscode-jsonrpc": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", @@ -27704,8 +29217,7 @@ "node_modules/whatwg-fetch": { "version": "3.6.19", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", - "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", - "dev": true + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" }, "node_modules/whatwg-mimetype": { "version": "3.0.0", @@ -27908,6 +29420,15 @@ "node": ">=0.4.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/xxhashjs": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", @@ -28052,7 +29573,6 @@ "version": "3.22.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "dev": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -28400,6 +29920,29 @@ "@vitejs/plugin-vue": "^4.1.0", "nuxt": "3.6" } + }, + "packages/ton-contracts": { + "name": "@d0rich/ton-contracts", + "version": "0.0.1", + "devDependencies": { + "@ton/blueprint": "^0.14.0", + "@ton/core": "^0.53.0", + "@ton/crypto": "^3.2.0", + "@ton/sandbox": "^0.13.1", + "@ton/test-utils": "^0.4.2", + "@ton/ton": "^13.9.0", + "@types/jest": "^29.5.0", + "@types/node": "^20.2.5" + } + }, + "packages/ton-contracts/node_modules/@types/node": { + "version": "20.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz", + "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } } }, "dependencies": { @@ -29675,30 +31218,6 @@ "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", "requires": {} }, - "@d0rich/contracts": { - "version": "file:contracts", - "requires": { - "@ton-community/blueprint": "^0.12.0", - "@ton-community/sandbox": "^0.11.0", - "@ton-community/test-utils": "^0.3.0", - "@types/jest": "^29.5.0", - "@types/node": "^20.2.5", - "ton": "~13.6.0", - "ton-core": "^0.51.0", - "ton-crypto": "^3.2.0" - }, - "dependencies": { - "@types/node": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", - "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", - "dev": true, - "requires": { - "undici-types": "~5.26.4" - } - } - } - }, "@d0rich/esprit-design": { "version": "file:packages/esprit-design", "requires": { @@ -29873,6 +31392,251 @@ "nuxt-icon": "^0.4.0" } }, + "@d0rich/ton-contracts": { + "version": "file:packages/ton-contracts", + "requires": { + "@ton/blueprint": "^0.14.0", + "@ton/core": "^0.53.0", + "@ton/crypto": "^3.2.0", + "@ton/sandbox": "^0.13.1", + "@ton/test-utils": "^0.4.2", + "@ton/ton": "^13.9.0", + "@types/jest": "^29.5.0", + "@types/node": "^20.2.5" + }, + "dependencies": { + "@types/node": { + "version": "20.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz", + "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + } + } + }, + "@dicebear/adventurer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/adventurer/-/adventurer-7.0.1.tgz", + "integrity": "sha512-eqbHHAQO8HjG8YNMl8xgklxphC7HvfDtqVr1rkJWP98e7r2AdQpu0cPYIOZPV4uv9gxl1ncaErQjdjvIvFRGiA==", + "requires": {} + }, + "@dicebear/adventurer-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/adventurer-neutral/-/adventurer-neutral-7.0.1.tgz", + "integrity": "sha512-dZfyaUFS8qQv7Lv+OXNTHVkercDCh+VqGSJU8jIf3FFbtFbFF79FXZJwJ8V3+pr0xKcZWa8i+8hXLtU3gqZ18g==", + "requires": {} + }, + "@dicebear/avataaars": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/avataaars/-/avataaars-7.0.1.tgz", + "integrity": "sha512-U7JJLDFJsbVyQl3j1SqtTxi5h+I5JXL8CGfwAOPtQTnk/tKQFXM9WF/zdHegtxbxYAxQaYJtyprdwTJHx5ELnw==", + "requires": {} + }, + "@dicebear/avataaars-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/avataaars-neutral/-/avataaars-neutral-7.0.1.tgz", + "integrity": "sha512-e3XwK3xup4ifJ/BUNjR5rcrw9982SC75UTJlPsKuuOM/Lwx3MtUe3+dqeDSyYbrC7KoWespX70oDZK1+2dBQFw==", + "requires": {} + }, + "@dicebear/big-ears": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/big-ears/-/big-ears-7.0.1.tgz", + "integrity": "sha512-ITI0IQCwdn5s5/kUrNdO488TQvZdiCljnzKpqbQ1hqfsxZ0C+eZs+cudZ0bqLftYxM+WBvmaJwrh3pXNAz1h+w==", + "requires": {} + }, + "@dicebear/big-ears-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/big-ears-neutral/-/big-ears-neutral-7.0.1.tgz", + "integrity": "sha512-2QK9HVmApoGFLi3ONW9mh0Tk/PPyHx9rvzUvcT5H/mb80ooBqIVMPYYq4rVlGVP6wAtsNHdoxzzlKja0DG+vvQ==", + "requires": {} + }, + "@dicebear/big-smile": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/big-smile/-/big-smile-7.0.1.tgz", + "integrity": "sha512-hVAhUMZ0LUhMFvtmUDR8GU7v2ufl5pOcVPiVSC3oV8nyywFp7s1ZqYGhi6rBCEG3qsMR54JfMFWkjV88j4Yrmg==", + "requires": {} + }, + "@dicebear/bottts": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/bottts/-/bottts-7.0.1.tgz", + "integrity": "sha512-k0adSvnT9+gFDO7/Cmts9TM3CSWYrZrxZe1WpELjTvwe4QOqdn3LgrYR9JXU/2hRz3GaXtP02SHNd85CkadYVw==", + "requires": {} + }, + "@dicebear/bottts-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/bottts-neutral/-/bottts-neutral-7.0.1.tgz", + "integrity": "sha512-1T1NEKAEvqyGlUprkO1Q1btITZnMBiCP5YeCy6wYyM7qJsPVDSySsjASJ1j/+IZFi8ePgWReFIbigFiHdo7iLA==", + "requires": {} + }, + "@dicebear/collection": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/collection/-/collection-7.0.1.tgz", + "integrity": "sha512-Y5xzjU2hiklYUkqsSr5VBpVPG++iUUTm1UDJLPM+iXg3lMF3PQuifXoaAxcuoBvvnKfJKNHf5wP1Bq6nRUl4NA==", + "requires": { + "@dicebear/adventurer": "7.0.1", + "@dicebear/adventurer-neutral": "7.0.1", + "@dicebear/avataaars": "7.0.1", + "@dicebear/avataaars-neutral": "7.0.1", + "@dicebear/big-ears": "7.0.1", + "@dicebear/big-ears-neutral": "7.0.1", + "@dicebear/big-smile": "7.0.1", + "@dicebear/bottts": "7.0.1", + "@dicebear/bottts-neutral": "7.0.1", + "@dicebear/croodles": "7.0.1", + "@dicebear/croodles-neutral": "7.0.1", + "@dicebear/fun-emoji": "7.0.1", + "@dicebear/icons": "7.0.1", + "@dicebear/identicon": "7.0.1", + "@dicebear/initials": "7.0.1", + "@dicebear/lorelei": "7.0.1", + "@dicebear/lorelei-neutral": "7.0.1", + "@dicebear/micah": "7.0.1", + "@dicebear/miniavs": "7.0.1", + "@dicebear/notionists": "7.0.1", + "@dicebear/notionists-neutral": "7.0.1", + "@dicebear/open-peeps": "7.0.1", + "@dicebear/personas": "7.0.1", + "@dicebear/pixel-art": "7.0.1", + "@dicebear/pixel-art-neutral": "7.0.1", + "@dicebear/rings": "7.0.1", + "@dicebear/shapes": "7.0.1", + "@dicebear/thumbs": "7.0.1" + } + }, + "@dicebear/converter": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/converter/-/converter-7.0.1.tgz", + "integrity": "sha512-CEIF6ZKi1FAE9kW10FvuPUjA6HLi+LcuB/GRFct/Bv28llzTel9xwbmfOEa1aIM8Nnp8BuT4U7tBIytksf+ptw==", + "requires": { + "@types/json-schema": "^7.0.11", + "tmp-promise": "^3.0.3" + } + }, + "@dicebear/core": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/core/-/core-7.0.1.tgz", + "integrity": "sha512-jaJG693c+myLocgG3kKXdHa+WJ+S6OcD31SEr9Oby7hhOzALQYD+LcJ15oBWwI7SLHJcGPYTOLyx2eDr8YhXCQ==", + "requires": { + "@dicebear/converter": "7.0.1", + "@types/json-schema": "^7.0.11" + } + }, + "@dicebear/croodles": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/croodles/-/croodles-7.0.1.tgz", + "integrity": "sha512-uauBTUvKFvsiaT+LWYKCEboEeOJy2Pk055nsdczi13UgHHfj+Qvy0/ky/uzYn+WC/1gewqQ6w/yS1WfpgPtIpg==", + "requires": {} + }, + "@dicebear/croodles-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/croodles-neutral/-/croodles-neutral-7.0.1.tgz", + "integrity": "sha512-u09YylowZcbSAVyKJ4I8BCo1ehluqg3onYCclx++8mOWcEo+XGsGKIeN7osayaflNY/qtA9Jt2JsPgiS8KpQ5A==", + "requires": {} + }, + "@dicebear/fun-emoji": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/fun-emoji/-/fun-emoji-7.0.1.tgz", + "integrity": "sha512-oJj5sb4rakro4e0lZTCkcKkiClHxDWr6+NWTwoU5L1HYRkXV6ngk4s7xSdOrYBQpYjLhdu+Lpx1VHYNpLUu2vg==", + "requires": {} + }, + "@dicebear/icons": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/icons/-/icons-7.0.1.tgz", + "integrity": "sha512-juHS4feScGCz4YdiwjxR60RJ2G7Z6W+tdUqNHN9ufMvY/FpJTfrQvzvrJfJfc84QZwIrqI/96WV3JIBEIO2AwQ==", + "requires": {} + }, + "@dicebear/identicon": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/identicon/-/identicon-7.0.1.tgz", + "integrity": "sha512-9W9pqqhvpMsZmOkjuLwlw0iift56A3VFq7eNpJPB1mm6gytfqgxozgOVLDFgug9VXgUVI2Jrk/XnXGIFVIeVQA==", + "requires": {} + }, + "@dicebear/initials": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/initials/-/initials-7.0.1.tgz", + "integrity": "sha512-zCI6fky4odM5ezl/GlhcSdnu+oNfmBbIghFB5NzgB/wV5nHmw2okONRC+Mgmxv8P8EpFb9z5hEOnh8xwW8htow==", + "requires": {} + }, + "@dicebear/lorelei": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/lorelei/-/lorelei-7.0.1.tgz", + "integrity": "sha512-3pyI2JF70PlqZUZEs5pVxmQWDJ2/bWmGG/iFtwsEh9HivtF8Zon4Er0NrsEoiKDvScyY4VGwl4LyUBc8JvNb9w==", + "requires": {} + }, + "@dicebear/lorelei-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/lorelei-neutral/-/lorelei-neutral-7.0.1.tgz", + "integrity": "sha512-4XaqE5v1dhE4TYrKSGG/VNUFqA31ADlqOnr6bd27E5MnaJLlY8ZAm3sue7EI9kEJ/i5KYov+Q4uS7JNDA5+cag==", + "requires": {} + }, + "@dicebear/micah": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/micah/-/micah-7.0.1.tgz", + "integrity": "sha512-zHnEewRaREZGNTqnlZiSoha/wNFxEsVQ3E5QYpe9KB3rcLW4CVUgFAHjb449vniG6NfsAWzyAkOfhy4N6Zzw0g==", + "requires": {} + }, + "@dicebear/miniavs": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/miniavs/-/miniavs-7.0.1.tgz", + "integrity": "sha512-v0n2JT0N1I7vAGoi4NQ98IKtn4JgjwD2Gkqq7l5QAy0jzl1v289FfTng0cOrthroMGBQ5jPS0wUyI0TluoFZRw==", + "requires": {} + }, + "@dicebear/notionists": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/notionists/-/notionists-7.0.1.tgz", + "integrity": "sha512-uEYBywouoUmvWtWARyeqAoQWX1DpvKL33dVxZ5K/ulYd/nXu9WHeFCPaP4tqE5II1XPS4khwneimFN6F1HA5NQ==", + "requires": {} + }, + "@dicebear/notionists-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/notionists-neutral/-/notionists-neutral-7.0.1.tgz", + "integrity": "sha512-jRA7u2UU1I9EXzqBZL3vwI/V7pdDT60yB3bBjyD5J4TznT7bMwt7qEm1eV31U37mn3H+LTFiPD9/4G6whiU3nQ==", + "requires": {} + }, + "@dicebear/open-peeps": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/open-peeps/-/open-peeps-7.0.1.tgz", + "integrity": "sha512-z1gXzd7XXLzSZpOrDPZmnJDXySCUEKmunRdRuWBSRrfIcVkgStZM0y8uuSrs3LpR8U2xcNJN9yO2wNRRWKmFEw==", + "requires": {} + }, + "@dicebear/personas": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/personas/-/personas-7.0.1.tgz", + "integrity": "sha512-6/nsrN7JIlMqdH7UwhrACVoCEM3IVHkpMq2I0A1JbhmYp240TI8kM5xYSF0KRdOyAPbyDH/TEB8Uld4LKE+3wQ==", + "requires": {} + }, + "@dicebear/pixel-art": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/pixel-art/-/pixel-art-7.0.1.tgz", + "integrity": "sha512-9f17Ze4533CbHp23E+gRSSZdCUAB5/PieRq6/ZtVOnPI/PfglhhKMKSxQIm/H267gE2Y+VVhHpUTwGlbAgh1Lg==", + "requires": {} + }, + "@dicebear/pixel-art-neutral": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/pixel-art-neutral/-/pixel-art-neutral-7.0.1.tgz", + "integrity": "sha512-+9RS0ohGDbPu+W2eGGk3LyzvFbM5qsuhCQR4qO7YIcvmODyNFPJ7eW9g/MHFVPLQXq60SCEUF5CEKY0xs4baUQ==", + "requires": {} + }, + "@dicebear/rings": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/rings/-/rings-7.0.1.tgz", + "integrity": "sha512-6wsLE4kbkBGeaaEA/afIV0eNYYfIVXo60XgApJA7JdcwyvdTa9LE5Wcp2VBEsZYXdsT9Ml7BC4er/QyMqCayUw==", + "requires": {} + }, + "@dicebear/shapes": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/shapes/-/shapes-7.0.1.tgz", + "integrity": "sha512-/ol+SazDlJYYe5pYaqKcnYDBjux+2Ny57hIrkHhonV0z4ny3Pq6c4Lq+hN3MnTBpKJszCXLrSP3uCbSQpjnkOg==", + "requires": {} + }, + "@dicebear/thumbs": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@dicebear/thumbs/-/thumbs-7.0.1.tgz", + "integrity": "sha512-eQYVJ8NN9buPfbd2Va0fY8sHRq9n1d7FJt/dL9xwimRGlpWh9lqS6gcHazuSHhSgnRHsHLANEiyboIcyhWh2Hg==", + "requires": {} + }, "@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -31852,7 +33616,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/@orbs-network/ton-access/-/ton-access-2.3.3.tgz", "integrity": "sha512-b1miCPts7wBG9JKYgzXIRZQm/LMy5Uk1mNK8NzlcXHL3HRHJkkFbuYJGuj3IkWCiIicW3Ipp4sYnn3Fwo4oB0g==", - "dev": true, "requires": { "isomorphic-fetch": "^3.0.0" } @@ -32357,6 +34120,15 @@ "dev": true, "requires": {} }, + "@tailwindcss/forms": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz", + "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==", + "dev": true, + "requires": { + "mini-svg-data-uri": "^1.2.3" + } + }, "@tailwindcss/typography": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", @@ -32379,10 +34151,34 @@ } } }, - "@ton-community/blueprint": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@ton-community/blueprint/-/blueprint-0.12.0.tgz", - "integrity": "sha512-QytcjOQCKtmaseEuEeuBGiKuQ649nwXGw4U3aGw7zz/SOd3SidMoTKAK3KE2VL84L8WRlw9HZx6wumJUkWPF7Q==", + "@ton-community/func-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@ton-community/func-js/-/func-js-0.6.2.tgz", + "integrity": "sha512-5bewe8APG2TVgIPLUV5atQfAy+NtdjjGBfsWUeRdVUclzQ5H2wZ8aJsVNLiDBpKSNEKdOAP/1PownOFeodpQHg==", + "dev": true, + "requires": { + "@ton-community/func-js-bin": "0.4.4", + "arg": "^5.0.2" + }, + "dependencies": { + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + } + } + }, + "@ton-community/func-js-bin": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@ton-community/func-js-bin/-/func-js-bin-0.4.4.tgz", + "integrity": "sha512-zCSVXmh+rFMgouzTbWkSVDIt1Z5i36u9rws/Kuqn89/a0vhA1aEoJJ3oJypz0TjWKJQveU4doJsPlqu7UT2zkw==", + "dev": true + }, + "@ton/blueprint": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@ton/blueprint/-/blueprint-0.14.0.tgz", + "integrity": "sha512-xBMKulfpKDVIjfBRhbrms++QSPl0/jxwOZU4mrF7WjaoaNoCK0hIT9p8X+rWFmYUZsLSSbt2jUd/KYgS0dRbKw==", "dev": true, "requires": { "@orbs-network/ton-access": "^2.3.3", @@ -32406,46 +34202,60 @@ } } }, - "@ton-community/func-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@ton-community/func-js/-/func-js-0.6.2.tgz", - "integrity": "sha512-5bewe8APG2TVgIPLUV5atQfAy+NtdjjGBfsWUeRdVUclzQ5H2wZ8aJsVNLiDBpKSNEKdOAP/1PownOFeodpQHg==", - "dev": true, + "@ton/core": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@ton/core/-/core-0.53.0.tgz", + "integrity": "sha512-tB5RxXFS6Z/ivmsqMn/eebEZmkWXIAz+hS1PDZXhbBkcvnBTknZ12g2AFrZtXyuvpm8O6SbL15UI/3NgkyIWzQ==", "requires": { - "@ton-community/func-js-bin": "0.4.4", - "arg": "^5.0.2" - }, - "dependencies": { - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - } + "symbol.inspect": "1.0.1" } }, - "@ton-community/func-js-bin": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@ton-community/func-js-bin/-/func-js-bin-0.4.4.tgz", - "integrity": "sha512-zCSVXmh+rFMgouzTbWkSVDIt1Z5i36u9rws/Kuqn89/a0vhA1aEoJJ3oJypz0TjWKJQveU4doJsPlqu7UT2zkw==", - "dev": true + "@ton/crypto": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ton/crypto/-/crypto-3.2.0.tgz", + "integrity": "sha512-50RkwReEuV2FkxSZ8ht/x9+n0ZGtwRKGsJ0ay4I/HFhkYVG/awIIBQeH0W4j8d5lADdO5h01UtX8PJ8AjiejjA==", + "requires": { + "@ton/crypto-primitives": "2.0.0", + "jssha": "3.2.0", + "tweetnacl": "1.0.3" + } }, - "@ton-community/sandbox": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@ton-community/sandbox/-/sandbox-0.11.0.tgz", - "integrity": "sha512-3tlSprRBTSu9m0tJTC3cl4MXQep1vfNMPqk9+JAXSRJu9ToEvIUVpqO6MQNkbz9LkKDuOEBs5vyqT37DlKKcWw==", + "@ton/crypto-primitives": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ton/crypto-primitives/-/crypto-primitives-2.0.0.tgz", + "integrity": "sha512-wttiNClmGbI6Dfy/8oyNnsIV0b/qYkCJz4Gn4eP62lJZzMtVQ94Ko7nikDX1EfYHkLI1xpOitWpW+8ZuG6XtDg==", + "requires": { + "jssha": "3.2.0" + } + }, + "@ton/sandbox": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@ton/sandbox/-/sandbox-0.13.1.tgz", + "integrity": "sha512-8OpTc1AkA47zHqCh681jgAMY9TBUzWITvLLtRTT5L5CKgL5jPpJfL1QLiqosqzvkAXTJe3FY3fwYWjVq3kyS5w==", "dev": true, "requires": {} }, - "@ton-community/test-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@ton-community/test-utils/-/test-utils-0.3.0.tgz", - "integrity": "sha512-eCw1c6a0TcKwiYEA4fmzPq+7dJtUx0UFYu+UEoRznIxEOcpEb8Ssjb9yMeiJEzbtUVMCkhEtpztdKt75ngDRWg==", + "@ton/test-utils": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@ton/test-utils/-/test-utils-0.4.2.tgz", + "integrity": "sha512-fthY8Nrlmy8jnOl/vx6yjeKzzu62ZXMe7ej9Xg7rb4d3511V7dVQK+nw4YLSW5+dD/6WT03dFuNZXnuMYy5fHw==", "dev": true, "requires": { "node-inspect-extracted": "^2.0.0" } }, + "@ton/ton": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@ton/ton/-/ton-13.9.0.tgz", + "integrity": "sha512-bvDn9vv0rNsN/OH84Q4DKH3N21AD0MvTxXmnS0wPEOoU38F4mltXmA7an2SjaSgd9kAlsOSHa0EirkTie+Zitw==", + "requires": { + "axios": "^0.25.0", + "dataloader": "^2.0.0", + "symbol.inspect": "1.0.1", + "teslabot": "^1.3.0", + "zod": "^3.21.4" + } + }, "@tonconnect/isomorphic-eventsource": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@tonconnect/isomorphic-eventsource/-/isomorphic-eventsource-0.0.1.tgz", @@ -32468,7 +34278,6 @@ "version": "2.2.6", "resolved": "https://registry.npmjs.org/@tonconnect/protocol/-/protocol-2.2.6.tgz", "integrity": "sha512-kyoDz5EqgsycYP+A+JbVsAUYHNT059BCrK+m0pqxykMODwpziuSAXfwAZmHcg8v7NB9VKYbdFY55xKeXOuEd0w==", - "dev": true, "requires": { "tweetnacl": "^1.0.3", "tweetnacl-util": "^0.15.1" @@ -32485,6 +34294,45 @@ "@tonconnect/protocol": "^2.2.5" } }, + "@tonconnect/ui": { + "version": "2.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tonconnect/ui/-/ui-2.0.0-beta.6.tgz", + "integrity": "sha512-qgQXCjP0qR9vPuqohZ2wHnpK4LBGqtizFqCx7AO/Xu3XWMmJI9bXSI5rZ7EpKVpW8AvrSD/5X1yC7FIcanj0Kg==", + "requires": { + "@tonconnect/sdk": "^3.0.0-beta.3", + "classnames": "^2.3.2", + "deepmerge": "^4.2.2", + "ua-parser-js": "^1.0.35" + }, + "dependencies": { + "@tonconnect/isomorphic-eventsource": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@tonconnect/isomorphic-eventsource/-/isomorphic-eventsource-0.0.2.tgz", + "integrity": "sha512-B4UoIjPi0QkvIzZH5fV3BQLWrqSYABdrzZQSI9sJA9aA+iC0ohOzFwVVGXanlxeDAy1bcvPbb29f6sVUk0UnnQ==", + "requires": { + "eventsource": "^2.0.2" + } + }, + "@tonconnect/isomorphic-fetch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@tonconnect/isomorphic-fetch/-/isomorphic-fetch-0.0.3.tgz", + "integrity": "sha512-jIg5nTrDwnite4fXao3dD83eCpTvInTjZon/rZZrIftIegh4XxyVb5G2mpMqXrVGk1e8SVXm3Kj5OtfMplQs0w==", + "requires": { + "node-fetch": "^2.6.9" + } + }, + "@tonconnect/sdk": { + "version": "3.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@tonconnect/sdk/-/sdk-3.0.0-beta.3.tgz", + "integrity": "sha512-W2g75EZnD+HtG5r5VH4t3OYoFNQEgS03k6QeRU7n/jvR1maMvxHAdWIw1gOwwDP966Gh6plTxPSNOCDjS6onMg==", + "requires": { + "@tonconnect/isomorphic-eventsource": "^0.0.2", + "@tonconnect/isomorphic-fetch": "^0.0.3", + "@tonconnect/protocol": "^2.2.6" + } + } + } + }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -32872,9 +34720,9 @@ "integrity": "sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==" }, "@types/web-bluetooth": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz", - "integrity": "sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==" + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" }, "@types/yargs": { "version": "17.0.31", @@ -33459,13 +35307,13 @@ "dev": true }, "@vueuse/core": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.5.0.tgz", - "integrity": "sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz", + "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==", "requires": { - "@types/web-bluetooth": "^0.0.18", - "@vueuse/metadata": "10.5.0", - "@vueuse/shared": "10.5.0", + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.6.1", + "@vueuse/shared": "10.6.1", "vue-demi": ">=0.14.6" }, "dependencies": { @@ -33489,14 +35337,14 @@ } }, "@vueuse/metadata": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.5.0.tgz", - "integrity": "sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==" + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz", + "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==" }, "@vueuse/shared": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.5.0.tgz", - "integrity": "sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz", + "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==", "requires": { "vue-demi": ">=0.14.6" }, @@ -33667,6 +35515,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "peer": true }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, "abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -33933,6 +35787,26 @@ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, "assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -34017,7 +35891,6 @@ "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dev": true, "requires": { "follow-redirects": "^1.14.7" } @@ -34194,6 +36067,12 @@ "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", "dev": true }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -34226,6 +36105,94 @@ "wcwidth": "^1.0.1" } }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "requires": { + "resolve": "^1.17.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, "browserslist": { "version": "4.22.1", "requires": { @@ -34280,9 +36247,31 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "buffer-polyfill": { + "version": "npm:buffer@6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, "builtin-modules": { "version": "3.3.0" }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, "builtins": { "version": "5.0.1", "dev": true, @@ -34541,6 +36530,16 @@ "ci-info": { "version": "3.9.0" }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "citty": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.4.tgz", @@ -34555,6 +36554,11 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, "clean-regexp": { "version": "1.0.0", "dev": true, @@ -34610,9 +36614,9 @@ } }, "cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true }, "cli-width": { @@ -34779,6 +36783,12 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==" }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -34794,6 +36804,12 @@ "upper-case": "^2.0.2" } }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -34864,6 +36880,51 @@ "readable-stream": "^3.4.0" } }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -34898,6 +36959,25 @@ "which": "^2.0.1" } }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, "css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -35122,18 +37202,39 @@ "d.d0rich.me": { "version": "file:apps/d.d0rich.me", "requires": { - "@d0rich/contracts": "*", + "@d0rich/esprit-design": "*", + "@d0rich/ton-contracts": "*", + "@dicebear/collection": "^7.0.1", + "@dicebear/core": "^7.0.1", + "@orbs-network/ton-access": "^2.3.3", + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/typography": "^0.5.10", + "@ton/core": "^0.53.0", + "@ton/ton": "^13.9.0", + "@tonconnect/ui": "^2.0.0-beta.6", "@tsconfig/node18": "^18.2.2", "@types/jsdom": "^21.1.3", "@types/node": "^18.18.5", "@vitejs/plugin-vue": "^4.4.0", "@vue/test-utils": "^2.4.1", "@vue/tsconfig": "^0.4.0", + "@vueuse/core": "^10.6.1", + "autoprefixer": "^10.4.16", + "consola": "^3.2.3", + "dateformat": "^5.0.3", "jsdom": "^22.1.0", "npm-run-all2": "^6.1.1", "pinia": "^2.1.7", + "postcss": "^8.4.31", + "rehype-stringify": "^10.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "strip-markdown": "^6.0.0", + "tailwindcss": "^3.3.5", "typescript": "~5.2.0", + "unified": "^11.0.4", "vite": "^4.4.11", + "vite-plugin-node-polyfills": "^0.16.0", "vitest": "^0.34.6", "vue": "^3.3.4", "vue-router": "^4.2.5", @@ -35208,6 +37309,57 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, + "mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "requires": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "requires": { + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "requires": { + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" + }, "p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", @@ -35245,12 +37397,54 @@ "react-is": "^18.0.0" } }, + "remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + } + }, + "remark-rehype": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.0.0.tgz", + "integrity": "sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==", + "requires": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, "tinypool": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", "dev": true }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + }, "vite-node": { "version": "0.34.6", "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", @@ -35849,8 +38043,7 @@ "dataloader": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", - "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", - "dev": true + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==" }, "date-time": { "version": "3.1.0", @@ -36032,6 +38225,16 @@ "dequal": { "version": "2.0.3" }, + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "design.d0rich.me": { "version": "file:apps/design.d0rich.me", "requires": { @@ -36105,6 +38308,25 @@ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, "dir-glob": { "version": "3.0.1", "requires": { @@ -36133,6 +38355,12 @@ "entities": "^4.2.0" } }, + "domain-browser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "dev": true + }, "domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -36272,6 +38500,29 @@ "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==", "dev": true }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, "emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -37001,14 +39252,22 @@ "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "peer": true + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "eventsource": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "dev": true + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } }, "execa": { "version": "5.1.1", @@ -37202,6 +39461,15 @@ "path-exists": "^4.0.0" } }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "requires": { + "micromatch": "^4.0.2" + } + }, "find-yarn-workspace-root2": { "version": "1.2.16", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", @@ -37233,8 +39501,7 @@ "follow-redirects": { "version": "1.15.3", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "dev": true + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" }, "for-each": { "version": "0.3.3", @@ -37654,11 +39921,32 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, "hash-sum": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "hasown": { "version": "2.0.0", "requires": { @@ -38006,6 +40294,17 @@ "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "dev": true }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", @@ -38097,6 +40396,12 @@ "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==" }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, "https-proxy-agent": { "version": "7.0.2", "requires": { @@ -38640,12 +40945,17 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dev": true, "requires": { "node-fetch": "^2.6.1", "whatwg-fetch": "^3.4.1" } }, + "isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", + "dev": true + }, "istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -39595,6 +41905,18 @@ "json-schema-traverse": { "version": "0.4.1" }, + "json-stable-stringify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.0.tgz", + "integrity": "sha512-zfA+5SuwYN2VWqN1/5HZaDzQKLJHaBVMZIIM+wuYjdptkaQsqzDdqjqf+lZZJUuJq1aanHiY8LhH8LmH+qBYJA==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + } + }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "devOptional": true @@ -39614,6 +41936,12 @@ "universalify": "^2.0.0" } }, + "jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true + }, "jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -39634,8 +41962,7 @@ "jssha": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jssha/-/jssha-3.2.0.tgz", - "integrity": "sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==", - "dev": true + "integrity": "sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==" }, "jwa": { "version": "1.4.1", @@ -39683,6 +42010,15 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -40218,6 +42554,17 @@ "blueimp-md5": "^2.10.0" } }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "mdast-util-definitions": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", @@ -41624,6 +43971,24 @@ "picomatch": "^2.3.1" } }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, "mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -41649,6 +44014,24 @@ "version": "1.0.1", "dev": true }, + "mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, "minimatch": { "version": "3.1.2", "requires": { @@ -42274,6 +44657,58 @@ "node-releases": { "version": "2.0.13" }, + "node-stdlib-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", + "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", + "dev": true, + "requires": { + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.11.0", + "domain-browser": "^4.22.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, "non-layered-tidy-tree-layout": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", @@ -42909,6 +45344,12 @@ "wcwidth": "^1.0.1" } }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -42976,6 +45417,12 @@ "netmask": "^2.0.2" } }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -42991,6 +45438,19 @@ "callsites": "^3.0.0" } }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, "parse-entities": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", @@ -43066,6 +45526,80 @@ "tslib": "^2.0.3" } }, + "patch-package": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", + "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "dev": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true + } + } + }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -43134,6 +45668,19 @@ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -43817,6 +46364,12 @@ } } }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -43911,6 +46464,28 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -43988,6 +46563,12 @@ "side-channel": "^1.0.4" } }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -44058,6 +46639,16 @@ "safe-buffer": "^5.1.0" } }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -44446,6 +47037,16 @@ } } }, + "rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "requires": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + } + }, "remark-emoji": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", @@ -44915,6 +47516,16 @@ "glob": "^7.1.3" } }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "robust-predicates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", @@ -45185,11 +47796,27 @@ "has-property-descriptors": "^1.0.0" } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "shebang-command": { "version": "2.0.0", "requires": { @@ -45595,6 +48222,28 @@ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==" }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, "stream-transform": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", @@ -45750,6 +48399,14 @@ "acorn": "^8.10.0" } }, + "strip-markdown": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-markdown/-/strip-markdown-6.0.0.tgz", + "integrity": "sha512-mSa8FtUoX3ExJYDkjPUTC14xaBAn4Ik5GPQD45G5E2egAmeV3kHgVSTfIoSDggbF6Pk9stahVgqsLCNExv6jHw==", + "requires": { + "@types/mdast": "^4.0.0" + } + }, "style-dictionary-esm": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/style-dictionary-esm/-/style-dictionary-esm-1.8.4.tgz", @@ -45900,8 +48557,7 @@ "symbol.inspect": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol.inspect/-/symbol.inspect-1.0.1.tgz", - "integrity": "sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==", - "dev": true + "integrity": "sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==" }, "tailwind-config-viewer": { "version": "1.7.3", @@ -46084,8 +48740,7 @@ "teslabot": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/teslabot/-/teslabot-1.5.0.tgz", - "integrity": "sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==", - "dev": true + "integrity": "sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==" }, "test-exclude": { "version": "6.0.0", @@ -46127,6 +48782,15 @@ "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", "dev": true }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, "tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", @@ -46162,6 +48826,24 @@ "os-tmpdir": "~1.0.2" } }, + "tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "requires": { + "tmp": "^0.2.0" + }, + "dependencies": { + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + } + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -46182,19 +48864,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, - "ton": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/ton/-/ton-13.6.1.tgz", - "integrity": "sha512-CZlFsmO+l+uPSI2zgnUd8zCS5XuWnUSFRVUjRGl5X5fKXYnjaVba4vMaIyFTJwel+uEMnolGMSlNP8DAa9mfVg==", - "dev": true, - "requires": { - "axios": "^0.25.0", - "dataloader": "^2.0.0", - "symbol.inspect": "1.0.1", - "teslabot": "^1.3.0", - "zod": "^3.21.4" - } - }, "ton-core": { "version": "0.51.0", "resolved": "https://registry.npmjs.org/ton-core/-/ton-core-0.51.0.tgz", @@ -46431,6 +49100,12 @@ } } }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, "tty-table": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.3.tgz", @@ -46511,14 +49186,12 @@ "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "tweetnacl-util": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" }, "type-check": { "version": "0.4.0", @@ -46596,6 +49269,11 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" }, + "ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==" + }, "ufo": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", @@ -47247,6 +49925,24 @@ "punycode": "^2.1.0" } }, + "url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, "url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -47476,6 +50172,18 @@ "vue-tsc": "^1.8.20" } }, + "vite-plugin-node-polyfills": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.16.0.tgz", + "integrity": "sha512-uj1ymOmk7TliMxiivmXokpMY5gVMBpFPSZPLQSCv/LjkJGGKwyLjpbFL64dbYZEdFSUQ3tM7pbrxNh25yvhqOA==", + "dev": true, + "requires": { + "@rollup/plugin-inject": "^5.0.5", + "buffer-polyfill": "npm:buffer@^6.0.3", + "node-stdlib-browser": "^1.2.0", + "process": "^0.11.10" + } + }, "vitest": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.30.1.tgz", @@ -47510,6 +50218,12 @@ "why-is-node-running": "^2.2.2" } }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, "vscode-jsonrpc": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", @@ -47805,8 +50519,7 @@ "whatwg-fetch": { "version": "3.6.19", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", - "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", - "dev": true + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" }, "whatwg-mimetype": { "version": "3.0.0", @@ -47944,6 +50657,12 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "xxhashjs": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", @@ -48045,8 +50764,7 @@ "zod": { "version": "3.22.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "dev": true + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==" }, "zwitch": { "version": "2.0.4", diff --git a/package.json b/package.json index b97f5aec..a72a42bb 100644 --- a/package.json +++ b/package.json @@ -3,14 +3,15 @@ "private": true, "workspaces": [ "apps/*", - "packages/*", - "contracts" + "packages/*" ], "scripts": { - "prepare": "turbo run prepare", - "generate": "turbo run generate", - "build": "turbo run build", + "postinstall": "patch-package", + "prepare:all": "turbo run prepare", + "generate:all": "turbo run generate", + "build:all": "turbo run build", "dev:d0rich.me": "turbo run d0rich.me#dev", + "dev:d.d0rich.me": "turbo run d.d0rich.me#dev", "dev:design.d0rich.me": "turbo run design.d0rich.me#dev", "dev:d0xigen.d0rich.me": "turbo run d0xigen.d0rich.me#dev", "lint:js": "eslint --ext \".js,.ts,.vue\" --ignore-path .gitignore .", @@ -33,10 +34,11 @@ "eslint-plugin-unicorn": "^49.0.0", "eslint-plugin-vitest": "^0.1.4", "jest": "^29.5.0", - "ts-jest": "^29.0.5", - "ts-node": "^10.9.1", + "patch-package": "^8.0.0", "playwright": "^1.32.1", "prettier": "^2.8.4", + "ts-jest": "^29.0.5", + "ts-node": "^10.9.1", "turbo": "latest", "typescript": "^5.0.2", "vitest": "^0.30.1", diff --git a/packages/esprit-design/package.json b/packages/esprit-design/package.json index 262d9f4e..157b21c1 100644 --- a/packages/esprit-design/package.json +++ b/packages/esprit-design/package.json @@ -12,7 +12,8 @@ "exports": { ".": { "import": "./dist/esprit-design.js", - "require": "./dist/esprit-design.umd.cjs" + "require": "./dist/esprit-design.umd.cjs", + "types": "./dist/index.d.ts" }, "./style.css": "./dist/style.css", "./tailwind.config": "./tailwind.config.js", diff --git a/packages/esprit-design/src/components/content/DQuote.vue b/packages/esprit-design/src/components/content/DQuote.vue index 41e66726..7550c7bf 100644 --- a/packages/esprit-design/src/components/content/DQuote.vue +++ b/packages/esprit-design/src/components/content/DQuote.vue @@ -65,7 +65,7 @@ defineProps({ clip-path: var(--shape-bubble--left__outline); } -.d-blockquote--right .d-blockquote__shape { +.d-blockquote--left .d-blockquote__shape { clip-path: var(--shape-bubble--left); } diff --git a/packages/esprit-design/src/composables/router.ts b/packages/esprit-design/src/composables/router.ts index d313f768..0d96a1b3 100644 --- a/packages/esprit-design/src/composables/router.ts +++ b/packages/esprit-design/src/composables/router.ts @@ -6,6 +6,7 @@ export interface LinkProps { readonly replace?: boolean readonly to?: RouteLocationRaw readonly exact?: boolean + readonly tag?: string } export function useLink(props: LinkProps) { @@ -33,25 +34,33 @@ export function useLink(props: LinkProps) { ) }) - if (typeof NuxtLink !== 'undefined') { - return { - isLink, - isExternalLink, - linkComponent: NuxtLink + if (isLink.value) { + if (typeof NuxtLink !== 'undefined') { + return { + isLink, + isExternalLink, + linkComponent: NuxtLink + } + } + + if (typeof RouterLink !== 'string') { + return { + isLink, + isExternalLink, + linkComponent: RouterLink + } } - } - if (typeof RouterLink !== 'string') { return { isLink, isExternalLink, - linkComponent: RouterLink + linkComponent: 'a' } } return { isLink, isExternalLink, - linkComponent: 'a' + linkComponent: props.tag || 'span' } } diff --git a/contracts/.gitignore b/packages/ton-contracts/.gitignore similarity index 100% rename from contracts/.gitignore rename to packages/ton-contracts/.gitignore diff --git a/contracts/.prettierignore b/packages/ton-contracts/.prettierignore similarity index 100% rename from contracts/.prettierignore rename to packages/ton-contracts/.prettierignore diff --git a/contracts/README.md b/packages/ton-contracts/README.md similarity index 100% rename from contracts/README.md rename to packages/ton-contracts/README.md diff --git a/packages/ton-contracts/build-scripts/new-imports.ts b/packages/ton-contracts/build-scripts/new-imports.ts new file mode 100644 index 00000000..52b0368f --- /dev/null +++ b/packages/ton-contracts/build-scripts/new-imports.ts @@ -0,0 +1,21 @@ +/* eslint-disable */ +import type { + TupleItem, + ContractProvider, + Sender, + Contract, + ContractABI, + ABIType, + ABIGetter, + ABIReceiver, + DictionaryValue +} from '@ton/core' +import { Cell } from '@ton/core/dist/boc/Cell' +import { Slice } from '@ton/core/dist/boc/Slice' +import { Address } from '@ton/core/dist/address/Address' +import { Builder, beginCell } from '@ton/core/dist/boc/Builder' +import { ComputeError } from '@ton/core/dist/contract/ComputeError' +import { contractAddress } from '@ton/core/dist/address/contractAddress' +import { TupleReader } from '@ton/core/dist/tuple/reader' +import { TupleBuilder } from '@ton/core/dist/tuple/builder' +import { Dictionary } from '@ton/core/dist/dict/Dictionary' diff --git a/contracts/build-scripts/patch-wrappers-imports.mjs b/packages/ton-contracts/build-scripts/patch-wrappers-imports.mjs similarity index 100% rename from contracts/build-scripts/patch-wrappers-imports.mjs rename to packages/ton-contracts/build-scripts/patch-wrappers-imports.mjs diff --git a/contracts/contracts/d_social_network_blog.tact b/packages/ton-contracts/contracts/d_social_network_blog.tact similarity index 52% rename from contracts/contracts/d_social_network_blog.tact rename to packages/ton-contracts/contracts/d_social_network_blog.tact index 8624d5bd..04d2fa02 100644 --- a/contracts/contracts/d_social_network_blog.tact +++ b/packages/ton-contracts/contracts/d_social_network_blog.tact @@ -1,4 +1,5 @@ import "@stdlib/deploy"; +import "./lib/trait_nft_item.tact"; import "./lib/trait_nft_collection.tact"; import "./lib/trait_nft_collection_royalty_extention.tact"; import "./lib/trait_personal_fees.tact"; @@ -6,40 +7,51 @@ import "./lib/trait_storage_controller.tact"; import "./messages_d.tact"; import "./d_social_network_post.tact"; -contract DSocialNetworkBlog with NftCollection, NftCollectionRoyaltyExtention, PersonalFees, StorageController { - blog_id: Int; - next_item_index: Int as uint32 = 0; - owner: Address; +contract DSocialNetworkBlog with NftItem, NftCollection, NftCollectionRoyaltyExtention, PersonalFees, StorageController { personal_fees_destination: Address; - master_contract: Address; - royalty_params: RoyaltyParams; + + // NftItem + item_index: Int; + collection_address: Address; // Master contract + owner: Address; is_initialized: Bool = false; + individual_content: NftMetadata; + + // NftCollection + next_item_index: Int as uint32 = 0; collection_content: NftCollectionMetadata; + royalty_params: RoyaltyParams; + const CREATE_POST_FEE: Int = ton("0.1"); - init(blog_id: Int, master_contract: Address, personal_fees_destination: Address){ - self.blog_id = blog_id; - self.master_contract = master_contract; - self.owner = master_contract; + init(item_index: Int, collection_address: Address, personal_fees_destination: Address){ + self.item_index = item_index; + self.collection_address = collection_address; + self.owner = collection_address; self.personal_fees_destination = personal_fees_destination; self.royalty_params = RoyaltyParams{ - numerator: 13, + numerator: 3, denominator: 100, - destination: master_contract + destination: self.owner }; self.collection_content = NftCollectionMetadata { image: "", name: "", description: "" }; + self.individual_content = NftMetadata { + image: "", + name: "", + description: "" + }; } get fun get_blog_info(): BlogInfo { return BlogInfo{ - id: self.blog_id, + id: self.item_index, owner: self.owner, - master_contract: self.master_contract, + master_contract: self.collection_address, collection_content: self.collection_content, is_initialized: self.is_initialized }; @@ -49,23 +61,15 @@ contract DSocialNetworkBlog with NftCollection, NftCollectionRoyaltyExtention, P return self.next_item_index; } - receive(msg: InitializeBlog) { - require(!self.is_initialized, "Blog is already initialized"); - self.requireOwner(); - self.owner = msg.owner; - self.collection_content = msg.collection_content; - self.is_initialized = true; - self.sendExcessesTo( - self.calculateSendAmountToHoldEnoughTonForStorage(), - self.owner, - msg.query_id - ); - } - receive(msg: EditBlogMetadata) { - self.requireInitialization(); + require(self.is_initialized, "Blog is not initialized"); self.requireOwner(); self.collection_content = msg.new_metadata; + self.individual_content = NftMetadata { + image: msg.new_metadata.image, + name: msg.new_metadata.name, + description: msg.new_metadata.description + }; self.sendExcessesTo( self.calculateSendAmountToHoldEnoughTonForStorage(), self.owner, @@ -73,10 +77,28 @@ contract DSocialNetworkBlog with NftCollection, NftCollectionRoyaltyExtention, P ); } - fun requireInitialization() { - require(self.is_initialized, "Blog is not initialized"); + // Initialize this contract as NFT item + + override fun onAfterUpdateNftItemMetadata() { + self.collection_content = NftCollectionMetadata{ + image: self.individual_content.image, + name: self.individual_content.name, + description: self.individual_content.description + }; + } + + // Transfer this contract as NFT item + + override fun calculateNftItemTransferValue(): Int { + return self.calculateSendAmountToHoldEnoughTonForStorage() - ton("0.03"); } + override fun onNftItemTransfer() { + self.royalty_params.destination = self.owner; + } + + // Mint NFT items (posts) + override fun getNftItemInit(item_index: Int): StateInit { return initOf DSocialNetworkPost( myAddress(), @@ -85,18 +107,16 @@ contract DSocialNetworkBlog with NftCollection, NftCollectionRoyaltyExtention, P ); } - override fun actionBeforeMinting() { + override fun onBeforeMintNft() { + self.requireOwner(); require(context().value + ton("0.05") >= self.CREATE_POST_FEE, "not enough funds to create a post"); } - override fun actionAfterMinting() { - let sb: StringBuilder = beginString(); - sb.append("D Blog Post Created by "); - sb.append(self.collection_content.name); - self.sendRemainingValueAsPersonalFee(sb.toString()); + override fun onAfterMintNft() { + self.sendPersonalFee(self.CREATE_POST_FEE, "D Blog Post created"); } override fun calculateNftItemInitialBalance(): Int { - return self.calculateSendAmountToHoldFeeFromRecieved(self.CREATE_POST_FEE); + return self.calculateSendAmountToHoldFeeFromRecieved(self.CREATE_POST_FEE + ton("0.05")); } } diff --git a/packages/ton-contracts/contracts/d_social_network_master.tact b/packages/ton-contracts/contracts/d_social_network_master.tact new file mode 100644 index 00000000..b580eb8e --- /dev/null +++ b/packages/ton-contracts/contracts/d_social_network_master.tact @@ -0,0 +1,77 @@ +import "@stdlib/deploy"; +import "@stdlib/ownable"; +import "./lib/trait_nft_collection.tact"; +import "./lib/trait_nft_collection_royalty_extention.tact"; +import "./lib/trait_accounting.tact"; +import "./lib/trait_personal_fees.tact"; +import "./lib/trait_storage_controller.tact"; +import "./messages_d.tact"; +import "./d_social_network_blog.tact"; + +contract DSocialNetworkMaster with NftCollection, NftCollectionRoyaltyExtention, Deployable, OwnableTransferable, Accounting, PersonalFees, StorageController { + version: String = "v1.2"; + owner: Address; + personal_fees_destination: Address; + + // NFT Collection + next_item_index: Int as uint32 = 0; + collection_content: NftCollectionMetadata; + royalty_params: RoyaltyParams; + + const CREATE_BLOG_FEE: Int = ton("0.5"); + + init() { + let ctx: Context = context(); + self.owner = ctx.sender; + self.personal_fees_destination = ctx.sender; + let name_sb: StringBuilder = beginString(); + name_sb.append("D Social Network Master "); + name_sb.append(self.version); + let description_sb: StringBuilder = beginString(); + description_sb.append("Master contract "); + description_sb.append(self.version); + description_sb.append(" for D Social Network, which is also NFT collection of blogs."); + self.collection_content = NftCollectionMetadata { + image: "https://d.d0rich.me/og/image.jpg", + name: name_sb.toString(), + description: description_sb.toString() + }; + self.royalty_params = RoyaltyParams{ + numerator: 7, + denominator: 100, + destination: self.owner + }; + } + + get fun get_version(): String { + return self.version; + } + + get fun get_blogs_count(): Int { + return self.next_item_index; + } + + get fun get_blog_address_by_index(item_index: Int): Address?{ + let initCode: StateInit = self.getNftItemInit(item_index); + return contractAddress(initCode); + } + + // Mint NFT items (blogs) + + override fun getNftItemInit(item_index: Int): StateInit { + return initOf DSocialNetworkBlog(item_index, myAddress(), self.personal_fees_destination); + } + + override fun onBeforeMintNft() { + require(context().value + ton("0.05") >= self.CREATE_BLOG_FEE, "not enough funds to create a blog"); + } + + override fun onAfterMintNft() { + self.sendPersonalFee(self.CREATE_BLOG_FEE, "D Blog created"); + } + + override fun calculateNftItemInitialBalance(): Int { + return self.calculateSendAmountToHoldFeeFromRecieved(self.CREATE_BLOG_FEE); + } + +} diff --git a/contracts/contracts/d_social_network_post.tact b/packages/ton-contracts/contracts/d_social_network_post.tact similarity index 100% rename from contracts/contracts/d_social_network_post.tact rename to packages/ton-contracts/contracts/d_social_network_post.tact diff --git a/contracts/contracts/imports/stdlib.fc b/packages/ton-contracts/contracts/imports/stdlib.fc similarity index 100% rename from contracts/contracts/imports/stdlib.fc rename to packages/ton-contracts/contracts/imports/stdlib.fc diff --git a/contracts/contracts/lib/messages_nft.tact b/packages/ton-contracts/contracts/lib/messages_nft.tact similarity index 100% rename from contracts/contracts/lib/messages_nft.tact rename to packages/ton-contracts/contracts/lib/messages_nft.tact diff --git a/contracts/contracts/lib/native_dict.tact b/packages/ton-contracts/contracts/lib/native_dict.tact similarity index 100% rename from contracts/contracts/lib/native_dict.tact rename to packages/ton-contracts/contracts/lib/native_dict.tact diff --git a/contracts/contracts/lib/tep64_serialization.tact b/packages/ton-contracts/contracts/lib/tep64_serialization.tact similarity index 100% rename from contracts/contracts/lib/tep64_serialization.tact rename to packages/ton-contracts/contracts/lib/tep64_serialization.tact diff --git a/contracts/contracts/lib/trait_accounting.tact b/packages/ton-contracts/contracts/lib/trait_accounting.tact similarity index 100% rename from contracts/contracts/lib/trait_accounting.tact rename to packages/ton-contracts/contracts/lib/trait_accounting.tact diff --git a/contracts/contracts/lib/trait_nft_collection.tact b/packages/ton-contracts/contracts/lib/trait_nft_collection.tact similarity index 95% rename from contracts/contracts/lib/trait_nft_collection.tact rename to packages/ton-contracts/contracts/lib/trait_nft_collection.tact index f94cc321..9d889951 100644 --- a/contracts/contracts/lib/trait_nft_collection.tact +++ b/packages/ton-contracts/contracts/lib/trait_nft_collection.tact @@ -29,10 +29,10 @@ trait NftCollection with Deployable, Ownable, Accounting { return individual_content; } - virtual fun actionBeforeMinting() { + virtual fun onBeforeMintNft() { } - virtual fun actionAfterMinting() { + virtual fun onAfterMintNft() { } virtual fun calculateNftItemInitialBalance(): Int { @@ -66,7 +66,7 @@ trait NftCollection with Deployable, Ownable, Accounting { receive(msg: MintNft){ require(self.next_item_index >= 0, "non-sequential NFTs"); - self.actionBeforeMinting(); + self.onBeforeMintNft(); let ctx: Context = context(); let nft_init: StateInit = self.getNftItemInit(self.next_item_index); send(SendParameters{ @@ -83,7 +83,7 @@ trait NftCollection with Deployable, Ownable, Accounting { data: nft_init.data }); self.next_item_index = self.next_item_index + 1; - self.actionAfterMinting(); + self.onAfterMintNft(); } // ===== Private Methods ===== // diff --git a/contracts/contracts/lib/trait_nft_collection_royalty_extention.tact b/packages/ton-contracts/contracts/lib/trait_nft_collection_royalty_extention.tact similarity index 100% rename from contracts/contracts/lib/trait_nft_collection_royalty_extention.tact rename to packages/ton-contracts/contracts/lib/trait_nft_collection_royalty_extention.tact diff --git a/contracts/contracts/lib/trait_nft_item.tact b/packages/ton-contracts/contracts/lib/trait_nft_item.tact similarity index 85% rename from contracts/contracts/lib/trait_nft_item.tact rename to packages/ton-contracts/contracts/lib/trait_nft_item.tact index 3758491f..f4ab8a11 100644 --- a/contracts/contracts/lib/trait_nft_item.tact +++ b/packages/ton-contracts/contracts/lib/trait_nft_item.tact @@ -13,7 +13,7 @@ trait NftItem with Deployable, Ownable, Accounting { // ===== Customizable functions ===== // - virtual fun serializeIndividualContent(): Cell { + virtual fun serializeNftItemIndividualContent(): Cell { let tep64Dict: Cell? = beginTep64Dict(); tep64Dict = storeTep64SnakeString(tep64Dict, "name", self.individual_content.name); tep64Dict = storeTep64SnakeString(tep64Dict, "description", self.individual_content.description); @@ -21,6 +21,18 @@ trait NftItem with Deployable, Ownable, Accounting { return buildTep64OnchainContent(tep64Dict!!); } + virtual fun onAfterUpdateNftItemMetadata() { + // empty + } + + virtual fun calculateNftItemTransferValue(): Int { + return self.calculateSendAmountToHoldEnoughTonForStorage(); + } + + virtual fun onNftItemTransfer() { + // empty + } + // --------- Get Function --------- // @@ -32,7 +44,7 @@ trait NftItem with Deployable, Ownable, Accounting { index: self.item_index, collection_address: self.collection_address, owner_address: self.owner, - individual_content: self.serializeIndividualContent() + individual_content: self.serializeNftItemIndividualContent() }; } @@ -44,6 +56,7 @@ trait NftItem with Deployable, Ownable, Accounting { self.is_initialized = true; self.owner = msg.owner; self.individual_content = msg.individual_content; + self.onAfterUpdateNftItemMetadata(); send(SendParameters{ to: self.owner, value: self.calculateSendAmountToHoldEnoughTonForStorage(), @@ -55,9 +68,10 @@ trait NftItem with Deployable, Ownable, Accounting { receive(msg: Transfer){ self.requireOwner(); require(self.is_initialized == true, "NFT Item is not initialized"); - let msgValue: Int = self.calculateSendAmountToHoldEnoughTonForStorage(); + let msgValue: Int = self.calculateNftItemTransferValue(); let ctx: Context = context(); - self.owner = msg.new_owner; // change current owner to the new_owner + self.owner = msg.new_owner; + self.onNftItemTransfer(); if (msg.forward_amount > 0) { send(SendParameters{ to: msg.new_owner, diff --git a/contracts/contracts/lib/trait_personal_fees.tact b/packages/ton-contracts/contracts/lib/trait_personal_fees.tact similarity index 100% rename from contracts/contracts/lib/trait_personal_fees.tact rename to packages/ton-contracts/contracts/lib/trait_personal_fees.tact diff --git a/contracts/contracts/lib/trait_storage_controller.tact b/packages/ton-contracts/contracts/lib/trait_storage_controller.tact similarity index 94% rename from contracts/contracts/lib/trait_storage_controller.tact rename to packages/ton-contracts/contracts/lib/trait_storage_controller.tact index e07900c0..34d7f3b0 100644 --- a/contracts/contracts/lib/trait_storage_controller.tact +++ b/packages/ton-contracts/contracts/lib/trait_storage_controller.tact @@ -18,6 +18,10 @@ message TopUp { trait StorageController with Ownable, Accounting { owner: Address; + get fun balance(): Int { + return myBalance(); + } + receive(msg: TopUp) {} receive(msg: Withdraw) { diff --git a/contracts/contracts/messages_d.tact b/packages/ton-contracts/contracts/messages_d.tact similarity index 71% rename from contracts/contracts/messages_d.tact rename to packages/ton-contracts/contracts/messages_d.tact index 86d68f59..cf315b83 100644 --- a/contracts/contracts/messages_d.tact +++ b/packages/ton-contracts/contracts/messages_d.tact @@ -2,19 +2,9 @@ import "./lib/messages_nft.tact"; // Master contract -message CreateBlog { - query_id: Int as uint64; - blog_metadata: NftCollectionMetadata; -} // Blog contract -message InitializeBlog { - query_id: Int as uint64; - owner: Address; - collection_content: NftCollectionMetadata; -} - message EditBlogMetadata { query_id: Int as uint64; new_metadata: NftCollectionMetadata; diff --git a/contracts/jest.config.ts b/packages/ton-contracts/jest.config.ts similarity index 100% rename from contracts/jest.config.ts rename to packages/ton-contracts/jest.config.ts diff --git a/contracts/package.json b/packages/ton-contracts/package.json similarity index 57% rename from contracts/package.json rename to packages/ton-contracts/package.json index af424e28..09cb61fa 100644 --- a/contracts/package.json +++ b/packages/ton-contracts/package.json @@ -1,5 +1,5 @@ { - "name": "@d0rich/contracts", + "name": "@d0rich/ton-contracts", "version": "0.0.1", "private": true, "scripts": { @@ -10,13 +10,13 @@ "patch:build-imports": "node ./build-scripts/patch-wrappers-imports.mjs" }, "devDependencies": { - "@ton-community/blueprint": "^0.12.0", - "@ton-community/sandbox": "^0.11.0", - "@ton-community/test-utils": "^0.3.0", + "@ton/blueprint": "^0.14.0", + "@ton/core": "^0.53.0", + "@ton/crypto": "^3.2.0", + "@ton/sandbox": "^0.13.1", + "@ton/test-utils": "^0.4.2", + "@ton/ton": "^13.9.0", "@types/jest": "^29.5.0", - "@types/node": "^20.2.5", - "ton": "~13.6.0", - "ton-core": "^0.51.0", - "ton-crypto": "^3.2.0" + "@types/node": "^20.2.5" } } diff --git a/contracts/scripts/deployDSocialNetworkMaster.ts b/packages/ton-contracts/scripts/deployDSocialNetworkMaster.ts similarity index 83% rename from contracts/scripts/deployDSocialNetworkMaster.ts rename to packages/ton-contracts/scripts/deployDSocialNetworkMaster.ts index f2eb374b..30406b74 100644 --- a/contracts/scripts/deployDSocialNetworkMaster.ts +++ b/packages/ton-contracts/scripts/deployDSocialNetworkMaster.ts @@ -1,5 +1,5 @@ -import { toNano } from 'ton-core' -import { NetworkProvider } from '@ton-community/blueprint' +import { toNano } from '@ton/core' +import { NetworkProvider } from '@ton/blueprint' import { DSocialNetworkMaster } from '../wrappers/DSocialNetworkMaster' export async function run(provider: NetworkProvider) { diff --git a/contracts/scripts/deployTestSocialNetwork.ts b/packages/ton-contracts/scripts/deployTestSocialNetwork.ts similarity index 86% rename from contracts/scripts/deployTestSocialNetwork.ts rename to packages/ton-contracts/scripts/deployTestSocialNetwork.ts index 85c74967..c0e001d2 100644 --- a/contracts/scripts/deployTestSocialNetwork.ts +++ b/packages/ton-contracts/scripts/deployTestSocialNetwork.ts @@ -1,11 +1,13 @@ -import { toNano } from 'ton-core' -import { NetworkProvider } from '@ton-community/blueprint' +import { NetworkProvider } from '@ton/blueprint' import { DSocialNetworkMaster } from '../wrappers/DSocialNetworkMaster' import { DSocialNetworkBlog, MintNft } from '../wrappers/DSocialNetworkBlog' import { DSocialNetworkPost } from '../wrappers/DSocialNetworkPost' import { getTestPostModel, - registerTestAccountMessage + createBlogMessage, + deployMasterFee, + createBlogFee, + createPostFee } from '../utils/test-fixtures' import { serializePostData } from '../utils/stub-post-serialization' @@ -16,7 +18,7 @@ export async function run(provider: NetworkProvider) { await dMaster.send( provider.sender(), { - value: toNano('0.1') + value: deployMasterFee }, { $$type: 'Deploy', @@ -28,8 +30,8 @@ export async function run(provider: NetworkProvider) { await dMaster.send( provider.sender(), - { value: toNano('1') }, - registerTestAccountMessage + { value: createBlogFee }, + createBlogMessage ) const blogAddress = await dMaster.getGetBlogAddressByIndex(0n) @@ -52,7 +54,7 @@ export async function run(provider: NetworkProvider) { await dBlog.send( provider.sender(), - { value: toNano('0.2') }, + { value: createPostFee }, createTestPostMessage ) diff --git a/packages/ton-contracts/tests/DSocialNetworkBlog.spec.ts b/packages/ton-contracts/tests/DSocialNetworkBlog.spec.ts new file mode 100644 index 00000000..fffb87d1 --- /dev/null +++ b/packages/ton-contracts/tests/DSocialNetworkBlog.spec.ts @@ -0,0 +1,379 @@ +import '@ton/test-utils' +import { Blockchain, SandboxContract } from '@ton/sandbox' +import { Cell, toNano } from '@ton/core' +import { DSocialNetworkMaster } from '../wrappers/DSocialNetworkMaster' +import { + DSocialNetworkBlog, + EditBlogMetadata +} from '../wrappers/DSocialNetworkBlog' +import { + getTestPostModel, + createBlogMessage, + createPostFee, + createBlogFee, + deployMasterFee +} from '../utils/test-fixtures' +import { serializePostData } from '../utils/stub-post-serialization' +import { parse } from '../utils/onchain-metadata-parser/parse' +import { DSocialNetworkPost } from '../wrappers/DSocialNetworkPost' + +describe('DSocialNetworkMaster', () => { + let blockchain: Blockchain + let deployer: Awaited> + let user: Awaited> + let anotherUser: Awaited> + let dMaster: SandboxContract + let dBlog: SandboxContract + + describe('Ownership', () => { + it('User shoud be owner of the blog', async () => { + const owner = await dBlog.getOwner() + + expect(owner.toRawString()).toEqual(user.address.toRawString()) + }) + + it('Blog should be transferable', async () => { + const transferResult = await dBlog.send( + user.getSender(), + { value: toNano('10') }, + { + $$type: 'Transfer', + query_id: 0n, + new_owner: anotherUser.address, + custom_payload: null, + forward_amount: toNano('5'), + forward_payload: Cell.EMPTY, + response_destination: user.address + } + ) + + // Should top up post balance + expect(transferResult.transactions).toHaveTransaction({ + from: user.address, + to: dBlog.address, + success: true + }) + + // Should return excesses to owner + expect(transferResult.transactions).toHaveTransaction({ + from: dBlog.address, + to: user.address, + success: true + }) + + // Should forward some amount to new owner + expect(transferResult.transactions).toHaveTransaction({ + from: dBlog.address, + to: user.address, + success: true + }) + + const owner = await dBlog.getOwner() + + expect(owner.toRawString()).toEqual(anotherUser.address.toRawString()) + }) + + it('Royalty params destination should be changed after transfer', async () => { + const oldRoyaltyParams = await dBlog.getRoyaltyParams() + + await dBlog.send( + user.getSender(), + { value: toNano('10') }, + { + $$type: 'Transfer', + query_id: 0n, + new_owner: anotherUser.address, + custom_payload: null, + forward_amount: toNano('5'), + forward_payload: Cell.EMPTY, + response_destination: user.address + } + ) + + const newRoyaltyParams = await dBlog.getRoyaltyParams() + + expect(newRoyaltyParams.destination.toRawString()).not.toEqual( + oldRoyaltyParams.destination.toRawString() + ) + expect(newRoyaltyParams.destination.toRawString()).toEqual( + anotherUser.address.toRawString() + ) + }) + + it('Another user can not initiate blog transfer', async () => { + await dBlog.send( + anotherUser.getSender(), + { value: toNano('10') }, + { + $$type: 'Transfer', + query_id: 0n, + new_owner: anotherUser.address, + custom_payload: null, + forward_amount: toNano('5'), + forward_payload: Cell.EMPTY, + response_destination: user.address + } + ) + + const owner = await dBlog.getOwner() + + expect(owner.toRawString()).toEqual(user.address.toRawString()) + }) + }) + + describe('Metadata', () => { + it('Should edit blog metadata correctly', async () => { + const editBlogMetadataMessage: EditBlogMetadata = { + $$type: 'EditBlogMetadata', + query_id: 0n, + new_metadata: { + $$type: 'NftCollectionMetadata', + name: 'New blog name', + description: 'New blog description', + image: 'New blog avatar' + } + } + + const editBlogMetadataResult = await dBlog.send( + user.getSender(), + { value: toNano('0.2') }, + editBlogMetadataMessage + ) + + // Should pay for changes + expect(editBlogMetadataResult.transactions).toHaveTransaction({ + from: user.address, + to: dBlog.address, + success: true + }) + + // Should return excesses + expect(editBlogMetadataResult.transactions).toHaveTransaction({ + from: dBlog.address, + to: user.address, + success: true + }) + + const newMetadata = await dBlog.getGetBlogInfo() + + expect(newMetadata.collection_content).toEqual( + editBlogMetadataMessage.new_metadata + ) + }) + + it('Another user should not edit blog metadata', async () => { + const oldMetadata = await dBlog.getGetBlogInfo() + + const editBlogMetadataMessage: EditBlogMetadata = { + $$type: 'EditBlogMetadata', + query_id: 0n, + new_metadata: { + $$type: 'NftCollectionMetadata', + name: 'New blog name', + description: 'New blog description', + image: 'New blog avatar' + } + } + + await dBlog.send( + anotherUser.getSender(), + { value: toNano('0.2') }, + editBlogMetadataMessage + ) + + const newMetadata = await dBlog.getGetBlogInfo() + + expect(newMetadata.collection_content).toEqual( + oldMetadata.collection_content + ) + }) + + it('Blog NFT data shoud be parsed correctly', async () => { + const blogMetadata = await dBlog.getGetBlogInfo() + const parsedPostMetadata = await parse( + blockchain, + dBlog.address, + dMaster.address + ) + expect(parsedPostMetadata).toEqual({ + image: blogMetadata.collection_content.image, + name: blogMetadata.collection_content.name, + description: blogMetadata.collection_content.description + }) + }) + }) + + describe('Posts creation', () => { + it('Should create post', async () => { + const testPostModel = getTestPostModel( + user.address, + (await dBlog.getGetNftAddressByIndex( + await dBlog.getGetNextItemIndex() + ))!, + dBlog.address + ) + + const createPostResult = await dBlog.send( + user.getSender(), + { value: createPostFee }, + { + $$type: 'MintNft', + query_id: 0n, + individual_content: serializePostData(testPostModel) + } + ) + + const postAddress = await dBlog.getGetNftAddressByIndex(0n) + + expect(postAddress).not.toBeNull() + + const dPost = blockchain.openContract( + DSocialNetworkPost.fromAddress(postAddress!) + ) + + // Should top up post balance + expect(createPostResult.transactions).toHaveTransaction({ + from: dBlog.address, + to: dPost.address, + success: true + }) + + // Should return excesses to user + expect(createPostResult.transactions).toHaveTransaction({ + from: dPost.address, + to: user.address, + success: true + }) + + // Should send fee to owner + expect(createPostResult.transactions).toHaveTransaction({ + from: dBlog.address, + to: deployer.address, + success: true + }) + + expect(await dBlog.getGetNextItemIndex()).toBe(1n) + }) + + it('Should not create post with insufficient fee', async () => { + const testPostModel = getTestPostModel( + user.address, + (await dBlog.getGetNftAddressByIndex( + await dBlog.getGetNextItemIndex() + ))!, + dBlog.address + ) + + const createPostResult = await dBlog.send( + user.getSender(), + { value: toNano('0.1') }, + { + $$type: 'MintNft', + query_id: 0n, + individual_content: serializePostData(testPostModel) + } + ) + + const postAddress = await dBlog.getGetNftAddressByIndex(0n) + + expect(postAddress).not.toBeNull() + + const dPost = blockchain.openContract( + DSocialNetworkPost.fromAddress(postAddress!) + ) + + // Should not top up post balance + expect(createPostResult.transactions).not.toHaveTransaction({ + from: dBlog.address, + to: dPost.address, + success: true + }) + + expect(await dBlog.getGetNextItemIndex()).not.toBe(1n) + }) + + it('Another user should not be able to create posts', async () => { + const testPostModel = getTestPostModel( + anotherUser.address, + (await dBlog.getGetNftAddressByIndex( + await dBlog.getGetNextItemIndex() + ))!, + dBlog.address + ) + + const createPostResult = await dBlog.send( + anotherUser.getSender(), + { value: createPostFee }, + { + $$type: 'MintNft', + query_id: 0n, + individual_content: serializePostData(testPostModel) + } + ) + + const postAddress = await dBlog.getGetNftAddressByIndex(0n) + + expect(postAddress).not.toBeNull() + + const dPost = blockchain.openContract( + DSocialNetworkPost.fromAddress(postAddress!) + ) + + // Should not top up post balance + expect(createPostResult.transactions).not.toHaveTransaction({ + from: dBlog.address, + to: dPost.address, + success: true + }) + + expect(await dBlog.getGetNextItemIndex()).not.toBe(1n) + }) + }) + + // Preparation + + beforeEach(async () => { + blockchain = await Blockchain.create() + dMaster = blockchain.openContract(await DSocialNetworkMaster.fromInit()) + deployer = await blockchain.treasury('deployer') + user = await blockchain.treasury('user') + anotherUser = await blockchain.treasury('anotherUser') + const deployResult = await dMaster.send( + deployer.getSender(), + { value: deployMasterFee }, + { + $$type: 'Deploy', + queryId: 0n + } + ) + + expect(deployResult.transactions).toHaveTransaction({ + from: deployer.address, + to: dMaster.address, + deploy: true, + success: true + }) + + const createBlogResult = await dMaster.send( + user.getSender(), + { value: createBlogFee }, + createBlogMessage + ) + + const blogAddress = await dMaster.getGetBlogAddressByIndex(0n) + + expect(blogAddress).not.toBeNull() + + expect(createBlogResult.transactions).toHaveTransaction({ + from: dMaster.address, + to: blogAddress!, + success: true + }) + + expect(await dMaster.getGetBlogsCount()).toBe(1n) + + dBlog = blockchain.openContract( + DSocialNetworkBlog.fromAddress(blogAddress!) + ) + }) +}) diff --git a/packages/ton-contracts/tests/DSocialNetworkMaster.spec.ts b/packages/ton-contracts/tests/DSocialNetworkMaster.spec.ts new file mode 100644 index 00000000..89ea7e5b --- /dev/null +++ b/packages/ton-contracts/tests/DSocialNetworkMaster.spec.ts @@ -0,0 +1,123 @@ +import '@ton/test-utils' +import { Blockchain, SandboxContract } from '@ton/sandbox' +import { toNano } from '@ton/core' +import { DSocialNetworkMaster } from '../wrappers/DSocialNetworkMaster' +import { DSocialNetworkBlog } from '../wrappers/DSocialNetworkBlog' +import { + createBlogFee, + createBlogMessage, + deployMasterFee +} from '../utils/test-fixtures' + +describe('DSocialNetworkMaster', () => { + let blockchain: Blockchain + let deployer: Awaited> + let user: Awaited> + let dMaster: SandboxContract + + describe('Ownership', () => { + it('Deployer shoud be owner', async () => { + const owner = await dMaster.getOwner() + + expect(owner.toRawString()).toEqual(deployer.address.toRawString()) + }) + + it('User should not be able to create blog with insufficient fee', async () => { + const createBlogResult = await dMaster.send( + user.getSender(), + { value: toNano('0.5') }, + createBlogMessage + ) + + const blogAddress = await dMaster.getGetBlogAddressByIndex(0n) + + // Should return excesses + expect(createBlogResult.transactions).not.toHaveTransaction({ + from: dMaster.address, + to: blogAddress!, + success: true + }) + + expect(await dMaster.getGetBlogsCount()).toBe(0n) + }) + + it('User should not be able to change owner', async () => { + await dMaster.send( + user.getSender(), + { value: toNano('1') }, + { + $$type: 'ChangeOwner', + queryId: 0n, + newOwner: user.address + } + ) + + const owner = await dMaster.getOwner() + + expect(owner.toRawString()).toEqual(deployer.address.toRawString()) + }) + }) + + describe('Blog creatino', () => { + it('Create blog', async () => { + const createBlogResult = await dMaster.send( + user.getSender(), + { value: createBlogFee }, + createBlogMessage + ) + + const blogAddress = await dMaster.getGetBlogAddressByIndex(0n) + + expect(blogAddress).not.toBeNull() + + // Should top up blog balance + expect(createBlogResult.transactions).toHaveTransaction({ + from: dMaster.address, + to: blogAddress!, + success: true + }) + + // Should return excesses + expect(createBlogResult.transactions).toHaveTransaction({ + from: blogAddress!, + to: user.address, + success: true + }) + + // Should send fee to owner + expect(createBlogResult.transactions).toHaveTransaction({ + from: dMaster.address, + to: deployer.address, + success: true + }) + + expect(await dMaster.getGetBlogsCount()).toBe(1n) + + blockchain.openContract(DSocialNetworkBlog.fromAddress(blogAddress!)) + }) + }) + + // Preparation + + beforeEach(async () => { + blockchain = await Blockchain.create() + dMaster = blockchain.openContract(await DSocialNetworkMaster.fromInit()) + deployer = await blockchain.treasury('deployer') + user = await blockchain.treasury('user') + const deployResult = await dMaster.send( + deployer.getSender(), + { value: deployMasterFee }, + { + $$type: 'Deploy', + queryId: 0n + } + ) + + expect(deployResult.transactions).toHaveTransaction({ + from: deployer.address, + to: dMaster.address, + deploy: true, + success: true + }) + }) +}) diff --git a/packages/ton-contracts/tests/DSocialNetworkPost.spec.ts b/packages/ton-contracts/tests/DSocialNetworkPost.spec.ts new file mode 100644 index 00000000..bb9aa21a --- /dev/null +++ b/packages/ton-contracts/tests/DSocialNetworkPost.spec.ts @@ -0,0 +1,279 @@ +import '@ton/test-utils' +import { Blockchain, SandboxContract } from '@ton/sandbox' +import { toNano, Cell } from '@ton/core' +import { DSocialNetworkMaster } from '../wrappers/DSocialNetworkMaster' +import { + DSocialNetworkBlog, + MintNft, + NftMetadata +} from '../wrappers/DSocialNetworkBlog' +import { DSocialNetworkPost } from '../wrappers/DSocialNetworkPost' +import { + getTestPostModel, + createBlogMessage, + createPostFee, + createBlogFee, + deployMasterFee +} from '../utils/test-fixtures' +import { parse } from '../utils/onchain-metadata-parser/parse' +import { + deserializePostData, + serializePostData, + stringifyPostModel, + type DPostModel +} from '../utils/stub-post-serialization' + +describe('DSocialNetworkMaster', () => { + let blockchain: Blockchain + let deployer: Awaited> + let user: Awaited> + let anotherUser: Awaited> + let dMaster: SandboxContract + let dBlog: SandboxContract + let testPostModel: DPostModel + let dPost: SandboxContract + + describe('Ownership', () => { + it('User shoud be owner of the post', async () => { + const owner = await dPost.getOwner() + + expect(owner.toRawString()).toEqual(user.address.toRawString()) + }) + + it('Post should be transferable', async () => { + const transferResult = await dPost.send( + user.getSender(), + { value: toNano('10') }, + { + $$type: 'Transfer', + query_id: 0n, + new_owner: anotherUser.address, + custom_payload: null, + forward_amount: toNano('5'), + forward_payload: Cell.EMPTY, + response_destination: user.address + } + ) + + // Should top up post balance + expect(transferResult.transactions).toHaveTransaction({ + from: user.address, + to: dPost.address, + success: true + }) + + // Should return excesses to owner + expect(transferResult.transactions).toHaveTransaction({ + from: dPost.address, + to: user.address, + success: true + }) + + // Should forward some amount to new owner + expect(transferResult.transactions).toHaveTransaction({ + from: dPost.address, + to: user.address, + success: true + }) + + const owner = await dPost.getOwner() + + expect(owner.toRawString()).toEqual(anotherUser.address.toRawString()) + }) + + it('Another user can not initiate post transfer', async () => { + await dPost.send( + anotherUser.getSender(), + { value: toNano('10') }, + { + $$type: 'Transfer', + query_id: 0n, + new_owner: anotherUser.address, + custom_payload: null, + forward_amount: toNano('5'), + forward_payload: Cell.EMPTY, + response_destination: user.address + } + ) + + const owner = await dPost.getOwner() + + expect(owner.toRawString()).toEqual(user.address.toRawString()) + }) + }) + + describe('Metadata', () => { + it('Post model should be serialized correctly', () => { + const serializedModel = serializePostData(testPostModel) + const deserializedPostData = deserializePostData(serializedModel) + expect(stringifyPostModel(testPostModel)).toEqual( + stringifyPostModel(deserializedPostData) + ) + }) + + it('Post should be readable', async () => { + const getNftDataRes = await dPost.getGetNftData() + await dBlog.getGetNftContent( + getNftDataRes.index, + getNftDataRes.individual_content + ) + }) + + it('Post NFT data shoud be parsed correctly', async () => { + const postMetadata = await dPost.getGetPostInfo() + const parsedPostMetadata = await parse( + blockchain, + dPost.address, + dBlog.address + ) + expect(parsedPostMetadata).toEqual({ + image: postMetadata.nft_content.image, + name: postMetadata.nft_content.name, + description: postMetadata.nft_content.description + }) + }) + + it('Post should be editable', async () => { + const newPostMetadata: NftMetadata = { + $$type: 'NftMetadata', + name: 'New post name', + description: 'New post description', + image: 'New post cover' + } + + const editPostResult = await dPost.send( + user.getSender(), + { value: toNano('0.1') }, + { + $$type: 'EditBlogPost', + query_id: 0n, + new_metadata: newPostMetadata + } + ) + + // Should top up post balance + expect(editPostResult.transactions).toHaveTransaction({ + from: user.address, + to: dPost.address, + success: true + }) + + // Should return excesses to owner + expect(editPostResult.transactions).toHaveTransaction({ + from: dPost.address, + to: user.address, + success: true + }) + + const postMetadata = await dPost.getGetPostInfo() + + expect(postMetadata.nft_content).toEqual(newPostMetadata) + }) + + it('Post should not be editable by another user', async () => { + const oldPostMetadata = await dPost.getGetPostInfo() + + const newPostMetadata: NftMetadata = { + $$type: 'NftMetadata', + name: 'New post name', + description: 'New post description', + image: 'New post cover' + } + + await dPost.send( + anotherUser.getSender(), + { value: toNano('0.1') }, + { + $$type: 'EditBlogPost', + query_id: 0n, + new_metadata: newPostMetadata + } + ) + + const postMetadata = await dPost.getGetPostInfo() + + expect(postMetadata.nft_content).toEqual(oldPostMetadata.nft_content) + }) + }) + + // Preparation + + beforeEach(async () => { + blockchain = await Blockchain.create() + dMaster = blockchain.openContract(await DSocialNetworkMaster.fromInit()) + deployer = await blockchain.treasury('deployer') + user = await blockchain.treasury('user') + anotherUser = await blockchain.treasury('anotherUser') + const deployResult = await dMaster.send( + deployer.getSender(), + { value: deployMasterFee }, + { + $$type: 'Deploy', + queryId: 0n + } + ) + + expect(deployResult.transactions).toHaveTransaction({ + from: deployer.address, + to: dMaster.address, + deploy: true, + success: true + }) + + const createBlogResult = await dMaster.send( + user.getSender(), + { value: createBlogFee }, + createBlogMessage + ) + + const blogAddress = await dMaster.getGetBlogAddressByIndex(0n) + + expect(blogAddress).not.toBeNull() + + expect(createBlogResult.transactions).toHaveTransaction({ + from: dMaster.address, + to: blogAddress!, + success: true + }) + + expect(await dMaster.getGetBlogsCount()).toBe(1n) + + dBlog = blockchain.openContract( + DSocialNetworkBlog.fromAddress(blogAddress!) + ) + + testPostModel = getTestPostModel( + user.address, + (await dBlog.getGetNftAddressByIndex(await dBlog.getGetNextItemIndex()))!, + dBlog.address + ) + + const createTestPostMessage: MintNft = { + $$type: 'MintNft', + query_id: 0n, + individual_content: serializePostData(testPostModel) + } + + const createPostResult = await dBlog.send( + user.getSender(), + { value: createPostFee }, + createTestPostMessage + ) + + const postAddress = await dBlog.getGetNftAddressByIndex(0n) + + expect(postAddress).not.toBeNull() + + expect(createPostResult.transactions).toHaveTransaction({ + from: dBlog.address, + to: postAddress!, + success: true + }) + + expect(await dBlog.getGetNextItemIndex()).toBe(1n) + + dPost = blockchain.openContract( + DSocialNetworkPost.fromAddress(postAddress!) + ) + }) +}) diff --git a/contracts/tsconfig.json b/packages/ton-contracts/tsconfig.json similarity index 100% rename from contracts/tsconfig.json rename to packages/ton-contracts/tsconfig.json diff --git a/contracts/utils/onchain-metadata-parser/dict.ts b/packages/ton-contracts/utils/onchain-metadata-parser/dict.ts similarity index 93% rename from contracts/utils/onchain-metadata-parser/dict.ts rename to packages/ton-contracts/utils/onchain-metadata-parser/dict.ts index 4fae5b89..03e86105 100644 --- a/contracts/utils/onchain-metadata-parser/dict.ts +++ b/packages/ton-contracts/utils/onchain-metadata-parser/dict.ts @@ -1,5 +1,5 @@ /* eslint-disable */ -import { Builder, Dictionary, Slice } from 'ton-core' +import { Builder, Dictionary, Slice } from '@ton/core' import { flattenSnakeCell, ParseChunkDict } from './nftContent' interface ChunkDictValue { diff --git a/contracts/utils/onchain-metadata-parser/nftContent.ts b/packages/ton-contracts/utils/onchain-metadata-parser/nftContent.ts similarity index 99% rename from contracts/utils/onchain-metadata-parser/nftContent.ts rename to packages/ton-contracts/utils/onchain-metadata-parser/nftContent.ts index 0ec95429..263474c3 100644 --- a/contracts/utils/onchain-metadata-parser/nftContent.ts +++ b/packages/ton-contracts/utils/onchain-metadata-parser/nftContent.ts @@ -7,7 +7,7 @@ import { Dictionary, Slice, Builder -} from 'ton-core' +} from '@ton/core' const OFF_CHAIN_CONTENT_PREFIX = 0x01 diff --git a/contracts/utils/onchain-metadata-parser/parse.ts b/packages/ton-contracts/utils/onchain-metadata-parser/parse.ts similarity index 91% rename from contracts/utils/onchain-metadata-parser/parse.ts rename to packages/ton-contracts/utils/onchain-metadata-parser/parse.ts index 9fc8a909..c1508b31 100644 --- a/contracts/utils/onchain-metadata-parser/parse.ts +++ b/packages/ton-contracts/utils/onchain-metadata-parser/parse.ts @@ -1,5 +1,5 @@ -import { Blockchain } from '@ton-community/sandbox' -import { Address, Dictionary, TupleItemCell } from 'ton-core' +import { Blockchain } from '@ton/sandbox' +import { Address, Dictionary, TupleItemCell } from '@ton/core' import { sha256 } from 'ton-crypto' import { NFTDictValueSerializer } from './dict' diff --git a/contracts/utils/stub-post-serialization.ts b/packages/ton-contracts/utils/stub-post-serialization.ts similarity index 97% rename from contracts/utils/stub-post-serialization.ts rename to packages/ton-contracts/utils/stub-post-serialization.ts index 54cc8b99..2ebd4fd2 100644 --- a/contracts/utils/stub-post-serialization.ts +++ b/packages/ton-contracts/utils/stub-post-serialization.ts @@ -1,4 +1,4 @@ -import { Address } from 'ton-core' +import { Address } from '@ton/core' import { NftMetadata } from '../wrappers/DSocialNetworkPost' /** Start of text symbol */ diff --git a/contracts/utils/test-fixtures.ts b/packages/ton-contracts/utils/test-fixtures.ts similarity index 51% rename from contracts/utils/test-fixtures.ts rename to packages/ton-contracts/utils/test-fixtures.ts index f3a58ebe..382014b8 100644 --- a/contracts/utils/test-fixtures.ts +++ b/packages/ton-contracts/utils/test-fixtures.ts @@ -1,26 +1,22 @@ -import { Address, Dictionary } from 'ton-core' -import { CreateBlog } from '../wrappers/DSocialNetworkMaster' -import { NftMetadataAttribute } from '../wrappers/DSocialNetworkBlog' +import { Address, toNano } from '@ton/core' +import { MintNft } from '../wrappers/DSocialNetworkMaster' import { DPostModel } from './stub-post-serialization' -export const registerTestAccountMessage: CreateBlog = { - $$type: 'CreateBlog', +export const deployMasterFee = toNano('0.1') +export const createBlogFee = toNano('1') +export const createPostFee = toNano('0.3') + +export const createBlogMessage: MintNft = { + $$type: 'MintNft', query_id: 0n, - blog_metadata: { - $$type: 'NftCollectionMetadata', + individual_content: { + $$type: 'NftMetadata', name: 'Test blog', description: 'Test blog description', image: 'https://d.d0rich.me/metadata/covers/blog.jpg' } } -const testNftAttributes = Dictionary.empty() -testNftAttributes.set(0n, { - $$type: 'NftMetadataAttribute', - trait_type: 'content', - value: 'My first post' -}) - export function getTestPostModel( author: Address, postContractAddress: Address, diff --git a/contracts/wrappers/DSocialNetworkBlog.compile.ts b/packages/ton-contracts/wrappers/DSocialNetworkBlog.compile.ts similarity index 65% rename from contracts/wrappers/DSocialNetworkBlog.compile.ts rename to packages/ton-contracts/wrappers/DSocialNetworkBlog.compile.ts index 862ef506..111b38ed 100644 --- a/contracts/wrappers/DSocialNetworkBlog.compile.ts +++ b/packages/ton-contracts/wrappers/DSocialNetworkBlog.compile.ts @@ -1,4 +1,4 @@ -import { CompilerConfig } from '@ton-community/blueprint' +import { CompilerConfig } from '@ton/blueprint' export const compile: CompilerConfig = { lang: 'tact', diff --git a/contracts/wrappers/DSocialNetworkBlog.ts b/packages/ton-contracts/wrappers/DSocialNetworkBlog.ts similarity index 100% rename from contracts/wrappers/DSocialNetworkBlog.ts rename to packages/ton-contracts/wrappers/DSocialNetworkBlog.ts diff --git a/contracts/wrappers/DSocialNetworkMaster.compile.ts b/packages/ton-contracts/wrappers/DSocialNetworkMaster.compile.ts similarity index 65% rename from contracts/wrappers/DSocialNetworkMaster.compile.ts rename to packages/ton-contracts/wrappers/DSocialNetworkMaster.compile.ts index 1936060d..479d5643 100644 --- a/contracts/wrappers/DSocialNetworkMaster.compile.ts +++ b/packages/ton-contracts/wrappers/DSocialNetworkMaster.compile.ts @@ -1,4 +1,4 @@ -import { CompilerConfig } from '@ton-community/blueprint' +import { CompilerConfig } from '@ton/blueprint' export const compile: CompilerConfig = { lang: 'tact', diff --git a/contracts/wrappers/DSocialNetworkMaster.ts b/packages/ton-contracts/wrappers/DSocialNetworkMaster.ts similarity index 100% rename from contracts/wrappers/DSocialNetworkMaster.ts rename to packages/ton-contracts/wrappers/DSocialNetworkMaster.ts diff --git a/contracts/wrappers/DSocialNetworkPost.compile.ts b/packages/ton-contracts/wrappers/DSocialNetworkPost.compile.ts similarity index 65% rename from contracts/wrappers/DSocialNetworkPost.compile.ts rename to packages/ton-contracts/wrappers/DSocialNetworkPost.compile.ts index d28673e0..9e13c320 100644 --- a/contracts/wrappers/DSocialNetworkPost.compile.ts +++ b/packages/ton-contracts/wrappers/DSocialNetworkPost.compile.ts @@ -1,4 +1,4 @@ -import { CompilerConfig } from '@ton-community/blueprint' +import { CompilerConfig } from '@ton/blueprint' export const compile: CompilerConfig = { lang: 'tact', diff --git a/contracts/wrappers/DSocialNetworkPost.ts b/packages/ton-contracts/wrappers/DSocialNetworkPost.ts similarity index 100% rename from contracts/wrappers/DSocialNetworkPost.ts rename to packages/ton-contracts/wrappers/DSocialNetworkPost.ts diff --git a/patches/@ton+ton+13.9.0.patch b/patches/@ton+ton+13.9.0.patch new file mode 100644 index 00000000..fccedc9f --- /dev/null +++ b/patches/@ton+ton+13.9.0.patch @@ -0,0 +1,160 @@ +diff --git a/node_modules/@ton/ton/dist/client/TonClient.d.ts b/node_modules/@ton/ton/dist/client/TonClient.d.ts +index e5af2a8..cf95585 100644 +--- a/node_modules/@ton/ton/dist/client/TonClient.d.ts ++++ b/node_modules/@ton/ton/dist/client/TonClient.d.ts +@@ -27,8 +27,8 @@ export declare type TonClientParameters = { + httpAdapter?: AxiosAdapter; + }; + export declare class TonClient { +- #private; + readonly parameters: TonClientParameters; ++ private readonly api; + constructor(parameters: TonClientParameters); + /** + * Get Address Balance +diff --git a/node_modules/@ton/ton/dist/client/TonClient.js b/node_modules/@ton/ton/dist/client/TonClient.js +index 6a515f5..7d2a2d1 100644 +--- a/node_modules/@ton/ton/dist/client/TonClient.js ++++ b/node_modules/@ton/ton/dist/client/TonClient.js +@@ -6,33 +6,20 @@ + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +-var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { +- if (kind === "m") throw new TypeError("Private method is not writable"); +- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); +- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); +- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +-}; +-var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { +- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); +- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); +- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +-}; +-var _TonClient_api; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.TonClient = void 0; + const HttpApi_1 = require("./api/HttpApi"); + const core_1 = require("@ton/core"); + class TonClient { + constructor(parameters) { +- _TonClient_api.set(this, void 0); + this.parameters = { + endpoint: parameters.endpoint + }; +- __classPrivateFieldSet(this, _TonClient_api, new HttpApi_1.HttpApi(this.parameters.endpoint, { ++ this.api = new HttpApi_1.HttpApi(this.parameters.endpoint, { + timeout: parameters.timeout, + apiKey: parameters.apiKey, + adapter: parameters.httpAdapter +- }), "f"); ++ }); + } + /** + * Get Address Balance +@@ -50,7 +37,7 @@ class TonClient { + * @returns stack and gas_used field + */ + async runMethod(address, name, stack = []) { +- let res = await __classPrivateFieldGet(this, _TonClient_api, "f").callGetMethod(address, name, stack); ++ let res = await this.api.callGetMethod(address, name, stack); + if (res.exit_code !== 0) { + throw Error('Unable to execute get method. Got exit_code: ' + res.exit_code); + } +@@ -75,7 +62,7 @@ class TonClient { + * @returns stack and gas_used field + */ + async runMethodWithError(address, name, params = []) { +- let res = await __classPrivateFieldGet(this, _TonClient_api, "f").callGetMethod(address, name, params); ++ let res = await this.api.callGetMethod(address, name, params); + return { gas_used: res.gas_used, stack: parseStack(res.stack), exit_code: res.exit_code }; + } + /** +@@ -95,7 +82,7 @@ class TonClient { + */ + async getTransactions(address, opts) { + // Fetch transactions +- let tx = await __classPrivateFieldGet(this, _TonClient_api, "f").getTransactions(address, opts); ++ let tx = await this.api.getTransactions(address, opts); + let res = []; + for (let r of tx) { + res.push((0, core_1.loadTransaction)(core_1.Cell.fromBoc(Buffer.from(r.data, 'base64'))[0].beginParse())); +@@ -110,7 +97,7 @@ class TonClient { + * @returns transaction or null if not exist + */ + async getTransaction(address, lt, hash) { +- let res = await __classPrivateFieldGet(this, _TonClient_api, "f").getTransaction(address, lt, hash); ++ let res = await this.api.getTransaction(address, lt, hash); + if (res) { + return (0, core_1.loadTransaction)(core_1.Cell.fromBoc(Buffer.from(res.data, 'base64'))[0].beginParse()); + } +@@ -123,7 +110,7 @@ class TonClient { + * @returns masterchain info + */ + async getMasterchainInfo() { +- let r = await __classPrivateFieldGet(this, _TonClient_api, "f").getMasterchainInfo(); ++ let r = await this.api.getMasterchainInfo(); + return { + workchain: r.init.workchain, + shard: r.last.shard, +@@ -136,7 +123,7 @@ class TonClient { + * @param seqno masterchain seqno + */ + async getWorkchainShards(seqno) { +- let r = await __classPrivateFieldGet(this, _TonClient_api, "f").getShards(seqno); ++ let r = await this.api.getShards(seqno); + return r.map((m) => ({ + workchain: m.workchain, + shard: m.shard, +@@ -150,7 +137,7 @@ class TonClient { + * @param shard + */ + async getShardTransactions(workchain, seqno, shard) { +- let tx = await __classPrivateFieldGet(this, _TonClient_api, "f").getBlockTransactions(workchain, seqno, shard); ++ let tx = await this.api.getBlockTransactions(workchain, seqno, shard); + if (tx.incomplete) { + throw Error('Unsupported'); + } +@@ -169,14 +156,14 @@ class TonClient { + .store((0, core_1.storeMessage)(src)) + .endCell() + .toBoc(); +- await __classPrivateFieldGet(this, _TonClient_api, "f").sendBoc(boc); ++ await this.api.sendBoc(boc); + } + /** + * Send file to a network + * @param src source file + */ + async sendFile(src) { +- await __classPrivateFieldGet(this, _TonClient_api, "f").sendBoc(src); ++ await this.api.sendBoc(src); + } + /** + * Estimate fees for external message +@@ -184,7 +171,7 @@ class TonClient { + * @returns + */ + async estimateExternalMessageFee(address, args) { +- return await __classPrivateFieldGet(this, _TonClient_api, "f").estimateFee(address, { body: args.body, initCode: args.initCode, initData: args.initData, ignoreSignature: args.ignoreSignature }); ++ return await this.api.estimateFee(address, { body: args.body, initCode: args.initCode, initData: args.initData, ignoreSignature: args.ignoreSignature }); + } + /** + * Send external message to contract +@@ -221,7 +208,7 @@ class TonClient { + * @param address contract address + */ + async getContractState(address) { +- let info = await __classPrivateFieldGet(this, _TonClient_api, "f").getAddressInformation(address); ++ let info = await this.api.getAddressInformation(address); + let balance = BigInt(info.balance); + let state = info.state; + return { +@@ -260,7 +247,6 @@ class TonClient { + } + } + exports.TonClient = TonClient; +-_TonClient_api = new WeakMap(); + function parseStackEntry(s) { + switch (s["@type"]) { + case "tvm.stackEntryNumber": diff --git a/turbo.json b/turbo.json index 5cc9cdbf..8b35c53b 100644 --- a/turbo.json +++ b/turbo.json @@ -16,23 +16,32 @@ "dependsOn": ["prepare"], "outputs": ["dist"] }, - "@d0rich/contracts#build": { + "@d0rich/ton-contracts#build": { "outputs": ["dist"] }, "d.d0rich.me#build": { - "dependsOn": ["@d0rich/contracts#build", "@d0rich/esprit-design#build"], + "dependsOn": [ + "@d0rich/ton-contracts#build", + "@d0rich/esprit-design#build" + ], "outputs": ["dist"] }, "typecheck": {}, "test": {}, - "@d0rich/contracts#test": { - "dependsOn": ["@d0rich/contracts#build"] + "@d0rich/ton-contracts#test": { + "dependsOn": ["@d0rich/ton-contracts#build"] }, "dev": { "cache": false, "persistent": true }, "d0rich.me#dev": {}, + "d.d0rich.me#dev": { + "dependsOn": [ + "@d0rich/ton-contracts#build", + "@d0rich/esprit-design#build" + ] + }, "d0xigen.d0rich.me#dev": {}, "design.d0rich.me#dev": {}, "nuxt-content-mermaid-playground#dev": {}