@seedprotocol/sdk 0.3.14 → 0.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addModel.js +93 -0
- package/dist/addModel.js.map +1 -0
- package/dist/bin.js +8 -5
- package/dist/bin.js.map +1 -1
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/protos/seed.proto +97 -0
- package/dist/rpcServer.js +358 -0
- package/dist/rpcServer.js.map +1 -0
- package/dist/scripts/addModel.d.ts +3 -0
- package/dist/scripts/addModel.d.ts.map +1 -0
- package/dist/scripts/bin.d.ts.map +1 -1
- package/dist/scripts/rpcServer.cursor.d.ts +2 -0
- package/dist/scripts/rpcServer.cursor.d.ts.map +1 -0
- package/dist/scripts/rpcServer.d.ts +3 -0
- package/dist/scripts/rpcServer.d.ts.map +1 -0
- package/dist/scripts/vite.config.d.ts +3 -0
- package/dist/scripts/vite.config.d.ts.map +1 -0
- package/dist/seedSchema/AppStateSchema.ts +2 -2
- package/dist/seedSchema/ConfigSchema.ts +18 -14
- package/dist/seedSchema/MetadataSchema.ts +2 -1
- package/dist/seedSchema/ModelSchema.ts +3 -3
- package/dist/seedSchema/SeedSchema.ts +2 -1
- package/dist/seedSchema/VersionSchema.ts +2 -1
- package/dist/seedSchema/index.ts +1 -0
- package/dist/src/Item/BaseItem.d.ts +1 -1
- package/dist/src/Item/BaseItem.d.ts.map +1 -1
- package/dist/src/Item/BaseItem.js.map +1 -1
- package/dist/src/ItemProperty/BaseItemProperty.d.ts +55 -192
- package/dist/src/ItemProperty/BaseItemProperty.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts +2 -1
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.js +2 -1
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.js.map +1 -1
- package/dist/src/ItemProperty/service/actors/initialize.d.ts +2 -1
- package/dist/src/ItemProperty/service/actors/initialize.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/resolveRelatedValue.d.ts +2 -1
- package/dist/src/ItemProperty/service/actors/resolveRelatedValue.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.d.ts +2 -1
- package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.js +1 -1
- package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.js.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.d.ts +2 -2
- package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts +2 -2
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts +2 -2
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.js +1 -0
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.js.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.d.ts +2 -2
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/waitForDb.d.ts +2 -2
- package/dist/src/ItemProperty/service/actors/waitForDb.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/propertyMachine.d.ts +60 -195
- package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +1 -1
- package/dist/src/browser/helpers/FileManager.d.ts +1 -0
- package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
- package/dist/src/browser/helpers/FileManager.js +3 -0
- package/dist/src/browser/helpers/FileManager.js.map +1 -1
- package/dist/src/browser/react/services.js +1 -0
- package/dist/src/browser/react/services.js.map +1 -1
- package/dist/src/client/ClientManager.js +1 -0
- package/dist/src/client/ClientManager.js.map +1 -1
- package/dist/src/client/actors/initialize.d.ts.map +1 -1
- package/dist/src/client/actors/initialize.js +28 -14
- package/dist/src/client/actors/initialize.js.map +1 -1
- package/dist/src/client/actors/saveAppState.js +1 -0
- package/dist/src/client/actors/saveAppState.js.map +1 -1
- package/dist/src/client/index.d.ts +1 -1
- package/dist/src/client/index.d.ts.map +1 -1
- package/dist/src/db/Db/BaseDb.d.ts +1 -0
- package/dist/src/db/Db/BaseDb.d.ts.map +1 -1
- package/dist/src/db/Db/BaseDb.js +3 -0
- package/dist/src/db/Db/BaseDb.js.map +1 -1
- package/dist/src/db/read/getExistingItem.js +1 -0
- package/dist/src/db/read/getExistingItem.js.map +1 -1
- package/dist/src/db/read/getItemData.js +1 -0
- package/dist/src/db/read/getItemData.js.map +1 -1
- package/dist/src/db/read/getItemProperties.js +1 -0
- package/dist/src/db/read/getItemProperties.js.map +1 -1
- package/dist/src/db/read/getItemProperty.js +1 -0
- package/dist/src/db/read/getItemProperty.js.map +1 -1
- package/dist/src/db/read/getItems.js +1 -0
- package/dist/src/db/read/getItems.js.map +1 -1
- package/dist/src/db/read/getMetadata.js +1 -0
- package/dist/src/db/read/getMetadata.js.map +1 -1
- package/dist/src/db/read/getModelSchemas.js +1 -0
- package/dist/src/db/read/getModelSchemas.js.map +1 -1
- package/dist/src/db/read/getModels.js +1 -0
- package/dist/src/db/read/getModels.js.map +1 -1
- package/dist/src/db/read/getPropertyData.js +1 -0
- package/dist/src/db/read/getPropertyData.js.map +1 -1
- package/dist/src/db/read/getRelationValueData.js +1 -0
- package/dist/src/db/read/getRelationValueData.js.map +1 -1
- package/dist/src/db/read/getSeedData.js +1 -0
- package/dist/src/db/read/getSeedData.js.map +1 -1
- package/dist/src/db/read/getStorageTransactionIdForSeedUid.js +1 -0
- package/dist/src/db/read/getStorageTransactionIdForSeedUid.js.map +1 -1
- package/dist/src/db/read/getVersionData.js +1 -0
- package/dist/src/db/read/getVersionData.js.map +1 -1
- package/dist/src/db/read/subqueries/metadataLatest.js +1 -0
- package/dist/src/db/read/subqueries/metadataLatest.js.map +1 -1
- package/dist/src/db/read/subqueries/versionData.js +1 -0
- package/dist/src/db/read/subqueries/versionData.js.map +1 -1
- package/dist/src/db/write/createMetadata.js +1 -0
- package/dist/src/db/write/createMetadata.js.map +1 -1
- package/dist/src/db/write/createSeed.js +1 -0
- package/dist/src/db/write/createSeed.js.map +1 -1
- package/dist/src/db/write/createSeeds.js +1 -0
- package/dist/src/db/write/createSeeds.js.map +1 -1
- package/dist/src/db/write/createVersion.js +1 -0
- package/dist/src/db/write/createVersion.js.map +1 -1
- package/dist/src/db/write/deleteItem.js +1 -0
- package/dist/src/db/write/deleteItem.js.map +1 -1
- package/dist/src/db/write/saveAppState.js +1 -0
- package/dist/src/db/write/saveAppState.js.map +1 -1
- package/dist/src/db/write/saveMetadata.js +1 -0
- package/dist/src/db/write/saveMetadata.js.map +1 -1
- package/dist/src/db/write/updateItemPropertyValue.js +1 -0
- package/dist/src/db/write/updateItemPropertyValue.js.map +1 -1
- package/dist/src/db/write/updateMetadata.js +1 -0
- package/dist/src/db/write/updateMetadata.js.map +1 -1
- package/dist/src/events/files/download.js +1 -0
- package/dist/src/events/files/download.js.map +1 -1
- package/dist/src/events/item/syncDbWithEas.js +1 -0
- package/dist/src/events/item/syncDbWithEas.js.map +1 -1
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts +2 -1
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
- package/dist/src/helpers/FileManager/BaseFileManager.js +3 -0
- package/dist/src/helpers/FileManager/BaseFileManager.js.map +1 -1
- package/dist/src/helpers/db.js +1 -0
- package/dist/src/helpers/db.js.map +1 -1
- package/dist/src/helpers/environment.js +6 -1
- package/dist/src/helpers/environment.js.map +1 -1
- package/dist/src/helpers/index.d.ts.map +1 -1
- package/dist/src/helpers/index.js.map +1 -1
- package/dist/src/interfaces/IItem.d.ts +1 -1
- package/dist/src/interfaces/IItem.d.ts.map +1 -1
- package/dist/src/node/Item/Item.js +11 -0
- package/dist/src/node/Item/Item.js.map +1 -0
- package/dist/src/node/ItemProperty/ItemProperty.js +10 -0
- package/dist/src/node/ItemProperty/ItemProperty.js.map +1 -0
- package/dist/src/node/codegen/drizzle.js +36 -2
- package/dist/src/node/codegen/drizzle.js.map +1 -1
- package/dist/src/node/db/Db.d.ts.map +1 -1
- package/dist/src/node/db/Db.js +64 -0
- package/dist/src/node/db/Db.js.map +1 -0
- package/dist/src/node/helpers/FileManager.d.ts +1 -0
- package/dist/src/node/helpers/FileManager.d.ts.map +1 -1
- package/dist/src/node/helpers/FileManager.js +53 -0
- package/dist/src/node/helpers/FileManager.js.map +1 -0
- package/dist/src/seedSchema/AppStateSchema.d.ts +2 -1
- package/dist/src/seedSchema/AppStateSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/AppStateSchema.js.map +1 -1
- package/dist/src/seedSchema/ConfigSchema.d.ts +2 -0
- package/dist/src/seedSchema/ConfigSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/ConfigSchema.js +5 -8
- package/dist/src/seedSchema/ConfigSchema.js.map +1 -1
- package/dist/src/seedSchema/MetadataSchema.d.ts +2 -1
- package/dist/src/seedSchema/MetadataSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/MetadataSchema.js.map +1 -1
- package/dist/src/seedSchema/ModelSchema.d.ts +3 -2
- package/dist/src/seedSchema/ModelSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/ModelSchema.js.map +1 -1
- package/dist/src/seedSchema/SeedSchema.d.ts +2 -1
- package/dist/src/seedSchema/SeedSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/SeedSchema.js.map +1 -1
- package/dist/src/seedSchema/VersionSchema.d.ts +2 -1
- package/dist/src/seedSchema/VersionSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/VersionSchema.js.map +1 -1
- package/dist/src/seedSchema/index.d.ts +1 -0
- package/dist/src/seedSchema/index.d.ts.map +1 -1
- package/dist/src/services/allItems/actors/fetchRelatedItems.js +1 -0
- package/dist/src/services/allItems/actors/fetchRelatedItems.js.map +1 -1
- package/dist/src/services/allItems/actors/initialize.js +1 -0
- package/dist/src/services/allItems/actors/initialize.js.map +1 -1
- package/dist/src/services/global/actors/addModelsToDb.js +1 -0
- package/dist/src/services/global/actors/addModelsToDb.js.map +1 -1
- package/dist/src/services/global/actors/initialize.js +1 -0
- package/dist/src/services/global/actors/initialize.js.map +1 -1
- package/dist/src/services/internal/actors/saveConfig.d.ts.map +1 -1
- package/dist/src/services/internal/actors/saveConfig.js +16 -29
- package/dist/src/services/internal/actors/saveConfig.js.map +1 -1
- package/dist/src/services/internal/helpers.d.ts.map +1 -1
- package/dist/src/services/internal/helpers.js +2 -2
- package/dist/src/services/internal/helpers.js.map +1 -1
- package/dist/src/services/publish/actors/preparePublishRequestData.js +1 -0
- package/dist/src/services/publish/actors/preparePublishRequestData.js.map +1 -1
- package/dist/src/types/item.d.ts +9 -8
- package/dist/src/types/item.d.ts.map +1 -1
- package/package.json +8 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSeedData.js","sources":["../../../../../src/db/read/getSeedData.ts"],"sourcesContent":["import { BaseDb } from '@/db/Db/BaseDb'\nimport { seeds, SeedType } from '@/seedSchema'\nimport { eq } from 'drizzle-orm'\n\ntype GetSeedDataProps = {\n seedLocalId?: string\n seedUid?: string\n}\n\ntype GetSeedData = (props: GetSeedDataProps) => Promise<SeedType | undefined>\n\nexport const getSeedData: GetSeedData = async ({ seedLocalId, seedUid }) => {\n const appDb = BaseDb.getAppDb()\n\n let query\n\n const queryBase = appDb.select().from(seeds)\n\n if (seedLocalId) {\n query = queryBase.where(eq(seeds.localId, seedLocalId))\n }\n\n if (seedUid) {\n query = queryBase.where(eq(seeds.uid, seedUid))\n }\n\n const rows = await query\n\n if (!rows || !rows.length) {\n return\n }\n\n return rows[0]\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getSeedData.js","sources":["../../../../../src/db/read/getSeedData.ts"],"sourcesContent":["import { BaseDb } from '@/db/Db/BaseDb'\nimport { seeds, SeedType } from '@/seedSchema'\nimport { eq } from 'drizzle-orm'\n\ntype GetSeedDataProps = {\n seedLocalId?: string\n seedUid?: string\n}\n\ntype GetSeedData = (props: GetSeedDataProps) => Promise<SeedType | undefined>\n\nexport const getSeedData: GetSeedData = async ({ seedLocalId, seedUid }) => {\n const appDb = BaseDb.getAppDb()\n\n let query\n\n const queryBase = appDb.select().from(seeds)\n\n if (seedLocalId) {\n query = queryBase.where(eq(seeds.localId, seedLocalId))\n }\n\n if (seedUid) {\n query = queryBase.where(eq(seeds.uid, seedUid))\n }\n\n const rows = await query\n\n if (!rows || !rows.length) {\n return\n }\n\n return rows[0]\n}\n"],"names":[],"mappings":";;;;;;;;;;AAWO,MAAM,WAAW,GAAgB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAI;AACzE,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/B,IAAA,IAAI,KAAK;IAET,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAE5C,IAAI,WAAW,EAAE;AACf,QAAA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;;IAGzD,IAAI,OAAO,EAAE;AACX,QAAA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;;AAGjD,IAAA,MAAM,IAAI,GAAG,MAAM,KAAK;IAExB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QACzB;;AAGF,IAAA,OAAO,IAAI,CAAC,CAAC,CAAC;AAChB;;;;"}
|
|
@@ -4,6 +4,7 @@ import { metadata } from '../../seedSchema/MetadataSchema.js';
|
|
|
4
4
|
import '../../seedSchema/AppStateSchema.js';
|
|
5
5
|
import '../../seedSchema/ModelSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelUidSchema.js';
|
|
7
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
7
8
|
import { and, eq } from 'drizzle-orm';
|
|
8
9
|
import { BaseDb } from '../Db/BaseDb.js';
|
|
9
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getStorageTransactionIdForSeedUid.js","sources":["../../../../../src/db/read/getStorageTransactionIdForSeedUid.ts"],"sourcesContent":["import { metadata } from '@/seedSchema'\nimport { and, eq } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\n\nconst seedUidToStorageTransactionId = new Map<string, string>()\n\ntype GetStorageTransactionIdResults = {\n storageTransactionId: string\n}[]\n\nexport const getStorageTransactionIdForSeedUid = async (\n seedUid: string,\n): Promise<string | undefined> => {\n if (seedUidToStorageTransactionId.has(seedUid)) {\n return seedUidToStorageTransactionId.get(seedUid)\n }\n\n const appDb = BaseDb.getAppDb()\n\n const results = (await appDb\n .select({\n storageTransactionId: metadata.propertyValue,\n })\n .from(metadata)\n .where(\n and(\n eq(metadata.seedUid, seedUid),\n eq(metadata.propertyName, 'storageTransactionId'),\n ),\n )) as GetStorageTransactionIdResults\n\n if (!results || results.length === 0) {\n return\n }\n\n seedUidToStorageTransactionId.set(seedUid, results[0].storageTransactionId)\n return results[0].storageTransactionId\n} "],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getStorageTransactionIdForSeedUid.js","sources":["../../../../../src/db/read/getStorageTransactionIdForSeedUid.ts"],"sourcesContent":["import { metadata } from '@/seedSchema'\nimport { and, eq } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\n\nconst seedUidToStorageTransactionId = new Map<string, string>()\n\ntype GetStorageTransactionIdResults = {\n storageTransactionId: string\n}[]\n\nexport const getStorageTransactionIdForSeedUid = async (\n seedUid: string,\n): Promise<string | undefined> => {\n if (seedUidToStorageTransactionId.has(seedUid)) {\n return seedUidToStorageTransactionId.get(seedUid)\n }\n\n const appDb = BaseDb.getAppDb()\n\n const results = (await appDb\n .select({\n storageTransactionId: metadata.propertyValue,\n })\n .from(metadata)\n .where(\n and(\n eq(metadata.seedUid, seedUid),\n eq(metadata.propertyName, 'storageTransactionId'),\n ),\n )) as GetStorageTransactionIdResults\n\n if (!results || results.length === 0) {\n return\n }\n\n seedUidToStorageTransactionId.set(seedUid, results[0].storageTransactionId)\n return results[0].storageTransactionId\n} "],"names":[],"mappings":";;;;;;;;;;AAIA,MAAM,6BAA6B,GAAG,IAAI,GAAG,EAAkB;MAMlD,iCAAiC,GAAG,OAC/C,OAAe,KACgB;AAC/B,IAAA,IAAI,6BAA6B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC9C,QAAA,OAAO,6BAA6B,CAAC,GAAG,CAAC,OAAO,CAAC;;AAGnD,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/B,IAAA,MAAM,OAAO,IAAI,MAAM;AACpB,SAAA,MAAM,CAAC;QACN,oBAAoB,EAAE,QAAQ,CAAC,aAAa;KAC7C;SACA,IAAI,CAAC,QAAQ;SACb,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7B,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAClD,CACF,CAAmC;IAEtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACpC;;AAGF,IAAA,6BAA6B,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;AAC3E,IAAA,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB;AACxC;;;;"}
|
|
@@ -4,6 +4,7 @@ import '../../seedSchema/MetadataSchema.js';
|
|
|
4
4
|
import '../../seedSchema/AppStateSchema.js';
|
|
5
5
|
import '../../seedSchema/ModelSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelUidSchema.js';
|
|
7
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
7
8
|
import { eq, and } from 'drizzle-orm';
|
|
8
9
|
import { BaseDb } from '../Db/BaseDb.js';
|
|
9
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getVersionData.js","sources":["../../../../../src/db/read/getVersionData.ts"],"sourcesContent":["import { versions, VersionsType } from '@/seedSchema'\nimport { and, eq } from 'drizzle-orm'\nimport { BaseDb } from '../Db/BaseDb'\n\ntype GetVersionDataProps = {\n localId?: string | null\n uid?: string\n seedLocalId?: string\n}\n\ntype GetVersionData = (\n props: GetVersionDataProps,\n) => Promise<VersionsType | undefined>\n\nexport const getVersionData: GetVersionData = async ({\n localId,\n seedLocalId,\n uid,\n}) => {\n const appDb = BaseDb.getAppDb()\n\n const whereClauses = []\n\n if (seedLocalId) {\n whereClauses.push(eq(versions.localId, seedLocalId))\n }\n\n if (localId) {\n whereClauses.push(eq(versions.localId, localId))\n }\n\n if (uid) {\n whereClauses.push(eq(versions.uid, uid))\n }\n\n const queryRows = await appDb\n .select()\n .from(versions)\n .where(and(...whereClauses))\n\n if (!queryRows || !queryRows.length) {\n return\n }\n\n return queryRows[0]\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getVersionData.js","sources":["../../../../../src/db/read/getVersionData.ts"],"sourcesContent":["import { versions, VersionsType } from '@/seedSchema'\nimport { and, eq } from 'drizzle-orm'\nimport { BaseDb } from '../Db/BaseDb'\n\ntype GetVersionDataProps = {\n localId?: string | null\n uid?: string\n seedLocalId?: string\n}\n\ntype GetVersionData = (\n props: GetVersionDataProps,\n) => Promise<VersionsType | undefined>\n\nexport const getVersionData: GetVersionData = async ({\n localId,\n seedLocalId,\n uid,\n}) => {\n const appDb = BaseDb.getAppDb()\n\n const whereClauses = []\n\n if (seedLocalId) {\n whereClauses.push(eq(versions.localId, seedLocalId))\n }\n\n if (localId) {\n whereClauses.push(eq(versions.localId, localId))\n }\n\n if (uid) {\n whereClauses.push(eq(versions.uid, uid))\n }\n\n const queryRows = await appDb\n .select()\n .from(versions)\n .where(and(...whereClauses))\n\n if (!queryRows || !queryRows.length) {\n return\n }\n\n return queryRows[0]\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcO,MAAM,cAAc,GAAmB,OAAO,EACnD,OAAO,EACP,WAAW,EACX,GAAG,GACJ,KAAI;AACH,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;IAE/B,MAAM,YAAY,GAAG,EAAE;IAEvB,IAAI,WAAW,EAAE;AACf,QAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;;IAGtD,IAAI,OAAO,EAAE;AACX,QAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;;IAGlD,IAAI,GAAG,EAAE;AACP,QAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;;IAG1C,MAAM,SAAS,GAAG,MAAM;AACrB,SAAA,MAAM;SACN,IAAI,CAAC,QAAQ;AACb,SAAA,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IAE9B,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;QACnC;;AAGF,IAAA,OAAO,SAAS,CAAC,CAAC,CAAC;AACrB;;;;"}
|
|
@@ -6,6 +6,7 @@ import { metadata } from '../../../seedSchema/MetadataSchema.js';
|
|
|
6
6
|
import '../../../seedSchema/AppStateSchema.js';
|
|
7
7
|
import '../../../seedSchema/ModelSchema.js';
|
|
8
8
|
import '../../../seedSchema/ModelUidSchema.js';
|
|
9
|
+
import '../../../seedSchema/ConfigSchema.js';
|
|
9
10
|
|
|
10
11
|
const getMetadataLatest = ({ seedLocalId, seedUid }) => {
|
|
11
12
|
const appDb = BaseDb.getAppDb();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadataLatest.js","sources":["../../../../../../src/db/read/subqueries/metadataLatest.ts"],"sourcesContent":["import { and, eq, getTableColumns, or, SQL, sql } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { metadata } from '@/seedSchema'\n\nexport const getMetadataLatest = ({seedLocalId, seedUid}: {seedLocalId?: string, seedUid?: string}) => {\n const appDb = BaseDb.getAppDb()\n\n const whereClauses: SQL[] = []\n\n if (seedLocalId) {\n whereClauses.push(eq(metadata.seedLocalId, seedLocalId))\n }\n\n if (seedUid) {\n whereClauses.push(eq(metadata.seedUid, seedUid))\n }\n\n const metadataColumns = getTableColumns(metadata)\n\n return appDb.$with('metadataLatest').as(\n appDb\n .select({\n ...metadataColumns,\n rowNum: sql.raw(`\n ROW_NUMBER() OVER (\n PARTITION BY property_name \n ORDER BY COALESCE(created_at, attestation_created_at) DESC\n )\n `).as('rowNum')\n })\n .from(metadata)\n .where(and(...whereClauses))\n )\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metadataLatest.js","sources":["../../../../../../src/db/read/subqueries/metadataLatest.ts"],"sourcesContent":["import { and, eq, getTableColumns, or, SQL, sql } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { metadata } from '@/seedSchema'\n\nexport const getMetadataLatest = ({seedLocalId, seedUid}: {seedLocalId?: string, seedUid?: string}) => {\n const appDb = BaseDb.getAppDb()\n\n const whereClauses: SQL[] = []\n\n if (seedLocalId) {\n whereClauses.push(eq(metadata.seedLocalId, seedLocalId))\n }\n\n if (seedUid) {\n whereClauses.push(eq(metadata.seedUid, seedUid))\n }\n\n const metadataColumns = getTableColumns(metadata)\n\n return appDb.$with('metadataLatest').as(\n appDb\n .select({\n ...metadataColumns,\n rowNum: sql.raw(`\n ROW_NUMBER() OVER (\n PARTITION BY property_name \n ORDER BY COALESCE(created_at, attestation_created_at) DESC\n )\n `).as('rowNum')\n })\n .from(metadata)\n .where(and(...whereClauses))\n )\n}\n"],"names":[],"mappings":";;;;;;;;;;AAIa,MAAA,iBAAiB,GAAG,CAAC,EAAC,WAAW,EAAE,OAAO,EAA2C,KAAI;AACpG,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;IAE/B,MAAM,YAAY,GAAU,EAAE;IAE9B,IAAI,WAAW,EAAE;AACf,QAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;;IAG1D,IAAI,OAAO,EAAE;AACX,QAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;;AAGlD,IAAA,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC;IAEjD,OAAO,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,CACrC;AACG,SAAA,MAAM,CAAC;AACN,QAAA,GAAG,eAAe;AAClB,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;;;;;AAKb,UAAA,CAAA,CAAC,CAAC,EAAE,CAAC,QAAQ;KACjB;SACA,IAAI,CAAC,QAAQ;SACb,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAC/B;AACH;;;;"}
|
|
@@ -4,6 +4,7 @@ import '../../../seedSchema/MetadataSchema.js';
|
|
|
4
4
|
import '../../../seedSchema/AppStateSchema.js';
|
|
5
5
|
import '../../../seedSchema/ModelSchema.js';
|
|
6
6
|
import '../../../seedSchema/ModelUidSchema.js';
|
|
7
|
+
import '../../../seedSchema/ConfigSchema.js';
|
|
7
8
|
import { max, count } from 'drizzle-orm';
|
|
8
9
|
import { BaseDb } from '../../Db/BaseDb.js';
|
|
9
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionData.js","sources":["../../../../../../src/db/read/subqueries/versionData.ts"],"sourcesContent":["import { versions } from '@/seedSchema'\nimport { count, max } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\n\nexport const getVersionData = () => {\n const appDb = BaseDb.getAppDb()\n\n return appDb.$with('versionData').as(\n appDb\n .select({\n seedLocalId: versions.seedLocalId,\n seedUid: versions.seedUid,\n latestVersionUid: versions.uid,\n latestVersionLocalId: versions.localId,\n versionsCount: count(versions.localId).as('versionsCount'),\n lastVersionPublishedAt: max(versions.attestationCreatedAt).as(\n 'lastVersionPublishedAt',\n ),\n lastLocalUpdateAt: max(versions.createdAt).as('lastLocalUpdateAt'),\n })\n .from(versions)\n .groupBy(versions.seedLocalId),\n )\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"versionData.js","sources":["../../../../../../src/db/read/subqueries/versionData.ts"],"sourcesContent":["import { versions } from '@/seedSchema'\nimport { count, max } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\n\nexport const getVersionData = () => {\n const appDb = BaseDb.getAppDb()\n\n return appDb.$with('versionData').as(\n appDb\n .select({\n seedLocalId: versions.seedLocalId,\n seedUid: versions.seedUid,\n latestVersionUid: versions.uid,\n latestVersionLocalId: versions.localId,\n versionsCount: count(versions.localId).as('versionsCount'),\n lastVersionPublishedAt: max(versions.attestationCreatedAt).as(\n 'lastVersionPublishedAt',\n ),\n lastLocalUpdateAt: max(versions.createdAt).as('lastLocalUpdateAt'),\n })\n .from(versions)\n .groupBy(versions.seedLocalId),\n )\n}\n"],"names":[],"mappings":";;;;;;;;;;AAIO,MAAM,cAAc,GAAG,MAAK;AACjC,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;IAE/B,OAAO,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAClC;AACG,SAAA,MAAM,CAAC;QACN,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,gBAAgB,EAAE,QAAQ,CAAC,GAAG;QAC9B,oBAAoB,EAAE,QAAQ,CAAC,OAAO;QACtC,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC;QAC1D,sBAAsB,EAAE,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAC3D,wBAAwB,CACzB;QACD,iBAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;KACnE;SACA,IAAI,CAAC,QAAQ;AACb,SAAA,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CACjC;AACH;;;;"}
|
|
@@ -4,6 +4,7 @@ import { metadata } from '../../seedSchema/MetadataSchema.js';
|
|
|
4
4
|
import '../../seedSchema/AppStateSchema.js';
|
|
5
5
|
import '../../seedSchema/ModelSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelUidSchema.js';
|
|
7
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
7
8
|
import { generateId } from '../../helpers/index.js';
|
|
8
9
|
import { BaseDb } from '../Db/BaseDb.js';
|
|
9
10
|
import { GET_SCHEMA_BY_NAME } from '../../Item/queries.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMetadata.js","sources":["../../../../../src/db/write/createMetadata.ts"],"sourcesContent":["import { metadata, MetadataType } from '@/seedSchema'\nimport { BaseEasClient, BaseQueryClient, generateId } from '@/helpers'\nimport { PropertyType } from '@/types'\nimport { BaseDb } from '../Db/BaseDb'\nimport { GET_SCHEMA_BY_NAME, } from '@/Item/queries'\nimport { INTERNAL_DATA_TYPES } from '@/helpers/constants'\nimport { toSnakeCase } from 'drizzle-orm/casing'\nimport { Schema } from '@/graphql/gql/graphql'\n\n\ntype CreateMetadata = (\n metadataValues: Partial<MetadataType>,\n propertyRecordSchema?: PropertyType | undefined,\n) => Promise<MetadataType>\n\nexport const createMetadata: CreateMetadata = async (\n metadataValues,\n propertyRecordSchema?,\n) => {\n const appDb = BaseDb.getAppDb()\n\n metadataValues.localId = generateId()\n\n if (!metadataValues.modelType && metadataValues.modelName) {\n metadataValues.modelType = toSnakeCase(metadataValues.modelName)\n }\n\n const isItemStorage = propertyRecordSchema && propertyRecordSchema.storageType === 'ItemStorage'\n\n // if (\n // propertyRecordSchema &&\n // propertyRecordSchema.localStorageDir &&\n // isItemStorage\n // ) {\n // const filename = `${metadataValues.seedUid || metadataValues.seedLocalId}${propertyRecordSchema.filenameSuffix}`\n // const filePath = path.join(propertyRecordSchema.localStorageDir, filename)\n // await fs.promises.writeFile(filePath, metadataValues.propertyValue)\n // metadataValues.propertyValue = filename\n // metadataValues.refValueType = 'file'\n // }\n\n if (!isItemStorage && !metadataValues.schemaUid && propertyRecordSchema) {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const easDataType = INTERNAL_DATA_TYPES[propertyRecordSchema.dataType].eas\n\n const propertyNameSnakeCase = toSnakeCase(metadataValues.propertyName)\n \n const queryResult = await queryClient.fetchQuery({\n queryKey: [`getSchemaByName${metadataValues.propertyName}`],\n queryFn: async (): Promise<{schemas: Schema[]}> =>\n easClient.request(GET_SCHEMA_BY_NAME, {\n where: {\n schema: {\n equals: `${easDataType} ${propertyNameSnakeCase}`,\n },\n },\n }),\n })\n\n if (queryResult && queryResult.schemas.length > 0) {\n metadataValues.schemaUid = queryResult.schemas[0].id\n }\n\n }\n\n return appDb\n .insert(metadata)\n .values({\n ...metadataValues,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n })\n .returning()\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createMetadata.js","sources":["../../../../../src/db/write/createMetadata.ts"],"sourcesContent":["import { metadata, MetadataType } from '@/seedSchema'\nimport { BaseEasClient, BaseQueryClient, generateId } from '@/helpers'\nimport { PropertyType } from '@/types'\nimport { BaseDb } from '../Db/BaseDb'\nimport { GET_SCHEMA_BY_NAME, } from '@/Item/queries'\nimport { INTERNAL_DATA_TYPES } from '@/helpers/constants'\nimport { toSnakeCase } from 'drizzle-orm/casing'\nimport { Schema } from '@/graphql/gql/graphql'\n\n\ntype CreateMetadata = (\n metadataValues: Partial<MetadataType>,\n propertyRecordSchema?: PropertyType | undefined,\n) => Promise<MetadataType>\n\nexport const createMetadata: CreateMetadata = async (\n metadataValues,\n propertyRecordSchema?,\n) => {\n const appDb = BaseDb.getAppDb()\n\n metadataValues.localId = generateId()\n\n if (!metadataValues.modelType && metadataValues.modelName) {\n metadataValues.modelType = toSnakeCase(metadataValues.modelName)\n }\n\n const isItemStorage = propertyRecordSchema && propertyRecordSchema.storageType === 'ItemStorage'\n\n // if (\n // propertyRecordSchema &&\n // propertyRecordSchema.localStorageDir &&\n // isItemStorage\n // ) {\n // const filename = `${metadataValues.seedUid || metadataValues.seedLocalId}${propertyRecordSchema.filenameSuffix}`\n // const filePath = path.join(propertyRecordSchema.localStorageDir, filename)\n // await fs.promises.writeFile(filePath, metadataValues.propertyValue)\n // metadataValues.propertyValue = filename\n // metadataValues.refValueType = 'file'\n // }\n\n if (!isItemStorage && !metadataValues.schemaUid && propertyRecordSchema) {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const easDataType = INTERNAL_DATA_TYPES[propertyRecordSchema.dataType].eas\n\n const propertyNameSnakeCase = toSnakeCase(metadataValues.propertyName)\n \n const queryResult = await queryClient.fetchQuery({\n queryKey: [`getSchemaByName${metadataValues.propertyName}`],\n queryFn: async (): Promise<{schemas: Schema[]}> =>\n easClient.request(GET_SCHEMA_BY_NAME, {\n where: {\n schema: {\n equals: `${easDataType} ${propertyNameSnakeCase}`,\n },\n },\n }),\n })\n\n if (queryResult && queryResult.schemas.length > 0) {\n metadataValues.schemaUid = queryResult.schemas[0].id\n }\n\n }\n\n return appDb\n .insert(metadata)\n .values({\n ...metadataValues,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n })\n .returning()\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAea,MAAA,cAAc,GAAmB,OAC5C,cAAc,EACd,oBAAqB,KACnB;AACF,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/B,IAAA,cAAc,CAAC,OAAO,GAAG,UAAU,EAAE;IAErC,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,cAAc,CAAC,SAAS,EAAE;QACzD,cAAc,CAAC,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC;;IAGlE,MAAM,aAAa,GAAG,oBAAoB,IAAI,oBAAoB,CAAC,WAAW,KAAK,aAAa;;;;;;;;;;;;IAchG,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,oBAAoB,EAAE;AACvE,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,EAAE;AACpD,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE;QAE9C,MAAM,WAAW,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,GAAG;QAE1E,MAAM,qBAAqB,GAAG,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC;AAEtE,QAAA,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC;AAC/C,YAAA,QAAQ,EAAE,CAAC,CAAA,eAAA,EAAkB,cAAc,CAAC,YAAY,EAAE,CAAC;YAC3D,OAAO,EAAE,YACP,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE;AACpC,gBAAA,KAAK,EAAE;AACL,oBAAA,MAAM,EAAE;AACN,wBAAA,MAAM,EAAE,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,qBAAqB,CAAE,CAAA;AAClD,qBAAA;AACF,iBAAA;aACF,CAAC;AACL,SAAA,CAAC;QAEF,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,cAAc,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;;;AAKxD,IAAA,OAAO;SACJ,MAAM,CAAC,QAAQ;AACf,SAAA,MAAM,CAAC;AACN,QAAA,GAAG,cAAc;AACjB,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB;AACA,SAAA,SAAS,EAAE;AAChB;;;;"}
|
|
@@ -5,6 +5,7 @@ import '../../seedSchema/MetadataSchema.js';
|
|
|
5
5
|
import '../../seedSchema/AppStateSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelSchema.js';
|
|
7
7
|
import '../../seedSchema/ModelUidSchema.js';
|
|
8
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
8
9
|
import { BaseDb } from '../Db/BaseDb.js';
|
|
9
10
|
import { getSchemaUidForModel } from '../read/getSchemaUidForModel.js';
|
|
10
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSeed.js","sources":["../../../../../src/db/write/createSeed.ts"],"sourcesContent":["import { generateId } from '@/helpers'\nimport { seeds } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { getSchemaUidForModel } from '@/db/read/getSchemaUidForModel'\n\ntype CreateSeedProps = {\n type: string\n seedUid?: string\n}\n\nexport const createSeed = async ({ type, seedUid }: CreateSeedProps): Promise<string> => {\n const schemaUid = await getSchemaUidForModel(type)\n\n if (!schemaUid) {\n throw new Error(`No schema found for model type: ${type}`)\n }\n\n const appDb = BaseDb.getAppDb()\n\n const newSeedLocalId = generateId()\n\n await appDb.insert(seeds).values({\n localId: newSeedLocalId,\n type,\n uid: seedUid,\n createdAt: Date.now(),\n schemaUid,\n })\n\n return newSeedLocalId\n} "],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createSeed.js","sources":["../../../../../src/db/write/createSeed.ts"],"sourcesContent":["import { generateId } from '@/helpers'\nimport { seeds } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { getSchemaUidForModel } from '@/db/read/getSchemaUidForModel'\n\ntype CreateSeedProps = {\n type: string\n seedUid?: string\n}\n\nexport const createSeed = async ({ type, seedUid }: CreateSeedProps): Promise<string> => {\n const schemaUid = await getSchemaUidForModel(type)\n\n if (!schemaUid) {\n throw new Error(`No schema found for model type: ${type}`)\n }\n\n const appDb = BaseDb.getAppDb()\n\n const newSeedLocalId = generateId()\n\n await appDb.insert(seeds).values({\n localId: newSeedLocalId,\n type,\n uid: seedUid,\n createdAt: Date.now(),\n schemaUid,\n })\n\n return newSeedLocalId\n} "],"names":[],"mappings":";;;;;;;;;;;AAUO,MAAM,UAAU,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAmB,KAAqB;AACtF,IAAA,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC;IAElD,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAA,CAAE,CAAC;;AAG5D,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/B,IAAA,MAAM,cAAc,GAAG,UAAU,EAAE;IAEnC,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAC/B,QAAA,OAAO,EAAE,cAAc;QACvB,IAAI;AACJ,QAAA,GAAG,EAAE,OAAO;AACZ,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;AACV,KAAA,CAAC;AAEF,IAAA,OAAO,cAAc;AACvB;;;;"}
|
|
@@ -4,6 +4,7 @@ import '../../seedSchema/MetadataSchema.js';
|
|
|
4
4
|
import '../../seedSchema/AppStateSchema.js';
|
|
5
5
|
import '../../seedSchema/ModelSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelUidSchema.js';
|
|
7
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
7
8
|
import { BaseDb } from '../Db/BaseDb.js';
|
|
8
9
|
|
|
9
10
|
const createSeeds = async (newSeeds) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSeeds.js","sources":["../../../../../src/db/write/createSeeds.ts"],"sourcesContent":["import { seeds, SeedType } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\n\ntype CreateSeeds = (newSeeds: Partial<SeedType>[]) => Promise<string[]>\n\nexport const createSeeds: CreateSeeds = async (\n newSeeds: Partial<SeedType>[],\n) => {\n const appDb = BaseDb.getAppDb()\n\n const results = await appDb\n .insert(seeds)\n .values(newSeeds)\n .returning({ uid: seeds.uid })\n\n const newUids = results.reduce((acc, result) => {\n if (result.uid) {\n acc.push(result.uid)\n }\n return acc\n }, [] as string[])\n\n return newUids\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createSeeds.js","sources":["../../../../../src/db/write/createSeeds.ts"],"sourcesContent":["import { seeds, SeedType } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\n\ntype CreateSeeds = (newSeeds: Partial<SeedType>[]) => Promise<string[]>\n\nexport const createSeeds: CreateSeeds = async (\n newSeeds: Partial<SeedType>[],\n) => {\n const appDb = BaseDb.getAppDb()\n\n const results = await appDb\n .insert(seeds)\n .values(newSeeds)\n .returning({ uid: seeds.uid })\n\n const newUids = results.reduce((acc, result) => {\n if (result.uid) {\n acc.push(result.uid)\n }\n return acc\n }, [] as string[])\n\n return newUids\n}\n"],"names":[],"mappings":";;;;;;;;;MAKa,WAAW,GAAgB,OACtC,QAA6B,KAC3B;AACF,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;IAE/B,MAAM,OAAO,GAAG,MAAM;SACnB,MAAM,CAAC,KAAK;SACZ,MAAM,CAAC,QAAQ;SACf,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI;AAC7C,QAAA,IAAI,MAAM,CAAC,GAAG,EAAE;AACd,YAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAEtB,QAAA,OAAO,GAAG;KACX,EAAE,EAAc,CAAC;AAElB,IAAA,OAAO,OAAO;AAChB;;;;"}
|
|
@@ -5,6 +5,7 @@ import '../../seedSchema/MetadataSchema.js';
|
|
|
5
5
|
import '../../seedSchema/AppStateSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelSchema.js';
|
|
7
7
|
import '../../seedSchema/ModelUidSchema.js';
|
|
8
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
8
9
|
import { BaseDb } from '../Db/BaseDb.js';
|
|
9
10
|
|
|
10
11
|
const createVersion = async ({ seedLocalId, seedUid, seedType, uid, }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createVersion.js","sources":["../../../../../src/db/write/createVersion.ts"],"sourcesContent":["import { generateId } from '@/helpers'\nimport { versions } from '@/seedSchema'\nimport { BaseDb } from '../Db/BaseDb'\n\ntype CreateVersionProps = {\n seedLocalId?: string\n seedUid?: string\n seedType?: string\n uid?: string\n}\ntype CreateVersion = (props: CreateVersionProps) => Promise<string>\n\nexport const createVersion: CreateVersion = async ({\n seedLocalId,\n seedUid,\n seedType,\n uid,\n}) => {\n const appDb = BaseDb.getAppDb()\n\n const newVersionLocalId = generateId()\n\n await appDb.insert(versions).values({\n localId: newVersionLocalId,\n createdAt: Date.now(),\n seedLocalId,\n seedUid: seedUid ?? 'NULL',\n seedType,\n uid: uid || 'NULL',\n })\n\n return newVersionLocalId\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createVersion.js","sources":["../../../../../src/db/write/createVersion.ts"],"sourcesContent":["import { generateId } from '@/helpers'\nimport { versions } from '@/seedSchema'\nimport { BaseDb } from '../Db/BaseDb'\n\ntype CreateVersionProps = {\n seedLocalId?: string\n seedUid?: string\n seedType?: string\n uid?: string\n}\ntype CreateVersion = (props: CreateVersionProps) => Promise<string>\n\nexport const createVersion: CreateVersion = async ({\n seedLocalId,\n seedUid,\n seedType,\n uid,\n}) => {\n const appDb = BaseDb.getAppDb()\n\n const newVersionLocalId = generateId()\n\n await appDb.insert(versions).values({\n localId: newVersionLocalId,\n createdAt: Date.now(),\n seedLocalId,\n seedUid: seedUid ?? 'NULL',\n seedType,\n uid: uid || 'NULL',\n })\n\n return newVersionLocalId\n}\n"],"names":[],"mappings":";;;;;;;;;;AAYa,MAAA,aAAa,GAAkB,OAAO,EACjD,WAAW,EACX,OAAO,EACP,QAAQ,EACR,GAAG,GACJ,KAAI;AACH,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/B,IAAA,MAAM,iBAAiB,GAAG,UAAU,EAAE;IAEtC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AAClC,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,WAAW;QACX,OAAO,EAAE,OAAO,IAAI,MAAM;QAC1B,QAAQ;QACR,GAAG,EAAE,GAAG,IAAI,MAAM;AACnB,KAAA,CAAC;AAEF,IAAA,OAAO,iBAAiB;AAC1B;;;;"}
|
|
@@ -5,6 +5,7 @@ import '../../seedSchema/MetadataSchema.js';
|
|
|
5
5
|
import '../../seedSchema/AppStateSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelSchema.js';
|
|
7
7
|
import '../../seedSchema/ModelUidSchema.js';
|
|
8
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
8
9
|
import { or, eq } from 'drizzle-orm';
|
|
9
10
|
|
|
10
11
|
const deleteItem = async ({ seedLocalId, seedUid }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteItem.js","sources":["../../../../../src/db/write/deleteItem.ts"],"sourcesContent":["import { BaseDb } from '@/db/Db/BaseDb'\nimport { seeds } from '@/seedSchema'\nimport { eq, or } from 'drizzle-orm'\n\ntype DeleteItemProps = {\n seedLocalId?: string\n seedUid?: string\n}\ntype DeleteItem = (props: DeleteItemProps) => Promise<void>\nexport const deleteItem: DeleteItem = async ({ seedLocalId, seedUid }) => {\n const appDb = BaseDb.getAppDb()\n\n await appDb\n .update(seeds)\n .set({\n _markedForDeletion: 1,\n })\n .where(or(eq(seeds.localId, seedLocalId), eq(seeds.uid, seedUid)))\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deleteItem.js","sources":["../../../../../src/db/write/deleteItem.ts"],"sourcesContent":["import { BaseDb } from '@/db/Db/BaseDb'\nimport { seeds } from '@/seedSchema'\nimport { eq, or } from 'drizzle-orm'\n\ntype DeleteItemProps = {\n seedLocalId?: string\n seedUid?: string\n}\ntype DeleteItem = (props: DeleteItemProps) => Promise<void>\nexport const deleteItem: DeleteItem = async ({ seedLocalId, seedUid }) => {\n const appDb = BaseDb.getAppDb()\n\n await appDb\n .update(seeds)\n .set({\n _markedForDeletion: 1,\n })\n .where(or(eq(seeds.localId, seedLocalId), eq(seeds.uid, seedUid)))\n}\n"],"names":[],"mappings":";;;;;;;;;;AASO,MAAM,UAAU,GAAe,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAI;AACvE,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/B,IAAA,MAAM;SACH,MAAM,CAAC,KAAK;AACZ,SAAA,GAAG,CAAC;AACH,QAAA,kBAAkB,EAAE,CAAC;KACtB;SACA,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACtE;;;;"}
|
|
@@ -5,6 +5,7 @@ import '../../seedSchema/MetadataSchema.js';
|
|
|
5
5
|
import { appState } from '../../seedSchema/AppStateSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelSchema.js';
|
|
7
7
|
import '../../seedSchema/ModelUidSchema.js';
|
|
8
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
8
9
|
|
|
9
10
|
const saveAppState = async (key, value) => {
|
|
10
11
|
const appDb = BaseDb.getAppDb();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveAppState.js","sources":["../../../../../src/db/write/saveAppState.ts"],"sourcesContent":["import { BaseDb } from '@/db/Db/BaseDb'\nimport { appState } from '@/seedSchema'\n\nexport const saveAppState = async (key: string, value: string) => {\n const appDb = BaseDb.getAppDb()\n\n await appDb\n .insert(appState)\n .values({\n key,\n value,\n })\n .onConflictDoUpdate({\n target: appState.key,\n set: {\n value,\n },\n })\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"saveAppState.js","sources":["../../../../../src/db/write/saveAppState.ts"],"sourcesContent":["import { BaseDb } from '@/db/Db/BaseDb'\nimport { appState } from '@/seedSchema'\n\nexport const saveAppState = async (key: string, value: string) => {\n const appDb = BaseDb.getAppDb()\n\n await appDb\n .insert(appState)\n .values({\n key,\n value,\n })\n .onConflictDoUpdate({\n target: appState.key,\n set: {\n value,\n },\n })\n}\n"],"names":[],"mappings":";;;;;;;;;AAGa,MAAA,YAAY,GAAG,OAAO,GAAW,EAAE,KAAa,KAAI;AAC/D,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/B,IAAA,MAAM;SACH,MAAM,CAAC,QAAQ;AACf,SAAA,MAAM,CAAC;QACN,GAAG;QACH,KAAK;KACN;AACA,SAAA,kBAAkB,CAAC;QAClB,MAAM,EAAE,QAAQ,CAAC,GAAG;AACpB,QAAA,GAAG,EAAE;YACH,KAAK;AACN,SAAA;AACF,KAAA,CAAC;AACN;;;;"}
|
|
@@ -4,6 +4,7 @@ import { metadata } from '../../seedSchema/MetadataSchema.js';
|
|
|
4
4
|
import '../../seedSchema/AppStateSchema.js';
|
|
5
5
|
import '../../seedSchema/ModelSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelUidSchema.js';
|
|
7
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
7
8
|
import { BaseDb } from '../Db/BaseDb.js';
|
|
8
9
|
import { eq } from 'drizzle-orm';
|
|
9
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveMetadata.js","sources":["../../../../../src/db/write/saveMetadata.ts"],"sourcesContent":["import { metadata, MetadataType } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { eq } from 'drizzle-orm'\n\nexport const saveMetadata = async (\n metadataRecord: Partial<MetadataType>,\n metadataValues: Partial<MetadataType>,\n) => {\n const appDb = BaseDb.getAppDb()\n\n await appDb\n .update(metadata)\n .set({\n ...metadataValues,\n updatedAt: Date.now(),\n })\n .where(eq(metadata.localId, metadataRecord.localId))\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"saveMetadata.js","sources":["../../../../../src/db/write/saveMetadata.ts"],"sourcesContent":["import { metadata, MetadataType } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { eq } from 'drizzle-orm'\n\nexport const saveMetadata = async (\n metadataRecord: Partial<MetadataType>,\n metadataValues: Partial<MetadataType>,\n) => {\n const appDb = BaseDb.getAppDb()\n\n await appDb\n .update(metadata)\n .set({\n ...metadataValues,\n updatedAt: Date.now(),\n })\n .where(eq(metadata.localId, metadataRecord.localId))\n}\n"],"names":[],"mappings":";;;;;;;;;;AAIa,MAAA,YAAY,GAAG,OAC1B,cAAqC,EACrC,cAAqC,KACnC;AACF,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAE/B,IAAA,MAAM;SACH,MAAM,CAAC,QAAQ;AACf,SAAA,GAAG,CAAC;AACH,QAAA,GAAG,cAAc;AACjB,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB;AACA,SAAA,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;AACxD;;;;"}
|
|
@@ -5,6 +5,7 @@ import { metadata } from '../../seedSchema/MetadataSchema.js';
|
|
|
5
5
|
import '../../seedSchema/AppStateSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelSchema.js';
|
|
7
7
|
import '../../seedSchema/ModelUidSchema.js';
|
|
8
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
8
9
|
import { and, eq, sql } from 'drizzle-orm';
|
|
9
10
|
import { getSeedData } from '../read/getSeedData.js';
|
|
10
11
|
import { getVersionData } from '../read/getVersionData.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateItemPropertyValue.js","sources":["../../../../../src/db/write/updateItemPropertyValue.ts"],"sourcesContent":["import { escapeSqliteString } from '@/helpers/db'\nimport { metadata, MetadataType } from '@/seedSchema'\nimport { and, eq, sql } from 'drizzle-orm'\nimport { getSeedData } from '@/db/read/getSeedData'\nimport { getVersionData } from '@/db/read/getVersionData'\nimport { generateId } from '@/helpers'\nimport debug from 'debug'\nimport { eventEmitter } from '@/eventBus'\nimport { BaseDb } from '@/db/Db/BaseDb'\nconst logger = debug('seedSdk:write:updateItemPropertyValue')\n\nconst sendItemUpdateEvent = ({ modelName, seedLocalId, seedUid }: { modelName: string, seedLocalId: string, seedUid: string }) => {\n if (!modelName || (!seedLocalId && !seedUid)) {\n return\n }\n // eventEmitter.emit(`item.${modelName}.${seedUid || seedLocalId}.update`)\n}\n\ntype UpdateItemPropertyValueResult = {\n localId: string\n schemaUid: string\n}\n\ntype UpdateItemPropertyValue = (props: Partial<MetadataType>) => Promise<UpdateItemPropertyValueResult | undefined>\n\nexport const updateItemPropertyValue: UpdateItemPropertyValue = async ({\n localId,\n propertyName,\n newValue,\n seedUid,\n seedLocalId,\n modelName,\n refSeedType,\n refResolvedValue,\n refResolvedDisplayValue,\n versionLocalId,\n versionUid,\n schemaUid,\n localStorageDir,\n}) => {\n if (!localId && !seedLocalId) {\n logger(\n `[db/write] [updateItemPropertyValue] no propertyLocalId or seedLocalId for property: ${propertyName}`,\n )\n return\n }\n\n let safeNewValue = newValue\n\n if (\n typeof newValue === 'string' &&\n !refResolvedDisplayValue &&\n !refResolvedValue\n ) {\n safeNewValue = escapeSqliteString(newValue)\n }\n\n const appDb = BaseDb.getAppDb()\n\n const rows = await appDb\n .select()\n .from(metadata)\n .where(\n and(\n eq(metadata.propertyName, propertyName!),\n eq(metadata.seedLocalId, seedLocalId!),\n ),\n )\n .orderBy(sql.raw('COALESCE(attestation_created_at, created_at) DESC'))\n\n // const mostRecentRecordStatement = `SELECT local_id,\n // uid,\n // property_name,\n // property_value,\n // model_type,\n // seed_uid,\n // seed_local_id,\n // version_local_id,\n // version_uid,\n // schema_uid,\n // eas_data_type\n // FROM metadata\n // WHERE property_name = '${propertyName}'\n // AND seed_local_id = '${seedLocalId}'\n // ORDER BY COALESCE(attestation_created_at, created_at) DESC;`\n //\n // const { rows } = await runQueryForStatement(mostRecentRecordStatement)\n\n if (rows && rows.length > 0) {\n const {\n localId,\n uid,\n propertyName: propertyNameFromDb,\n propertyValue: propertyValueFromDb,\n modelType,\n seedUid,\n seedLocalId: seedLocalIdFromDb,\n versionLocalId,\n versionUid,\n schemaUid,\n easDataType,\n localStorageDir: localStorageDirFromDb,\n refSeedType: refSeedTypeFromDb,\n refResolvedValue: refResolvedValueFromDb,\n refResolvedDisplayValue: refResolvedDisplayValueFromDb,\n } = rows[0]\n\n if (\n propertyValueFromDb === newValue &&\n modelType === modelName?.toLowerCase() &&\n refSeedTypeFromDb === refSeedType &&\n refResolvedValueFromDb === refResolvedValue\n ) {\n logger(\n `[db/write] [updateItemPropertyValue] value is the same as most recent record for property: ${propertyNameFromDb}`,\n )\n return\n }\n\n // This means we already have a local-only record so we should just update that one\n if (!uid) {\n const updatePropertyStatement = `UPDATE metadata\n SET property_value = '${safeNewValue}',\n ref_seed_type = ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ref_resolved_value = ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'},\n ref_resolved_display_value = ${refResolvedDisplayValue ? `'${refResolvedDisplayValue}'` : 'NULL'},\n updated_at = ${Date.now()}\n WHERE local_id = '${localId}';`\n\n await appDb.run(sql.raw(updatePropertyStatement))\n\n sendItemUpdateEvent({ modelName, seedLocalId, seedUid })\n\n return\n }\n\n const seedDataFromDb = await getSeedData({ seedLocalId })\n const versionDataFromDb = await getVersionData({ localId: versionLocalId })\n\n // Here we don't have a local-only record so we need to create a new one\n const newLocalId = generateId()\n\n const newPropertyStatement = `INSERT INTO metadata (local_id,\n property_name,\n property_value,\n model_type,\n seed_uid,\n seed_local_id,\n version_local_id,\n version_uid,\n schema_uid,\n eas_data_type,\n ref_seed_type,\n ref_resolved_value,\n ref_resolved_display_value,\n local_storage_dir,\n created_at)\n VALUES ('${newLocalId}',\n '${propertyNameFromDb}',\n '${safeNewValue}',\n '${modelType || modelName?.toLowerCase()}',\n ${seedDataFromDb?.uid ? `'${seedDataFromDb.uid}'` : 'NULL'},\n '${seedLocalIdFromDb}',\n '${versionLocalId}',\n ${versionDataFromDb?.uid ? `'${versionDataFromDb.uid}'` : 'NULL'},\n '${schemaUid}',\n ${easDataType ? `'${easDataType}'` : 'NULL'},\n ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'},\n ${refResolvedDisplayValue ? `'${refResolvedDisplayValue}'` : 'NULL'},\n ${localStorageDir ? `'${localStorageDir}'` : 'NULL'},\n ${Date.now()});`\n\n await appDb.run(sql.raw(newPropertyStatement))\n\n sendItemUpdateEvent({ modelName, seedLocalId, seedUid })\n\n return {\n localId: newLocalId,\n schemaUid,\n }\n }\n\n // Here there are no records for this property on this seed so we should create one\n\n const newLocalId = generateId()\n\n if (!seedUid) {\n const seedData = await getSeedData({ seedLocalId })\n if (seedData) {\n seedUid = seedData.uid\n }\n }\n\n if (!versionUid) {\n const versionData = await getVersionData({ localId: versionLocalId })\n if (versionData) {\n versionUid = versionData.uid\n }\n }\n\n const newPropertyStatement = `INSERT INTO metadata (local_id,\n property_name,\n property_value,\n model_type,\n seed_uid,\n seed_local_id,\n version_local_id,\n version_uid,\n schema_uid,\n ref_seed_type,\n ref_resolved_value,\n ref_resolved_display_value,\n local_storage_dir,\n created_at)\n VALUES ('${newLocalId}',\n '${propertyName}',\n '${safeNewValue}',\n '${modelName?.toLowerCase()}',\n ${seedUid ? `'${seedUid}'` : 'NULL'},\n '${seedLocalId}',\n '${versionLocalId}',\n ${versionUid ? `'${versionUid}'` : 'NULL'},\n '${schemaUid}',\n ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'},\n ${refResolvedDisplayValue ? `'${refResolvedDisplayValue}'` : 'NULL'},\n ${localStorageDir ? `'${localStorageDir}'` : 'NULL'},\n ${Date.now()});`\n\n await appDb.run(sql.raw(newPropertyStatement))\n\n sendItemUpdateEvent({ modelName, seedLocalId, seedUid })\n\n return {\n localId: newLocalId,\n schemaUid,\n }\n\n if (!seedLocalId && propertyName && modelName && newValue) {\n // TODO: Does this ever happen? If so, what should we do?\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"updateItemPropertyValue.js","sources":["../../../../../src/db/write/updateItemPropertyValue.ts"],"sourcesContent":["import { escapeSqliteString } from '@/helpers/db'\nimport { metadata, MetadataType } from '@/seedSchema'\nimport { and, eq, sql } from 'drizzle-orm'\nimport { getSeedData } from '@/db/read/getSeedData'\nimport { getVersionData } from '@/db/read/getVersionData'\nimport { generateId } from '@/helpers'\nimport debug from 'debug'\nimport { eventEmitter } from '@/eventBus'\nimport { BaseDb } from '@/db/Db/BaseDb'\nconst logger = debug('seedSdk:write:updateItemPropertyValue')\n\nconst sendItemUpdateEvent = ({ modelName, seedLocalId, seedUid }: { modelName: string, seedLocalId: string, seedUid: string }) => {\n if (!modelName || (!seedLocalId && !seedUid)) {\n return\n }\n // eventEmitter.emit(`item.${modelName}.${seedUid || seedLocalId}.update`)\n}\n\ntype UpdateItemPropertyValueResult = {\n localId: string\n schemaUid: string\n}\n\ntype UpdateItemPropertyValue = (props: Partial<MetadataType>) => Promise<UpdateItemPropertyValueResult | undefined>\n\nexport const updateItemPropertyValue: UpdateItemPropertyValue = async ({\n localId,\n propertyName,\n newValue,\n seedUid,\n seedLocalId,\n modelName,\n refSeedType,\n refResolvedValue,\n refResolvedDisplayValue,\n versionLocalId,\n versionUid,\n schemaUid,\n localStorageDir,\n}) => {\n if (!localId && !seedLocalId) {\n logger(\n `[db/write] [updateItemPropertyValue] no propertyLocalId or seedLocalId for property: ${propertyName}`,\n )\n return\n }\n\n let safeNewValue = newValue\n\n if (\n typeof newValue === 'string' &&\n !refResolvedDisplayValue &&\n !refResolvedValue\n ) {\n safeNewValue = escapeSqliteString(newValue)\n }\n\n const appDb = BaseDb.getAppDb()\n\n const rows = await appDb\n .select()\n .from(metadata)\n .where(\n and(\n eq(metadata.propertyName, propertyName!),\n eq(metadata.seedLocalId, seedLocalId!),\n ),\n )\n .orderBy(sql.raw('COALESCE(attestation_created_at, created_at) DESC'))\n\n // const mostRecentRecordStatement = `SELECT local_id,\n // uid,\n // property_name,\n // property_value,\n // model_type,\n // seed_uid,\n // seed_local_id,\n // version_local_id,\n // version_uid,\n // schema_uid,\n // eas_data_type\n // FROM metadata\n // WHERE property_name = '${propertyName}'\n // AND seed_local_id = '${seedLocalId}'\n // ORDER BY COALESCE(attestation_created_at, created_at) DESC;`\n //\n // const { rows } = await runQueryForStatement(mostRecentRecordStatement)\n\n if (rows && rows.length > 0) {\n const {\n localId,\n uid,\n propertyName: propertyNameFromDb,\n propertyValue: propertyValueFromDb,\n modelType,\n seedUid,\n seedLocalId: seedLocalIdFromDb,\n versionLocalId,\n versionUid,\n schemaUid,\n easDataType,\n localStorageDir: localStorageDirFromDb,\n refSeedType: refSeedTypeFromDb,\n refResolvedValue: refResolvedValueFromDb,\n refResolvedDisplayValue: refResolvedDisplayValueFromDb,\n } = rows[0]\n\n if (\n propertyValueFromDb === newValue &&\n modelType === modelName?.toLowerCase() &&\n refSeedTypeFromDb === refSeedType &&\n refResolvedValueFromDb === refResolvedValue\n ) {\n logger(\n `[db/write] [updateItemPropertyValue] value is the same as most recent record for property: ${propertyNameFromDb}`,\n )\n return\n }\n\n // This means we already have a local-only record so we should just update that one\n if (!uid) {\n const updatePropertyStatement = `UPDATE metadata\n SET property_value = '${safeNewValue}',\n ref_seed_type = ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ref_resolved_value = ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'},\n ref_resolved_display_value = ${refResolvedDisplayValue ? `'${refResolvedDisplayValue}'` : 'NULL'},\n updated_at = ${Date.now()}\n WHERE local_id = '${localId}';`\n\n await appDb.run(sql.raw(updatePropertyStatement))\n\n sendItemUpdateEvent({ modelName, seedLocalId, seedUid })\n\n return\n }\n\n const seedDataFromDb = await getSeedData({ seedLocalId })\n const versionDataFromDb = await getVersionData({ localId: versionLocalId })\n\n // Here we don't have a local-only record so we need to create a new one\n const newLocalId = generateId()\n\n const newPropertyStatement = `INSERT INTO metadata (local_id,\n property_name,\n property_value,\n model_type,\n seed_uid,\n seed_local_id,\n version_local_id,\n version_uid,\n schema_uid,\n eas_data_type,\n ref_seed_type,\n ref_resolved_value,\n ref_resolved_display_value,\n local_storage_dir,\n created_at)\n VALUES ('${newLocalId}',\n '${propertyNameFromDb}',\n '${safeNewValue}',\n '${modelType || modelName?.toLowerCase()}',\n ${seedDataFromDb?.uid ? `'${seedDataFromDb.uid}'` : 'NULL'},\n '${seedLocalIdFromDb}',\n '${versionLocalId}',\n ${versionDataFromDb?.uid ? `'${versionDataFromDb.uid}'` : 'NULL'},\n '${schemaUid}',\n ${easDataType ? `'${easDataType}'` : 'NULL'},\n ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'},\n ${refResolvedDisplayValue ? `'${refResolvedDisplayValue}'` : 'NULL'},\n ${localStorageDir ? `'${localStorageDir}'` : 'NULL'},\n ${Date.now()});`\n\n await appDb.run(sql.raw(newPropertyStatement))\n\n sendItemUpdateEvent({ modelName, seedLocalId, seedUid })\n\n return {\n localId: newLocalId,\n schemaUid,\n }\n }\n\n // Here there are no records for this property on this seed so we should create one\n\n const newLocalId = generateId()\n\n if (!seedUid) {\n const seedData = await getSeedData({ seedLocalId })\n if (seedData) {\n seedUid = seedData.uid\n }\n }\n\n if (!versionUid) {\n const versionData = await getVersionData({ localId: versionLocalId })\n if (versionData) {\n versionUid = versionData.uid\n }\n }\n\n const newPropertyStatement = `INSERT INTO metadata (local_id,\n property_name,\n property_value,\n model_type,\n seed_uid,\n seed_local_id,\n version_local_id,\n version_uid,\n schema_uid,\n ref_seed_type,\n ref_resolved_value,\n ref_resolved_display_value,\n local_storage_dir,\n created_at)\n VALUES ('${newLocalId}',\n '${propertyName}',\n '${safeNewValue}',\n '${modelName?.toLowerCase()}',\n ${seedUid ? `'${seedUid}'` : 'NULL'},\n '${seedLocalId}',\n '${versionLocalId}',\n ${versionUid ? `'${versionUid}'` : 'NULL'},\n '${schemaUid}',\n ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'},\n ${refResolvedDisplayValue ? `'${refResolvedDisplayValue}'` : 'NULL'},\n ${localStorageDir ? `'${localStorageDir}'` : 'NULL'},\n ${Date.now()});`\n\n await appDb.run(sql.raw(newPropertyStatement))\n\n sendItemUpdateEvent({ modelName, seedLocalId, seedUid })\n\n return {\n localId: newLocalId,\n schemaUid,\n }\n\n if (!seedLocalId && propertyName && modelName && newValue) {\n // TODO: Does this ever happen? If so, what should we do?\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { metadata } from '../../seedSchema/MetadataSchema.js';
|
|
|
4
4
|
import '../../seedSchema/AppStateSchema.js';
|
|
5
5
|
import '../../seedSchema/ModelSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelUidSchema.js';
|
|
7
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
7
8
|
import { BaseDb } from '../Db/BaseDb.js';
|
|
8
9
|
import { eq } from 'drizzle-orm';
|
|
9
10
|
import 'graphql-request';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateMetadata.js","sources":["../../../../../src/db/write/updateMetadata.ts"],"sourcesContent":["import { metadata, MetadataType } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { eq } from 'drizzle-orm'\nimport { PropertyType } from '@/types'\nimport { BaseQueryClient } from '@/helpers/QueryClient/BaseQueryClient'\nimport { BaseEasClient } from '@/helpers/EasClient/BaseEasClient'\nimport { INTERNAL_DATA_TYPES } from '@/helpers/constants'\nimport { toSnakeCase } from 'drizzle-orm/casing'\nimport { Schema } from '@/graphql/gql/graphql'\nimport { GET_SCHEMA_BY_NAME } from '@/Item/queries'\n\ntype UpdateMetadata = (\n metadataValues: Partial<MetadataType>,\n propertyRecordSchema?: PropertyType | undefined,\n) => Promise<MetadataType>\n\nexport const updateMetadata: UpdateMetadata = async (metadataValues, propertyRecordSchema) => {\n const appDb = BaseDb.getAppDb()\n\n const { localId, ...rest } = metadataValues\n\n if (!localId) {\n throw new Error('No localId provided to updateMetadata')\n }\n \n const isItemStorage = propertyRecordSchema && propertyRecordSchema.storageType === 'ItemStorage'\n\n if (\n !isItemStorage && \n propertyRecordSchema &&\n (!metadataValues.schemaUid || metadataValues.schemaUid === 'undefined' )\n ) {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const easDataType = INTERNAL_DATA_TYPES[propertyRecordSchema.dataType].eas\n\n const propertyNameSnakeCase = toSnakeCase(metadataValues.propertyName)\n \n const queryResult = await queryClient.fetchQuery({\n queryKey: [`getSchemaByName${metadataValues.propertyName}`],\n queryFn: async (): Promise<{schemas: Schema[]}> =>\n easClient.request(GET_SCHEMA_BY_NAME, {\n where: {\n schema: {\n equals: `${easDataType} ${propertyNameSnakeCase}`,\n },\n },\n }),\n })\n\n if (queryResult && queryResult.schemas.length > 0) {\n metadataValues.schemaUid = queryResult.schemas[0].id\n }\n\n }\n\n await appDb.update(metadata).set(rest).where(eq(metadata.localId, localId))\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"updateMetadata.js","sources":["../../../../../src/db/write/updateMetadata.ts"],"sourcesContent":["import { metadata, MetadataType } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { eq } from 'drizzle-orm'\nimport { PropertyType } from '@/types'\nimport { BaseQueryClient } from '@/helpers/QueryClient/BaseQueryClient'\nimport { BaseEasClient } from '@/helpers/EasClient/BaseEasClient'\nimport { INTERNAL_DATA_TYPES } from '@/helpers/constants'\nimport { toSnakeCase } from 'drizzle-orm/casing'\nimport { Schema } from '@/graphql/gql/graphql'\nimport { GET_SCHEMA_BY_NAME } from '@/Item/queries'\n\ntype UpdateMetadata = (\n metadataValues: Partial<MetadataType>,\n propertyRecordSchema?: PropertyType | undefined,\n) => Promise<MetadataType>\n\nexport const updateMetadata: UpdateMetadata = async (metadataValues, propertyRecordSchema) => {\n const appDb = BaseDb.getAppDb()\n\n const { localId, ...rest } = metadataValues\n\n if (!localId) {\n throw new Error('No localId provided to updateMetadata')\n }\n \n const isItemStorage = propertyRecordSchema && propertyRecordSchema.storageType === 'ItemStorage'\n\n if (\n !isItemStorage && \n propertyRecordSchema &&\n (!metadataValues.schemaUid || metadataValues.schemaUid === 'undefined' )\n ) {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const easDataType = INTERNAL_DATA_TYPES[propertyRecordSchema.dataType].eas\n\n const propertyNameSnakeCase = toSnakeCase(metadataValues.propertyName)\n \n const queryResult = await queryClient.fetchQuery({\n queryKey: [`getSchemaByName${metadataValues.propertyName}`],\n queryFn: async (): Promise<{schemas: Schema[]}> =>\n easClient.request(GET_SCHEMA_BY_NAME, {\n where: {\n schema: {\n equals: `${easDataType} ${propertyNameSnakeCase}`,\n },\n },\n }),\n })\n\n if (queryResult && queryResult.schemas.length > 0) {\n metadataValues.schemaUid = queryResult.schemas[0].id\n }\n\n }\n\n await appDb.update(metadata).set(rest).where(eq(metadata.localId, localId))\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgBa,MAAA,cAAc,GAAmB,OAAO,cAAc,EAAE,oBAAoB,KAAI;AAC3F,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;IAE/B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,cAAc;IAE3C,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;;IAmC1D,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7E;;;;"}
|
|
@@ -7,6 +7,7 @@ import '../../seedSchema/MetadataSchema.js';
|
|
|
7
7
|
import { appState } from '../../seedSchema/AppStateSchema.js';
|
|
8
8
|
import '../../seedSchema/ModelSchema.js';
|
|
9
9
|
import '../../seedSchema/ModelUidSchema.js';
|
|
10
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
10
11
|
import { eq } from 'drizzle-orm';
|
|
11
12
|
import { getAddressesFromDb } from '../../helpers/db.js';
|
|
12
13
|
import '../../helpers/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sources":["../../../../../src/events/files/download.ts"],"sourcesContent":["import { syncDbFiles } from '@/services/internal/helpers'\nimport { eventEmitter } from '@/eventBus'\nimport { ARWEAVE_HOST } from '@/services/internal/constants'\nimport { appState } from '@/seedSchema'\nimport { eq } from 'drizzle-orm'\nimport { getAddressesFromDb } from '@/helpers/db'\nimport {\n BaseFileManager,\n} from '@/helpers'\nimport { GET_FILES_METADATA } from '@/schema/file/queries'\nimport debug from 'debug'\nimport { getGlobalService } from '@/services/global/globalMachine'\nimport { waitFor } from 'xstate'\nimport { getMetadata } from '@/db/read/getMetadata'\nimport { saveMetadata } from '@/db/write/saveMetadata'\nimport { GET_TRANSACTION_TAGS } from '@/helpers/ArweaveClient/queries'\nimport { saveAppState } from '@/db/write/saveAppState'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { BaseEasClient, BaseQueryClient, BaseArweaveClient } from '@/helpers'\nimport { getArweave } from '@/helpers/ArweaveClient'\nimport { isBrowser } from '@/helpers/environment'\n\n\nconst logger = debug('seedSdk:files:download')\n\n\nexport const downloadAllFilesRequestHandler = async ({\n endpoints,\n eventId,\n}) => {\n\n if (!isBrowser()) {\n return\n }\n\n await syncDbFiles(endpoints)\n\n eventEmitter.emit('fs.downloadAll.success', { eventId })\n eventEmitter.emit('fs.downloadAllBinary.request', { endpoints })\n}\n\nexport const downloadAllFilesBinaryRequestHandler = async () => {\n let addresses: string[] | undefined\n\n if (BaseDb.isAppDbReady()) {\n addresses = await getAddressesFromDb()\n }\n\n if (!BaseDb.isAppDbReady()) {\n const globalService = getGlobalService()\n const internalService = globalService.getSnapshot().context.internalService\n if (internalService) {\n await waitFor(internalService, (snapshot) => {\n return snapshot.value === 'ready'\n })\n addresses = await getAddressesFromDb()\n }\n }\n\n if (!addresses || addresses.length === 0) {\n return\n }\n\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const { filesMetadata } = await queryClient.fetchQuery({\n queryKey: ['getFilesMetadata', ...addresses],\n queryFn: async () =>\n easClient.request(GET_FILES_METADATA, {\n where: {\n attester: {\n in: addresses,\n },\n schema: {\n is: {\n id: {\n equals:\n '0x55fdefb36fcbbaebeb7d6b41dc3a1a9666e4e42154267c889de064faa7ede517',\n },\n },\n },\n },\n }),\n })\n\n await BaseFileManager.createDirIfNotExists('/files')\n await BaseFileManager.createDirIfNotExists('/files/html')\n await BaseFileManager.createDirIfNotExists('/files/json')\n await BaseFileManager.createDirIfNotExists('/files/images')\n\n const appDb = BaseDb.getAppDb()\n\n if (!appDb) {\n console.warn('[fetchAll/actors] [fetchAllBinaryData] seedDb not available')\n return []\n }\n\n const excludedTransactionsQuery = await appDb\n .select()\n .from(appState)\n .where(eq(appState.key, 'excludedTransactions'))\n\n let excludedTransactions = new Set<string>()\n\n if (excludedTransactionsQuery && excludedTransactionsQuery.length === 1) {\n const valueString = excludedTransactionsQuery[0].value\n if (valueString) {\n const excludedTransactionsArray = JSON.parse(valueString)\n excludedTransactions = new Set(excludedTransactionsArray)\n }\n }\n\n const transactionIds = []\n\n for (const fileMetadata of filesMetadata) {\n const json = JSON.parse(fileMetadata.decodedDataJson)\n const transactionId = json[0].value.value\n if (excludedTransactions.has(transactionId)) {\n continue\n }\n transactionIds.push(transactionId)\n }\n\n const arweave = getArweave()\n\n if (!arweave) {\n console.warn(\n '[fetchAll/actors] [fetchAllBinaryData] arweave not available',\n )\n return []\n }\n\n const arweaveClient = BaseArweaveClient.getArweaveClient()\n\n const transactionIdsToDownload = []\n\n for (const transactionId of transactionIds) {\n\n try {\n const res = await fetch(\n `https://${ARWEAVE_HOST}/tx/${transactionId}/status`,\n )\n\n if (res.status !== 200) {\n logger(\n `[fetchAll/actors] [fetchAllBinaryData] error fetching transaction data for ${transactionId}`,\n )\n\n excludedTransactions.add(transactionId)\n\n await saveAppState(\n 'excludedTransactions',\n JSON.stringify(Array.from(excludedTransactions)),\n )\n\n continue\n }\n \n const { tags: tagsResult } = await queryClient.fetchQuery({\n queryKey: ['getTransactionTags', transactionId],\n queryFn: async () =>\n arweaveClient.request(GET_TRANSACTION_TAGS, {\n transactionId,\n }),\n })\n\n const tags = tagsResult.tags || []\n\n if (tagsResult.tags && tagsResult.tags.length > 0) {\n for (const { name, value } of tags) {\n if (name === 'Content-SHA-256') {\n const metadataRecord = await getMetadata({\n storageTransactionId: transactionId,\n })\n\n if (metadataRecord) {\n await saveMetadata(metadataRecord, {\n contentHash: value,\n })\n }\n }\n }\n }\n\n transactionIdsToDownload.push(transactionId)\n\n \n\n } catch (error) {\n logger(error)\n }\n }\n\n await BaseFileManager.downloadAllFiles({\n transactionIds: transactionIdsToDownload,\n arweaveHost: ARWEAVE_HOST,\n excludedTransactions,\n })\n\n await BaseFileManager.resizeAllImages({\n width: 480,\n height: 480,\n })\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"download.js","sources":["../../../../../src/events/files/download.ts"],"sourcesContent":["import { syncDbFiles } from '@/services/internal/helpers'\nimport { eventEmitter } from '@/eventBus'\nimport { ARWEAVE_HOST } from '@/services/internal/constants'\nimport { appState } from '@/seedSchema'\nimport { eq } from 'drizzle-orm'\nimport { getAddressesFromDb } from '@/helpers/db'\nimport {\n BaseFileManager,\n} from '@/helpers'\nimport { GET_FILES_METADATA } from '@/schema/file/queries'\nimport debug from 'debug'\nimport { getGlobalService } from '@/services/global/globalMachine'\nimport { waitFor } from 'xstate'\nimport { getMetadata } from '@/db/read/getMetadata'\nimport { saveMetadata } from '@/db/write/saveMetadata'\nimport { GET_TRANSACTION_TAGS } from '@/helpers/ArweaveClient/queries'\nimport { saveAppState } from '@/db/write/saveAppState'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { BaseEasClient, BaseQueryClient, BaseArweaveClient } from '@/helpers'\nimport { getArweave } from '@/helpers/ArweaveClient'\nimport { isBrowser } from '@/helpers/environment'\n\n\nconst logger = debug('seedSdk:files:download')\n\n\nexport const downloadAllFilesRequestHandler = async ({\n endpoints,\n eventId,\n}) => {\n\n if (!isBrowser()) {\n return\n }\n\n await syncDbFiles(endpoints)\n\n eventEmitter.emit('fs.downloadAll.success', { eventId })\n eventEmitter.emit('fs.downloadAllBinary.request', { endpoints })\n}\n\nexport const downloadAllFilesBinaryRequestHandler = async () => {\n let addresses: string[] | undefined\n\n if (BaseDb.isAppDbReady()) {\n addresses = await getAddressesFromDb()\n }\n\n if (!BaseDb.isAppDbReady()) {\n const globalService = getGlobalService()\n const internalService = globalService.getSnapshot().context.internalService\n if (internalService) {\n await waitFor(internalService, (snapshot) => {\n return snapshot.value === 'ready'\n })\n addresses = await getAddressesFromDb()\n }\n }\n\n if (!addresses || addresses.length === 0) {\n return\n }\n\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const { filesMetadata } = await queryClient.fetchQuery({\n queryKey: ['getFilesMetadata', ...addresses],\n queryFn: async () =>\n easClient.request(GET_FILES_METADATA, {\n where: {\n attester: {\n in: addresses,\n },\n schema: {\n is: {\n id: {\n equals:\n '0x55fdefb36fcbbaebeb7d6b41dc3a1a9666e4e42154267c889de064faa7ede517',\n },\n },\n },\n },\n }),\n })\n\n await BaseFileManager.createDirIfNotExists('/files')\n await BaseFileManager.createDirIfNotExists('/files/html')\n await BaseFileManager.createDirIfNotExists('/files/json')\n await BaseFileManager.createDirIfNotExists('/files/images')\n\n const appDb = BaseDb.getAppDb()\n\n if (!appDb) {\n console.warn('[fetchAll/actors] [fetchAllBinaryData] seedDb not available')\n return []\n }\n\n const excludedTransactionsQuery = await appDb\n .select()\n .from(appState)\n .where(eq(appState.key, 'excludedTransactions'))\n\n let excludedTransactions = new Set<string>()\n\n if (excludedTransactionsQuery && excludedTransactionsQuery.length === 1) {\n const valueString = excludedTransactionsQuery[0].value\n if (valueString) {\n const excludedTransactionsArray = JSON.parse(valueString)\n excludedTransactions = new Set(excludedTransactionsArray)\n }\n }\n\n const transactionIds = []\n\n for (const fileMetadata of filesMetadata) {\n const json = JSON.parse(fileMetadata.decodedDataJson)\n const transactionId = json[0].value.value\n if (excludedTransactions.has(transactionId)) {\n continue\n }\n transactionIds.push(transactionId)\n }\n\n const arweave = getArweave()\n\n if (!arweave) {\n console.warn(\n '[fetchAll/actors] [fetchAllBinaryData] arweave not available',\n )\n return []\n }\n\n const arweaveClient = BaseArweaveClient.getArweaveClient()\n\n const transactionIdsToDownload = []\n\n for (const transactionId of transactionIds) {\n\n try {\n const res = await fetch(\n `https://${ARWEAVE_HOST}/tx/${transactionId}/status`,\n )\n\n if (res.status !== 200) {\n logger(\n `[fetchAll/actors] [fetchAllBinaryData] error fetching transaction data for ${transactionId}`,\n )\n\n excludedTransactions.add(transactionId)\n\n await saveAppState(\n 'excludedTransactions',\n JSON.stringify(Array.from(excludedTransactions)),\n )\n\n continue\n }\n \n const { tags: tagsResult } = await queryClient.fetchQuery({\n queryKey: ['getTransactionTags', transactionId],\n queryFn: async () =>\n arweaveClient.request(GET_TRANSACTION_TAGS, {\n transactionId,\n }),\n })\n\n const tags = tagsResult.tags || []\n\n if (tagsResult.tags && tagsResult.tags.length > 0) {\n for (const { name, value } of tags) {\n if (name === 'Content-SHA-256') {\n const metadataRecord = await getMetadata({\n storageTransactionId: transactionId,\n })\n\n if (metadataRecord) {\n await saveMetadata(metadataRecord, {\n contentHash: value,\n })\n }\n }\n }\n }\n\n transactionIdsToDownload.push(transactionId)\n\n \n\n } catch (error) {\n logger(error)\n }\n }\n\n await BaseFileManager.downloadAllFiles({\n transactionIds: transactionIdsToDownload,\n arweaveHost: ARWEAVE_HOST,\n excludedTransactions,\n })\n\n await BaseFileManager.resizeAllImages({\n width: 480,\n height: 480,\n })\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { metadata } from '../../seedSchema/MetadataSchema.js';
|
|
|
5
5
|
import '../../seedSchema/AppStateSchema.js';
|
|
6
6
|
import '../../seedSchema/ModelSchema.js';
|
|
7
7
|
import { modelUids } from '../../seedSchema/ModelUidSchema.js';
|
|
8
|
+
import '../../seedSchema/ConfigSchema.js';
|
|
8
9
|
import { inArray, sql, and, eq } from 'drizzle-orm';
|
|
9
10
|
import { generateId, parseEasRelationPropertyName } from '../../helpers/index.js';
|
|
10
11
|
import { GET_SEEDS, GET_VERSIONS, GET_PROPERTIES } from '../../Item/queries.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncDbWithEas.js","sources":["../../../../../src/events/item/syncDbWithEas.ts"],"sourcesContent":["import { camelCase, DebouncedFunc, startCase, throttle } from 'lodash-es'\nimport { Attestation, SchemaWhereInput } from '@/graphql/gql/graphql'\nimport {\n metadata,\n MetadataType,\n modelUids,\n seeds,\n SeedType,\n versions,\n} from '@/seedSchema'\nimport { and, eq, inArray, sql } from 'drizzle-orm'\nimport {\n generateId,\n parseEasRelationPropertyName,\n} from '@/helpers'\nimport {\n GET_PROPERTIES,\n GET_SEEDS,\n GET_VERSIONS,\n} from '@/Item/queries'\nimport { escapeSqliteString, getAddressesFromDb } from '@/helpers/db'\nimport { eventEmitter } from '@/eventBus'\nimport { getModelNames, getModels } from '@/stores/modelClass'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { getModelSchemas } from '@/db/read/getModelSchemas'\nimport { ModelSchema, PropertyType } from '@/types'\nimport { createSeeds } from '@/db/write/createSeeds'\nimport { setSchemaUidForSchemaDefinition } from '@/stores/eas'\nimport { BaseEasClient } from '@/helpers/EasClient/BaseEasClient'\nimport { BaseQueryClient } from '@/helpers/QueryClient/BaseQueryClient'\nimport { getItemPropertiesFromEas, getItemVersionsFromEas, getModelSchemasFromEas } from '@/browser/helpers/eas'\n\n\nconst relationValuesToExclude = [\n '0x0000000000000000000000000000000000000000000000000000000000000020',\n]\n\n\nconst getSeedsFromSchemaUids = async ({ schemaUids, addresses }) => {\n const AND = [\n {\n OR: [] as Record<string, unknown>[],\n },\n ]\n\n for (const schemaUid of schemaUids) {\n AND[0].OR.push({\n decodedDataJson: {\n contains: schemaUid,\n },\n })\n }\n\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const { itemSeeds } = await queryClient.fetchQuery({\n queryKey: [`getSeedsForAllModels`],\n queryFn: async () =>\n easClient.request(GET_SEEDS, {\n where: {\n attester: {\n in: addresses,\n },\n schemaId: {\n in: schemaUids,\n },\n AND,\n },\n }),\n })\n\n return itemSeeds\n}\n\nconst seedUidToLocalId = new Map<string, string>()\nconst seedUidToModelType = new Map<string, string>()\nconst relatedSeedUids = new Set<string>()\n\nconst versionUidToLocalId = new Map<string, string>()\nconst versionUidToSeedUid = new Map<string, string>()\n\nconst propertyUidToLocalId = new Map<string, string>()\n\ntype SaveEasSeedsToDbProps = {\n itemSeeds: Attestation[]\n}\n\ntype SaveEasSeedsToDbReturn = {\n seedUids: string[]\n}\n\ntype SaveEasSeedsToDb = (\n props: SaveEasSeedsToDbProps,\n) => Promise<SaveEasSeedsToDbReturn>\n\nconst saveEasSeedsToDb: SaveEasSeedsToDb = async ({ itemSeeds }) => {\n const appDb = BaseDb.getAppDb()\n\n const seedUids = itemSeeds.map((seed) => seed.id)\n\n const existingSeedRecordsRows: SeedType[] = await appDb\n .select()\n .from(seeds)\n .where(inArray(seeds.uid, seedUids))\n\n const existingSeedUids = new Set<string>()\n\n if (existingSeedRecordsRows && existingSeedRecordsRows.length > 0) {\n for (const row of existingSeedRecordsRows) {\n existingSeedUids.add(row.uid)\n seedUidToLocalId.set(row.uid, row.localId)\n seedUidToModelType.set(row.uid, row.type)\n }\n }\n\n const newSeeds = itemSeeds.filter((seed) => !existingSeedUids.has(seed.id))\n\n if (newSeeds.length === 0) {\n return { seedUidToLocalId, seedUids }\n }\n\n const newSeedsData: Partial<SeedType>[] = []\n\n for (let i = 0; i < newSeeds.length; i++) {\n const seed = newSeeds[i]\n seedUidToModelType.set(seed.id, seed.schema.schemaNames[0].name)\n const seedLocalId = generateId()\n seedUidToLocalId.set(seed.id, seedLocalId)\n\n const attestationRaw = escapeSqliteString(JSON.stringify(seed))\n\n newSeedsData.push({\n localId: seedLocalId,\n uid: seed.id,\n schemaUid: seed.schemaId,\n type: seed.schema.schemaNames[0].name,\n createdAt: Date.now(),\n attestationCreatedAt: seed.timeCreated * 1000,\n attestationRaw,\n })\n\n seedUidToLocalId.set(seed.id, seedLocalId)\n }\n\n const newSeedUids = await createSeeds(newSeedsData)\n\n return { seedUids: newSeedUids }\n}\n\ntype SaveEasVersionsToDbParams = {\n itemVersions: Attestation[]\n}\n\ntype SaveEasVersionsToDb = (\n props: SaveEasVersionsToDbParams,\n) => Promise<SaveEasVersionsToDbReturn>\n\ntype SaveEasVersionsToDbReturn = {\n versionUids: string[]\n}\n\nconst saveEasVersionsToDb: SaveEasVersionsToDb = async ({ itemVersions }) => {\n const versionUids = itemVersions.map((version) => version.id)\n\n const appDb = BaseDb.getAppDb()\n\n const existingVersionRecordsRows: MetadataType[] = await appDb\n .select()\n .from(versions)\n .where(inArray(versions.uid, versionUids))\n\n const existingVersionUids = new Set<string>()\n\n if (existingVersionRecordsRows && existingVersionRecordsRows.length > 0) {\n for (const row of existingVersionRecordsRows) {\n existingVersionUids.add(row.uid)\n versionUidToLocalId.set(row.uid, row.localId)\n versionUidToSeedUid.set(row.uid, row.seedUid)\n }\n }\n\n const newVersions = itemVersions.filter(\n (version) => !existingVersionUids.has(version.id),\n )\n\n if (newVersions.length === 0) {\n return { versionUidToLocalId, versionUids }\n }\n\n let insertVersionsQuery = `INSERT INTO versions (local_id, uid, seed_uid, seed_local_id, seed_type, created_at,\n attestation_created_at,\n attestation_raw)\n VALUES `\n\n for (let i = 0; i < newVersions.length; i++) {\n const version = newVersions[i]\n versionUidToSeedUid.set(version.id, version.refUID)\n const versionLocalId = generateId()\n versionUidToLocalId.set(version.id, versionLocalId)\n\n const seedUid = versionUidToSeedUid.get(version.id)\n const seedLocalId = seedUidToLocalId.get(seedUid!)\n const seedType = seedUidToModelType.get(seedUid!)\n const attestationRaw = escapeSqliteString(JSON.stringify(version))\n\n const valuesString = `('${versionLocalId}', '${version.id}', '${seedUid}', '${seedLocalId}', '${seedType}', ${Date.now()}, ${version.timeCreated * 1000}, '${attestationRaw}')`\n\n if (i < newVersions.length - 1) {\n insertVersionsQuery += valuesString + ', '\n }\n\n if (i === newVersions.length - 1) {\n insertVersionsQuery += valuesString + ';'\n }\n\n versionUidToLocalId.set(version.id, versionLocalId)\n }\n\n await appDb.run(sql.raw(insertVersionsQuery))\n\n return { versionUids }\n}\n\nconst createMetadataRecordsForStorageTransactionId = async (\n storageTransactionIdProperty: Attestation,\n modelSchema: ModelSchema,\n) => {\n const attestationData = JSON.parse(\n storageTransactionIdProperty.decodedDataJson,\n )[0].value\n const propertyName = camelCase(attestationData.name)\n const propertyValue = attestationData.value\n\n const itemStorageProperties = new Map<string, PropertyType>()\n\n for (const [_propertyName, propertyDef] of Object.entries(modelSchema)) {\n if (propertyDef?.storageType && propertyDef.storageType === 'ItemStorage') {\n itemStorageProperties.set(_propertyName, propertyDef)\n }\n }\n\n if (itemStorageProperties.size === 0) {\n return\n }\n\n const appDb = BaseDb.getAppDb()\n\n for (const [_propertyName, propertyDef] of itemStorageProperties.entries()) {\n const existingMetadataRecordRows = await appDb\n .select()\n .from(metadata)\n .where(\n and(\n eq(metadata.propertyName, _propertyName),\n eq(metadata.propertyValue, propertyValue),\n eq(metadata.versionUid, storageTransactionIdProperty.refUID),\n ),\n )\n\n if (existingMetadataRecordRows && existingMetadataRecordRows.length > 0) {\n continue\n }\n\n const seedUid = versionUidToSeedUid.get(\n storageTransactionIdProperty.refUID,\n ) as string\n const seedLocalId = seedUidToLocalId.get(seedUid)\n const versionUid = storageTransactionIdProperty.refUID\n const versionLocalId = versionUidToLocalId.get(versionUid)\n\n const propertyLocalId = generateId()\n await appDb.insert(metadata).values({\n localId: propertyLocalId,\n propertyName: _propertyName,\n propertyValue,\n localStorageDir: propertyDef.localStorageDir,\n seedLocalId,\n seedUid,\n versionLocalId,\n versionUid,\n refValueType: 'file',\n refResolvedValue: `${propertyValue}${propertyDef.filenameSuffix}`,\n modelType: seedUidToModelType.get(seedUid),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n })\n }\n}\n\ntype SaveEasPropertiesToDbParams = {\n itemProperties: Attestation[]\n itemSeeds: Attestation[]\n}\n\ntype SaveEasPropertiesToDb = (\n props: SaveEasPropertiesToDbParams,\n) => Promise<Record<string, unknown>>\n\nlet isSavingToDb = false\n\nconst saveEasPropertiesToDb: SaveEasPropertiesToDb = async ({\n itemProperties,\n itemSeeds,\n}) => {\n if (isSavingToDb) {\n return\n }\n isSavingToDb = true\n\n const propertyUids = itemProperties.map((property) => property.id)\n\n const models = getModels()\n\n const appDb = BaseDb.getAppDb()\n\n const existingMetadataRecordsRows: MetadataType[] = await appDb\n .select()\n .from(metadata)\n .where(inArray(metadata.uid, propertyUids))\n\n const existingPropertyRecordsUids = new Set<string>()\n\n if (existingMetadataRecordsRows && existingMetadataRecordsRows.length > 0) {\n for (const row of existingMetadataRecordsRows) {\n existingPropertyRecordsUids.add(row.uid)\n propertyUidToLocalId.set(row.uid, row.localId)\n }\n }\n\n const newProperties = itemProperties.filter(\n (property) => !existingPropertyRecordsUids.has(property.id),\n )\n\n if (newProperties.length === 0) {\n return { propertyUidToLocalId, propertyUids }\n }\n\n let insertPropertiesQuery = `INSERT INTO metadata (local_id, uid, schema_uid, property_name, property_value,\n eas_data_type, version_uid, version_local_id, seed_uid,\n seed_local_id, model_type, ref_value_type, ref_seed_type,\n ref_schema_uid,\n created_at, attestation_created_at, attestation_raw,\n local_storage_dir, ref_resolved_value)\n VALUES `\n\n for (let i = 0; i < newProperties.length; i++) {\n const property = newProperties[i]\n const propertyLocalId = generateId()\n const metadata = JSON.parse(property.decodedDataJson)[0].value\n\n let propertyNameSnake = metadata.name\n\n if (!propertyNameSnake) {\n console.warn(\n '[item/events] [syncDbWithEas] no propertyName found for property: ',\n property,\n )\n continue\n }\n\n let isRelation = false\n let refValueType\n let refSeedType\n let refSchemaUid\n let refResolvedValue\n let isList = false\n const schemaUid = property.schemaId\n\n setSchemaUidForSchemaDefinition({\n text: propertyNameSnake,\n schemaUid,\n })\n\n if (\n (propertyNameSnake.endsWith('_id') ||\n propertyNameSnake.endsWith('_ids')) &&\n propertyNameSnake !== 'storage_transaction_id' &&\n propertyNameSnake !== 'storage_provider_transaction_id'\n ) {\n isRelation = true\n\n if (Array.isArray(metadata.value)) {\n isList = true\n refValueType = 'list'\n\n const result = parseEasRelationPropertyName(propertyNameSnake)\n\n if (result) {\n propertyNameSnake = result.propertyName\n refSeedType = result.modelName\n }\n\n metadata.value.forEach((value) => {\n relatedSeedUids.add(value)\n })\n }\n\n if (!isList) {\n if (relationValuesToExclude.includes(metadata.value)) {\n continue\n }\n relatedSeedUids.add(metadata.value)\n }\n }\n\n let propertyValue = metadata.value\n\n if (typeof propertyValue !== 'string') {\n propertyValue = JSON.stringify(propertyValue)\n }\n\n if (isRelation && !isList) {\n const relatedSeed = itemSeeds.find(\n (seed: Attestation) => seed.id === metadata.value,\n )\n if (relatedSeed && relatedSeed.schema && relatedSeed.schema.schemaNames) {\n refSeedType = relatedSeed.schema.schemaNames[0].name\n refSchemaUid = relatedSeed.schemaId\n }\n }\n\n if (isRelation && isList) {\n const relatedSeeds = itemSeeds.filter((seed: Attestation) =>\n metadata.value.includes(seed.id),\n )\n if (relatedSeeds && relatedSeeds.length > 0) {\n refSeedType = relatedSeeds[0].schema.schemaNames[0].name\n refSchemaUid = relatedSeeds[0].schemaId\n }\n }\n\n const propertyName = camelCase(propertyNameSnake)\n propertyValue = escapeSqliteString(propertyValue)\n const easDataType = metadata.type\n const versionUid = property.refUID\n const versionLocalId = versionUidToLocalId.get(versionUid)\n const attestationCreatedAt = property.timeCreated * 1000\n const attestationRaw = escapeSqliteString(JSON.stringify(property))\n const seedUid = versionUidToSeedUid.get(versionUid)\n const seedLocalId = seedUidToLocalId.get(seedUid!)\n const modelType = seedUidToModelType.get(seedUid!)\n\n let localStorageDir\n const modelName = startCase(modelType)\n const ModelClass = models[modelName]\n const modelSchema = ModelClass.schema\n\n if (propertyNameSnake === 'storage_transaction_id') {\n await createMetadataRecordsForStorageTransactionId(property, modelSchema)\n }\n\n const valuesString = `('${propertyLocalId}', '${property.id}', \n '${property.schemaId}', '${propertyName}', \n '${propertyValue}', '${easDataType}', '${versionUid}', \n '${versionLocalId}', '${seedUid}', '${seedLocalId}', \n '${modelType}', ${refValueType ? `'${refValueType}'` : 'NULL'}, \n ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ${refSchemaUid ? `'${refSchemaUid}'` : 'NULL'},\n ${Date.now()}, ${attestationCreatedAt}, '${attestationRaw}',\n ${localStorageDir ? `'${localStorageDir}'` : 'NULL'},\n ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'})`\n\n if (i < newProperties.length - 1) {\n insertPropertiesQuery += valuesString + ', '\n }\n\n if (i === newProperties.length - 1) {\n insertPropertiesQuery += valuesString + ';'\n }\n\n propertyUidToLocalId.set(property.id, propertyLocalId)\n }\n\n if (insertPropertiesQuery.endsWith('VALUES ')) {\n return { propertyUids }\n }\n\n if (insertPropertiesQuery.endsWith(', ')) {\n insertPropertiesQuery = insertPropertiesQuery.slice(0, -2) + ';'\n }\n\n await appDb.run(sql.raw(insertPropertiesQuery))\n\n isSavingToDb = false\n\n return { propertyUids }\n}\n\nconst getRelatedSeedsAndVersions = async () => {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const { itemSeeds } = await easClient.request(GET_SEEDS, {\n where: {\n id: {\n in: Array.from(relatedSeedUids),\n },\n },\n })\n\n await saveEasSeedsToDb({ itemSeeds })\n\n const { itemVersions } = await easClient.request(GET_VERSIONS, {\n where: {\n refUID: {\n in: Array.from(relatedSeedUids),\n },\n },\n })\n\n await saveEasVersionsToDb({ itemVersions })\n\n const relatedVersionUids = itemVersions.map((v) => v.id)\n\n const { itemProperties } = await easClient.request(GET_PROPERTIES, {\n where: {\n refUID: {\n in: relatedVersionUids,\n },\n },\n })\n\n await saveEasPropertiesToDb({\n itemProperties,\n itemSeeds,\n })\n}\n\nconst syncDbWithEasHandler: DebouncedFunc<any> = throttle(\n async (_) => {\n const appDb = BaseDb.getAppDb()\n\n const { schemaStringToModelRecord } = await getModelSchemas()\n\n const modelSchemas = await getModelSchemasFromEas()\n\n const schemaUids: string[] = []\n\n for (const modelSchema of modelSchemas) {\n const foundModel = schemaStringToModelRecord.get(modelSchema.schema)\n\n if (!foundModel) {\n throw new Error(`Model not found for schema ${modelSchema.schema}`)\n }\n\n schemaUids.push(modelSchema.id)\n\n await appDb\n .insert(modelUids)\n .values({\n modelId: foundModel.id,\n uid: modelSchema.id,\n })\n .onConflictDoNothing()\n\n }\n\n const addresses = await getAddressesFromDb()\n\n const itemSeeds = await getSeedsFromSchemaUids({\n schemaUids: schemaUids,\n addresses,\n })\n\n // const seedDbRecords = new Map<string, Record<string, unknown>>()\n\n const { seedUids } = await saveEasSeedsToDb({\n itemSeeds,\n })\n\n const itemVersions = await getItemVersionsFromEas({\n seedUids\n })\n\n const { versionUids } = await saveEasVersionsToDb({\n itemVersions,\n })\n\n const itemProperties = await getItemPropertiesFromEas({\n versionUids,\n })\n\n const { propertyUids } = saveEasPropertiesToDb({\n itemProperties,\n itemSeeds,\n })\n\n await getRelatedSeedsAndVersions()\n\n for (const modelName of getModelNames()) {\n eventEmitter.emit('item.requestAll', { modelName })\n }\n },\n 30000,\n {\n leading: true,\n trailing: false,\n },\n)\n\nexport { syncDbWithEasHandler }\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"syncDbWithEas.js","sources":["../../../../../src/events/item/syncDbWithEas.ts"],"sourcesContent":["import { camelCase, DebouncedFunc, startCase, throttle } from 'lodash-es'\nimport { Attestation, SchemaWhereInput } from '@/graphql/gql/graphql'\nimport {\n metadata,\n MetadataType,\n modelUids,\n seeds,\n SeedType,\n versions,\n} from '@/seedSchema'\nimport { and, eq, inArray, sql } from 'drizzle-orm'\nimport {\n generateId,\n parseEasRelationPropertyName,\n} from '@/helpers'\nimport {\n GET_PROPERTIES,\n GET_SEEDS,\n GET_VERSIONS,\n} from '@/Item/queries'\nimport { escapeSqliteString, getAddressesFromDb } from '@/helpers/db'\nimport { eventEmitter } from '@/eventBus'\nimport { getModelNames, getModels } from '@/stores/modelClass'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { getModelSchemas } from '@/db/read/getModelSchemas'\nimport { ModelSchema, PropertyType } from '@/types'\nimport { createSeeds } from '@/db/write/createSeeds'\nimport { setSchemaUidForSchemaDefinition } from '@/stores/eas'\nimport { BaseEasClient } from '@/helpers/EasClient/BaseEasClient'\nimport { BaseQueryClient } from '@/helpers/QueryClient/BaseQueryClient'\nimport { getItemPropertiesFromEas, getItemVersionsFromEas, getModelSchemasFromEas } from '@/browser/helpers/eas'\n\n\nconst relationValuesToExclude = [\n '0x0000000000000000000000000000000000000000000000000000000000000020',\n]\n\n\nconst getSeedsFromSchemaUids = async ({ schemaUids, addresses }) => {\n const AND = [\n {\n OR: [] as Record<string, unknown>[],\n },\n ]\n\n for (const schemaUid of schemaUids) {\n AND[0].OR.push({\n decodedDataJson: {\n contains: schemaUid,\n },\n })\n }\n\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const { itemSeeds } = await queryClient.fetchQuery({\n queryKey: [`getSeedsForAllModels`],\n queryFn: async () =>\n easClient.request(GET_SEEDS, {\n where: {\n attester: {\n in: addresses,\n },\n schemaId: {\n in: schemaUids,\n },\n AND,\n },\n }),\n })\n\n return itemSeeds\n}\n\nconst seedUidToLocalId = new Map<string, string>()\nconst seedUidToModelType = new Map<string, string>()\nconst relatedSeedUids = new Set<string>()\n\nconst versionUidToLocalId = new Map<string, string>()\nconst versionUidToSeedUid = new Map<string, string>()\n\nconst propertyUidToLocalId = new Map<string, string>()\n\ntype SaveEasSeedsToDbProps = {\n itemSeeds: Attestation[]\n}\n\ntype SaveEasSeedsToDbReturn = {\n seedUids: string[]\n}\n\ntype SaveEasSeedsToDb = (\n props: SaveEasSeedsToDbProps,\n) => Promise<SaveEasSeedsToDbReturn>\n\nconst saveEasSeedsToDb: SaveEasSeedsToDb = async ({ itemSeeds }) => {\n const appDb = BaseDb.getAppDb()\n\n const seedUids = itemSeeds.map((seed) => seed.id)\n\n const existingSeedRecordsRows: SeedType[] = await appDb\n .select()\n .from(seeds)\n .where(inArray(seeds.uid, seedUids))\n\n const existingSeedUids = new Set<string>()\n\n if (existingSeedRecordsRows && existingSeedRecordsRows.length > 0) {\n for (const row of existingSeedRecordsRows) {\n existingSeedUids.add(row.uid)\n seedUidToLocalId.set(row.uid, row.localId)\n seedUidToModelType.set(row.uid, row.type)\n }\n }\n\n const newSeeds = itemSeeds.filter((seed) => !existingSeedUids.has(seed.id))\n\n if (newSeeds.length === 0) {\n return { seedUidToLocalId, seedUids }\n }\n\n const newSeedsData: Partial<SeedType>[] = []\n\n for (let i = 0; i < newSeeds.length; i++) {\n const seed = newSeeds[i]\n seedUidToModelType.set(seed.id, seed.schema.schemaNames[0].name)\n const seedLocalId = generateId()\n seedUidToLocalId.set(seed.id, seedLocalId)\n\n const attestationRaw = escapeSqliteString(JSON.stringify(seed))\n\n newSeedsData.push({\n localId: seedLocalId,\n uid: seed.id,\n schemaUid: seed.schemaId,\n type: seed.schema.schemaNames[0].name,\n createdAt: Date.now(),\n attestationCreatedAt: seed.timeCreated * 1000,\n attestationRaw,\n })\n\n seedUidToLocalId.set(seed.id, seedLocalId)\n }\n\n const newSeedUids = await createSeeds(newSeedsData)\n\n return { seedUids: newSeedUids }\n}\n\ntype SaveEasVersionsToDbParams = {\n itemVersions: Attestation[]\n}\n\ntype SaveEasVersionsToDb = (\n props: SaveEasVersionsToDbParams,\n) => Promise<SaveEasVersionsToDbReturn>\n\ntype SaveEasVersionsToDbReturn = {\n versionUids: string[]\n}\n\nconst saveEasVersionsToDb: SaveEasVersionsToDb = async ({ itemVersions }) => {\n const versionUids = itemVersions.map((version) => version.id)\n\n const appDb = BaseDb.getAppDb()\n\n const existingVersionRecordsRows: MetadataType[] = await appDb\n .select()\n .from(versions)\n .where(inArray(versions.uid, versionUids))\n\n const existingVersionUids = new Set<string>()\n\n if (existingVersionRecordsRows && existingVersionRecordsRows.length > 0) {\n for (const row of existingVersionRecordsRows) {\n existingVersionUids.add(row.uid)\n versionUidToLocalId.set(row.uid, row.localId)\n versionUidToSeedUid.set(row.uid, row.seedUid)\n }\n }\n\n const newVersions = itemVersions.filter(\n (version) => !existingVersionUids.has(version.id),\n )\n\n if (newVersions.length === 0) {\n return { versionUidToLocalId, versionUids }\n }\n\n let insertVersionsQuery = `INSERT INTO versions (local_id, uid, seed_uid, seed_local_id, seed_type, created_at,\n attestation_created_at,\n attestation_raw)\n VALUES `\n\n for (let i = 0; i < newVersions.length; i++) {\n const version = newVersions[i]\n versionUidToSeedUid.set(version.id, version.refUID)\n const versionLocalId = generateId()\n versionUidToLocalId.set(version.id, versionLocalId)\n\n const seedUid = versionUidToSeedUid.get(version.id)\n const seedLocalId = seedUidToLocalId.get(seedUid!)\n const seedType = seedUidToModelType.get(seedUid!)\n const attestationRaw = escapeSqliteString(JSON.stringify(version))\n\n const valuesString = `('${versionLocalId}', '${version.id}', '${seedUid}', '${seedLocalId}', '${seedType}', ${Date.now()}, ${version.timeCreated * 1000}, '${attestationRaw}')`\n\n if (i < newVersions.length - 1) {\n insertVersionsQuery += valuesString + ', '\n }\n\n if (i === newVersions.length - 1) {\n insertVersionsQuery += valuesString + ';'\n }\n\n versionUidToLocalId.set(version.id, versionLocalId)\n }\n\n await appDb.run(sql.raw(insertVersionsQuery))\n\n return { versionUids }\n}\n\nconst createMetadataRecordsForStorageTransactionId = async (\n storageTransactionIdProperty: Attestation,\n modelSchema: ModelSchema,\n) => {\n const attestationData = JSON.parse(\n storageTransactionIdProperty.decodedDataJson,\n )[0].value\n const propertyName = camelCase(attestationData.name)\n const propertyValue = attestationData.value\n\n const itemStorageProperties = new Map<string, PropertyType>()\n\n for (const [_propertyName, propertyDef] of Object.entries(modelSchema)) {\n if (propertyDef?.storageType && propertyDef.storageType === 'ItemStorage') {\n itemStorageProperties.set(_propertyName, propertyDef)\n }\n }\n\n if (itemStorageProperties.size === 0) {\n return\n }\n\n const appDb = BaseDb.getAppDb()\n\n for (const [_propertyName, propertyDef] of itemStorageProperties.entries()) {\n const existingMetadataRecordRows = await appDb\n .select()\n .from(metadata)\n .where(\n and(\n eq(metadata.propertyName, _propertyName),\n eq(metadata.propertyValue, propertyValue),\n eq(metadata.versionUid, storageTransactionIdProperty.refUID),\n ),\n )\n\n if (existingMetadataRecordRows && existingMetadataRecordRows.length > 0) {\n continue\n }\n\n const seedUid = versionUidToSeedUid.get(\n storageTransactionIdProperty.refUID,\n ) as string\n const seedLocalId = seedUidToLocalId.get(seedUid)\n const versionUid = storageTransactionIdProperty.refUID\n const versionLocalId = versionUidToLocalId.get(versionUid)\n\n const propertyLocalId = generateId()\n await appDb.insert(metadata).values({\n localId: propertyLocalId,\n propertyName: _propertyName,\n propertyValue,\n localStorageDir: propertyDef.localStorageDir,\n seedLocalId,\n seedUid,\n versionLocalId,\n versionUid,\n refValueType: 'file',\n refResolvedValue: `${propertyValue}${propertyDef.filenameSuffix}`,\n modelType: seedUidToModelType.get(seedUid),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n })\n }\n}\n\ntype SaveEasPropertiesToDbParams = {\n itemProperties: Attestation[]\n itemSeeds: Attestation[]\n}\n\ntype SaveEasPropertiesToDb = (\n props: SaveEasPropertiesToDbParams,\n) => Promise<Record<string, unknown>>\n\nlet isSavingToDb = false\n\nconst saveEasPropertiesToDb: SaveEasPropertiesToDb = async ({\n itemProperties,\n itemSeeds,\n}) => {\n if (isSavingToDb) {\n return\n }\n isSavingToDb = true\n\n const propertyUids = itemProperties.map((property) => property.id)\n\n const models = getModels()\n\n const appDb = BaseDb.getAppDb()\n\n const existingMetadataRecordsRows: MetadataType[] = await appDb\n .select()\n .from(metadata)\n .where(inArray(metadata.uid, propertyUids))\n\n const existingPropertyRecordsUids = new Set<string>()\n\n if (existingMetadataRecordsRows && existingMetadataRecordsRows.length > 0) {\n for (const row of existingMetadataRecordsRows) {\n existingPropertyRecordsUids.add(row.uid)\n propertyUidToLocalId.set(row.uid, row.localId)\n }\n }\n\n const newProperties = itemProperties.filter(\n (property) => !existingPropertyRecordsUids.has(property.id),\n )\n\n if (newProperties.length === 0) {\n return { propertyUidToLocalId, propertyUids }\n }\n\n let insertPropertiesQuery = `INSERT INTO metadata (local_id, uid, schema_uid, property_name, property_value,\n eas_data_type, version_uid, version_local_id, seed_uid,\n seed_local_id, model_type, ref_value_type, ref_seed_type,\n ref_schema_uid,\n created_at, attestation_created_at, attestation_raw,\n local_storage_dir, ref_resolved_value)\n VALUES `\n\n for (let i = 0; i < newProperties.length; i++) {\n const property = newProperties[i]\n const propertyLocalId = generateId()\n const metadata = JSON.parse(property.decodedDataJson)[0].value\n\n let propertyNameSnake = metadata.name\n\n if (!propertyNameSnake) {\n console.warn(\n '[item/events] [syncDbWithEas] no propertyName found for property: ',\n property,\n )\n continue\n }\n\n let isRelation = false\n let refValueType\n let refSeedType\n let refSchemaUid\n let refResolvedValue\n let isList = false\n const schemaUid = property.schemaId\n\n setSchemaUidForSchemaDefinition({\n text: propertyNameSnake,\n schemaUid,\n })\n\n if (\n (propertyNameSnake.endsWith('_id') ||\n propertyNameSnake.endsWith('_ids')) &&\n propertyNameSnake !== 'storage_transaction_id' &&\n propertyNameSnake !== 'storage_provider_transaction_id'\n ) {\n isRelation = true\n\n if (Array.isArray(metadata.value)) {\n isList = true\n refValueType = 'list'\n\n const result = parseEasRelationPropertyName(propertyNameSnake)\n\n if (result) {\n propertyNameSnake = result.propertyName\n refSeedType = result.modelName\n }\n\n metadata.value.forEach((value) => {\n relatedSeedUids.add(value)\n })\n }\n\n if (!isList) {\n if (relationValuesToExclude.includes(metadata.value)) {\n continue\n }\n relatedSeedUids.add(metadata.value)\n }\n }\n\n let propertyValue = metadata.value\n\n if (typeof propertyValue !== 'string') {\n propertyValue = JSON.stringify(propertyValue)\n }\n\n if (isRelation && !isList) {\n const relatedSeed = itemSeeds.find(\n (seed: Attestation) => seed.id === metadata.value,\n )\n if (relatedSeed && relatedSeed.schema && relatedSeed.schema.schemaNames) {\n refSeedType = relatedSeed.schema.schemaNames[0].name\n refSchemaUid = relatedSeed.schemaId\n }\n }\n\n if (isRelation && isList) {\n const relatedSeeds = itemSeeds.filter((seed: Attestation) =>\n metadata.value.includes(seed.id),\n )\n if (relatedSeeds && relatedSeeds.length > 0) {\n refSeedType = relatedSeeds[0].schema.schemaNames[0].name\n refSchemaUid = relatedSeeds[0].schemaId\n }\n }\n\n const propertyName = camelCase(propertyNameSnake)\n propertyValue = escapeSqliteString(propertyValue)\n const easDataType = metadata.type\n const versionUid = property.refUID\n const versionLocalId = versionUidToLocalId.get(versionUid)\n const attestationCreatedAt = property.timeCreated * 1000\n const attestationRaw = escapeSqliteString(JSON.stringify(property))\n const seedUid = versionUidToSeedUid.get(versionUid)\n const seedLocalId = seedUidToLocalId.get(seedUid!)\n const modelType = seedUidToModelType.get(seedUid!)\n\n let localStorageDir\n const modelName = startCase(modelType)\n const ModelClass = models[modelName]\n const modelSchema = ModelClass.schema\n\n if (propertyNameSnake === 'storage_transaction_id') {\n await createMetadataRecordsForStorageTransactionId(property, modelSchema)\n }\n\n const valuesString = `('${propertyLocalId}', '${property.id}', \n '${property.schemaId}', '${propertyName}', \n '${propertyValue}', '${easDataType}', '${versionUid}', \n '${versionLocalId}', '${seedUid}', '${seedLocalId}', \n '${modelType}', ${refValueType ? `'${refValueType}'` : 'NULL'}, \n ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ${refSchemaUid ? `'${refSchemaUid}'` : 'NULL'},\n ${Date.now()}, ${attestationCreatedAt}, '${attestationRaw}',\n ${localStorageDir ? `'${localStorageDir}'` : 'NULL'},\n ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'})`\n\n if (i < newProperties.length - 1) {\n insertPropertiesQuery += valuesString + ', '\n }\n\n if (i === newProperties.length - 1) {\n insertPropertiesQuery += valuesString + ';'\n }\n\n propertyUidToLocalId.set(property.id, propertyLocalId)\n }\n\n if (insertPropertiesQuery.endsWith('VALUES ')) {\n return { propertyUids }\n }\n\n if (insertPropertiesQuery.endsWith(', ')) {\n insertPropertiesQuery = insertPropertiesQuery.slice(0, -2) + ';'\n }\n\n await appDb.run(sql.raw(insertPropertiesQuery))\n\n isSavingToDb = false\n\n return { propertyUids }\n}\n\nconst getRelatedSeedsAndVersions = async () => {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const { itemSeeds } = await easClient.request(GET_SEEDS, {\n where: {\n id: {\n in: Array.from(relatedSeedUids),\n },\n },\n })\n\n await saveEasSeedsToDb({ itemSeeds })\n\n const { itemVersions } = await easClient.request(GET_VERSIONS, {\n where: {\n refUID: {\n in: Array.from(relatedSeedUids),\n },\n },\n })\n\n await saveEasVersionsToDb({ itemVersions })\n\n const relatedVersionUids = itemVersions.map((v) => v.id)\n\n const { itemProperties } = await easClient.request(GET_PROPERTIES, {\n where: {\n refUID: {\n in: relatedVersionUids,\n },\n },\n })\n\n await saveEasPropertiesToDb({\n itemProperties,\n itemSeeds,\n })\n}\n\nconst syncDbWithEasHandler: DebouncedFunc<any> = throttle(\n async (_) => {\n const appDb = BaseDb.getAppDb()\n\n const { schemaStringToModelRecord } = await getModelSchemas()\n\n const modelSchemas = await getModelSchemasFromEas()\n\n const schemaUids: string[] = []\n\n for (const modelSchema of modelSchemas) {\n const foundModel = schemaStringToModelRecord.get(modelSchema.schema)\n\n if (!foundModel) {\n throw new Error(`Model not found for schema ${modelSchema.schema}`)\n }\n\n schemaUids.push(modelSchema.id)\n\n await appDb\n .insert(modelUids)\n .values({\n modelId: foundModel.id,\n uid: modelSchema.id,\n })\n .onConflictDoNothing()\n\n }\n\n const addresses = await getAddressesFromDb()\n\n const itemSeeds = await getSeedsFromSchemaUids({\n schemaUids: schemaUids,\n addresses,\n })\n\n // const seedDbRecords = new Map<string, Record<string, unknown>>()\n\n const { seedUids } = await saveEasSeedsToDb({\n itemSeeds,\n })\n\n const itemVersions = await getItemVersionsFromEas({\n seedUids\n })\n\n const { versionUids } = await saveEasVersionsToDb({\n itemVersions,\n })\n\n const itemProperties = await getItemPropertiesFromEas({\n versionUids,\n })\n\n const { propertyUids } = saveEasPropertiesToDb({\n itemProperties,\n itemSeeds,\n })\n\n await getRelatedSeedsAndVersions()\n\n for (const modelName of getModelNames()) {\n eventEmitter.emit('item.requestAll', { modelName })\n }\n },\n 30000,\n {\n leading: true,\n trailing: false,\n },\n)\n\nexport { syncDbWithEasHandler }\n"],"names":[],"mappings":"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"}
|