@uptime.app/contracts 3.0.52 → 3.0.53-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/app-hack/app-hack-metadata.d.ts +1 -0
- package/dist/cjs/app-hack/app-hack-metadata.d.ts.map +1 -1
- package/dist/cjs/cms-hack/cms-searchable-hack.d.ts +2 -0
- package/dist/cjs/cms-hack/cms-searchable-hack.d.ts.map +1 -1
- package/dist/cjs/draft-hack/draft-hack.d.ts +2 -0
- package/dist/cjs/draft-hack/draft-hack.d.ts.map +1 -1
- package/dist/cjs/enriched-hack/enriched-hack.d.ts +2 -0
- package/dist/cjs/enriched-hack/enriched-hack.d.ts.map +1 -1
- package/dist/cjs/hack/hack.d.ts +2 -0
- package/dist/cjs/hack/hack.d.ts.map +1 -1
- package/dist/cjs/hack-mapping/app-hack-metadata.d.ts.map +1 -1
- package/dist/cjs/hack-mapping/app-hack-metadata.js +1 -0
- package/dist/cjs/hack-mapping/app-hack-metadata.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/pending-hack/pending-hack.d.ts +2 -0
- package/dist/cjs/pending-hack/pending-hack.d.ts.map +1 -1
- package/dist/cjs/spark/spark.d.ts +1 -1
- package/dist/cjs/spark/spark.d.ts.map +1 -1
- package/dist/cjs/topics/primary-topic-mapping.d.ts +7 -0
- package/dist/cjs/topics/primary-topic-mapping.d.ts.map +1 -0
- package/dist/cjs/topics/primary-topic-mapping.js +98 -0
- package/dist/cjs/topics/primary-topic-mapping.js.map +1 -0
- package/dist/cjs/topics/primary-topic.d.ts +4 -0
- package/dist/cjs/topics/primary-topic.d.ts.map +1 -0
- package/dist/cjs/topics/primary-topic.js +3 -0
- package/dist/cjs/topics/primary-topic.js.map +1 -0
- package/dist/esm/app-hack/app-hack-metadata.d.ts +1 -0
- package/dist/esm/app-hack/app-hack-metadata.d.ts.map +1 -1
- package/dist/esm/cms-hack/cms-searchable-hack.d.ts +2 -0
- package/dist/esm/cms-hack/cms-searchable-hack.d.ts.map +1 -1
- package/dist/esm/draft-hack/draft-hack.d.ts +2 -0
- package/dist/esm/draft-hack/draft-hack.d.ts.map +1 -1
- package/dist/esm/enriched-hack/enriched-hack.d.ts +2 -0
- package/dist/esm/enriched-hack/enriched-hack.d.ts.map +1 -1
- package/dist/esm/hack/hack.d.ts +2 -0
- package/dist/esm/hack/hack.d.ts.map +1 -1
- package/dist/esm/hack-mapping/app-hack-metadata.d.ts.map +1 -1
- package/dist/esm/hack-mapping/app-hack-metadata.js +1 -0
- package/dist/esm/hack-mapping/app-hack-metadata.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pending-hack/pending-hack.d.ts +2 -0
- package/dist/esm/pending-hack/pending-hack.d.ts.map +1 -1
- package/dist/esm/spark/spark.d.ts +1 -1
- package/dist/esm/spark/spark.d.ts.map +1 -1
- package/dist/esm/topics/primary-topic-mapping.d.ts +7 -0
- package/dist/esm/topics/primary-topic-mapping.d.ts.map +1 -0
- package/dist/esm/topics/primary-topic-mapping.js +94 -0
- package/dist/esm/topics/primary-topic-mapping.js.map +1 -0
- package/dist/esm/topics/primary-topic.d.ts +4 -0
- package/dist/esm/topics/primary-topic.d.ts.map +1 -0
- package/dist/esm/topics/primary-topic.js +2 -0
- package/dist/esm/topics/primary-topic.js.map +1 -0
- package/package.json +2 -2
- package/src/access-control/collection-access-control.ts +28 -28
- package/src/access-control/hack-access-control.ts +32 -32
- package/src/access-control/profile-access-control.ts +27 -27
- package/src/app-hack/app-full-hack.ts +9 -9
- package/src/app-hack/app-hack-metadata.ts +62 -61
- package/src/app-hack/app-restricted-hack.ts +22 -22
- package/src/b2b-content-access/b2b-content-access.ts +57 -57
- package/src/b2b-organisation/b2b-carousel.ts +33 -33
- package/src/b2b-organisation/b2b-org-idp-mapping.ts +27 -27
- package/src/b2b-organisation/b2b-organisation-events.ts +21 -21
- package/src/b2b-organisation/b2b-organisation-group-events.ts +21 -21
- package/src/b2b-organisation/b2b-organisation-group-membership-events.ts +21 -21
- package/src/b2b-organisation/b2b-organisation-group-membership.ts +17 -17
- package/src/b2b-organisation/b2b-organisation-group.ts +42 -42
- package/src/b2b-organisation/b2b-organisation-invitation.ts +45 -45
- package/src/b2b-organisation/b2b-organisation-member-events.ts +21 -21
- package/src/b2b-organisation/b2b-organisation-member.ts +19 -19
- package/src/b2b-organisation/b2b-organisation.ts +38 -38
- package/src/brand/brand-events.ts +21 -21
- package/src/brand/brand.ts +77 -77
- package/src/catalogue/catalogue.ts +152 -152
- package/src/cms-hack/cms-searchable-hack.ts +47 -44
- package/src/collection/collection-events.ts +21 -21
- package/src/collection/collection.ts +59 -59
- package/src/collection/enriched-collection-events.ts +18 -18
- package/src/collection/enriched-collection.ts +65 -65
- package/src/course/course-events.ts +20 -20
- package/src/course/course.ts +25 -25
- package/src/course-enrollment/course-enrollment-events.ts +21 -21
- package/src/course-enrollment/course-enrollment.ts +36 -36
- package/src/creator/creator-events.ts +32 -32
- package/src/creator/creator.ts +7 -7
- package/src/distribution/collection-distribution.ts +17 -17
- package/src/distribution/distribution-events.ts +61 -61
- package/src/distribution/hack-distribution.ts +18 -18
- package/src/draft-hack/draft-hack-events.ts +21 -21
- package/src/draft-hack/draft-hack.ts +192 -190
- package/src/draft-hack-generation/draft-hack-generation-commands.ts +10 -10
- package/src/draft-hack-generation/draft-hack-generation-events.ts +52 -52
- package/src/draft-hack-generation/draft-hack-generation.ts +39 -39
- package/src/enriched-b2b-organisation/enriched-b2b-organisation-events.ts +21 -21
- package/src/enriched-b2b-organisation/enriched-b2b-organisation.ts +37 -37
- package/src/enriched-hack/enriched-hack-events.ts +21 -21
- package/src/enriched-hack/enriched-hack.ts +111 -109
- package/src/enrichment-asset/hack-enrichment-video-events.ts +55 -55
- package/src/enrichment-asset/hack-enrichment-video.ts +40 -40
- package/src/entitlement/user-entitlements-commands.ts +54 -54
- package/src/entitlement/user-entitlements-events.ts +29 -29
- package/src/entitlement/user-entitlements.ts +18 -18
- package/src/flashcard/flashcard-events.ts +85 -85
- package/src/flashcard/flashcard.ts +138 -138
- package/src/hack/extracted-subject.ts +31 -31
- package/src/hack/hack-events.ts +21 -21
- package/src/hack/hack-published.ts +21 -21
- package/src/hack/hack-with-voice-events.ts +20 -20
- package/src/hack/hack-with-voice.ts +36 -36
- package/src/hack/hack.ts +129 -127
- package/src/hack/publish-hack-command.ts +20 -20
- package/src/hack/republish-hack-command.ts +20 -20
- package/src/hack-mapping/access-helper.ts +6 -6
- package/src/hack-mapping/app-full-hack.test.ts +13 -13
- package/src/hack-mapping/app-full-hack.ts +14 -14
- package/src/hack-mapping/app-hack-metadata.test.ts +22 -22
- package/src/hack-mapping/app-hack-metadata.ts +83 -82
- package/src/hack-mapping/app-restricted-hack.test.ts +12 -12
- package/src/hack-mapping/app-restricted-hack.ts +21 -21
- package/src/hack-mapping/remove-undefined-fields.ts +9 -9
- package/src/hack-mapping/test-data/enriched-hack.json +2569 -2564
- package/src/hack-mapping/test-data/expected-app-full-hack.json +2502 -2497
- package/src/hack-mapping/test-data/expected-app-hack-metadata.json +86 -81
- package/src/hack-mapping/test-data/expected-app-restricted-hack.json +792 -787
- package/src/hack-metadata/hack-metadata-events.ts +21 -21
- package/src/hack-metadata/hack-metadata.ts +17 -17
- package/src/hack-of-the-day/hack-of-the-day-events.ts +21 -21
- package/src/hack-of-the-day/hack-of-the-day.ts +13 -13
- package/src/hack-statistics/hack-statistics-events.ts +21 -21
- package/src/hack-statistics/hack-statistics.ts +9 -9
- package/src/hackbot/hack-generation-commands.ts +45 -45
- package/src/hackbot/hack-generation-trigger-events.ts +21 -21
- package/src/hackbot/hack-generation-trigger.ts +57 -57
- package/src/history/history-events.ts +21 -21
- package/src/history/history.ts +46 -46
- package/src/identity-provider/domain-identity-provider-events.ts +20 -20
- package/src/identity-provider/domain-identity-provider.ts +10 -10
- package/src/identity-provider/identity-provider-events.ts +20 -20
- package/src/identity-provider/identity-provider.ts +46 -46
- package/src/index.ts +223 -220
- package/src/interest/interest-events.ts +21 -21
- package/src/interest/interest.ts +15 -15
- package/src/knowledge-source/knowledge-source-events.ts +21 -21
- package/src/knowledge-source/knowledge-source.ts +43 -43
- package/src/knowledge-source-parsing/knowledge-source-metadata.ts +58 -58
- package/src/knowledge-source-parsing/knowledge-source-parsing-commands.ts +41 -41
- package/src/knowledge-source-parsing/knowledge-source-parsing-events.ts +30 -30
- package/src/knowledge-source-parsing/podcast-metadata.ts +44 -44
- package/src/knowledge-source-parsing/podcast-parsing-events.ts +28 -28
- package/src/knowledge-source-parsing/user-hack-generation-options.ts +7 -7
- package/src/learn-upon/get-sqsso-url.ts +13 -13
- package/src/learn-upon/learn-upon-commands.ts +33 -33
- package/src/learn-upon/learn-upon-course-enrollment-events.ts +21 -21
- package/src/learn-upon/learn-upon-course-enrollment.ts +62 -62
- package/src/learn-upon/learn-upon-course-events.ts +21 -21
- package/src/learn-upon/learn-upon-course.ts +108 -108
- package/src/learn-upon/learn-upon-portal-events.ts +20 -20
- package/src/learn-upon/learn-upon-portal.ts +12 -12
- package/src/learn-upon/learn-upon-user-mapping-events.ts +18 -18
- package/src/learn-upon/learn-upon-user-mapping.ts +9 -9
- package/src/learn-upon/learn-upon-webhook-events.ts +80 -80
- package/src/learn-upon/learn-upon-webhook-types.ts +346 -346
- package/src/learn-upon/unenroll.ts +6 -6
- package/src/localisation/live-locales.ts +45 -45
- package/src/localisation/locale-language.ts +4 -4
- package/src/localisation/supported-languages.ts +11 -11
- package/src/localisation/supported-locales.ts +67 -67
- package/src/message-bus/context.ts +7 -7
- package/src/moderation/hack-moderation-result-events.ts +18 -18
- package/src/moderation/hack-moderation-result.ts +27 -27
- package/src/partner/partner-events.ts +21 -21
- package/src/partner/partner.ts +7 -7
- package/src/pending-hack/pending-hack-events.ts +20 -20
- package/src/pending-hack/pending-hack-with-voice-events.ts +20 -20
- package/src/pending-hack/pending-hack-with-voice.ts +25 -25
- package/src/pending-hack/pending-hack.ts +80 -78
- package/src/preferences/preferences-events.ts +15 -15
- package/src/preferences/preferences.ts +35 -35
- package/src/profile/profile-events.ts +41 -41
- package/src/profile/profile.ts +36 -36
- package/src/profile/translated-profile.ts +13 -13
- package/src/referral/referral-events.ts +41 -41
- package/src/referral/referral.ts +76 -76
- package/src/saved/saved-collection-events.ts +19 -19
- package/src/saved/saved-collection.ts +8 -8
- package/src/segment/segment-commands.ts +75 -75
- package/src/segment/segment-events.ts +42 -42
- package/src/segment/segment-with-voice.ts +8 -8
- package/src/segment/segment.ts +82 -82
- package/src/service-simulator/mock-request-response.ts +17 -17
- package/src/skin/skin-events.ts +21 -21
- package/src/skin/skin.ts +6 -6
- package/src/spark/spark-board-read-model.ts +17 -17
- package/src/spark/spark-board.ts +12 -12
- package/src/spark/spark-events.ts +42 -42
- package/src/spark/spark.ts +76 -75
- package/src/text-analysis/hack-categories-extracted-events.ts +24 -24
- package/src/text-analysis/hack-categories-extracted.ts +31 -31
- package/src/text-analysis/hack-entities-extracted-events.ts +24 -24
- package/src/text-analysis/hack-entities-extracted.ts +38 -38
- package/src/text-analysis/hack-keywords-extracted-events.ts +24 -24
- package/src/text-analysis/hack-keywords-extracted.ts +23 -23
- package/src/text-analysis/hack-topics-extracted-events.ts +24 -24
- package/src/text-analysis/hack-topics-extracted.ts +31 -31
- package/src/text-to-speech/create-speech-commands.ts +22 -22
- package/src/text-to-speech/speech-created-events.ts +10 -10
- package/src/text-to-speech/supported-voices.ts +222 -222
- package/src/text-to-speech/text-segment.ts +29 -29
- package/src/theme/theme-events.ts +21 -21
- package/src/theme/theme.ts +68 -68
- package/src/topics/primary-topic-mapping.test.ts +36 -0
- package/src/topics/primary-topic-mapping.ts +110 -0
- package/src/topics/primary-topic.ts +3 -0
- package/src/translation/translation-events.ts +73 -73
- package/src/translation/translation.ts +25 -25
- package/src/trending/trending-events.ts +21 -21
- package/src/trending/trending-hacks.ts +8 -8
- package/src/user/cognito-user-authentication-log.ts +7 -7
- package/src/user/get-user.ts +63 -63
- package/src/user/user-events.ts +39 -39
- package/src/user-acl/user-acl-utils.test.ts +273 -273
- package/src/user-acl/user-acl-utils.ts +176 -176
- package/src/user-context/user-context-events.ts +21 -21
- package/src/user-context/user-context.ts +15 -15
- package/src/user-notification-context/user-notification-context-events.ts +21 -21
- package/src/user-notification-context/user-notification-context.ts +9 -9
- package/src/user-statistics/user-statistics-events.ts +97 -97
- package/src/user-statistics/user-statistics.ts +82 -82
- package/src/video-cropping/video-cropping-events.ts +43 -43
- package/src/video-cropping/video-metadata.ts +12 -12
- package/tsconfig.cjs.json +7 -7
- package/tsconfig.npm.json +22 -22
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
export interface B2BOrganisation {
|
|
2
|
-
id: string;
|
|
3
|
-
v: number;
|
|
4
|
-
createdAt: string;
|
|
5
|
-
updatedAt: string;
|
|
6
|
-
name: string; //unique
|
|
7
|
-
owner: string; //unique
|
|
8
|
-
code?: string;
|
|
9
|
-
/** for now this will reference what to display in the home screen of the app for users that joined the organisation */
|
|
10
|
-
provider: string;
|
|
11
|
-
/** for organisations that might be different but have the same name to be displayed. Ex: HP Ireland & HP US ==> we want the displayName to be HP */
|
|
12
|
-
displayName: string;
|
|
13
|
-
/** the max amount of times the code to join an organisation can be used */
|
|
14
|
-
codeUsageLimit?: number;
|
|
15
|
-
/** the prefix to use for the url of the organisation */
|
|
16
|
-
urlPrefix?: string;
|
|
17
|
-
brandId?: string;
|
|
18
|
-
/** if the organisation provides members with the premium entitlement */
|
|
19
|
-
providesPremium?: boolean;
|
|
20
|
-
/** Introduced to allow simple creation of demo orgs for sales team. Is used in production but only for demo purposes */
|
|
21
|
-
isDemo?: boolean;
|
|
22
|
-
/** Is used in production but only for demo purposes */
|
|
23
|
-
demoLogoUrl?: string;
|
|
24
|
-
/** Any extra entitlements that are issued to members of this organisation. Not to be used provide premium - use providesPremium flag */
|
|
25
|
-
issuedEntitlements?: string[];
|
|
26
|
-
/** If the org members are not given free premium then override the standard RevenueCat offering presented to the user */
|
|
27
|
-
revenueCatOffering?: string;
|
|
28
|
-
/** Promo code to be applied when the user requests for the available stripe plans */
|
|
29
|
-
promoCode?: string;
|
|
30
|
-
/** Whether the public link can be use or not */
|
|
31
|
-
publicLinkDisabled?: boolean;
|
|
32
|
-
/** Whether the organisation can create content */
|
|
33
|
-
canCreateContent?: boolean;
|
|
34
|
-
/** Id of the Uptime LearnUpon portal the organisation's users have access to */
|
|
35
|
-
uptimeLearnUponPortalId?: string;
|
|
36
|
-
/** Whether reporting is enabled for this organisation. Added 3 Feb 2026 */
|
|
37
|
-
isReportingEnabled?: boolean;
|
|
38
|
-
}
|
|
1
|
+
export interface B2BOrganisation {
|
|
2
|
+
id: string;
|
|
3
|
+
v: number;
|
|
4
|
+
createdAt: string;
|
|
5
|
+
updatedAt: string;
|
|
6
|
+
name: string; //unique
|
|
7
|
+
owner: string; //unique
|
|
8
|
+
code?: string;
|
|
9
|
+
/** for now this will reference what to display in the home screen of the app for users that joined the organisation */
|
|
10
|
+
provider: string;
|
|
11
|
+
/** for organisations that might be different but have the same name to be displayed. Ex: HP Ireland & HP US ==> we want the displayName to be HP */
|
|
12
|
+
displayName: string;
|
|
13
|
+
/** the max amount of times the code to join an organisation can be used */
|
|
14
|
+
codeUsageLimit?: number;
|
|
15
|
+
/** the prefix to use for the url of the organisation */
|
|
16
|
+
urlPrefix?: string;
|
|
17
|
+
brandId?: string;
|
|
18
|
+
/** if the organisation provides members with the premium entitlement */
|
|
19
|
+
providesPremium?: boolean;
|
|
20
|
+
/** Introduced to allow simple creation of demo orgs for sales team. Is used in production but only for demo purposes */
|
|
21
|
+
isDemo?: boolean;
|
|
22
|
+
/** Is used in production but only for demo purposes */
|
|
23
|
+
demoLogoUrl?: string;
|
|
24
|
+
/** Any extra entitlements that are issued to members of this organisation. Not to be used provide premium - use providesPremium flag */
|
|
25
|
+
issuedEntitlements?: string[];
|
|
26
|
+
/** If the org members are not given free premium then override the standard RevenueCat offering presented to the user */
|
|
27
|
+
revenueCatOffering?: string;
|
|
28
|
+
/** Promo code to be applied when the user requests for the available stripe plans */
|
|
29
|
+
promoCode?: string;
|
|
30
|
+
/** Whether the public link can be use or not */
|
|
31
|
+
publicLinkDisabled?: boolean;
|
|
32
|
+
/** Whether the organisation can create content */
|
|
33
|
+
canCreateContent?: boolean;
|
|
34
|
+
/** Id of the Uptime LearnUpon portal the organisation's users have access to */
|
|
35
|
+
uptimeLearnUponPortalId?: string;
|
|
36
|
+
/** Whether reporting is enabled for this organisation. Added 3 Feb 2026 */
|
|
37
|
+
isReportingEnabled?: boolean;
|
|
38
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { Brand } from './brand';
|
|
2
|
-
|
|
3
|
-
export interface BrandCreatedEvent {
|
|
4
|
-
id: string;
|
|
5
|
-
type: 'BrandCreated';
|
|
6
|
-
payload: Brand;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface BrandUpdatedEvent {
|
|
10
|
-
id: string;
|
|
11
|
-
type: 'BrandUpdated';
|
|
12
|
-
payload: Brand;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface BrandDeletedEvent {
|
|
16
|
-
id: string;
|
|
17
|
-
type: 'BrandDeleted';
|
|
18
|
-
payload: Brand;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export type BrandChangedEvent = BrandCreatedEvent | BrandUpdatedEvent | BrandDeletedEvent;
|
|
1
|
+
import { Brand } from './brand';
|
|
2
|
+
|
|
3
|
+
export interface BrandCreatedEvent {
|
|
4
|
+
id: string;
|
|
5
|
+
type: 'BrandCreated';
|
|
6
|
+
payload: Brand;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface BrandUpdatedEvent {
|
|
10
|
+
id: string;
|
|
11
|
+
type: 'BrandUpdated';
|
|
12
|
+
payload: Brand;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface BrandDeletedEvent {
|
|
16
|
+
id: string;
|
|
17
|
+
type: 'BrandDeleted';
|
|
18
|
+
payload: Brand;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type BrandChangedEvent = BrandCreatedEvent | BrandUpdatedEvent | BrandDeletedEvent;
|
package/src/brand/brand.ts
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { SupportedLocale } from '../localisation/supported-locales';
|
|
2
|
-
|
|
3
|
-
export interface Brand {
|
|
4
|
-
id: string;
|
|
5
|
-
v: number;
|
|
6
|
-
createdAt: string;
|
|
7
|
-
updatedAt: string;
|
|
8
|
-
name: string;
|
|
9
|
-
skinId?: string;
|
|
10
|
-
/** must unique across all brands */
|
|
11
|
-
webAppDomain?: string;
|
|
12
|
-
appName?: {
|
|
13
|
-
[K in SupportedLocale]?: string
|
|
14
|
-
};
|
|
15
|
-
welcomeHacks?: WelcomeHack[];
|
|
16
|
-
hasCustomTab?: boolean;
|
|
17
|
-
customTabLongName?: {
|
|
18
|
-
[K in SupportedLocale]?: string
|
|
19
|
-
};
|
|
20
|
-
customTabShortName?: {
|
|
21
|
-
[K in SupportedLocale]?: string
|
|
22
|
-
};
|
|
23
|
-
/** added Jan 2026 and backfilled */
|
|
24
|
-
defaultTab: 'discover' | 'custom';
|
|
25
|
-
/** added Feb 2026 and backfilled */
|
|
26
|
-
customTabCarousels: BrandCustomTabCarousel[];
|
|
27
|
-
/** added Feb 2026. Max 5 links. */
|
|
28
|
-
links?: BrandLink[];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export type BrandCustomTabCarousel =
|
|
32
|
-
| 'recommended-b2b-hacks'
|
|
33
|
-
| 'featured-course-enrollments'
|
|
34
|
-
| 'organisation-scoped-featured-collections'
|
|
35
|
-
| 'organisation-scoped-featured-hacks'
|
|
36
|
-
| 'new-hacks-in-your-network'
|
|
37
|
-
| 'featured-resources'
|
|
38
|
-
| 'recommended-b2b-collections'
|
|
39
|
-
| 'available-courses-in-catalog'
|
|
40
|
-
| 'whole-org-hacks'
|
|
41
|
-
| 'whole-org-collections';
|
|
42
|
-
|
|
43
|
-
export interface BrandLink {
|
|
44
|
-
imageUrl?: string;
|
|
45
|
-
title: {
|
|
46
|
-
[K in SupportedLocale]?: string
|
|
47
|
-
};
|
|
48
|
-
description: {
|
|
49
|
-
[K in SupportedLocale]?: string
|
|
50
|
-
};
|
|
51
|
-
destination: BrandLinkDestination;
|
|
52
|
-
cta: BrandLinkCta;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export type BrandLinkCta =
|
|
56
|
-
| 'view'
|
|
57
|
-
| 'open'
|
|
58
|
-
| 'launch'
|
|
59
|
-
| 'get-started'
|
|
60
|
-
| 'start-now'
|
|
61
|
-
| 'gain-access'
|
|
62
|
-
| 'learn-more'
|
|
63
|
-
| 'find-out-more'
|
|
64
|
-
| 'watch-video'
|
|
65
|
-
| 'read'
|
|
66
|
-
| 'explore-here'
|
|
67
|
-
| 'get-support';
|
|
68
|
-
|
|
69
|
-
export type BrandLinkDestination = {
|
|
70
|
-
type: 'external' | 'internal' | 'hack' | 'collection' | 'course';
|
|
71
|
-
/** Can be a URL or an ID depending on the type */
|
|
72
|
-
target: string;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
// In case we need to add more properties to the BrandHack interface, we can do so here.
|
|
76
|
-
export interface WelcomeHack {
|
|
77
|
-
hackId: string;
|
|
1
|
+
import { SupportedLocale } from '../localisation/supported-locales';
|
|
2
|
+
|
|
3
|
+
export interface Brand {
|
|
4
|
+
id: string;
|
|
5
|
+
v: number;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
updatedAt: string;
|
|
8
|
+
name: string;
|
|
9
|
+
skinId?: string;
|
|
10
|
+
/** must unique across all brands */
|
|
11
|
+
webAppDomain?: string;
|
|
12
|
+
appName?: {
|
|
13
|
+
[K in SupportedLocale]?: string
|
|
14
|
+
};
|
|
15
|
+
welcomeHacks?: WelcomeHack[];
|
|
16
|
+
hasCustomTab?: boolean;
|
|
17
|
+
customTabLongName?: {
|
|
18
|
+
[K in SupportedLocale]?: string
|
|
19
|
+
};
|
|
20
|
+
customTabShortName?: {
|
|
21
|
+
[K in SupportedLocale]?: string
|
|
22
|
+
};
|
|
23
|
+
/** added Jan 2026 and backfilled */
|
|
24
|
+
defaultTab: 'discover' | 'custom';
|
|
25
|
+
/** added Feb 2026 and backfilled */
|
|
26
|
+
customTabCarousels: BrandCustomTabCarousel[];
|
|
27
|
+
/** added Feb 2026. Max 5 links. */
|
|
28
|
+
links?: BrandLink[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type BrandCustomTabCarousel =
|
|
32
|
+
| 'recommended-b2b-hacks'
|
|
33
|
+
| 'featured-course-enrollments'
|
|
34
|
+
| 'organisation-scoped-featured-collections'
|
|
35
|
+
| 'organisation-scoped-featured-hacks'
|
|
36
|
+
| 'new-hacks-in-your-network'
|
|
37
|
+
| 'featured-resources'
|
|
38
|
+
| 'recommended-b2b-collections'
|
|
39
|
+
| 'available-courses-in-catalog'
|
|
40
|
+
| 'whole-org-hacks'
|
|
41
|
+
| 'whole-org-collections';
|
|
42
|
+
|
|
43
|
+
export interface BrandLink {
|
|
44
|
+
imageUrl?: string;
|
|
45
|
+
title: {
|
|
46
|
+
[K in SupportedLocale]?: string
|
|
47
|
+
};
|
|
48
|
+
description: {
|
|
49
|
+
[K in SupportedLocale]?: string
|
|
50
|
+
};
|
|
51
|
+
destination: BrandLinkDestination;
|
|
52
|
+
cta: BrandLinkCta;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type BrandLinkCta =
|
|
56
|
+
| 'view'
|
|
57
|
+
| 'open'
|
|
58
|
+
| 'launch'
|
|
59
|
+
| 'get-started'
|
|
60
|
+
| 'start-now'
|
|
61
|
+
| 'gain-access'
|
|
62
|
+
| 'learn-more'
|
|
63
|
+
| 'find-out-more'
|
|
64
|
+
| 'watch-video'
|
|
65
|
+
| 'read'
|
|
66
|
+
| 'explore-here'
|
|
67
|
+
| 'get-support';
|
|
68
|
+
|
|
69
|
+
export type BrandLinkDestination = {
|
|
70
|
+
type: 'external' | 'internal' | 'hack' | 'collection' | 'course';
|
|
71
|
+
/** Can be a URL or an ID depending on the type */
|
|
72
|
+
target: string;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// In case we need to add more properties to the BrandHack interface, we can do so here.
|
|
76
|
+
export interface WelcomeHack {
|
|
77
|
+
hackId: string;
|
|
78
78
|
}
|
|
@@ -1,152 +1,152 @@
|
|
|
1
|
-
export interface Catalogue {
|
|
2
|
-
id: string;
|
|
3
|
-
/** used for permissions - who is allowed to edit this catalogue */
|
|
4
|
-
owner: string;
|
|
5
|
-
/** Added and backfilled Jan 2026 */
|
|
6
|
-
tenant: string;
|
|
7
|
-
v: number;
|
|
8
|
-
createdAt: string;
|
|
9
|
-
updatedAt: string;
|
|
10
|
-
/** added December 2023 to make it easier to find catalogues in the UI */
|
|
11
|
-
name: string;
|
|
12
|
-
/** Added and backfilled December 2023 */
|
|
13
|
-
accessType: CatalogueAccessType;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export type CatalogueAccessType = 'include' | 'exclude';
|
|
17
|
-
|
|
18
|
-
export interface CatalogueCreatedEvent {
|
|
19
|
-
id: string;
|
|
20
|
-
type: 'CatalogueCreated';
|
|
21
|
-
payload: Catalogue;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface CatalogueUpdatedEvent {
|
|
25
|
-
id: string;
|
|
26
|
-
type: 'CatalogueUpdated';
|
|
27
|
-
payload: Catalogue;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface CatalogueDeletedEvent {
|
|
31
|
-
id: string;
|
|
32
|
-
type: 'CatalogueDeleted';
|
|
33
|
-
payload: Catalogue;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export type CatalogueChangedEvent = CatalogueCreatedEvent | CatalogueUpdatedEvent | CatalogueDeletedEvent;
|
|
37
|
-
|
|
38
|
-
export interface CatalogueHackEntry {
|
|
39
|
-
id: string; // not really used but there for store reasons
|
|
40
|
-
v: number;
|
|
41
|
-
createdAt: string;
|
|
42
|
-
updatedAt: string;
|
|
43
|
-
catalogueId: string; // the catalogue name
|
|
44
|
-
baseLocaleHackId: string; // use baseLocaleHackId as all translations should be in the same catalogue
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface CatalogueHackEntryCreatedEvent {
|
|
48
|
-
id: string;
|
|
49
|
-
type: 'CatalogueHackEntryCreated';
|
|
50
|
-
payload: CatalogueHackEntry;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface CatalogueHackEntryUpdatedEvent {
|
|
54
|
-
id: string;
|
|
55
|
-
type: 'CatalogueHackEntryUpdated';
|
|
56
|
-
payload: CatalogueHackEntry;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface CatalogueHackEntryDeletedEvent {
|
|
60
|
-
id: string;
|
|
61
|
-
type: 'CatalogueHackEntryDeleted';
|
|
62
|
-
payload: CatalogueHackEntry;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export type CatalogueHackEntryChangedEvent = CatalogueHackEntryCreatedEvent | CatalogueHackEntryUpdatedEvent | CatalogueHackEntryDeletedEvent;
|
|
66
|
-
|
|
67
|
-
export interface CatalogueCollectionEntry {
|
|
68
|
-
id: string;
|
|
69
|
-
v: number;
|
|
70
|
-
createdAt: string;
|
|
71
|
-
updatedAt: string;
|
|
72
|
-
catalogueId: string;
|
|
73
|
-
baseLocaleCollectionId: string;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export interface CatalogueCollectionEntryCreatedEvent {
|
|
77
|
-
id: string;
|
|
78
|
-
type: 'CatalogueCollectionEntryCreated';
|
|
79
|
-
payload: CatalogueCollectionEntry;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface CatalogueCollectionEntryUpdatedEvent {
|
|
83
|
-
id: string;
|
|
84
|
-
type: 'CatalogueCollectionEntryUpdated';
|
|
85
|
-
payload: CatalogueCollectionEntry;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export interface CatalogueCollectionEntryDeletedEvent {
|
|
89
|
-
id: string;
|
|
90
|
-
type: 'CatalogueCollectionEntryDeleted';
|
|
91
|
-
payload: CatalogueCollectionEntry;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export type CatalogueCollectionEntryChangedEvent = CatalogueCollectionEntryCreatedEvent | CatalogueCollectionEntryUpdatedEvent | CatalogueCollectionEntryDeletedEvent;
|
|
95
|
-
|
|
96
|
-
export interface CatalogueB2BOrgEntry {
|
|
97
|
-
id: string;
|
|
98
|
-
v: number;
|
|
99
|
-
createdAt: string;
|
|
100
|
-
updatedAt: string;
|
|
101
|
-
catalogueId: string;
|
|
102
|
-
b2bOrgId: string;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export interface CatalogueB2BOrgEntryCreatedEvent {
|
|
106
|
-
id: string;
|
|
107
|
-
type: 'CatalogueB2BOrgEntryCreated';
|
|
108
|
-
payload: CatalogueB2BOrgEntry;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export interface CatalogueB2BOrgEntryUpdatedEvent {
|
|
112
|
-
id: string;
|
|
113
|
-
type: 'CatalogueB2BOrgEntryUpdated';
|
|
114
|
-
payload: CatalogueB2BOrgEntry;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export interface CatalogueB2BOrgEntryDeletedEvent {
|
|
118
|
-
id: string;
|
|
119
|
-
type: 'CatalogueB2BOrgEntryDeleted';
|
|
120
|
-
payload: CatalogueB2BOrgEntry;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export type CatalogueB2BOrgEntryChangedEvent = CatalogueB2BOrgEntryCreatedEvent | CatalogueB2BOrgEntryUpdatedEvent | CatalogueB2BOrgEntryDeletedEvent;
|
|
124
|
-
|
|
125
|
-
export interface CatalogueProfileEntry {
|
|
126
|
-
id: string;
|
|
127
|
-
v: number;
|
|
128
|
-
createdAt: string;
|
|
129
|
-
updatedAt: string;
|
|
130
|
-
catalogueId: string;
|
|
131
|
-
profileId: string;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export interface CatalogueProfileEntryCreatedEvent {
|
|
135
|
-
id: string;
|
|
136
|
-
type: 'CatalogueProfileEntryCreated';
|
|
137
|
-
payload: CatalogueProfileEntry;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
export interface CatalogueProfileEntryUpdatedEvent {
|
|
141
|
-
id: string;
|
|
142
|
-
type: 'CatalogueProfileEntryUpdated';
|
|
143
|
-
payload: CatalogueProfileEntry;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export interface CatalogueProfileEntryDeletedEvent {
|
|
147
|
-
id: string;
|
|
148
|
-
type: 'CatalogueProfileEntryDeleted';
|
|
149
|
-
payload: CatalogueProfileEntry;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export type CatalogueProfileEntryChangedEvent = CatalogueProfileEntryCreatedEvent | CatalogueProfileEntryUpdatedEvent | CatalogueProfileEntryDeletedEvent;
|
|
1
|
+
export interface Catalogue {
|
|
2
|
+
id: string;
|
|
3
|
+
/** used for permissions - who is allowed to edit this catalogue */
|
|
4
|
+
owner: string;
|
|
5
|
+
/** Added and backfilled Jan 2026 */
|
|
6
|
+
tenant: string;
|
|
7
|
+
v: number;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
updatedAt: string;
|
|
10
|
+
/** added December 2023 to make it easier to find catalogues in the UI */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Added and backfilled December 2023 */
|
|
13
|
+
accessType: CatalogueAccessType;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type CatalogueAccessType = 'include' | 'exclude';
|
|
17
|
+
|
|
18
|
+
export interface CatalogueCreatedEvent {
|
|
19
|
+
id: string;
|
|
20
|
+
type: 'CatalogueCreated';
|
|
21
|
+
payload: Catalogue;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface CatalogueUpdatedEvent {
|
|
25
|
+
id: string;
|
|
26
|
+
type: 'CatalogueUpdated';
|
|
27
|
+
payload: Catalogue;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface CatalogueDeletedEvent {
|
|
31
|
+
id: string;
|
|
32
|
+
type: 'CatalogueDeleted';
|
|
33
|
+
payload: Catalogue;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type CatalogueChangedEvent = CatalogueCreatedEvent | CatalogueUpdatedEvent | CatalogueDeletedEvent;
|
|
37
|
+
|
|
38
|
+
export interface CatalogueHackEntry {
|
|
39
|
+
id: string; // not really used but there for store reasons
|
|
40
|
+
v: number;
|
|
41
|
+
createdAt: string;
|
|
42
|
+
updatedAt: string;
|
|
43
|
+
catalogueId: string; // the catalogue name
|
|
44
|
+
baseLocaleHackId: string; // use baseLocaleHackId as all translations should be in the same catalogue
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface CatalogueHackEntryCreatedEvent {
|
|
48
|
+
id: string;
|
|
49
|
+
type: 'CatalogueHackEntryCreated';
|
|
50
|
+
payload: CatalogueHackEntry;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface CatalogueHackEntryUpdatedEvent {
|
|
54
|
+
id: string;
|
|
55
|
+
type: 'CatalogueHackEntryUpdated';
|
|
56
|
+
payload: CatalogueHackEntry;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface CatalogueHackEntryDeletedEvent {
|
|
60
|
+
id: string;
|
|
61
|
+
type: 'CatalogueHackEntryDeleted';
|
|
62
|
+
payload: CatalogueHackEntry;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type CatalogueHackEntryChangedEvent = CatalogueHackEntryCreatedEvent | CatalogueHackEntryUpdatedEvent | CatalogueHackEntryDeletedEvent;
|
|
66
|
+
|
|
67
|
+
export interface CatalogueCollectionEntry {
|
|
68
|
+
id: string;
|
|
69
|
+
v: number;
|
|
70
|
+
createdAt: string;
|
|
71
|
+
updatedAt: string;
|
|
72
|
+
catalogueId: string;
|
|
73
|
+
baseLocaleCollectionId: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface CatalogueCollectionEntryCreatedEvent {
|
|
77
|
+
id: string;
|
|
78
|
+
type: 'CatalogueCollectionEntryCreated';
|
|
79
|
+
payload: CatalogueCollectionEntry;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface CatalogueCollectionEntryUpdatedEvent {
|
|
83
|
+
id: string;
|
|
84
|
+
type: 'CatalogueCollectionEntryUpdated';
|
|
85
|
+
payload: CatalogueCollectionEntry;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface CatalogueCollectionEntryDeletedEvent {
|
|
89
|
+
id: string;
|
|
90
|
+
type: 'CatalogueCollectionEntryDeleted';
|
|
91
|
+
payload: CatalogueCollectionEntry;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export type CatalogueCollectionEntryChangedEvent = CatalogueCollectionEntryCreatedEvent | CatalogueCollectionEntryUpdatedEvent | CatalogueCollectionEntryDeletedEvent;
|
|
95
|
+
|
|
96
|
+
export interface CatalogueB2BOrgEntry {
|
|
97
|
+
id: string;
|
|
98
|
+
v: number;
|
|
99
|
+
createdAt: string;
|
|
100
|
+
updatedAt: string;
|
|
101
|
+
catalogueId: string;
|
|
102
|
+
b2bOrgId: string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface CatalogueB2BOrgEntryCreatedEvent {
|
|
106
|
+
id: string;
|
|
107
|
+
type: 'CatalogueB2BOrgEntryCreated';
|
|
108
|
+
payload: CatalogueB2BOrgEntry;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface CatalogueB2BOrgEntryUpdatedEvent {
|
|
112
|
+
id: string;
|
|
113
|
+
type: 'CatalogueB2BOrgEntryUpdated';
|
|
114
|
+
payload: CatalogueB2BOrgEntry;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface CatalogueB2BOrgEntryDeletedEvent {
|
|
118
|
+
id: string;
|
|
119
|
+
type: 'CatalogueB2BOrgEntryDeleted';
|
|
120
|
+
payload: CatalogueB2BOrgEntry;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export type CatalogueB2BOrgEntryChangedEvent = CatalogueB2BOrgEntryCreatedEvent | CatalogueB2BOrgEntryUpdatedEvent | CatalogueB2BOrgEntryDeletedEvent;
|
|
124
|
+
|
|
125
|
+
export interface CatalogueProfileEntry {
|
|
126
|
+
id: string;
|
|
127
|
+
v: number;
|
|
128
|
+
createdAt: string;
|
|
129
|
+
updatedAt: string;
|
|
130
|
+
catalogueId: string;
|
|
131
|
+
profileId: string;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export interface CatalogueProfileEntryCreatedEvent {
|
|
135
|
+
id: string;
|
|
136
|
+
type: 'CatalogueProfileEntryCreated';
|
|
137
|
+
payload: CatalogueProfileEntry;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export interface CatalogueProfileEntryUpdatedEvent {
|
|
141
|
+
id: string;
|
|
142
|
+
type: 'CatalogueProfileEntryUpdated';
|
|
143
|
+
payload: CatalogueProfileEntry;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export interface CatalogueProfileEntryDeletedEvent {
|
|
147
|
+
id: string;
|
|
148
|
+
type: 'CatalogueProfileEntryDeleted';
|
|
149
|
+
payload: CatalogueProfileEntry;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export type CatalogueProfileEntryChangedEvent = CatalogueProfileEntryCreatedEvent | CatalogueProfileEntryUpdatedEvent | CatalogueProfileEntryDeletedEvent;
|
|
@@ -1,44 +1,47 @@
|
|
|
1
|
-
import { EnrichedHackSubjects } from '../enriched-hack/enriched-hack';
|
|
2
|
-
import { HackContributor, HackTopic, HackType } from '../hack/hack';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
id
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
1
|
+
import { EnrichedHackSubjects } from '../enriched-hack/enriched-hack';
|
|
2
|
+
import { HackContributor, HackTopic, HackType } from '../hack/hack';
|
|
3
|
+
import { PrimaryTopic } from '../topics/primary-topic';
|
|
4
|
+
|
|
5
|
+
export interface CmsSearchableHack {
|
|
6
|
+
/** id of the hack, even if the hack is currently in draft state */
|
|
7
|
+
id: string;
|
|
8
|
+
title: string;
|
|
9
|
+
draftHackId: string;
|
|
10
|
+
hackId: string;
|
|
11
|
+
baseLocaleHackId: string;
|
|
12
|
+
locale: string;
|
|
13
|
+
language: string;
|
|
14
|
+
/** when the draft was created */
|
|
15
|
+
createdAt: string;
|
|
16
|
+
updatedAt: string;
|
|
17
|
+
publishedAt?: string;
|
|
18
|
+
owner: string;
|
|
19
|
+
// will be empty on draft
|
|
20
|
+
acl: string[];
|
|
21
|
+
|
|
22
|
+
description: string
|
|
23
|
+
|
|
24
|
+
sourceId?: string;
|
|
25
|
+
themeId?: string;
|
|
26
|
+
coverUrl?: string;
|
|
27
|
+
|
|
28
|
+
editorialTags: string[];
|
|
29
|
+
|
|
30
|
+
copyrightFreeCoverUrl?: string;
|
|
31
|
+
|
|
32
|
+
contributors: HackContributor[];
|
|
33
|
+
type?: HackType;
|
|
34
|
+
|
|
35
|
+
topics: HackTopic[];
|
|
36
|
+
primaryTopics: PrimaryTopic[];
|
|
37
|
+
|
|
38
|
+
keywords: string[];
|
|
39
|
+
topicsExtracted: string[];
|
|
40
|
+
keywordsExtracted: string[];
|
|
41
|
+
hackSubjects: EnrichedHackSubjects;
|
|
42
|
+
|
|
43
|
+
workflowStatus: 'unpublished' | 'published' | 'publishing';
|
|
44
|
+
isPublished: boolean;
|
|
45
|
+
hasUnpublishedChanges: boolean;
|
|
46
|
+
isHidden: boolean;
|
|
47
|
+
}
|