@m5kdev/backend 0.7.0 → 0.8.0
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/_virtual/_rolldown/runtime.mjs +13 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/api/index.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/factory.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/get-field-attributes.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/get-id-field.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/index.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/types.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/get-tables.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/index.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/account.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/rate-limit.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/session.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/shared.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/user.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/verification.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/index.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/social-providers/index.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/context.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/helper.d.mts +7 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/init-options.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/plugin-client.d.mts +1 -0
- package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/plugin.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/dialect.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mssql/mssql-adapter.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mssql/mssql-dialect.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mssql/mssql-introspector.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mysql/mysql-adapter.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mysql/mysql-dialect.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mysql/mysql-introspector.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/postgres/postgres-adapter.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/postgres/postgres-dialect.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/postgres/postgres-introspector.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-introspector.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/expression/expression-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/index.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/kysely.d.mts +38 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/migration/file-migration-provider.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/migration/migrator.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/binary-operation-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/delete-from-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/expression-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/group-by-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/insert-values-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/join-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/merge-into-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/reference-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/returning-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/select-from-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/select-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/set-operation-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/tuple-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/unary-operation-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/update-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/update-set-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/value-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/with-parser.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/case-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/delete-query-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/having-interface.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/join-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/merge-query-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/output-interface.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/returning-interface.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/select-query-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/where-interface.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-creator.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/default-query-executor.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/noop-query-executor.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/query-executor-base.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/query-executor-provider.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/query-executor.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/raw-builder/raw-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/raw-builder/sql.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-drop-constraint-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-executor.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-index-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-schema-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-table-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-type-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-view-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-index-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-schema-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-table-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-type-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-view-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/refresh-materialized-view-builder.d.mts +1 -0
- package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/schema.d.mts +1 -0
- package/dist/src/lib/posthog.d.mts +7 -0
- package/dist/src/lib/posthog.mjs +7 -0
- package/dist/src/lib/posthog.mjs.map +1 -0
- package/dist/src/lib/sentry.d.mts +1 -0
- package/dist/src/lib/sentry.mjs +10 -0
- package/dist/src/lib/sentry.mjs.map +1 -0
- package/dist/src/modules/access/access.repository.d.mts +2352 -0
- package/dist/src/modules/access/access.repository.mjs +24 -0
- package/dist/src/modules/access/access.repository.mjs.map +1 -0
- package/dist/src/modules/access/access.service.d.mts +25 -0
- package/dist/src/modules/access/access.service.mjs +40 -0
- package/dist/src/modules/access/access.service.mjs.map +1 -0
- package/dist/src/modules/access/access.utils.d.mts +19 -0
- package/dist/src/modules/access/access.utils.mjs +21 -0
- package/dist/src/modules/access/access.utils.mjs.map +1 -0
- package/dist/src/modules/ai/ai.db.d.mts +401 -0
- package/dist/src/modules/ai/ai.db.mjs +38 -0
- package/dist/src/modules/ai/ai.db.mjs.map +1 -0
- package/dist/src/modules/ai/ai.prompt.d.mts +30 -0
- package/dist/src/modules/ai/ai.prompt.mjs +30 -0
- package/dist/src/modules/ai/ai.prompt.mjs.map +1 -0
- package/dist/src/modules/ai/ai.prompts.d.mts +10 -0
- package/dist/src/modules/ai/{ai.prompts.js → ai.prompts.mjs} +17 -15
- package/dist/src/modules/ai/ai.prompts.mjs.map +1 -0
- package/dist/src/modules/ai/ai.repository.d.mts +428 -0
- package/dist/src/modules/ai/ai.repository.mjs +23 -0
- package/dist/src/modules/ai/ai.repository.mjs.map +1 -0
- package/dist/src/modules/ai/ai.router.d.mts +1 -0
- package/dist/src/modules/ai/ai.service.d.mts +128 -0
- package/dist/src/modules/ai/ai.service.mjs +267 -0
- package/dist/src/modules/ai/ai.service.mjs.map +1 -0
- package/dist/src/modules/ai/ai.trpc.d.mts +31 -0
- package/dist/src/modules/ai/ai.trpc.mjs +17 -0
- package/dist/src/modules/ai/ai.trpc.mjs.map +1 -0
- package/dist/src/modules/ai/ideogram/ideogram.constants.d.mts +11 -0
- package/dist/src/modules/ai/ideogram/ideogram.constants.mjs +184 -0
- package/dist/src/modules/ai/ideogram/ideogram.constants.mjs.map +1 -0
- package/dist/src/modules/ai/ideogram/ideogram.dto.d.mts +234 -0
- package/dist/src/modules/ai/ideogram/ideogram.dto.mjs +45 -0
- package/dist/src/modules/ai/ideogram/ideogram.dto.mjs.map +1 -0
- package/dist/src/modules/ai/ideogram/ideogram.prompt.d.mts +7 -0
- package/dist/src/modules/ai/ideogram/{ideogram.prompt.js → ideogram.prompt.mjs} +861 -859
- package/dist/src/modules/ai/ideogram/ideogram.prompt.mjs.map +1 -0
- package/dist/src/modules/ai/ideogram/ideogram.repository.d.mts +11 -0
- package/dist/src/modules/ai/ideogram/ideogram.repository.mjs +32 -0
- package/dist/src/modules/ai/ideogram/ideogram.repository.mjs.map +1 -0
- package/dist/src/modules/ai/ideogram/ideogram.service.d.mts +14 -0
- package/dist/src/modules/ai/ideogram/ideogram.service.mjs +11 -0
- package/dist/src/modules/ai/ideogram/ideogram.service.mjs.map +1 -0
- package/dist/src/modules/auth/auth.db.d.mts +2341 -0
- package/dist/src/modules/auth/auth.db.mjs +169 -0
- package/dist/src/modules/auth/auth.db.mjs.map +1 -0
- package/dist/src/modules/auth/auth.dto.d.mts +70 -0
- package/dist/src/modules/auth/auth.dto.mjs +43 -0
- package/dist/src/modules/auth/auth.dto.mjs.map +1 -0
- package/dist/src/modules/auth/auth.lib.d.mts +4894 -0
- package/dist/src/modules/auth/auth.lib.mjs +232 -0
- package/dist/src/modules/auth/auth.lib.mjs.map +1 -0
- package/dist/src/modules/auth/auth.middleware.d.mts +619 -0
- package/dist/src/modules/auth/auth.middleware.mjs +38 -0
- package/dist/src/modules/auth/auth.middleware.mjs.map +1 -0
- package/dist/src/modules/auth/auth.repository.d.mts +2453 -0
- package/dist/src/modules/auth/auth.repository.mjs +401 -0
- package/dist/src/modules/auth/auth.repository.mjs.map +1 -0
- package/dist/src/modules/auth/auth.service.d.mts +105 -0
- package/dist/src/modules/auth/auth.service.mjs +227 -0
- package/dist/src/modules/auth/auth.service.mjs.map +1 -0
- package/dist/src/modules/auth/auth.trpc.d.mts +303 -0
- package/dist/src/modules/auth/auth.trpc.mjs +108 -0
- package/dist/src/modules/auth/auth.trpc.mjs.map +1 -0
- package/dist/src/modules/auth/auth.utils.d.mts +2356 -0
- package/dist/src/modules/auth/auth.utils.mjs +77 -0
- package/dist/src/modules/auth/auth.utils.mjs.map +1 -0
- package/dist/src/modules/base/base.abstract.d.mts +29 -0
- package/dist/src/modules/base/base.abstract.mjs +60 -0
- package/dist/src/modules/base/base.abstract.mjs.map +1 -0
- package/dist/src/modules/base/base.actor.d.mts +73 -0
- package/dist/src/modules/base/base.actor.mjs +78 -0
- package/dist/src/modules/base/base.actor.mjs.map +1 -0
- package/dist/src/modules/base/base.dto.d.mts +67 -0
- package/dist/src/modules/base/base.dto.mjs +79 -0
- package/dist/src/modules/base/base.dto.mjs.map +1 -0
- package/dist/src/modules/base/base.grants.d.mts +28 -0
- package/dist/src/modules/base/base.grants.mjs +103 -0
- package/dist/src/modules/base/base.grants.mjs.map +1 -0
- package/dist/src/modules/base/base.procedure.d.mts +111 -0
- package/dist/src/modules/base/base.procedure.mjs +252 -0
- package/dist/src/modules/base/base.procedure.mjs.map +1 -0
- package/dist/src/modules/base/base.repository.d.mts +123 -0
- package/dist/src/modules/base/base.repository.mjs +250 -0
- package/dist/src/modules/base/base.repository.mjs.map +1 -0
- package/dist/src/modules/base/base.service.d.mts +44 -0
- package/dist/src/modules/base/base.service.mjs +116 -0
- package/dist/src/modules/base/base.service.mjs.map +1 -0
- package/dist/src/modules/base/base.types.d.mts +5 -0
- package/dist/src/modules/billing/billing.db.d.mts +371 -0
- package/dist/src/modules/billing/billing.db.mjs +31 -0
- package/dist/src/modules/billing/billing.db.mjs.map +1 -0
- package/dist/src/modules/billing/billing.repository.d.mts +2787 -0
- package/dist/src/modules/billing/billing.repository.mjs +188 -0
- package/dist/src/modules/billing/billing.repository.mjs.map +1 -0
- package/dist/src/modules/billing/billing.router.d.mts +9 -0
- package/dist/src/modules/billing/billing.router.mjs +40 -0
- package/dist/src/modules/billing/billing.router.mjs.map +1 -0
- package/dist/src/modules/billing/billing.service.d.mts +53 -0
- package/dist/src/modules/billing/billing.service.mjs +125 -0
- package/dist/src/modules/billing/billing.service.mjs.map +1 -0
- package/dist/src/modules/billing/billing.trpc.d.mts +29 -0
- package/dist/src/modules/billing/billing.trpc.mjs +17 -0
- package/dist/src/modules/billing/billing.trpc.mjs.map +1 -0
- package/dist/src/modules/clay/clay.repository.d.mts +10 -0
- package/dist/src/modules/clay/clay.repository.mjs +27 -0
- package/dist/src/modules/clay/clay.repository.mjs.map +1 -0
- package/dist/src/modules/clay/clay.service.d.mts +32 -0
- package/dist/src/modules/clay/clay.service.mjs +23 -0
- package/dist/src/modules/clay/clay.service.mjs.map +1 -0
- package/dist/src/modules/connect/connect.db.d.mts +362 -0
- package/dist/src/modules/connect/connect.db.mjs +30 -0
- package/dist/src/modules/connect/connect.db.mjs.map +1 -0
- package/dist/src/modules/connect/connect.dto.d.mts +79 -0
- package/dist/src/modules/connect/connect.dto.mjs +38 -0
- package/dist/src/modules/connect/connect.dto.mjs.map +1 -0
- package/dist/src/modules/connect/connect.linkedin.d.mts +7 -0
- package/dist/src/modules/connect/connect.linkedin.mjs +47 -0
- package/dist/src/modules/connect/connect.linkedin.mjs.map +1 -0
- package/dist/src/modules/connect/connect.oauth.d.mts +32 -0
- package/dist/src/modules/connect/connect.oauth.mjs +145 -0
- package/dist/src/modules/connect/connect.oauth.mjs.map +1 -0
- package/dist/src/modules/connect/connect.repository.d.mts +419 -0
- package/dist/src/modules/connect/connect.repository.mjs +40 -0
- package/dist/src/modules/connect/connect.repository.mjs.map +1 -0
- package/dist/src/modules/connect/connect.router.d.mts +9 -0
- package/dist/src/modules/connect/connect.router.mjs +46 -0
- package/dist/src/modules/connect/connect.router.mjs.map +1 -0
- package/dist/src/modules/connect/connect.service.d.mts +103 -0
- package/dist/src/modules/connect/connect.service.mjs +88 -0
- package/dist/src/modules/connect/connect.service.mjs.map +1 -0
- package/dist/src/modules/connect/connect.trpc.d.mts +53 -0
- package/dist/src/modules/connect/connect.trpc.mjs +17 -0
- package/dist/src/modules/connect/connect.trpc.mjs.map +1 -0
- package/dist/src/modules/connect/connect.types.d.mts +29 -0
- package/dist/src/modules/crypto/crypto.db.d.mts +157 -0
- package/dist/src/modules/crypto/crypto.db.mjs +19 -0
- package/dist/src/modules/crypto/crypto.db.mjs.map +1 -0
- package/dist/src/modules/crypto/crypto.repository.d.mts +163 -0
- package/dist/src/modules/crypto/crypto.repository.mjs +9 -0
- package/dist/src/modules/crypto/crypto.repository.mjs.map +1 -0
- package/dist/src/modules/crypto/crypto.service.d.mts +15 -0
- package/dist/src/modules/crypto/crypto.service.mjs +40 -0
- package/dist/src/modules/crypto/crypto.service.mjs.map +1 -0
- package/dist/src/modules/email/email.service.d.mts +62 -0
- package/dist/src/modules/email/email.service.mjs +105 -0
- package/dist/src/modules/email/email.service.mjs.map +1 -0
- package/dist/src/modules/file/file.repository.d.mts +17 -0
- package/dist/src/modules/file/file.repository.mjs +72 -0
- package/dist/src/modules/file/file.repository.mjs.map +1 -0
- package/dist/src/modules/file/{file.router.d.ts → file.router.d.mts} +4 -0
- package/dist/src/modules/file/file.router.mjs +88 -0
- package/dist/src/modules/file/file.router.mjs.map +1 -0
- package/dist/src/modules/file/file.service.d.mts +30 -0
- package/dist/src/modules/file/file.service.mjs +117 -0
- package/dist/src/modules/file/file.service.mjs.map +1 -0
- package/dist/src/modules/recurrence/recurrence.db.d.mts +568 -0
- package/dist/src/modules/recurrence/recurrence.db.mjs +47 -0
- package/dist/src/modules/recurrence/recurrence.db.mjs.map +1 -0
- package/dist/src/modules/recurrence/recurrence.repository.d.mts +588 -0
- package/dist/src/modules/recurrence/recurrence.repository.mjs +28 -0
- package/dist/src/modules/recurrence/recurrence.repository.mjs.map +1 -0
- package/dist/src/modules/recurrence/recurrence.service.d.mts +51 -0
- package/dist/src/modules/recurrence/recurrence.service.mjs +64 -0
- package/dist/src/modules/recurrence/recurrence.service.mjs.map +1 -0
- package/dist/src/modules/recurrence/recurrence.trpc.d.mts +65 -0
- package/dist/src/modules/recurrence/recurrence.trpc.mjs +44 -0
- package/dist/src/modules/recurrence/recurrence.trpc.mjs.map +1 -0
- package/dist/src/modules/social/social.dto.d.mts +39 -0
- package/dist/src/modules/social/social.dto.mjs +22 -0
- package/dist/src/modules/social/social.dto.mjs.map +1 -0
- package/dist/src/modules/social/{social.linkedin.d.ts → social.linkedin.d.mts} +8 -3
- package/dist/src/modules/social/social.linkedin.mjs +346 -0
- package/dist/src/modules/social/social.linkedin.mjs.map +1 -0
- package/dist/src/modules/social/social.service.d.mts +34 -0
- package/dist/src/modules/social/social.service.mjs +55 -0
- package/dist/src/modules/social/social.service.mjs.map +1 -0
- package/dist/src/modules/social/social.types.d.mts +40 -0
- package/dist/src/modules/tag/tag.db.d.mts +352 -0
- package/dist/src/modules/tag/tag.db.mjs +35 -0
- package/dist/src/modules/tag/tag.db.mjs.map +1 -0
- package/dist/src/modules/tag/tag.dto.d.mts +1025 -0
- package/dist/src/modules/tag/tag.dto.mjs +11 -0
- package/dist/src/modules/tag/tag.dto.mjs.map +1 -0
- package/dist/src/modules/tag/tag.repository.d.mts +394 -0
- package/dist/src/modules/tag/tag.repository.mjs +114 -0
- package/dist/src/modules/tag/tag.repository.mjs.map +1 -0
- package/dist/src/modules/tag/tag.service.d.mts +93 -0
- package/dist/src/modules/tag/tag.service.mjs +47 -0
- package/dist/src/modules/tag/tag.service.mjs.map +1 -0
- package/dist/src/modules/tag/tag.trpc.d.mts +109 -0
- package/dist/src/modules/tag/tag.trpc.mjs +30 -0
- package/dist/src/modules/tag/tag.trpc.mjs.map +1 -0
- package/dist/src/modules/utils/{applyPagination.d.ts → applyPagination.d.mts} +5 -1
- package/dist/src/modules/utils/applyPagination.mjs +15 -0
- package/dist/src/modules/utils/applyPagination.mjs.map +1 -0
- package/dist/src/modules/utils/applySorting.d.mts +13 -0
- package/dist/src/modules/utils/applySorting.mjs +18 -0
- package/dist/src/modules/utils/applySorting.mjs.map +1 -0
- package/dist/src/modules/utils/getConditionsFromFilters.d.mts +9 -0
- package/dist/src/modules/utils/getConditionsFromFilters.mjs +150 -0
- package/dist/src/modules/utils/getConditionsFromFilters.mjs.map +1 -0
- package/dist/src/modules/video/video.service.d.mts +12 -0
- package/dist/src/modules/video/video.service.mjs +50 -0
- package/dist/src/modules/video/video.service.mjs.map +1 -0
- package/dist/src/modules/webhook/webhook.constants.d.mts +12 -0
- package/dist/src/modules/webhook/webhook.constants.mjs +12 -0
- package/dist/src/modules/webhook/webhook.constants.mjs.map +1 -0
- package/dist/src/modules/webhook/webhook.db.d.mts +142 -0
- package/dist/src/modules/webhook/webhook.db.mjs +17 -0
- package/dist/src/modules/webhook/webhook.db.mjs.map +1 -0
- package/dist/src/modules/webhook/webhook.dto.d.mts +402 -0
- package/dist/src/modules/webhook/webhook.dto.mjs +9 -0
- package/dist/src/modules/webhook/webhook.dto.mjs.map +1 -0
- package/dist/src/modules/webhook/webhook.repository.d.mts +154 -0
- package/dist/src/modules/webhook/webhook.repository.mjs +50 -0
- package/dist/src/modules/webhook/webhook.repository.mjs.map +1 -0
- package/dist/src/modules/webhook/webhook.router.d.mts +8 -0
- package/dist/src/modules/webhook/webhook.router.mjs +23 -0
- package/dist/src/modules/webhook/webhook.router.mjs.map +1 -0
- package/dist/src/modules/webhook/webhook.service.d.mts +14 -0
- package/dist/src/modules/webhook/webhook.service.mjs +59 -0
- package/dist/src/modules/webhook/webhook.service.mjs.map +1 -0
- package/dist/src/modules/workflow/workflow.db.d.mts +302 -0
- package/dist/src/modules/workflow/workflow.db.mjs +28 -0
- package/dist/src/modules/workflow/workflow.db.mjs.map +1 -0
- package/dist/src/modules/workflow/workflow.repository.d.mts +371 -0
- package/dist/src/modules/workflow/workflow.repository.mjs +93 -0
- package/dist/src/modules/workflow/workflow.repository.mjs.map +1 -0
- package/dist/src/modules/workflow/workflow.service.d.mts +31 -0
- package/dist/src/modules/workflow/workflow.service.mjs +40 -0
- package/dist/src/modules/workflow/workflow.service.mjs.map +1 -0
- package/dist/src/modules/workflow/workflow.trpc.d.mts +28 -0
- package/dist/src/modules/workflow/workflow.trpc.mjs +17 -0
- package/dist/src/modules/workflow/workflow.trpc.mjs.map +1 -0
- package/dist/src/modules/workflow/workflow.types.d.mts +25 -0
- package/dist/src/modules/workflow/workflow.utils.d.mts +36 -0
- package/dist/src/modules/workflow/workflow.utils.mjs +181 -0
- package/dist/src/modules/workflow/workflow.utils.mjs.map +1 -0
- package/dist/src/types.d.mts +346 -0
- package/dist/src/types.mjs +13 -0
- package/dist/src/types.mjs.map +1 -0
- package/dist/src/utils/errors.d.mts +62 -0
- package/dist/src/utils/errors.mjs +96 -0
- package/dist/src/utils/errors.mjs.map +1 -0
- package/dist/src/utils/logger.d.mts +7 -0
- package/dist/src/utils/logger.mjs +10 -0
- package/dist/src/utils/logger.mjs.map +1 -0
- package/dist/src/utils/posthog.d.mts +17 -0
- package/dist/src/utils/posthog.mjs +25 -0
- package/dist/src/utils/posthog.mjs.map +1 -0
- package/dist/src/utils/trpc.d.mts +54 -0
- package/dist/src/utils/trpc.mjs +146 -0
- package/dist/src/utils/trpc.mjs.map +1 -0
- package/dist/src/utils/types.d.mts +9 -0
- package/package.json +5 -4
- package/dist/src/lib/posthog.d.ts +0 -2
- package/dist/src/lib/posthog.js +0 -7
- package/dist/src/lib/sentry.d.ts +0 -1
- package/dist/src/lib/sentry.js +0 -9
- package/dist/src/modules/access/access.repository.d.ts +0 -2347
- package/dist/src/modules/access/access.repository.js +0 -32
- package/dist/src/modules/access/access.service.d.ts +0 -21
- package/dist/src/modules/access/access.service.js +0 -51
- package/dist/src/modules/access/access.test.d.ts +0 -1
- package/dist/src/modules/access/access.test.js +0 -182
- package/dist/src/modules/access/access.utils.d.ts +0 -16
- package/dist/src/modules/access/access.utils.js +0 -20
- package/dist/src/modules/ai/ai.db.d.ts +0 -395
- package/dist/src/modules/ai/ai.db.js +0 -39
- package/dist/src/modules/ai/ai.prompt.d.ts +0 -26
- package/dist/src/modules/ai/ai.prompt.js +0 -30
- package/dist/src/modules/ai/ai.prompts.d.ts +0 -5
- package/dist/src/modules/ai/ai.repository.d.ts +0 -423
- package/dist/src/modules/ai/ai.repository.js +0 -26
- package/dist/src/modules/ai/ai.router.js +0 -132
- package/dist/src/modules/ai/ai.service.d.ts +0 -125
- package/dist/src/modules/ai/ai.service.js +0 -297
- package/dist/src/modules/ai/ai.trpc.d.ts +0 -22
- package/dist/src/modules/ai/ai.trpc.js +0 -20
- package/dist/src/modules/ai/ideogram/ideogram.constants.d.ts +0 -7
- package/dist/src/modules/ai/ideogram/ideogram.constants.js +0 -167
- package/dist/src/modules/ai/ideogram/ideogram.dto.d.ts +0 -229
- package/dist/src/modules/ai/ideogram/ideogram.dto.js +0 -49
- package/dist/src/modules/ai/ideogram/ideogram.prompt.d.ts +0 -2
- package/dist/src/modules/ai/ideogram/ideogram.repository.d.ts +0 -6
- package/dist/src/modules/ai/ideogram/ideogram.repository.js +0 -46
- package/dist/src/modules/ai/ideogram/ideogram.service.d.ts +0 -9
- package/dist/src/modules/ai/ideogram/ideogram.service.js +0 -11
- package/dist/src/modules/auth/auth.db.d.ts +0 -2335
- package/dist/src/modules/auth/auth.db.js +0 -215
- package/dist/src/modules/auth/auth.dto.d.ts +0 -65
- package/dist/src/modules/auth/auth.dto.js +0 -38
- package/dist/src/modules/auth/auth.lib.d.ts +0 -4869
- package/dist/src/modules/auth/auth.lib.js +0 -284
- package/dist/src/modules/auth/auth.middleware.d.ts +0 -614
- package/dist/src/modules/auth/auth.middleware.js +0 -52
- package/dist/src/modules/auth/auth.repository.d.ts +0 -2421
- package/dist/src/modules/auth/auth.repository.js +0 -636
- package/dist/src/modules/auth/auth.service.d.ts +0 -78
- package/dist/src/modules/auth/auth.service.js +0 -259
- package/dist/src/modules/auth/auth.trpc.d.ts +0 -292
- package/dist/src/modules/auth/auth.trpc.js +0 -179
- package/dist/src/modules/auth/auth.utils.d.ts +0 -2351
- package/dist/src/modules/auth/auth.utils.js +0 -97
- package/dist/src/modules/base/base.abstract.d.ts +0 -19
- package/dist/src/modules/base/base.abstract.js +0 -62
- package/dist/src/modules/base/base.actor.d.ts +0 -68
- package/dist/src/modules/base/base.actor.js +0 -99
- package/dist/src/modules/base/base.actor.test.js +0 -58
- package/dist/src/modules/base/base.dto.d.ts +0 -69
- package/dist/src/modules/base/base.dto.js +0 -112
- package/dist/src/modules/base/base.grants.d.ts +0 -24
- package/dist/src/modules/base/base.grants.js +0 -135
- package/dist/src/modules/base/base.grants.test.js +0 -639
- package/dist/src/modules/base/base.procedure.d.ts +0 -109
- package/dist/src/modules/base/base.procedure.js +0 -301
- package/dist/src/modules/base/base.repository.d.ts +0 -97
- package/dist/src/modules/base/base.repository.js +0 -317
- package/dist/src/modules/base/base.service.d.ts +0 -40
- package/dist/src/modules/base/base.service.js +0 -123
- package/dist/src/modules/base/base.service.test.js +0 -443
- package/dist/src/modules/base/base.types.d.ts +0 -1
- package/dist/src/modules/base/base.types.js +0 -2
- package/dist/src/modules/billing/billing.db.d.ts +0 -365
- package/dist/src/modules/billing/billing.db.js +0 -29
- package/dist/src/modules/billing/billing.repository.d.ts +0 -2763
- package/dist/src/modules/billing/billing.repository.js +0 -235
- package/dist/src/modules/billing/billing.router.d.ts +0 -4
- package/dist/src/modules/billing/billing.router.js +0 -56
- package/dist/src/modules/billing/billing.service.d.ts +0 -38
- package/dist/src/modules/billing/billing.service.js +0 -147
- package/dist/src/modules/billing/billing.trpc.d.ts +0 -38
- package/dist/src/modules/billing/billing.trpc.js +0 -15
- package/dist/src/modules/clay/clay.repository.d.ts +0 -5
- package/dist/src/modules/clay/clay.repository.js +0 -26
- package/dist/src/modules/clay/clay.service.d.ts +0 -28
- package/dist/src/modules/clay/clay.service.js +0 -24
- package/dist/src/modules/connect/connect.db.d.ts +0 -356
- package/dist/src/modules/connect/connect.db.js +0 -30
- package/dist/src/modules/connect/connect.dto.d.ts +0 -74
- package/dist/src/modules/connect/connect.dto.js +0 -36
- package/dist/src/modules/connect/connect.linkedin.d.ts +0 -2
- package/dist/src/modules/connect/connect.linkedin.js +0 -53
- package/dist/src/modules/connect/connect.oauth.d.ts +0 -27
- package/dist/src/modules/connect/connect.oauth.js +0 -198
- package/dist/src/modules/connect/connect.repository.d.ts +0 -413
- package/dist/src/modules/connect/connect.repository.js +0 -54
- package/dist/src/modules/connect/connect.router.d.ts +0 -4
- package/dist/src/modules/connect/connect.router.js +0 -54
- package/dist/src/modules/connect/connect.service.d.ts +0 -96
- package/dist/src/modules/connect/connect.service.js +0 -116
- package/dist/src/modules/connect/connect.trpc.d.ts +0 -44
- package/dist/src/modules/connect/connect.trpc.js +0 -21
- package/dist/src/modules/connect/connect.types.d.ts +0 -25
- package/dist/src/modules/connect/connect.types.js +0 -2
- package/dist/src/modules/crypto/crypto.db.d.ts +0 -151
- package/dist/src/modules/crypto/crypto.db.js +0 -17
- package/dist/src/modules/crypto/crypto.repository.d.ts +0 -159
- package/dist/src/modules/crypto/crypto.repository.js +0 -10
- package/dist/src/modules/crypto/crypto.service.d.ts +0 -10
- package/dist/src/modules/crypto/crypto.service.js +0 -52
- package/dist/src/modules/email/email.service.d.ts +0 -56
- package/dist/src/modules/email/email.service.js +0 -106
- package/dist/src/modules/file/file.repository.d.ts +0 -12
- package/dist/src/modules/file/file.repository.js +0 -79
- package/dist/src/modules/file/file.router.js +0 -99
- package/dist/src/modules/file/file.service.d.ts +0 -24
- package/dist/src/modules/file/file.service.js +0 -150
- package/dist/src/modules/recurrence/recurrence.db.d.ts +0 -562
- package/dist/src/modules/recurrence/recurrence.db.js +0 -66
- package/dist/src/modules/recurrence/recurrence.repository.d.ts +0 -584
- package/dist/src/modules/recurrence/recurrence.repository.js +0 -39
- package/dist/src/modules/recurrence/recurrence.service.d.ts +0 -80
- package/dist/src/modules/recurrence/recurrence.service.js +0 -72
- package/dist/src/modules/recurrence/recurrence.trpc.d.ts +0 -206
- package/dist/src/modules/recurrence/recurrence.trpc.js +0 -65
- package/dist/src/modules/social/social.dto.d.ts +0 -34
- package/dist/src/modules/social/social.dto.js +0 -18
- package/dist/src/modules/social/social.linkedin.js +0 -427
- package/dist/src/modules/social/social.linkedin.test.js +0 -235
- package/dist/src/modules/social/social.service.d.ts +0 -27
- package/dist/src/modules/social/social.service.js +0 -76
- package/dist/src/modules/social/social.types.d.ts +0 -35
- package/dist/src/modules/social/social.types.js +0 -2
- package/dist/src/modules/tag/tag.db.d.ts +0 -346
- package/dist/src/modules/tag/tag.db.js +0 -42
- package/dist/src/modules/tag/tag.dto.d.ts +0 -1018
- package/dist/src/modules/tag/tag.dto.js +0 -9
- package/dist/src/modules/tag/tag.repository.d.ts +0 -383
- package/dist/src/modules/tag/tag.repository.js +0 -156
- package/dist/src/modules/tag/tag.service.d.ts +0 -113
- package/dist/src/modules/tag/tag.service.js +0 -42
- package/dist/src/modules/tag/tag.trpc.d.ts +0 -164
- package/dist/src/modules/tag/tag.trpc.js +0 -53
- package/dist/src/modules/utils/applyPagination.js +0 -16
- package/dist/src/modules/utils/applySorting.d.ts +0 -8
- package/dist/src/modules/utils/applySorting.js +0 -18
- package/dist/src/modules/utils/getConditionsFromFilters.d.ts +0 -4
- package/dist/src/modules/utils/getConditionsFromFilters.js +0 -200
- package/dist/src/modules/video/video.service.d.ts +0 -7
- package/dist/src/modules/video/video.service.js +0 -84
- package/dist/src/modules/webhook/webhook.constants.d.ts +0 -8
- package/dist/src/modules/webhook/webhook.constants.js +0 -10
- package/dist/src/modules/webhook/webhook.db.d.ts +0 -136
- package/dist/src/modules/webhook/webhook.db.js +0 -17
- package/dist/src/modules/webhook/webhook.dto.d.ts +0 -394
- package/dist/src/modules/webhook/webhook.dto.js +0 -7
- package/dist/src/modules/webhook/webhook.repository.d.ts +0 -148
- package/dist/src/modules/webhook/webhook.repository.js +0 -56
- package/dist/src/modules/webhook/webhook.router.d.ts +0 -3
- package/dist/src/modules/webhook/webhook.router.js +0 -30
- package/dist/src/modules/webhook/webhook.service.d.ts +0 -9
- package/dist/src/modules/webhook/webhook.service.js +0 -68
- package/dist/src/modules/workflow/workflow.db.d.ts +0 -296
- package/dist/src/modules/workflow/workflow.db.js +0 -30
- package/dist/src/modules/workflow/workflow.repository.d.ts +0 -343
- package/dist/src/modules/workflow/workflow.repository.js +0 -105
- package/dist/src/modules/workflow/workflow.service.d.ts +0 -61
- package/dist/src/modules/workflow/workflow.service.js +0 -37
- package/dist/src/modules/workflow/workflow.trpc.d.ts +0 -56
- package/dist/src/modules/workflow/workflow.trpc.js +0 -21
- package/dist/src/modules/workflow/workflow.types.d.ts +0 -20
- package/dist/src/modules/workflow/workflow.types.js +0 -2
- package/dist/src/modules/workflow/workflow.utils.d.ts +0 -21
- package/dist/src/modules/workflow/workflow.utils.js +0 -173
- package/dist/src/test/stubs/utils.d.ts +0 -2
- package/dist/src/test/stubs/utils.js +0 -5
- package/dist/src/trpc/context.d.ts +0 -41
- package/dist/src/trpc/context.js +0 -17
- package/dist/src/trpc/index.d.ts +0 -3
- package/dist/src/trpc/index.js +0 -6
- package/dist/src/trpc/procedures.d.ts +0 -233
- package/dist/src/trpc/procedures.js +0 -32
- package/dist/src/trpc/utils.d.ts +0 -4
- package/dist/src/trpc/utils.js +0 -20
- package/dist/src/types.d.ts +0 -358
- package/dist/src/types.js +0 -12
- package/dist/src/utils/errors.d.ts +0 -49
- package/dist/src/utils/errors.js +0 -104
- package/dist/src/utils/logger.d.ts +0 -1
- package/dist/src/utils/logger.js +0 -11
- package/dist/src/utils/posthog.d.ts +0 -13
- package/dist/src/utils/posthog.js +0 -31
- package/dist/src/utils/trpc.d.ts +0 -48
- package/dist/src/utils/trpc.js +0 -158
- package/dist/src/utils/trpc.test.js +0 -154
- package/dist/src/utils/types.d.ts +0 -4
- package/dist/src/utils/types.js +0 -2
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/src/{utils/trpc.test.d.ts → modules/ai/ai.router.mjs} +0 -0
- /package/dist/src/modules/{social/social.linkedin.test.d.ts → base/base.types.mjs} +0 -0
- /package/dist/src/modules/{base/base.service.test.d.ts → connect/connect.types.mjs} +0 -0
- /package/dist/src/modules/{base/base.grants.test.d.ts → social/social.types.mjs} +0 -0
- /package/dist/src/modules/{base/base.actor.test.d.ts → workflow/workflow.types.mjs} +0 -0
- /package/dist/src/{modules/ai/ai.router.d.ts → utils/types.mjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.linkedin.mjs","names":[],"sources":["../../../../src/modules/social/social.linkedin.ts"],"sourcesContent":["import { createReadStream } from \"node:fs\";\r\nimport { stat, unlink } from \"node:fs/promises\";\r\nimport type { ConnectRow } from \"../connect/connect.repository\";\r\nimport type { FileService } from \"../file/file.service\";\r\nimport type { SocialMediaDescriptor, SocialPostPayload, SocialProvider } from \"./social.types\";\r\n\r\nconst LINKEDIN_API_BASE = \"https://api.linkedin.com/rest\";\r\nconst LINKEDIN_VERSION = \"202601\";\r\n\r\nconst IMAGES_URL = `${LINKEDIN_API_BASE}/images?action=initializeUpload`;\r\nconst VIDEOS_URL = `${LINKEDIN_API_BASE}/videos?action=initializeUpload`;\r\nconst VIDEOS_FINALIZE_URL = `${LINKEDIN_API_BASE}/videos?action=finalizeUpload`;\r\nconst DOCUMENTS_URL = `${LINKEDIN_API_BASE}/documents?action=initializeUpload`;\r\nconst POSTS_URL = `${LINKEDIN_API_BASE}/posts`;\r\n\r\ninterface LinkedInMetadata {\r\n linkedInUrn?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\ninterface UploadedAsset {\r\n assetUrn: string;\r\n mediaType: \"image\" | \"video\" | \"document\";\r\n title?: string;\r\n description?: string;\r\n}\r\n\r\ninterface ImageInitResponse {\r\n value: {\r\n uploadUrlExpiresAt: number;\r\n uploadUrl: string;\r\n image: string;\r\n };\r\n}\r\n\r\ninterface VideoInitResponse {\r\n value: {\r\n uploadUrlsExpireAt: number;\r\n video: string;\r\n uploadInstructions: Array<{\r\n uploadUrl: string;\r\n lastByte: number;\r\n firstByte: number;\r\n }>;\r\n uploadToken: string;\r\n };\r\n}\r\n\r\ninterface DocumentInitResponse {\r\n value: {\r\n uploadUrlExpiresAt: number;\r\n uploadUrl: string;\r\n document: string;\r\n };\r\n}\r\n\r\nfunction getApiHeaders(accessToken: string): Record<string, string> {\r\n return {\r\n Authorization: `Bearer ${accessToken}`,\r\n \"Content-Type\": \"application/json\",\r\n \"Linkedin-Version\": LINKEDIN_VERSION,\r\n \"X-Restli-Protocol-Version\": \"2.0.0\",\r\n };\r\n}\r\n\r\nexport function createLinkedInSocialProvider(): SocialProvider {\r\n return {\r\n id: \"linkedin\",\r\n async post({ deps, context, payload }) {\r\n const personUrn = resolveAuthorUrn(context.connection);\r\n const mediaDescriptors = payload.media ?? [];\r\n\r\n let uploadedAssets: UploadedAsset[] = [];\r\n if (mediaDescriptors.length > 0) {\r\n uploadedAssets = await uploadMediaAssets({\r\n accessToken: context.accessToken,\r\n fileService: deps.fileService,\r\n mediaDescriptors,\r\n personUrn,\r\n });\r\n }\r\n\r\n const response = await publishPost({\r\n accessToken: context.accessToken,\r\n personUrn,\r\n payload,\r\n uploadedAssets,\r\n });\r\n\r\n return {\r\n shareUrn: response.postUrn,\r\n rawResponse: response.raw,\r\n };\r\n },\r\n };\r\n}\r\n\r\nfunction resolveAuthorUrn(connection: ConnectRow): string {\r\n if (connection.metadataJson) {\r\n try {\r\n const metadata = connection.metadataJson as LinkedInMetadata;\r\n if (metadata.linkedInUrn && typeof metadata.linkedInUrn === \"string\") {\r\n return metadata.linkedInUrn;\r\n }\r\n } catch {\r\n throw new Error(\"Failed to parse LinkedIn connection metadata\");\r\n }\r\n }\r\n\r\n if (connection.providerAccountId) {\r\n return `urn:li:person:${connection.providerAccountId}`;\r\n }\r\n\r\n throw new Error(\"LinkedIn connection is missing a person URN\");\r\n}\r\n\r\nasync function uploadMediaAssets(params: {\r\n accessToken: string;\r\n fileService: FileService;\r\n mediaDescriptors: readonly SocialMediaDescriptor[];\r\n personUrn: string;\r\n}): Promise<UploadedAsset[]> {\r\n const results: UploadedAsset[] = [];\r\n\r\n for (const descriptor of params.mediaDescriptors) {\r\n const download = await params.fileService.downloadS3ToFile(descriptor.s3Path);\r\n if (download.isErr()) {\r\n throw download.error;\r\n }\r\n\r\n const localPath = download.value;\r\n try {\r\n const mediaType = determineMediaType(descriptor.mediaType, localPath);\r\n\r\n let assetUrn: string;\r\n switch (mediaType) {\r\n case \"image\":\r\n assetUrn = await uploadImage({\r\n accessToken: params.accessToken,\r\n personUrn: params.personUrn,\r\n localPath,\r\n });\r\n break;\r\n case \"video\":\r\n assetUrn = await uploadVideo({\r\n accessToken: params.accessToken,\r\n personUrn: params.personUrn,\r\n localPath,\r\n });\r\n break;\r\n case \"document\":\r\n assetUrn = await uploadDocument({\r\n accessToken: params.accessToken,\r\n personUrn: params.personUrn,\r\n localPath,\r\n });\r\n break;\r\n }\r\n\r\n results.push({\r\n assetUrn,\r\n mediaType,\r\n title: descriptor.title,\r\n description: descriptor.description,\r\n });\r\n } finally {\r\n await unlink(localPath).catch(() => undefined);\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n\r\nfunction determineMediaType(\r\n explicitType: SocialMediaDescriptor[\"mediaType\"],\r\n localPath: string\r\n): \"image\" | \"video\" | \"document\" {\r\n if (explicitType) {\r\n return explicitType;\r\n }\r\n\r\n const extension = localPath.split(\".\").pop()?.toLowerCase();\r\n if (!extension) {\r\n throw new Error(\"Unable to determine media type from file extension\");\r\n }\r\n\r\n const imageExtensions = new Set([\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\"]);\r\n const videoExtensions = new Set([\"mp4\", \"mov\", \"m4v\", \"avi\", \"mkv\", \"webm\"]);\r\n const documentExtensions = new Set([\"pdf\", \"ppt\", \"pptx\", \"doc\", \"docx\"]);\r\n\r\n if (imageExtensions.has(extension)) {\r\n return \"image\";\r\n }\r\n if (videoExtensions.has(extension)) {\r\n return \"video\";\r\n }\r\n if (documentExtensions.has(extension)) {\r\n return \"document\";\r\n }\r\n\r\n throw new Error(`Unsupported media extension: ${extension}`);\r\n}\r\n\r\nasync function uploadImage(params: {\r\n accessToken: string;\r\n personUrn: string;\r\n localPath: string;\r\n}): Promise<string> {\r\n const initResponse = await fetch(IMAGES_URL, {\r\n method: \"POST\",\r\n headers: getApiHeaders(params.accessToken),\r\n body: JSON.stringify({\r\n initializeUploadRequest: {\r\n owner: params.personUrn,\r\n },\r\n }),\r\n });\r\n\r\n if (!initResponse.ok) {\r\n const errorText = await initResponse.text().catch(() => \"\");\r\n throw new Error(\r\n `LinkedIn image upload initialization failed: ${initResponse.status} ${errorText}`\r\n );\r\n }\r\n\r\n const initJson = (await initResponse.json()) as ImageInitResponse;\r\n const { uploadUrl, image } = initJson.value;\r\n\r\n if (!uploadUrl || !image) {\r\n throw new Error(\"LinkedIn image initialization response missing required fields\");\r\n }\r\n\r\n await uploadBinaryToLinkedIn({\r\n uploadUrl,\r\n localPath: params.localPath,\r\n mimeType: inferImageMime(params.localPath),\r\n });\r\n\r\n return image;\r\n}\r\n\r\nasync function uploadVideo(params: {\r\n accessToken: string;\r\n personUrn: string;\r\n localPath: string;\r\n}): Promise<string> {\r\n const fileSizeBytes = await getFileSize(params.localPath);\r\n\r\n const initResponse = await fetch(VIDEOS_URL, {\r\n method: \"POST\",\r\n headers: getApiHeaders(params.accessToken),\r\n body: JSON.stringify({\r\n initializeUploadRequest: {\r\n owner: params.personUrn,\r\n fileSizeBytes,\r\n uploadCaptions: false,\r\n uploadThumbnail: false,\r\n },\r\n }),\r\n });\r\n\r\n if (!initResponse.ok) {\r\n const errorText = await initResponse.text().catch(() => \"\");\r\n throw new Error(\r\n `LinkedIn video upload initialization failed: ${initResponse.status} ${errorText}`\r\n );\r\n }\r\n\r\n const initJson = (await initResponse.json()) as VideoInitResponse;\r\n const { uploadInstructions, video, uploadToken } = initJson.value;\r\n\r\n if (!uploadInstructions || !video || !uploadToken) {\r\n throw new Error(\"LinkedIn video initialization response missing required fields\");\r\n }\r\n\r\n const uploadedPartIds = await uploadVideoMultipart({\r\n localPath: params.localPath,\r\n uploadInstructions,\r\n });\r\n\r\n await finalizeVideoUpload({\r\n accessToken: params.accessToken,\r\n video,\r\n uploadToken,\r\n uploadedPartIds,\r\n });\r\n\r\n return video;\r\n}\r\n\r\nasync function uploadVideoMultipart(params: {\r\n localPath: string;\r\n uploadInstructions: VideoInitResponse[\"value\"][\"uploadInstructions\"];\r\n}): Promise<string[]> {\r\n const uploadedPartIds: string[] = [];\r\n\r\n for (const instruction of params.uploadInstructions) {\r\n const chunkStream = createReadStream(params.localPath, {\r\n start: instruction.firstByte,\r\n end: instruction.lastByte,\r\n });\r\n\r\n const uploadResponse = await fetch(instruction.uploadUrl, {\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": \"application/octet-stream\",\r\n },\r\n body: chunkStream,\r\n duplex: \"half\",\r\n });\r\n\r\n if (!uploadResponse.ok) {\r\n const errorText = await uploadResponse.text().catch(() => \"\");\r\n throw new Error(`LinkedIn video part upload failed: ${uploadResponse.status} ${errorText}`);\r\n }\r\n\r\n const etag = uploadResponse.headers.get(\"etag\");\r\n if (!etag) {\r\n throw new Error(\"LinkedIn video part upload response missing ETag header\");\r\n }\r\n\r\n uploadedPartIds.push(etag.replace(/\"/g, \"\"));\r\n }\r\n\r\n return uploadedPartIds;\r\n}\r\n\r\nasync function finalizeVideoUpload(params: {\r\n accessToken: string;\r\n video: string;\r\n uploadToken: string;\r\n uploadedPartIds: string[];\r\n}): Promise<void> {\r\n const response = await fetch(VIDEOS_FINALIZE_URL, {\r\n method: \"POST\",\r\n headers: getApiHeaders(params.accessToken),\r\n body: JSON.stringify({\r\n finalizeUploadRequest: {\r\n video: params.video,\r\n uploadToken: params.uploadToken,\r\n uploadedPartIds: params.uploadedPartIds,\r\n },\r\n }),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text().catch(() => \"\");\r\n throw new Error(`LinkedIn video finalize failed: ${response.status} ${errorText}`);\r\n }\r\n}\r\n\r\nasync function uploadDocument(params: {\r\n accessToken: string;\r\n personUrn: string;\r\n localPath: string;\r\n}): Promise<string> {\r\n const initResponse = await fetch(DOCUMENTS_URL, {\r\n method: \"POST\",\r\n headers: getApiHeaders(params.accessToken),\r\n body: JSON.stringify({\r\n initializeUploadRequest: {\r\n owner: params.personUrn,\r\n },\r\n }),\r\n });\r\n\r\n if (!initResponse.ok) {\r\n const errorText = await initResponse.text().catch(() => \"\");\r\n throw new Error(\r\n `LinkedIn document upload initialization failed: ${initResponse.status} ${errorText}`\r\n );\r\n }\r\n\r\n const initJson = (await initResponse.json()) as DocumentInitResponse;\r\n const { uploadUrl, document } = initJson.value;\r\n\r\n if (!uploadUrl || !document) {\r\n throw new Error(\"LinkedIn document initialization response missing required fields\");\r\n }\r\n\r\n await uploadBinaryToLinkedIn({\r\n uploadUrl,\r\n localPath: params.localPath,\r\n mimeType: inferDocumentMime(params.localPath),\r\n });\r\n\r\n return document;\r\n}\r\n\r\nasync function uploadBinaryToLinkedIn(params: {\r\n uploadUrl: string;\r\n localPath: string;\r\n mimeType: string;\r\n}): Promise<void> {\r\n const uploadResponse = await fetch(params.uploadUrl, {\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": params.mimeType,\r\n },\r\n body: createReadStream(params.localPath),\r\n duplex: \"half\",\r\n });\r\n\r\n if (!uploadResponse.ok) {\r\n const errorText = await uploadResponse.text().catch(() => \"\");\r\n throw new Error(`LinkedIn media upload failed: ${uploadResponse.status} ${errorText}`);\r\n }\r\n}\r\n\r\nasync function getFileSize(filePath: string): Promise<number> {\r\n const stats = await stat(filePath);\r\n return stats.size;\r\n}\r\n\r\nfunction inferImageMime(localPath: string): string {\r\n const extension = localPath.split(\".\").pop()?.toLowerCase();\r\n switch (extension) {\r\n case \"png\":\r\n return \"image/png\";\r\n case \"webp\":\r\n return \"image/webp\";\r\n case \"gif\":\r\n return \"image/gif\";\r\n case \"jpg\":\r\n case \"jpeg\":\r\n return \"image/jpeg\";\r\n default:\r\n return \"application/octet-stream\";\r\n }\r\n}\r\n\r\nfunction inferDocumentMime(localPath: string): string {\r\n const extension = localPath.split(\".\").pop()?.toLowerCase();\r\n switch (extension) {\r\n case \"pdf\":\r\n return \"application/pdf\";\r\n case \"doc\":\r\n return \"application/msword\";\r\n case \"docx\":\r\n return \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\r\n case \"ppt\":\r\n return \"application/vnd.ms-powerpoint\";\r\n case \"pptx\":\r\n return \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\r\n default:\r\n return \"application/octet-stream\";\r\n }\r\n}\r\n\r\nasync function publishPost(params: {\r\n accessToken: string;\r\n personUrn: string;\r\n payload: SocialPostPayload;\r\n uploadedAssets: UploadedAsset[];\r\n}): Promise<{ postUrn?: string; raw: unknown }> {\r\n const body = buildPostBody(params);\r\n\r\n const response = await fetch(POSTS_URL, {\r\n method: \"POST\",\r\n headers: getApiHeaders(params.accessToken),\r\n body: JSON.stringify(body),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text().catch(() => \"\");\r\n throw new Error(`LinkedIn post failed: ${response.status} ${errorText}`);\r\n }\r\n\r\n const postUrn = response.headers.get(\"x-restli-id\") ?? undefined;\r\n const raw = await safeJson(response);\r\n\r\n return { postUrn, raw };\r\n}\r\n\r\n/**\r\n * Escapes special characters in text for LinkedIn's post commentary field.\r\n * LinkedIn requires certain characters to be backslash-escaped.\r\n * Preserves mentions (@[Name](urn:li:...)) and hashtag templates ({hashtag|#|tag}).\r\n * Converts simple hashtags (#tag) to the template format.\r\n * @see https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares/little-text-format\r\n */\r\nexport function escapeLinkedInText(text: string): string {\r\n // Patterns for LinkedIn elements that should not be escaped\r\n // MentionElement: @[FallbackText](urn:li:...)\r\n const mentionPattern = /@\\[[^\\]]*\\]\\(urn:li:[^)]+\\)/g;\r\n // HashtagTemplate: {hashtag|#|text} or {hashtag|#|text} (with optional escaped #)\r\n const hashtagTemplatePattern = /\\{hashtag\\|\\\\?[##]\\|[^}]+\\}/g;\r\n // Simple hashtag: #word (must start with a letter, not digit-only)\r\n const simpleHashtagPattern =\r\n /#([a-zA-Z\\u00C0-\\u024F\\u1E00-\\u1EFF][\\w\\u00C0-\\u024F\\u1E00-\\u1EFF]*)/g;\r\n\r\n // Store matches in array, use index-based placeholders with null character delimiters\r\n const preserved: string[] = [];\r\n\r\n const createPlaceholder = (content: string): string => {\r\n const index = preserved.length;\r\n preserved.push(content);\r\n return `\\x00${index}\\x00`;\r\n };\r\n\r\n // Replace mentions with placeholders (preserve as-is)\r\n let result = text.replace(mentionPattern, (match) => createPlaceholder(match));\r\n\r\n // Replace hashtag templates with placeholders (preserve as-is)\r\n result = result.replace(hashtagTemplatePattern, (match) => createPlaceholder(match));\r\n\r\n // Convert simple hashtags to template format with escaped #\r\n result = result.replace(simpleHashtagPattern, (_match, tag: string) =>\r\n createPlaceholder(`{hashtag|\\\\#|${tag}}`)\r\n );\r\n\r\n // Escape remaining special characters (order matters: backslash first)\r\n result = result\r\n .replace(/\\\\/g, \"\\\\\\\\\")\r\n .replace(/\\|/g, \"\\\\|\")\r\n .replace(/\\{/g, \"\\\\{\")\r\n .replace(/\\}/g, \"\\\\}\")\r\n .replace(/@/g, \"\\\\@\")\r\n .replace(/\\[/g, \"\\\\[\")\r\n .replace(/\\]/g, \"\\\\]\")\r\n .replace(/\\(/g, \"\\\\(\")\r\n .replace(/\\)/g, \"\\\\)\")\r\n .replace(/</g, \"\\\\<\")\r\n .replace(/>/g, \"\\\\>\")\r\n .replace(/#/g, \"\\\\#\")\r\n .replace(/\\*/g, \"\\\\*\")\r\n .replace(/_/g, \"\\\\_\")\r\n .replace(/~/g, \"\\\\~\");\r\n\r\n // Restore placeholders with preserved/transformed content\r\n // biome-ignore lint/suspicious/noControlCharactersInRegex: null chars are intentional placeholders\r\n result = result.replace(/\\x00(\\d+)\\x00/g, (_match, index: string) => preserved[Number(index)]);\r\n\r\n return result;\r\n}\r\n\r\nfunction buildPostBody(params: {\r\n personUrn: string;\r\n payload: SocialPostPayload;\r\n uploadedAssets: UploadedAsset[];\r\n}): Record<string, unknown> {\r\n const { personUrn, payload, uploadedAssets } = params;\r\n\r\n const basePost = {\r\n author: personUrn,\r\n commentary: escapeLinkedInText(payload.text),\r\n visibility: payload.visibility,\r\n distribution: {\r\n feedDistribution: \"MAIN_FEED\",\r\n targetEntities: [],\r\n thirdPartyDistributionChannels: [],\r\n },\r\n lifecycleState: \"PUBLISHED\",\r\n isReshareDisabledByAuthor: false,\r\n };\r\n\r\n if (uploadedAssets.length === 0) {\r\n return basePost;\r\n }\r\n\r\n if (uploadedAssets.length > 1) {\r\n throw new Error(\"LinkedIn Posts API currently supports only a single media asset per post\");\r\n }\r\n\r\n const asset = uploadedAssets[0];\r\n\r\n const mediaContent: Record<string, unknown> = {\r\n id: asset.assetUrn,\r\n };\r\n\r\n if (asset.title) {\r\n mediaContent.title = asset.title;\r\n }\r\n\r\n if (asset.description && asset.mediaType === \"image\") {\r\n mediaContent.altText = asset.description;\r\n }\r\n\r\n return {\r\n ...basePost,\r\n content: {\r\n media: mediaContent,\r\n },\r\n };\r\n}\r\n\r\nasync function safeJson(response: globalThis.Response): Promise<unknown> {\r\n try {\r\n return await response.json();\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ServerResultAsync } from "../base/base.dto.mjs";
|
|
2
|
+
import { RequiredServiceActor } from "../base/base.actor.mjs";
|
|
3
|
+
import { BaseService } from "../base/base.service.mjs";
|
|
4
|
+
import { ConnectRepository } from "../connect/connect.repository.mjs";
|
|
5
|
+
import { ConnectService } from "../connect/connect.service.mjs";
|
|
6
|
+
import { FileService } from "../file/file.service.mjs";
|
|
7
|
+
import { SocialPostInput } from "./social.dto.mjs";
|
|
8
|
+
import { SocialPostResult, SocialProvider } from "./social.types.mjs";
|
|
9
|
+
|
|
10
|
+
//#region src/modules/social/social.service.d.ts
|
|
11
|
+
declare class SocialService extends BaseService<{
|
|
12
|
+
connect: ConnectRepository;
|
|
13
|
+
}, {
|
|
14
|
+
connect: ConnectService;
|
|
15
|
+
file: FileService;
|
|
16
|
+
}> {
|
|
17
|
+
private providers;
|
|
18
|
+
constructor(repositories: {
|
|
19
|
+
connect: ConnectRepository;
|
|
20
|
+
}, services: {
|
|
21
|
+
connect: ConnectService;
|
|
22
|
+
file: FileService;
|
|
23
|
+
}, providers: SocialProvider[]);
|
|
24
|
+
getProvider(id: string): SocialProvider | null;
|
|
25
|
+
postToProvider(providerId: string, input: SocialPostInput, {
|
|
26
|
+
actor
|
|
27
|
+
}: {
|
|
28
|
+
actor: RequiredServiceActor<"user">;
|
|
29
|
+
}): ServerResultAsync<SocialPostResult>;
|
|
30
|
+
private ensureFreshConnection;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { SocialService };
|
|
34
|
+
//# sourceMappingURL=social.service.d.mts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { BaseService } from "../base/base.service.mjs";
|
|
2
|
+
import { ok } from "neverthrow";
|
|
3
|
+
//#region src/modules/social/social.service.ts
|
|
4
|
+
var SocialService = class extends BaseService {
|
|
5
|
+
providers = /* @__PURE__ */ new Map();
|
|
6
|
+
constructor(repositories, services, providers) {
|
|
7
|
+
super(repositories, services);
|
|
8
|
+
this.providers = new Map(providers.map((provider) => [provider.id, provider]));
|
|
9
|
+
}
|
|
10
|
+
getProvider(id) {
|
|
11
|
+
return this.providers.get(id) ?? null;
|
|
12
|
+
}
|
|
13
|
+
async postToProvider(providerId, input, { actor }) {
|
|
14
|
+
return this.throwableAsync(async () => {
|
|
15
|
+
const provider = this.getProvider(providerId);
|
|
16
|
+
if (!provider) return this.error("BAD_REQUEST", `Unknown provider: ${providerId}`);
|
|
17
|
+
const connectionResult = await this.repository.connect.list({
|
|
18
|
+
userId: actor.userId,
|
|
19
|
+
providers: [providerId]
|
|
20
|
+
});
|
|
21
|
+
if (connectionResult.isErr()) return this.error("INTERNAL_SERVER_ERROR", "Failed to load connection", { cause: connectionResult.error });
|
|
22
|
+
const activeConnection = connectionResult.value.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime())[0];
|
|
23
|
+
const connection = await this.ensureFreshConnection(activeConnection);
|
|
24
|
+
if (connection.isErr()) return this.error("INTERNAL_SERVER_ERROR", "Failed to refresh connection", { cause: connection.error });
|
|
25
|
+
const payload = {
|
|
26
|
+
text: input.text,
|
|
27
|
+
media: input.media,
|
|
28
|
+
visibility: input.visibility ?? "PUBLIC"
|
|
29
|
+
};
|
|
30
|
+
const accessToken = connection.value.accessToken;
|
|
31
|
+
if (!accessToken) return this.error("BAD_REQUEST", "Missing access token for connection");
|
|
32
|
+
return ok(await provider.post({
|
|
33
|
+
deps: { fileService: this.service.file },
|
|
34
|
+
context: {
|
|
35
|
+
userId: actor.userId,
|
|
36
|
+
connection: connection.value,
|
|
37
|
+
accessToken
|
|
38
|
+
},
|
|
39
|
+
payload
|
|
40
|
+
}));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async ensureFreshConnection(connection) {
|
|
44
|
+
if (!connection.expiresAt || !connection.refreshToken) return ok(connection);
|
|
45
|
+
const expiresAt = new Date(connection.expiresAt);
|
|
46
|
+
if (Date.now() < expiresAt.getTime() - 60 * 1e3) return ok(connection);
|
|
47
|
+
const refreshed = await this.service.connect.refreshToken(connection.id);
|
|
48
|
+
if (refreshed.isErr()) return this.error("INTERNAL_SERVER_ERROR", "Failed to refresh access token", { cause: refreshed.error });
|
|
49
|
+
return ok(refreshed.value);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
//#endregion
|
|
53
|
+
export { SocialService };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=social.service.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.service.mjs","names":[],"sources":["../../../../src/modules/social/social.service.ts"],"sourcesContent":["import { ok } from \"neverthrow\";\r\nimport type { RequiredServiceActor } from \"../base/base.actor\";\r\nimport type { ServerResultAsync } from \"../base/base.dto\";\r\nimport { BaseService } from \"../base/base.service\";\r\nimport type { ConnectRepository, ConnectRow } from \"../connect/connect.repository\";\r\nimport type { ConnectService } from \"../connect/connect.service\";\r\nimport type { FileService } from \"../file/file.service\";\r\nimport type { SocialPostInput } from \"./social.dto\";\r\nimport type { SocialPostPayload, SocialPostResult, SocialProvider } from \"./social.types\";\r\n\r\nexport class SocialService extends BaseService<\r\n {\r\n connect: ConnectRepository;\r\n },\r\n {\r\n connect: ConnectService;\r\n file: FileService;\r\n }\r\n> {\r\n private providers = new Map<string, SocialProvider>();\r\n\r\n constructor(\r\n repositories: { connect: ConnectRepository },\r\n services: { connect: ConnectService; file: FileService },\r\n providers: SocialProvider[]\r\n ) {\r\n super(repositories, services);\r\n this.providers = new Map(providers.map((provider) => [provider.id, provider]));\r\n }\r\n\r\n getProvider(id: string): SocialProvider | null {\r\n return this.providers.get(id) ?? null;\r\n }\r\n\r\n async postToProvider(\r\n providerId: string,\r\n input: SocialPostInput,\r\n { actor }: { actor: RequiredServiceActor<\"user\"> }\r\n ): ServerResultAsync<SocialPostResult> {\r\n return this.throwableAsync(async () => {\r\n const provider = this.getProvider(providerId);\r\n if (!provider) {\r\n return this.error(\"BAD_REQUEST\", `Unknown provider: ${providerId}`);\r\n }\r\n\r\n const connectionResult = await this.repository.connect.list({\r\n userId: actor.userId,\r\n providers: [providerId],\r\n });\r\n\r\n if (connectionResult.isErr()) {\r\n return this.error(\"INTERNAL_SERVER_ERROR\", \"Failed to load connection\", {\r\n cause: connectionResult.error,\r\n });\r\n }\r\n\r\n const activeConnection = connectionResult.value.sort(\r\n (a, b) => a.createdAt.getTime() - b.createdAt.getTime()\r\n )[0];\r\n\r\n const connection = await this.ensureFreshConnection(activeConnection);\r\n if (connection.isErr()) {\r\n return this.error(\"INTERNAL_SERVER_ERROR\", \"Failed to refresh connection\", {\r\n cause: connection.error,\r\n });\r\n }\r\n\r\n const payload: SocialPostPayload = {\r\n text: input.text,\r\n media: input.media,\r\n visibility: input.visibility ?? \"PUBLIC\",\r\n };\r\n\r\n const accessToken = connection.value.accessToken;\r\n if (!accessToken) {\r\n return this.error(\"BAD_REQUEST\", \"Missing access token for connection\");\r\n }\r\n\r\n const result = await provider.post({\r\n deps: { fileService: this.service.file },\r\n context: {\r\n userId: actor.userId,\r\n connection: connection.value,\r\n accessToken,\r\n },\r\n payload,\r\n });\r\n\r\n return ok(result);\r\n });\r\n }\r\n\r\n private async ensureFreshConnection(connection: ConnectRow): ServerResultAsync<ConnectRow> {\r\n if (!connection.expiresAt || !connection.refreshToken) {\r\n return ok(connection);\r\n }\r\n\r\n const expiresAt = new Date(connection.expiresAt);\r\n const bufferMs = 60 * 1000; // Refresh 1 minute before expiry\r\n if (Date.now() < expiresAt.getTime() - bufferMs) {\r\n return ok(connection);\r\n }\r\n\r\n const refreshed = await this.service.connect.refreshToken(connection.id);\r\n if (refreshed.isErr()) {\r\n return this.error(\"INTERNAL_SERVER_ERROR\", \"Failed to refresh access token\", {\r\n cause: refreshed.error,\r\n });\r\n }\r\n\r\n return ok(refreshed.value);\r\n }\r\n}\r\n"],"mappings":";;;AAUA,IAAa,gBAAb,cAAmC,YAQjC;CACA,4BAAoB,IAAI,KAA6B;CAErD,YACE,cACA,UACA,WACA;AACA,QAAM,cAAc,SAAS;AAC7B,OAAK,YAAY,IAAI,IAAI,UAAU,KAAK,aAAa,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;;CAGhF,YAAY,IAAmC;AAC7C,SAAO,KAAK,UAAU,IAAI,GAAG,IAAI;;CAGnC,MAAM,eACJ,YACA,OACA,EAAE,SACmC;AACrC,SAAO,KAAK,eAAe,YAAY;GACrC,MAAM,WAAW,KAAK,YAAY,WAAW;AAC7C,OAAI,CAAC,SACH,QAAO,KAAK,MAAM,eAAe,qBAAqB,aAAa;GAGrE,MAAM,mBAAmB,MAAM,KAAK,WAAW,QAAQ,KAAK;IAC1D,QAAQ,MAAM;IACd,WAAW,CAAC,WAAW;IACxB,CAAC;AAEF,OAAI,iBAAiB,OAAO,CAC1B,QAAO,KAAK,MAAM,yBAAyB,6BAA6B,EACtE,OAAO,iBAAiB,OACzB,CAAC;GAGJ,MAAM,mBAAmB,iBAAiB,MAAM,MAC7C,GAAG,MAAM,EAAE,UAAU,SAAS,GAAG,EAAE,UAAU,SAAS,CACxD,CAAC;GAEF,MAAM,aAAa,MAAM,KAAK,sBAAsB,iBAAiB;AACrE,OAAI,WAAW,OAAO,CACpB,QAAO,KAAK,MAAM,yBAAyB,gCAAgC,EACzE,OAAO,WAAW,OACnB,CAAC;GAGJ,MAAM,UAA6B;IACjC,MAAM,MAAM;IACZ,OAAO,MAAM;IACb,YAAY,MAAM,cAAc;IACjC;GAED,MAAM,cAAc,WAAW,MAAM;AACrC,OAAI,CAAC,YACH,QAAO,KAAK,MAAM,eAAe,sCAAsC;AAazE,UAAO,GAVQ,MAAM,SAAS,KAAK;IACjC,MAAM,EAAE,aAAa,KAAK,QAAQ,MAAM;IACxC,SAAS;KACP,QAAQ,MAAM;KACd,YAAY,WAAW;KACvB;KACD;IACD;IACD,CAAC,CAEe;IACjB;;CAGJ,MAAc,sBAAsB,YAAuD;AACzF,MAAI,CAAC,WAAW,aAAa,CAAC,WAAW,aACvC,QAAO,GAAG,WAAW;EAGvB,MAAM,YAAY,IAAI,KAAK,WAAW,UAAU;AAEhD,MAAI,KAAK,KAAK,GAAG,UAAU,SAAS,GADnB,KAAK,IAEpB,QAAO,GAAG,WAAW;EAGvB,MAAM,YAAY,MAAM,KAAK,QAAQ,QAAQ,aAAa,WAAW,GAAG;AACxE,MAAI,UAAU,OAAO,CACnB,QAAO,KAAK,MAAM,yBAAyB,kCAAkC,EAC3E,OAAO,UAAU,OAClB,CAAC;AAGJ,SAAO,GAAG,UAAU,MAAM"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ConnectRow } from "../connect/connect.repository.mjs";
|
|
2
|
+
import { FileService } from "../file/file.service.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/modules/social/social.types.d.ts
|
|
5
|
+
type SocialMediaType = "image" | "video" | "document";
|
|
6
|
+
interface SocialMediaDescriptor {
|
|
7
|
+
readonly s3Path: string;
|
|
8
|
+
readonly mediaType?: SocialMediaType;
|
|
9
|
+
readonly title?: string;
|
|
10
|
+
readonly description?: string;
|
|
11
|
+
}
|
|
12
|
+
type SocialVisibility = "PUBLIC" | "CONNECTIONS";
|
|
13
|
+
interface SocialPostPayload {
|
|
14
|
+
readonly text: string;
|
|
15
|
+
readonly media?: readonly SocialMediaDescriptor[];
|
|
16
|
+
readonly visibility: SocialVisibility;
|
|
17
|
+
}
|
|
18
|
+
interface SocialProviderContext {
|
|
19
|
+
readonly userId: string;
|
|
20
|
+
readonly connection: ConnectRow;
|
|
21
|
+
readonly accessToken: string;
|
|
22
|
+
}
|
|
23
|
+
interface SocialProviderDeps {
|
|
24
|
+
readonly fileService: FileService;
|
|
25
|
+
}
|
|
26
|
+
interface SocialPostResult {
|
|
27
|
+
readonly shareUrn?: string;
|
|
28
|
+
readonly rawResponse?: unknown;
|
|
29
|
+
}
|
|
30
|
+
interface SocialProvider {
|
|
31
|
+
readonly id: string;
|
|
32
|
+
post(options: {
|
|
33
|
+
deps: SocialProviderDeps;
|
|
34
|
+
context: SocialProviderContext;
|
|
35
|
+
payload: SocialPostPayload;
|
|
36
|
+
}): Promise<SocialPostResult>;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { SocialMediaDescriptor, SocialMediaType, SocialPostPayload, SocialPostResult, SocialProvider, SocialProviderContext, SocialProviderDeps, SocialVisibility };
|
|
40
|
+
//# sourceMappingURL=social.types.d.mts.map
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import * as _$drizzle_orm_sqlite_core0 from "drizzle-orm/sqlite-core";
|
|
2
|
+
|
|
3
|
+
//#region src/modules/tag/tag.db.d.ts
|
|
4
|
+
declare const tags: _$drizzle_orm_sqlite_core0.SQLiteTableWithColumns<{
|
|
5
|
+
name: "tags";
|
|
6
|
+
schema: undefined;
|
|
7
|
+
columns: {
|
|
8
|
+
id: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
9
|
+
name: "id";
|
|
10
|
+
tableName: "tags";
|
|
11
|
+
dataType: "string";
|
|
12
|
+
columnType: "SQLiteText";
|
|
13
|
+
data: string;
|
|
14
|
+
driverParam: string;
|
|
15
|
+
notNull: true;
|
|
16
|
+
hasDefault: true;
|
|
17
|
+
isPrimaryKey: true;
|
|
18
|
+
isAutoincrement: false;
|
|
19
|
+
hasRuntimeDefault: true;
|
|
20
|
+
enumValues: [string, ...string[]];
|
|
21
|
+
baseColumn: never;
|
|
22
|
+
identity: undefined;
|
|
23
|
+
generated: undefined;
|
|
24
|
+
}, {}, {
|
|
25
|
+
length: number | undefined;
|
|
26
|
+
}>;
|
|
27
|
+
createdAt: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
28
|
+
name: "created_at";
|
|
29
|
+
tableName: "tags";
|
|
30
|
+
dataType: "date";
|
|
31
|
+
columnType: "SQLiteTimestamp";
|
|
32
|
+
data: Date;
|
|
33
|
+
driverParam: number;
|
|
34
|
+
notNull: true;
|
|
35
|
+
hasDefault: true;
|
|
36
|
+
isPrimaryKey: false;
|
|
37
|
+
isAutoincrement: false;
|
|
38
|
+
hasRuntimeDefault: true;
|
|
39
|
+
enumValues: undefined;
|
|
40
|
+
baseColumn: never;
|
|
41
|
+
identity: undefined;
|
|
42
|
+
generated: undefined;
|
|
43
|
+
}, {}, {}>;
|
|
44
|
+
updatedAt: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
45
|
+
name: "updated_at";
|
|
46
|
+
tableName: "tags";
|
|
47
|
+
dataType: "date";
|
|
48
|
+
columnType: "SQLiteTimestamp";
|
|
49
|
+
data: Date;
|
|
50
|
+
driverParam: number;
|
|
51
|
+
notNull: false;
|
|
52
|
+
hasDefault: false;
|
|
53
|
+
isPrimaryKey: false;
|
|
54
|
+
isAutoincrement: false;
|
|
55
|
+
hasRuntimeDefault: false;
|
|
56
|
+
enumValues: undefined;
|
|
57
|
+
baseColumn: never;
|
|
58
|
+
identity: undefined;
|
|
59
|
+
generated: undefined;
|
|
60
|
+
}, {}, {}>;
|
|
61
|
+
deletedAt: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
62
|
+
name: "deleted_at";
|
|
63
|
+
tableName: "tags";
|
|
64
|
+
dataType: "date";
|
|
65
|
+
columnType: "SQLiteTimestamp";
|
|
66
|
+
data: Date;
|
|
67
|
+
driverParam: number;
|
|
68
|
+
notNull: false;
|
|
69
|
+
hasDefault: false;
|
|
70
|
+
isPrimaryKey: false;
|
|
71
|
+
isAutoincrement: false;
|
|
72
|
+
hasRuntimeDefault: false;
|
|
73
|
+
enumValues: undefined;
|
|
74
|
+
baseColumn: never;
|
|
75
|
+
identity: undefined;
|
|
76
|
+
generated: undefined;
|
|
77
|
+
}, {}, {}>;
|
|
78
|
+
userId: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
79
|
+
name: "user_id";
|
|
80
|
+
tableName: "tags";
|
|
81
|
+
dataType: "string";
|
|
82
|
+
columnType: "SQLiteText";
|
|
83
|
+
data: string;
|
|
84
|
+
driverParam: string;
|
|
85
|
+
notNull: true;
|
|
86
|
+
hasDefault: false;
|
|
87
|
+
isPrimaryKey: false;
|
|
88
|
+
isAutoincrement: false;
|
|
89
|
+
hasRuntimeDefault: false;
|
|
90
|
+
enumValues: [string, ...string[]];
|
|
91
|
+
baseColumn: never;
|
|
92
|
+
identity: undefined;
|
|
93
|
+
generated: undefined;
|
|
94
|
+
}, {}, {
|
|
95
|
+
length: number | undefined;
|
|
96
|
+
}>;
|
|
97
|
+
organizationId: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
98
|
+
name: "organization_id";
|
|
99
|
+
tableName: "tags";
|
|
100
|
+
dataType: "string";
|
|
101
|
+
columnType: "SQLiteText";
|
|
102
|
+
data: string;
|
|
103
|
+
driverParam: string;
|
|
104
|
+
notNull: false;
|
|
105
|
+
hasDefault: false;
|
|
106
|
+
isPrimaryKey: false;
|
|
107
|
+
isAutoincrement: false;
|
|
108
|
+
hasRuntimeDefault: false;
|
|
109
|
+
enumValues: [string, ...string[]];
|
|
110
|
+
baseColumn: never;
|
|
111
|
+
identity: undefined;
|
|
112
|
+
generated: undefined;
|
|
113
|
+
}, {}, {
|
|
114
|
+
length: number | undefined;
|
|
115
|
+
}>;
|
|
116
|
+
teamId: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
117
|
+
name: "team_id";
|
|
118
|
+
tableName: "tags";
|
|
119
|
+
dataType: "string";
|
|
120
|
+
columnType: "SQLiteText";
|
|
121
|
+
data: string;
|
|
122
|
+
driverParam: string;
|
|
123
|
+
notNull: false;
|
|
124
|
+
hasDefault: false;
|
|
125
|
+
isPrimaryKey: false;
|
|
126
|
+
isAutoincrement: false;
|
|
127
|
+
hasRuntimeDefault: false;
|
|
128
|
+
enumValues: [string, ...string[]];
|
|
129
|
+
baseColumn: never;
|
|
130
|
+
identity: undefined;
|
|
131
|
+
generated: undefined;
|
|
132
|
+
}, {}, {
|
|
133
|
+
length: number | undefined;
|
|
134
|
+
}>;
|
|
135
|
+
name: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
136
|
+
name: "name";
|
|
137
|
+
tableName: "tags";
|
|
138
|
+
dataType: "string";
|
|
139
|
+
columnType: "SQLiteText";
|
|
140
|
+
data: string;
|
|
141
|
+
driverParam: string;
|
|
142
|
+
notNull: true;
|
|
143
|
+
hasDefault: false;
|
|
144
|
+
isPrimaryKey: false;
|
|
145
|
+
isAutoincrement: false;
|
|
146
|
+
hasRuntimeDefault: false;
|
|
147
|
+
enumValues: [string, ...string[]];
|
|
148
|
+
baseColumn: never;
|
|
149
|
+
identity: undefined;
|
|
150
|
+
generated: undefined;
|
|
151
|
+
}, {}, {
|
|
152
|
+
length: number | undefined;
|
|
153
|
+
}>;
|
|
154
|
+
color: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
155
|
+
name: "color";
|
|
156
|
+
tableName: "tags";
|
|
157
|
+
dataType: "string";
|
|
158
|
+
columnType: "SQLiteText";
|
|
159
|
+
data: string;
|
|
160
|
+
driverParam: string;
|
|
161
|
+
notNull: false;
|
|
162
|
+
hasDefault: false;
|
|
163
|
+
isPrimaryKey: false;
|
|
164
|
+
isAutoincrement: false;
|
|
165
|
+
hasRuntimeDefault: false;
|
|
166
|
+
enumValues: [string, ...string[]];
|
|
167
|
+
baseColumn: never;
|
|
168
|
+
identity: undefined;
|
|
169
|
+
generated: undefined;
|
|
170
|
+
}, {}, {
|
|
171
|
+
length: number | undefined;
|
|
172
|
+
}>;
|
|
173
|
+
type: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
174
|
+
name: "type";
|
|
175
|
+
tableName: "tags";
|
|
176
|
+
dataType: "string";
|
|
177
|
+
columnType: "SQLiteText";
|
|
178
|
+
data: string;
|
|
179
|
+
driverParam: string;
|
|
180
|
+
notNull: false;
|
|
181
|
+
hasDefault: false;
|
|
182
|
+
isPrimaryKey: false;
|
|
183
|
+
isAutoincrement: false;
|
|
184
|
+
hasRuntimeDefault: false;
|
|
185
|
+
enumValues: [string, ...string[]];
|
|
186
|
+
baseColumn: never;
|
|
187
|
+
identity: undefined;
|
|
188
|
+
generated: undefined;
|
|
189
|
+
}, {}, {
|
|
190
|
+
length: number | undefined;
|
|
191
|
+
}>;
|
|
192
|
+
isEnabled: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
193
|
+
name: "is_enabled";
|
|
194
|
+
tableName: "tags";
|
|
195
|
+
dataType: "boolean";
|
|
196
|
+
columnType: "SQLiteBoolean";
|
|
197
|
+
data: boolean;
|
|
198
|
+
driverParam: number;
|
|
199
|
+
notNull: true;
|
|
200
|
+
hasDefault: true;
|
|
201
|
+
isPrimaryKey: false;
|
|
202
|
+
isAutoincrement: false;
|
|
203
|
+
hasRuntimeDefault: false;
|
|
204
|
+
enumValues: undefined;
|
|
205
|
+
baseColumn: never;
|
|
206
|
+
identity: undefined;
|
|
207
|
+
generated: undefined;
|
|
208
|
+
}, {}, {}>;
|
|
209
|
+
parentId: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
210
|
+
name: "parent_id";
|
|
211
|
+
tableName: "tags";
|
|
212
|
+
dataType: "string";
|
|
213
|
+
columnType: "SQLiteText";
|
|
214
|
+
data: string;
|
|
215
|
+
driverParam: string;
|
|
216
|
+
notNull: false;
|
|
217
|
+
hasDefault: false;
|
|
218
|
+
isPrimaryKey: false;
|
|
219
|
+
isAutoincrement: false;
|
|
220
|
+
hasRuntimeDefault: false;
|
|
221
|
+
enumValues: [string, ...string[]];
|
|
222
|
+
baseColumn: never;
|
|
223
|
+
identity: undefined;
|
|
224
|
+
generated: undefined;
|
|
225
|
+
}, {}, {
|
|
226
|
+
length: number | undefined;
|
|
227
|
+
}>;
|
|
228
|
+
assignableTo: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
229
|
+
name: "assignable_to";
|
|
230
|
+
tableName: "tags";
|
|
231
|
+
dataType: "json";
|
|
232
|
+
columnType: "SQLiteTextJson";
|
|
233
|
+
data: string[];
|
|
234
|
+
driverParam: string;
|
|
235
|
+
notNull: true;
|
|
236
|
+
hasDefault: false;
|
|
237
|
+
isPrimaryKey: false;
|
|
238
|
+
isAutoincrement: false;
|
|
239
|
+
hasRuntimeDefault: false;
|
|
240
|
+
enumValues: undefined;
|
|
241
|
+
baseColumn: never;
|
|
242
|
+
identity: undefined;
|
|
243
|
+
generated: undefined;
|
|
244
|
+
}, {}, {
|
|
245
|
+
$type: string[];
|
|
246
|
+
}>;
|
|
247
|
+
};
|
|
248
|
+
dialect: "sqlite";
|
|
249
|
+
}>;
|
|
250
|
+
declare const taggings: _$drizzle_orm_sqlite_core0.SQLiteTableWithColumns<{
|
|
251
|
+
name: "taggings";
|
|
252
|
+
schema: undefined;
|
|
253
|
+
columns: {
|
|
254
|
+
id: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
255
|
+
name: "id";
|
|
256
|
+
tableName: "taggings";
|
|
257
|
+
dataType: "string";
|
|
258
|
+
columnType: "SQLiteText";
|
|
259
|
+
data: string;
|
|
260
|
+
driverParam: string;
|
|
261
|
+
notNull: true;
|
|
262
|
+
hasDefault: true;
|
|
263
|
+
isPrimaryKey: true;
|
|
264
|
+
isAutoincrement: false;
|
|
265
|
+
hasRuntimeDefault: true;
|
|
266
|
+
enumValues: [string, ...string[]];
|
|
267
|
+
baseColumn: never;
|
|
268
|
+
identity: undefined;
|
|
269
|
+
generated: undefined;
|
|
270
|
+
}, {}, {
|
|
271
|
+
length: number | undefined;
|
|
272
|
+
}>;
|
|
273
|
+
createdAt: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
274
|
+
name: "created_at";
|
|
275
|
+
tableName: "taggings";
|
|
276
|
+
dataType: "date";
|
|
277
|
+
columnType: "SQLiteTimestamp";
|
|
278
|
+
data: Date;
|
|
279
|
+
driverParam: number;
|
|
280
|
+
notNull: true;
|
|
281
|
+
hasDefault: true;
|
|
282
|
+
isPrimaryKey: false;
|
|
283
|
+
isAutoincrement: false;
|
|
284
|
+
hasRuntimeDefault: true;
|
|
285
|
+
enumValues: undefined;
|
|
286
|
+
baseColumn: never;
|
|
287
|
+
identity: undefined;
|
|
288
|
+
generated: undefined;
|
|
289
|
+
}, {}, {}>;
|
|
290
|
+
tagId: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
291
|
+
name: "tag_id";
|
|
292
|
+
tableName: "taggings";
|
|
293
|
+
dataType: "string";
|
|
294
|
+
columnType: "SQLiteText";
|
|
295
|
+
data: string;
|
|
296
|
+
driverParam: string;
|
|
297
|
+
notNull: true;
|
|
298
|
+
hasDefault: false;
|
|
299
|
+
isPrimaryKey: false;
|
|
300
|
+
isAutoincrement: false;
|
|
301
|
+
hasRuntimeDefault: false;
|
|
302
|
+
enumValues: [string, ...string[]];
|
|
303
|
+
baseColumn: never;
|
|
304
|
+
identity: undefined;
|
|
305
|
+
generated: undefined;
|
|
306
|
+
}, {}, {
|
|
307
|
+
length: number | undefined;
|
|
308
|
+
}>;
|
|
309
|
+
resourceType: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
310
|
+
name: "resource_type";
|
|
311
|
+
tableName: "taggings";
|
|
312
|
+
dataType: "string";
|
|
313
|
+
columnType: "SQLiteText";
|
|
314
|
+
data: string;
|
|
315
|
+
driverParam: string;
|
|
316
|
+
notNull: true;
|
|
317
|
+
hasDefault: false;
|
|
318
|
+
isPrimaryKey: false;
|
|
319
|
+
isAutoincrement: false;
|
|
320
|
+
hasRuntimeDefault: false;
|
|
321
|
+
enumValues: [string, ...string[]];
|
|
322
|
+
baseColumn: never;
|
|
323
|
+
identity: undefined;
|
|
324
|
+
generated: undefined;
|
|
325
|
+
}, {}, {
|
|
326
|
+
length: number | undefined;
|
|
327
|
+
}>;
|
|
328
|
+
resourceId: _$drizzle_orm_sqlite_core0.SQLiteColumn<{
|
|
329
|
+
name: "resource_id";
|
|
330
|
+
tableName: "taggings";
|
|
331
|
+
dataType: "string";
|
|
332
|
+
columnType: "SQLiteText";
|
|
333
|
+
data: string;
|
|
334
|
+
driverParam: string;
|
|
335
|
+
notNull: true;
|
|
336
|
+
hasDefault: false;
|
|
337
|
+
isPrimaryKey: false;
|
|
338
|
+
isAutoincrement: false;
|
|
339
|
+
hasRuntimeDefault: false;
|
|
340
|
+
enumValues: [string, ...string[]];
|
|
341
|
+
baseColumn: never;
|
|
342
|
+
identity: undefined;
|
|
343
|
+
generated: undefined;
|
|
344
|
+
}, {}, {
|
|
345
|
+
length: number | undefined;
|
|
346
|
+
}>;
|
|
347
|
+
};
|
|
348
|
+
dialect: "sqlite";
|
|
349
|
+
}>;
|
|
350
|
+
//#endregion
|
|
351
|
+
export { taggings, tags };
|
|
352
|
+
//# sourceMappingURL=tag.db.d.mts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __exportAll } from "../../../_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { organizations, teams, users } from "../auth/auth.db.mjs";
|
|
3
|
+
import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
|
|
4
|
+
import { v4 } from "uuid";
|
|
5
|
+
//#region src/modules/tag/tag.db.ts
|
|
6
|
+
var tag_db_exports = /* @__PURE__ */ __exportAll({
|
|
7
|
+
taggings: () => taggings,
|
|
8
|
+
tags: () => tags
|
|
9
|
+
});
|
|
10
|
+
const tags = sqliteTable("tags", {
|
|
11
|
+
id: text("id").primaryKey().$default(v4),
|
|
12
|
+
createdAt: integer("created_at", { mode: "timestamp" }).notNull().$default(() => /* @__PURE__ */ new Date()),
|
|
13
|
+
updatedAt: integer("updated_at", { mode: "timestamp" }),
|
|
14
|
+
deletedAt: integer("deleted_at", { mode: "timestamp" }),
|
|
15
|
+
userId: text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
|
|
16
|
+
organizationId: text("organization_id").references(() => organizations.id, { onDelete: "cascade" }),
|
|
17
|
+
teamId: text("team_id").references(() => teams.id, { onDelete: "cascade" }),
|
|
18
|
+
name: text("name").notNull(),
|
|
19
|
+
color: text("color"),
|
|
20
|
+
type: text("type"),
|
|
21
|
+
isEnabled: integer("is_enabled", { mode: "boolean" }).notNull().default(true),
|
|
22
|
+
parentId: text("parent_id").references(() => tags.id, { onDelete: "set null" }),
|
|
23
|
+
assignableTo: text("assignable_to", { mode: "json" }).notNull().$type()
|
|
24
|
+
});
|
|
25
|
+
const taggings = sqliteTable("taggings", {
|
|
26
|
+
id: text("id").primaryKey().$default(v4),
|
|
27
|
+
createdAt: integer("created_at", { mode: "timestamp" }).notNull().$default(() => /* @__PURE__ */ new Date()),
|
|
28
|
+
tagId: text("tag_id").notNull().references(() => tags.id, { onDelete: "cascade" }),
|
|
29
|
+
resourceType: text("resource_type").notNull(),
|
|
30
|
+
resourceId: text("resource_id").notNull()
|
|
31
|
+
});
|
|
32
|
+
//#endregion
|
|
33
|
+
export { tag_db_exports, taggings, tags };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=tag.db.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.db.mjs","names":["uuidv4"],"sources":["../../../../src/modules/tag/tag.db.ts"],"sourcesContent":["import { type AnySQLiteColumn, integer, sqliteTable, text } from \"drizzle-orm/sqlite-core\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport { organizations, teams, users } from \"../auth/auth.db\";\r\n\r\nexport const tags = sqliteTable(\"tags\", {\r\n id: text(\"id\").primaryKey().$default(uuidv4),\r\n createdAt: integer(\"created_at\", { mode: \"timestamp\" })\r\n .notNull()\r\n .$default(() => new Date()),\r\n updatedAt: integer(\"updated_at\", { mode: \"timestamp\" }),\r\n deletedAt: integer(\"deleted_at\", { mode: \"timestamp\" }),\r\n userId: text(\"user_id\")\r\n .notNull()\r\n .references(() => users.id, { onDelete: \"cascade\" }),\r\n organizationId: text(\"organization_id\").references(() => organizations.id, {\r\n onDelete: \"cascade\",\r\n }),\r\n teamId: text(\"team_id\").references(() => teams.id, { onDelete: \"cascade\" }),\r\n name: text(\"name\").notNull(),\r\n color: text(\"color\"),\r\n type: text(\"type\"),\r\n isEnabled: integer(\"is_enabled\", { mode: \"boolean\" }).notNull().default(true),\r\n parentId: text(\"parent_id\").references((): AnySQLiteColumn => tags.id, { onDelete: \"set null\" }),\r\n assignableTo: text(\"assignable_to\", {\r\n mode: \"json\",\r\n })\r\n .notNull()\r\n .$type<string[]>(),\r\n});\r\n\r\nexport const taggings = sqliteTable(\"taggings\", {\r\n id: text(\"id\").primaryKey().$default(uuidv4),\r\n createdAt: integer(\"created_at\", { mode: \"timestamp\" })\r\n .notNull()\r\n .$default(() => new Date()),\r\n tagId: text(\"tag_id\")\r\n .notNull()\r\n .references(() => tags.id, { onDelete: \"cascade\" }),\r\n resourceType: text(\"resource_type\").notNull(), // e.g., \"post\", \"image\"\r\n resourceId: text(\"resource_id\").notNull(), // id in the resource table\r\n});\r\n"],"mappings":";;;;;;;;;AAIA,MAAa,OAAO,YAAY,QAAQ;CACtC,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC,SAASA,GAAO;CAC5C,WAAW,QAAQ,cAAc,EAAE,MAAM,aAAa,CAAC,CACpD,SAAS,CACT,+BAAe,IAAI,MAAM,CAAC;CAC7B,WAAW,QAAQ,cAAc,EAAE,MAAM,aAAa,CAAC;CACvD,WAAW,QAAQ,cAAc,EAAE,MAAM,aAAa,CAAC;CACvD,QAAQ,KAAK,UAAU,CACpB,SAAS,CACT,iBAAiB,MAAM,IAAI,EAAE,UAAU,WAAW,CAAC;CACtD,gBAAgB,KAAK,kBAAkB,CAAC,iBAAiB,cAAc,IAAI,EACzE,UAAU,WACX,CAAC;CACF,QAAQ,KAAK,UAAU,CAAC,iBAAiB,MAAM,IAAI,EAAE,UAAU,WAAW,CAAC;CAC3E,MAAM,KAAK,OAAO,CAAC,SAAS;CAC5B,OAAO,KAAK,QAAQ;CACpB,MAAM,KAAK,OAAO;CAClB,WAAW,QAAQ,cAAc,EAAE,MAAM,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,KAAK;CAC7E,UAAU,KAAK,YAAY,CAAC,iBAAkC,KAAK,IAAI,EAAE,UAAU,YAAY,CAAC;CAChG,cAAc,KAAK,iBAAiB,EAClC,MAAM,QACP,CAAC,CACC,SAAS,CACT,OAAiB;CACrB,CAAC;AAEF,MAAa,WAAW,YAAY,YAAY;CAC9C,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC,SAASA,GAAO;CAC5C,WAAW,QAAQ,cAAc,EAAE,MAAM,aAAa,CAAC,CACpD,SAAS,CACT,+BAAe,IAAI,MAAM,CAAC;CAC7B,OAAO,KAAK,SAAS,CAClB,SAAS,CACT,iBAAiB,KAAK,IAAI,EAAE,UAAU,WAAW,CAAC;CACrD,cAAc,KAAK,gBAAgB,CAAC,SAAS;CAC7C,YAAY,KAAK,cAAc,CAAC,SAAS;CAC1C,CAAC"}
|