@learncard/network-brain-service 4.0.4 → 4.1.1

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 (175) hide show
  1. package/.env.example +14 -0
  2. package/AGENTS.md +16 -0
  3. package/CHANGELOG.md +54 -0
  4. package/config/config.dev.json +5 -0
  5. package/config/config.example.json +5 -0
  6. package/config/config.production.json +5 -0
  7. package/config/config.scouts.dev.json +5 -0
  8. package/config/config.scouts.production.json +5 -0
  9. package/dist/accesslayer/campaign/audience.d.ts +7 -0
  10. package/dist/accesslayer/campaign/audience.d.ts.map +1 -0
  11. package/dist/accesslayer/campaign/create.d.ts +3 -0
  12. package/dist/accesslayer/campaign/create.d.ts.map +1 -0
  13. package/dist/accesslayer/campaign/delete.d.ts +2 -0
  14. package/dist/accesslayer/campaign/delete.d.ts.map +1 -0
  15. package/dist/accesslayer/campaign/read.d.ts +6 -0
  16. package/dist/accesslayer/campaign/read.d.ts.map +1 -0
  17. package/dist/accesslayer/campaign/shared.d.ts +16 -0
  18. package/dist/accesslayer/campaign/shared.d.ts.map +1 -0
  19. package/dist/accesslayer/campaign/state.d.ts +4 -0
  20. package/dist/accesslayer/campaign/state.d.ts.map +1 -0
  21. package/dist/accesslayer/campaign/update.d.ts +3 -0
  22. package/dist/accesslayer/campaign/update.d.ts.map +1 -0
  23. package/dist/accesslayer/credential-share-previews.d.ts +5 -0
  24. package/dist/accesslayer/credential-share-previews.d.ts.map +1 -0
  25. package/dist/accesslayer/profile/delete.d.ts.map +1 -1
  26. package/dist/accesslayer/skill/read.d.ts +12 -2
  27. package/dist/accesslayer/skill/read.d.ts.map +1 -1
  28. package/dist/accesslayer/skill/update.d.ts +11 -1
  29. package/dist/accesslayer/skill/update.d.ts.map +1 -1
  30. package/dist/app.d.ts +4 -0
  31. package/dist/app.d.ts.map +1 -1
  32. package/dist/cache/app-store.caches.d.ts +2 -1
  33. package/dist/cache/app-store.caches.d.ts.map +1 -1
  34. package/dist/config/environment.d.ts +268 -178
  35. package/dist/config/environment.d.ts.map +1 -1
  36. package/dist/config/skillEmbedding.d.ts +70 -0
  37. package/dist/config/skillEmbedding.d.ts.map +1 -0
  38. package/dist/config/skillEmbedding.neo4j.test.d.ts +2 -0
  39. package/dist/config/skillEmbedding.neo4j.test.d.ts.map +1 -0
  40. package/dist/config/stageConfig.d.ts +20 -0
  41. package/dist/config/stageConfig.d.ts.map +1 -1
  42. package/dist/constants/campaigns.d.ts +3 -0
  43. package/dist/constants/campaigns.d.ts.map +1 -0
  44. package/dist/didkit_wasm_bg.wasm +0 -0
  45. package/dist/helpers/app-credential-delivery.helpers.d.ts +4 -0
  46. package/dist/helpers/app-credential-delivery.helpers.d.ts.map +1 -0
  47. package/dist/helpers/app-credential-delivery.helpers.test.d.ts +2 -0
  48. package/dist/helpers/app-credential-delivery.helpers.test.d.ts.map +1 -0
  49. package/dist/helpers/bedrock-embedding.helpers.d.ts +40 -0
  50. package/dist/helpers/bedrock-embedding.helpers.d.ts.map +1 -0
  51. package/dist/helpers/bedrock-embedding.helpers.test.d.ts +2 -0
  52. package/dist/helpers/bedrock-embedding.helpers.test.d.ts.map +1 -0
  53. package/dist/helpers/bedrock-embedding.smoke.test.d.ts +2 -0
  54. package/dist/helpers/bedrock-embedding.smoke.test.d.ts.map +1 -0
  55. package/dist/helpers/boost.helpers.d.ts.map +1 -1
  56. package/dist/helpers/sentry.helpers.d.ts.map +1 -1
  57. package/dist/helpers/sentry.helpers.test.d.ts +2 -0
  58. package/dist/helpers/sentry.helpers.test.d.ts.map +1 -0
  59. package/dist/helpers/skill-embedding.helpers.d.ts +65 -7
  60. package/dist/helpers/skill-embedding.helpers.d.ts.map +1 -1
  61. package/dist/helpers/skill-embedding.helpers.test.d.ts +2 -0
  62. package/dist/helpers/skill-embedding.helpers.test.d.ts.map +1 -0
  63. package/dist/index.js +2 -2
  64. package/dist/models/Campaign.d.ts +10 -0
  65. package/dist/models/Campaign.d.ts.map +1 -0
  66. package/dist/models/CredentialSharePreview.d.ts +14 -0
  67. package/dist/models/CredentialSharePreview.d.ts.map +1 -0
  68. package/dist/models/Integration.d.ts +1 -1
  69. package/dist/models/Profile.d.ts.map +1 -1
  70. package/dist/models/campaign-constraints.d.ts +2 -0
  71. package/dist/models/campaign-constraints.d.ts.map +1 -0
  72. package/dist/models/index.d.ts +2 -0
  73. package/dist/models/index.d.ts.map +1 -1
  74. package/dist/publish-metafile.json +1 -1
  75. package/dist/routes/app-store.d.ts +1 -1
  76. package/dist/routes/app-store.d.ts.map +1 -1
  77. package/dist/routes/boosts.d.ts +24 -4
  78. package/dist/routes/boosts.d.ts.map +1 -1
  79. package/dist/routes/campaigns.d.ts +1411 -0
  80. package/dist/routes/campaigns.d.ts.map +1 -0
  81. package/dist/routes/contracts.d.ts +19 -6
  82. package/dist/routes/contracts.d.ts.map +1 -1
  83. package/dist/routes/credential-share-previews.d.ts +39 -0
  84. package/dist/routes/credential-share-previews.d.ts.map +1 -0
  85. package/dist/routes/credentials.d.ts +4 -1
  86. package/dist/routes/credentials.d.ts.map +1 -1
  87. package/dist/routes/inbox.d.ts +5 -5
  88. package/dist/routes/index.d.ts +4 -0
  89. package/dist/routes/index.d.ts.map +1 -1
  90. package/dist/routes/integrations.d.ts +3 -3
  91. package/dist/routes/profile-manager.d.ts +4 -0
  92. package/dist/routes/profile-manager.d.ts.map +1 -1
  93. package/dist/routes/profiles.d.ts +44 -0
  94. package/dist/routes/profiles.d.ts.map +1 -1
  95. package/dist/routes/skill-frameworks.d.ts +1 -0
  96. package/dist/routes/skill-frameworks.d.ts.map +1 -1
  97. package/dist/routes/skills-semantic-search.test.d.ts +2 -0
  98. package/dist/routes/skills-semantic-search.test.d.ts.map +1 -0
  99. package/dist/routes/skills.d.ts.map +1 -1
  100. package/dist/routes/test.d.ts +3 -1
  101. package/dist/routes/test.d.ts.map +1 -1
  102. package/dist/seed/seedSkillFrameworks.d.ts +1 -0
  103. package/dist/seed/seedSkillFrameworks.d.ts.map +1 -1
  104. package/dist/seed/seedSkillFrameworks.embeddings.test.d.ts +2 -0
  105. package/dist/seed/seedSkillFrameworks.embeddings.test.d.ts.map +1 -0
  106. package/dist/types/app-manifest.d.ts +2 -2
  107. package/dist/types/campaign.d.ts +19 -0
  108. package/dist/types/campaign.d.ts.map +1 -0
  109. package/dist/types/consentflowcontract.d.ts +1 -1
  110. package/dist/types/integration.d.ts +3 -3
  111. package/dist/types/profile.d.ts +9 -0
  112. package/dist/types/profile.d.ts.map +1 -1
  113. package/dist/types/skill.d.ts.map +1 -1
  114. package/package.json +21 -18
  115. package/project.json +15 -1
  116. package/scripts/skill-embeddings-backfill.ts +161 -0
  117. package/serverless-local.yml +4 -0
  118. package/serverless.function-env.cjs +3 -0
  119. package/serverless.local.yml +4 -0
  120. package/serverless.yml +12 -1
  121. package/src/accesslayer/campaign/README.md +174 -0
  122. package/src/accesslayer/campaign/audience.ts +152 -0
  123. package/src/accesslayer/campaign/create.ts +47 -0
  124. package/src/accesslayer/campaign/delete.ts +18 -0
  125. package/src/accesslayer/campaign/read.ts +125 -0
  126. package/src/accesslayer/campaign/shared.ts +92 -0
  127. package/src/accesslayer/campaign/state.ts +80 -0
  128. package/src/accesslayer/campaign/update.ts +50 -0
  129. package/src/accesslayer/credential-share-previews.ts +76 -0
  130. package/src/accesslayer/profile/delete.ts +6 -0
  131. package/src/accesslayer/skill/read.ts +56 -16
  132. package/src/accesslayer/skill/update.ts +43 -1
  133. package/src/app.ts +9 -0
  134. package/src/config/environment.test.ts +208 -0
  135. package/src/config/environment.ts +166 -11
  136. package/src/config/skillEmbedding.neo4j.test.ts +138 -0
  137. package/src/config/skillEmbedding.ts +202 -0
  138. package/src/constants/campaigns.ts +9 -0
  139. package/src/helpers/activity.helpers.ts +3 -3
  140. package/src/helpers/app-credential-delivery.helpers.test.ts +56 -0
  141. package/src/helpers/app-credential-delivery.helpers.ts +11 -0
  142. package/src/helpers/bedrock-embedding.helpers.test.ts +208 -0
  143. package/src/helpers/bedrock-embedding.helpers.ts +243 -0
  144. package/src/helpers/bedrock-embedding.smoke.test.ts +53 -0
  145. package/src/helpers/boost-storage.helpers.test.ts +63 -0
  146. package/src/helpers/boost.helpers.ts +23 -18
  147. package/src/helpers/sentry.helpers.test.ts +56 -0
  148. package/src/helpers/sentry.helpers.ts +4 -3
  149. package/src/helpers/skill-embedding.helpers.test.ts +1044 -0
  150. package/src/helpers/skill-embedding.helpers.ts +611 -123
  151. package/src/models/Campaign.ts +32 -0
  152. package/src/models/CredentialSharePreview.ts +30 -0
  153. package/src/models/Profile.ts +1 -0
  154. package/src/models/campaign-constraints.ts +22 -0
  155. package/src/models/index.ts +29 -1
  156. package/src/routes/app-store.ts +9 -16
  157. package/src/routes/campaigns.ts +179 -0
  158. package/src/routes/credential-share-previews.ts +74 -0
  159. package/src/routes/profiles.ts +7 -0
  160. package/src/routes/skills-semantic-search.test.ts +168 -0
  161. package/src/routes/skills.ts +42 -6
  162. package/src/seed/seedSkillFrameworks.embeddings.test.ts +82 -0
  163. package/src/seed/seedSkillFrameworks.test.ts +6 -0
  164. package/src/seed/seedSkillFrameworks.ts +83 -18
  165. package/src/types/campaign.ts +17 -0
  166. package/src/types/skill.ts +6 -0
  167. package/test/app-credential-delivery.neo4j.spec.ts +110 -0
  168. package/test/campaigns.spec.ts +789 -0
  169. package/test/credential-share-previews.spec.ts +97 -0
  170. package/test/verification/campaigns.ts +49 -0
  171. package/tsconfig.json +13 -13
  172. package/vitest.campaigns.config.ts +21 -0
  173. package/vitest.config.ts +12 -0
  174. package/vitest.inbox-e2e.config.ts +1 -0
  175. package/vitest.integration.config.ts +1 -0
package/.env.example CHANGED
@@ -27,12 +27,26 @@ SMART_RESUME_CLIENT_ID=
27
27
  SMART_RESUME_ACCESS_KEY=
28
28
  SMART_RESUME_CONTRACT_URI=
29
29
  APP_STORE_ADMIN_PROFILE_IDS=
30
+ CAMPAIGN_ADMIN_PROFILE_IDS=
30
31
  LOGIN_PROVIDER_DID=
31
32
  NOTIFICATIONS_SERVICE_WEBHOOK_URL=
32
33
  # Both checked-in stages enable credential refresh. Use independent, stable private secrets.
33
34
  CREDENTIAL_REFRESH_DIGEST_SECRET=local-only-replace-before-deploy-refresh-digest-secret
34
35
  SHARE_LINK_REQUEST_HASH_SECRET=local-only-replace-before-deploy-share-link-request-secret
35
36
 
37
+ # Skill embeddings (LC-2206): Amazon Nova 2 Multimodal Embeddings on Bedrock via SigV4 with
38
+ # your normal AWS credential chain (profile/SSO/role). Off by default; there is no API key.
39
+ # Deployed stages enable it in config/config.<stage>.json and only allow the reviewed values.
40
+ SKILL_EMBEDDING_BEDROCK_ENABLED=false
41
+ SKILL_EMBEDDING_BEDROCK_MODEL_ID=amazon.nova-2-multimodal-embeddings-v1:0
42
+ SKILL_EMBEDDING_BEDROCK_REGION=us-east-1
43
+ SKILL_EMBEDDING_DIMENSION=1024
44
+ # Semantic search reads the Nova index only when true; otherwise it reads the legacy Google
45
+ # 768-d index with Google query embeddings (needs SKILL_EMBEDDING_GOOGLE_API_KEY above). Nova
46
+ # writes follow SKILL_EMBEDDING_BEDROCK_ENABLED regardless. Flipping this back off is the rollback.
47
+ SKILL_EMBEDDING_BEDROCK_READ_ENABLED=false
48
+ # Opt-in paid smoke test against real Bedrock (never in CI): SKILL_EMBEDDING_BEDROCK_SMOKE=true
49
+
36
50
  # Local infrastructure. Explicit env overrides the selected stage; unset overrides you don't want.
37
51
  NODE_ENV=development
38
52
  IS_OFFLINE=true
package/AGENTS.md CHANGED
@@ -264,6 +264,22 @@ For certain workflows, such as sending a boost (credential) to another profile v
264
264
  - Document the expected flow, security implications, and how to set up signing authorities in both code and tests.
265
265
  - Prefer direct HTTP calls in E2E tests for service-only routes, and demonstrate signing authority setup in test code.
266
266
 
267
+ ### Credential delivery write ordering (LC-2312 / CI-20)
268
+
269
+ App-event issuance uses `sendAppCredentialWithActivity`: complete the activity graph
270
+ before starting `sendBoost`, and carry the returned activity ID into delivery.
271
+ `sendBoost` awaits each relationship write; creating promises up front reintroduces
272
+ parallel auto-commit writes and Neo4j relationship-chain contention. A listing issuer
273
+ already gets a listing `CREDENTIAL_SENT` edge from `createSentCredentialRelationship`;
274
+ only add explicit listing attribution when it names a different listing or the issuer
275
+ is a profile/integration. Preserve the owner-profile edge in every case.
276
+
277
+ This ordering removes contention within one send, not all possible contention between
278
+ independent requests. Do not retry signing, credential storage or notifications as one
279
+ unit to hide a graph failure. Focused tests cover ordering/failure boundaries, and
280
+ `test/app-credential-delivery.neo4j.spec.ts` verifies real graph counts and activity
281
+ correlation in both the integration and CI inbox configurations.
282
+
267
283
  ## Profile Connection Invites
268
284
 
269
285
  LearnCard supports creating and managing profile connection invitation links with single-use, multi-use, and unlimited usage, as well as optional expiration.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,59 @@
1
1
  # @learncard/network-brain-service
2
2
 
3
+ ## 4.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1887](https://github.com/learningeconomy/LearnCard/pull/1887) [`decc065dcc7ecf3a5aacd06850ed23356f528153`](https://github.com/learningeconomy/LearnCard/commit/decc065dcc7ecf3a5aacd06850ed23356f528153) Thanks [@TaylorBeeston](https://github.com/TaylorBeeston)! - Stop reporting expected `CONFLICT` tRPC errors (like re-consenting to a contract you've already consented to) to Sentry, the same way `BAD_REQUEST`, `NOT_FOUND` and `FORBIDDEN` are already filtered.
8
+
9
+ - [#1883](https://github.com/learningeconomy/LearnCard/pull/1883) [`9bca968ad4da81ce98674d0e1a3959956d7521ca`](https://github.com/learningeconomy/LearnCard/commit/9bca968ad4da81ce98674d0e1a3959956d7521ca) Thanks [@goblincore](https://github.com/goblincore)! - Sequence app credential activity and delivery graph writes to reduce Neo4j deadlocks, and avoid duplicate listing attribution when the listing is already the issuer.
10
+
11
+ - Updated dependencies [[`4ec92c41442b56341c1205e6ddd6ae784aecc990`](https://github.com/learningeconomy/LearnCard/commit/4ec92c41442b56341c1205e6ddd6ae784aecc990)]:
12
+ - @learncard/didkit-plugin@1.10.7
13
+ - @learncard/credential-library@2.1.4
14
+ - @learncard/didkit-plugin-node@0.3.7
15
+
16
+ ## 4.1.0
17
+
18
+ ### Minor Changes
19
+
20
+ - [#1785](https://github.com/learningeconomy/LearnCard/pull/1785) [`4fae096473fd0824be1dd6aefb4a783062377104`](https://github.com/learningeconomy/LearnCard/commit/4fae096473fd0824be1dd6aefb4a783062377104) Thanks [@gerardopar](https://github.com/gerardopar)! - Add campaign definitions, admin-managed metadata audiences, age-aware self-enrollment and shared engagement state. Expose typed campaign APIs and network plugin methods without enabling notification delivery or app rendering.
21
+
22
+ Campaign audiences always exclude profiles with missing, empty, or malformed birthdays. Self-enrollment requires a known adult birthday.
23
+
24
+ Require live or paused campaigns to be archived before deletion. Rejected campaign events leave profile properties unchanged, and audience metadata filters are limited to 20 keys.
25
+
26
+ - [#1730](https://github.com/learningeconomy/LearnCard/pull/1730) [`e0f4188b93fba5747f21cd50e0bd4a62fdf88d37`](https://github.com/learningeconomy/LearnCard/commit/e0f4188b93fba5747f21cd50e0bd4a62fdf88d37) Thanks [@TaylorBeeston](https://github.com/TaylorBeeston)! - Add Amazon Nova 2 Multimodal Embeddings on Bedrock (`amazon.nova-2-multimodal-embeddings-v1:0`, us-east-1, 1024-d) for skill matching, side by side with the legacy Google `gemini-embedding-001` (768-d) index. With `SKILL_EMBEDDING_BEDROCK_ENABLED`, new and updated skills get Nova vectors (`GENERIC_INDEX`) in a versioned Neo4j property and vector index, and a locked, resumable backfill (`skill-embeddings:backfill`) re-embeds existing skills; legacy Google writes continue unchanged. Semantic search keeps reading the legacy index with Google query embeddings until `SKILL_EMBEDDING_BEDROCK_READ_ENABLED=true` switches it to the Nova index with `TEXT_RETRIEVAL` query embeddings; setting it back to `false` is the rollback. Query-embedding cache keys are scoped by model (and, for Nova, dimension and scheme), so the two read paths never share cached vectors (LC-2206).
27
+
28
+ - [#1777](https://github.com/learningeconomy/LearnCard/pull/1777) [`d1708a1ce43f052862fedda2cf0d922a71ad1762`](https://github.com/learningeconomy/LearnCard/commit/d1708a1ce43f052862fedda2cf0d922a71ad1762) Thanks [@smurflo2](https://github.com/smurflo2)! - feat: [LC-2245] Add issuer LinkedIn organization IDs, stable certification IDs, and opt-in localized social previews. Keep each preview bound to one encrypted presentation so a new share does not replace an earlier card; refresh metadata in place and recreate deleted references. Audit publisher and creation/update times, support owner/profile cleanup, preserve decryptable card URLs, and isolate private updates to their exact share record.
29
+
30
+ Extract stable UUIDs from recognized LearnCard credential addresses to fit LinkedIn's certification ID field, retain other complete IDs only within the 80-character limit, and preserve family record identity independently of loaded pages. Use only eligible credential/achievement artwork for public previews, never recipient-photo fallbacks. Enable posting only after explicit preview publication succeeds and associate the disabled action with its consent explanation. Keep unresolved issuer placeholders out of LinkedIn organization names.
31
+
32
+ Keep the share-preview request type in a type-only network-plugin import so consumers using `verbatimModuleSyntax` can typecheck.
33
+
34
+ ### Patch Changes
35
+
36
+ - [#1785](https://github.com/learningeconomy/LearnCard/pull/1785) [`4fae096473fd0824be1dd6aefb4a783062377104`](https://github.com/learningeconomy/LearnCard/commit/4fae096473fd0824be1dd6aefb4a783062377104) Thanks [@gerardopar](https://github.com/gerardopar)! - feat(campaigns): add audience management and shared engagement state [LC-2265]
37
+
38
+ - [#1827](https://github.com/learningeconomy/LearnCard/pull/1827) [`11f18bde5808075df401e17d2b3cc40a0cdbdac7`](https://github.com/learningeconomy/LearnCard/commit/11f18bde5808075df401e17d2b3cc40a0cdbdac7) Thanks [@leif-squeak](https://github.com/apps/leif-squeak)! - Upgrade the pinned `zod` dependency to 4.6.6 to pick up the upstream security fix.
39
+
40
+ - Updated dependencies [[`4fae096473fd0824be1dd6aefb4a783062377104`](https://github.com/learningeconomy/LearnCard/commit/4fae096473fd0824be1dd6aefb4a783062377104), [`4fae096473fd0824be1dd6aefb4a783062377104`](https://github.com/learningeconomy/LearnCard/commit/4fae096473fd0824be1dd6aefb4a783062377104), [`d93c1b15856f341b4bd36415bf39052de9b6b198`](https://github.com/learningeconomy/LearnCard/commit/d93c1b15856f341b4bd36415bf39052de9b6b198), [`d1708a1ce43f052862fedda2cf0d922a71ad1762`](https://github.com/learningeconomy/LearnCard/commit/d1708a1ce43f052862fedda2cf0d922a71ad1762), [`11f18bde5808075df401e17d2b3cc40a0cdbdac7`](https://github.com/learningeconomy/LearnCard/commit/11f18bde5808075df401e17d2b3cc40a0cdbdac7)]:
41
+ - @learncard/types@5.24.0
42
+ - @learncard/didkit-plugin@1.10.6
43
+ - @learncard/credential-library@2.1.4
44
+ - @learncard/helpers@1.7.1
45
+ - @learncard/core@9.4.41
46
+ - @learncard/did-web-plugin@1.1.41
47
+ - @learncard/didkey-plugin@1.1.41
48
+ - @learncard/didkit-plugin-node@0.3.6
49
+ - @learncard/encryption-plugin@1.1.41
50
+ - @learncard/learn-card-plugin@1.2.41
51
+ - @learncard/vc-plugin@1.6.7
52
+ - @learncard/vc-templates-plugin@1.1.41
53
+ - @learncard/crypto-plugin@1.1.41
54
+ - @learncard/dynamic-loader-plugin@1.1.41
55
+ - @learncard/expiration-plugin@1.2.41
56
+
3
57
  ## 4.0.4
4
58
 
5
59
  ### Patch Changes
@@ -25,5 +25,10 @@
25
25
  "SHARE_LINK_MAINTENANCE_RECOVERY_LIMIT": "25",
26
26
  "SHARE_LINK_MAINTENANCE_REQUEST_TIMEOUT_MS": "10000",
27
27
  "SIGNING_AUTHORITY_ENDPOINT": "https://staging.api.learncard.app/api",
28
+ "SKILL_EMBEDDING_BEDROCK_ENABLED": "true",
29
+ "SKILL_EMBEDDING_BEDROCK_MODEL_ID": "amazon.nova-2-multimodal-embeddings-v1:0",
30
+ "SKILL_EMBEDDING_BEDROCK_READ_ENABLED": "false",
31
+ "SKILL_EMBEDDING_BEDROCK_REGION": "us-east-1",
32
+ "SKILL_EMBEDDING_DIMENSION": "1024",
28
33
  "SKILL_EMBEDDING_GOOGLE_MODEL": "gemini-embedding-001"
29
34
  }
@@ -25,5 +25,10 @@
25
25
  "SHARE_LINK_MAINTENANCE_RECOVERY_LIMIT": "25",
26
26
  "SHARE_LINK_MAINTENANCE_REQUEST_TIMEOUT_MS": "10000",
27
27
  "SIGNING_AUTHORITY_ENDPOINT": "https://api.example.com/api",
28
+ "SKILL_EMBEDDING_BEDROCK_ENABLED": "false",
29
+ "SKILL_EMBEDDING_BEDROCK_MODEL_ID": "amazon.nova-2-multimodal-embeddings-v1:0",
30
+ "SKILL_EMBEDDING_BEDROCK_READ_ENABLED": "false",
31
+ "SKILL_EMBEDDING_BEDROCK_REGION": "us-east-1",
32
+ "SKILL_EMBEDDING_DIMENSION": "1024",
28
33
  "SKILL_EMBEDDING_GOOGLE_MODEL": "gemini-embedding-001"
29
34
  }
@@ -25,5 +25,10 @@
25
25
  "SHARE_LINK_MAINTENANCE_RECOVERY_LIMIT": "25",
26
26
  "SHARE_LINK_MAINTENANCE_REQUEST_TIMEOUT_MS": "10000",
27
27
  "SIGNING_AUTHORITY_ENDPOINT": "https://api.learncard.app/api",
28
+ "SKILL_EMBEDDING_BEDROCK_ENABLED": "true",
29
+ "SKILL_EMBEDDING_BEDROCK_MODEL_ID": "amazon.nova-2-multimodal-embeddings-v1:0",
30
+ "SKILL_EMBEDDING_BEDROCK_READ_ENABLED": "false",
31
+ "SKILL_EMBEDDING_BEDROCK_REGION": "us-east-1",
32
+ "SKILL_EMBEDDING_DIMENSION": "1024",
28
33
  "SKILL_EMBEDDING_GOOGLE_MODEL": "gemini-embedding-001"
29
34
  }
@@ -20,5 +20,10 @@
20
20
  "SHARE_LINK_MAINTENANCE_RECOVERY_LIMIT": "25",
21
21
  "SHARE_LINK_MAINTENANCE_REQUEST_TIMEOUT_MS": "10000",
22
22
  "SIGNING_AUTHORITY_ENDPOINT": "https://staging.api.scoutnetwork.org/api",
23
+ "SKILL_EMBEDDING_BEDROCK_ENABLED": "true",
24
+ "SKILL_EMBEDDING_BEDROCK_MODEL_ID": "amazon.nova-2-multimodal-embeddings-v1:0",
25
+ "SKILL_EMBEDDING_BEDROCK_READ_ENABLED": "false",
26
+ "SKILL_EMBEDDING_BEDROCK_REGION": "us-east-1",
27
+ "SKILL_EMBEDDING_DIMENSION": "1024",
23
28
  "SKILL_EMBEDDING_GOOGLE_MODEL": "gemini-embedding-001"
24
29
  }
@@ -20,5 +20,10 @@
20
20
  "SHARE_LINK_MAINTENANCE_RECOVERY_LIMIT": "25",
21
21
  "SHARE_LINK_MAINTENANCE_REQUEST_TIMEOUT_MS": "10000",
22
22
  "SIGNING_AUTHORITY_ENDPOINT": "https://api.scoutnetwork.org/api",
23
+ "SKILL_EMBEDDING_BEDROCK_ENABLED": "true",
24
+ "SKILL_EMBEDDING_BEDROCK_MODEL_ID": "amazon.nova-2-multimodal-embeddings-v1:0",
25
+ "SKILL_EMBEDDING_BEDROCK_READ_ENABLED": "false",
26
+ "SKILL_EMBEDDING_BEDROCK_REGION": "us-east-1",
27
+ "SKILL_EMBEDDING_DIMENSION": "1024",
23
28
  "SKILL_EMBEDDING_GOOGLE_MODEL": "gemini-embedding-001"
24
29
  }
@@ -0,0 +1,7 @@
1
+ import { type CampaignAudienceSource, type PaginatedCampaignAudience } from '@learncard/types';
2
+ import type { CampaignAudienceQuery } from '../../types/campaign';
3
+ export declare const buildCampaignAudienceQuery: (rawSource: CampaignAudienceSource, domain: string) => CampaignAudienceQuery;
4
+ export declare const previewCampaignAudience: (campaignId: string, source: CampaignAudienceSource, domain: string) => Promise<number>;
5
+ export declare const addCampaignAudience: (campaignId: string, source: CampaignAudienceSource, domain: string) => Promise<number>;
6
+ export declare const pageCampaignAudience: (campaignId: string, cursor?: string, limit?: number) => Promise<PaginatedCampaignAudience>;
7
+ //# sourceMappingURL=audience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/campaign/audience.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EACjC,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAgB5D,eAAO,MAAM,0BAA0B,GACnC,WAAW,sBAAsB,EACjC,QAAQ,MAAM,KACf,qBA4DF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,YAAY,MAAM,EAClB,QAAQ,sBAAsB,EAC9B,QAAQ,MAAM,KACf,OAAO,CAAC,MAAM,CAWhB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC5B,YAAY,MAAM,EAClB,QAAQ,sBAAsB,EAC9B,QAAQ,MAAM,KACf,OAAO,CAAC,MAAM,CAchB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,YAAY,MAAM,EAClB,SAAS,MAAM,EACf,cAAW,KACZ,OAAO,CAAC,yBAAyB,CAiBnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Campaign, type CreateCampaignInput } from '@learncard/types';
2
+ export declare const createCampaign: (input: CreateCampaignInput, createdByProfileId: string) => Promise<Campaign>;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/campaign/create.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,KAAK,QAAQ,EACb,KAAK,mBAAmB,EAC3B,MAAM,kBAAkB,CAAC;AAO1B,eAAO,MAAM,cAAc,GACvB,OAAO,mBAAmB,EAC1B,oBAAoB,MAAM,KAC3B,OAAO,CAAC,QAAQ,CA8BlB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const deleteCampaign: (campaignId: string) => Promise<boolean>;
2
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/campaign/delete.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,OAAO,CAanE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type Campaign, type CampaignStats, type ListCampaignsInput, type MyCampaign, type PaginatedCampaigns } from '@learncard/types';
2
+ export declare const getCampaign: (campaignId: string) => Promise<Campaign>;
3
+ export declare const listCampaigns: ({ cursor, limit, status, }: ListCampaignsInput) => Promise<PaginatedCampaigns>;
4
+ export declare const getLiveCampaignsForProfile: (profileId: string, now?: Date) => Promise<MyCampaign[]>;
5
+ export declare const getCampaignStats: (campaignId: string) => Promise<CampaignStats>;
6
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/campaign/read.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,kBAAkB,EAC1B,MAAM,kBAAkB,CAAC;AAY1B,eAAO,MAAM,WAAW,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,QAAQ,CAUtE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,4BAIjC,kBAAkB,KAAG,OAAO,CAAC,kBAAkB,CAajD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACnC,WAAW,MAAM,EACjB,UAAgB,KACjB,OAAO,CAAC,UAAU,EAAE,CAwCtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,aAAa,CA2BhF,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type Campaign } from '@learncard/types';
2
+ import type { ManagedTransaction } from 'neo4j-driver';
3
+ export declare const adultProfilePredicate = "p.dob IS NOT NULL\n AND p.dob =~ '[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])'\n AND coalesce(p.type, '') <> 'child' AND p.dob <= $adultCutoff\n AND ((p.isServiceProfile = true AND coalesce(p.type, '') <> 'child') OR NOT (EXISTS { MATCH (p)-[:MANAGED_BY]->(:Profile) }\n OR EXISTS { MATCH (:ProfileManager)-[:MANAGES]->(p) }))";
4
+ export declare const campaignAgePredicate = "(p.dob IS NOT NULL\n AND p.dob =~ '[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])'\n AND (c.excludeMinors = false OR (p.dob IS NOT NULL\n AND p.dob =~ '[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])'\n AND coalesce(p.type, '') <> 'child' AND p.dob <= $adultCutoff\n AND ((p.isServiceProfile = true AND coalesce(p.type, '') <> 'child') OR NOT (EXISTS { MATCH (p)-[:MANAGED_BY]->(:Profile) }\n OR EXISTS { MATCH (:ProfileManager)-[:MANAGES]->(p) })))))";
5
+ export declare const liveCampaignPredicate = "c.status = 'live'\n AND (c.startsAt IS NULL OR c.startsAt <= $now)\n AND (c.endsAt IS NULL OR c.endsAt > $now)";
6
+ export declare const campaignTimeParams: (now?: Date) => {
7
+ now: string;
8
+ adultCutoff: string;
9
+ };
10
+ export declare const parseCampaign: (definition: string) => Campaign;
11
+ export declare const safeParseCampaign: (definition: unknown) => Campaign | undefined;
12
+ export declare const campaignProperties: (campaign: Campaign) => Record<string, unknown>;
13
+ export declare const withCampaignTransaction: <Result>(name: string, work: (transaction: ManagedTransaction) => Promise<Result>) => Promise<Result>;
14
+ export declare const lockCampaign: (transaction: ManagedTransaction, campaignId: string) => Promise<Campaign>;
15
+ export declare const assertCampaignEditable: (campaign: Campaign) => void;
16
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/campaign/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAUvD,eAAO,MAAM,qBAAqB,6VAEqC,CAAC;AACxE,eAAO,MAAM,oBAAoB,+dACgC,CAAC;AAClE,eAAO,MAAM,qBAAqB,yHAEY,CAAC;AAE/C,eAAO,MAAM,kBAAkB,GAAI,UAAgB,KAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAMvF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,YAAY,MAAM,KAAG,QACA,CAAC;AAEpD,eAAO,MAAM,iBAAiB,GAAI,YAAY,OAAO,KAAG,QAAQ,GAAG,SAQlE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAW5E,CAAC;AAEH,eAAO,MAAM,uBAAuB,GAAU,MAAM,EAChD,MAAM,MAAM,EACZ,MAAM,CAAC,WAAW,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,KAC3D,OAAO,CAAC,MAAM,CAQX,CAAC;AAGP,eAAO,MAAM,YAAY,GACrB,aAAa,kBAAkB,EAC/B,YAAY,MAAM,KACnB,OAAO,CAAC,QAAQ,CAUlB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,UAAU,QAAQ,KAAG,IAO3D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type CampaignEvent } from '@learncard/types';
2
+ export declare const enrollInCampaign: (profileId: string, campaignId: string) => Promise<boolean>;
3
+ export declare const recordCampaignEvent: (profileId: string, campaignId: string, rawEvent: CampaignEvent) => Promise<boolean>;
4
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/campaign/state.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAW9E,eAAO,MAAM,gBAAgB,GAAU,WAAW,MAAM,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,OAAO,CA+BxF,CAAC;AAEP,eAAO,MAAM,mBAAmB,GAC5B,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,UAAU,aAAa,KACxB,OAAO,CAAC,OAAO,CA8BjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Campaign, type UpdateCampaignInput } from '@learncard/types';
2
+ export declare const updateCampaign: (input: UpdateCampaignInput) => Promise<Campaign>;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/campaign/update.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,KAAK,QAAQ,EACb,KAAK,mBAAmB,EAC3B,MAAM,kBAAkB,CAAC;AAS1B,eAAO,MAAM,cAAc,GAAU,OAAO,mBAAmB,KAAG,OAAO,CAAC,QAAQ,CAkCjF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CredentialSharePreview as Preview, PublishCredentialSharePreview } from '@learncard/types';
2
+ export declare const createCredentialSharePreview: (ownerProfileId: string, input: PublishCredentialSharePreview) => Promise<string | null>;
3
+ export declare const getCredentialSharePreview: (id: string, shareUri: string) => Promise<Preview | null>;
4
+ export declare const deleteCredentialSharePreview: (ownerProfileId: string, id: string) => Promise<boolean>;
5
+ //# sourceMappingURL=credential-share-previews.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-share-previews.d.ts","sourceRoot":"","sources":["../../src/accesslayer/credential-share-previews.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACR,sBAAsB,IAAI,OAAO,EACjC,6BAA6B,EAChC,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,4BAA4B,GACrC,gBAAgB,MAAM,EACtB,OAAO,6BAA6B,KACrC,OAAO,CAAC,MAAM,GAAG,IAAI,CA+BvB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAClC,IAAI,MAAM,EACV,UAAU,MAAM,KACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAcxB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACrC,gBAAgB,MAAM,EACtB,IAAI,MAAM,KACX,OAAO,CAAC,OAAO,CAOjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/profile/delete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,aAAa,GAAU,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CA0BtE,CAAC"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/profile/delete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,aAAa,GAAU,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAgCtE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { FlatSkillType, SkillType } from '../../types/skill';
2
2
  import type { SkillQuery } from '@learncard/types';
3
+ import type { SkillEmbeddingGeneration, SkillEmbeddingSearchIndex } from '../../config/skillEmbedding';
3
4
  export declare const doesProfileManageSkill: (profileId: string, skillId: string) => Promise<boolean>;
4
5
  export declare const doesProfileManageSkillInFramework: (profileId: string, frameworkId: string, skillId: string) => Promise<boolean>;
5
6
  export declare const getFrameworkIdsForSkill: (skillId: string) => Promise<string[]>;
@@ -30,6 +31,15 @@ export type SkillEmbeddingSearchResult = {
30
31
  skill: FlatSkillType;
31
32
  score: number;
32
33
  };
33
- export declare const searchSkillsByEmbedding: (embedding: number[], limit: number, frameworkId?: string) => Promise<SkillEmbeddingSearchResult[]>;
34
- export declare const getSkillsMissingEmbedding: (limit: number, cursorId?: string | null) => Promise<Paginated<FlatSkillType>>;
34
+ export declare const searchSkillsByEmbedding: (embedding: number[], limit: number, frameworkId: string | undefined, index: Pick<SkillEmbeddingSearchIndex, "indexName" | "dimension">) => Promise<SkillEmbeddingSearchResult[]>;
35
+ export type SkillEmbeddingCandidate = {
36
+ id: string;
37
+ frameworkId?: string;
38
+ statement: string;
39
+ description?: string | null;
40
+ code?: string | null;
41
+ embeddingKey: string | null;
42
+ hasEmbedding: boolean;
43
+ };
44
+ export declare const getSkillEmbeddingCandidates: (generation: SkillEmbeddingGeneration, limit: number, cursorId?: string | null) => Promise<Paginated<SkillEmbeddingCandidate>>;
35
45
  //# sourceMappingURL=read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/skill/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/skill/read.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,19 @@
1
1
  import type { FlatSkillType } from '../../types/skill';
2
+ import { type SkillEmbeddingGeneration, type SkillEmbeddingSource } from '../../config/skillEmbedding';
2
3
  export type UpdateSkillInput = Partial<Omit<FlatSkillType, 'id' | 'frameworkId' | 'createdAt' | 'updatedAt' | 'parentId'>>;
3
4
  export declare const updateSkill: (frameworkId: string, skillId: string, input: UpdateSkillInput) => Promise<FlatSkillType>;
4
5
  export declare const deleteSkill: (frameworkId: string, skillId: string, strategy?: "recursive" | "reparent") => Promise<{
5
6
  success: boolean;
6
7
  deletedCount: number;
7
8
  }>;
8
- export declare const updateSkillEmbedding: (skillId: string, embedding: number[], frameworkId?: string) => Promise<boolean>;
9
+ export type SkillEmbeddingUpdate = {
10
+ skillId: string;
11
+ frameworkId?: string;
12
+ embedding: number[];
13
+ embeddingKey: string;
14
+ generation: SkillEmbeddingGeneration;
15
+ source: SkillEmbeddingSource;
16
+ };
17
+ export declare const updateSkillEmbedding: (update: SkillEmbeddingUpdate) => Promise<boolean>;
18
+ export declare const updateLegacySkillEmbedding: (skillId: string, embedding: number[], frameworkId?: string) => Promise<boolean>;
9
19
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/skill/update.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAClC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,CACrF,CAAC;AA6BF,eAAO,MAAM,WAAW,GACpB,aAAa,MAAM,EACnB,SAAS,MAAM,EACf,OAAO,gBAAgB,KACxB,OAAO,CAAC,aAAa,CA2CvB,CAAC;AAEF,eAAO,MAAM,WAAW,GACpB,aAAa,MAAM,EACnB,SAAS,MAAM,EACf,WAAU,WAAW,GAAG,UAAuB,KAChD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAiEpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,SAAS,MAAM,EACf,WAAW,MAAM,EAAE,EACnB,cAAc,MAAM,KACrB,OAAO,CAAC,OAAO,CAoBjB,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/accesslayer/skill/update.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAIH,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EAC5B,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAClC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,CACrF,CAAC;AA6BF,eAAO,MAAM,WAAW,GACpB,aAAa,MAAM,EACnB,SAAS,MAAM,EACf,OAAO,gBAAgB,KACxB,OAAO,CAAC,aAAa,CA2CvB,CAAC;AAEF,eAAO,MAAM,WAAW,GACpB,aAAa,MAAM,EACnB,SAAS,MAAM,EACf,WAAU,WAAW,GAAG,UAAuB,KAChD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAiEpD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,wBAAwB,CAAC;IAErC,MAAM,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAAU,QAAQ,oBAAoB,KAAG,OAAO,CAAC,OAAO,CAaxF,CAAC;AAMF,eAAO,MAAM,0BAA0B,GACnC,SAAS,MAAM,EACf,WAAW,MAAM,EAAE,EACnB,cAAc,MAAM,KACrB,OAAO,CAAC,OAAO,CAwBjB,CAAC"}
package/dist/app.d.ts CHANGED
@@ -17,10 +17,12 @@ import { SkillFrameworksRouter } from './routes/skill-frameworks';
17
17
  import { SkillsRouter } from './routes/skills';
18
18
  import { IntegrationsRouter } from './routes/integrations';
19
19
  import { AppStoreRouter } from './routes/app-store';
20
+ import { CampaignsRouter } from './routes/campaigns';
20
21
  import { ActivityRouter } from './routes/activity';
21
22
  import { FederationRouter } from './routes/federation';
22
23
  import { ShareLinksRouter } from './routes/share-links';
23
24
  import { PublicShareLinksRouter } from './routes/public-share-links';
25
+ import { CredentialSharePreviewsRouter } from './routes/credential-share-previews';
24
26
  import { TestRouter } from './routes/test';
25
27
  import { BenchRouter } from './routes/bench';
26
28
  export { createContext } from './routes/index';
@@ -49,10 +51,12 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
49
51
  skills: SkillsRouter;
50
52
  integrations: IntegrationsRouter;
51
53
  appStore: AppStoreRouter;
54
+ campaigns: CampaignsRouter;
52
55
  activity: ActivityRouter;
53
56
  federation: FederationRouter;
54
57
  shareLinks: ShareLinksRouter;
55
58
  publicShareLinks: PublicShareLinksRouter;
59
+ credentialSharePreviews: CredentialSharePreviewsRouter;
56
60
  test?: TestRouter;
57
61
  bench?: BenchRouter;
58
62
  }>>;
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAoB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAkB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAyB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAqB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAA6B,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAuB,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAiB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAmB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAmB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAqB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAoB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAmB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAwB,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAyB,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAgB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAsB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAkB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAkB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAoB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAoB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAA0B,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAG5F,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,SAAS;;;;;;WACX,YAAY;eACR,gBAAgB;aAClB,cAAc;oBACP,qBAAqB;gBACzB,iBAAiB;uBACV,yBAAyB;kBAC9B,mBAAmB;aACxB,aAAa;eACX,eAAe;eACf,eAAe;iBACb,iBAAiB;gBAClB,gBAAgB;eACjB,eAAe;oBACV,oBAAoB;WAC7B,WAAW;qBACD,qBAAqB;YAC9B,YAAY;kBACN,kBAAkB;cACtB,cAAc;cACd,cAAc;gBACZ,gBAAgB;gBAChB,gBAAgB;sBACV,sBAAsB;WACjC,UAAU;YACT,WAAW;GA2BrB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAoB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAkB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAyB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAqB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAA6B,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAuB,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAiB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAmB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAmB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAqB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAoB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAmB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAwB,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAyB,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAgB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAsB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAkB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAmB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAkB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAoB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAoB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAA0B,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAEH,6BAA6B,EAChC,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,SAAS;;;;;;WACX,YAAY;eACR,gBAAgB;aAClB,cAAc;oBACP,qBAAqB;gBACzB,iBAAiB;uBACV,yBAAyB;kBAC9B,mBAAmB;aACxB,aAAa;eACX,eAAe;eACf,eAAe;iBACb,iBAAiB;gBAClB,gBAAgB;eACjB,eAAe;oBACV,oBAAoB;WAC7B,WAAW;qBACD,qBAAqB;YAC9B,YAAY;kBACN,kBAAkB;cACtB,cAAc;eACb,eAAe;cAChB,cAAc;gBACZ,gBAAgB;gBAChB,gBAAgB;sBACV,sBAAsB;6BACf,6BAA6B;WAC/C,UAAU;YACT,WAAW;GA6BrB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
@@ -82,7 +82,7 @@ export declare const getIntegrationForListingCached: (listingId: string) => Prom
82
82
  name: string;
83
83
  publishableKey: string;
84
84
  whitelistedDomains: string[];
85
- status: "active" | "setup" | "paused";
85
+ status: "active" | "paused" | "setup";
86
86
  description?: string | undefined;
87
87
  guideType?: string | undefined;
88
88
  guideState?: Record<string, any> | undefined;
@@ -102,6 +102,7 @@ export declare const getOwnerProfileForIntegrationCached: (integrationId: string
102
102
  email?: string | undefined;
103
103
  image?: string | undefined;
104
104
  heroImage?: string | undefined;
105
+ linkedInOrganizationId?: string | undefined;
105
106
  websiteLink?: string | undefined;
106
107
  isServiceProfile?: boolean | undefined;
107
108
  type?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"app-store.caches.d.ts","sourceRoot":"","sources":["../../src/cache/app-store.caches.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAmCnE,eAAO,MAAM,wBAAwB,GACjC,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,QAAQ,MAAM;;;;SAQjB,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACvC,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,QAAQ,MAAM,SAGjB,CAAC;AAEF,eAAO,MAAM,6CAA6C,GACtD,WAAW,MAAM,EACjB,WAAW,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAQpB,CAAC;AAEF,eAAO,MAAM,mDAAmD,GAC5D,WAAW,MAAM,EACjB,WAAW,MAAM,SAGpB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAU,WAAW,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;SAMpE,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAU,WAAW,MAAM;;;;;;;;;;;SAMrE,CAAC;AAEF,eAAO,MAAM,mCAAmC,GAAU,eAAe,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAM9E,CAAC;AAEF,eAAO,MAAM,0CAA0C,GAAU,SAAS,mBAAmB;;;;;;;;;cAO5F,CAAC;AAEF,eAAO,MAAM,sCAAsC,GAAI,WAAW,MAAM,SAEvE,CAAC;AAEF,eAAO,MAAM,8CAA8C,GAAU,eAAe,MAAM;;;;;;;;;cAMzF,CAAC"}
1
+ {"version":3,"file":"app-store.caches.d.ts","sourceRoot":"","sources":["../../src/cache/app-store.caches.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAmCnE,eAAO,MAAM,wBAAwB,GACjC,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,QAAQ,MAAM;;;;SAQjB,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACvC,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,QAAQ,MAAM,SAGjB,CAAC;AAEF,eAAO,MAAM,6CAA6C,GACtD,WAAW,MAAM,EACjB,WAAW,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAQpB,CAAC;AAEF,eAAO,MAAM,mDAAmD,GAC5D,WAAW,MAAM,EACjB,WAAW,MAAM,SAGpB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAU,WAAW,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;SAMpE,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAU,WAAW,MAAM;;;;;;;;;;;SAMrE,CAAC;AAEF,eAAO,MAAM,mCAAmC,GAAU,eAAe,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAM9E,CAAC;AAEF,eAAO,MAAM,0CAA0C,GAAU,SAAS,mBAAmB;;;;;;;;;cAO5F,CAAC;AAEF,eAAO,MAAM,sCAAsC,GAAI,WAAW,MAAM,SAEvE,CAAC;AAEF,eAAO,MAAM,8CAA8C,GAAU,eAAe,MAAM;;;;;;;;;cAMzF,CAAC"}