{"id":40059065,"url":"https://github.com/bejibun-framework/bejibun-core","last_synced_at":"2026-05-31T15:00:42.625Z","repository":{"id":318731431,"uuid":"1074735811","full_name":"Bejibun-Framework/bejibun-core","owner":"Bejibun-Framework","description":"Core of Bejibun Framework","archived":false,"fork":false,"pushed_at":"2026-05-28T04:39:42.000Z","size":436,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-28T06:31:30.786Z","etag":null,"topics":["bejibun","bun","bun-framework"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Bejibun-Framework.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-12T11:35:49.000Z","updated_at":"2026-05-28T04:39:01.000Z","dependencies_parsed_at":"2026-02-12T09:00:57.814Z","dependency_job_id":null,"html_url":"https://github.com/Bejibun-Framework/bejibun-core","commit_stats":null,"previous_names":["crenata/bejibun-core","bejibun-framework/bejibun-core"],"tags_count":46,"template":false,"template_full_name":null,"purl":"pkg:github/Bejibun-Framework/bejibun-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bejibun-Framework%2Fbejibun-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bejibun-Framework%2Fbejibun-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bejibun-Framework%2Fbejibun-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bejibun-Framework%2Fbejibun-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Bejibun-Framework","download_url":"https://codeload.github.com/Bejibun-Framework/bejibun-core/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bejibun-Framework%2Fbejibun-core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33735663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bejibun","bun","bun-framework"],"created_at":"2026-01-19T07:08:19.766Z","updated_at":"2026-05-31T15:00:42.584Z","avatar_url":"https://github.com/Bejibun-Framework.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://github.com/Bejibun-Framework/bejibun/blob/master/public/images/bejibun.png?raw=true\" width=\"150\" alt=\"Bejibun\" /\u003e\n\n![GitHub top language](https://img.shields.io/github/languages/top/Bejibun-Framework/bejibun-core)\n![GitHub all releases](https://img.shields.io/github/downloads/Bejibun-Framework/bejibun-core/total)\n![GitHub issues](https://img.shields.io/github/issues/Bejibun-Framework/bejibun-core)\n![GitHub](https://img.shields.io/github/license/Bejibun-Framework/bejibun-core)\n![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/Bejibun-Framework/bejibun-core?display_name=tag\u0026include_prereleases)\n\n\u003c/div\u003e\n\n# Core of Bejibun\nCore of Bejibun Framework.\n\n## Usage\n\n### Installation\nInstall the package.\n\n```bash\nbun add @bejibun/core\n```\n\n### Available Commands\nTo see list of available commands, run.\n\n```bash\nbun ace\nbun ace help\nbun ace --h\nbun ace --help\n```\n\nTo see help of specific command, run :\n\n```bash\nbun ace help migrate:latest\nbun ace migrate:latest --h\nbun ace migrate:latest --help\n```\n\n### Database\n\n#### Migrations\nTo fresh or drop all table and re-run the migrations, run :\n\n```bash\nbun ace migrate:fresh\n```\n\nExample :\n\n```bash\nThis will DROP ALL tables and re-run ALL migrations. Are you want to continue? (Y/N): Y\n\n✔ Rolled back all migrations\n✔ Batch 1 finished\n✔ 20250929_000001_tests.ts\n```\n\nTo migrate the migrations, run :\n\n```bash\nbun ace migrate:latest\n```\n\nExample :\n\n```bash\n✔ Batch 1 finished\n✔ 20250929_000001_tests.ts\n```\n\nTo rollback the migrations, run :\n\n```bash\nbun ace migrate:rollback\n```\n\nExample :\n\n```bash\nThis will ROLLBACK latest migrations. Are you want to continue? (Y/N): Y\n\n✔ Batch 1 finished\n✔ 20250929_000001_tests.ts\n```\n\nTo see migrations status, run :\n\n```bash\nbun ace migrate:status\n```\n\nExample :\n\n```bash\n✔ Completed Migrations :\n✔ No migrations were completed.\n\n✔ Pending Migrations :\n✔ 20250929_000001_tests.ts\n```\n\n#### Seeders\nTo execute seeder, run :\n\n```bash\nbun ace db:seed\n```\n\nExample :\n\n```bash\n✔ Seeding finished\n✔ 20250929_000001_seeder_test.ts\n```\n\n## Features\n\n### Controllers\nLogical processes\n\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\n\nexport default class HelloController extends BaseController {\n    public async hello(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        return super.response.setData({\n            message: \"Hello, world!\",\n            method: request.method\n        }).send();\n    }\n}\n```\n\n### Exception Handler\nHandle any incoming errors\n\nExample :\n\n```ts\nimport ExceptionHandler from \"@bejibun/core/exceptions/ExceptionHandler\";\n\nexport default class Handler extends ExceptionHandler {\n    public handle(error: any): globalThis.Response {\n        // Your code goes here\n        return super.handle(error);\n    }\n}\n```\n\n### Middlewares\nHandle any request before forwarding to controller\n\nExample :\n\n```ts\nimport type {HandlerType} from \"@bejibun/core/types\";\nimport Logger from \"@bejibun/logger\";\n\nexport default class TestMiddleware {\n    public handle(handler: HandlerType): HandlerType {\n        return async (request: Bun.BunRequest) =\u003e {\n            Logger.setContext(\"TestMiddleware\").debug(request.url);\n\n            return handler(request);\n        };\n    }\n}\n```\n\nUsage :\n\n```ts\nimport Router from \"@bejibun/core/facades/Router\";\nimport YourController from \"@/app/controllers/YourController\";\nimport TestMiddleware from \"@/app/middlewares/TestMiddleware\";\nimport LoggerMiddleware from \"@/app/middlewares/LoggerMiddleware\";\n\nexport default Router.prefix(\"test\")\n    .middleware(\n        new TestMiddleware(),\n        new LoggerMiddleware()\n    )\n    .group([\n        Router.get(\"redis\", \"TestController@redis\"),\n        Router.get(\"get\", \"TestController@get\"),\n        Router.get(\"detail/:id\", \"TestController@detail\"),\n        Router.post(\"add\", \"TestController@add\"),\n        Router.post(\"edit\", \"TestController@edit\"),\n        Router.delete(\"delete/:id\", \"TestController@delete\"),\n        Router.get(\"restore/:id\", \"TestController@restore\"),\n\n        Router.resource(\"path\", YourController),\n        Router.resource(\"path\", YourController, {\n            only: [\"index\", \"store\"] // \"index\" | \"store\" | \"show\" | \"update\" | \"destroy\"\n        }),\n        Router.resource(\"path\", YourController, {\n            except: [\"index\", \"store\"] // \"index\" | \"store\" | \"show\" | \"update\" | \"destroy\"\n        })\n    ]);\n```\n\n### Validators\nValidate any incoming requests\n\nExample :\n\n```ts\nimport type {ValidatorType} from \"@bejibun/core/types/ValidatorType\";\nimport BaseValidator from \"@bejibun/core/bases/BaseValidator\";\nimport TestModel from \"@/app/models/TestModel\";\n\nexport default class TestValidator extends BaseValidator {\n    public static get detail(): ValidatorType {\n        return super.validator.create({\n            id: super.validator.number().min(1).exists(TestModel, \"id\")\n        });\n    }\n\n    public static get add(): ValidatorType {\n        return super.validator.create({\n            name: super.validator.string()\n        });\n    }\n\n    public static get edit(): ValidatorType {\n        return super.validator.create({\n            id: super.validator.number().min(1).exists(TestModel, \"id\"),\n            name: super.validator.string()\n        });\n    }\n\n    public static get delete(): ValidatorType {\n        return super.validator.create({\n            id: super.validator.number().min(1).exists(TestModel, \"id\")\n        });\n    }\n\n    public static get restore(): ValidatorType {\n        return super.validator.create({\n            id: super.validator.number().min(1).exists(TestModel, \"id\", true)\n        });\n    }\n}\n```\n\nUsage :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\nimport TestValidator from \"@/app/validators/TestValidator\";\n\nexport default class TestController extends BaseController {\n    public async detail(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const body = await super.parse(request);\n        await super.validate(TestValidator.detail, body);\n\n        const test = await TestModel.findOrFail(body.id as number | string);\n\n        return super.response.setData(test).send();\n    }\n}\n```\n\n### Models\nDatabase table model\n\nExample :\n\n```ts\nimport type {Timestamp, NullableTimestamp} from \"@bejibun/core/bases/BaseModel\";\nimport BaseModel from \"@bejibun/core/bases/BaseModel\";\n\nexport default class TestModel extends BaseModel {\n    public static tableName: string = \"tests\";\n    public static idColumn: string = \"id\";\n\n    declare id: bigint;\n    declare name: string;\n    declare created_at: Timestamp;\n    declare updated_at: Timestamp;\n    declare deleted_at: NullableTimestamp;\n}\n```\n\n#### Fetch All\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\n\nexport default class TestController extends BaseController {\n    public async get(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const tests = await TestModel.all();\n\n        return super.response.setData(tests).send();\n    }\n}\n```\n\n#### Find or Fail\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\nimport TestValidator from \"@/app/validators/TestValidator\";\n\nexport default class TestController extends BaseController {\n    public async detail(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const body = await super.parse(request);\n        await super.validate(TestValidator.detail, body);\n\n        const test = await TestModel.findOrFail(body.id as number | string);\n\n        return super.response.setData(test).send();\n    }\n}\n```\n\n#### Create\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\nimport TestValidator from \"@/app/validators/TestValidator\";\n\nexport default class TestController extends BaseController {\n    public async add(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const body = await super.parse(request);\n        await super.validate(TestValidator.add, body);\n\n        const tests = await TestModel.create({\n            name: body.name as string\n        });\n\n        return super.response.setData(tests).send();\n    }\n}\n```\n\n#### Update\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\nimport TestValidator from \"@/app/validators/TestValidator\";\n\nexport default class TestController extends BaseController {\n    public async edit(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const body = await super.parse(request);\n        await super.validate(TestValidator.edit, body);\n\n        const tests = await TestModel.find(body.id as number | string)\n            .update({\n                name: body.name as string\n            });\n\n        return super.response.setData(tests).send();\n    }\n}\n```\n\n#### Soft Delete\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\nimport TestValidator from \"@/app/validators/TestValidator\";\n\nexport default class TestController extends BaseController {\n    public async delete(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const body = await super.parse(request);\n        await super.validate(TestValidator.delete, body);\n\n        const tests = await TestModel.find(body.id as number | string).delete();\n\n        return super.response.setData(tests).send();\n    }\n}\n```\n\n#### Force Delete\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\nimport TestValidator from \"@/app/validators/TestValidator\";\n\nexport default class TestController extends BaseController {\n    public async delete(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const body = await super.parse(request);\n        await super.validate(TestValidator.delete, body);\n\n        const tests = await TestModel.find(body.id as number | string).forceDelete();\n\n        return super.response.setData(tests).send();\n    }\n}\n```\n\n#### With Trashed\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\n\nexport default class TestController extends BaseController {\n    public async get(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const tests = await TestModel.withTrashed();\n\n        return super.response.setData(tests).send();\n    }\n}\n```\n\n#### Only Trashed\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\n\nexport default class TestController extends BaseController {\n    public async get(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const tests = await TestModel.onlyTrashed();\n\n        return super.response.setData(tests).send();\n    }\n}\n```\n\n#### Restore\nExample :\n\n```ts\nimport BaseController from \"@bejibun/core/bases/BaseController\";\nimport TestModel from \"@/app/models/TestModel\";\n\nexport default class TestController extends BaseController {\n    public async restore(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n        const body = await super.parse(request);\n        await super.validate(TestValidator.restore, body);\n\n        const tests = await TestModel.find(body.id as number | string).restore();\n\n        return super.response.setData(tests).send();\n    }\n}\n```\n\n### Database\n\n#### Migrations\nExample :\n\n```ts\nimport type {Knex} from \"knex\";\nimport TestModel from \"@/app/models/TestModel\";\n\nexport function up(knex: Knex): void {\n    return knex.schema.createTable(TestModel.table, (table: Knex.TableBuilder) =\u003e {\n        table.bigIncrements(\"id\");\n        table.string(\"name\");\n        table.timestamps(true, true);\n        table.timestamp(\"deleted_at\");\n    });\n}\n\nexport function down(knex: Knex): void {\n    return knex.schema.dropTable(TestModel.table);\n}\n```\n\n#### Seeders\nExample :\n\n```ts\nimport type {Knex} from \"knex\";\nimport TestModel from \"@/app/models/TestModel\";\n\nexport async function seed(knex: Knex): Promise\u003cvoid\u003e {\n    for (const name of [\"Name 1\", \"Name 2\", \"Name 3\"]) {\n        await TestModel.query(knex).insert({\n            name: name\n        });\n    }\n}\n```\n\n### Bootstrap\nAny startup loads\n\n```ts\nimport Database from \"@bejibun/database\";\nimport {Model} from \"objection\";\nimport BaseModel from \"@/bases/BaseModel\";\n\n(BaseModel as any as typeof Model).knex(Database.knex());\n```\n\n### Storage\nA filesystem facade, with built-in disk management including disks configuration and build disk at runtime.\n\n- Standard Use\n```ts\nimport Storage from \"@bejibun/core/facades/Storage\";\n\nawait Storage.exists(\"path/to/your/file.ext\"); // Check if the file exists\nawait Storage.missing(\"path/to/your/file.ext\"); // Check if the file doesn't exists\nawait Storage.get(\"path/to/your/file.ext\"); // Get data content\nawait Storage.put(\"path/to/your/file.ext\", \"content\"); // Store content to file\nawait Storage.delete(\"path/to/your/file.ext\"); // Delete file\n```\n\n- With Specified Disk\n```ts\nimport Storage from \"@bejibun/core/facades/Storage\";\n\nawait Storage.disk(\"public\").exists(\"path/to/your/file.ext\");\nawait Storage.disk(\"public\").missing(\"path/to/your/file.ext\");\nawait Storage.disk(\"public\").get(\"path/to/your/file.ext\");\nawait Storage.disk(\"public\").put(\"path/to/your/file.ext\", \"content\");\nawait Storage.disk(\"public\").delete(\"path/to/your/file.ext\");\n```\n\n- New Disk at Runtime\n```ts\nimport Storage from \"@bejibun/core/facades/Storage\";\n\nawait Storage.build({\n    driver: \"local\", // \"local\" | DiskDriverEnum.Local\n    root: App.Path.storagePath(\"custom\")\n}).exists(\"path/to/your/file.ext\");\nawait Storage.build({\n    driver: \"local\",\n    root: App.Path.storagePath(\"custom\")\n}).missing(\"path/to/your/file.ext\");\nawait Storage.build({\n    driver: \"local\",\n    root: App.Path.storagePath(\"custom\")\n}).get(\"path/to/your/file.ext\");\nawait Storage.build({\n    driver: \"local\",\n    root: App.Path.storagePath(\"custom\")\n}).put(\"path/to/your/file.ext\", \"content\");\nawait Storage.build({\n    driver: \"local\",\n    root: App.Path.storagePath(\"custom\")\n}).delete(\"path/to/your/file.ext\");\n```\n\n### Queue\nRun processes at background.\n\n```ts\n// Immediately\nawait TestJob.dispatch(/*any params here*/).send();\n\n// With delay\nawait TestJob.dispatch(/*any params here*/).delay(60 * 10 /*10 minutes*/).send();\n```\n\n### Decorator\nAll available decorators.\n\n#### @ApiDoc\n```ts\n@ApiDoc({\n    description: \"Hello with Name\",\n    request: {\n        params: [\n            {\n                name: \"name\",\n                in: \"path\",\n                required: true,\n                schema: {\n                    type: \"string\"\n                }\n            }\n        ]\n    }\n})\npublic async helloName(request: Bun.BunRequest): Promise\u003cResponse\u003e {\n    const body = await super.parse(request);\n    await super.validate(HelloValidator.helloName, body);\n\n    return super.response.setData({\n        message: `Hello, ${body.name}!`,\n    }).send();\n}\n```\n\n### Scheduler\nRun code in period.\n```ts\n// commands/Kernel.ts\nimport type Schedule from \"@bejibun/core/facades/Schedule\";\n\nexport default class Kernel {\n    public schedule(schedule: Schedule): void {\n        // Your code goes here\n        schedule.command(\"hello:world\").everyMinute();\n    }\n}\n```\n\n### WebSocket\nSetup websocket like router.\n```ts\nimport Router from \"@bejibun/core/facades/Router\";\n\nexport default Router.prefix(\"hello\").group([\n    Router.websocket(\"websocket\", \"HelloWebSocket@handle\")\n]);\n```\n\n### Global Functions\n\n#### Config\n```ts\nconfig(\"disk.default\");\n```\n\n#### Env\n```ts\nenv(\"APP_KEY\");\n```\n\n### Cors\nDocumentation : [@bejibun/cors](https://github.com/Bejibun-Framework/bejibun-cors/blob/master/README.md)\n\n### Cache\nDocumentation : [@bejibun/cache](https://github.com/Bejibun-Framework/bejibun-cache/blob/master/README.md)\n\n### Ace\nAny commands for development\n\n```bash\nUsage: ace [options] [command]\n\nAce for your commander\nAuthor: Havea Crenata \u003chavea.crenata@gmail.com\u003e\n\nOptions:\n  -v, --version                Show the current version\n  -h, --help                   display help for command\n\nCommands:\n  db:seed                      Run database seeders\n  hello:world                  Run hello world\n  install \u003cpackages...\u003e        Install package dependencies\n  maintenance:down [options]   Turn app into maintenance mode\n  maintenance:up               Turn app into live mode\n  make:command \u003cfile\u003e          Create a new command file\n  make:controller \u003cfile\u003e       Create a new controller file\n  make:job \u003cfile\u003e              Create a new job file\n  make:middleware \u003cfile\u003e       Create a new middleware file\n  make:migration \u003cfile\u003e        Create a new migration file\n  make:model \u003cfile\u003e            Create a new model file\n  make:seeder \u003cfile\u003e           Create a new seeder file\n  make:validator \u003cfile\u003e        Create a new validator file\n  migrate:fresh [options]      Rollback all migrations and re-run migrations\n  migrate:latest               Run latest migration\n  migrate:rollback [options]   Rollback the latest migrations\n  migrate:status [options]     List migrations status\n  package:configure [options]  Configure package after installation\n  queue:flush                  Flush all of the failed queue jobs\n  queue:retry                  Retry a failed queue job\n  queue:work                   Start processing jobs on the queue as a daemon\n  help [command]               display help for command\n\nExamples:\n  $ bun ace --help\n  $ bun ace --version\n  $ bun ace migrate:latest\n```\n\n## Contributors\n- [Havea Crenata](mailto:havea.crenata@gmail.com)\n\n## ☕ Support / Donate\n\nIf you find this project helpful and want to support it, you can donate via crypto :\n\n| EVM                                                                                                     | Solana                                                                                                  |\n| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |\n| \u003cimg src=\"https://github.com/Bejibun-Framework/bejibun/blob/master/public/images/EVM.png?raw=true\" width=\"150\" /\u003e | \u003cimg src=\"https://github.com/Bejibun-Framework/bejibun/blob/master/public/images/SOL.png?raw=true\" width=\"150\" /\u003e |\n| 0xdABe8750061410D35cE52EB2a418c8cB004788B3                                                              | GAnoyvy9p3QFyxikWDh9hA3fmSk2uiPLNWyQ579cckMn                                                            |\n\nOr you can buy this `$BJBN (Bejibun)` tokens [here](https://pump.fun/coin/CQhbNnCGKfDaKXt8uE61i5DrBYJV7NPsCDD9vQgypump), beware of bots.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbejibun-framework%2Fbejibun-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbejibun-framework%2Fbejibun-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbejibun-framework%2Fbejibun-core/lists"}