@igstack/app-catalog-backend-core 0.3.1-alpha-20260405015231 → 0.4.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.
Files changed (72) hide show
  1. package/dist/db/syncAppCatalog.d.mts +3 -5
  2. package/dist/db/syncAppCatalog.d.mts.map +1 -1
  3. package/dist/db/syncAppCatalog.mjs +49 -57
  4. package/dist/db/syncAppCatalog.mjs.map +1 -1
  5. package/dist/db/tableSyncMagazine.d.mts +3 -7
  6. package/dist/db/tableSyncMagazine.d.mts.map +1 -1
  7. package/dist/db/tableSyncMagazine.mjs +3 -7
  8. package/dist/db/tableSyncMagazine.mjs.map +1 -1
  9. package/dist/db/tableSyncPrismaAdapter.mjs.map +1 -1
  10. package/dist/generated/prisma/client.mjs.map +1 -1
  11. package/dist/generated/prisma/internal/class.d.mts +5 -17
  12. package/dist/generated/prisma/internal/class.d.mts.map +1 -1
  13. package/dist/generated/prisma/internal/class.mjs +4 -4
  14. package/dist/generated/prisma/internal/class.mjs.map +1 -1
  15. package/dist/generated/prisma/internal/prismaNamespace.d.mts +46 -132
  16. package/dist/generated/prisma/internal/prismaNamespace.d.mts.map +1 -1
  17. package/dist/generated/prisma/models/DbResource.d.mts +2433 -0
  18. package/dist/generated/prisma/models/DbResource.d.mts.map +1 -0
  19. package/dist/generated/prisma/models/SourceReference.d.mts +90 -90
  20. package/dist/generated/prisma/models/SourceReference.d.mts.map +1 -1
  21. package/dist/generated/prisma/models.d.mts +2 -3
  22. package/dist/index.d.mts +3 -4
  23. package/dist/modules/appCatalog/checkLinks.mjs +1 -1
  24. package/dist/modules/appCatalog/checkLinks.mjs.map +1 -1
  25. package/dist/modules/appCatalog/service.mjs +26 -34
  26. package/dist/modules/appCatalog/service.mjs.map +1 -1
  27. package/dist/modules/assets/screenshotRestController.mjs +2 -2
  28. package/dist/modules/assets/screenshotRestController.mjs.map +1 -1
  29. package/dist/modules/assets/syncAssets.mjs +4 -4
  30. package/dist/modules/assets/syncAssets.mjs.map +1 -1
  31. package/dist/modules/lighthouseKeeper/tools.mjs +1 -1
  32. package/dist/modules/lighthouseKeeper/tools.mjs.map +1 -1
  33. package/dist/server/controller.d.mts +2 -2
  34. package/dist/server/controller.mjs.map +1 -1
  35. package/dist/types/common/appCatalogTypes.d.mts +26 -9
  36. package/dist/types/common/appCatalogTypes.d.mts.map +1 -1
  37. package/dist/types/common/approvalMethodTypes.d.mts +5 -1
  38. package/dist/types/common/approvalMethodTypes.d.mts.map +1 -1
  39. package/package.json +3 -3
  40. package/prisma/schema.prisma +53 -62
  41. package/src/db/syncAppCatalog.ts +68 -73
  42. package/src/db/tableSyncMagazine.ts +3 -7
  43. package/src/db/tableSyncPrismaAdapter.ts +1 -1
  44. package/src/generated/prisma/browser.ts +2 -7
  45. package/src/generated/prisma/client.ts +2 -7
  46. package/src/generated/prisma/internal/class.ts +8 -18
  47. package/src/generated/prisma/internal/prismaNamespace.ts +43 -131
  48. package/src/generated/prisma/internal/prismaNamespaceBrowser.ts +7 -20
  49. package/src/generated/prisma/models/DbResource.ts +2701 -0
  50. package/src/generated/prisma/models/SourceReference.ts +89 -89
  51. package/src/generated/prisma/models.ts +1 -2
  52. package/src/index.ts +1 -1
  53. package/src/modules/appCatalog/checkLinks.ts +7 -7
  54. package/src/modules/appCatalog/service.ts +51 -62
  55. package/src/modules/assets/screenshotRestController.ts +2 -2
  56. package/src/modules/assets/screenshotRouter.ts +2 -2
  57. package/src/modules/assets/syncAssets.ts +4 -4
  58. package/src/modules/lighthouseKeeper/tools.ts +1 -1
  59. package/src/prisma-json-types.d.ts +8 -8
  60. package/src/server/controller.ts +2 -2
  61. package/src/types/common/appCatalogTypes.ts +28 -9
  62. package/src/types/common/approvalMethodTypes.ts +6 -0
  63. package/src/types/index.ts +0 -1
  64. package/dist/generated/prisma/models/DbAppForCatalog.d.mts +0 -1778
  65. package/dist/generated/prisma/models/DbAppForCatalog.d.mts.map +0 -1
  66. package/dist/generated/prisma/models/DbSubResource.d.mts +0 -1468
  67. package/dist/generated/prisma/models/DbSubResource.d.mts.map +0 -1
  68. package/dist/types/common/subResourceTypes.d.mts +0 -24
  69. package/dist/types/common/subResourceTypes.d.mts.map +0 -1
  70. package/src/generated/prisma/models/DbAppForCatalog.ts +0 -2014
  71. package/src/generated/prisma/models/DbSubResource.ts +0 -1692
  72. package/src/types/common/subResourceTypes.ts +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"SourceReference.d.mts","names":[],"sources":["../../../../src/generated/prisma/models/SourceReference.ts"],"mappings":"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"}
1
+ {"version":3,"file":"SourceReference.d.mts","names":[],"sources":["../../../../src/generated/prisma/models/SourceReference.ts"],"mappings":"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"}
@@ -6,10 +6,9 @@ import { $DbPersonPayload, AggregateDbPerson, DbPerson$membershipsArgs, DbPerson
6
6
  import { $DbGroupPayload, AggregateDbGroup, DbGroup$membershipsArgs, DbGroupAggregateArgs, DbGroupCountAggregateInputType, DbGroupCountAggregateOutputType, DbGroupCountArgs, DbGroupCountOrderByAggregateInput, DbGroupCountOutputTypeCountMembershipsArgs, DbGroupCountOutputTypeDefaultArgs, DbGroupCountOutputTypeSelect, DbGroupCreateArgs, DbGroupCreateInput, DbGroupCreateManyAndReturnArgs, DbGroupCreateManyArgs, DbGroupCreateManyInput, DbGroupCreateNestedOneWithoutMembershipsInput, DbGroupCreateOrConnectWithoutMembershipsInput, DbGroupCreateWithoutMembershipsInput, DbGroupDefaultArgs, DbGroupDelegate, DbGroupDeleteArgs, DbGroupDeleteManyArgs, DbGroupFieldRefs, DbGroupFindFirstArgs, DbGroupFindFirstOrThrowArgs, DbGroupFindManyArgs, DbGroupFindUniqueArgs, DbGroupFindUniqueOrThrowArgs, DbGroupGroupByArgs, DbGroupGroupByOutputType, DbGroupInclude, DbGroupMaxAggregateInputType, DbGroupMaxAggregateOutputType, DbGroupMaxOrderByAggregateInput, DbGroupMinAggregateInputType, DbGroupMinAggregateOutputType, DbGroupMinOrderByAggregateInput, DbGroupOmit, DbGroupOrderByWithAggregationInput, DbGroupOrderByWithRelationInput, DbGroupScalarRelationFilter, DbGroupScalarWhereWithAggregatesInput, DbGroupSelect, DbGroupSelectCreateManyAndReturn, DbGroupSelectUpdateManyAndReturn, DbGroupUncheckedCreateInput, DbGroupUncheckedCreateWithoutMembershipsInput, DbGroupUncheckedUpdateInput, DbGroupUncheckedUpdateManyInput, DbGroupUncheckedUpdateWithoutMembershipsInput, DbGroupUpdateArgs, DbGroupUpdateInput, DbGroupUpdateManyAndReturnArgs, DbGroupUpdateManyArgs, DbGroupUpdateManyMutationInput, DbGroupUpdateOneRequiredWithoutMembershipsNestedInput, DbGroupUpdateToOneWithWhereWithoutMembershipsInput, DbGroupUpdateWithoutMembershipsInput, DbGroupUpsertArgs, DbGroupUpsertWithoutMembershipsInput, DbGroupWhereInput, DbGroupWhereUniqueInput, GetDbGroupAggregateType, Prisma__DbGroupClient } from "./models/DbGroup.mjs";
7
7
  import { $DbGroupMembershipPayload, AggregateDbGroupMembership, DbGroupMembershipAggregateArgs, DbGroupMembershipAvgAggregateInputType, DbGroupMembershipAvgAggregateOutputType, DbGroupMembershipAvgOrderByAggregateInput, DbGroupMembershipCountAggregateInputType, DbGroupMembershipCountAggregateOutputType, DbGroupMembershipCountArgs, DbGroupMembershipCountOrderByAggregateInput, DbGroupMembershipCreateArgs, DbGroupMembershipCreateInput, DbGroupMembershipCreateManyAndReturnArgs, DbGroupMembershipCreateManyArgs, DbGroupMembershipCreateManyGroupInput, DbGroupMembershipCreateManyGroupInputEnvelope, DbGroupMembershipCreateManyInput, DbGroupMembershipCreateManyPersonInput, DbGroupMembershipCreateManyPersonInputEnvelope, DbGroupMembershipCreateNestedManyWithoutGroupInput, DbGroupMembershipCreateNestedManyWithoutPersonInput, DbGroupMembershipCreateOrConnectWithoutGroupInput, DbGroupMembershipCreateOrConnectWithoutPersonInput, DbGroupMembershipCreateWithoutGroupInput, DbGroupMembershipCreateWithoutPersonInput, DbGroupMembershipDelegate, DbGroupMembershipDeleteArgs, DbGroupMembershipDeleteManyArgs, DbGroupMembershipFieldRefs, DbGroupMembershipFindFirstArgs, DbGroupMembershipFindFirstOrThrowArgs, DbGroupMembershipFindManyArgs, DbGroupMembershipFindUniqueArgs, DbGroupMembershipFindUniqueOrThrowArgs, DbGroupMembershipGroupByArgs, DbGroupMembershipGroupByOutputType, DbGroupMembershipGroupSlugPersonSlugCompoundUniqueInput, DbGroupMembershipInclude, DbGroupMembershipIncludeCreateManyAndReturn, DbGroupMembershipIncludeUpdateManyAndReturn, DbGroupMembershipListRelationFilter, DbGroupMembershipMaxAggregateInputType, DbGroupMembershipMaxAggregateOutputType, DbGroupMembershipMaxOrderByAggregateInput, DbGroupMembershipMinAggregateInputType, DbGroupMembershipMinAggregateOutputType, DbGroupMembershipMinOrderByAggregateInput, DbGroupMembershipOmit, DbGroupMembershipOrderByRelationAggregateInput, DbGroupMembershipOrderByWithAggregationInput, DbGroupMembershipOrderByWithRelationInput, DbGroupMembershipScalarWhereInput, DbGroupMembershipScalarWhereWithAggregatesInput, DbGroupMembershipSelect, DbGroupMembershipSelectCreateManyAndReturn, DbGroupMembershipSelectUpdateManyAndReturn, DbGroupMembershipSumAggregateInputType, DbGroupMembershipSumAggregateOutputType, DbGroupMembershipSumOrderByAggregateInput, DbGroupMembershipUncheckedCreateInput, DbGroupMembershipUncheckedCreateNestedManyWithoutGroupInput, DbGroupMembershipUncheckedCreateNestedManyWithoutPersonInput, DbGroupMembershipUncheckedCreateWithoutGroupInput, DbGroupMembershipUncheckedCreateWithoutPersonInput, DbGroupMembershipUncheckedUpdateInput, DbGroupMembershipUncheckedUpdateManyInput, DbGroupMembershipUncheckedUpdateManyWithoutGroupInput, DbGroupMembershipUncheckedUpdateManyWithoutGroupNestedInput, DbGroupMembershipUncheckedUpdateManyWithoutPersonInput, DbGroupMembershipUncheckedUpdateManyWithoutPersonNestedInput, DbGroupMembershipUncheckedUpdateWithoutGroupInput, DbGroupMembershipUncheckedUpdateWithoutPersonInput, DbGroupMembershipUpdateArgs, DbGroupMembershipUpdateInput, DbGroupMembershipUpdateManyAndReturnArgs, DbGroupMembershipUpdateManyArgs, DbGroupMembershipUpdateManyMutationInput, DbGroupMembershipUpdateManyWithWhereWithoutGroupInput, DbGroupMembershipUpdateManyWithWhereWithoutPersonInput, DbGroupMembershipUpdateManyWithoutGroupNestedInput, DbGroupMembershipUpdateManyWithoutPersonNestedInput, DbGroupMembershipUpdateWithWhereUniqueWithoutGroupInput, DbGroupMembershipUpdateWithWhereUniqueWithoutPersonInput, DbGroupMembershipUpdateWithoutGroupInput, DbGroupMembershipUpdateWithoutPersonInput, DbGroupMembershipUpsertArgs, DbGroupMembershipUpsertWithWhereUniqueWithoutGroupInput, DbGroupMembershipUpsertWithWhereUniqueWithoutPersonInput, DbGroupMembershipWhereInput, DbGroupMembershipWhereUniqueInput, GetDbGroupMembershipAggregateType, IntFieldUpdateOperationsInput, Prisma__DbGroupMembershipClient } from "./models/DbGroupMembership.mjs";
8
8
  import { $DbApprovalMethodPayload, AggregateDbApprovalMethod, DbApprovalMethodAggregateArgs, DbApprovalMethodCountAggregateInputType, DbApprovalMethodCountAggregateOutputType, DbApprovalMethodCountArgs, DbApprovalMethodCountOrderByAggregateInput, DbApprovalMethodCreateArgs, DbApprovalMethodCreateInput, DbApprovalMethodCreateManyAndReturnArgs, DbApprovalMethodCreateManyArgs, DbApprovalMethodCreateManyInput, DbApprovalMethodCreatedeprecatedAliasesInput, DbApprovalMethodDelegate, DbApprovalMethodDeleteArgs, DbApprovalMethodDeleteManyArgs, DbApprovalMethodFieldRefs, DbApprovalMethodFindFirstArgs, DbApprovalMethodFindFirstOrThrowArgs, DbApprovalMethodFindManyArgs, DbApprovalMethodFindUniqueArgs, DbApprovalMethodFindUniqueOrThrowArgs, DbApprovalMethodGroupByArgs, DbApprovalMethodGroupByOutputType, DbApprovalMethodMaxAggregateInputType, DbApprovalMethodMaxAggregateOutputType, DbApprovalMethodMaxOrderByAggregateInput, DbApprovalMethodMinAggregateInputType, DbApprovalMethodMinAggregateOutputType, DbApprovalMethodMinOrderByAggregateInput, DbApprovalMethodOmit, DbApprovalMethodOrderByWithAggregationInput, DbApprovalMethodOrderByWithRelationInput, DbApprovalMethodScalarWhereWithAggregatesInput, DbApprovalMethodSelect, DbApprovalMethodSelectCreateManyAndReturn, DbApprovalMethodSelectUpdateManyAndReturn, DbApprovalMethodTypeDisplayNameCompoundUniqueInput, DbApprovalMethodUncheckedCreateInput, DbApprovalMethodUncheckedUpdateInput, DbApprovalMethodUncheckedUpdateManyInput, DbApprovalMethodUpdateArgs, DbApprovalMethodUpdateInput, DbApprovalMethodUpdateManyAndReturnArgs, DbApprovalMethodUpdateManyArgs, DbApprovalMethodUpdateManyMutationInput, DbApprovalMethodUpdatedeprecatedAliasesInput, DbApprovalMethodUpsertArgs, DbApprovalMethodWhereInput, DbApprovalMethodWhereUniqueInput, EnumApprovalMethodTypeFieldUpdateOperationsInput, GetDbApprovalMethodAggregateType, Prisma__DbApprovalMethodClient, StringNullableListFilter } from "./models/DbApprovalMethod.mjs";
9
- import { $DbAppForCatalogPayload, AggregateDbAppForCatalog, DbAppForCatalog$sourceRefsArgs, DbAppForCatalog$subResourcesArgs, DbAppForCatalogAggregateArgs, DbAppForCatalogCountAggregateInputType, DbAppForCatalogCountAggregateOutputType, DbAppForCatalogCountArgs, DbAppForCatalogCountOrderByAggregateInput, DbAppForCatalogCountOutputTypeCountSourceRefsArgs, DbAppForCatalogCountOutputTypeCountSubResourcesArgs, DbAppForCatalogCountOutputTypeDefaultArgs, DbAppForCatalogCountOutputTypeSelect, DbAppForCatalogCreateArgs, DbAppForCatalogCreateInput, DbAppForCatalogCreateManyAndReturnArgs, DbAppForCatalogCreateManyArgs, DbAppForCatalogCreateManyInput, DbAppForCatalogCreateNestedOneWithoutSourceRefsInput, DbAppForCatalogCreateNestedOneWithoutSubResourcesInput, DbAppForCatalogCreateOrConnectWithoutSourceRefsInput, DbAppForCatalogCreateOrConnectWithoutSubResourcesInput, DbAppForCatalogCreateWithoutSourceRefsInput, DbAppForCatalogCreateWithoutSubResourcesInput, DbAppForCatalogCreatenicknamesInput, DbAppForCatalogCreatescreenshotIdsInput, DbAppForCatalogCreatetagsInput, DbAppForCatalogCreateteamsInput, DbAppForCatalogCreateurlIssuesInput, DbAppForCatalogDefaultArgs, DbAppForCatalogDelegate, DbAppForCatalogDeleteArgs, DbAppForCatalogDeleteManyArgs, DbAppForCatalogFieldRefs, DbAppForCatalogFindFirstArgs, DbAppForCatalogFindFirstOrThrowArgs, DbAppForCatalogFindManyArgs, DbAppForCatalogFindUniqueArgs, DbAppForCatalogFindUniqueOrThrowArgs, DbAppForCatalogGroupByArgs, DbAppForCatalogGroupByOutputType, DbAppForCatalogInclude, DbAppForCatalogMaxAggregateInputType, DbAppForCatalogMaxAggregateOutputType, DbAppForCatalogMaxOrderByAggregateInput, DbAppForCatalogMinAggregateInputType, DbAppForCatalogMinAggregateOutputType, DbAppForCatalogMinOrderByAggregateInput, DbAppForCatalogOmit, DbAppForCatalogOrderByWithAggregationInput, DbAppForCatalogOrderByWithRelationInput, DbAppForCatalogScalarRelationFilter, DbAppForCatalogScalarWhereWithAggregatesInput, DbAppForCatalogSelect, DbAppForCatalogSelectCreateManyAndReturn, DbAppForCatalogSelectUpdateManyAndReturn, DbAppForCatalogUncheckedCreateInput, DbAppForCatalogUncheckedCreateWithoutSourceRefsInput, DbAppForCatalogUncheckedCreateWithoutSubResourcesInput, DbAppForCatalogUncheckedUpdateInput, DbAppForCatalogUncheckedUpdateManyInput, DbAppForCatalogUncheckedUpdateWithoutSourceRefsInput, DbAppForCatalogUncheckedUpdateWithoutSubResourcesInput, DbAppForCatalogUpdateArgs, DbAppForCatalogUpdateInput, DbAppForCatalogUpdateManyAndReturnArgs, DbAppForCatalogUpdateManyArgs, DbAppForCatalogUpdateManyMutationInput, DbAppForCatalogUpdateOneRequiredWithoutSourceRefsNestedInput, DbAppForCatalogUpdateOneRequiredWithoutSubResourcesNestedInput, DbAppForCatalogUpdateToOneWithWhereWithoutSourceRefsInput, DbAppForCatalogUpdateToOneWithWhereWithoutSubResourcesInput, DbAppForCatalogUpdateWithoutSourceRefsInput, DbAppForCatalogUpdateWithoutSubResourcesInput, DbAppForCatalogUpdatenicknamesInput, DbAppForCatalogUpdatescreenshotIdsInput, DbAppForCatalogUpdatetagsInput, DbAppForCatalogUpdateteamsInput, DbAppForCatalogUpdateurlIssuesInput, DbAppForCatalogUpsertArgs, DbAppForCatalogUpsertWithoutSourceRefsInput, DbAppForCatalogUpsertWithoutSubResourcesInput, DbAppForCatalogWhereInput, DbAppForCatalogWhereUniqueInput, GetDbAppForCatalogAggregateType, Prisma__DbAppForCatalogClient } from "./models/DbAppForCatalog.mjs";
10
- import { $DbSubResourcePayload, AggregateDbSubResource, DbSubResourceAggregateArgs, DbSubResourceCountAggregateInputType, DbSubResourceCountAggregateOutputType, DbSubResourceCountArgs, DbSubResourceCountOrderByAggregateInput, DbSubResourceCreateArgs, DbSubResourceCreateInput, DbSubResourceCreateManyAndReturnArgs, DbSubResourceCreateManyAppInput, DbSubResourceCreateManyAppInputEnvelope, DbSubResourceCreateManyArgs, DbSubResourceCreateManyInput, DbSubResourceCreateNestedManyWithoutAppInput, DbSubResourceCreateOrConnectWithoutAppInput, DbSubResourceCreateWithoutAppInput, DbSubResourceCreateaccessMaintainerGroupSlugsInput, DbSubResourceCreatealiasesInput, DbSubResourceDelegate, DbSubResourceDeleteArgs, DbSubResourceDeleteManyArgs, DbSubResourceFieldRefs, DbSubResourceFindFirstArgs, DbSubResourceFindFirstOrThrowArgs, DbSubResourceFindManyArgs, DbSubResourceFindUniqueArgs, DbSubResourceFindUniqueOrThrowArgs, DbSubResourceGroupByArgs, DbSubResourceGroupByOutputType, DbSubResourceInclude, DbSubResourceIncludeCreateManyAndReturn, DbSubResourceIncludeUpdateManyAndReturn, DbSubResourceListRelationFilter, DbSubResourceMaxAggregateInputType, DbSubResourceMaxAggregateOutputType, DbSubResourceMaxOrderByAggregateInput, DbSubResourceMinAggregateInputType, DbSubResourceMinAggregateOutputType, DbSubResourceMinOrderByAggregateInput, DbSubResourceOmit, DbSubResourceOrderByRelationAggregateInput, DbSubResourceOrderByWithAggregationInput, DbSubResourceOrderByWithRelationInput, DbSubResourceScalarWhereInput, DbSubResourceScalarWhereWithAggregatesInput, DbSubResourceSelect, DbSubResourceSelectCreateManyAndReturn, DbSubResourceSelectUpdateManyAndReturn, DbSubResourceUncheckedCreateInput, DbSubResourceUncheckedCreateNestedManyWithoutAppInput, DbSubResourceUncheckedCreateWithoutAppInput, DbSubResourceUncheckedUpdateInput, DbSubResourceUncheckedUpdateManyInput, DbSubResourceUncheckedUpdateManyWithoutAppInput, DbSubResourceUncheckedUpdateManyWithoutAppNestedInput, DbSubResourceUncheckedUpdateWithoutAppInput, DbSubResourceUpdateArgs, DbSubResourceUpdateInput, DbSubResourceUpdateManyAndReturnArgs, DbSubResourceUpdateManyArgs, DbSubResourceUpdateManyMutationInput, DbSubResourceUpdateManyWithWhereWithoutAppInput, DbSubResourceUpdateManyWithoutAppNestedInput, DbSubResourceUpdateWithWhereUniqueWithoutAppInput, DbSubResourceUpdateWithoutAppInput, DbSubResourceUpdateaccessMaintainerGroupSlugsInput, DbSubResourceUpdatealiasesInput, DbSubResourceUpsertArgs, DbSubResourceUpsertWithWhereUniqueWithoutAppInput, DbSubResourceWhereInput, DbSubResourceWhereUniqueInput, GetDbSubResourceAggregateType, Prisma__DbSubResourceClient } from "./models/DbSubResource.mjs";
9
+ import { $DbResourcePayload, AggregateDbResource, DbResource$childrenArgs, DbResource$parentArgs, DbResource$sourceRefsArgs, DbResourceAggregateArgs, DbResourceCountAggregateInputType, DbResourceCountAggregateOutputType, DbResourceCountArgs, DbResourceCountOrderByAggregateInput, DbResourceCountOutputTypeCountChildrenArgs, DbResourceCountOutputTypeCountSourceRefsArgs, DbResourceCountOutputTypeDefaultArgs, DbResourceCountOutputTypeSelect, DbResourceCreateArgs, DbResourceCreateInput, DbResourceCreateManyAndReturnArgs, DbResourceCreateManyArgs, DbResourceCreateManyInput, DbResourceCreateManyParentInput, DbResourceCreateManyParentInputEnvelope, DbResourceCreateNestedManyWithoutParentInput, DbResourceCreateNestedOneWithoutChildrenInput, DbResourceCreateNestedOneWithoutSourceRefsInput, DbResourceCreateOrConnectWithoutChildrenInput, DbResourceCreateOrConnectWithoutParentInput, DbResourceCreateOrConnectWithoutSourceRefsInput, DbResourceCreateWithoutChildrenInput, DbResourceCreateWithoutParentInput, DbResourceCreateWithoutSourceRefsInput, DbResourceCreateaccessMaintainerGroupSlugsInput, DbResourceCreatealiasesInput, DbResourceCreatenicknamesInput, DbResourceCreatescreenshotIdsInput, DbResourceCreatetagsInput, DbResourceCreateteamsInput, DbResourceCreateurlIssuesInput, DbResourceDefaultArgs, DbResourceDelegate, DbResourceDeleteArgs, DbResourceDeleteManyArgs, DbResourceFieldRefs, DbResourceFindFirstArgs, DbResourceFindFirstOrThrowArgs, DbResourceFindManyArgs, DbResourceFindUniqueArgs, DbResourceFindUniqueOrThrowArgs, DbResourceGroupByArgs, DbResourceGroupByOutputType, DbResourceInclude, DbResourceIncludeCreateManyAndReturn, DbResourceIncludeUpdateManyAndReturn, DbResourceListRelationFilter, DbResourceMaxAggregateInputType, DbResourceMaxAggregateOutputType, DbResourceMaxOrderByAggregateInput, DbResourceMinAggregateInputType, DbResourceMinAggregateOutputType, DbResourceMinOrderByAggregateInput, DbResourceNullableScalarRelationFilter, DbResourceOmit, DbResourceOrderByRelationAggregateInput, DbResourceOrderByWithAggregationInput, DbResourceOrderByWithRelationInput, DbResourceScalarRelationFilter, DbResourceScalarWhereInput, DbResourceScalarWhereWithAggregatesInput, DbResourceSelect, DbResourceSelectCreateManyAndReturn, DbResourceSelectUpdateManyAndReturn, DbResourceUncheckedCreateInput, DbResourceUncheckedCreateNestedManyWithoutParentInput, DbResourceUncheckedCreateWithoutChildrenInput, DbResourceUncheckedCreateWithoutParentInput, DbResourceUncheckedCreateWithoutSourceRefsInput, DbResourceUncheckedUpdateInput, DbResourceUncheckedUpdateManyInput, DbResourceUncheckedUpdateManyWithoutParentInput, DbResourceUncheckedUpdateManyWithoutParentNestedInput, DbResourceUncheckedUpdateWithoutChildrenInput, DbResourceUncheckedUpdateWithoutParentInput, DbResourceUncheckedUpdateWithoutSourceRefsInput, DbResourceUpdateArgs, DbResourceUpdateInput, DbResourceUpdateManyAndReturnArgs, DbResourceUpdateManyArgs, DbResourceUpdateManyMutationInput, DbResourceUpdateManyWithWhereWithoutParentInput, DbResourceUpdateManyWithoutParentNestedInput, DbResourceUpdateOneRequiredWithoutSourceRefsNestedInput, DbResourceUpdateOneWithoutChildrenNestedInput, DbResourceUpdateToOneWithWhereWithoutChildrenInput, DbResourceUpdateToOneWithWhereWithoutSourceRefsInput, DbResourceUpdateWithWhereUniqueWithoutParentInput, DbResourceUpdateWithoutChildrenInput, DbResourceUpdateWithoutParentInput, DbResourceUpdateWithoutSourceRefsInput, DbResourceUpdateaccessMaintainerGroupSlugsInput, DbResourceUpdatealiasesInput, DbResourceUpdatenicknamesInput, DbResourceUpdatescreenshotIdsInput, DbResourceUpdatetagsInput, DbResourceUpdateteamsInput, DbResourceUpdateurlIssuesInput, DbResourceUpsertArgs, DbResourceUpsertWithWhereUniqueWithoutParentInput, DbResourceUpsertWithoutChildrenInput, DbResourceUpsertWithoutSourceRefsInput, DbResourceWhereInput, DbResourceWhereUniqueInput, GetDbResourceAggregateType, Prisma__DbResourceClient } from "./models/DbResource.mjs";
11
10
  import { $DbAppTagDefinitionPayload, AggregateDbAppTagDefinition, DbAppTagDefinitionAggregateArgs, DbAppTagDefinitionCountAggregateInputType, DbAppTagDefinitionCountAggregateOutputType, DbAppTagDefinitionCountArgs, DbAppTagDefinitionCountOrderByAggregateInput, DbAppTagDefinitionCreateArgs, DbAppTagDefinitionCreateInput, DbAppTagDefinitionCreateManyAndReturnArgs, DbAppTagDefinitionCreateManyArgs, DbAppTagDefinitionCreateManyInput, DbAppTagDefinitionDelegate, DbAppTagDefinitionDeleteArgs, DbAppTagDefinitionDeleteManyArgs, DbAppTagDefinitionFieldRefs, DbAppTagDefinitionFindFirstArgs, DbAppTagDefinitionFindFirstOrThrowArgs, DbAppTagDefinitionFindManyArgs, DbAppTagDefinitionFindUniqueArgs, DbAppTagDefinitionFindUniqueOrThrowArgs, DbAppTagDefinitionGroupByArgs, DbAppTagDefinitionGroupByOutputType, DbAppTagDefinitionMaxAggregateInputType, DbAppTagDefinitionMaxAggregateOutputType, DbAppTagDefinitionMaxOrderByAggregateInput, DbAppTagDefinitionMinAggregateInputType, DbAppTagDefinitionMinAggregateOutputType, DbAppTagDefinitionMinOrderByAggregateInput, DbAppTagDefinitionOmit, DbAppTagDefinitionOrderByWithAggregationInput, DbAppTagDefinitionOrderByWithRelationInput, DbAppTagDefinitionScalarWhereWithAggregatesInput, DbAppTagDefinitionSelect, DbAppTagDefinitionSelectCreateManyAndReturn, DbAppTagDefinitionSelectUpdateManyAndReturn, DbAppTagDefinitionUncheckedCreateInput, DbAppTagDefinitionUncheckedUpdateInput, DbAppTagDefinitionUncheckedUpdateManyInput, DbAppTagDefinitionUpdateArgs, DbAppTagDefinitionUpdateInput, DbAppTagDefinitionUpdateManyAndReturnArgs, DbAppTagDefinitionUpdateManyArgs, DbAppTagDefinitionUpdateManyMutationInput, DbAppTagDefinitionUpsertArgs, DbAppTagDefinitionWhereInput, DbAppTagDefinitionWhereUniqueInput, GetDbAppTagDefinitionAggregateType, Prisma__DbAppTagDefinitionClient } from "./models/DbAppTagDefinition.mjs";
12
11
  import { $DbAssetPayload, AggregateDbAsset, BytesFieldUpdateOperationsInput, DbAssetAggregateArgs, DbAssetAvgAggregateInputType, DbAssetAvgAggregateOutputType, DbAssetAvgOrderByAggregateInput, DbAssetCountAggregateInputType, DbAssetCountAggregateOutputType, DbAssetCountArgs, DbAssetCountOrderByAggregateInput, DbAssetCreateArgs, DbAssetCreateInput, DbAssetCreateManyAndReturnArgs, DbAssetCreateManyArgs, DbAssetCreateManyInput, DbAssetDelegate, DbAssetDeleteArgs, DbAssetDeleteManyArgs, DbAssetFieldRefs, DbAssetFindFirstArgs, DbAssetFindFirstOrThrowArgs, DbAssetFindManyArgs, DbAssetFindUniqueArgs, DbAssetFindUniqueOrThrowArgs, DbAssetGroupByArgs, DbAssetGroupByOutputType, DbAssetMaxAggregateInputType, DbAssetMaxAggregateOutputType, DbAssetMaxOrderByAggregateInput, DbAssetMinAggregateInputType, DbAssetMinAggregateOutputType, DbAssetMinOrderByAggregateInput, DbAssetOmit, DbAssetOrderByWithAggregationInput, DbAssetOrderByWithRelationInput, DbAssetScalarWhereWithAggregatesInput, DbAssetSelect, DbAssetSelectCreateManyAndReturn, DbAssetSelectUpdateManyAndReturn, DbAssetSumAggregateInputType, DbAssetSumAggregateOutputType, DbAssetSumOrderByAggregateInput, DbAssetUncheckedCreateInput, DbAssetUncheckedUpdateInput, DbAssetUncheckedUpdateManyInput, DbAssetUpdateArgs, DbAssetUpdateInput, DbAssetUpdateManyAndReturnArgs, DbAssetUpdateManyArgs, DbAssetUpdateManyMutationInput, DbAssetUpsertArgs, DbAssetWhereInput, DbAssetWhereUniqueInput, EnumAssetTypeFieldUpdateOperationsInput, GetDbAssetAggregateType, NullableIntFieldUpdateOperationsInput, Prisma__DbAssetClient } from "./models/DbAsset.mjs";
13
12
  import { $SourcePayload, AggregateSource, GetSourceAggregateType, Prisma__SourceClient, Source$referencesArgs, SourceAggregateArgs, SourceCountAggregateInputType, SourceCountAggregateOutputType, SourceCountArgs, SourceCountOrderByAggregateInput, SourceCountOutputTypeCountReferencesArgs, SourceCountOutputTypeDefaultArgs, SourceCountOutputTypeSelect, SourceCreateArgs, SourceCreateInput, SourceCreateManyAndReturnArgs, SourceCreateManyArgs, SourceCreateManyInput, SourceCreateNestedOneWithoutReferencesInput, SourceCreateOrConnectWithoutReferencesInput, SourceCreateWithoutReferencesInput, SourceDefaultArgs, SourceDelegate, SourceDeleteArgs, SourceDeleteManyArgs, SourceFieldRefs, SourceFindFirstArgs, SourceFindFirstOrThrowArgs, SourceFindManyArgs, SourceFindUniqueArgs, SourceFindUniqueOrThrowArgs, SourceGroupByArgs, SourceGroupByOutputType, SourceInclude, SourceMaxAggregateInputType, SourceMaxAggregateOutputType, SourceMaxOrderByAggregateInput, SourceMinAggregateInputType, SourceMinAggregateOutputType, SourceMinOrderByAggregateInput, SourceOmit, SourceOrderByWithAggregationInput, SourceOrderByWithRelationInput, SourceScalarRelationFilter, SourceScalarWhereWithAggregatesInput, SourceSelect, SourceSelectCreateManyAndReturn, SourceSelectUpdateManyAndReturn, SourceUncheckedCreateInput, SourceUncheckedCreateWithoutReferencesInput, SourceUncheckedUpdateInput, SourceUncheckedUpdateManyInput, SourceUncheckedUpdateWithoutReferencesInput, SourceUpdateArgs, SourceUpdateInput, SourceUpdateManyAndReturnArgs, SourceUpdateManyArgs, SourceUpdateManyMutationInput, SourceUpdateOneRequiredWithoutReferencesNestedInput, SourceUpdateToOneWithWhereWithoutReferencesInput, SourceUpdateWithoutReferencesInput, SourceUpsertArgs, SourceUpsertWithoutReferencesInput, SourceWhereInput, SourceWhereUniqueInput } from "./models/Source.mjs";
14
- import { $SourceReferencePayload, AggregateSourceReference, GetSourceReferenceAggregateType, Prisma__SourceReferenceClient, SourceReferenceAggregateArgs, SourceReferenceAppIdUrlCompoundUniqueInput, SourceReferenceAvgAggregateInputType, SourceReferenceAvgAggregateOutputType, SourceReferenceAvgOrderByAggregateInput, SourceReferenceCountAggregateInputType, SourceReferenceCountAggregateOutputType, SourceReferenceCountArgs, SourceReferenceCountOrderByAggregateInput, SourceReferenceCreateArgs, SourceReferenceCreateInput, SourceReferenceCreateManyAndReturnArgs, SourceReferenceCreateManyAppInput, SourceReferenceCreateManyAppInputEnvelope, SourceReferenceCreateManyArgs, SourceReferenceCreateManyInput, SourceReferenceCreateManySourceInput, SourceReferenceCreateManySourceInputEnvelope, SourceReferenceCreateNestedManyWithoutAppInput, SourceReferenceCreateNestedManyWithoutSourceInput, SourceReferenceCreateOrConnectWithoutAppInput, SourceReferenceCreateOrConnectWithoutSourceInput, SourceReferenceCreateWithoutAppInput, SourceReferenceCreateWithoutSourceInput, SourceReferenceCreateexcerptsInput, SourceReferenceDelegate, SourceReferenceDeleteArgs, SourceReferenceDeleteManyArgs, SourceReferenceFieldRefs, SourceReferenceFindFirstArgs, SourceReferenceFindFirstOrThrowArgs, SourceReferenceFindManyArgs, SourceReferenceFindUniqueArgs, SourceReferenceFindUniqueOrThrowArgs, SourceReferenceGroupByArgs, SourceReferenceGroupByOutputType, SourceReferenceInclude, SourceReferenceIncludeCreateManyAndReturn, SourceReferenceIncludeUpdateManyAndReturn, SourceReferenceListRelationFilter, SourceReferenceMaxAggregateInputType, SourceReferenceMaxAggregateOutputType, SourceReferenceMaxOrderByAggregateInput, SourceReferenceMinAggregateInputType, SourceReferenceMinAggregateOutputType, SourceReferenceMinOrderByAggregateInput, SourceReferenceOmit, SourceReferenceOrderByRelationAggregateInput, SourceReferenceOrderByWithAggregationInput, SourceReferenceOrderByWithRelationInput, SourceReferenceScalarWhereInput, SourceReferenceScalarWhereWithAggregatesInput, SourceReferenceSelect, SourceReferenceSelectCreateManyAndReturn, SourceReferenceSelectUpdateManyAndReturn, SourceReferenceSumAggregateInputType, SourceReferenceSumAggregateOutputType, SourceReferenceSumOrderByAggregateInput, SourceReferenceUncheckedCreateInput, SourceReferenceUncheckedCreateNestedManyWithoutAppInput, SourceReferenceUncheckedCreateNestedManyWithoutSourceInput, SourceReferenceUncheckedCreateWithoutAppInput, SourceReferenceUncheckedCreateWithoutSourceInput, SourceReferenceUncheckedUpdateInput, SourceReferenceUncheckedUpdateManyInput, SourceReferenceUncheckedUpdateManyWithoutAppInput, SourceReferenceUncheckedUpdateManyWithoutAppNestedInput, SourceReferenceUncheckedUpdateManyWithoutSourceInput, SourceReferenceUncheckedUpdateManyWithoutSourceNestedInput, SourceReferenceUncheckedUpdateWithoutAppInput, SourceReferenceUncheckedUpdateWithoutSourceInput, SourceReferenceUpdateArgs, SourceReferenceUpdateInput, SourceReferenceUpdateManyAndReturnArgs, SourceReferenceUpdateManyArgs, SourceReferenceUpdateManyMutationInput, SourceReferenceUpdateManyWithWhereWithoutAppInput, SourceReferenceUpdateManyWithWhereWithoutSourceInput, SourceReferenceUpdateManyWithoutAppNestedInput, SourceReferenceUpdateManyWithoutSourceNestedInput, SourceReferenceUpdateWithWhereUniqueWithoutAppInput, SourceReferenceUpdateWithWhereUniqueWithoutSourceInput, SourceReferenceUpdateWithoutAppInput, SourceReferenceUpdateWithoutSourceInput, SourceReferenceUpdateexcerptsInput, SourceReferenceUpsertArgs, SourceReferenceUpsertWithWhereUniqueWithoutAppInput, SourceReferenceUpsertWithWhereUniqueWithoutSourceInput, SourceReferenceWhereInput, SourceReferenceWhereUniqueInput } from "./models/SourceReference.mjs";
13
+ import { $SourceReferencePayload, AggregateSourceReference, GetSourceReferenceAggregateType, Prisma__SourceReferenceClient, SourceReferenceAggregateArgs, SourceReferenceAvgAggregateInputType, SourceReferenceAvgAggregateOutputType, SourceReferenceAvgOrderByAggregateInput, SourceReferenceCountAggregateInputType, SourceReferenceCountAggregateOutputType, SourceReferenceCountArgs, SourceReferenceCountOrderByAggregateInput, SourceReferenceCreateArgs, SourceReferenceCreateInput, SourceReferenceCreateManyAndReturnArgs, SourceReferenceCreateManyArgs, SourceReferenceCreateManyInput, SourceReferenceCreateManyResourceInput, SourceReferenceCreateManyResourceInputEnvelope, SourceReferenceCreateManySourceInput, SourceReferenceCreateManySourceInputEnvelope, SourceReferenceCreateNestedManyWithoutResourceInput, SourceReferenceCreateNestedManyWithoutSourceInput, SourceReferenceCreateOrConnectWithoutResourceInput, SourceReferenceCreateOrConnectWithoutSourceInput, SourceReferenceCreateWithoutResourceInput, SourceReferenceCreateWithoutSourceInput, SourceReferenceCreateexcerptsInput, SourceReferenceDelegate, SourceReferenceDeleteArgs, SourceReferenceDeleteManyArgs, SourceReferenceFieldRefs, SourceReferenceFindFirstArgs, SourceReferenceFindFirstOrThrowArgs, SourceReferenceFindManyArgs, SourceReferenceFindUniqueArgs, SourceReferenceFindUniqueOrThrowArgs, SourceReferenceGroupByArgs, SourceReferenceGroupByOutputType, SourceReferenceInclude, SourceReferenceIncludeCreateManyAndReturn, SourceReferenceIncludeUpdateManyAndReturn, SourceReferenceListRelationFilter, SourceReferenceMaxAggregateInputType, SourceReferenceMaxAggregateOutputType, SourceReferenceMaxOrderByAggregateInput, SourceReferenceMinAggregateInputType, SourceReferenceMinAggregateOutputType, SourceReferenceMinOrderByAggregateInput, SourceReferenceOmit, SourceReferenceOrderByRelationAggregateInput, SourceReferenceOrderByWithAggregationInput, SourceReferenceOrderByWithRelationInput, SourceReferenceResourceIdUrlCompoundUniqueInput, SourceReferenceScalarWhereInput, SourceReferenceScalarWhereWithAggregatesInput, SourceReferenceSelect, SourceReferenceSelectCreateManyAndReturn, SourceReferenceSelectUpdateManyAndReturn, SourceReferenceSumAggregateInputType, SourceReferenceSumAggregateOutputType, SourceReferenceSumOrderByAggregateInput, SourceReferenceUncheckedCreateInput, SourceReferenceUncheckedCreateNestedManyWithoutResourceInput, SourceReferenceUncheckedCreateNestedManyWithoutSourceInput, SourceReferenceUncheckedCreateWithoutResourceInput, SourceReferenceUncheckedCreateWithoutSourceInput, SourceReferenceUncheckedUpdateInput, SourceReferenceUncheckedUpdateManyInput, SourceReferenceUncheckedUpdateManyWithoutResourceInput, SourceReferenceUncheckedUpdateManyWithoutResourceNestedInput, SourceReferenceUncheckedUpdateManyWithoutSourceInput, SourceReferenceUncheckedUpdateManyWithoutSourceNestedInput, SourceReferenceUncheckedUpdateWithoutResourceInput, SourceReferenceUncheckedUpdateWithoutSourceInput, SourceReferenceUpdateArgs, SourceReferenceUpdateInput, SourceReferenceUpdateManyAndReturnArgs, SourceReferenceUpdateManyArgs, SourceReferenceUpdateManyMutationInput, SourceReferenceUpdateManyWithWhereWithoutResourceInput, SourceReferenceUpdateManyWithWhereWithoutSourceInput, SourceReferenceUpdateManyWithoutResourceNestedInput, SourceReferenceUpdateManyWithoutSourceNestedInput, SourceReferenceUpdateWithWhereUniqueWithoutResourceInput, SourceReferenceUpdateWithWhereUniqueWithoutSourceInput, SourceReferenceUpdateWithoutResourceInput, SourceReferenceUpdateWithoutSourceInput, SourceReferenceUpdateexcerptsInput, SourceReferenceUpsertArgs, SourceReferenceUpsertWithWhereUniqueWithoutResourceInput, SourceReferenceUpsertWithWhereUniqueWithoutSourceInput, SourceReferenceWhereInput, SourceReferenceWhereUniqueInput } from "./models/SourceReference.mjs";
15
14
  import { BoolFilter, BoolWithAggregatesFilter, BytesFilter, BytesWithAggregatesFilter, DateTimeFilter, DateTimeNullableFilter, DateTimeNullableWithAggregatesFilter, DateTimeWithAggregatesFilter, EnumApprovalMethodTypeFilter, EnumApprovalMethodTypeWithAggregatesFilter, EnumAssetTypeFilter, EnumAssetTypeWithAggregatesFilter, IntFilter, IntNullableFilter, IntNullableWithAggregatesFilter, IntWithAggregatesFilter, JsonFilter, JsonFilterBase, JsonNullableFilter, JsonNullableFilterBase, JsonNullableWithAggregatesFilter, JsonNullableWithAggregatesFilterBase, JsonWithAggregatesFilter, JsonWithAggregatesFilterBase, NestedBoolFilter, NestedBoolWithAggregatesFilter, NestedBytesFilter, NestedBytesWithAggregatesFilter, NestedDateTimeFilter, NestedDateTimeNullableFilter, NestedDateTimeNullableWithAggregatesFilter, NestedDateTimeWithAggregatesFilter, NestedEnumApprovalMethodTypeFilter, NestedEnumApprovalMethodTypeWithAggregatesFilter, NestedEnumAssetTypeFilter, NestedEnumAssetTypeWithAggregatesFilter, NestedFloatFilter, NestedFloatNullableFilter, NestedIntFilter, NestedIntNullableFilter, NestedIntNullableWithAggregatesFilter, NestedIntWithAggregatesFilter, NestedJsonFilter, NestedJsonFilterBase, NestedJsonNullableFilter, NestedJsonNullableFilterBase, NestedStringFilter, NestedStringNullableFilter, NestedStringNullableWithAggregatesFilter, NestedStringWithAggregatesFilter, SortOrderInput, StringFilter, StringNullableFilter, StringNullableWithAggregatesFilter, StringWithAggregatesFilter } from "./commonInputTypes.mjs";
package/dist/index.d.mts CHANGED
@@ -1,9 +1,8 @@
1
1
  import { AcMetaDictionary, Tag } from "./types/common/sharedTypes.mjs";
2
2
  import { AcResourceIndexed } from "./types/common/resourceTypes.mjs";
3
- import { AppAccessRequest, AppRole, ApprovalMethod, ApprovalMethodConfig, ApprovalMethodType, ApprovalUrl, CustomConfig, PersonTeamConfig, ServiceConfig } from "./types/common/approvalMethodTypes.mjs";
3
+ import { AccessRequest, AppAccessRequest, AppRole, ApprovalMethod, ApprovalMethodConfig, ApprovalMethodType, ApprovalUrl, CustomConfig, PersonTeamConfig, Role, ServiceConfig } from "./types/common/approvalMethodTypes.mjs";
4
4
  import { Group, Person } from "./types/common/personGroupTypes.mjs";
5
- import { SubResource } from "./types/common/subResourceTypes.mjs";
6
- import { AppApprovalMethod, AppCatalogData, AppCategory, AppForCatalog, AppTierVariant, AppVersionInfo, GroupingTagDefinition, GroupingTagValue, SourceReference, VersionInfo } from "./types/common/appCatalogTypes.mjs";
5
+ import { AppApprovalMethod, AppCatalogData, AppCategory, AppVersionInfo, GroupingTagDefinition, GroupingTagValue, Resource, SourceReference, TierVariant, VersionInfo } from "./types/common/appCatalogTypes.mjs";
7
6
  import { AcEnvIndexed } from "./types/common/env/envTypes.mjs";
8
7
  import { AcAppPageIndexed, AcAppUiIndexed } from "./types/common/app/ui/appUiTypes.mjs";
9
8
  import { AcAppIndexed } from "./types/common/app/appTypes.mjs";
@@ -35,4 +34,4 @@ import { injectCustomScripts } from "./middleware/htmlInjection.mjs";
35
34
  import { runLighthouseKeeperDemo } from "./modules/lighthouseKeeper/demo.mjs";
36
35
  import { APP_CATALOG_AI_SYSTEM_PROMPT, createAppCatalogAITools } from "./modules/lighthouseKeeper/tools.mjs";
37
36
  import { getBuildPipelineId, getFrontendPackageVersion, getVersionInfo } from "./utils/versionUtils.mjs";
38
- export { APP_CATALOG_AI_SYSTEM_PROMPT, AcAppIndexed, AcAppPageIndexed, AcAppUiIndexed, AcAppsMeta, type AcAuthConfig, AcBackendAppDto, AcBackendAppInput, AcBackendAppUIBaseInput, AcBackendAppUIInput, AcBackendCredentialInput, AcBackendDataFreshness, AcBackendDataSourceInput, AcBackendDataSourceInputCommon, AcBackendDataSourceInputDb, AcBackendDataSourceInputKafka, AcBackendDataVersion, AcBackendDeployableInput, AcBackendDeployment, AcBackendDeploymentInput, AcBackendEnvironmentInput, AcBackendPageInput, type AcBackendProvider, AcBackendTagDescriptionDataIndexed, AcBackendTagFixedTagValue, AcBackendTagsDescriptionDataIndexed, AcBackendUiDefaultsInput, AcBackendVersionsRequestParams, AcBackendVersionsReturn, AcContextIndexed, type AcDatabaseConfig, AcDatabaseManager, AcEnvIndexed, type AcFeatureToggles, type AcLifecycleHooks, type AcLighthouseKeeperConfig, type AcMcpServerConfig, AcMetaDictionary, type AcMiddlewareOptions, type AcMiddlewareResult, AcResourceIndexed, type AcStaticControllerContract, type AcTrpcContext, type AcTrpcContextOptions, AppAccessRequest, AppApprovalMethod, AppCatalogCompanySpecificBackend, AppCatalogData, AppCategory, type AppForCatalog, AppRole, AppTierVariant, AppVersionInfo, ApprovalMethod, ApprovalMethodConfig, ApprovalMethodType, ApprovalUrl, type AssetRestControllerConfig, type AuthRouter, type BetterAuth, CustomConfig, Group, GroupingTagDefinition, GroupingTagValue, type IconRestControllerConfig, type MakeTFromPrismaModel, type MiddlewareContext, type ObjectKeys, Person, PersonTeamConfig, type ScalarFilter, type ScalarKeys, type ScreenshotRestControllerConfig, ServiceConfig, SourceReference, SubResource, type SyncAppCatalogResult, type SyncAssetsConfig, TABLE_SYNC_MAGAZINE, type TRPCRouter, type TableSyncMagazine, type TableSyncMagazineModelNameKey, type TableSyncParamsPrisma, Tag, type UpsertIconInput, VersionInfo, checkAllLinks, connectDb, createAcMiddleware, createAcTrpcContext, createAppCatalogAITools, createAuth, createAuthRouter, createTrpcRouter, disconnectDb, getAssetByName, getBuildPipelineId, getDbClient, getFrontendPackageVersion, getVersionInfo, injectCustomScripts, printLinkCheckReport, registerAssetRestController, registerAuthRoutes, registerIconRestController, registerScreenshotRestController, runLighthouseKeeperDemo, setDbClient, staticControllerContract, syncAppCatalog, syncAssets, tableSyncPrisma, upsertIcon, upsertIcons };
37
+ export { APP_CATALOG_AI_SYSTEM_PROMPT, AcAppIndexed, AcAppPageIndexed, AcAppUiIndexed, AcAppsMeta, type AcAuthConfig, AcBackendAppDto, AcBackendAppInput, AcBackendAppUIBaseInput, AcBackendAppUIInput, AcBackendCredentialInput, AcBackendDataFreshness, AcBackendDataSourceInput, AcBackendDataSourceInputCommon, AcBackendDataSourceInputDb, AcBackendDataSourceInputKafka, AcBackendDataVersion, AcBackendDeployableInput, AcBackendDeployment, AcBackendDeploymentInput, AcBackendEnvironmentInput, AcBackendPageInput, type AcBackendProvider, AcBackendTagDescriptionDataIndexed, AcBackendTagFixedTagValue, AcBackendTagsDescriptionDataIndexed, AcBackendUiDefaultsInput, AcBackendVersionsRequestParams, AcBackendVersionsReturn, AcContextIndexed, type AcDatabaseConfig, AcDatabaseManager, AcEnvIndexed, type AcFeatureToggles, type AcLifecycleHooks, type AcLighthouseKeeperConfig, type AcMcpServerConfig, AcMetaDictionary, type AcMiddlewareOptions, type AcMiddlewareResult, AcResourceIndexed, type AcStaticControllerContract, type AcTrpcContext, type AcTrpcContextOptions, AccessRequest, AppAccessRequest, AppApprovalMethod, AppCatalogCompanySpecificBackend, AppCatalogData, AppCategory, AppRole, AppVersionInfo, ApprovalMethod, ApprovalMethodConfig, ApprovalMethodType, ApprovalUrl, type AssetRestControllerConfig, type AuthRouter, type BetterAuth, CustomConfig, Group, GroupingTagDefinition, GroupingTagValue, type IconRestControllerConfig, type MakeTFromPrismaModel, type MiddlewareContext, type ObjectKeys, Person, PersonTeamConfig, type Resource, Role, type ScalarFilter, type ScalarKeys, type ScreenshotRestControllerConfig, ServiceConfig, SourceReference, type SyncAppCatalogResult, type SyncAssetsConfig, TABLE_SYNC_MAGAZINE, type TRPCRouter, type TableSyncMagazine, type TableSyncMagazineModelNameKey, type TableSyncParamsPrisma, Tag, TierVariant, type UpsertIconInput, VersionInfo, checkAllLinks, connectDb, createAcMiddleware, createAcTrpcContext, createAppCatalogAITools, createAuth, createAuthRouter, createTrpcRouter, disconnectDb, getAssetByName, getBuildPipelineId, getDbClient, getFrontendPackageVersion, getVersionInfo, injectCustomScripts, printLinkCheckReport, registerAssetRestController, registerAuthRoutes, registerIconRestController, registerScreenshotRestController, runLighthouseKeeperDemo, setDbClient, staticControllerContract, syncAppCatalog, syncAssets, tableSyncPrisma, upsertIcon, upsertIcons };
@@ -79,7 +79,7 @@ function formatStatus(status, error) {
79
79
  return `${status}`;
80
80
  }
81
81
  async function getAppsFromDb() {
82
- return (await getDbClient().dbAppForCatalog.findMany({ include: { sourceRefs: true } })).map((row) => {
82
+ return (await getDbClient().dbResource.findMany({ include: { sourceRefs: true } })).map((row) => {
83
83
  const accessRequest = row.accessRequest;
84
84
  const teams = row.teams ?? [];
85
85
  const tags = row.tags ?? [];
@@ -1 +1 @@
1
- {"version":3,"file":"checkLinks.mjs","names":[],"sources":["../../../src/modules/appCatalog/checkLinks.ts"],"sourcesContent":["import type { AppForCatalog } from '../../types/common/appCatalogTypes'\nimport { getDbClient } from '../../db/client'\n\ninterface LinkCheck {\n url: string\n status: number | null\n error?: string\n appSlug: string\n linkType: 'appUrl' | 'sources' | 'accessRequest.urls'\n}\n\ninterface CheckLinksOptions {\n maxConcurrent?: number\n timeout?: number\n maxRetries?: number\n onProgress?: (result: LinkCheck) => void\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction classifyNetworkError(err: unknown): string {\n // Node's fetch wraps the real error in error.cause\n const cause =\n err instanceof Error && 'cause' in err && err.cause instanceof Error\n ? err.cause\n : null\n\n const hasCode = (obj: unknown): obj is { code: string } =>\n obj != null && typeof obj === 'object' && 'code' in obj\n\n const code =\n (hasCode(cause) ? cause.code : null) ?? (hasCode(err) ? err.code : null)\n const causeMsg = cause?.message ?? ''\n const topMsg = err instanceof Error ? err.message : String(err)\n\n if (code) {\n switch (code) {\n case 'ENOTFOUND':\n case 'EAI_AGAIN':\n return `DNS resolution failed (${code})`\n case 'ECONNREFUSED':\n return `Connection refused (${code})`\n case 'ETIMEDOUT':\n case 'ECONNRESET':\n return `Connection timeout (${code})`\n case 'ENETUNREACH':\n case 'EHOSTUNREACH':\n return `Network unreachable (${code})`\n case 'UNABLE_TO_VERIFY_LEAF_SIGNATURE':\n return `SSL certificate error: unable to verify certificate (${code})`\n case 'CERT_HAS_EXPIRED':\n return `SSL certificate error: certificate expired (${code})`\n case 'ERR_TLS_CERT_ALTNAME_INVALID':\n return `SSL certificate error: hostname mismatch (${code})`\n case 'DEPTH_ZERO_SELF_SIGNED_CERT':\n case 'SELF_SIGNED_CERT_IN_CHAIN':\n return `SSL certificate error: self-signed certificate (${code})`\n default:\n if (code.startsWith('ERR_TLS') || code.startsWith('CERT'))\n return `SSL/TLS error (${code}): ${causeMsg || topMsg}`\n return `Network error (${code}): ${causeMsg || topMsg}`\n }\n }\n\n const msg = causeMsg || topMsg\n if (/certificate/i.test(msg) || /SSL|TLS/i.test(msg))\n return `SSL/TLS error: ${msg}`\n if (/abort|timeout/i.test(msg)) return `Request timeout: ${msg}`\n if (/dns|resolve/i.test(msg)) return `DNS error: ${msg}`\n\n return causeMsg || topMsg\n}\n\nasync function checkUrlWithRetry(\n url: string,\n options: {\n timeout: number\n maxRetries: number\n },\n): Promise<{ status: number | null; error?: string }> {\n let lastError: string | undefined\n\n for (let attempt = 0; attempt <= options.maxRetries; attempt++) {\n try {\n const response = await fetch(url, {\n method: 'HEAD',\n redirect: 'manual', // Don't follow redirects\n signal: AbortSignal.timeout(options.timeout),\n })\n return { status: response.status }\n } catch (error: unknown) {\n const errorMessage = classifyNetworkError(error)\n lastError = errorMessage\n\n // Check if it's a retryable error (timeout or transient network issues)\n const isRetryable =\n errorMessage.includes('timeout') ||\n errorMessage.includes('ECONNRESET') ||\n errorMessage.includes('ETIMEDOUT') ||\n errorMessage.includes('EAI_AGAIN')\n\n if (isRetryable && attempt < options.maxRetries) {\n // Exponential backoff: 1s, 2s, 4s\n const backoffMs = 1000 * 2 ** attempt\n await sleep(backoffMs)\n continue\n }\n\n break\n }\n }\n\n return { status: null, error: lastError }\n}\n\nfunction getStatusEmoji(status: number | null): string {\n if (status === null) return '❌'\n if (status >= 200 && status < 300) return '✅'\n if (status >= 300 && status < 400) return '🔀'\n if (status === 403) return '🔒' // 403 is not an error, just forbidden\n if (status && status >= 400 && status < 500) return '⚠️'\n return '❌'\n}\n\nfunction isWorkingLink(status: number | null): boolean {\n if (status === null) return false\n // 2xx, 3xx, and 403 are considered working\n if (status >= 200 && status < 400) return true\n if (status === 403) return true\n return false\n}\n\nfunction isBrokenLink(status: number | null): boolean {\n if (status === null) return true\n // 403 is not broken\n if (status === 403) return false\n // 4xx (except 403) and 5xx are broken\n return status >= 400\n}\n\nfunction formatStatus(status: number | null, error?: string): string {\n if (status === null) {\n return `ERROR: ${error || 'Unknown error'}`\n }\n return `${status}`\n}\n\nasync function getAppsFromDb(): Promise<AppForCatalog[]> {\n const prisma = getDbClient()\n const rows = await prisma.dbAppForCatalog.findMany({\n include: {\n sourceRefs: true,\n },\n })\n\n return rows.map((row) => {\n const accessRequest =\n row.accessRequest as unknown as AppForCatalog['accessRequest']\n const teams = (row.teams as unknown as string[] | null) ?? []\n const tags = (row.tags as unknown as AppForCatalog['tags']) ?? []\n const screenshotIds =\n (row.screenshotIds as unknown as AppForCatalog['screenshotIds']) ?? []\n const sources = row.sourceRefs.map((ref) => ({\n sourceSlug: ref.sourceSlug,\n url: ref.url,\n parseDate: ref.parseDate ? ref.parseDate.toISOString() : null,\n }))\n const notes = row.notes == null ? undefined : row.notes\n const appUrl = row.appUrl == null ? undefined : row.appUrl\n const iconName = row.iconName == null ? undefined : row.iconName\n const deprecated =\n row.deprecated == null\n ? undefined\n : (row.deprecated as unknown as AppForCatalog['deprecated'])\n\n return {\n id: row.id,\n slug: row.slug,\n displayName: row.displayName,\n description: row.description,\n accessRequest,\n teams,\n notes,\n tags,\n appUrl,\n iconName,\n screenshotIds,\n sources,\n deprecated,\n }\n })\n}\n\n/**\n * Check all links in the app catalog and return a report\n */\nexport async function checkAllLinks(options: CheckLinksOptions = {}): Promise<{\n total: number\n working: number\n broken: number\n redirects: number\n checks: LinkCheck[]\n}> {\n const {\n maxConcurrent = 10,\n timeout = 60000,\n maxRetries = 3,\n onProgress,\n } = options\n\n const apps = await getAppsFromDb()\n const checks: Omit<LinkCheck, 'status' | 'error'>[] = []\n\n // Collect all links\n for (const app of apps) {\n // Check appUrl\n if (app.appUrl) {\n checks.push({\n url: app.appUrl,\n appSlug: app.slug,\n linkType: 'appUrl',\n })\n }\n\n // Check sources\n if (app.sources && app.sources.length > 0) {\n for (const source of app.sources) {\n const url = typeof source === 'string' ? source : source.url\n checks.push({\n url,\n appSlug: app.slug,\n linkType: 'sources',\n })\n }\n }\n\n // Check accessRequest.urls\n if (app.accessRequest?.urls && app.accessRequest.urls.length > 0) {\n for (const link of app.accessRequest.urls) {\n checks.push({\n url: link.url,\n appSlug: app.slug,\n linkType: 'accessRequest.urls',\n })\n }\n }\n }\n\n // Check all links with concurrency control\n const results: LinkCheck[] = []\n const queue = [...checks]\n const inProgress = new Set<Promise<void>>()\n\n while (queue.length > 0 || inProgress.size > 0) {\n // Start new requests up to maxConcurrent\n while (queue.length > 0 && inProgress.size < maxConcurrent) {\n const check = queue.shift()!\n\n const promise = (async () => {\n const result = await checkUrlWithRetry(check.url, {\n timeout,\n maxRetries,\n })\n\n const linkCheck: LinkCheck = {\n ...check,\n status: result.status,\n error: result.error,\n }\n results.push(linkCheck)\n\n // Stream result if callback provided\n if (onProgress) {\n onProgress(linkCheck)\n }\n })()\n\n inProgress.add(promise)\n\n // Clean up when promise completes\n void promise.finally(() => {\n inProgress.delete(promise)\n })\n }\n\n // Wait for at least one to complete before continuing\n if (inProgress.size > 0) {\n await Promise.race(inProgress)\n }\n }\n\n const working = results.filter((r) => isWorkingLink(r.status))\n const broken = results.filter((r) => isBrokenLink(r.status))\n const redirects = results.filter(\n (r) => r.status && r.status >= 300 && r.status < 400,\n )\n\n return {\n total: results.length,\n working: working.length,\n broken: broken.length,\n redirects: redirects.length,\n checks: results,\n }\n}\n\n/**\n * Print a formatted report of link check results\n */\nexport function printLinkCheckReport(report: {\n total: number\n working: number\n broken: number\n redirects: number\n checks: LinkCheck[]\n}): void {\n console.log('📊 Results:\\n')\n console.log(`✅ Working links: ${report.working}`)\n console.log(`❌ Broken links: ${report.broken}`)\n console.log(`🔀 Redirects: ${report.redirects}`)\n console.log()\n\n const broken = report.checks.filter((r) => isBrokenLink(r.status))\n const redirects = report.checks.filter(\n (r) => r.status && r.status >= 300 && r.status < 400,\n )\n\n // Show broken links\n if (broken.length > 0) {\n console.log('❌ Broken Links:\\n')\n for (const link of broken) {\n console.log(\n ` ${getStatusEmoji(link.status)} [${link.appSlug}] ${link.linkType}`,\n )\n console.log(` ${link.url}`)\n console.log(` Status: ${formatStatus(link.status, link.error)}`)\n console.log()\n }\n }\n\n // Show redirects\n if (redirects.length > 0) {\n console.log('🔀 Redirects:\\n')\n for (const link of redirects) {\n console.log(\n ` ${getStatusEmoji(link.status)} [${link.appSlug}] ${link.linkType}`,\n )\n console.log(` ${link.url}`)\n console.log(` Status: ${formatStatus(link.status, link.error)}`)\n console.log()\n }\n }\n\n // Summary by app\n const appStats = new Map<\n string,\n { working: number; broken: number; total: number }\n >()\n for (const result of report.checks) {\n const stats = appStats.get(result.appSlug) || {\n working: 0,\n broken: 0,\n total: 0,\n }\n stats.total++\n if (isWorkingLink(result.status)) {\n stats.working++\n } else {\n stats.broken++\n }\n appStats.set(result.appSlug, stats)\n }\n\n const appsWithBrokenLinks = Array.from(appStats.entries())\n .filter(([_, stats]) => stats.broken > 0)\n .sort((a, b) => b[1].broken - a[1].broken)\n\n if (appsWithBrokenLinks.length > 0) {\n console.log('📱 Apps with broken links:\\n')\n for (const [appSlug, stats] of appsWithBrokenLinks) {\n console.log(` ${appSlug}: ${stats.broken}/${stats.total} broken`)\n }\n console.log()\n }\n\n if (broken.length > 0) {\n console.log(`\\n❌ Found ${broken.length} broken link(s)`)\n } else {\n console.log('\\n✅ All links are working!')\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkLinks.mjs","names":[],"sources":["../../../src/modules/appCatalog/checkLinks.ts"],"sourcesContent":["import type { Resource } from '../../types/common/appCatalogTypes'\nimport { getDbClient } from '../../db/client'\n\ninterface LinkCheck {\n url: string\n status: number | null\n error?: string\n appSlug: string\n linkType: 'appUrl' | 'sources' | 'accessRequest.urls'\n}\n\ninterface CheckLinksOptions {\n maxConcurrent?: number\n timeout?: number\n maxRetries?: number\n onProgress?: (result: LinkCheck) => void\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction classifyNetworkError(err: unknown): string {\n // Node's fetch wraps the real error in error.cause\n const cause =\n err instanceof Error && 'cause' in err && err.cause instanceof Error\n ? err.cause\n : null\n\n const hasCode = (obj: unknown): obj is { code: string } =>\n obj != null && typeof obj === 'object' && 'code' in obj\n\n const code =\n (hasCode(cause) ? cause.code : null) ?? (hasCode(err) ? err.code : null)\n const causeMsg = cause?.message ?? ''\n const topMsg = err instanceof Error ? err.message : String(err)\n\n if (code) {\n switch (code) {\n case 'ENOTFOUND':\n case 'EAI_AGAIN':\n return `DNS resolution failed (${code})`\n case 'ECONNREFUSED':\n return `Connection refused (${code})`\n case 'ETIMEDOUT':\n case 'ECONNRESET':\n return `Connection timeout (${code})`\n case 'ENETUNREACH':\n case 'EHOSTUNREACH':\n return `Network unreachable (${code})`\n case 'UNABLE_TO_VERIFY_LEAF_SIGNATURE':\n return `SSL certificate error: unable to verify certificate (${code})`\n case 'CERT_HAS_EXPIRED':\n return `SSL certificate error: certificate expired (${code})`\n case 'ERR_TLS_CERT_ALTNAME_INVALID':\n return `SSL certificate error: hostname mismatch (${code})`\n case 'DEPTH_ZERO_SELF_SIGNED_CERT':\n case 'SELF_SIGNED_CERT_IN_CHAIN':\n return `SSL certificate error: self-signed certificate (${code})`\n default:\n if (code.startsWith('ERR_TLS') || code.startsWith('CERT'))\n return `SSL/TLS error (${code}): ${causeMsg || topMsg}`\n return `Network error (${code}): ${causeMsg || topMsg}`\n }\n }\n\n const msg = causeMsg || topMsg\n if (/certificate/i.test(msg) || /SSL|TLS/i.test(msg))\n return `SSL/TLS error: ${msg}`\n if (/abort|timeout/i.test(msg)) return `Request timeout: ${msg}`\n if (/dns|resolve/i.test(msg)) return `DNS error: ${msg}`\n\n return causeMsg || topMsg\n}\n\nasync function checkUrlWithRetry(\n url: string,\n options: {\n timeout: number\n maxRetries: number\n },\n): Promise<{ status: number | null; error?: string }> {\n let lastError: string | undefined\n\n for (let attempt = 0; attempt <= options.maxRetries; attempt++) {\n try {\n const response = await fetch(url, {\n method: 'HEAD',\n redirect: 'manual', // Don't follow redirects\n signal: AbortSignal.timeout(options.timeout),\n })\n return { status: response.status }\n } catch (error: unknown) {\n const errorMessage = classifyNetworkError(error)\n lastError = errorMessage\n\n // Check if it's a retryable error (timeout or transient network issues)\n const isRetryable =\n errorMessage.includes('timeout') ||\n errorMessage.includes('ECONNRESET') ||\n errorMessage.includes('ETIMEDOUT') ||\n errorMessage.includes('EAI_AGAIN')\n\n if (isRetryable && attempt < options.maxRetries) {\n // Exponential backoff: 1s, 2s, 4s\n const backoffMs = 1000 * 2 ** attempt\n await sleep(backoffMs)\n continue\n }\n\n break\n }\n }\n\n return { status: null, error: lastError }\n}\n\nfunction getStatusEmoji(status: number | null): string {\n if (status === null) return '❌'\n if (status >= 200 && status < 300) return '✅'\n if (status >= 300 && status < 400) return '🔀'\n if (status === 403) return '🔒' // 403 is not an error, just forbidden\n if (status && status >= 400 && status < 500) return '⚠️'\n return '❌'\n}\n\nfunction isWorkingLink(status: number | null): boolean {\n if (status === null) return false\n // 2xx, 3xx, and 403 are considered working\n if (status >= 200 && status < 400) return true\n if (status === 403) return true\n return false\n}\n\nfunction isBrokenLink(status: number | null): boolean {\n if (status === null) return true\n // 403 is not broken\n if (status === 403) return false\n // 4xx (except 403) and 5xx are broken\n return status >= 400\n}\n\nfunction formatStatus(status: number | null, error?: string): string {\n if (status === null) {\n return `ERROR: ${error || 'Unknown error'}`\n }\n return `${status}`\n}\n\nasync function getAppsFromDb(): Promise<Resource[]> {\n const prisma = getDbClient()\n const rows = await prisma.dbResource.findMany({\n include: {\n sourceRefs: true,\n },\n })\n\n return rows.map((row) => {\n const accessRequest =\n row.accessRequest as unknown as Resource['accessRequest']\n const teams = (row.teams as unknown as string[] | null) ?? []\n const tags = (row.tags as unknown as Resource['tags']) ?? []\n const screenshotIds =\n (row.screenshotIds as unknown as Resource['screenshotIds']) ?? []\n const sources = row.sourceRefs.map((ref) => ({\n sourceSlug: ref.sourceSlug,\n url: ref.url,\n parseDate: ref.parseDate ? ref.parseDate.toISOString() : null,\n }))\n const notes = row.notes == null ? undefined : row.notes\n const appUrl = row.appUrl == null ? undefined : row.appUrl\n const iconName = row.iconName == null ? undefined : row.iconName\n const deprecated =\n row.deprecated == null\n ? undefined\n : (row.deprecated as unknown as Resource['deprecated'])\n\n return {\n id: row.id,\n slug: row.slug,\n displayName: row.displayName,\n description: row.description,\n accessRequest,\n teams,\n notes,\n tags,\n appUrl,\n iconName,\n screenshotIds,\n sources,\n deprecated,\n }\n })\n}\n\n/**\n * Check all links in the app catalog and return a report\n */\nexport async function checkAllLinks(options: CheckLinksOptions = {}): Promise<{\n total: number\n working: number\n broken: number\n redirects: number\n checks: LinkCheck[]\n}> {\n const {\n maxConcurrent = 10,\n timeout = 60000,\n maxRetries = 3,\n onProgress,\n } = options\n\n const apps = await getAppsFromDb()\n const checks: Omit<LinkCheck, 'status' | 'error'>[] = []\n\n // Collect all links\n for (const app of apps) {\n // Check appUrl\n if (app.appUrl) {\n checks.push({\n url: app.appUrl,\n appSlug: app.slug,\n linkType: 'appUrl',\n })\n }\n\n // Check sources\n if (app.sources && app.sources.length > 0) {\n for (const source of app.sources) {\n const url = typeof source === 'string' ? source : source.url\n checks.push({\n url,\n appSlug: app.slug,\n linkType: 'sources',\n })\n }\n }\n\n // Check accessRequest.urls\n if (app.accessRequest?.urls && app.accessRequest.urls.length > 0) {\n for (const link of app.accessRequest.urls) {\n checks.push({\n url: link.url,\n appSlug: app.slug,\n linkType: 'accessRequest.urls',\n })\n }\n }\n }\n\n // Check all links with concurrency control\n const results: LinkCheck[] = []\n const queue = [...checks]\n const inProgress = new Set<Promise<void>>()\n\n while (queue.length > 0 || inProgress.size > 0) {\n // Start new requests up to maxConcurrent\n while (queue.length > 0 && inProgress.size < maxConcurrent) {\n const check = queue.shift()!\n\n const promise = (async () => {\n const result = await checkUrlWithRetry(check.url, {\n timeout,\n maxRetries,\n })\n\n const linkCheck: LinkCheck = {\n ...check,\n status: result.status,\n error: result.error,\n }\n results.push(linkCheck)\n\n // Stream result if callback provided\n if (onProgress) {\n onProgress(linkCheck)\n }\n })()\n\n inProgress.add(promise)\n\n // Clean up when promise completes\n void promise.finally(() => {\n inProgress.delete(promise)\n })\n }\n\n // Wait for at least one to complete before continuing\n if (inProgress.size > 0) {\n await Promise.race(inProgress)\n }\n }\n\n const working = results.filter((r) => isWorkingLink(r.status))\n const broken = results.filter((r) => isBrokenLink(r.status))\n const redirects = results.filter(\n (r) => r.status && r.status >= 300 && r.status < 400,\n )\n\n return {\n total: results.length,\n working: working.length,\n broken: broken.length,\n redirects: redirects.length,\n checks: results,\n }\n}\n\n/**\n * Print a formatted report of link check results\n */\nexport function printLinkCheckReport(report: {\n total: number\n working: number\n broken: number\n redirects: number\n checks: LinkCheck[]\n}): void {\n console.log('📊 Results:\\n')\n console.log(`✅ Working links: ${report.working}`)\n console.log(`❌ Broken links: ${report.broken}`)\n console.log(`🔀 Redirects: ${report.redirects}`)\n console.log()\n\n const broken = report.checks.filter((r) => isBrokenLink(r.status))\n const redirects = report.checks.filter(\n (r) => r.status && r.status >= 300 && r.status < 400,\n )\n\n // Show broken links\n if (broken.length > 0) {\n console.log('❌ Broken Links:\\n')\n for (const link of broken) {\n console.log(\n ` ${getStatusEmoji(link.status)} [${link.appSlug}] ${link.linkType}`,\n )\n console.log(` ${link.url}`)\n console.log(` Status: ${formatStatus(link.status, link.error)}`)\n console.log()\n }\n }\n\n // Show redirects\n if (redirects.length > 0) {\n console.log('🔀 Redirects:\\n')\n for (const link of redirects) {\n console.log(\n ` ${getStatusEmoji(link.status)} [${link.appSlug}] ${link.linkType}`,\n )\n console.log(` ${link.url}`)\n console.log(` Status: ${formatStatus(link.status, link.error)}`)\n console.log()\n }\n }\n\n // Summary by app\n const appStats = new Map<\n string,\n { working: number; broken: number; total: number }\n >()\n for (const result of report.checks) {\n const stats = appStats.get(result.appSlug) || {\n working: 0,\n broken: 0,\n total: 0,\n }\n stats.total++\n if (isWorkingLink(result.status)) {\n stats.working++\n } else {\n stats.broken++\n }\n appStats.set(result.appSlug, stats)\n }\n\n const appsWithBrokenLinks = Array.from(appStats.entries())\n .filter(([_, stats]) => stats.broken > 0)\n .sort((a, b) => b[1].broken - a[1].broken)\n\n if (appsWithBrokenLinks.length > 0) {\n console.log('📱 Apps with broken links:\\n')\n for (const [appSlug, stats] of appsWithBrokenLinks) {\n console.log(` ${appSlug}: ${stats.broken}/${stats.total} broken`)\n }\n console.log()\n }\n\n if (broken.length > 0) {\n console.log(`\\n❌ Found ${broken.length} broken link(s)`)\n } else {\n console.log('\\n✅ All links are working!')\n }\n}\n"],"mappings":"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"}
@@ -6,10 +6,10 @@ import { omit } from "radashi";
6
6
  async function getGroupingTagDefinitionsFromPrisma() {
7
7
  const prisma = getDbClient();
8
8
  const rows = await prisma.dbAppTagDefinition.findMany();
9
- const apps = await prisma.dbAppForCatalog.findMany({ select: { tags: true } });
9
+ const resources = await prisma.dbResource.findMany({ select: { tags: true } });
10
10
  const tagCounts = /* @__PURE__ */ new Map();
11
- for (const app of apps) {
12
- const tags = app.tags ?? [];
11
+ for (const resource of resources) {
12
+ const tags = resource.tags ?? [];
13
13
  for (const tag of tags) {
14
14
  const [prefix, value] = tag.split(":");
15
15
  if (prefix && value) {
@@ -72,7 +72,7 @@ async function getApprovalMethodsFromPrisma() {
72
72
  }
73
73
  });
74
74
  }
75
- function rowToAppForCatalog(row) {
75
+ function rowToResource(row) {
76
76
  const accessRequest = row.accessRequest;
77
77
  const teams = row.teams ?? [];
78
78
  const tags = row.tags ?? [];
@@ -94,6 +94,7 @@ function rowToAppForCatalog(row) {
94
94
  return {
95
95
  id: row.id,
96
96
  slug: row.slug,
97
+ type: row.type,
97
98
  displayName: row.displayName,
98
99
  abbreviation,
99
100
  nicknames,
@@ -109,11 +110,19 @@ function rowToAppForCatalog(row) {
109
110
  deprecated,
110
111
  aiPrompt,
111
112
  urlIssues,
112
- tiers
113
+ tiers,
114
+ parentSlug: row.parentSlug ?? void 0,
115
+ tier: row.tier ?? void 0,
116
+ familySlug: row.familySlug ?? void 0,
117
+ aliases: row.aliases.length ? row.aliases : void 0,
118
+ ownerPersonSlug: row.ownerPersonSlug ?? void 0,
119
+ accessMaintainerGroupSlugs: row.accessMaintainerGroupSlugs.length ? row.accessMaintainerGroupSlugs : void 0,
120
+ accessComments: row.accessComments ?? void 0,
121
+ extra: row.extra ? row.extra : void 0
113
122
  };
114
123
  }
115
- async function getAppsFromPrisma() {
116
- return (await getDbClient().dbAppForCatalog.findMany({ include: { sourceRefs: true } })).map(rowToAppForCatalog);
124
+ async function getResourcesFromPrisma() {
125
+ return (await getDbClient().dbResource.findMany({ include: { sourceRefs: true } })).map(rowToResource);
117
126
  }
118
127
  async function updateApp(input) {
119
128
  const prisma = getDbClient();
@@ -125,7 +134,7 @@ async function updateApp(input) {
125
134
  if (data.appUrl !== void 0) updatePayload.appUrl = data.appUrl;
126
135
  if (data.description !== void 0) updatePayload.description = data.description;
127
136
  if (data.aiPrompt !== void 0) updatePayload.aiPrompt = data.aiPrompt;
128
- const updated = await prisma.dbAppForCatalog.update({
137
+ const updated = await prisma.dbResource.update({
129
138
  where: { id },
130
139
  data: updatePayload,
131
140
  include: { sourceRefs: true }
@@ -138,20 +147,20 @@ async function updateApp(input) {
138
147
  create: { slug: sourceSlug },
139
148
  update: {}
140
149
  });
141
- await prisma.sourceReference.deleteMany({ where: { appId: updated.id } });
150
+ await prisma.sourceReference.deleteMany({ where: { resourceId: updated.id } });
142
151
  if (urls.length > 0) await prisma.sourceReference.createMany({ data: urls.map((url) => ({
143
- appId: updated.id,
152
+ resourceId: updated.id,
144
153
  sourceSlug: parseSourceSlug(url),
145
154
  url: url.trim()
146
155
  })) });
147
- const refetched = await prisma.dbAppForCatalog.findUnique({
156
+ const refetched = await prisma.dbResource.findUnique({
148
157
  where: { id },
149
158
  include: { sourceRefs: true }
150
159
  });
151
- if (!refetched) throw new Error("App not found after update");
152
- return rowToAppForCatalog(refetched);
160
+ if (!refetched) throw new Error("Resource not found after update");
161
+ return rowToResource(refetched);
153
162
  }
154
- return rowToAppForCatalog(updated);
163
+ return rowToResource(updated);
155
164
  }
156
165
  async function getPersonsFromPrisma() {
157
166
  return (await getDbClient().dbPerson.findMany()).map((row) => ({
@@ -169,30 +178,13 @@ async function getGroupsFromPrisma() {
169
178
  memberSlugs: row.memberships.map((m) => m.personSlug)
170
179
  }));
171
180
  }
172
- async function getSubResourcesFromPrisma() {
173
- return (await getDbClient().dbSubResource.findMany()).map((row) => ({
174
- slug: row.slug,
175
- displayName: row.displayName,
176
- description: row.description ?? void 0,
177
- appSlug: row.appSlug,
178
- familySlug: row.familySlug ?? void 0,
179
- tierSlug: row.tierSlug ?? void 0,
180
- aliases: row.aliases,
181
- ownerPersonSlug: row.ownerPersonSlug ?? void 0,
182
- accessMaintainerGroupSlugs: row.accessMaintainerGroupSlugs,
183
- accessRequest: row.accessRequest ? row.accessRequest : void 0,
184
- accessComments: row.accessComments ?? void 0,
185
- extra: row.extra ? row.extra : void 0
186
- }));
187
- }
188
- async function getAppCatalogData(getAppsOptional) {
181
+ async function getAppCatalogData(getResourcesOptional) {
189
182
  return {
190
- apps: getAppsOptional ? await getAppsOptional() : await getAppsFromPrisma(),
183
+ resources: getResourcesOptional ? await getResourcesOptional() : await getResourcesFromPrisma(),
191
184
  tagsDefinitions: await getGroupingTagDefinitionsFromPrisma(),
192
185
  approvalMethods: await getApprovalMethodsFromPrisma(),
193
186
  persons: await getPersonsFromPrisma(),
194
- groups: await getGroupsFromPrisma(),
195
- subResources: await getSubResourcesFromPrisma()
187
+ groups: await getGroupsFromPrisma()
196
188
  };
197
189
  }
198
190
 
@@ -1 +1 @@
1
- {"version":3,"file":"service.mjs","names":[],"sources":["../../../src/modules/appCatalog/service.ts"],"sourcesContent":["import { getDbClient } from '../../db/client'\nimport type { Prisma } from '../../generated/prisma/client'\nimport type {\n AppApprovalMethod,\n AppCatalogData,\n AppCategory,\n AppForCatalog,\n GroupingTagDefinition,\n} from '../../types/common/appCatalogTypes'\nimport type {\n CustomConfig,\n ServiceConfig,\n} from '../../types/common/approvalMethodTypes'\nimport type { Group, Person } from '../../types/common/personGroupTypes'\nimport type { SubResource } from '../../types/common/subResourceTypes'\nimport { omit } from 'radashi'\nimport { parseSourceSlug } from '../../utils/parseSourceSlug'\n\n/** Prisma query result for DbAppForCatalog with sourceRefs included (used by rowToAppForCatalog) */\ntype AppRowWithSourceRefs = Prisma.DbAppForCatalogGetPayload<{\n include: { sourceRefs: true }\n}>\n\nfunction capitalize(word: string): string {\n if (!word) return word\n return word.charAt(0).toUpperCase() + word.slice(1)\n}\n\nexport async function getGroupingTagDefinitionsFromPrisma(): Promise<\n GroupingTagDefinition[]\n> {\n const prisma = getDbClient()\n\n // Fetch all tag definitions\n const rows = await prisma.dbAppTagDefinition.findMany()\n\n // Fetch all apps to count tag usage\n const apps = await prisma.dbAppForCatalog.findMany({\n select: { tags: true },\n })\n\n // Count tag values across all apps\n const tagCounts = new Map<string, Map<string, number>>()\n\n for (const app of apps) {\n const tags = (app.tags as unknown as string[] | null) ?? []\n for (const tag of tags) {\n const [prefix, value] = tag.split(':')\n if (prefix && value) {\n if (!tagCounts.has(prefix)) {\n tagCounts.set(prefix, new Map())\n }\n const prefixCounts = tagCounts.get(prefix)!\n prefixCounts.set(value, (prefixCounts.get(value) ?? 0) + 1)\n }\n }\n }\n\n // Sort values by count and return definitions\n return rows.map((row) => {\n const definition = omit(row, ['id', 'updatedAt', 'createdAt'])\n const counts = tagCounts.get(definition.prefix) ?? new Map()\n\n // Sort values by count (descending)\n const sortedValues = [...definition.values].sort((a, b) => {\n const countA = counts.get(a.value) ?? 0\n const countB = counts.get(b.value) ?? 0\n return countB - countA\n })\n\n return {\n ...definition,\n values: sortedValues,\n }\n })\n}\n\nexport async function getApprovalMethodsFromPrisma(): Promise<\n AppApprovalMethod[]\n> {\n const prisma = getDbClient()\n\n // Fetch all apps\n const rows = await prisma.dbApprovalMethod.findMany()\n\n return rows.map((row) => {\n // Handle discriminated union by explicitly narrowing based on type\n const baseFields = {\n slug: row.slug,\n displayName: row.displayName,\n }\n\n // Provide default empty config if null, as AppApprovalMethod discriminated union requires config\n const config = row.config ?? {}\n\n switch (row.type) {\n case 'service':\n return {\n ...baseFields,\n type: 'service' as const,\n config: config as ServiceConfig,\n }\n case 'custom':\n return {\n ...baseFields,\n type: 'custom' as const,\n config: config as CustomConfig,\n }\n case 'noAccessRequired':\n return {\n ...baseFields,\n type: 'noAccessRequired' as const,\n config: config as CustomConfig,\n }\n case 'unknown':\n return {\n ...baseFields,\n type: 'unknown' as const,\n config: config as CustomConfig,\n }\n case 'personTeam':\n // Legacy: map personTeam to custom\n return {\n ...baseFields,\n type: 'custom' as const,\n config: config as CustomConfig,\n }\n }\n })\n}\n\nfunction rowToAppForCatalog(row: AppRowWithSourceRefs): AppForCatalog {\n const accessRequest =\n row.accessRequest as unknown as AppForCatalog['accessRequest']\n const teams = (row.teams as unknown as string[] | null) ?? []\n const tags = (row.tags as unknown as AppForCatalog['tags']) ?? []\n const screenshotIds =\n (row.screenshotIds as unknown as AppForCatalog['screenshotIds']) ?? []\n const sources = row.sourceRefs.map((ref) => ({\n sourceSlug: ref.sourceSlug,\n url: ref.url,\n parseDate: ref.parseDate ? ref.parseDate.toISOString() : null,\n }))\n const notes = row.notes == null ? undefined : row.notes\n const appUrl = row.appUrl == null ? undefined : row.appUrl\n const iconName = row.iconName == null ? undefined : row.iconName\n const abbreviation = row.abbreviation == null ? undefined : row.abbreviation\n const nicknames = (row.nicknames as unknown as string[] | null)?.length\n ? (row.nicknames as unknown as string[])\n : undefined\n const deprecated =\n row.deprecated == null\n ? undefined\n : (row.deprecated as unknown as AppForCatalog['deprecated'])\n const aiPrompt = row.aiPrompt == null ? undefined : row.aiPrompt\n const urlIssues = (row.urlIssues as unknown as string[] | null)?.length\n ? (row.urlIssues as unknown as string[])\n : undefined\n const tiers =\n row.tiers == null\n ? undefined\n : (row.tiers as unknown as AppForCatalog['tiers'])\n\n return {\n id: row.id,\n slug: row.slug,\n displayName: row.displayName,\n abbreviation,\n nicknames,\n description: row.description,\n accessRequest,\n teams,\n notes,\n tags,\n appUrl,\n iconName,\n screenshotIds,\n sources,\n deprecated,\n aiPrompt,\n urlIssues,\n tiers,\n }\n}\n\nexport async function getAppsFromPrisma(): Promise<AppForCatalog[]> {\n const prisma = getDbClient()\n\n const rows = await prisma.dbAppForCatalog.findMany({\n include: {\n sourceRefs: true,\n },\n })\n\n return rows.map(rowToAppForCatalog)\n}\n\nexport interface UpdateAppInput {\n id: string\n data: {\n displayName?: string\n abbreviation?: string | null\n slug?: string\n appUrl?: string\n description?: string\n sources?: string[]\n aiPrompt?: string | null\n }\n}\n\nexport async function updateApp(input: UpdateAppInput): Promise<AppForCatalog> {\n const prisma = getDbClient()\n const { id, data } = input\n\n const updatePayload: {\n displayName?: string\n abbreviation?: string | null\n slug?: string\n appUrl?: string\n description?: string\n aiPrompt?: string | null\n } = {}\n if (data.displayName !== undefined)\n updatePayload.displayName = data.displayName\n if (data.abbreviation !== undefined)\n updatePayload.abbreviation = data.abbreviation\n if (data.slug !== undefined) updatePayload.slug = data.slug\n if (data.appUrl !== undefined) updatePayload.appUrl = data.appUrl\n if (data.description !== undefined)\n updatePayload.description = data.description\n if (data.aiPrompt !== undefined) updatePayload.aiPrompt = data.aiPrompt\n\n const updated = await prisma.dbAppForCatalog.update({\n where: { id },\n data: updatePayload,\n include: { sourceRefs: true },\n })\n\n if (data.sources !== undefined) {\n const urls = [...new Set(data.sources.map((u) => u.trim()).filter(Boolean))]\n const uniqueSourceSlugs = [...new Set(urls.map(parseSourceSlug))]\n\n for (const sourceSlug of uniqueSourceSlugs) {\n await prisma.source.upsert({\n where: { slug: sourceSlug },\n create: { slug: sourceSlug },\n update: {},\n })\n }\n\n await prisma.sourceReference.deleteMany({\n where: { appId: updated.id },\n })\n\n if (urls.length > 0) {\n await prisma.sourceReference.createMany({\n data: urls.map((url) => ({\n appId: updated.id,\n sourceSlug: parseSourceSlug(url),\n url: url.trim(),\n })),\n })\n }\n\n const refetched = await prisma.dbAppForCatalog.findUnique({\n where: { id },\n include: { sourceRefs: true },\n })\n if (!refetched) throw new Error('App not found after update')\n return rowToAppForCatalog(refetched)\n }\n\n return rowToAppForCatalog(updated)\n}\n\nexport function deriveCategories(apps: AppForCatalog[]): AppCategory[] {\n const tagSet = new Set<string>()\n for (const app of apps) {\n for (const tag of app.tags ?? []) {\n const normalized = tag.trim().toLowerCase()\n if (normalized) tagSet.add(normalized)\n }\n }\n const categories: AppCategory[] = [{ id: 'all', name: 'All' }]\n for (const tag of Array.from(tagSet).sort()) {\n categories.push({ id: tag, name: capitalize(tag) })\n }\n return categories\n}\n\nexport async function getPersonsFromPrisma(): Promise<Person[]> {\n const prisma = getDbClient()\n const rows = await prisma.dbPerson.findMany()\n return rows.map((row) => ({\n slug: row.slug,\n firstName: row.firstName,\n lastName: row.lastName,\n email: row.email ?? undefined,\n }))\n}\n\nexport async function getGroupsFromPrisma(): Promise<Group[]> {\n const prisma = getDbClient()\n const rows = await prisma.dbGroup.findMany({\n include: { memberships: true },\n })\n return rows.map((row) => ({\n slug: row.slug,\n displayName: row.displayName ?? undefined,\n email: row.email ?? undefined,\n memberSlugs: row.memberships.map((m) => m.personSlug),\n }))\n}\n\nexport async function getSubResourcesFromPrisma(): Promise<SubResource[]> {\n const prisma = getDbClient()\n const rows = await prisma.dbSubResource.findMany()\n return rows.map((row) => ({\n slug: row.slug,\n displayName: row.displayName,\n description: row.description ?? undefined,\n appSlug: row.appSlug,\n familySlug: row.familySlug ?? undefined,\n tierSlug: row.tierSlug ?? undefined,\n aliases: row.aliases as unknown as string[],\n ownerPersonSlug: row.ownerPersonSlug ?? undefined,\n accessMaintainerGroupSlugs:\n row.accessMaintainerGroupSlugs as unknown as string[],\n accessRequest: row.accessRequest\n ? (row.accessRequest as unknown as SubResource['accessRequest'])\n : undefined,\n accessComments: row.accessComments ?? undefined,\n extra: row.extra\n ? (row.extra as unknown as Record<string, unknown>)\n : undefined,\n }))\n}\n\nexport async function getAppCatalogData(\n getAppsOptional?: () => Promise<AppForCatalog[]>,\n): Promise<AppCatalogData> {\n const apps = getAppsOptional\n ? await getAppsOptional()\n : await getAppsFromPrisma()\n\n return {\n apps,\n tagsDefinitions: await getGroupingTagDefinitionsFromPrisma(),\n approvalMethods: await getApprovalMethodsFromPrisma(),\n persons: await getPersonsFromPrisma(),\n groups: await getGroupsFromPrisma(),\n subResources: await getSubResourcesFromPrisma(),\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"service.mjs","names":[],"sources":["../../../src/modules/appCatalog/service.ts"],"sourcesContent":["import { getDbClient } from '../../db/client'\nimport type { Prisma } from '../../generated/prisma/client'\nimport type {\n AppApprovalMethod,\n AppCatalogData,\n AppCategory,\n GroupingTagDefinition,\n Resource,\n} from '../../types/common/appCatalogTypes'\nimport type {\n CustomConfig,\n ServiceConfig,\n} from '../../types/common/approvalMethodTypes'\nimport type { Group, Person } from '../../types/common/personGroupTypes'\nimport { omit } from 'radashi'\nimport { parseSourceSlug } from '../../utils/parseSourceSlug'\n\n/** Prisma query result for DbResource with sourceRefs included (used by rowToResource) */\ntype ResourceRowWithSourceRefs = Prisma.DbResourceGetPayload<{\n include: { sourceRefs: true }\n}>\n\nfunction capitalize(word: string): string {\n if (!word) return word\n return word.charAt(0).toUpperCase() + word.slice(1)\n}\n\nexport async function getGroupingTagDefinitionsFromPrisma(): Promise<\n GroupingTagDefinition[]\n> {\n const prisma = getDbClient()\n\n // Fetch all tag definitions\n const rows = await prisma.dbAppTagDefinition.findMany()\n\n // Fetch all resources to count tag usage\n const resources = await prisma.dbResource.findMany({\n select: { tags: true },\n })\n\n // Count tag values across all resources\n const tagCounts = new Map<string, Map<string, number>>()\n\n for (const resource of resources) {\n const tags = (resource.tags as unknown as string[] | null) ?? []\n for (const tag of tags) {\n const [prefix, value] = tag.split(':')\n if (prefix && value) {\n if (!tagCounts.has(prefix)) {\n tagCounts.set(prefix, new Map())\n }\n const prefixCounts = tagCounts.get(prefix)!\n prefixCounts.set(value, (prefixCounts.get(value) ?? 0) + 1)\n }\n }\n }\n\n // Sort values by count and return definitions\n return rows.map((row) => {\n const definition = omit(row, ['id', 'updatedAt', 'createdAt'])\n const counts = tagCounts.get(definition.prefix) ?? new Map()\n\n // Sort values by count (descending)\n const sortedValues = [...definition.values].sort((a, b) => {\n const countA = counts.get(a.value) ?? 0\n const countB = counts.get(b.value) ?? 0\n return countB - countA\n })\n\n return {\n ...definition,\n values: sortedValues,\n }\n })\n}\n\nexport async function getApprovalMethodsFromPrisma(): Promise<\n AppApprovalMethod[]\n> {\n const prisma = getDbClient()\n\n // Fetch all approval methods\n const rows = await prisma.dbApprovalMethod.findMany()\n\n return rows.map((row) => {\n // Handle discriminated union by explicitly narrowing based on type\n const baseFields = {\n slug: row.slug,\n displayName: row.displayName,\n }\n\n // Provide default empty config if null, as AppApprovalMethod discriminated union requires config\n const config = row.config ?? {}\n\n switch (row.type) {\n case 'service':\n return {\n ...baseFields,\n type: 'service' as const,\n config: config as ServiceConfig,\n }\n case 'custom':\n return {\n ...baseFields,\n type: 'custom' as const,\n config: config as CustomConfig,\n }\n case 'noAccessRequired':\n return {\n ...baseFields,\n type: 'noAccessRequired' as const,\n config: config as CustomConfig,\n }\n case 'unknown':\n return {\n ...baseFields,\n type: 'unknown' as const,\n config: config as CustomConfig,\n }\n case 'personTeam':\n // Legacy: map personTeam to custom\n return {\n ...baseFields,\n type: 'custom' as const,\n config: config as CustomConfig,\n }\n }\n })\n}\n\nfunction rowToResource(row: ResourceRowWithSourceRefs): Resource {\n const accessRequest =\n row.accessRequest as unknown as Resource['accessRequest']\n const teams = (row.teams as unknown as string[] | null) ?? []\n const tags = (row.tags as unknown as Resource['tags']) ?? []\n const screenshotIds =\n (row.screenshotIds as unknown as Resource['screenshotIds']) ?? []\n const sources = row.sourceRefs.map((ref) => ({\n sourceSlug: ref.sourceSlug,\n url: ref.url,\n parseDate: ref.parseDate ? ref.parseDate.toISOString() : null,\n }))\n const notes = row.notes == null ? undefined : row.notes\n const appUrl = row.appUrl == null ? undefined : row.appUrl\n const iconName = row.iconName == null ? undefined : row.iconName\n const abbreviation = row.abbreviation == null ? undefined : row.abbreviation\n const nicknames = (row.nicknames as unknown as string[] | null)?.length\n ? (row.nicknames as unknown as string[])\n : undefined\n const deprecated =\n row.deprecated == null\n ? undefined\n : (row.deprecated as unknown as Resource['deprecated'])\n const aiPrompt = row.aiPrompt == null ? undefined : row.aiPrompt\n const urlIssues = (row.urlIssues as unknown as string[] | null)?.length\n ? (row.urlIssues as unknown as string[])\n : undefined\n const tiers =\n row.tiers == null ? undefined : (row.tiers as unknown as Resource['tiers'])\n\n return {\n id: row.id,\n slug: row.slug,\n type: row.type,\n displayName: row.displayName,\n abbreviation,\n nicknames,\n description: row.description,\n accessRequest,\n teams,\n notes,\n tags,\n appUrl,\n iconName,\n screenshotIds,\n sources,\n deprecated,\n aiPrompt,\n urlIssues,\n tiers,\n // Fields from former SubResource\n parentSlug: row.parentSlug ?? undefined,\n tier: row.tier ?? undefined,\n familySlug: row.familySlug ?? undefined,\n aliases: row.aliases.length ? row.aliases : undefined,\n ownerPersonSlug: row.ownerPersonSlug ?? undefined,\n accessMaintainerGroupSlugs: row.accessMaintainerGroupSlugs.length\n ? row.accessMaintainerGroupSlugs\n : undefined,\n accessComments: row.accessComments ?? undefined,\n extra: row.extra\n ? (row.extra as unknown as Record<string, unknown>)\n : undefined,\n }\n}\n\nexport async function getResourcesFromPrisma(): Promise<Resource[]> {\n const prisma = getDbClient()\n\n const rows = await prisma.dbResource.findMany({\n include: {\n sourceRefs: true,\n },\n })\n\n return rows.map(rowToResource)\n}\n\n/** @deprecated Use getResourcesFromPrisma instead */\nexport const getAppsFromPrisma = getResourcesFromPrisma\n\nexport interface UpdateAppInput {\n id: string\n data: {\n displayName?: string\n abbreviation?: string | null\n slug?: string\n appUrl?: string\n description?: string\n sources?: string[]\n aiPrompt?: string | null\n }\n}\n\nexport async function updateApp(input: UpdateAppInput): Promise<Resource> {\n const prisma = getDbClient()\n const { id, data } = input\n\n const updatePayload: {\n displayName?: string\n abbreviation?: string | null\n slug?: string\n appUrl?: string\n description?: string\n aiPrompt?: string | null\n } = {}\n if (data.displayName !== undefined)\n updatePayload.displayName = data.displayName\n if (data.abbreviation !== undefined)\n updatePayload.abbreviation = data.abbreviation\n if (data.slug !== undefined) updatePayload.slug = data.slug\n if (data.appUrl !== undefined) updatePayload.appUrl = data.appUrl\n if (data.description !== undefined)\n updatePayload.description = data.description\n if (data.aiPrompt !== undefined) updatePayload.aiPrompt = data.aiPrompt\n\n const updated = await prisma.dbResource.update({\n where: { id },\n data: updatePayload,\n include: { sourceRefs: true },\n })\n\n if (data.sources !== undefined) {\n const urls = [...new Set(data.sources.map((u) => u.trim()).filter(Boolean))]\n const uniqueSourceSlugs = [...new Set(urls.map(parseSourceSlug))]\n\n for (const sourceSlug of uniqueSourceSlugs) {\n await prisma.source.upsert({\n where: { slug: sourceSlug },\n create: { slug: sourceSlug },\n update: {},\n })\n }\n\n await prisma.sourceReference.deleteMany({\n where: { resourceId: updated.id },\n })\n\n if (urls.length > 0) {\n await prisma.sourceReference.createMany({\n data: urls.map((url) => ({\n resourceId: updated.id,\n sourceSlug: parseSourceSlug(url),\n url: url.trim(),\n })),\n })\n }\n\n const refetched = await prisma.dbResource.findUnique({\n where: { id },\n include: { sourceRefs: true },\n })\n if (!refetched) throw new Error('Resource not found after update')\n return rowToResource(refetched)\n }\n\n return rowToResource(updated)\n}\n\nexport function deriveCategories(resources: Resource[]): AppCategory[] {\n const tagSet = new Set<string>()\n for (const resource of resources) {\n for (const tag of resource.tags ?? []) {\n const normalized = tag.trim().toLowerCase()\n if (normalized) tagSet.add(normalized)\n }\n }\n const categories: AppCategory[] = [{ id: 'all', name: 'All' }]\n for (const tag of Array.from(tagSet).sort()) {\n categories.push({ id: tag, name: capitalize(tag) })\n }\n return categories\n}\n\nexport async function getPersonsFromPrisma(): Promise<Person[]> {\n const prisma = getDbClient()\n const rows = await prisma.dbPerson.findMany()\n return rows.map((row) => ({\n slug: row.slug,\n firstName: row.firstName,\n lastName: row.lastName,\n email: row.email ?? undefined,\n }))\n}\n\nexport async function getGroupsFromPrisma(): Promise<Group[]> {\n const prisma = getDbClient()\n const rows = await prisma.dbGroup.findMany({\n include: { memberships: true },\n })\n return rows.map((row) => ({\n slug: row.slug,\n displayName: row.displayName ?? undefined,\n email: row.email ?? undefined,\n memberSlugs: row.memberships.map((m) => m.personSlug),\n }))\n}\n\nexport async function getAppCatalogData(\n getResourcesOptional?: () => Promise<Resource[]>,\n): Promise<AppCatalogData> {\n const resources = getResourcesOptional\n ? await getResourcesOptional()\n : await getResourcesFromPrisma()\n\n return {\n resources,\n tagsDefinitions: await getGroupingTagDefinitionsFromPrisma(),\n approvalMethods: await getApprovalMethodsFromPrisma(),\n persons: await getPersonsFromPrisma(),\n groups: await getGroupsFromPrisma(),\n }\n}\n"],"mappings":";;;;;AA2BA,eAAsB,sCAEpB;CACA,MAAM,SAAS,aAAa;CAG5B,MAAM,OAAO,MAAM,OAAO,mBAAmB,UAAU;CAGvD,MAAM,YAAY,MAAM,OAAO,WAAW,SAAS,EACjD,QAAQ,EAAE,MAAM,MAAM,EACvB,CAAC;CAGF,MAAM,4BAAY,IAAI,KAAkC;AAExD,MAAK,MAAM,YAAY,WAAW;EAChC,MAAM,OAAQ,SAAS,QAAuC,EAAE;AAChE,OAAK,MAAM,OAAO,MAAM;GACtB,MAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,IAAI;AACtC,OAAI,UAAU,OAAO;AACnB,QAAI,CAAC,UAAU,IAAI,OAAO,CACxB,WAAU,IAAI,wBAAQ,IAAI,KAAK,CAAC;IAElC,MAAM,eAAe,UAAU,IAAI,OAAO;AAC1C,iBAAa,IAAI,QAAQ,aAAa,IAAI,MAAM,IAAI,KAAK,EAAE;;;;AAMjE,QAAO,KAAK,KAAK,QAAQ;EACvB,MAAM,aAAa,KAAK,KAAK;GAAC;GAAM;GAAa;GAAY,CAAC;EAC9D,MAAM,SAAS,UAAU,IAAI,WAAW,OAAO,oBAAI,IAAI,KAAK;EAG5D,MAAM,eAAe,CAAC,GAAG,WAAW,OAAO,CAAC,MAAM,GAAG,MAAM;GACzD,MAAM,SAAS,OAAO,IAAI,EAAE,MAAM,IAAI;AAEtC,WADe,OAAO,IAAI,EAAE,MAAM,IAAI,KACtB;IAChB;AAEF,SAAO;GACL,GAAG;GACH,QAAQ;GACT;GACD;;AAGJ,eAAsB,+BAEpB;AAMA,SAFa,MAHE,aAAa,CAGF,iBAAiB,UAAU,EAEzC,KAAK,QAAQ;EAEvB,MAAM,aAAa;GACjB,MAAM,IAAI;GACV,aAAa,IAAI;GAClB;EAGD,MAAM,SAAS,IAAI,UAAU,EAAE;AAE/B,UAAQ,IAAI,MAAZ;GACE,KAAK,UACH,QAAO;IACL,GAAG;IACH,MAAM;IACE;IACT;GACH,KAAK,SACH,QAAO;IACL,GAAG;IACH,MAAM;IACE;IACT;GACH,KAAK,mBACH,QAAO;IACL,GAAG;IACH,MAAM;IACE;IACT;GACH,KAAK,UACH,QAAO;IACL,GAAG;IACH,MAAM;IACE;IACT;GACH,KAAK,aAEH,QAAO;IACL,GAAG;IACH,MAAM;IACE;IACT;;GAEL;;AAGJ,SAAS,cAAc,KAA0C;CAC/D,MAAM,gBACJ,IAAI;CACN,MAAM,QAAS,IAAI,SAAwC,EAAE;CAC7D,MAAM,OAAQ,IAAI,QAAwC,EAAE;CAC5D,MAAM,gBACH,IAAI,iBAA0D,EAAE;CACnE,MAAM,UAAU,IAAI,WAAW,KAAK,SAAS;EAC3C,YAAY,IAAI;EAChB,KAAK,IAAI;EACT,WAAW,IAAI,YAAY,IAAI,UAAU,aAAa,GAAG;EAC1D,EAAE;CACH,MAAM,QAAQ,IAAI,SAAS,OAAO,SAAY,IAAI;CAClD,MAAM,SAAS,IAAI,UAAU,OAAO,SAAY,IAAI;CACpD,MAAM,WAAW,IAAI,YAAY,OAAO,SAAY,IAAI;CACxD,MAAM,eAAe,IAAI,gBAAgB,OAAO,SAAY,IAAI;CAChE,MAAM,YAAa,IAAI,WAA0C,SAC5D,IAAI,YACL;CACJ,MAAM,aACJ,IAAI,cAAc,OACd,SACC,IAAI;CACX,MAAM,WAAW,IAAI,YAAY,OAAO,SAAY,IAAI;CACxD,MAAM,YAAa,IAAI,WAA0C,SAC5D,IAAI,YACL;CACJ,MAAM,QACJ,IAAI,SAAS,OAAO,SAAa,IAAI;AAEvC,QAAO;EACL,IAAI,IAAI;EACR,MAAM,IAAI;EACV,MAAM,IAAI;EACV,aAAa,IAAI;EACjB;EACA;EACA,aAAa,IAAI;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,YAAY,IAAI,cAAc;EAC9B,MAAM,IAAI,QAAQ;EAClB,YAAY,IAAI,cAAc;EAC9B,SAAS,IAAI,QAAQ,SAAS,IAAI,UAAU;EAC5C,iBAAiB,IAAI,mBAAmB;EACxC,4BAA4B,IAAI,2BAA2B,SACvD,IAAI,6BACJ;EACJ,gBAAgB,IAAI,kBAAkB;EACtC,OAAO,IAAI,QACN,IAAI,QACL;EACL;;AAGH,eAAsB,yBAA8C;AASlE,SANa,MAFE,aAAa,CAEF,WAAW,SAAS,EAC5C,SAAS,EACP,YAAY,MACb,EACF,CAAC,EAEU,IAAI,cAAc;;AAmBhC,eAAsB,UAAU,OAA0C;CACxE,MAAM,SAAS,aAAa;CAC5B,MAAM,EAAE,IAAI,SAAS;CAErB,MAAM,gBAOF,EAAE;AACN,KAAI,KAAK,gBAAgB,OACvB,eAAc,cAAc,KAAK;AACnC,KAAI,KAAK,iBAAiB,OACxB,eAAc,eAAe,KAAK;AACpC,KAAI,KAAK,SAAS,OAAW,eAAc,OAAO,KAAK;AACvD,KAAI,KAAK,WAAW,OAAW,eAAc,SAAS,KAAK;AAC3D,KAAI,KAAK,gBAAgB,OACvB,eAAc,cAAc,KAAK;AACnC,KAAI,KAAK,aAAa,OAAW,eAAc,WAAW,KAAK;CAE/D,MAAM,UAAU,MAAM,OAAO,WAAW,OAAO;EAC7C,OAAO,EAAE,IAAI;EACb,MAAM;EACN,SAAS,EAAE,YAAY,MAAM;EAC9B,CAAC;AAEF,KAAI,KAAK,YAAY,QAAW;EAC9B,MAAM,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,QAAQ,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC;EAC5E,MAAM,oBAAoB,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,gBAAgB,CAAC,CAAC;AAEjE,OAAK,MAAM,cAAc,kBACvB,OAAM,OAAO,OAAO,OAAO;GACzB,OAAO,EAAE,MAAM,YAAY;GAC3B,QAAQ,EAAE,MAAM,YAAY;GAC5B,QAAQ,EAAE;GACX,CAAC;AAGJ,QAAM,OAAO,gBAAgB,WAAW,EACtC,OAAO,EAAE,YAAY,QAAQ,IAAI,EAClC,CAAC;AAEF,MAAI,KAAK,SAAS,EAChB,OAAM,OAAO,gBAAgB,WAAW,EACtC,MAAM,KAAK,KAAK,SAAS;GACvB,YAAY,QAAQ;GACpB,YAAY,gBAAgB,IAAI;GAChC,KAAK,IAAI,MAAM;GAChB,EAAE,EACJ,CAAC;EAGJ,MAAM,YAAY,MAAM,OAAO,WAAW,WAAW;GACnD,OAAO,EAAE,IAAI;GACb,SAAS,EAAE,YAAY,MAAM;GAC9B,CAAC;AACF,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,kCAAkC;AAClE,SAAO,cAAc,UAAU;;AAGjC,QAAO,cAAc,QAAQ;;AAkB/B,eAAsB,uBAA0C;AAG9D,SADa,MADE,aAAa,CACF,SAAS,UAAU,EACjC,KAAK,SAAS;EACxB,MAAM,IAAI;EACV,WAAW,IAAI;EACf,UAAU,IAAI;EACd,OAAO,IAAI,SAAS;EACrB,EAAE;;AAGL,eAAsB,sBAAwC;AAK5D,SAHa,MADE,aAAa,CACF,QAAQ,SAAS,EACzC,SAAS,EAAE,aAAa,MAAM,EAC/B,CAAC,EACU,KAAK,SAAS;EACxB,MAAM,IAAI;EACV,aAAa,IAAI,eAAe;EAChC,OAAO,IAAI,SAAS;EACpB,aAAa,IAAI,YAAY,KAAK,MAAM,EAAE,WAAW;EACtD,EAAE;;AAGL,eAAsB,kBACpB,sBACyB;AAKzB,QAAO;EACL,WALgB,uBACd,MAAM,sBAAsB,GAC5B,MAAM,wBAAwB;EAIhC,iBAAiB,MAAM,qCAAqC;EAC5D,iBAAiB,MAAM,8BAA8B;EACrD,SAAS,MAAM,sBAAsB;EACrC,QAAQ,MAAM,qBAAqB;EACpC"}
@@ -16,7 +16,7 @@ function registerScreenshotRestController(router, config) {
16
16
  try {
17
17
  const { appSlug } = req.params;
18
18
  const prisma = getDbClient();
19
- const app = await prisma.dbAppForCatalog.findUnique({
19
+ const app = await prisma.dbResource.findUnique({
20
20
  where: { slug: appSlug },
21
21
  select: { screenshotIds: true }
22
22
  });
@@ -50,7 +50,7 @@ function registerScreenshotRestController(router, config) {
50
50
  try {
51
51
  const { appSlug } = req.params;
52
52
  const prisma = getDbClient();
53
- const app = await prisma.dbAppForCatalog.findUnique({
53
+ const app = await prisma.dbResource.findUnique({
54
54
  where: { slug: appSlug },
55
55
  select: { screenshotIds: true }
56
56
  });
@@ -1 +1 @@
1
- {"version":3,"file":"screenshotRestController.mjs","names":[],"sources":["../../../src/modules/assets/screenshotRestController.ts"],"sourcesContent":["import type { Request, Response, Router } from 'express'\nimport sharp from 'sharp'\nimport { getDbClient } from '../../db'\n\nexport interface ScreenshotRestControllerConfig {\n /**\n * Base path for screenshot endpoints (e.g., '/api/screenshots')\n */\n basePath: string\n}\n\n/**\n * Registers REST endpoints for screenshot retrieval\n *\n * Endpoints:\n * - GET {basePath}/app/:appId - Get all screenshots for an app\n * - GET {basePath}/:id - Get screenshot binary by ID\n * - GET {basePath}/:id/metadata - Get screenshot metadata only\n */\nexport function registerScreenshotRestController(\n router: Router,\n config: ScreenshotRestControllerConfig,\n): void {\n const { basePath } = config\n\n // Get all screenshots for an app\n router.get(\n `${basePath}/app/:appSlug`,\n async (req: Request, res: Response) => {\n try {\n const { appSlug } = req.params\n\n const prisma = getDbClient()\n\n // Find app by slug\n const app = await prisma.dbAppForCatalog.findUnique({\n where: { slug: appSlug },\n select: { screenshotIds: true },\n })\n\n if (!app) {\n res.status(404).json({ error: 'App not found' })\n return\n }\n\n // Fetch all screenshots for the app, then sort by screenshotIds order\n const results = await prisma.dbAsset.findMany({\n where: {\n id: { in: app.screenshotIds },\n assetType: 'screenshot',\n },\n select: {\n id: true,\n name: true,\n mimeType: true,\n fileSize: true,\n width: true,\n height: true,\n createdAt: true,\n },\n })\n\n const screenshots = app.screenshotIds\n .map((id) => results.find((r) => r.id === id))\n .filter((r) => r !== undefined)\n\n res.json(screenshots)\n } catch (error) {\n console.error('Error fetching app screenshots:', error)\n res.status(500).json({ error: 'Failed to fetch screenshots' })\n }\n },\n )\n\n // Get first screenshot for an app (convenience endpoint)\n router.get(\n `${basePath}/app/:appSlug/first`,\n async (req: Request, res: Response) => {\n try {\n const { appSlug } = req.params\n\n const prisma = getDbClient()\n\n // Find app by slug\n const app = await prisma.dbAppForCatalog.findUnique({\n where: { slug: appSlug },\n select: { screenshotIds: true },\n })\n\n if (!app || app.screenshotIds.length === 0) {\n res.status(404).json({ error: 'No screenshots found' })\n return\n }\n\n // Fetch first screenshot\n const screenshot = await prisma.dbAsset.findUnique({\n where: { id: app.screenshotIds[0] },\n select: {\n id: true,\n name: true,\n mimeType: true,\n fileSize: true,\n width: true,\n height: true,\n createdAt: true,\n },\n })\n\n if (!screenshot) {\n res.status(404).json({ error: 'Screenshot not found' })\n return\n }\n\n res.json(screenshot)\n } catch (error) {\n console.error('Error fetching first screenshot:', error)\n res.status(500).json({ error: 'Failed to fetch screenshot' })\n }\n },\n )\n\n // Get screenshot binary by ID\n router.get(`${basePath}/:id`, async (req: Request, res: Response) => {\n try {\n const { id } = req.params\n const sizeParam = req.query.size as string | undefined\n const targetSize = sizeParam ? parseInt(sizeParam, 10) : undefined\n\n const prisma = getDbClient()\n const screenshot = await prisma.dbAsset.findUnique({\n where: { id },\n select: {\n content: true,\n mimeType: true,\n name: true,\n },\n })\n\n if (!screenshot) {\n res.status(404).json({ error: 'Screenshot not found' })\n return\n }\n\n let content: Uint8Array | Buffer = screenshot.content\n\n // Resize if size parameter provided\n if (targetSize && targetSize > 0) {\n try {\n content = await sharp(screenshot.content)\n .resize(targetSize, targetSize, {\n fit: 'inside',\n withoutEnlargement: true,\n })\n .toBuffer()\n } catch (resizeError) {\n console.error('Error resizing screenshot:', resizeError)\n // Fall back to original if resize fails\n }\n }\n\n // Set appropriate headers\n res.setHeader('Content-Type', screenshot.mimeType)\n res.setHeader(\n 'Content-Disposition',\n `inline; filename=\"${screenshot.name}\"`,\n )\n res.setHeader('Cache-Control', 'public, max-age=86400') // Cache for 1 day\n\n // Send binary content\n res.send(content)\n } catch (error) {\n console.error('Error fetching screenshot:', error)\n res.status(500).json({ error: 'Failed to fetch screenshot' })\n }\n })\n\n // Get screenshot metadata only (no binary content)\n router.get(\n `${basePath}/:id/metadata`,\n async (req: Request, res: Response) => {\n try {\n const { id } = req.params\n\n const prisma = getDbClient()\n const screenshot = await prisma.dbAsset.findUnique({\n where: { id },\n select: {\n id: true,\n name: true,\n mimeType: true,\n fileSize: true,\n width: true,\n height: true,\n createdAt: true,\n updatedAt: true,\n },\n })\n\n if (!screenshot) {\n res.status(404).json({ error: 'Screenshot not found' })\n return\n }\n\n res.json(screenshot)\n } catch (error) {\n console.error('Error fetching screenshot metadata:', error)\n res.status(500).json({ error: 'Failed to fetch screenshot metadata' })\n }\n },\n )\n}\n"],"mappings":";;;;;;;;;;;;AAmBA,SAAgB,iCACd,QACA,QACM;CACN,MAAM,EAAE,aAAa;AAGrB,QAAO,IACL,GAAG,SAAS,gBACZ,OAAO,KAAc,QAAkB;AACrC,MAAI;GACF,MAAM,EAAE,YAAY,IAAI;GAExB,MAAM,SAAS,aAAa;GAG5B,MAAM,MAAM,MAAM,OAAO,gBAAgB,WAAW;IAClD,OAAO,EAAE,MAAM,SAAS;IACxB,QAAQ,EAAE,eAAe,MAAM;IAChC,CAAC;AAEF,OAAI,CAAC,KAAK;AACR,QAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,iBAAiB,CAAC;AAChD;;GAIF,MAAM,UAAU,MAAM,OAAO,QAAQ,SAAS;IAC5C,OAAO;KACL,IAAI,EAAE,IAAI,IAAI,eAAe;KAC7B,WAAW;KACZ;IACD,QAAQ;KACN,IAAI;KACJ,MAAM;KACN,UAAU;KACV,UAAU;KACV,OAAO;KACP,QAAQ;KACR,WAAW;KACZ;IACF,CAAC;GAEF,MAAM,cAAc,IAAI,cACrB,KAAK,OAAO,QAAQ,MAAM,MAAM,EAAE,OAAO,GAAG,CAAC,CAC7C,QAAQ,MAAM,MAAM,OAAU;AAEjC,OAAI,KAAK,YAAY;WACd,OAAO;AACd,WAAQ,MAAM,mCAAmC,MAAM;AACvD,OAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,+BAA+B,CAAC;;GAGnE;AAGD,QAAO,IACL,GAAG,SAAS,sBACZ,OAAO,KAAc,QAAkB;AACrC,MAAI;GACF,MAAM,EAAE,YAAY,IAAI;GAExB,MAAM,SAAS,aAAa;GAG5B,MAAM,MAAM,MAAM,OAAO,gBAAgB,WAAW;IAClD,OAAO,EAAE,MAAM,SAAS;IACxB,QAAQ,EAAE,eAAe,MAAM;IAChC,CAAC;AAEF,OAAI,CAAC,OAAO,IAAI,cAAc,WAAW,GAAG;AAC1C,QAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,wBAAwB,CAAC;AACvD;;GAIF,MAAM,aAAa,MAAM,OAAO,QAAQ,WAAW;IACjD,OAAO,EAAE,IAAI,IAAI,cAAc,IAAI;IACnC,QAAQ;KACN,IAAI;KACJ,MAAM;KACN,UAAU;KACV,UAAU;KACV,OAAO;KACP,QAAQ;KACR,WAAW;KACZ;IACF,CAAC;AAEF,OAAI,CAAC,YAAY;AACf,QAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,wBAAwB,CAAC;AACvD;;AAGF,OAAI,KAAK,WAAW;WACb,OAAO;AACd,WAAQ,MAAM,oCAAoC,MAAM;AACxD,OAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,8BAA8B,CAAC;;GAGlE;AAGD,QAAO,IAAI,GAAG,SAAS,OAAO,OAAO,KAAc,QAAkB;AACnE,MAAI;GACF,MAAM,EAAE,OAAO,IAAI;GACnB,MAAM,YAAY,IAAI,MAAM;GAC5B,MAAM,aAAa,YAAY,SAAS,WAAW,GAAG,GAAG;GAGzD,MAAM,aAAa,MADJ,aAAa,CACI,QAAQ,WAAW;IACjD,OAAO,EAAE,IAAI;IACb,QAAQ;KACN,SAAS;KACT,UAAU;KACV,MAAM;KACP;IACF,CAAC;AAEF,OAAI,CAAC,YAAY;AACf,QAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,wBAAwB,CAAC;AACvD;;GAGF,IAAI,UAA+B,WAAW;AAG9C,OAAI,cAAc,aAAa,EAC7B,KAAI;AACF,cAAU,MAAM,MAAM,WAAW,QAAQ,CACtC,OAAO,YAAY,YAAY;KAC9B,KAAK;KACL,oBAAoB;KACrB,CAAC,CACD,UAAU;YACN,aAAa;AACpB,YAAQ,MAAM,8BAA8B,YAAY;;AAM5D,OAAI,UAAU,gBAAgB,WAAW,SAAS;AAClD,OAAI,UACF,uBACA,qBAAqB,WAAW,KAAK,GACtC;AACD,OAAI,UAAU,iBAAiB,wBAAwB;AAGvD,OAAI,KAAK,QAAQ;WACV,OAAO;AACd,WAAQ,MAAM,8BAA8B,MAAM;AAClD,OAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,8BAA8B,CAAC;;GAE/D;AAGF,QAAO,IACL,GAAG,SAAS,gBACZ,OAAO,KAAc,QAAkB;AACrC,MAAI;GACF,MAAM,EAAE,OAAO,IAAI;GAGnB,MAAM,aAAa,MADJ,aAAa,CACI,QAAQ,WAAW;IACjD,OAAO,EAAE,IAAI;IACb,QAAQ;KACN,IAAI;KACJ,MAAM;KACN,UAAU;KACV,UAAU;KACV,OAAO;KACP,QAAQ;KACR,WAAW;KACX,WAAW;KACZ;IACF,CAAC;AAEF,OAAI,CAAC,YAAY;AACf,QAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,wBAAwB,CAAC;AACvD;;AAGF,OAAI,KAAK,WAAW;WACb,OAAO;AACd,WAAQ,MAAM,uCAAuC,MAAM;AAC3D,OAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,uCAAuC,CAAC;;GAG3E"}
1
+ {"version":3,"file":"screenshotRestController.mjs","names":[],"sources":["../../../src/modules/assets/screenshotRestController.ts"],"sourcesContent":["import type { Request, Response, Router } from 'express'\nimport sharp from 'sharp'\nimport { getDbClient } from '../../db'\n\nexport interface ScreenshotRestControllerConfig {\n /**\n * Base path for screenshot endpoints (e.g., '/api/screenshots')\n */\n basePath: string\n}\n\n/**\n * Registers REST endpoints for screenshot retrieval\n *\n * Endpoints:\n * - GET {basePath}/app/:appId - Get all screenshots for an app\n * - GET {basePath}/:id - Get screenshot binary by ID\n * - GET {basePath}/:id/metadata - Get screenshot metadata only\n */\nexport function registerScreenshotRestController(\n router: Router,\n config: ScreenshotRestControllerConfig,\n): void {\n const { basePath } = config\n\n // Get all screenshots for an app\n router.get(\n `${basePath}/app/:appSlug`,\n async (req: Request, res: Response) => {\n try {\n const { appSlug } = req.params\n\n const prisma = getDbClient()\n\n // Find app by slug\n const app = await prisma.dbResource.findUnique({\n where: { slug: appSlug },\n select: { screenshotIds: true },\n })\n\n if (!app) {\n res.status(404).json({ error: 'App not found' })\n return\n }\n\n // Fetch all screenshots for the app, then sort by screenshotIds order\n const results = await prisma.dbAsset.findMany({\n where: {\n id: { in: app.screenshotIds },\n assetType: 'screenshot',\n },\n select: {\n id: true,\n name: true,\n mimeType: true,\n fileSize: true,\n width: true,\n height: true,\n createdAt: true,\n },\n })\n\n const screenshots = app.screenshotIds\n .map((id) => results.find((r) => r.id === id))\n .filter((r) => r !== undefined)\n\n res.json(screenshots)\n } catch (error) {\n console.error('Error fetching app screenshots:', error)\n res.status(500).json({ error: 'Failed to fetch screenshots' })\n }\n },\n )\n\n // Get first screenshot for an app (convenience endpoint)\n router.get(\n `${basePath}/app/:appSlug/first`,\n async (req: Request, res: Response) => {\n try {\n const { appSlug } = req.params\n\n const prisma = getDbClient()\n\n // Find app by slug\n const app = await prisma.dbResource.findUnique({\n where: { slug: appSlug },\n select: { screenshotIds: true },\n })\n\n if (!app || app.screenshotIds.length === 0) {\n res.status(404).json({ error: 'No screenshots found' })\n return\n }\n\n // Fetch first screenshot\n const screenshot = await prisma.dbAsset.findUnique({\n where: { id: app.screenshotIds[0] },\n select: {\n id: true,\n name: true,\n mimeType: true,\n fileSize: true,\n width: true,\n height: true,\n createdAt: true,\n },\n })\n\n if (!screenshot) {\n res.status(404).json({ error: 'Screenshot not found' })\n return\n }\n\n res.json(screenshot)\n } catch (error) {\n console.error('Error fetching first screenshot:', error)\n res.status(500).json({ error: 'Failed to fetch screenshot' })\n }\n },\n )\n\n // Get screenshot binary by ID\n router.get(`${basePath}/:id`, async (req: Request, res: Response) => {\n try {\n const { id } = req.params\n const sizeParam = req.query.size as string | undefined\n const targetSize = sizeParam ? parseInt(sizeParam, 10) : undefined\n\n const prisma = getDbClient()\n const screenshot = await prisma.dbAsset.findUnique({\n where: { id },\n select: {\n content: true,\n mimeType: true,\n name: true,\n },\n })\n\n if (!screenshot) {\n res.status(404).json({ error: 'Screenshot not found' })\n return\n }\n\n let content: Uint8Array | Buffer = screenshot.content\n\n // Resize if size parameter provided\n if (targetSize && targetSize > 0) {\n try {\n content = await sharp(screenshot.content)\n .resize(targetSize, targetSize, {\n fit: 'inside',\n withoutEnlargement: true,\n })\n .toBuffer()\n } catch (resizeError) {\n console.error('Error resizing screenshot:', resizeError)\n // Fall back to original if resize fails\n }\n }\n\n // Set appropriate headers\n res.setHeader('Content-Type', screenshot.mimeType)\n res.setHeader(\n 'Content-Disposition',\n `inline; filename=\"${screenshot.name}\"`,\n )\n res.setHeader('Cache-Control', 'public, max-age=86400') // Cache for 1 day\n\n // Send binary content\n res.send(content)\n } catch (error) {\n console.error('Error fetching screenshot:', error)\n res.status(500).json({ error: 'Failed to fetch screenshot' })\n }\n })\n\n // Get screenshot metadata only (no binary content)\n router.get(\n `${basePath}/:id/metadata`,\n async (req: Request, res: Response) => {\n try {\n const { id } = req.params\n\n const prisma = getDbClient()\n const screenshot = await prisma.dbAsset.findUnique({\n where: { id },\n select: {\n id: true,\n name: true,\n mimeType: true,\n fileSize: true,\n width: true,\n height: true,\n createdAt: true,\n updatedAt: true,\n },\n })\n\n if (!screenshot) {\n res.status(404).json({ error: 'Screenshot not found' })\n return\n }\n\n res.json(screenshot)\n } catch (error) {\n console.error('Error fetching screenshot metadata:', error)\n res.status(500).json({ error: 'Failed to fetch screenshot metadata' })\n }\n },\n )\n}\n"],"mappings":"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"}