Skip to content

Commit

Permalink
fix bugs, updated tests
Browse files Browse the repository at this point in the history
  • Loading branch information
FranciscoMoretti committed Sep 10, 2024
1 parent d089127 commit 24ea5d1
Show file tree
Hide file tree
Showing 31 changed files with 1,044 additions and 3,813 deletions.
23 changes: 16 additions & 7 deletions packages/download-notion/src/config/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,22 @@ export const conversionSchema = z.object({
statusPropertyName: z.string().default("Status"),
statusPropertyValue: z.string().default("Done"),
pageLinkHasExtension: z.boolean().default(true),
outputPaths: z.object({
markdown: z.string().default("./docs"),
images: z.string().default(""),
}),
markdownPrefixes: z.object({
images: z.string().default(""),
}),
outputPaths: z
.object({
markdown: z.string().default("./docs"),
images: z.string().default(""),
})
.default({
markdown: "./docs",
images: "",
}),
markdownPrefixes: z
.object({
images: z.string().default(""),
})
.default({
images: "",
}),
layoutStrategy: z
.enum(["HierarchicalNamedLayoutStrategy", "FlatLayoutStrategy"])
.default("HierarchicalNamedLayoutStrategy"),
Expand Down
3 changes: 3 additions & 0 deletions packages/download-notion/src/files/saveLoadUtils.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import path from "path"
import fs from "fs-extra"

import { FilesManager } from "./FilesManager"
Expand Down Expand Up @@ -28,12 +29,14 @@ export async function saveObjectToJson(
data: any,
filePath: string
): Promise<void> {
await fs.ensureDir(path.dirname(filePath))
await fs.writeJson(filePath, data, "utf8")
}

export async function saveDataToFile(
data: string,
filePath: string
): Promise<void> {
await fs.ensureDir(path.dirname(filePath))
await fs.writeFile(filePath, data, "utf8")
}
3 changes: 1 addition & 2 deletions packages/download-notion/src/notionPull.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { exit } from "process"
import { Client } from "@notionhq/client"
import fs from "fs-extra"
import { NotionCacheClient } from "notion-cache-client"
import { NotionCacheClient, convertToUUID } from "notion-cache-client"
import { NotionObjectTree, downloadObjectTree } from "notion-downloader"
import { NotionToMarkdown } from "notion-to-md"

Expand Down Expand Up @@ -36,7 +36,6 @@ import {
import { getMarkdownForPage } from "./transformMarkdown"
import { FileBuffersMemory } from "./types"
import {
convertToUUID,
getAncestorPageOrDatabaseFilename,
sanitizeMarkdownOutputPath,
} from "./utils"
Expand Down
4 changes: 2 additions & 2 deletions packages/download-notion/src/objectTree/filterTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export function filterTree(
verbose(
`Skipping [${objectResponse.object}] (${objectResponse.id}) because parent has been filtered`
)
tree.removeObject(objectResponse.id)
tree.removeObject(objectResponse.object, objectResponse.id)
return { shouldRemove: true }
}

Expand All @@ -51,7 +51,7 @@ export function filterTree(
)}`}`
)

tree.removeObject(notionObject.id)
tree.removeObject(objectResponse.object, objectResponse.id)
return { shouldRemove: true }
}
return { shouldRemove: false }
Expand Down
56 changes: 45 additions & 11 deletions packages/download-notion/src/objectTree/objectTreeUtills.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,23 +56,57 @@ export async function getAllObjectsInObjectsTree(
if (!object) {
throw new Error(`Object not found: ${idWithType}`)
}
if (object.object === "page") {
objects.page[object.id] = object
} else if (object.object === "database") {
objects.database[object.id] = object
} else if (object.object === "block") {
objects.block[object.id] = object
addObjectToData(object, objects)

// For blocks that contain a child page or child database, their responses have to be added as well
if (
object.object === "block" &&
(object.type === "child_page" || object.type === "child_database")
) {
const idType = object.type === "child_page" ? "page_id" : "database_id"
const idWithType: IdWithType =
idType === "page_id"
? {
type: idType,
page_id: object.id,
}
: {
type: "database_id",
database_id: object.id,
}
const adjacentObject = await getObjectTypeFromClient(client, idWithType)
if (!adjacentObject) {
throw new Error(`Child page not found: ${object.id}`)
}
addObjectToData(adjacentObject, objects)
}
}
return objects
}

export function getPageAncestorId(id: string, objectTree: NotionObjectTree) {
const parentId = objectTree.getParentId(id)
function addObjectToData(
object: PageObjectResponse | DatabaseObjectResponse | BlockObjectResponse,
objects: NotionObjectsData
) {
if (object.object === "page") {
objects.page[object.id] = object
} else if (object.object === "database") {
objects.database[object.id] = object
} else if (object.object === "block") {
objects.block[object.id] = object
}
}

export function getPageAncestorId(
objectType: "page" | "database" | "block",
id: string,
objectTree: NotionObjectTree
) {
const parentId = objectTree.getParentId(objectType, id)
if (!parentId) {
return null
}
const parent = objectTree.getObject(parentId)
const parent = objectTree.getObject(objectType, parentId)
if (!parent) {
return null
}
Expand All @@ -81,9 +115,9 @@ export function getPageAncestorId(id: string, objectTree: NotionObjectTree) {
return parent.id
}
if (parent.object === "database") {
return getPageAncestorId(parent.id, objectTree)
return getPageAncestorId("database", parent.id, objectTree)
}
if (parent.object === "block") {
return getPageAncestorId(parent.id, objectTree)
return getPageAncestorId("block", parent.id, objectTree)
}
}
10 changes: 0 additions & 10 deletions packages/download-notion/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,6 @@ import { FilesManager } from "./files/FilesManager"
import { NotionImageLike } from "./notionObjects/objectTypes"
import { getPageAncestorId } from "./objectTree/objectTreeUtills"

export function convertToUUID(str: string): string {
if (str.length !== 32) {
throw new Error("Input string must be 32 characters long")
}
return `${str.slice(0, 8)}-${str.slice(8, 12)}-${str.slice(
12,
16
)}-${str.slice(16, 20)}-${str.slice(20)}`
}

export function findLastUuid(url: string): string | null {
// Regex for a UUID surrounded by slashes
const uuidPattern =
Expand Down
1 change: 1 addition & 0 deletions packages/notion-cache-client/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
export { NotionCacheClient } from "./notion-cache-client"
export { NotionCache } from "./NotionCache"
export { logOperation } from "./logOperation"
export { convertToUUID, simplifyParentObject } from "./utils"
37 changes: 37 additions & 0 deletions packages/notion-cache-client/src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
import {
BlockObjectResponse,
DatabaseObjectResponse,
PageObjectResponse,
} from "@notionhq/client/build/src/api-endpoints"
import fs from "fs-extra"

export async function saveObjectToJson(data: any, filename: string) {
Expand All @@ -11,3 +16,35 @@ export async function loadDataFromJson(filePath: string) {
}
return Promise.resolve(undefined)
}

export function convertToUUID(str: string): string {
if (str.length !== 32) {
throw new Error("Input string must be 32 characters long")
}
return `${str.slice(0, 8)}-${str.slice(8, 12)}-${str.slice(
12,
16
)}-${str.slice(16, 20)}-${str.slice(20)}`
}

export function simplifyParentObject(
parent:
| PageObjectResponse["parent"]
| DatabaseObjectResponse["parent"]
| BlockObjectResponse["parent"]
): {
object: "page" | "database" | "block"
id: string
} | null {
if (parent.type === "workspace") {
return null
} else if (parent.type === "page_id") {
return { id: parent.page_id, object: "page" }
} else if (parent.type === "database_id") {
return { id: parent.database_id, object: "database" }
} else if (parent.type === "block_id") {
return { id: parent.block_id, object: "block" }
} else {
throw new Error(`Unknown parent type: ${parent}`)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1172,8 +1172,8 @@
"caption": [],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/7ff88f88-dfa2-4c9b-8beb-31df3a9b0b9c/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085832Z&X-Amz-Expires=3600&X-Amz-Signature=e45fcd6705638e9be23ccb611be020a13e548f12fc67c2e73daba05d12ad0ca4&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:32.793Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/7ff88f88-dfa2-4c9b-8beb-31df3a9b0b9c/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090359Z&X-Amz-Expires=3600&X-Amz-Signature=8363258fef04bcca14f951f6276f93214da910e0432ff893f04589600152d18b&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:03:59.024Z"
}
}
},
Expand Down Expand Up @@ -1429,8 +1429,8 @@
"caption": [],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/7ff88f88-dfa2-4c9b-8beb-31df3a9b0b9c/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085832Z&X-Amz-Expires=3600&X-Amz-Signature=e45fcd6705638e9be23ccb611be020a13e548f12fc67c2e73daba05d12ad0ca4&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:32.799Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/7ff88f88-dfa2-4c9b-8beb-31df3a9b0b9c/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090359Z&X-Amz-Expires=3600&X-Amz-Signature=8363258fef04bcca14f951f6276f93214da910e0432ff893f04589600152d18b&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:03:59.028Z"
}
}
},
Expand Down Expand Up @@ -1593,8 +1593,8 @@
"caption": [],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/7ff88f88-dfa2-4c9b-8beb-31df3a9b0b9c/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085832Z&X-Amz-Expires=3600&X-Amz-Signature=e45fcd6705638e9be23ccb611be020a13e548f12fc67c2e73daba05d12ad0ca4&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:32.826Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/7ff88f88-dfa2-4c9b-8beb-31df3a9b0b9c/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090359Z&X-Amz-Expires=3600&X-Amz-Signature=8363258fef04bcca14f951f6276f93214da910e0432ff893f04589600152d18b&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:03:59.036Z"
}
}
},
Expand Down Expand Up @@ -1757,8 +1757,8 @@
"caption": [],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/7ff88f88-dfa2-4c9b-8beb-31df3a9b0b9c/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085832Z&X-Amz-Expires=3600&X-Amz-Signature=e45fcd6705638e9be23ccb611be020a13e548f12fc67c2e73daba05d12ad0ca4&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:32.797Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/7ff88f88-dfa2-4c9b-8beb-31df3a9b0b9c/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090359Z&X-Amz-Expires=3600&X-Amz-Signature=8363258fef04bcca14f951f6276f93214da910e0432ff893f04589600152d18b&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:03:59.030Z"
}
}
},
Expand Down Expand Up @@ -2034,8 +2034,8 @@
],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/0835d3ad-1822-4eb9-b66e-825e3faebd69/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085833Z&X-Amz-Expires=3600&X-Amz-Signature=6825801fbb7d33b54f5af867680a705b49d71e165ea62d45ee00c201878055e7&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:33.704Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/0835d3ad-1822-4eb9-b66e-825e3faebd69/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090359Z&X-Amz-Expires=3600&X-Amz-Signature=b24f13c7af950aa51e99dfdfba0c9d5d3042534b0def1a3a8d13ef7480d7d4f6&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:03:59.322Z"
}
}
},
Expand Down Expand Up @@ -2952,8 +2952,8 @@
"caption": [],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/e0e335bd-e45d-4a20-a684-eb6578cd7d0e/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085835Z&X-Amz-Expires=3600&X-Amz-Signature=b832653fb511033602b426b752ad774defe69a9de58cf53c465472f1305e2760&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:35.796Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/e0e335bd-e45d-4a20-a684-eb6578cd7d0e/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090400Z&X-Amz-Expires=3600&X-Amz-Signature=2107aadece2cb129ebdb515bdcd4d11fbbe8d7a700a8f05ccbf938477556d65a&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:04:00.546Z"
}
}
},
Expand Down Expand Up @@ -4248,8 +4248,8 @@
"caption": [],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/f6bc4746-011e-4442-86ca-ed4337d70891/people_fre_motionAsset_p3.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085843Z&X-Amz-Expires=3600&X-Amz-Signature=a5739d94edba32f5521d32f0b3453f3be261dbe2c68dd4d42b6cf3bb36983464&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:43.495Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/f6bc4746-011e-4442-86ca-ed4337d70891/people_fre_motionAsset_p3.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090402Z&X-Amz-Expires=3600&X-Amz-Signature=1b2eced1bef959eb0eaae8aafb960f0b27849cd4df8c7e0e55f567a75f2970da&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:04:02.058Z"
}
}
},
Expand Down Expand Up @@ -4463,8 +4463,8 @@
"caption": [],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/9bc98e49-fa26-4fc3-907c-9335a32d2e2b/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085844Z&X-Amz-Expires=3600&X-Amz-Signature=d4d58fef3de6c5ebc01acb474a6fc164c6246c0a82b96cd146351535446f889c&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:44.716Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/9bc98e49-fa26-4fc3-907c-9335a32d2e2b/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090403Z&X-Amz-Expires=3600&X-Amz-Signature=f14a3cbcb16d4307b9fec647632c8ee5e41e64393b1ee06225ff662a121ebbf5&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:04:03.263Z"
}
}
},
Expand Down Expand Up @@ -5341,8 +5341,8 @@
"caption": [],
"type": "file",
"file": {
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/007c0d28-d3a0-40bc-b0e4-99943f853b60/Untitled.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240819%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240819T085845Z&X-Amz-Expires=3600&X-Amz-Signature=2c49c397c000feb6191503df26d7aad0e2faba628bfa7bcd59cde8f0cdf04ad8&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-08-19T09:58:45.442Z"
"url": "https://prod-files-secure.s3.us-west-2.amazonaws.com/da68b0e3-871b-4926-8d19-fe9dfdcec60f/007c0d28-d3a0-40bc-b0e4-99943f853b60/Untitled.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240910%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240910T090403Z&X-Amz-Expires=3600&X-Amz-Signature=e669876fe11336cc05cbb17e0b285d318231713caa491548161568ac2a9c19da&X-Amz-SignedHeaders=host&x-id=GetObject",
"expiry_time": "2024-09-10T10:04:03.954Z"
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
"public_url": null,
"archived": false,
"in_trash": false,
"request_id": "f5fa3931-0138-4a2a-8108-9809e0dd6b5b"
"request_id": "42976de9-aa16-4d03-89fd-feb23d811f10"
},
"__needs_refresh": false
}
Expand Down
Loading

0 comments on commit 24ea5d1

Please sign in to comment.